Example #1
0
        public int Execute()
        {
            var assemblyName = typeof(Help).Assembly.GetName();

            var sb = new StringBuilder();

            sb.Append("usage: ");
            sb.Append(Path.GetFileName(assemblyName.CodeBase));
            sb.AppendLine(" <command> [<switches>] -i <input-file>");
            sb.AppendLine();
            sb.AppendLine("Commands:");
            sb.AppendLine();
            sb.AppendLine("\t remove-parts");
            sb.AppendLine("\t\t remove one or more parts from one or more crafts");
            sb.AppendLine();
            sb.AppendLine("\t list-crafts");
            sb.AppendLine("\t\t list crafts in the input file");
            sb.AppendLine();
            sb.AppendLine("\t list-parts");
            sb.AppendLine("\t\t list parts in the input file");
            sb.AppendLine();
            sb.AppendLine("\t list-partdeps");
            sb.AppendLine("\t\t same as 'list-parts' but also prints dependencies");
            sb.AppendLine("\t\t the part filter is applied on the dependencies for this command");
            sb.AppendLine();
            sb.AppendLine("Switches:");
            sb.AppendLine();
            sb.AppendLine("\t -i <path>");
            sb.AppendLine("\t\t specifies the input file");
            sb.AppendLine();
            sb.AppendLine("\t[Optional]");
            sb.AppendLine("\t -o <path>");
            sb.AppendLine("\t\t specifies the output file (modifies input file if not specified)");
            sb.AppendLine();
            sb.AppendLine("\t[Optional]");
            sb.AppendLine("\t -c, --craft <name-pattern>");
            sb.AppendLine("\t\t apply craft filter (applies to all crafts if not specified)");
            sb.AppendLine("\t\t '!' in front of the regex performs inverse matching");
            sb.AppendLine("\t\t example for name pattern: --craft \'^Asteroid\'");
            sb.AppendLine("\t\t example for inverse matching: --craft \'!Mün\'");
            sb.AppendLine();
            sb.AppendLine("\t[Optional]");
            sb.AppendLine("\t -p, --part <id or name-pattern>");
            sb.AppendLine("\t\t apply part filter (applies to all parts if not specified)");
            sb.AppendLine("\t\t if part is a number it is interpreted as the part id");
            sb.AppendLine("\t\t '!' in front of the regex performs inverse matching");
            sb.AppendLine("\t\t example for id: --part 1");
            sb.AppendLine("\t\t example for name pattern: --part \'fuelTank.*\'");
            sb.AppendLine("\t\t example for inverse matching: --part \'!^PotatoRoid$\'");
            sb.AppendLine();
            sb.AppendLine("\t[Optional]");
            sb.AppendLine("\t -s, --silent");
            sb.AppendLine("\t\t do not print additional info, do not ask for confirmation");
            sb.AppendLine();

            ui.DisplayUserMessage(sb.ToString());

            return(0);
        }
Example #2
0
        public int Execute(String inputFilePath, RegexFilter craftFilter, RegexFilter partFilter)
        {
            ui.DisplayUserMessage($"Searching for crafts matching '{craftFilter}'...");

            var kspObjTree = CraftLoader.LoadFromFile(inputFilePath);
            var crafts     = new CraftLookup(kspObjTree).LookupCrafts(craftFilter);

            ui.DisplayUserMessage($"Searching for parts matching '{partFilter}'...");

            var filteredParts = crafts.ToDictionary(craft => craft, craft => FindParts(craft, partFilter));

            if (filteredParts.Any(entry => entry.Value.Count > 0))
            {
                ui.DisplayPartList(filteredParts);
            }

            return(0);
        }
Example #3
0
        public int Execute(String inputFilePath, String outputFilePath, RegexFilter craftFilter, RegexFilter partFilter)
        {
            ui.DisplayUserMessage($"Searching for crafts matching '{craftFilter}'...");

            var kspObjTree = CraftLoader.LoadFromFile(inputFilePath);
            var crafts     = new CraftLookup(kspObjTree).LookupCrafts(craftFilter).ToList();

            if (crafts.Count <= 0)
            {
                ui.DisplayErrorMessage($"No craft matching '{craftFilter}' found, aborting");
                return(-1);
            }

            ui.DisplayUserMessage($"Searching for parts matching '{partFilter}'...");

            var partsRemoved = crafts.Aggregate(false, (removed, craft) => removed | RemoveMatchingParts(craft, partFilter));

            if (!partsRemoved)
            {
                ui.DisplayErrorMessage($"No parts removed");
                return(-1);
            }

            CraftLoader.SaveToFile(outputFilePath, kspObjTree);

            return(0);
        }
Example #4
0
        public int Execute()
        {
            var assemblyName = typeof(Info).Assembly.GetName();

            var sb = new StringBuilder();

            sb.AppendLine($"{assemblyName.Name} v{assemblyName.Version.Major}.{assemblyName.Version.Minor}");
            sb.AppendLine("Compatible with KSP version: 1.1.3");

            ui.DisplayUserMessage(sb.ToString());

            return(0);
        }
Example #5
0
        public int Execute(String inputFilePath, RegexFilter craftFilter)
        {
            ui.DisplayUserMessage($"Searching for crafts matching '{craftFilter}'...");

            var kspObjTree = CraftLoader.LoadFromFile(inputFilePath);
            var crafts     = new CraftLookup(kspObjTree).LookupCrafts(craftFilter).ToList();

            if (crafts.Count > 0)
            {
                ui.DisplayCraftList(crafts);
            }

            return(0);
        }