From 5deda9c537f654208885f3c2a3a5eb1330b7e2cf Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Fri, 3 Jan 2020 18:27:32 +0000 Subject: [PATCH] Split filesystem and image list options. --- .../.idea/contentModel.xml | 1 + DiscImageChef/Commands/Filesystem/Options.cs | 25 +--- DiscImageChef/Commands/Image/ImageFamily.cs | 1 + DiscImageChef/Commands/Image/Options.cs | 119 ++++++++++++++++++ DiscImageChef/DiscImageChef.csproj | 1 + 5 files changed, 123 insertions(+), 24 deletions(-) create mode 100644 DiscImageChef/Commands/Image/Options.cs diff --git a/.idea/.idea.DiscImageChef/.idea/contentModel.xml b/.idea/.idea.DiscImageChef/.idea/contentModel.xml index 8edcafaf2..89ef512ca 100644 --- a/.idea/.idea.DiscImageChef/.idea/contentModel.xml +++ b/.idea/.idea.DiscImageChef/.idea/contentModel.xml @@ -55,6 +55,7 @@ + diff --git a/DiscImageChef/Commands/Filesystem/Options.cs b/DiscImageChef/Commands/Filesystem/Options.cs index 00b74286e..72487c14c 100644 --- a/DiscImageChef/Commands/Filesystem/Options.cs +++ b/DiscImageChef/Commands/Filesystem/Options.cs @@ -46,7 +46,7 @@ namespace DiscImageChef.Commands.Filesystem internal class ListOptionsCommand : Command { public ListOptionsCommand() : base("options", - "Lists all options supported by read-only filesystems and writable media images.") => + "Lists all options supported by read-only filesystems.") => Handler = CommandHandler.Create(GetType().GetMethod(nameof(Invoke))); public static int Invoke(bool debug, bool verbose) @@ -84,29 +84,6 @@ namespace DiscImageChef.Commands.Filesystem DicConsole.WriteLine(); } - DicConsole.WriteLine(); - - DicConsole.WriteLine("Read/Write media images options:"); - - foreach(KeyValuePair kvp in plugins.WritableImages) - { - List<(string name, Type type, string description, object @default)> options = - kvp.Value.SupportedOptions.ToList(); - - if(options.Count == 0) - continue; - - DicConsole.WriteLine("\tOptions for {0}:", kvp.Value.Name); - DicConsole.WriteLine("\t\t{0,-20} {1,-10} {2,-12} {3,-8}", "Name", "Type", "Default", "Description"); - - foreach((string name, Type type, string description, object @default) option in - options.OrderBy(t => t.name)) - DicConsole.WriteLine("\t\t{0,-20} {1,-10} {2,-12} {3,-8}", option.name, TypeToString(option.type), - option.@default, option.description); - - DicConsole.WriteLine(); - } - return(int)ErrorNumber.NoError; } diff --git a/DiscImageChef/Commands/Image/ImageFamily.cs b/DiscImageChef/Commands/Image/ImageFamily.cs index 84f7d5203..0b6933532 100644 --- a/DiscImageChef/Commands/Image/ImageFamily.cs +++ b/DiscImageChef/Commands/Image/ImageFamily.cs @@ -48,6 +48,7 @@ namespace DiscImageChef.Commands.Image AddCommand(new DecodeCommand()); AddCommand(new EntropyCommand()); AddCommand(new ImageInfoCommand()); + AddCommand(new ListOptionsCommand()); AddCommand(new PrintHexCommand()); AddCommand(new VerifyCommand()); } diff --git a/DiscImageChef/Commands/Image/Options.cs b/DiscImageChef/Commands/Image/Options.cs new file mode 100644 index 000000000..d6eb03e26 --- /dev/null +++ b/DiscImageChef/Commands/Image/Options.cs @@ -0,0 +1,119 @@ +// /*************************************************************************** +// The Disc Image Chef +// ---------------------------------------------------------------------------- +// +// Filename : ListOptions.cs +// Author(s) : Natalia Portillo +// +// Component : Verbs. +// +// --[ Description ] ---------------------------------------------------------- +// +// Lists all options supported by read-only filesystems. +// +// --[ License ] -------------------------------------------------------------- +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// ---------------------------------------------------------------------------- +// Copyright © 2011-2020 Natalia Portillo +// ****************************************************************************/ + +using System; +using System.Collections.Generic; +using System.CommandLine; +using System.CommandLine.Invocation; +using System.Linq; +using DiscImageChef.CommonTypes; +using DiscImageChef.CommonTypes.Enums; +using DiscImageChef.CommonTypes.Interfaces; +using DiscImageChef.Console; +using DiscImageChef.Core; + +namespace DiscImageChef.Commands.Image +{ + internal class ListOptionsCommand : Command + { + public ListOptionsCommand() : base("options", + "Lists all options supported by writable media images.") => + Handler = CommandHandler.Create(GetType().GetMethod(nameof(Invoke))); + + public static int Invoke(bool debug, bool verbose) + { + MainClass.PrintCopyright(); + + if(debug) + DicConsole.DebugWriteLineEvent += System.Console.Error.WriteLine; + + if(verbose) + DicConsole.VerboseWriteLineEvent += System.Console.WriteLine; + + DicConsole.DebugWriteLine("List-Options command", "--debug={0}", debug); + DicConsole.DebugWriteLine("List-Options command", "--verbose={0}", verbose); + Statistics.AddCommand("list-options"); + + PluginBase plugins = GetPluginBase.Instance; + + DicConsole.WriteLine("Read/Write media images options:"); + + foreach(KeyValuePair kvp in plugins.WritableImages) + { + List<(string name, Type type, string description, object @default)> options = + kvp.Value.SupportedOptions.ToList(); + + if(options.Count == 0) + continue; + + DicConsole.WriteLine("\tOptions for {0}:", kvp.Value.Name); + DicConsole.WriteLine("\t\t{0,-20} {1,-10} {2,-12} {3,-8}", "Name", "Type", "Default", "Description"); + + foreach((string name, Type type, string description, object @default) option in + options.OrderBy(t => t.name)) + DicConsole.WriteLine("\t\t{0,-20} {1,-10} {2,-12} {3,-8}", option.name, TypeToString(option.type), + option.@default, option.description); + + DicConsole.WriteLine(); + } + + return(int)ErrorNumber.NoError; + } + + static string TypeToString(Type type) + { + if(type == typeof(bool)) + return"boolean"; + + if(type == typeof(sbyte) || + type == typeof(short) || + type == typeof(int) || + type == typeof(long)) + return"signed number"; + + if(type == typeof(byte) || + type == typeof(ushort) || + type == typeof(uint) || + type == typeof(ulong)) + return"number"; + + if(type == typeof(float) || + type == typeof(double)) + return"float number"; + + if(type == typeof(Guid)) + return"uuid"; + + return type == typeof(string) ? "string" : type.ToString(); + } + } +} \ No newline at end of file diff --git a/DiscImageChef/DiscImageChef.csproj b/DiscImageChef/DiscImageChef.csproj index 6684ed5dc..9e5b3ebb0 100644 --- a/DiscImageChef/DiscImageChef.csproj +++ b/DiscImageChef/DiscImageChef.csproj @@ -74,6 +74,7 @@ +