private void PopulateProjectList(ServerSnapshotChangedEventArgs args, IList<string> projects, ListView listView, string imageKey) { if (projects.Count > 0) { var group = new ListViewGroup(args.Server); group.Tag = args.Configuration; listView.Groups.Add(group); foreach (var project in projects) { var item = new ListViewItem(project, group); item.Checked = true; item.ImageKey = imageKey; listView.Items.Add(item); } } }
private void updateButton_Click(object sender, EventArgs e) { if (UpdateConfiguration != null) { var serverList = new Dictionary<string, BuildServer>(); // Add all the new projects to be added var serversWithNewProjects = new Dictionary<string, List<string>>(); foreach (ListViewGroup group in addedProjectsList.Groups) { var list = new List<string>(); serversWithNewProjects.Add(group.Header, list); serverList.Add(group.Header, group.Tag as BuildServer); foreach (ListViewItem item in group.Items) { if (item.Checked) list.Add(item.Text); } } // Add all the new projects to be removed var serversWithOldProjects = new Dictionary<string, List<string>>(); foreach (ListViewGroup group in deletedProjectsList.Groups) { var list = new List<string>(); serversWithOldProjects.Add(group.Header, list); if (!serverList.ContainsKey(group.Header)) { serverList.Add(group.Header, group.Tag as BuildServer); } foreach (ListViewItem item in group.Items) { if (item.Checked) list.Add(item.Text); } } // Merge the two lists var args = new List<ServerSnapshotChangedEventArgs>(); foreach (var server in serverList) { var addedProjects = serversWithNewProjects.ContainsKey(server.Key) ? serversWithNewProjects[server.Key] : new List<string>(); var deletedProjects = serversWithOldProjects.ContainsKey(server.Key) ? serversWithOldProjects[server.Key] : new List<string>(); var serverArgs = new ServerSnapshotChangedEventArgs(server.Key, server.Value, addedProjects, deletedProjects); args.Add(serverArgs); } UpdateConfiguration(args); } }
/// <summary> /// Checks for any changes to the list of projects on the server. /// </summary> /// <param name="cruiseServerSnapshot"></param> private void DetectAnyChanges(CruiseServerSnapshot cruiseServerSnapshot) { if ((cruiseServerSnapshot != null) && (ServerSnapshotChanged != null)) { // Match all the current projects and find any new projects var newProjects = new List <string>(); var oldProjects = new List <string>(currentProjects); foreach (var project in cruiseServerSnapshot.ProjectStatuses) { if (!oldProjects.Contains(project.Name)) { newProjects.Add(project.Name); } else { oldProjects.Remove(project.Name); } } if (areCurrentProjectsLoaded && ((newProjects.Count > 0) || (oldProjects.Count > 0))) { // Fire the event var args = new ServerSnapshotChangedEventArgs(cruiseServerManager.DisplayName, cruiseServerManager.Configuration, newProjects, oldProjects); ServerSnapshotChanged(this, args); } if ((newProjects.Count > 0) || (oldProjects.Count > 0)) { // Update the current list foreach (var oldProject in oldProjects) { currentProjects.Remove(oldProject); } currentProjects.AddRange(newProjects); } areCurrentProjectsLoaded = true; } }
/// <summary> /// Display the list of changed and deleted projects. /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void HandleServerSnapshotChange(object sender, ServerSnapshotChangedEventArgs args) { if (configuration.ReportProjectChanges) { if (mainForm.InvokeRequired) { mainForm.Invoke( new ServerSnapshotChangedEventHandler(HandleServerSnapshotChange), sender, args); } else { // Update the cached changes if (changeList.ContainsKey(args.Server)) { // Work out which projects have been added or deleted var newList = new List<string>(changeList[args.Server].AddedProjects); var oldList = new List<string>(changeList[args.Server].DeletedProjects); foreach (var project in args.AddedProjects) { if (oldList.Contains(project)) { oldList.Remove(project); } else if (!newList.Contains(project)) { newList.Add(project); } } foreach (var project in args.DeletedProjects) { if (newList.Contains(project)) { newList.Remove(project); } else if (!oldList.Contains(project)) { // See if the project is being monitored foreach (var projectConfig in configuration.Projects) { if (projectConfig.BuildServer.Equals(args.Configuration) && projectConfig.ProjectName.Equals(project)) { oldList.Add(project); break; } } } } // Add/remove the server entry if ((newList.Count > 0) || (oldList.Count > 0)) { changeList[args.Server] = new ServerSnapshotChangedEventArgs(args.Server, args.Configuration, newList, oldList); } else { changeList.Remove(args.Server); } } else { var deletedProjects = new List<string>(); foreach (var project in args.DeletedProjects) { // See if the project is being monitored foreach (var projectConfig in configuration.Projects) { if (projectConfig.BuildServer.Equals(args.Configuration) && projectConfig.ProjectName.Equals(project)) { deletedProjects.Add(project); break; } } } // Only add the args if there are new projects, or monitored projects are deleted if ((args.AddedProjects.Count > 0) || (deletedProjects.Count > 0)) { changeList.Add(args.Server, new ServerSnapshotChangedEventArgs(args.Server, args.Configuration, args.AddedProjects, deletedProjects.ToArray())); } } // Update the form if (changeList.Count > 0) { mainForm.ShowChangedProjects(changeList); } else { mainForm.CloseUpdatePanel(); } } } }
/// <summary> /// Checks for any changes to the list of projects on the server. /// </summary> /// <param name="cruiseServerSnapshot"></param> private void DetectAnyChanges(CruiseServerSnapshot cruiseServerSnapshot) { if ((cruiseServerSnapshot != null) && (ServerSnapshotChanged != null)) { // Match all the current projects and find any new projects var newProjects = new List<string>(); var oldProjects = new List<string>(currentProjects); foreach (var project in cruiseServerSnapshot.ProjectStatuses) { if (!oldProjects.Contains(project.Name)) { newProjects.Add(project.Name); } else { oldProjects.Remove(project.Name); } } if (areCurrentProjectsLoaded && ((newProjects.Count > 0) || (oldProjects.Count > 0))) { // Fire the event var args = new ServerSnapshotChangedEventArgs(cruiseServerManager.DisplayName, cruiseServerManager.Configuration, newProjects, oldProjects); ServerSnapshotChanged(this, args); } if ((newProjects.Count > 0) || (oldProjects.Count > 0)) { // Update the current list foreach (var oldProject in oldProjects) { currentProjects.Remove(oldProject); } currentProjects.AddRange(newProjects); } areCurrentProjectsLoaded = true; } }