private void PopulateListItem(ListViewCCH listView, BuildInfo buildInfo) { ListViewItem viewItem; if (IsQueuedSelected) { IQueuedBuild queuedBuild = buildInfo.queuedBuild; //IBuildDetail detail = queuedBuild.Build; viewItem = listView.Items.Add(queuedBuild.BuildDefinition.Name); viewItem.UseItemStyleForSubItems = false; viewItem.StateImageIndex = GetBuildStatusImage(queuedBuild.Status, queuedBuild.Build); viewItem.SubItems.Add(queuedBuild.Priority.ToString()); viewItem.SubItems.Add(queuedBuild.QueueTime.ToString()); viewItem.SubItems.Add(queuedBuild.RequestedBy); //viewItem.SubItems.Add(queuedBuild.BuildAgent.Name); viewItem.SubItems.Add(string.Empty); viewItem.Group = listView.Groups[queuedBuild.BuildDefinition.TeamProject]; } else { IBuildDetail buildDetail = buildInfo.buildDetail; viewItem = listView.Items.Add(buildDetail.Status.ToString()); viewItem.UseItemStyleForSubItems = false; viewItem.StateImageIndex = GetBuildStatusImage(buildDetail.Status); viewItem.SubItems.Add(buildDetail.StartTime.ToString()); viewItem.SubItems.Add(buildDetail.BuildNumber); viewItem.SubItems.Add(buildDetail.BuildDefinition.Name); //viewItem.SubItems.Add(buildDetail.BuildAgent.Name); viewItem.SubItems.Add(string.Empty); viewItem.SubItems.Add(buildDetail.RequestedBy); viewItem.SubItems.Add(buildDetail.Quality); viewItem.SubItems.Add(buildDetail.FinishTime.ToString()); bool logFileExists = !string.IsNullOrEmpty(buildDetail.LogLocation) && File.Exists(buildDetail.LogLocation); ListViewItem.ListViewSubItem subItem = viewItem.SubItems.Add(logFileExists ? "Has log" : "No log"); subItem.ForeColor = logFileExists ? Color.FromKnownColor(KnownColor.WindowText) : Color.FromKnownColor(KnownColor.ControlLight); viewItem.Group = listView.Groups[buildDetail.BuildDefinition.TeamProject]; } viewItem.Tag = buildInfo; }
internal void PopulateTeamBuilds(bool refresh, bool resort, Action <IBuildDetailSpec> modifyAction) { ListViewCCH listView = GetTreeView(); listView.BeginUpdate(); BackupSelectedItems(); //if (refresh || this.lastSelectedTeamProjectIndex != this.parentControl.selectedTeamProjectIndex || !lastIsQueuedSelected.Equals(IsQueuedSelected)) if (refresh || this.lastAppliedFilterHashCode != UIContext.Instance.ControlTeamBuildFilter.LastAppliedFilterHashCode || !lastIsQueuedSelected.Equals(IsQueuedSelected)) { this.cachedBuilds = null; } if (this.cachedBuilds == null) { string[] checkedProjects = UIContext.Instance.ControlTeamBuildFilter.CheckedProjects; UIContext.Instance.ProgressBegin(checkedProjects.Length, 1); try { this.cachedBuilds = new Dictionary <bool, List <BuildInfo> > { { false, new List <BuildInfo>() }, { true, new List <BuildInfo>() } }; listView.Groups.Clear(); this.teamBuildQualities.Clear(); foreach (string teamProject in checkedProjects) { List <BuildInfo> buildDetails = new List <BuildInfo>(); if (IsQueuedSelected) { IQueuedBuildsView buildsView = Context.BuildServer.CreateQueuedBuildsView(teamProject); buildsView.QueryOptions = QueryOptions.All; buildsView.StatusFilter = QueueStatus.All; buildsView.Refresh(true); IQueuedBuild[] queuedBuilds = buildsView.QueuedBuilds; foreach (var queuedBuild in queuedBuilds) { buildDetails.Add(new BuildInfo(queuedBuild)); } } else { IBuildDetailSpec buildDetailSpec = Context.BuildServer.CreateBuildDetailSpec(teamProject); buildDetailSpec.MaxBuildsPerDefinition = btnLatestBuilds.Checked ? 1 : int.MaxValue; buildDetailSpec.QueryOrder = BuildQueryOrder.StartTimeDescending; buildDetailSpec.Status = BuildStatus.Failed | BuildStatus.NotStarted | BuildStatus.PartiallySucceeded | BuildStatus.Stopped | BuildStatus.Succeeded; if (modifyAction != null) { modifyAction(buildDetailSpec); } IBuildQueryResult builds = Context.BuildServer.QueryBuilds(buildDetailSpec); foreach (var buildDetail in builds.Builds) { buildDetails.Add(new BuildInfo(buildDetail)); } } if (this.cachedBuilds.ContainsKey(this.IsQueuedSelected)) { List <BuildInfo> cachedBuildItems = this.cachedBuilds[this.IsQueuedSelected]; foreach (var item in buildDetails) { cachedBuildItems.Add(item); } } else { this.cachedBuilds.Add(this.IsQueuedSelected, buildDetails); } //this.cachedBuilds.Add(IsQueuedSelected, cachedBuildItems); listView.Groups.Add(teamProject, teamProject); string[] buildQualities = Context.BuildServer.GetBuildQualities(teamProject); this.teamBuildQualities.Add(teamProject, new List <string>(buildQualities)); UIContext.Instance.ProgressDoStep(); } this.lastAppliedFilterHashCode = UIContext.Instance.ControlTeamBuildFilter.LastAppliedFilterHashCode; } finally { UIContext.Instance.ProgressEnd(); } } if (resort) { SortListData(); } listView.Visible = true; try { UIContext.Instance.ProgressBegin(this.cachedBuilds.Count, 1); listView.Items.Clear(); foreach (var cachedBuild in this.cachedBuilds[IsQueuedSelected]) { PopulateListItem(listView, cachedBuild); UIContext.Instance.ProgressDoStep(); } // this.cachedBuilds.ForEach(teamBuild => // { // ListViewItem viewItem = listView.Items.Add(teamBuild.Status.ToString()); // viewItem.UseItemStyleForSubItems = false; // viewItem.StateImageIndex = GetBuildStatusImage(teamBuild.Status); // viewItem.Tag = teamBuild; // viewItem.SubItems.Add(teamBuild.StartTime.ToString()); // viewItem.SubItems.Add(teamBuild.BuildNumber); // viewItem.SubItems.Add(teamBuild.BuildDefinition.Name); // viewItem.SubItems.Add(teamBuild.BuildAgent.Name); // viewItem.SubItems.Add(teamBuild.RequestedBy); // viewItem.SubItems.Add(teamBuild.Quality); // viewItem.SubItems.Add(teamBuild.FinishTime.ToString()); // // bool logFileExists = !string.IsNullOrEmpty(teamBuild.LogLocation) // && File.Exists(teamBuild.LogLocation); // // ListViewItem.ListViewSubItem subItem = viewItem.SubItems.Add(logFileExists ? "Has log" : "No log"); // subItem.ForeColor = logFileExists // ? Color.FromKnownColor(KnownColor.WindowText) : Color.FromKnownColor(KnownColor.ControlLight); // // viewItem.Group = listView.Groups[teamBuild.BuildDefinition.TeamProject]; // // UIContext.ProgressDoStep(); // }); } finally { listView.EndUpdate(); UIContext.Instance.ProgressEnd(); RestoreSelectedItems(); } }