Пример #1
0
        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"];
                }
            }
        }
Пример #2
0
        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>());
                }
            }
        }
Пример #3
0
        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>());
                }
            }
        }
Пример #4
0
        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>());
                }
            }
        }
Пример #5
0
            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;
                        }
                    }
            }
Пример #6
0
        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);
                }
            }
        }
Пример #7
0
        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"];
                }
            }
        }
Пример #8
0
        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);
                }
            }
        }
Пример #9
0
            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;
                                    }
                                }
                            }
                        }
                    }
                }
            }