Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }
Example #7
0
        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));
        }
Example #8
0
        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);
        }
Example #9
0
        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);
        }
Example #10
0
        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);
        }
Example #11
0
        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);
        }