void HandlePullRequest(PullRequest pr)
        {
            if (Usernames.Length > 0 && !Usernames.Contains(pr.User.Login))
            {
                return;
            }

            if (pr.State == ItemState.Open)
            {
                if (PullRequests.ContainsKey(pr))
                {
                    return;
                }

                PullRequests.Add(pr, new OpenUrlAction {
                    Url = pr.HtmlUrl.OriginalString,
                    ShortDescription = $"Review {pr.Title}",
                    Tooltip          = $"Review pull request in {Repository.Owner}/{Repository.Name}, created by {pr.User.Login}"
                });
            }
            else
            {
                if (!PullRequests.Remove(pr))
                {
                    return;
                }
            }

            Actions = PullRequests.Values.ToArray();
        }
示例#2
0
        async Task GetPullRequestViewsByJiraNumber(ItemState?state, DateRange searchDates, IList <string> repoNames, string jiraIssueNumber)
        {
            try
            {
                var hasNewRequests = false;

                var searchResults = await SearchPullRequests(state, searchDates, repoNames, jiraIssueNumber);

                // Gets general info on each Pull Request.
                var existingRequestIds = PullRequests.Select(r => r.Id).ToList();

                foreach (var request in searchResults.Items)
                {
                    var repositoryName = request.PullRequest.HtmlUrl.Segments[2].TrimEnd('/');

                    var pullRequest = PullRequests.FirstOrDefault(r => r.Id == request.Number);
                    if (null == pullRequest)
                    {
                        pullRequest = GetNewPullRequestView(request);
                        // Get detailed info on each Pull Request.
                        pullRequest = await GetPullRequestDetails(request, pullRequest);

                        PullRequests.Add(pullRequest);
                        if (pullRequest.State == ItemState.Open)
                        {
                            hasNewRequests = true;
                        }
                    }
                    else // already had a copy in our list.. update it
                    {
                        existingRequestIds.Remove(request.Number);
                        if (pullRequest.Updated != request.UpdatedAt.GetValueOrDefault())
                        {
                            pullRequest = await GetPullRequestDetails(request, pullRequest);
                        }
                        if (pullRequest.JiraIssues.Count == 0)
                        {
                            pullRequest = await GetPullRequestDetails(request, pullRequest);
                        }
                    }
                }

                foreach (var requestToRemove in PullRequests.Where(r => existingRequestIds.Contains(r.Id)).ToList())
                {
                    PullRequests.Remove(requestToRemove);
                }

                if (hasNewRequests)
                {
                    OnNewPullRequest();
                }

                OnGetPullRequestsComplete();
            }
            catch (Exception ex)
            {
                ExceptionHandler(ex);
            }
        }
 public void Update()
 {
     PullRequests.Clear();
     foreach (var pullRequest in Model.Values.OrderBy(pr => pr.Id))
     {
         PullRequests.Add(new PullRequestViewModel(pullRequest));
     }
 }
示例#4
0
        private void GetItems()
        {
            foreach (var item in MasterPullRequests.Skip(Skip).Take(PageSize * Increment).ToList())
            {
                PullRequests.Add(item);
            }
            Skip += PageSize;
            PageSize++;

            OpenLabel   = MasterPullRequests.Count(c => c.State == ItemState.Open) + " open";
            ClosedLabel = " / " + MasterPullRequests.Count(c => c.State == ItemState.Open) + " closed";
        }
示例#5
0
        /// <summary>
        /// Reads the pull requests from the persistent file
        /// </summary>
        public void GetCurrentSaved()
        {
            Debug.Assert(this != null);
            try
            {
                if (!Directory.Exists(CacheDirectory))
                {
                    return;
                }
                if (!File.Exists(CachedLocalPullRequestListPath))
                {
                    return;
                }
                var json = File.ReadAllText(CachedLocalPullRequestListPath);
                var list = JsonConvert.DeserializeObject <IEnumerable <PullRequest> >(json);
                PullRequests.Clear();
                foreach (var p in list)
                {
                    //Restore Self-Referential Loops
                    p.ParentRepo = this;
                    foreach (var r in p.ValidFiles)
                    {
                        r.ParentPullRequst = p;
                    }

                    if (VerifyPullRequestCache(p))
                    {
                        PullRequests.Add(p);
                        foreach (var r in p.ValidFiles)
                        {
                            r.LoadFromCache();
                        }
                    }
                    else
                    {
                        if (Directory.Exists(p.CacheDirectory))
                        {
                            Directory.Delete(p.CacheDirectory, true);
                        }
                    }
                }

                UpdateLocalSavedList(); //In case some were deleted, write the file back
            }
            catch (Exception ex)
            {
                Logger.Error($"{ex.GetType().Name}: Couldn't load {CachedLocalPullRequestListPath} because {ex.Message}");
            }
        }
        private async Task GetPullRequests()
        {
            try
            {
                Loading = true;


                var response = await Apis.GitHub.GetPullRequests(Repository.Owner.UserName, Repository.Name, Page);

                if (response != null)
                {
                    response.ForEach((item) => { PullRequests.Add(item); });
                    await RaisePropertyChanged(() => PullRequests);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            Loading = false;

            ShowEmptyState = PullRequests.Count == 0;
        }