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) { 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) { 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 CkanModule moduleToShow = ksp.Registry .Available(ksp.Version()) .SingleOrDefault( mod => mod.name == 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<CkanModule> 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].name); 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].name; } 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.GameInstance ksp, object raw_options) { ShowOptions options = (ShowOptions)raw_options; if (options.modules == null || options.modules.Count < 1) { // empty argument user.RaiseMessage("show <module> - module name argument missing, perhaps you forgot it?"); return(Exit.BADOPT); } int combined_exit_code = Exit.OK; // Check installed modules for an exact match. var registry = RegistryManager.Instance(ksp).registry; foreach (string modName in options.modules) { var installedModuleToShow = registry.InstalledModule(modName); if (installedModuleToShow != null) { // Show the installed module. combined_exit_code = CombineExitCodes( combined_exit_code, ShowMod(installedModuleToShow) ); if (options.with_versions) { ShowVersionTable(ksp, registry.AvailableByIdentifier(installedModuleToShow.identifier).ToList()); } user.RaiseMessage(""); continue; } // Module was not installed, look for an exact match in the available modules, // either by "name" (the user-friendly display name) or by identifier CkanModule moduleToShow = registry .CompatibleModules(ksp.VersionCriteria()) .SingleOrDefault( mod => mod.name == modName || mod.identifier == modName ); if (moduleToShow == null) { // No exact match found. Try to look for a close match for this KSP version. user.RaiseMessage( "{0} not installed or compatible with {1} {2}.", modName, ksp.game.ShortName, string.Join(", ", ksp.VersionCriteria().Versions.Select(v => v.ToString())) ); user.RaiseMessage("Looking for close matches in compatible mods..."); Search search = new Search(user); var matches = search.PerformSearch(ksp, modName); // Display the results of the search. if (!matches.Any()) { // No matches found. user.RaiseMessage("No close matches found."); combined_exit_code = CombineExitCodes(combined_exit_code, Exit.BADOPT); user.RaiseMessage(""); continue; } 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(""); moduleToShow = matches[0]; } else { // Display the found close matches. int selection = user.RaiseSelectionDialog( "Close matches:", matches.Select(m => m.name).ToArray() ); user.RaiseMessage(""); if (selection < 0) { combined_exit_code = CombineExitCodes(combined_exit_code, Exit.BADOPT); continue; } // Mark the selection as the one to show. moduleToShow = matches[selection]; } } combined_exit_code = CombineExitCodes( combined_exit_code, ShowMod(moduleToShow) ); if (options.with_versions) { ShowVersionTable(ksp, registry.AvailableByIdentifier(moduleToShow.identifier).ToList()); } user.RaiseMessage(""); } return(combined_exit_code); }