private void _UpdateModsList() { Registry registry = RegistryManager.Instance(CurrentInstance).registry; var ckanModules = registry.Available(CurrentInstance.Version()).Concat( registry.Incompatible(CurrentInstance.Version())).ToList(); var gui_mods = ckanModules.Select(m => new GUIMod(m, registry, CurrentInstance.Version())).ToList(); mainModList.Modules = new ReadOnlyCollection <GUIMod>(gui_mods); var rows = MainModList.ConstructModList(mainModList.Modules); ModList.Rows.Clear(); ModList.Rows.AddRange(rows.ToArray()); ModList.Sort(ModList.Columns[2], ListSortDirection.Ascending); //TODO Consider using smart enum patten so stuff like this is easier FilterToolButton.DropDownItems[0].Text = String.Format("All ({0})", mainModList.CountModsByFilter(GUIModFilter.All)); FilterToolButton.DropDownItems[1].Text = String.Format("Installed ({0})", mainModList.CountModsByFilter(GUIModFilter.Installed)); FilterToolButton.DropDownItems[2].Text = String.Format("Updated ({0})", mainModList.CountModsByFilter(GUIModFilter.InstalledUpdateAvailable)); FilterToolButton.DropDownItems[3].Text = String.Format("New in repository ({0})", mainModList.CountModsByFilter(GUIModFilter.NewInRepository)); FilterToolButton.DropDownItems[4].Text = String.Format("Not installed ({0})", mainModList.CountModsByFilter(GUIModFilter.NotInstalled)); FilterToolButton.DropDownItems[5].Text = String.Format("Incompatible ({0})", mainModList.CountModsByFilter(GUIModFilter.Incompatible)); var has_any_updates = gui_mods.Any(mod => mod.HasUpdate); UpdateAllToolButton.Enabled = has_any_updates; UpdateFilters(this); }
private void _UpdateModsList(bool repo_updated) { log.Debug("Updating the mod list"); Registry registry = RegistryManager.Instance(CurrentInstance).registry; var ckanModules = registry.Available(CurrentInstance.Version()).Concat( registry.Incompatible(CurrentInstance.Version())).ToList(); var gui_mods = new HashSet <GUIMod>(ckanModules.Select(m => new GUIMod(m, registry, CurrentInstance.Version()))); var old_modules = new HashSet <GUIMod>(mainModList.Modules); if (repo_updated) { foreach (var gui_mod in gui_mods.Where(m => !old_modules.Contains(m))) { gui_mod.IsNew = true; } } else { //Copy the new mod flag from the old list. var old_new_mods = new HashSet <GUIMod>(old_modules.Where(m => m.IsNew)); foreach (var gui_mod in gui_mods.Where(m => old_new_mods.Contains(m))) { gui_mod.IsNew = true; } } mainModList.Modules = new ReadOnlyCollection <GUIMod>(gui_mods.ToList()); var rows = mainModList.ConstructModList(mainModList.Modules); ModList.Rows.Clear(); ModList.Rows.AddRange(rows.ToArray()); ModList.Sort(ModList.Columns[2], ListSortDirection.Ascending); //TODO Consider using smart enum patten so stuff like this is easier FilterToolButton.DropDownItems[0].Text = String.Format("Compatible ({0})", mainModList.CountModsByFilter(GUIModFilter.Compatible)); FilterToolButton.DropDownItems[1].Text = String.Format("Installed ({0})", mainModList.CountModsByFilter(GUIModFilter.Installed)); FilterToolButton.DropDownItems[2].Text = String.Format("Upgradeable ({0})", mainModList.CountModsByFilter(GUIModFilter.InstalledUpdateAvailable)); FilterToolButton.DropDownItems[3].Text = String.Format("New in repository ({0})", mainModList.CountModsByFilter(GUIModFilter.NewInRepository)); FilterToolButton.DropDownItems[4].Text = String.Format("Not installed ({0})", mainModList.CountModsByFilter(GUIModFilter.NotInstalled)); FilterToolButton.DropDownItems[5].Text = String.Format("Incompatible ({0})", mainModList.CountModsByFilter(GUIModFilter.Incompatible)); FilterToolButton.DropDownItems[6].Text = String.Format("All ({0})", mainModList.CountModsByFilter(GUIModFilter.All)); var has_any_updates = gui_mods.Any(mod => mod.HasUpdate); UpdateAllToolButton.Enabled = has_any_updates; UpdateFilters(this); }
private int CountModsByFilter(GUIModFilter filter) { Registry registry = RegistryManager.Instance(KSPManager.CurrentInstance).registry; List <CkanModule> modules = registry.Available(); int count = modules.Count(); // filter by left menu selection switch (filter) { case GUIModFilter.All: break; case GUIModFilter.Installed: count -= modules.Count(m => !registry.IsInstalled(m.identifier)); break; case GUIModFilter.InstalledUpdateAvailable: count -= modules.Count ( m => !(registry.IsInstalled(m.identifier) && m.version.IsGreaterThan( registry.InstalledVersion(m.identifier))) ); break; case GUIModFilter.NewInRepository: break; case GUIModFilter.NotInstalled: count -= modules.RemoveAll(m => registry.IsInstalled(m.identifier)); break; case GUIModFilter.Incompatible: count = registry.Incompatible().Count; break; } return(count); }