private int DefaultRepository(DefaultOptions options) { RegistryManager manager = RegistryManager.Instance(MainClass.GetGameInstance(Manager)); if (options.uri == null) { User.RaiseMessage("default <uri> - argument missing, perhaps you forgot it?"); return(Exit.BADOPT); } log.DebugFormat("About to add repository '{0}' - '{1}'", Repository.default_ckan_repo_name, options.uri); SortedDictionary <string, Repository> repositories = manager.registry.Repositories; if (repositories.ContainsKey(Repository.default_ckan_repo_name)) { repositories.Remove(Repository.default_ckan_repo_name); } repositories.Add(Repository.default_ckan_repo_name, new Repository(Repository.default_ckan_repo_name, Repository.default_ckan_repo_uri)); User.RaiseMessage("Set {0} repository to '{1}'", Repository.default_ckan_repo_name, options.uri); manager.Save(); return(Exit.OK); }
private int ListFilters(FilterListOptions opts, string verb) { int exitCode = opts.Handle(manager, user); if (exitCode != Exit.OK) { return(exitCode); } var cfg = ServiceLocator.Container.Resolve <Configuration.IConfiguration>(); user.RaiseMessage("Global filters:"); foreach (string filter in cfg.GlobalInstallFilters) { user.RaiseMessage("\t- {0}", filter); } user.RaiseMessage(""); var instance = MainClass.GetGameInstance(manager); user.RaiseMessage("Instance filters:"); foreach (string filter in instance.InstallFilters) { user.RaiseMessage("\t- {0}", filter); } return(Exit.OK); }
private int ForgetRepository(ForgetOptions options) { if (options.name == null) { User.RaiseError("forget <name> - argument missing, perhaps you forgot it?"); return(Exit.BADOPT); } RegistryManager manager = RegistryManager.Instance(MainClass.GetGameInstance(Manager)); var registry = manager.registry; log.DebugFormat("About to forget repository '{0}'", options.name); var repos = registry.Repositories; string name = options.name; if (!repos.ContainsKey(options.name)) { name = repos.Keys.FirstOrDefault(repo => repo.Equals(options.name, StringComparison.OrdinalIgnoreCase)); if (name == null) { User.RaiseMessage("Couldn't find repository with name \"{0}\", aborting..", options.name); return(Exit.BADOPT); } User.RaiseMessage("Removing insensitive match \"{0}\"", name); } registry.Repositories.Remove(name); User.RaiseMessage("Successfully removed \"{0}\"", options.name); manager.Save(); return(Exit.OK); }
public int RunSubCommand(SubCommandOptions unparsed) { int exitCode = Exit.OK; // Parse and process our sub-verbs Parser.Default.ParseArgumentsStrict(unparsed.options.ToArray(), new RepairSubOptions(), (string option, object suboptions) => { // ParseArgumentsStrict calls us unconditionally, even with bad arguments if (!string.IsNullOrEmpty(option) && suboptions != null) { CommonOptions options = (CommonOptions)suboptions; User = new ConsoleUser(options.Headless); KSPManager manager = new KSPManager(User); exitCode = options.Handle(manager, User); if (exitCode != Exit.OK) { return; } switch (option) { case "registry": exitCode = Registry(MainClass.GetGameInstance(manager)); break; default: User.RaiseMessage("Unknown command: repair {0}", option); exitCode = Exit.BADOPT; break; } } }, () => { exitCode = MainClass.AfterHelp(); }); RegistryManager.DisposeAll(); return(exitCode); }
private int RemoveFilters(FilterRemoveOptions opts, string verb) { if (opts.filters.Count < 1) { user.RaiseMessage("Usage: ckan filter {0} filter1 [filter2 ...]", verb); return(Exit.BADOPT); } int exitCode = opts.Handle(manager, user); if (exitCode != Exit.OK) { return(exitCode); } if (opts.global) { var cfg = ServiceLocator.Container.Resolve <Configuration.IConfiguration>(); var notFound = opts.filters .Except(cfg.GlobalInstallFilters) .ToArray(); if (notFound.Length > 0) { user.RaiseError( "Global filters not found: {0}", string.Join(", ", notFound) ); return(Exit.BADOPT); } else { cfg.GlobalInstallFilters = cfg.GlobalInstallFilters .Except(opts.filters) .ToArray(); } } else { var instance = MainClass.GetGameInstance(manager); var notFound = opts.filters .Except(instance.InstallFilters) .ToArray(); if (notFound.Length > 0) { user.RaiseError( "Instance filters not found: {0}", string.Join(", ", notFound) ); return(Exit.BADOPT); } else { instance.InstallFilters = instance.InstallFilters .Except(opts.filters) .ToArray(); } } return(Exit.OK); }
private int AddRepository(AddOptions options) { RegistryManager manager = RegistryManager.Instance(MainClass.GetGameInstance(Manager)); if (options.name == null) { User.RaiseMessage("add <name> [ <uri> ] - argument missing, perhaps you forgot it?"); return(Exit.BADOPT); } if (options.uri == null) { RepositoryList repositoryList; try { repositoryList = FetchMasterRepositoryList(); } catch { User.RaiseError("Couldn't fetch CKAN repositories master list from {0}", Repository.default_repo_master_list.ToString()); return(Exit.ERROR); } foreach (Repository candidate in repositoryList.repositories) { if (String.Equals(candidate.name, options.name, StringComparison.OrdinalIgnoreCase)) { options.name = candidate.name; options.uri = candidate.uri.ToString(); } } // Nothing found in the master list? if (options.uri == null) { User.RaiseMessage("Name {0} not found in master list, please provide name and uri.", options.name); return(Exit.BADOPT); } } log.DebugFormat("About to add repository '{0}' - '{1}'", options.name, options.uri); SortedDictionary <string, Repository> repositories = manager.registry.Repositories; if (repositories.ContainsKey(options.name)) { User.RaiseMessage("Repository with name \"{0}\" already exists, aborting..", options.name); return(Exit.BADOPT); } repositories.Add(options.name, new Repository(options.name, options.uri)); User.RaiseMessage("Added repository '{0}' - '{1}'", options.name, options.uri); manager.Save(); return(Exit.OK); }
private RepositoryList FetchMasterRepositoryList(Uri master_uri = null) { if (master_uri == null) { master_uri = MainClass.GetGameInstance(Manager).game.RepositoryListURL; } string json = Net.DownloadText(master_uri); return(JsonConvert.DeserializeObject <RepositoryList>(json)); }
private int MarkAuto(MarkAutoOptions opts, bool value, string verb, string descrip) { if (opts.modules.Count < 1) { user.RaiseMessage("Usage: ckan mark {0} Mod [Mod2 ...]", verb); return(Exit.BADOPT); } int exitCode = opts.Handle(manager, user); if (exitCode != Exit.OK) { return(exitCode); } var ksp = MainClass.GetGameInstance(manager); var regMgr = RegistryManager.Instance(ksp); bool needSave = false; Search.AdjustModulesCase(ksp, opts.modules); foreach (string id in opts.modules) { InstalledModule im = regMgr.registry.InstalledModule(id); if (im == null) { user.RaiseError("{0} is not installed.", id); } else if (im.AutoInstalled == value) { user.RaiseError("{0} is already marked as {1}.", id, descrip); } else { user.RaiseMessage("Marking {0} as {1}...", id, descrip); try { im.AutoInstalled = value; needSave = true; } catch (ModuleIsDLCKraken kraken) { user.RaiseMessage($"Can't mark expansion '{kraken.module.name}' as auto-installed."); return(Exit.BADOPT); } } } if (needSave) { regMgr.Save(false); user.RaiseMessage("Changes made!"); } return(Exit.OK); }
private int ListRepositories() { var manager = RegistryManager.Instance(MainClass.GetGameInstance(Manager)); User.RaiseMessage("Listing all known repositories:"); SortedDictionary <string, Repository> repositories = manager.registry.Repositories; int maxNameLen = 0; foreach (Repository repository in repositories.Values) { maxNameLen = Math.Max(maxNameLen, repository.name.Length); } foreach (Repository repository in repositories.Values) { User.RaiseMessage(" {0}: {1}: {2}", repository.name.PadRight(maxNameLen), repository.priority, repository.uri); } return(Exit.OK); }
private int AddFilters(FilterAddOptions opts, string verb) { if (opts.filters.Count < 1) { user.RaiseMessage("Usage: ckan filter {0} filter1 [filter2 ...]", verb); return(Exit.BADOPT); } int exitCode = opts.Handle(manager, user); if (exitCode != Exit.OK) { return(exitCode); } if (opts.global) { var cfg = ServiceLocator.Container.Resolve <Configuration.IConfiguration>(); var duplicates = cfg.GlobalInstallFilters .Intersect(opts.filters) .ToArray(); if (duplicates.Length > 0) { user.RaiseError( "Global filters already set: {0}", string.Join(", ", duplicates) ); return(Exit.BADOPT); } else { cfg.GlobalInstallFilters = cfg.GlobalInstallFilters .Concat(opts.filters) .Distinct() .ToArray(); } } else { var instance = MainClass.GetGameInstance(manager); var duplicates = instance.InstallFilters .Intersect(opts.filters) .ToArray(); if (duplicates.Length > 0) { user.RaiseError( "Instance filters already set: {0}", string.Join(", ", duplicates) ); return(Exit.BADOPT); } else { instance.InstallFilters = instance.InstallFilters .Concat(opts.filters) .Distinct() .ToArray(); } } return(Exit.OK); }
private int AvailableRepositories() { User.RaiseMessage("Listing all (canonical) available CKAN repositories:"); RepositoryList repositories; try { repositories = FetchMasterRepositoryList(); } catch { User.RaiseError("Couldn't fetch CKAN repositories master list from {0}", MainClass.GetGameInstance(Manager).game.RepositoryListURL.ToString()); return(Exit.ERROR); } int maxNameLen = 0; foreach (Repository repository in repositories.repositories) { maxNameLen = Math.Max(maxNameLen, repository.name.Length); } foreach (Repository repository in repositories.repositories) { User.RaiseMessage(" {0}: {1}", repository.name.PadRight(maxNameLen), repository.uri); } return(Exit.OK); }