Example #1
0
        private static List <GistLink> GetGistLinks(string gistId, string name)
        {
            var gistsIndex = GitHubUtils.Gateway.GetGistFiles(gistId)
                             .FirstOrDefault(x => x.Key == name);

            if (gistsIndex.Key == null)
            {
                throw new NotSupportedException($"Could not find '{name}' file in gist '{GistLinksId}'");
            }

            return(GistLinksCache.GetOrAdd(gistId + ":" + name, key => {
                var links = GistLink.Parse(gistsIndex.Value);
                return links;
            }));
        }
Example #2
0
        public static bool ApplyGists(string tool, string[] gistAliases)
        {
            var links = GetGistApplyLinks();

            var hasNums = gistAliases.Any(x => int.TryParse(x, out _));

            if (hasNums)
            {
                var resolvedAliases = new List <string>();
                foreach (var gistAlias in gistAliases)
                {
                    if (!int.TryParse(gistAlias, out var index))
                    {
                        resolvedAliases.Add(gistAlias);
                        continue;
                    }

                    if (index <= 0 || index > links.Count)
                    {
                        throw new ArgumentOutOfRangeException($"Invalid Index '{index}'. Valid Range: 1...{links.Count - 1}");
                    }

                    resolvedAliases.Add(links[index - 1].Name);
                }
                gistAliases = resolvedAliases.ToArray();
            }

            foreach (var gistAlias in gistAliases)
            {
                var gistLink = GistLink.Get(links, gistAlias);
                if (gistLink == null)
                {
                    $"No match found for '{gistAlias}', available gists:".Print();
                    PrintGistLinks(tool, links);
                    return(false);
                }

                var currentDirName = new DirectoryInfo(Environment.CurrentDirectory).Name;
                WriteGistFile(gistLink.Url, gistAlias, to: gistLink.To, projectName: currentDirName, getUserApproval: UserInputYesNo);
                ForceApproval = true; //If written once user didn't cancel, assume approval for remaining gists
            }
            return(true);
        }
Example #3
0
        public static List <GistLink> Parse(string md)
        {
            var to = new List <GistLink>();

            if (!string.IsNullOrEmpty(md))
            {
                foreach (var strLine in md.ReadLines())
                {
                    var line = strLine.AsSpan();
                    if (!line.TrimStart().StartsWith("- ["))
                    {
                        continue;
                    }

                    line.SplitOnFirst('[', out _, out var startName);
                    startName.SplitOnFirst(']', out var name, out var endName);
                    endName.SplitOnFirst('(', out _, out var startUrl);
                    startUrl.SplitOnFirst(')', out var url, out var endUrl);

                    var afterModifiers = endUrl.ParseJsToken(out var token);

                    var modifiers = new Dictionary <string, object>();
                    if (token is JsObjectExpression obj)
                    {
                        foreach (var jsProperty in obj.Properties)
                        {
                            if (jsProperty.Key is JsIdentifier id)
                            {
                                modifiers[id.Name] = (jsProperty.Value as JsLiteral)?.Value;
                            }
                        }
                    }

                    var toPath = modifiers.TryGetValue("to", out var oValue)
                        ? oValue.ToString()
                        : null;

                    string tags = null;
                    afterModifiers = afterModifiers.TrimStart();
                    if (afterModifiers.StartsWith("`"))
                    {
                        afterModifiers = afterModifiers.Advance(1);
                        var pos = afterModifiers.IndexOf('`');
                        if (pos >= 0)
                        {
                            tags           = afterModifiers.Substring(0, pos);
                            afterModifiers = afterModifiers.Advance(pos + 1);
                        }
                    }

                    if (name == null || url == null)
                    {
                        continue;
                    }

                    var link = new GistLink
                    {
                        Name        = name.ToString(),
                        Url         = url.ToString(),
                        Modifiers   = modifiers,
                        To          = toPath,
                        Description = afterModifiers.Trim().ToString(),
                        User        = url.Substring("https://".Length).RightPart('/').LeftPart('/'),
                        Tags        = tags?.Split(',').Map(x => x.Trim()).ToArray(),
                    };

                    if (TryParseGitHubUrl(link.Url, out var gistId, out var user, out var repo))
                    {
                        link.GistId = gistId;
                        if (user != null)
                        {
                            link.User = user;
                            link.Repo = repo;
                        }
                    }

                    if (link.User == "gistlyn" || link.User == "mythz")
                    {
                        link.User = "******";
                    }

                    to.Add(link);
                }
            }

            return(to);
        }
Example #4
0
            public static List <GistLink> Parse(string md)
            {
                var to = new List <GistLink>();

                if (!string.IsNullOrEmpty(md))
                {
                    foreach (var strLine in md.ReadLines())
                    {
                        var line = strLine.AsSpan();
                        if (!line.TrimStart().StartsWith("- ["))
                        {
                            continue;
                        }

                        line.SplitOnFirst('[', out _, out var startName);
                        startName.SplitOnFirst(']', out var name, out var endName);
                        endName.SplitOnFirst('(', out _, out var startUrl);
                        startUrl.SplitOnFirst(')', out var url, out var endUrl);

                        var afterModifiers = endUrl.ParseJsToken(out var token);

                        var toPath =
                            (token is JsObjectExpression obj
                                ? obj.Properties.FirstOrDefault(x => x.Key is JsIdentifier key && key.Name == "to")
                             ?.Value as JsLiteral
                                : null)?.Value?.ToString();

                        string tags = null;
                        afterModifiers = afterModifiers.TrimStart();
                        if (afterModifiers.StartsWith("`"))
                        {
                            afterModifiers = afterModifiers.Advance(1);
                            var pos = afterModifiers.IndexOf('`');
                            tags           = afterModifiers.Substring(0, pos);
                            afterModifiers = afterModifiers.Advance(pos + 1);
                        }

                        if (name == null || toPath == null || url == null)
                        {
                            continue;
                        }

                        var link = new GistLink {
                            Name        = name.ToString(),
                            Url         = url.ToString(),
                            To          = toPath,
                            Description = afterModifiers.Trim().ToString(),
                            User        = url.LastLeftPart('/').LastRightPart('/').ToString(),
                            Tags        = tags?.Split(',').Map(x => x.Trim()).ToArray(),
                        };

                        if (link.User == "gistlyn" || link.User == "mythz")
                        {
                            link.User = "******";
                        }

                        to.Add(link);
                    }
                }

                return(to);
            }