public void Init(NavObject navObject) { Username = navObject.Username; Repository = navObject.Repository; PullRequests.FilteringFunction = x => { var state = SelectedFilter == 0 ? "open" : "closed"; return(x.Where(y => y.State == state)); }; _pullRequestEditSubscription = Messenger.SubscribeOnMainThread <PullRequestEditMessage>(x => { if (x.PullRequest == null) { return; } var index = PullRequests.Items.IndexOf(x.PullRequest); if (index < 0) { return; } PullRequests.Items[index] = x.PullRequest; PullRequests.Refresh(); }); }
protected override Task Load(bool forceCacheInvalidation) { var state = SelectedFilter == 0 ? "open" : "closed"; var request = this.GetApplication().Client.Users[Username].Repositories[Repository].PullRequests.GetAll(state: state); return(PullRequests.SimpleCollectionLoad(request, forceCacheInvalidation)); }
public Task Load(bool forceDataRefresh) { var state = PullRequests.Filter.IsOpen ? "open" : "closed"; var request = Application.Client.Users[Username].Repositories[Repository].PullRequests.GetAll(state: state); return(PullRequests.SimpleCollectionLoad(request, forceDataRefresh)); }
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(); }
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)); } }
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"; }
public Repository(string name, string description, PullRequests pullRequests, RepositoryOwner owner, string url, bool isFork) { DataDownloadedAt = DateTimeOffset.UtcNow; Name = name; Description = description; OwnerLogin = owner.Login; OwnerAvatarUrl = owner.AvatarUrl; Url = url; PullRequestCount = pullRequests.TotalCount; IsFork = isFork; }
private DatabasePullRequest FindOrCreatePullRequestState(int number) { DatabasePullRequest pr; if (!PullRequests.ContainsKey(number)) { pr = new DatabasePullRequest(); pr.Number = number; PullRequests[number] = pr; } return(PullRequests[number]); }
protected override Task Load(bool forceCacheInvalidation) { var state = "OPEN"; if (SelectedFilter == 1) { state = "MERGED"; } else if (SelectedFilter == 2) { state = "DECLINED"; } return(PullRequests.SimpleCollectionLoad(() => this.GetApplication().Client.Users[Username].Repositories[Repository].PullRequests.GetAll(state, forceCacheInvalidation))); }
/// <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}"); } }
/// <summary> /// Gets each page of the pull request list from GitHub. Once the list is complete, get all /// the pull request files for each pull request. /// </summary> /// <returns>List of pull request information.</returns> public async Task <IList <PullRequest> > GetPullRequestsAsync() { var url = $"/repos/{Owner}/{RepoName}/pulls"; var etag = Ref.Create(EtagNoChanges); var updated = await GetPaginatedListAsync <PullRequest>(url, etag); var outdated = PullRequests; EtagNoChanges = etag.Value; if (updated == null) { return(null); } if (outdated != null) { var prToRemove = outdated.Where(old => updated.All(newpr => newpr.Number != old.Number)); foreach (var pr in updated) { pr.ParentRepo = this; var old = outdated.FirstOrDefault(o => o.Number == pr.Number); if (old != null) { pr.LastWrite = old.LastWrite; } } DeletePRsFromDisk(prToRemove); } await Task.WhenAll(updated.Select(async pr => { var files = await GetPaginatedListAsync <RepoFile>($"/repos/{Owner}/{RepoName}/pulls/{pr.Number}/files"); foreach (var f in files) { f.ParentPullRequst = pr; } pr.Files = PullRequest.FilterFiles(files).ToList(); return(pr); })); PullRequests.Clear(); PullRequests.AddRange(updated); UpdateLocalSavedList(); return(updated); }
private async Task Load() { string state; switch (SelectedView) { case 1: state = "MERGED"; break; case 2: state = "DECLINED"; break; default: state = "OPEN"; break; } var response = await ApplicationService.StashClient.Projects[ProjectKey].Repositories[RepositorySlug].PullRequests.GetAll(state: state).ExecuteAsync(); PullRequests.Reset(response.Data.Values); }
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; }
public static void Main(string[] args) { string PAT = string.Empty; string accountName = string.Empty; string projectName = string.Empty; Console.WriteLine("Please enter Account Name"); accountName = Console.ReadLine(); Console.WriteLine("Please enter Personal access token"); PAT = Console.ReadLine(); Console.WriteLine("Please enter project name"); projectName = Console.ReadLine(); Configuration sourceconfig = new Configuration() { UriString = "https://" + accountName + ".visualstudio.com:", PersonalAccessToken = PAT, Project = projectName }; VstsRestAPI.Configuration vstsAPIConfiguration = new VstsRestAPI.Configuration() { UriString = "https://" + accountName + ".visualstudio.com:", PersonalAccessToken = PAT, Project = projectName }; ValidateLogin objLogin = new ValidateLogin(vstsAPIConfiguration); bool isValidAccount = objLogin.isValidAccount(); if (isValidAccount) { Console.WriteLine("Generating templates...."); Console.WriteLine(); ExportQueries objQuery = new ExportQueries(vstsAPIConfiguration); //queryList = objQuery.GetQueries(projectName); objQuery.GetQueriesByPath(projectName, string.Empty); ExportDashboards objWidgetAndCharts = new ExportDashboards(vstsAPIConfiguration); objWidgetAndCharts.GetDashboard(projectName); Console.WriteLine("Queries and Dashboard JSONs are saved into Template folder"); Console.WriteLine(""); Teams objTeam = new Teams(vstsAPIConfiguration); objTeam.ExportTeams(projectName); Console.WriteLine("Teams JSON is saved into Template folder"); Console.WriteLine(""); SourceCode objSourceCode = new SourceCode(vstsAPIConfiguration); objSourceCode.ExportSourceCode(projectName); Console.WriteLine("ImportSourceCode JSON is saved into Template folder"); Console.WriteLine(""); BoardColumns objColumn = new BoardColumns(vstsAPIConfiguration); objColumn.ExportBoardColumns(projectName); Console.WriteLine("BoardColumn JSON file is saved into Template folder"); Console.WriteLine(""); GenerateWIFromSource wiql = new GenerateWIFromSource(sourceconfig, accountName); wiql.UpdateWorkItem(); Console.WriteLine("Work item JSON files are saved into Templates folder"); Console.WriteLine(""); BuildDefinitions objBuild = new BuildDefinitions(vstsAPIConfiguration, accountName); ReleaseDefinitions objRelease = new ReleaseDefinitions(vstsAPIConfiguration, accountName); objBuild.ExportBuildDefinitions(projectName); objRelease.ExportReleaseDefinitions(projectName); Console.WriteLine("Build and Release Definitions are saved into Templates folder"); Console.WriteLine(""); CardFieldsAndCardStyles objCards = new CardFieldsAndCardStyles(vstsAPIConfiguration); objCards.GetCardFields(projectName); objCards.GetCardStyles(projectName); Console.WriteLine("CardField and CardStyle JSON files are saved into Templates folder"); Console.WriteLine(""); PullRequests objPullRequest = new PullRequests(vstsAPIConfiguration); objPullRequest.ExportPullRequests(projectName); Console.WriteLine("PullReqests and comments JSON files are saved into Templates folder"); Console.WriteLine(""); Console.WriteLine("Completed generating templates from " + projectName); var wait = Console.ReadLine(); } else { Console.WriteLine(""); Console.WriteLine("Invalid Account name or PAT, re-run the application and try again!"); var wait = Console.ReadLine(); } }
public static void Main(string[] args) { string PAT = string.Empty; string accountName = string.Empty; string projectName = string.Empty; Console.WriteLine("Please enter Account Name"); accountName = Console.ReadLine(); Console.WriteLine("Please enter Personel access token"); PAT = Console.ReadLine(); Console.WriteLine("Please enter project name"); projectName = Console.ReadLine(); Configuration sourceconfig = new Configuration() { UriString = "https://" + accountName + ".visualstudio.com:", PersonalAccessToken = PAT, Project = projectName }; VstsRestAPI.Configuration vstsAPIConfiguration = new VstsRestAPI.Configuration() { UriString = "https://" + accountName + ".visualstudio.com:", PersonalAccessToken = PAT, Project = projectName }; Console.WriteLine("Generating templates...."); Console.WriteLine(); Dictionary <string, string> queryList = new Dictionary <string, string>(); ExportQueries objQuery = new ExportQueries(vstsAPIConfiguration); //queryList = objQuery.GetQueries(projectName); queryList = objQuery.GetQueriesByPath(projectName, string.Empty); ExportWidgetsAndCharts objWidgetAndCharts = new ExportWidgetsAndCharts(vstsAPIConfiguration); objWidgetAndCharts.GetWidgetsAndCharts(projectName, queryList); Console.WriteLine("Queries and widget JSONs are saved into Template folder"); Console.WriteLine(""); Teams objTeam = new Teams(vstsAPIConfiguration); objTeam.ExportTeams(projectName); Console.WriteLine("Teams JSON is saved into Template folder"); Console.WriteLine(""); ServiceEndpoints objService = new ServiceEndpoints(vstsAPIConfiguration); string serviceEndPoint = string.Empty; serviceEndPoint = objService.ExportServiceEndPoints(projectName); Console.WriteLine("ServiceEndPoint JSONs are saved into Template folder"); Console.WriteLine(""); SourceCode objSourceCode = new SourceCode(vstsAPIConfiguration); objSourceCode.ExportSourceCode(projectName); Console.WriteLine("ImportSourceCode JSON is saved into Template folder"); Console.WriteLine(""); BoardColumns objColumn = new BoardColumns(vstsAPIConfiguration); objColumn.ExportBoardColumns(projectName); Console.WriteLine("BoardColumn JSON file is saved into Template folder"); Console.WriteLine(""); GenerateWIFromSource wiql = new GenerateWIFromSource(sourceconfig, accountName); wiql.UpdateWorkItem(); Console.WriteLine("Work item JSON files are saved into Templates folder"); Console.WriteLine(""); BuildDefinitions objBuild = new BuildDefinitions(vstsAPIConfiguration, accountName); ReleaseDefinitions objRelease = new ReleaseDefinitions(vstsAPIConfiguration, accountName); objBuild.ExportBuildDefinitions(projectName); objRelease.ExportReleaseDefinitions(projectName, serviceEndPoint); Console.WriteLine("Build and Release Definitions are saved into Templates folder"); Console.WriteLine(""); CardFieldsAndCardStyles objCards = new CardFieldsAndCardStyles(vstsAPIConfiguration); objCards.GetCardFields(projectName); objCards.GetCardStyles(projectName); Console.WriteLine("CardField and CardStyle JSON files are saved into Templates folder"); Console.WriteLine(""); Iterations objIterations = new Iterations(vstsAPIConfiguration, accountName); objIterations.GetIterations(); Console.WriteLine("iterations JSON file is saved into Templates folder"); Console.WriteLine(""); PullRequests objPullRequest = new PullRequests(vstsAPIConfiguration); objPullRequest.ExportPullRequests(projectName); Console.WriteLine("PullReqests and comments JSON files are saved into Templates folder"); Console.WriteLine(""); Console.WriteLine("Completed generating templates from " + projectName); var wait = Console.ReadLine(); }