diff --git a/NAPS2.Lib/Config/Naps2Config.cs b/NAPS2.Lib/Config/Naps2Config.cs index 73cfae19cd..8722961635 100644 --- a/NAPS2.Lib/Config/Naps2Config.cs +++ b/NAPS2.Lib/Config/Naps2Config.cs @@ -25,7 +25,7 @@ public static Naps2Config Stub() => ConfigScope.Memory(), ConfigScope.Defaults(InternalDefaults.GetCommonConfig())); - public Naps2Config(string appConfigPath, string userConfigPath) + public Naps2Config(string appConfigPath, string userConfigPath, string? userConfigName = null) { AppLocked = ConfigScope.File(appConfigPath, new ConfigSerializer(ConfigReadMode.LockedOnly, ConfigRootName.AppConfig), @@ -33,12 +33,14 @@ public Naps2Config(string appConfigPath, string userConfigPath) Run = ConfigScope.Memory(); User = ConfigScope.File(userConfigPath, new ConfigSerializer(ConfigReadMode.All, ConfigRootName.UserConfig), ConfigScopeMode.ReadWrite); + UserConfigName = userConfigName; AppDefault = ConfigScope.File(appConfigPath, new ConfigSerializer(ConfigReadMode.DefaultOnly, ConfigRootName.AppConfig), ConfigScopeMode.ReadOnly); InternalDefault = ConfigScope.Defaults(InternalDefaults.GetCommonConfig()); Scopes = new[] { AppLocked, Run, User, AppDefault, InternalDefault }; + UserConfigName = userConfigName; } public Naps2Config(ConfigScope appLocked, ConfigScope run, @@ -87,4 +89,6 @@ public Naps2Config WithTransaction(params TransactionConfigScope[] public ConfigScope User { get; } public ConfigScope AppDefault { get; } public ConfigScope InternalDefault { get; } + + public string? UserConfigName { get; } } \ No newline at end of file diff --git a/NAPS2.Lib/EtoForms/Ui/DesktopForm.cs b/NAPS2.Lib/EtoForms/Ui/DesktopForm.cs index 1ad1a5a578..e3f6359aac 100644 --- a/NAPS2.Lib/EtoForms/Ui/DesktopForm.cs +++ b/NAPS2.Lib/EtoForms/Ui/DesktopForm.cs @@ -575,6 +575,8 @@ public void EditWithAppChanged() protected virtual void UpdateTitle(ScanProfile? defaultProfile) { Title = string.Format(UiStrings.Naps2TitleFormat, defaultProfile?.DisplayName ?? UiStrings.Naps2FullName); + if (Config.UserConfigName != null) + Title += " (" + Config.UserConfigName + ")"; } private void ListViewMouseWheel(object? sender, MouseEventArgs e) diff --git a/NAPS2.Lib/Modules/CommonModule.cs b/NAPS2.Lib/Modules/CommonModule.cs index 91af8e51ac..787179ae37 100644 --- a/NAPS2.Lib/Modules/CommonModule.cs +++ b/NAPS2.Lib/Modules/CommonModule.cs @@ -39,9 +39,30 @@ protected override void Load(ContainerBuilder builder) builder.RegisterType().AsSelf(); // Config + string configFileName = "config"; + string? configName = null; // Default: standard config file + // Config file suffix specified via command line argument? + string? configFileOption = Environment.GetCommandLineArgs() + .FirstOrDefault(s => s.ToLower().StartsWith("/config=")); + if (configFileOption != null) + { + configName = configFileOption.Substring("/config=".Length).Trim(); + if (configName == "") + configName = null; + else + { + if (Path.GetInvalidFileNameChars().Any(configName.Contains)) + configName = null; + else + configFileName += "_" + configName; + } + } + configFileName += ".xml"; + // TODO: Make this a usable path on Mac/Linux var config = new Naps2Config(Path.Combine(Paths.Executable, "appsettings.xml"), - Path.Combine(Paths.AppData, "config.xml")); + Path.Combine(Paths.AppData, configFileName), + configName); // Remember optional config name builder.RegisterInstance(config); builder.RegisterBuildCallback(ctx => {