void SettingOverrides_PageEnter(object sender, System.Windows.Forms.Wizard.PageChangedArgs args) { if (!OptionGrid.Unsupported) { m_wrapper = new WizardSettingsWrapper(m_settings); if (!m_settings.ContainsKey("Overrides:Table")) { IList <Library.Interface.ICommandLineArgument> primary = new Library.Main.Options(new Dictionary <string, string>()).SupportedCommands; IList <Library.Interface.ICommandLineArgument> secondary = GetModuleOptions(m_wrapper, this); OptionGrid.Setup(primary, secondary, m_wrapper.Overrides); m_settings["Overrides:Table"] = OptionGrid.DataSet; m_settings["Overrides:DataElementCache"] = OptionGrid.DataElementCache; } else { OptionGrid.DataSet = (DataSet)m_settings["Overrides:Table"]; OptionGrid.DataElementCache = (Dictionary <string, Library.Interface.ICommandLineArgument>)m_settings["Overrides:DataElementCache"]; } } }
public static void PrintUsage(string topic, IDictionary <string, string> options) { try { //Force translation off System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture; System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.InvariantCulture; } catch { } if (string.IsNullOrWhiteSpace(topic)) { topic = "help"; } if (string.Equals("help", topic, StringComparison.InvariantCultureIgnoreCase)) { if (options.Count == 1) { topic = new List <string>(options.Keys)[0]; } else if (System.Environment.CommandLine.IndexOf("--exclude", StringComparison.InvariantCultureIgnoreCase) >= 0) { topic = "exclude"; } else if (System.Environment.CommandLine.IndexOf("--include", StringComparison.InvariantCultureIgnoreCase) >= 0) { topic = "include"; } } if (_document.ContainsKey(topic)) { string tp = _document[topic]; Library.Main.Options opts = new Library.Main.Options(new Dictionary <string, string>()); tp = tp.Replace("%VERSION%", License.VersionNumbers.Version); tp = tp.Replace("%BACKENDS%", string.Join(", ", Library.DynamicLoader.BackendLoader.Keys)); tp = tp.Replace("%MONO%", Library.Utility.Utility.IsMono ? "mono " : ""); tp = tp.Replace("%APP_PATH%", System.IO.Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location)); tp = tp.Replace("%PATH_SEPARATOR%", System.IO.Path.PathSeparator.ToString()); tp = tp.Replace("%EXAMPLE_SOURCE_PATH%", Library.Utility.Utility.IsClientLinux ? "/source" : "D:\\source"); tp = tp.Replace("%EXAMPLE_SOURCE_FILE%", Library.Utility.Utility.IsClientLinux ? "/source/myfile.txt" : "D:\\source\\file.txt"); tp = tp.Replace("%EXAMPLE_RESTORE_PATH%", Library.Utility.Utility.IsClientLinux ? "/restore" : "D:\\restore"); tp = tp.Replace("%ENCRYPTIONMODULES%", string.Join(", ", Library.DynamicLoader.EncryptionLoader.Keys)); tp = tp.Replace("%COMPRESSIONMODULES%", string.Join(", ", Library.DynamicLoader.CompressionLoader.Keys)); tp = tp.Replace("%DEFAULTENCRYPTIONMODULE%", opts.EncryptionModule); tp = tp.Replace("%DEFAULTCOMPRESSIONMODULE%", opts.CompressionModule); tp = tp.Replace("%GENERICMODULES%", string.Join(", ", Library.DynamicLoader.GenericLoader.Keys)); if (tp.Contains("%MAINOPTIONS%")) { List <string> lines = new List <string>(); SortedList <string, Library.Interface.ICommandLineArgument> sorted = new SortedList <string, Library.Interface.ICommandLineArgument>(); foreach (Library.Interface.ICommandLineArgument arg in opts.SupportedCommands) { sorted.Add(arg.Name, arg); } foreach (Library.Interface.ICommandLineArgument arg in Program.SupportedCommands) { sorted[arg.Name] = arg; } foreach (Library.Interface.ICommandLineArgument arg in sorted.Values) { lines.Add(PrintArgSimple(arg, arg.Name)); } tp = tp.Replace("%MAINOPTIONS%", string.Join(Environment.NewLine, lines.ToArray())); } if (tp.Contains("%ALLOPTIONS%")) { List <string> lines = new List <string>(); foreach (Library.Interface.ICommandLineArgument arg in opts.SupportedCommands) { Library.Interface.CommandLineArgument.PrintArgument(lines, arg, " "); } foreach (Library.Interface.ICommandLineArgument arg in Program.SupportedCommands) { Library.Interface.CommandLineArgument.PrintArgument(lines, arg, " "); } lines.Add(""); lines.Add(""); lines.Add(Strings.Program.SupportedBackendsHeader); foreach (Duplicati.Library.Interface.IBackend back in Library.DynamicLoader.BackendLoader.Backends) { PrintBackend(back, lines); } lines.Add(""); lines.Add(""); lines.Add(Strings.Program.SupportedEncryptionModulesHeader); foreach (Duplicati.Library.Interface.IEncryption mod in Library.DynamicLoader.EncryptionLoader.Modules) { PrintEncryptionModule(mod, lines); } lines.Add(""); lines.Add(""); lines.Add(Strings.Program.SupportedCompressionModulesHeader); foreach (Duplicati.Library.Interface.ICompression mod in Library.DynamicLoader.CompressionLoader.Modules) { PrintCompressionModule(mod, lines); } lines.Add(""); lines.Add(""); lines.Add(""); lines.Add(Strings.Program.GenericModulesHeader); foreach (Duplicati.Library.Interface.IGenericModule mod in Library.DynamicLoader.GenericLoader.Modules) { PrintGenericModule(mod, lines); } lines.Add(""); tp = tp.Replace("%ALLOPTIONS%", string.Join(Environment.NewLine, lines.ToArray())); } if (tp.Contains("%MODULEOPTIONS%")) { //Figure out which module we are in IList <Library.Interface.ICommandLineArgument> args = null; bool found = false; foreach (Duplicati.Library.Interface.IBackend backend in Library.DynamicLoader.BackendLoader.Backends) { if (string.Equals(backend.ProtocolKey, topic, StringComparison.InvariantCultureIgnoreCase)) { args = backend.SupportedCommands; found = true; break; } } if (args == null) { foreach (Duplicati.Library.Interface.IEncryption module in Library.DynamicLoader.EncryptionLoader.Modules) { if (string.Equals(module.FilenameExtension, topic, StringComparison.InvariantCultureIgnoreCase)) { args = module.SupportedCommands; found = true; break; } } } if (args == null) { foreach (Duplicati.Library.Interface.ICompression module in Library.DynamicLoader.CompressionLoader.Modules) { if (string.Equals(module.FilenameExtension, topic, StringComparison.InvariantCultureIgnoreCase)) { args = module.SupportedCommands; found = true; break; } } } if (args == null) { foreach (Duplicati.Library.Interface.IGenericModule module in Library.DynamicLoader.GenericLoader.Modules) { if (string.Equals(module.Key, topic, StringComparison.InvariantCultureIgnoreCase)) { args = module.SupportedCommands; found = true; break; } } } //If the module is not found, we do not display the description if (found) { tp = tp.Replace("%MODULEOPTIONS%", PrintArgsSimple(args)); } else { Console.WriteLine("Topic not found: {0}", topic); Console.WriteLine(); //Prevent recursive lookups if (topic != "help") { PrintUsage("help", new Dictionary <string, string>()); } return; } } if (NAMEDOPTION_REGEX.IsMatch(tp)) { tp = NAMEDOPTION_REGEX.Replace(tp, new Matcher().MathEvaluator); } PrintFormatted(tp.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)); } else { List <string> lines = new List <string>(); foreach (Duplicati.Library.Interface.IBackend backend in Library.DynamicLoader.BackendLoader.Backends) { if (string.Equals(backend.ProtocolKey, topic, StringComparison.InvariantCultureIgnoreCase)) { PrintBackend(backend, lines); break; } } if (lines.Count == 0) { foreach (Duplicati.Library.Interface.IEncryption mod in Library.DynamicLoader.EncryptionLoader.Modules) { if (string.Equals(mod.FilenameExtension, topic, StringComparison.InvariantCultureIgnoreCase)) { PrintEncryptionModule(mod, lines); break; } } } if (lines.Count == 0) { foreach (Duplicati.Library.Interface.ICompression mod in Library.DynamicLoader.CompressionLoader.Modules) { if (string.Equals(mod.FilenameExtension, topic, StringComparison.InvariantCultureIgnoreCase)) { PrintCompressionModule(mod, lines); break; } } } if (lines.Count == 0) { foreach (Duplicati.Library.Interface.IGenericModule mod in Library.DynamicLoader.GenericLoader.Modules) { if (string.Equals(mod.Key, topic, StringComparison.InvariantCultureIgnoreCase)) { PrintGenericModule(mod, lines); break; } } } if (lines.Count == 0) { PrintArgumentIfFound(new Matcher().Values, topic, lines); } if (lines.Count != 0) { PrintFormatted(lines); } else { Console.WriteLine("Topic not found: {0}", topic); Console.WriteLine(); PrintUsage("help", new Dictionary <string, string>()); } } }
public static void PrintUsage(TextWriter outwriter, string topic, IDictionary <string, string> options) { try { //Force translation off if this is from the commandline if (Program.FROM_COMMANDLINE) { System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture; System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.InvariantCulture; } } catch { } if (string.IsNullOrWhiteSpace(topic)) { topic = "help"; } if (string.Equals("help", topic, StringComparison.OrdinalIgnoreCase)) { if (options.Count == 1) { topic = new List <string>(options.Keys)[0]; } else if (System.Environment.CommandLine.IndexOf("--exclude", StringComparison.OrdinalIgnoreCase) >= 0) { topic = "exclude"; } else if (System.Environment.CommandLine.IndexOf("--include", StringComparison.OrdinalIgnoreCase) >= 0) { topic = "include"; } } if (_document.ContainsKey(topic)) { string tp = _document[topic]; Library.Main.Options opts = new Library.Main.Options(new Dictionary <string, string>()); tp = tp.Replace("%VERSION%", License.VersionNumbers.Version); tp = tp.Replace("%BACKENDS%", string.Join(", ", Library.DynamicLoader.BackendLoader.Keys)); tp = tp.Replace("%MONO%", Library.Utility.Utility.IsMono ? "mono " : ""); tp = tp.Replace("%APP_PATH%", System.IO.Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location)); tp = tp.Replace("%PATH_SEPARATOR%", System.IO.Path.PathSeparator.ToString()); tp = tp.Replace("%EXAMPLE_SOURCE_PATH%", Platform.IsClientPosix ? "/source" : @"D:\source"); tp = tp.Replace("%EXAMPLE_SOURCE_FILE%", Platform.IsClientPosix ? "/source/myfile.txt" : @"D:\source\file.txt"); tp = tp.Replace("%EXAMPLE_RESTORE_PATH%", Platform.IsClientPosix ? "/restore" : @"D:\restore"); tp = tp.Replace("%ENCRYPTIONMODULES%", string.Join(", ", Library.DynamicLoader.EncryptionLoader.Keys)); tp = tp.Replace("%COMPRESSIONMODULES%", string.Join(", ", Library.DynamicLoader.CompressionLoader.Keys)); tp = tp.Replace("%DEFAULTENCRYPTIONMODULE%", opts.EncryptionModule); tp = tp.Replace("%DEFAULTCOMPRESSIONMODULE%", opts.CompressionModule); tp = tp.Replace("%GENERICMODULES%", string.Join(", ", Library.DynamicLoader.GenericLoader.Keys)); var metaGroupNames = new[] { nameof(FilterGroup.None), nameof(FilterGroup.DefaultExcludes), nameof(FilterGroup.DefaultIncludes), }; tp = tp.Replace("%FILTER_GROUPS_SHORT%", string.Join(Environment.NewLine + " ", metaGroupNames.Concat(Enum.GetNames(typeof(FilterGroup)).Except(metaGroupNames, StringComparer.OrdinalIgnoreCase).OrderBy(x => x, StringComparer.OrdinalIgnoreCase)).Select(group => "{" + group + "}"))); tp = tp.Replace("%FILTER_GROUPS_LONG%", Library.Utility.FilterGroups.GetOptionDescriptions(4, true)); if (Platform.IsClientWindows) { // These properties are only valid for Windows tp = tp.Replace("%EXAMPLE_WILDCARD_DRIVE_SOURCE_PATH%", @"*:\source"); tp = tp.Replace("%EXAMPLE_VOLUME_GUID_SOURCE_PATH%", @"\\?\Volume{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\source"); tp = tp.Replace("%KNOWN_DRIVES_AND_VOLUMES%", string.Join(Environment.NewLine + " ", Library.Utility.Utility.GetVolumeGuidsAndDriveLetters().Select(pair => string.Format("{0} {1}", pair.Key, pair.Value)))); // We don't need to hide things between these tags on Windows tp = tp.Replace("%IF_WINDOWS%", string.Empty); tp = tp.Replace("%END_IF_WINDOWS%", string.Empty); } else { // Specifying the Singleline option allows . to match newlines, so this will detect spans that cover multiple lines tp = System.Text.RegularExpressions.Regex.Replace(tp, @"\%IF_WINDOWS\%.*\%END_IF_WINDOWS\%", string.Empty, System.Text.RegularExpressions.RegexOptions.Singleline); } if (tp.Contains("%MAINOPTIONS%")) { List <string> lines = new List <string>(); SortedList <string, Library.Interface.ICommandLineArgument> sorted = new SortedList <string, Library.Interface.ICommandLineArgument>(); foreach (Library.Interface.ICommandLineArgument arg in opts.SupportedCommands) { sorted.Add(arg.Name, arg); } foreach (Library.Interface.ICommandLineArgument arg in Program.SupportedOptions) { sorted[arg.Name] = arg; } foreach (Library.Interface.ICommandLineArgument arg in sorted.Values) { lines.Add(PrintArgSimple(arg, arg.Name)); } tp = tp.Replace("%MAINOPTIONS%", string.Join(Environment.NewLine, lines.ToArray())); } if (tp.Contains("%ALLOPTIONS%")) { List <string> lines = new List <string>(); foreach (Library.Interface.ICommandLineArgument arg in opts.SupportedCommands) { Library.Interface.CommandLineArgument.PrintArgument(lines, arg, " "); } foreach (Library.Interface.ICommandLineArgument arg in Program.SupportedOptions) { Library.Interface.CommandLineArgument.PrintArgument(lines, arg, " "); } lines.Add(""); lines.Add(""); lines.Add(Strings.Program.SupportedBackendsHeader); foreach (Duplicati.Library.Interface.IBackend back in Library.DynamicLoader.BackendLoader.Backends) { PrintBackend(back, lines); } lines.Add(""); lines.Add(""); lines.Add(Strings.Program.SupportedEncryptionModulesHeader); foreach (Duplicati.Library.Interface.IEncryption mod in Library.DynamicLoader.EncryptionLoader.Modules) { PrintEncryptionModule(mod, lines); } lines.Add(""); lines.Add(""); lines.Add(Strings.Program.SupportedCompressionModulesHeader); foreach (Duplicati.Library.Interface.ICompression mod in Library.DynamicLoader.CompressionLoader.Modules) { PrintCompressionModule(mod, lines); } lines.Add(""); lines.Add(""); lines.Add(""); lines.Add(Strings.Program.GenericModulesHeader); foreach (Duplicati.Library.Interface.IGenericModule mod in Library.DynamicLoader.GenericLoader.Modules) { PrintGenericModule(mod, lines); } lines.Add(""); tp = tp.Replace("%ALLOPTIONS%", string.Join(Environment.NewLine, lines.ToArray())); } if (tp.Contains("%MODULEOPTIONS%")) { //Figure out which module we are in IList <Library.Interface.ICommandLineArgument> args = null; bool found = false; foreach (Duplicati.Library.Interface.IBackend backend in Library.DynamicLoader.BackendLoader.Backends) { if (string.Equals(backend.ProtocolKey, topic, StringComparison.OrdinalIgnoreCase)) { args = backend.SupportedCommands; found = true; break; } } if (args == null) { foreach (Duplicati.Library.Interface.IEncryption module in Library.DynamicLoader.EncryptionLoader.Modules) { if (string.Equals(module.FilenameExtension, topic, StringComparison.OrdinalIgnoreCase)) { args = module.SupportedCommands; found = true; break; } } } if (args == null) { foreach (Duplicati.Library.Interface.ICompression module in Library.DynamicLoader.CompressionLoader.Modules) { if (string.Equals(module.FilenameExtension, topic, StringComparison.OrdinalIgnoreCase)) { args = module.SupportedCommands; found = true; break; } } } if (args == null) { foreach (Duplicati.Library.Interface.IGenericModule module in Library.DynamicLoader.GenericLoader.Modules) { if (string.Equals(module.Key, topic, StringComparison.OrdinalIgnoreCase)) { args = module.SupportedCommands; found = true; break; } } } //If the module is not found, we do not display the description if (found) { tp = tp.Replace("%MODULEOPTIONS%", PrintArgsSimple(args)); } else { outwriter.WriteLine("Topic not found: {0}", topic); outwriter.WriteLine(); //Prevent recursive lookups if (topic != "help") { PrintUsage(outwriter, "help", new Dictionary <string, string>()); } return; } } if (NAMEDOPTION_REGEX.IsMatch(tp)) { tp = NAMEDOPTION_REGEX.Replace(tp, new Matcher().MathEvaluator); } PrintFormatted(outwriter, tp.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)); } else { List <string> lines = new List <string>(); foreach (Duplicati.Library.Interface.IBackend backend in Library.DynamicLoader.BackendLoader.Backends) { if (string.Equals(backend.ProtocolKey, topic, StringComparison.OrdinalIgnoreCase)) { PrintBackend(backend, lines); break; } } if (lines.Count == 0) { foreach (Duplicati.Library.Interface.IEncryption mod in Library.DynamicLoader.EncryptionLoader.Modules) { if (string.Equals(mod.FilenameExtension, topic, StringComparison.OrdinalIgnoreCase)) { PrintEncryptionModule(mod, lines); break; } } } if (lines.Count == 0) { foreach (Duplicati.Library.Interface.ICompression mod in Library.DynamicLoader.CompressionLoader.Modules) { if (string.Equals(mod.FilenameExtension, topic, StringComparison.OrdinalIgnoreCase)) { PrintCompressionModule(mod, lines); break; } } } if (lines.Count == 0) { foreach (Duplicati.Library.Interface.IGenericModule mod in Library.DynamicLoader.GenericLoader.Modules) { if (string.Equals(mod.Key, topic, StringComparison.OrdinalIgnoreCase)) { PrintGenericModule(mod, lines); break; } } } if (lines.Count == 0) { PrintArgumentIfFound(new Matcher().Values, topic, lines); } if (lines.Count != 0) { PrintFormatted(outwriter, lines); } else { outwriter.WriteLine("Topic not found: {0}", topic); outwriter.WriteLine(); PrintUsage(outwriter, "help", new Dictionary <string, string>()); } } }
public static void PrintUsage(string topic, IDictionary<string, string> options) { try { //Force translation off System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture; System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.InvariantCulture; } catch { } if (string.IsNullOrEmpty(topic) || topic.Trim().Length == 0) topic = "help"; if (string.Equals("help", topic, StringComparison.InvariantCultureIgnoreCase) && options.Count == 1) topic = new List<string>(options.Keys)[0]; if (_document.ContainsKey(topic)) { string tp = _document[topic]; Library.Main.Options opts = new Library.Main.Options(new Dictionary<string, string>()); tp = tp.Replace("%VERSION%", License.VersionNumbers.Version); tp = tp.Replace("%BACKENDS%", string.Join(", ", Library.DynamicLoader.BackendLoader.Keys)); tp = tp.Replace("%MONO%", Library.Utility.Utility.IsMono ? "mono " : ""); tp = tp.Replace("%APP_PATH%", System.IO.Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location)); tp = tp.Replace("%EXAMPLE_SOURCE_PATH%", Library.Utility.Utility.IsClientLinux ? "/source" : "D:\\source"); tp = tp.Replace("%EXAMPLE_SOURCE_FILE%", Library.Utility.Utility.IsClientLinux ? "/source/myfile.txt" : "D:\\source\\file.txt"); tp = tp.Replace("%EXAMPLE_RESTORE_PATH%", Library.Utility.Utility.IsClientLinux ? "/restore" : "D:\\restore"); tp = tp.Replace("%ENCRYPTIONMODULES%", string.Join(", ", Library.DynamicLoader.EncryptionLoader.Keys)); tp = tp.Replace("%COMPRESSIONMODULES%", string.Join(", ", Library.DynamicLoader.CompressionLoader.Keys)); tp = tp.Replace("%DEFAULTENCRYPTIONMODULE%", opts.EncryptionModule); tp = tp.Replace("%DEFAULTCOMPRESSIONMODULE%", opts.CompressionModule); tp = tp.Replace("%GENERICMODULES%", string.Join(", ", Library.DynamicLoader.GenericLoader.Keys)); if (tp.Contains("%MAINOPTIONS%")) { List<string> lines = new List<string>(); SortedList<string, Library.Interface.ICommandLineArgument> sorted = new SortedList<string, Library.Interface.ICommandLineArgument>(); foreach (Library.Interface.ICommandLineArgument arg in opts.SupportedCommands) sorted.Add(arg.Name, arg); foreach (Library.Interface.ICommandLineArgument arg in Program.SupportedCommands) sorted.Add(arg.Name, arg); foreach (Library.Interface.ICommandLineArgument arg in sorted.Values) lines.Add(PrintArgSimple(arg, arg.Name)); tp = tp.Replace("%MAINOPTIONS%", string.Join(Environment.NewLine, lines.ToArray())); } if (tp.Contains("%ALLOPTIONS%")) { List<string> lines = new List<string>(); foreach (Library.Interface.ICommandLineArgument arg in opts.SupportedCommands) Library.Interface.CommandLineArgument.PrintArgument(lines, arg, " "); foreach (Library.Interface.ICommandLineArgument arg in Program.SupportedCommands) Library.Interface.CommandLineArgument.PrintArgument(lines, arg, " "); lines.Add(""); lines.Add(""); lines.Add(Strings.Program.SupportedBackendsHeader); foreach (XervBackup.Library.Interface.IBackend back in Library.DynamicLoader.BackendLoader.Backends) PrintBackend(back, lines); lines.Add(""); lines.Add(""); lines.Add(Strings.Program.SupportedEncryptionModulesHeader); foreach (XervBackup.Library.Interface.IEncryption mod in Library.DynamicLoader.EncryptionLoader.Modules) PrintEncryptionModule(mod, lines); lines.Add(""); lines.Add(""); lines.Add(Strings.Program.SupportedCompressionModulesHeader); foreach (XervBackup.Library.Interface.ICompression mod in Library.DynamicLoader.CompressionLoader.Modules) PrintCompressionModule(mod, lines); lines.Add(""); lines.Add(""); lines.Add(""); lines.Add(Strings.Program.GenericModulesHeader); foreach (XervBackup.Library.Interface.IGenericModule mod in Library.DynamicLoader.GenericLoader.Modules) PrintGenericModule(mod, lines); lines.Add(""); tp = tp.Replace("%ALLOPTIONS%", string.Join(Environment.NewLine, lines.ToArray())); } if (tp.Contains("%MODULEOPTIONS%")) { //Figure out which module we are in IList<Library.Interface.ICommandLineArgument> args = null; bool found = false; foreach (XervBackup.Library.Interface.IBackend backend in Library.DynamicLoader.BackendLoader.Backends) if (string.Equals(backend.ProtocolKey, topic, StringComparison.InvariantCultureIgnoreCase)) { args = backend.SupportedCommands; found = true; break; } if (args == null) foreach (XervBackup.Library.Interface.IEncryption module in Library.DynamicLoader.EncryptionLoader.Modules) if (string.Equals(module.FilenameExtension, topic, StringComparison.InvariantCultureIgnoreCase)) { args = module.SupportedCommands; found = true; break; } if (args == null) foreach (XervBackup.Library.Interface.ICompression module in Library.DynamicLoader.CompressionLoader.Modules) if (string.Equals(module.FilenameExtension, topic, StringComparison.InvariantCultureIgnoreCase)) { args = module.SupportedCommands; found = true; break; } if (args == null) foreach (XervBackup.Library.Interface.IGenericModule module in Library.DynamicLoader.GenericLoader.Modules) if (string.Equals(module.Key, topic, StringComparison.InvariantCultureIgnoreCase)) { args = module.SupportedCommands; found = true; break; } //If the module is not found, we do not display the description if (found) tp = tp.Replace("%MODULEOPTIONS%", PrintArgsSimple(args)); else { Console.WriteLine("Topic not found: {0}", topic); Console.WriteLine(); //Prevent recursive lookups if (topic != "help") PrintUsage("help", new Dictionary<string, string>()); return; } } if (NAMEDOPTION_REGEX.IsMatch(tp)) tp = NAMEDOPTION_REGEX.Replace(tp, new Matcher().MathEvaluator); PrintFormatted(tp.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)); } else { List<string> lines = new List<string>(); foreach (XervBackup.Library.Interface.IBackend backend in Library.DynamicLoader.BackendLoader.Backends) if (string.Equals(backend.ProtocolKey, topic, StringComparison.InvariantCultureIgnoreCase)) { PrintBackend(backend, lines); break; } if (lines.Count == 0) foreach (XervBackup.Library.Interface.IEncryption mod in Library.DynamicLoader.EncryptionLoader.Modules) if (string.Equals(mod.FilenameExtension, topic, StringComparison.InvariantCultureIgnoreCase)) { PrintEncryptionModule(mod, lines); break; } if (lines.Count == 0) foreach (XervBackup.Library.Interface.ICompression mod in Library.DynamicLoader.CompressionLoader.Modules) if (string.Equals(mod.FilenameExtension, topic, StringComparison.InvariantCultureIgnoreCase)) { PrintCompressionModule(mod, lines); break; } if (lines.Count == 0) foreach (XervBackup.Library.Interface.IGenericModule mod in Library.DynamicLoader.GenericLoader.Modules) if (string.Equals(mod.Key, topic, StringComparison.InvariantCultureIgnoreCase)) { PrintGenericModule(mod, lines); break; } if (lines.Count == 0) PrintArgumentIfFound(new Matcher().Values, topic, lines); if (lines.Count != 0) { PrintFormatted(lines); } else { Console.WriteLine("Topic not found: {0}", topic); Console.WriteLine(); PrintUsage("help", new Dictionary<string, string>()); } } }
public Matcher() { Library.Main.Options opts = new Library.Main.Options(new Dictionary<string, string>()); List<IList<Library.Interface.ICommandLineArgument>> foundArgs = new List<IList<Library.Interface.ICommandLineArgument>>(); foundArgs.Add(new Library.Main.Options(new Dictionary<string, string>()).SupportedCommands); foundArgs.Add(Program.SupportedCommands); foreach (XervBackup.Library.Interface.IBackend backend in Library.DynamicLoader.BackendLoader.Backends) if (backend.SupportedCommands != null) foundArgs.Add(backend.SupportedCommands); foreach (XervBackup.Library.Interface.IEncryption mod in Library.DynamicLoader.EncryptionLoader.Modules) if (mod.SupportedCommands != null) foundArgs.Add(mod.SupportedCommands); foreach (XervBackup.Library.Interface.ICompression mod in Library.DynamicLoader.CompressionLoader.Modules) if (mod.SupportedCommands != null) foundArgs.Add(mod.SupportedCommands); foreach (XervBackup.Library.Interface.IGenericModule mod in Library.DynamicLoader.GenericLoader.Modules) if (mod.SupportedCommands != null) foundArgs.Add(mod.SupportedCommands); foreach (IEnumerable<Library.Interface.ICommandLineArgument> arglst in foundArgs) if (arglst != null) { foreach (Library.Interface.ICommandLineArgument arg in arglst) { if (!args.ContainsKey(arg.Name)) args[arg.Name] = arg; if (arg.Aliases != null) foreach (string a in arg.Aliases) if (!args.ContainsKey(a)) args[a] = arg; } } }
private static void PrintOldUsage(bool extended) { bool isLinux = Library.Utility.Utility.IsClientLinux; List<string> lines = new List<string>(); lines.AddRange( string.Format( Strings.Program.ProgramUsageHeader.Replace("\r", ""), License.VersionNumbers.Version ).Split('\n') ); lines.AddRange(("\n " + Strings.Program.ProgramUsageBackup.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageRestore.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageCleanup.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageListFiles.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageListSets.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageListContentFiles.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageListSourceFolders.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageListSignatureFiles.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageFindLastVersion.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageVerify.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsagePurgeCache.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageDeleteOld.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageCreateFolders.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageBackend.Replace("\r", "")).Split('\n')); lines.AddRange(("\n" + Strings.Program.ProgramUsageOptionTypes.Replace("\r", "")).Split('\n')); lines.AddRange(("\n" + Strings.Program.ProgramUsageTimes.Replace("\r", "")).Split('\n')); lines.AddRange( string.Format( "\n" + Strings.Program.ProgramUsageFilters.Replace("\r", ""), isLinux ? Strings.Program.UsageExampleLinux : Strings.Program.UsageExampleWindows ).Split('\n') ); lines.Add(""); if (extended) { lines.Add(Strings.Program.XervBackupOptionsHeader); Library.Main.Options opt = new Library.Main.Options(new Dictionary<string, string>()); foreach (Library.Interface.ICommandLineArgument arg in opt.SupportedCommands) Library.Interface.CommandLineArgument.PrintArgument(lines, arg); lines.Add(""); lines.Add(""); lines.Add(Strings.Program.SupportedBackendsHeader); foreach (XervBackup.Library.Interface.IBackend back in Library.DynamicLoader.BackendLoader.Backends) { lines.Add(back.DisplayName + " (" + back.ProtocolKey + "):"); lines.Add(" " + back.Description); if (back.SupportedCommands != null && back.SupportedCommands.Count > 0) { lines.Add(" " + Strings.Program.SupportedOptionsHeader); foreach (Library.Interface.ICommandLineArgument arg in back.SupportedCommands) Library.Interface.CommandLineArgument.PrintArgument(lines, arg); } lines.Add(""); } lines.Add(""); lines.Add(""); lines.Add(Strings.Program.SupportedEncryptionModulesHeader); foreach (XervBackup.Library.Interface.IEncryption mod in Library.DynamicLoader.EncryptionLoader.Modules) { lines.Add(mod.DisplayName + " (." + mod.FilenameExtension + "):"); lines.Add(" " + mod.Description); if (mod.SupportedCommands != null && mod.SupportedCommands.Count > 0) { lines.Add(" " + Strings.Program.SupportedOptionsHeader); foreach (Library.Interface.ICommandLineArgument arg in mod.SupportedCommands) Library.Interface.CommandLineArgument.PrintArgument(lines, arg); } lines.Add(""); } lines.Add(""); lines.Add(""); lines.Add(Strings.Program.SupportedCompressionModulesHeader); foreach (XervBackup.Library.Interface.ICompression mod in Library.DynamicLoader.CompressionLoader.Modules) { lines.Add(mod.DisplayName + " (." + mod.FilenameExtension + "):"); lines.Add(" " + mod.Description); if (mod.SupportedCommands != null && mod.SupportedCommands.Count > 0) { lines.Add(" " + Strings.Program.SupportedOptionsHeader); foreach (Library.Interface.ICommandLineArgument arg in mod.SupportedCommands) Library.Interface.CommandLineArgument.PrintArgument(lines, arg); } lines.Add(""); } lines.Add(""); lines.Add(""); lines.Add(""); lines.Add(Strings.Program.GenericModulesHeader); foreach (XervBackup.Library.Interface.IGenericModule mod in Library.DynamicLoader.GenericLoader.Modules) { lines.Add(mod.DisplayName + " (." + mod.Key + "):"); lines.Add(" " + mod.Description); lines.Add(" " + (mod.LoadAsDefault ? Strings.Program.ModuleIsLoadedAutomatically : Strings.Program.ModuleIsNotLoadedAutomatically)); if (mod.SupportedCommands != null && mod.SupportedCommands.Count > 0) { lines.Add(" " + Strings.Program.SupportedOptionsHeader); foreach (Library.Interface.ICommandLineArgument arg in mod.SupportedCommands) Library.Interface.CommandLineArgument.PrintArgument(lines, arg); } lines.Add(""); } lines.Add(""); } foreach (string s in lines) { if (string.IsNullOrEmpty(s)) { Console.WriteLine(); continue; } string c = s; string leadingSpaces = ""; while (c.Length > 0 && c.StartsWith(" ")) { leadingSpaces += " "; c = c.Remove(0, 1); } while (c.Length > 0) { int len = Math.Min(Console.WindowWidth - 2, leadingSpaces.Length + c.Length); len -= leadingSpaces.Length; if (len < c.Length) { int ix = c.LastIndexOf(" ", len); if (ix > 0) len = ix; } Console.WriteLine(leadingSpaces + c.Substring(0, len).Trim()); c = c.Remove(0, len); } } }
void SettingOverrides_PageEnter(object sender, System.Windows.Forms.Wizard.PageChangedArgs args) { if (!OptionGrid.Unsupported) { m_wrapper = new WizardSettingsWrapper(m_settings); if (!m_settings.ContainsKey("Overrides:Table")) { IList<Library.Interface.ICommandLineArgument> primary = new Library.Main.Options(new Dictionary<string, string>()).SupportedCommands; IList<Library.Interface.ICommandLineArgument> secondary = GetModuleOptions(m_wrapper, this); OptionGrid.Setup(primary, secondary, m_wrapper.Overrides); m_settings["Overrides:Table"] = OptionGrid.DataSet; m_settings["Overrides:DataElementCache"] = OptionGrid.DataElementCache; } else { OptionGrid.DataSet = (DataSet)m_settings["Overrides:Table"]; OptionGrid.DataElementCache = (Dictionary<string, Library.Interface.ICommandLineArgument>)m_settings["Overrides:DataElementCache"]; } } }
private static void PrintOldUsage(bool extended) { bool isLinux = Library.Utility.Utility.IsClientLinux; List <string> lines = new List <string>(); lines.AddRange( string.Format( Strings.Program.ProgramUsageHeader.Replace("\r", ""), System.Reflection.Assembly.GetEntryAssembly().GetName().Version/*License.VersionNumbers.Version*/ ).Split('\n') ); lines.AddRange(("\n " + Strings.Program.ProgramUsageBackup.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageRestore.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageCleanup.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageListFiles.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageListSets.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageListContentFiles.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageListSourceFolders.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageListSignatureFiles.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageFindLastVersion.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageVerify.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsagePurgeCache.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageDeleteOld.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageCreateFolders.Replace("\r", "")).Split('\n')); lines.AddRange(("\n " + Strings.Program.ProgramUsageBackend.Replace("\r", "")).Split('\n')); lines.AddRange(("\n" + Strings.Program.ProgramUsageOptionTypes.Replace("\r", "")).Split('\n')); lines.AddRange(("\n" + Strings.Program.ProgramUsageTimes.Replace("\r", "")).Split('\n')); lines.AddRange( string.Format( "\n" + Strings.Program.ProgramUsageFilters.Replace("\r", ""), isLinux ? Strings.Program.UsageExampleLinux : Strings.Program.UsageExampleWindows ).Split('\n') ); lines.Add(""); if (extended) { lines.Add(Strings.Program.DuplicatiOptionsHeader); Library.Main.Options opt = new Library.Main.Options(new Dictionary <string, string>()); foreach (Library.Interface.ICommandLineArgument arg in opt.SupportedCommands) { Library.Interface.CommandLineArgument.PrintArgument(lines, arg); } lines.Add(""); lines.Add(""); lines.Add(Strings.Program.SupportedBackendsHeader); foreach (Duplicati.Library.Interface.IBackend back in Library.DynamicLoader.BackendLoader.Backends) { lines.Add(back.DisplayName + " (" + back.ProtocolKey + "):"); lines.Add(" " + back.Description); if (back.SupportedCommands != null && back.SupportedCommands.Count > 0) { lines.Add(" " + Strings.Program.SupportedOptionsHeader); foreach (Library.Interface.ICommandLineArgument arg in back.SupportedCommands) { Library.Interface.CommandLineArgument.PrintArgument(lines, arg); } } lines.Add(""); } lines.Add(""); lines.Add(""); lines.Add(Strings.Program.SupportedEncryptionModulesHeader); foreach (Duplicati.Library.Interface.IEncryption mod in Library.DynamicLoader.EncryptionLoader.Modules) { lines.Add(mod.DisplayName + " (." + mod.FilenameExtension + "):"); lines.Add(" " + mod.Description); if (mod.SupportedCommands != null && mod.SupportedCommands.Count > 0) { lines.Add(" " + Strings.Program.SupportedOptionsHeader); foreach (Library.Interface.ICommandLineArgument arg in mod.SupportedCommands) { Library.Interface.CommandLineArgument.PrintArgument(lines, arg); } } lines.Add(""); } lines.Add(""); lines.Add(""); lines.Add(Strings.Program.SupportedCompressionModulesHeader); foreach (Duplicati.Library.Interface.ICompression mod in Library.DynamicLoader.CompressionLoader.Modules) { lines.Add(mod.DisplayName + " (." + mod.FilenameExtension + "):"); lines.Add(" " + mod.Description); if (mod.SupportedCommands != null && mod.SupportedCommands.Count > 0) { lines.Add(" " + Strings.Program.SupportedOptionsHeader); foreach (Library.Interface.ICommandLineArgument arg in mod.SupportedCommands) { Library.Interface.CommandLineArgument.PrintArgument(lines, arg); } } lines.Add(""); } lines.Add(""); lines.Add(""); lines.Add(""); lines.Add(Strings.Program.GenericModulesHeader); foreach (Duplicati.Library.Interface.IGenericModule mod in Library.DynamicLoader.GenericLoader.Modules) { lines.Add(mod.DisplayName + " (." + mod.Key + "):"); lines.Add(" " + mod.Description); lines.Add(" " + (mod.LoadAsDefault ? Strings.Program.ModuleIsLoadedAutomatically : Strings.Program.ModuleIsNotLoadedAutomatically)); if (mod.SupportedCommands != null && mod.SupportedCommands.Count > 0) { lines.Add(" " + Strings.Program.SupportedOptionsHeader); foreach (Library.Interface.ICommandLineArgument arg in mod.SupportedCommands) { Library.Interface.CommandLineArgument.PrintArgument(lines, arg); } } lines.Add(""); } lines.Add(""); } foreach (string s in lines) { if (string.IsNullOrEmpty(s)) { Console.WriteLine(); continue; } string c = s; string leadingSpaces = ""; while (c.Length > 0 && c.StartsWith(" ")) { leadingSpaces += " "; c = c.Remove(0, 1); } while (c.Length > 0) { int len = Math.Min(Console.WindowWidth - 2, leadingSpaces.Length + c.Length); len -= leadingSpaces.Length; if (len < c.Length) { int ix = c.LastIndexOf(" ", len); if (ix > 0) { len = ix; } } Console.WriteLine(leadingSpaces + c.Substring(0, len).Trim()); c = c.Remove(0, len); } } }
public Matcher() { Library.Main.Options opts = new Library.Main.Options(new Dictionary <string, string>()); List <IList <Library.Interface.ICommandLineArgument> > foundArgs = new List <IList <Library.Interface.ICommandLineArgument> >(); foundArgs.Add(new Library.Main.Options(new Dictionary <string, string>()).SupportedCommands); foundArgs.Add(Program.SupportedCommands); foreach (Duplicati.Library.Interface.IBackend backend in Library.DynamicLoader.BackendLoader.Backends) { if (backend.SupportedCommands != null) { foundArgs.Add(backend.SupportedCommands); } } foreach (Duplicati.Library.Interface.IEncryption mod in Library.DynamicLoader.EncryptionLoader.Modules) { if (mod.SupportedCommands != null) { foundArgs.Add(mod.SupportedCommands); } } foreach (Duplicati.Library.Interface.ICompression mod in Library.DynamicLoader.CompressionLoader.Modules) { if (mod.SupportedCommands != null) { foundArgs.Add(mod.SupportedCommands); } } foreach (Duplicati.Library.Interface.IGenericModule mod in Library.DynamicLoader.GenericLoader.Modules) { if (mod.SupportedCommands != null) { foundArgs.Add(mod.SupportedCommands); } } foreach (IEnumerable <Library.Interface.ICommandLineArgument> arglst in foundArgs) { if (arglst != null) { foreach (Library.Interface.ICommandLineArgument arg in arglst) { if (!args.ContainsKey(arg.Name)) { args[arg.Name] = arg; } if (arg.Aliases != null) { foreach (string a in arg.Aliases) { if (!args.ContainsKey(a)) { args[a] = arg; } } } } } } }