internal static CkanModule LoadCkanFromFile(CKAN.KSP current_instance, string ckan_file) { CkanModule module = CkanModule.FromFile(ckan_file); // We'll need to make some registry changes to do this. RegistryManager registry_manager = RegistryManager.Instance(current_instance); // Remove this version of the module in the registry, if it exists. registry_manager.registry.RemoveAvailable(module); // Sneakily add our version in... registry_manager.registry.AddAvailable(module); return(module); }
public static CkanModule ModuleManagerModule() { return(CkanModule.FromFile(DataDir("ModuleManager-2.5.1.ckan"))); }
private static int Install(InstallOptions options, CKAN.KSP current_instance, IUser user) { if (options.ckan_file != null) { // Oooh! We're installing from a CKAN file. log.InfoFormat("Installing from CKAN file {0}", options.ckan_file); CkanModule module = CkanModule.FromFile(options.ckan_file); // We'll need to make some registry changes to do this. RegistryManager registry_manager = RegistryManager.Instance(current_instance); // Remove this version of the module in the registry, if it exists. registry_manager.registry.RemoveAvailable(module); // Sneakily add our version in... registry_manager.registry.AddAvailable(module); // Add our module to the things we should install... options.modules.Add(module.identifier); // And continue with our install as per normal. } if (options.modules.Count == 0) { // What? No files specified? user.RaiseMessage( "Usage: ckan install [--with-suggests] [--with-all-suggests] [--no-recommends] Mod [Mod2, ...]"); return Exit.BADOPT; } // Prepare options. Can these all be done in the new() somehow? var install_ops = new RelationshipResolverOptions { with_all_suggests = options.with_all_suggests, with_suggests = options.with_suggests, with_recommends = !options.no_recommends }; // Install everything requested. :) try { var installer = ModuleInstaller.GetInstance(current_instance, user); installer.InstallList(options.modules, install_ops); } catch (ModuleNotFoundKraken ex) { user.RaiseMessage("Module {0} required, but not listed in index, or not available for your version of KSP", ex.module); user.RaiseMessage("If you're lucky, you can do a `ckan update` and try again."); user.RaiseMessage("Try `ckan install --no-recommends` to skip installation of recommended modules"); return Exit.ERROR; } catch (BadMetadataKraken ex) { user.RaiseMessage("Bad metadata detected for module {0}", ex.module); user.RaiseMessage(ex.Message); return Exit.ERROR; } catch (TooManyModsProvideKraken ex) { user.RaiseMessage("Too many mods provide {0}. Please pick from the following:\n", ex.requested); foreach (CkanModule mod in ex.modules) { user.RaiseMessage("* {0} ({1})", mod.identifier, mod.name); } user.RaiseMessage(String.Empty); // Looks tidier. return Exit.ERROR; } catch (FileExistsKraken ex) { if (ex.owning_module != null) { user.RaiseMessage( "\nOh no! We tried to overwrite a file owned by another mod!\n"+ "Please try a `ckan update` and try again.\n\n"+ "If this problem re-occurs, then it maybe a packaging bug.\n"+ "Please report it at:\n\n" + "https://github.com/KSP-CKAN/CKAN-meta/issues/new\n\n"+ "Please including the following information in your report:\n\n" + "File : {0}\n" + "Installing Mod : {1}\n" + "Owning Mod : {2}\n" + "CKAN Version : {3}\n", ex.filename, ex.installing_module, ex.owning_module, Meta.Version() ); } else { user.RaiseMessage( "\n\nOh no!\n\n"+ "It looks like you're trying to install a mod which is already installed,\n"+ "or which conflicts with another mod which is already installed.\n\n"+ "As a safety feature, the CKAN will *never* overwrite or alter a file\n"+ "that it did not install itself.\n\n"+ "If you wish to install {0} via the CKAN,\n"+ "then please manually uninstall the mod which owns:\n\n"+ "{1}\n\n"+"and try again.\n", ex.installing_module, ex.filename ); } user.RaiseMessage("Your GameData has been returned to its original state.\n"); return Exit.ERROR; } catch (InconsistentKraken ex) { // The prettiest Kraken formats itself for us. user.RaiseMessage(ex.InconsistenciesPretty); return Exit.ERROR; } catch (CancelledActionKraken) { user.RaiseMessage("Installation cancelled at user request."); return Exit.ERROR; } catch (MissingCertificateKraken kraken) { // Another very pretty kraken. user.RaiseMessage(kraken.ToString()); return Exit.ERROR; } catch (DownloadErrorsKraken) { user.RaiseMessage("One or more files failed to download, stopped."); return Exit.ERROR; } return Exit.OK; }
public static CkanModule FireSpitterModule() { return(CkanModule.FromFile(Path.Combine(DataDir(), "Firespitter-6.3.5.ckan"))); }
public static CkanModule MissionModule() { return(CkanModule.FromFile(DataDir("MissionTest-1.0.ckan"))); }