Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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();
            }
        }