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); } }
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); } } }
/// <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(); } } } }