Exemple #1
0
        public IAsyncEnumerable <IssueResponse[]> GetIssues(string repoName, int maxNumber = int.MaxValue, CancellationToken cancellationToken = default)
        {
            var builder       = new QueryBuilder(DtoConversion.ToDictionary(new IssuesRequest()));
            var requestString = string.Concat($"repos/{repoName}/issues", builder.ToString());

            async Task <IssueResponse[]> IssueProcessing(IssueResponse[] issues)
            {
                foreach (var issue in issues.Where(i => i.CommentsCount > 0))
                {
                    issue.Comments = new List <CommentResponse>();
                    await foreach (var comments in GetList <CommentResponse>(issue.CommentsUrl, maxNumber, cancellationToken))
                    {
                        issue.Comments.AddRange(comments);
                    }
                }
                return(issues.Where(i => !i.Labels.Any(l => l.Name == "auto-merge")).ToArray());
            }

            return(GetList <IssueResponse>(requestString, maxNumber, cancellationToken, IssueProcessing));
        }
Exemple #2
0
        public IAsyncEnumerable <IssueResponse[]> GetIssues(string repoName, int maxNumber = int.MaxValue, Func <IssueResponse, bool>?validateIssue = null, CancellationToken cancellationToken = default)
        {
            var builder       = new QueryBuilder(DtoConversion.ToDictionary(new IssuesRequest()));
            var requestString = string.Concat($"repos/{repoName}/issues", builder.ToString());

            async Task <IssueResponse[]> IssueProcessing(IssueResponse[] issues)
            {
                var issueQuery = issues.Where(i => !i.IsPullRequest && validateIssue?.Invoke(i) != false).AsQueryable();

                foreach (var issue in issueQuery.Where(i => i.CommentsCount > 0))
                {
                    issue.Comments = new List <CommentResponse>();
                    await foreach (var comments in GetList <CommentResponse>(issue.CommentsUrl, maxNumber, cancellationToken))
                    {
                        issue.Comments.AddRange(comments);
                    }
                }
                return(issueQuery.ToArray());
            }

            return(GetList <IssueResponse>(requestString, maxNumber, cancellationToken, IssueProcessing));
        }