/// <summary> /// Searches for the term in the list of available modules for the ksp instance. Looks in name, identifier and description fields. /// </summary> /// <returns>List of mathcing modules.</returns> /// <param name="ksp">The KSP instance to perform the search for.</param> /// <param name="term">The search term. Case insensitive.</param> public List <CfanModule> PerformSearch(CKAN.KSP ksp, string term) { List <CfanModule> matching_mods = new List <CfanModule>(); // Get a list of available mods. List <CfanModule> available_mods = ksp.Registry.Available(ksp.Version()); // Look for the search term in the list. foreach (CfanModule mod in available_mods) { // Extract the description. This is an optional field and may be null. string mod_description = String.Empty; if (!String.IsNullOrEmpty(mod.description)) { mod_description = mod.description; } // Look for a match in each string. if (mod.title.IndexOf(term, StringComparison.OrdinalIgnoreCase) > -1 || mod.identifier.IndexOf(term, StringComparison.OrdinalIgnoreCase) > -1 || mod_description.IndexOf(term, StringComparison.OrdinalIgnoreCase) > -1) { matching_mods.Add(mod); } } return(matching_mods); }
public int RunCommand(CKAN.KSP ksp, object raw_options) { AvailableOptions opts = (AvailableOptions)raw_options; IRegistryQuerier registry = RegistryManager.Instance(ksp).registry; var compatible = registry.CompatibleModules(ksp.VersionCriteria()); user.RaiseMessage("Modules compatible with KSP {0}", ksp.Version()); user.RaiseMessage(""); if (opts.detail) { foreach (CkanModule module in compatible) { user.RaiseMessage("* {0} ({1}) - {2} - {3}", module.identifier, module.version, module.name, module.@abstract); } } else { foreach (CkanModule module in compatible) { user.RaiseMessage("* {0} ({1}) - {2}", module.identifier, module.version, module.name); } } return(Exit.OK); }
public int RunCommand(CKAN.KSP ksp, object raw_options) { UpdateOptions options = (UpdateOptions)raw_options; List <CkanModule> available_prior = null; user.RaiseMessage("Downloading updates..."); if (options.list_changes) { // Get a list of available modules prior to the update. var registry = RegistryManager.Instance(ksp).registry; available_prior = registry.Available(ksp.Version()); } // If no repository is selected, select all. if (options.repo == null) { options.update_all = true; } try { if (options.update_all) { UpdateRepository(ksp); } else { UpdateRepository(ksp, options.repo); } } catch (MissingCertificateKraken kraken) { // Handling the kraken means we have prettier output. user.RaiseMessage(kraken.ToString()); return(Exit.ERROR); } if (options.list_changes) { var registry = RegistryManager.Instance(ksp).registry; PrintChanges(available_prior, registry.Available(ksp.Version())); } return(Exit.OK); }
public int RunCommand(CKAN.KSP ksp, object raw_options) { UpgradeOptions options = (UpgradeOptions)raw_options; if (options.ckan_file != null) { User.RaiseMessage("\nUnsupported option at this time."); return(Exit.BADOPT); } if (options.modules.Count == 0) { // What? No files specified? User.RaiseMessage("Usage: ckan upgrade Mod [Mod2, ...]"); return(Exit.BADOPT); } var to_upgrade = new List <CkanModule> (); foreach (string mod in options.modules) { Match match = Regex.Match(mod, @"^(?<mod>[^=]*)=(?<version>.*)$"); if (match.Success) { string ident = match.Groups["mod"].Value; string version = match.Groups["version"].Value; CkanModule module = ksp.Registry.GetModuleByVersion(ident, version); if (module == null) { User.RaiseMessage("Cannot install {0}, version {1} not available", ident, version); return(Exit.ERROR); } to_upgrade.Add(module); } else { to_upgrade.Add( ksp.Registry.LatestAvailable(mod, ksp.Version()) ); } } User.RaiseMessage("\nUpgrading modules...\n"); // TODO: These instances all need to go. ModuleInstaller.GetInstance(ksp, User).Upgrade(to_upgrade, new NetAsyncDownloader(User)); User.RaiseMessage("\nDone!\n"); return(Exit.OK); }
public int RunCommand(CKAN.KSP ksp, object raw_options) { IRegistryQuerier registry = RegistryManager.Instance(ksp).registry; List <CkanModule> available = registry.Available(ksp.VersionCriteria()); user.RaiseMessage("Mods available for KSP {0}", ksp.Version()); user.RaiseMessage(""); foreach (CkanModule module in available) { user.RaiseMessage("* {0} ({1}) - {2}", module.identifier, module.version, module.name); } return(Exit.OK); }
private static int Available(CKAN.KSP current_instance, IUser user) { List<CkanModule> available = RegistryManager.Instance(current_instance).registry.Available(current_instance.Version()); user.RaiseMessage("Mods available for KSP {0}", current_instance.Version()); user.RaiseMessage(""); var width = user.WindowWidth; foreach (CkanModule module in available) { string entry = String.Format("* {0} ({1}) - {2}", module.identifier, module.version, module.name); user.RaiseMessage(width > 0 ? entry.PadRight(width).Substring(0, width - 1) : entry); } return Exit.OK; }
private static int Update(UpdateOptions options, RegistryManager registry_manager, CKAN.KSP current_instance, IUser user) { user.RaiseMessage("Downloading updates..."); try { int updated = Repo.Update(registry_manager, current_instance.Version(), options.repo); user.RaiseMessage("Updated information on {0} available modules", updated); } catch (MissingCertificateKraken kraken) { // Handling the kraken means we have prettier output. user.RaiseMessage(kraken.ToString()); return Exit.ERROR; } return Exit.OK; }
/// <summary> /// Searches for the term in the list of available modules for the ksp instance. Looks in name, identifier and description fields. /// </summary> /// <returns>List of mathcing modules.</returns> /// <param name="ksp">The KSP instance to perform the search for.</param> /// <param name="term">The search term. Case insensitive.</param> public List <CkanModule> PerformSearch(CKAN.KSP ksp, string term) { var registry = RegistryManager.Instance(ksp).registry; return(registry .Available(ksp.Version()) .Where((module) => { // Extract the description. This is an optional field and may be null. string modDesc = string.Empty; if (!string.IsNullOrEmpty(module.description)) { modDesc = module.description; } // Look for a match in each string. return module.name.IndexOf(term, StringComparison.OrdinalIgnoreCase) > -1 || module.identifier.IndexOf(term, StringComparison.OrdinalIgnoreCase) > -1 || modDesc.IndexOf(term, StringComparison.OrdinalIgnoreCase) > -1; }).ToList()); }
private static int List() { CKAN.KSP ksp = KSPManager.CurrentInstance; User.WriteLine("\nKSP found at {0}\n", ksp.GameDir()); User.WriteLine("KSP Version: {0}\n", ksp.Version()); Registry registry = RegistryManager.Instance(ksp).registry; User.WriteLine("Installed Modules:\n"); var installed = new SortedDictionary <string, Version>(registry.Installed()); foreach (var mod in installed) { User.WriteLine("* {0} {1}", mod.Key, mod.Value); } // Blank line at the end makes for nicer looking output. User.WriteLine(""); return(Exit.OK); }
public int RunCommand(CKAN.KSP ksp, object raw_options) { ShowOptions options = (ShowOptions)raw_options; if (options.Modname == null) { // empty argument user.RaiseMessage("show <module> - module name argument missing, perhaps you forgot it?"); return(Exit.BADOPT); } // Check installed modules for an exact match. InstalledModule installedModuleToShow = ksp.Registry.InstalledModule(options.Modname); if (installedModuleToShow != null) { // Show the installed module. return(ShowMod(installedModuleToShow)); } // Module was not installed, look for an exact match in the available modules, // either by "name" (the user-friendly display name) or by identifier CfanModule moduleToShow = ksp.Registry .Available(ksp.Version()) .SingleOrDefault( mod => mod.title == options.Modname || mod.identifier == options.Modname ); if (moduleToShow == null) { // No exact match found. Try to look for a close match for this KSP version. user.RaiseMessage("{0} not found or installed.", options.Modname); user.RaiseMessage("Looking for close matches in available mods for KSP {0}.", ksp.Version()); Search search = new Search(user); List <CfanModule> matches = search.PerformSearch(ksp, options.Modname); // Display the results of the search. if (matches.Count == 0) { // No matches found. user.RaiseMessage("No close matches found."); return(Exit.BADOPT); } else if (matches.Count == 1) { // If there is only 1 match, display it. user.RaiseMessage("Found 1 close match: {0}", matches[0].title); user.RaiseMessage(""); moduleToShow = matches[0]; } else { // Display the found close matches. string[] strings_matches = new string[matches.Count]; for (int i = 0; i < matches.Count; i++) { strings_matches[i] = matches[i].title; } int selection = user.RaiseSelectionDialog("Close matches", strings_matches); if (selection < 0) { return(Exit.BADOPT); } // Mark the selection as the one to show. moduleToShow = matches[selection]; } } return(ShowMod(moduleToShow)); }
public int RunCommand(CKAN.KSP ksp, object raw_options) { UpgradeOptions options = (UpgradeOptions)raw_options; if (options.ckan_file != null) { options.modules.Add(LoadCkanFromFile(ksp, options.ckan_file).identifier); } if (options.modules.Count == 0 && !options.upgrade_all) { // What? No files specified? User.RaiseMessage("Usage: ckan upgrade Mod [Mod2, ...]"); User.RaiseMessage(" or ckan upgrade --all"); User.RaiseMessage(" or ckan upgrade ckan"); return(Exit.BADOPT); } if (!options.upgrade_all && options.modules[0] == "ckan") { User.RaiseMessage("Querying the latest CKAN version"); var latestVersion = AutoUpdate.FetchLatestCkanVersion(); var currentVersion = new Version(Meta.Version()); if (latestVersion.IsGreaterThan(currentVersion)) { User.RaiseMessage("New CKAN version available - " + latestVersion); var releaseNotes = AutoUpdate.FetchLatestCkanVersionReleaseNotes(); User.RaiseMessage(releaseNotes); User.RaiseMessage("\n"); if (User.RaiseYesNoDialog("Proceed with install?")) { User.RaiseMessage("Upgrading CKAN, please wait.."); AutoUpdate.StartUpdateProcess(false); } } else { User.RaiseMessage("You already have the latest version."); } return(Exit.OK); } User.RaiseMessage("\nUpgrading modules...\n"); try { if (options.upgrade_all) { var installed = new Dictionary <string, Version>(ksp.Registry.Installed()); var to_upgrade = new List <CkanModule>(); foreach (KeyValuePair <string, Version> mod in installed) { Version current_version = mod.Value; if ((current_version is ProvidesVersion) || (current_version is DllVersion)) { continue; } else { try { // Check if upgrades are available CkanModule latest = ksp.Registry.LatestAvailable(mod.Key, ksp.Version()); // This may be an unindexed mod. If so, // skip rather than crash. See KSP-CKAN/CKAN#841. if (latest == null) { continue; } if (latest.version.IsGreaterThan(mod.Value)) { // Upgradable log.InfoFormat("New version {0} found for {1}", latest.version, latest.identifier); to_upgrade.Add(latest); } } catch (ModuleNotFoundKraken) { log.InfoFormat("{0} is installed, but no longer in the registry", mod.Key); } } } ModuleInstaller.GetInstance(ksp, User).Upgrade(to_upgrade, new NetAsyncDownloader(User)); } else { // TODO: These instances all need to go. ModuleInstaller.GetInstance(ksp, User).Upgrade(options.modules, new NetAsyncDownloader(User)); } } catch (ModuleNotFoundKraken kraken) { User.RaiseMessage("Module {0} not found", kraken.module); return(Exit.ERROR); } User.RaiseMessage("\nDone!\n"); return(Exit.OK); }
private static int List(IUser user, CKAN.KSP current_instance) { CKAN.KSP ksp = current_instance; user.RaiseMessage("\nKSP found at {0}\n", ksp.GameDir()); user.RaiseMessage("KSP Version: {0}\n", ksp.Version()); Registry registry = RegistryManager.Instance(ksp).registry; user.RaiseMessage("Installed Modules:\n"); var installed = new SortedDictionary<string, Version>(registry.Installed()); foreach (KeyValuePair<string, Version> mod in installed) { Version current_version = mod.Value; string bullet = "*"; if (current_version is ProvidesVersion) { // Skip virtuals for now. continue; } else if (current_version is DllVersion) { // Autodetected dll bullet = "-"; } else { try { // Check if upgrades are available, and show appropriately. CkanModule latest = registry.LatestAvailable(mod.Key, ksp.Version()); log.InfoFormat("Latest {0} is {1}", mod.Key, latest); if (latest == null) { // Not compatible! bullet = "✗"; } else if (latest.version.IsEqualTo(current_version)) { // Up to date bullet = "✓"; } else if (latest.version.IsGreaterThan(mod.Value)) { // Upgradable bullet = "↑"; } } catch (ModuleNotFoundKraken) { log.InfoFormat("{0} is installed, but no longer in the registry", mod.Key); bullet = "?"; } } user.RaiseMessage("{0} {1} {2}", bullet, mod.Key, mod.Value); } user.RaiseMessage("\nLegend: ✓ - Up to date. ✗ - Incompatible. ↑ - Upgradable. ? - Unknown "); return Exit.OK; }
public int RunCommand(CKAN.KSP ksp, object raw_options) { ListOptions options = (ListOptions)raw_options; IRegistryQuerier registry = RegistryManager.Instance(ksp).registry; ExportFileType?exportFileType = null; if (!string.IsNullOrWhiteSpace(options.export)) { exportFileType = GetExportFileType(options.export); if (exportFileType == null) { user.RaiseError("Unknown export format: {0}", options.export); } } if (!(options.porcelain) && exportFileType == null) { user.RaiseMessage("\r\nKSP found at {0}\r\n", ksp.GameDir()); user.RaiseMessage("KSP Version: {0}\r\n", ksp.Version()); user.RaiseMessage("Installed Modules:\r\n"); } if (exportFileType == null) { var installed = new SortedDictionary <string, Version>(registry.Installed()); foreach (KeyValuePair <string, Version> mod in installed) { Version current_version = mod.Value; string bullet = "*"; if (current_version is ProvidesVersion) { // Skip virtuals for now. continue; } else if (current_version is DllVersion) { // Autodetected dll bullet = "-"; } else { try { // Check if upgrades are available, and show appropriately. CkanModule latest = registry.LatestAvailable(mod.Key, ksp.VersionCriteria()); log.InfoFormat("Latest {0} is {1}", mod.Key, latest); if (latest == null) { // Not compatible! bullet = "X"; } else if (latest.version.IsEqualTo(current_version)) { // Up to date bullet = "-"; } else if (latest.version.IsGreaterThan(mod.Value)) { // Upgradable bullet = "^"; } } catch (ModuleNotFoundKraken) { log.InfoFormat("{0} is installed, but no longer in the registry", mod.Key); bullet = "?"; } } user.RaiseMessage("{0} {1} {2}", bullet, mod.Key, mod.Value); } } else { var stream = Console.OpenStandardOutput(); new Exporter(exportFileType.Value).Export(registry, stream); stream.Flush(); } if (!(options.porcelain) && exportFileType == null) { user.RaiseMessage("\r\nLegend: -: Up to date. X: Incompatible. ^: Upgradable. ?: Unknown. *: Broken. "); // Broken mods are in a state that CKAN doesn't understand, and therefore can't handle automatically } return(Exit.OK); }
public int RunCommand(CKAN.KSP ksp, object raw_options) { ShowOptions options = (ShowOptions)raw_options; if (options.Modname == null) { // empty argument user.RaiseMessage("show <module> - module name argument missing, perhaps you forgot it?"); return(Exit.BADOPT); } // Look for the module in the registry. List <CkanModule> modules = ksp.Registry.Available(ksp.Version()); CkanModule module = null; foreach (CkanModule mod in modules) { if (mod.name == options.Modname) { module = mod; } } if (module == null) { // No exact match found. Try to look for a close match. user.RaiseMessage("{0} not found.", options.Modname); user.RaiseMessage("Looking for close matches."); Search search = new Search(user); List <CkanModule> matches = search.PerformSearch(ksp, options.Modname); if (matches.Count == 0) { user.RaiseMessage("No close matches found."); return(Exit.BADOPT); } else if (matches.Count == 1) { // If there is only 1 match, display it. user.RaiseMessage("Found 1 close match: {0}", matches[0].name); user.RaiseMessage(""); module = matches[0]; } else { // Display the found close matches. string[] strings_matches = new string[matches.Count]; for (int i = 0; i < matches.Count; i++) { strings_matches[i] = matches[i].name; } string message = "Close matches"; int selection = user.RaiseSelectionDialog(message, strings_matches); if (selection < 0) { return(Exit.BADOPT); } // Mark the selection as the one to show. module = matches[selection]; } } // Is the selected module already installed? InstalledModule installed_module = ksp.Registry.InstalledModule(module.identifier); if (installed_module != null) { ShowMod(installed_module); } else { ShowMod(module); } return(Exit.OK); }
public int RunCommand(CKAN.KSP ksp, object raw_options) { UpgradeOptions options = (UpgradeOptions)raw_options; if (options.ckan_file != null) { options.modules.Add(LoadCkanFromFile(ksp, options.ckan_file).identifier); } if (options.modules.Count == 0 && !options.upgrade_all) { // What? No files specified? User.RaiseMessage("Usage: ckan upgrade Mod [Mod2, ...]"); User.RaiseMessage(" or ckan upgrade --all"); return(Exit.BADOPT); } User.RaiseMessage("\nUpgrading modules...\n"); try { if (options.upgrade_all) { var installed = new Dictionary <string, Version>(ksp.Registry.Installed()); var to_upgrade = new List <CkanModule>(); foreach (KeyValuePair <string, Version> mod in installed) { Version current_version = mod.Value; if ((current_version is ProvidesVersion) || (current_version is DllVersion)) { continue; } else { try { // Check if upgrades are available CkanModule latest = ksp.Registry.LatestAvailable(mod.Key, ksp.Version()); if (latest.version.IsGreaterThan(mod.Value)) { // Upgradable log.InfoFormat("New version {0} found for {1}", latest.version, latest.identifier); to_upgrade.Add(latest); } } catch (ModuleNotFoundKraken) { log.InfoFormat("{0} is installed, but no longer in the registry", mod.Key); } } } ModuleInstaller.GetInstance(ksp, User).Upgrade(to_upgrade, new NetAsyncDownloader(User)); } else { // TODO: These instances all need to go. ModuleInstaller.GetInstance(ksp, User).Upgrade(options.modules, new NetAsyncDownloader(User)); } } catch (ModuleNotFoundKraken kraken) { User.RaiseMessage(kraken.Message); return(Exit.ERROR); } User.RaiseMessage("\nDone!\n"); return(Exit.OK); }
public int RunCommand(CKAN.KSP ksp, object raw_options) { ListOptions options = (ListOptions)raw_options; Registry registry = RegistryManager.Instance(ksp).registry; if (!(options.porcelain)) { user.RaiseMessage("\nKSP found at {0}\n", ksp.GameDir()); user.RaiseMessage("KSP Version: {0}\n", ksp.Version()); user.RaiseMessage("Installed Modules:\n"); } var installed = new SortedDictionary <string, Version>(registry.Installed()); foreach (KeyValuePair <string, Version> mod in installed) { Version current_version = mod.Value; string bullet = "*"; if (current_version is ProvidesVersion) { // Skip virtuals for now. continue; } else if (current_version is DllVersion) { // Autodetected dll bullet = "-"; } else { try { // Check if upgrades are available, and show appropriately. CkanModule latest = registry.LatestAvailable(mod.Key, ksp.Version()); log.InfoFormat("Latest {0} is {1}", mod.Key, latest); if (latest == null) { // Not compatible! bullet = "X"; } else if (latest.version.IsEqualTo(current_version)) { // Up to date bullet = "-"; } else if (latest.version.IsGreaterThan(mod.Value)) { // Upgradable bullet = "^"; } } catch (ModuleNotFoundKraken) { log.InfoFormat("{0} is installed, but no longer in the registry", mod.Key); bullet = "?"; } } user.RaiseMessage("{0} {1} {2}", bullet, mod.Key, mod.Value); } if (!(options.porcelain)) { user.RaiseMessage("\nLegend: -: Up to date. X: Incompatible. ^: Upgradable. ?: Unknown "); } return(Exit.OK); }