From 39f91998076531e866c2c2e182abb7584bf57f58 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Sat, 7 Feb 2026 21:27:33 -0500 Subject: [PATCH] Move other conversion method to options loader --- CHANGELIST.md | 1 + MPF.Frontend/Options.cs | 107 --------- MPF.Frontend/Tools/OptionsLoader.cs | 361 +++++++++++++++++++++------- 3 files changed, 269 insertions(+), 200 deletions(-) diff --git a/CHANGELIST.md b/CHANGELIST.md index f70f2625..f698333f 100644 --- a/CHANGELIST.md +++ b/CHANGELIST.md @@ -36,6 +36,7 @@ - Introduce base dump settings type - Remove passthrough property on Options - Move conversion method to options loader +- Move other conversion method to options loader ### 3.6.0 (2025-11-28) diff --git a/MPF.Frontend/Options.cs b/MPF.Frontend/Options.cs index c9340900..b4f89b64 100644 --- a/MPF.Frontend/Options.cs +++ b/MPF.Frontend/Options.cs @@ -3,14 +3,10 @@ using System.Collections.Generic; using System.IO; using Newtonsoft.Json; using SabreTools.RedumpLib.Data; -using AaruConstants = MPF.ExecutionContexts.Aaru.SettingConstants; using AaruDumpSettings = MPF.ExecutionContexts.Aaru.DumpSettings; -using DiscImageCreatorConstants = MPF.ExecutionContexts.DiscImageCreator.SettingConstants; using DiscImageCreatorDumpSettings = MPF.ExecutionContexts.DiscImageCreator.DumpSettings; -using DreamdumpConstants = MPF.ExecutionContexts.Dreamdump.SettingConstants; using DreamdumpDumpSettings = MPF.ExecutionContexts.Dreamdump.DumpSettings; using LogCompression = MPF.Processors.LogCompression; -using RedumperConstants = MPF.ExecutionContexts.Redumper.SettingConstants; using RedumperDumpSettings = MPF.ExecutionContexts.Redumper.DumpSettings; namespace MPF.Frontend @@ -78,109 +74,6 @@ namespace MPF.Frontend /// public Options() { } - /// - /// Constructor taking a dictionary for settings - /// - /// Dictionary representing settings - /// TODO: Remove when Options is no longer relevant - public Options(Dictionary? source = null) - { - source ??= []; - - FirstRun = GetBooleanSetting(source, "FirstRun", true); - CheckForUpdatesOnStartup = GetBooleanSetting(source, "CheckForUpdatesOnStartup", true); - VerboseLogging = GetBooleanSetting(source, "VerboseLogging", true); - var valueString = GetStringSetting(source, "InternalProgram", InternalProgram.Redumper.ToString()); - var tempInternalProgram = valueString.ToInternalProgram(); - InternalProgram = tempInternalProgram == InternalProgram.NONE ? InternalProgram.Redumper : tempInternalProgram; - - GUI.CopyUpdateUrlToClipboard = GetBooleanSetting(source, "CopyUpdateUrlToClipboard", true); - GUI.OpenLogWindowAtStartup = GetBooleanSetting(source, "OpenLogWindowAtStartup", true); - - valueString = GetStringSetting(source, "DefaultInterfaceLanguage", InterfaceLanguage.AutoDetect.ShortName()); - GUI.DefaultInterfaceLanguage = valueString.ToInterfaceLanguage(); - GUI.ShowDebugViewMenuItem = GetBooleanSetting(source, "ShowDebugViewMenuItem", false); - GUI.Theming.EnableDarkMode = GetBooleanSetting(source, "EnableDarkMode", false); - GUI.Theming.EnablePurpMode = GetBooleanSetting(source, "EnablePurpMode", false); - GUI.Theming.CustomBackgroundColor = GetStringSetting(source, "CustomBackgroundColor", null); - GUI.Theming.CustomTextColor = GetStringSetting(source, "CustomTextColor", null); - - GUI.FastUpdateLabel = GetBooleanSetting(source, "FastUpdateLabel", false); - GUI.IgnoreFixedDrives = GetBooleanSetting(source, "IgnoreFixedDrives", true); - GUI.SkipSystemDetection = GetBooleanSetting(source, "SkipSystemDetection", false); - - Dumping.AaruPath = GetStringSetting(source, "AaruPath", DumpSettings.DefaultAaruPath) ?? DumpSettings.DefaultAaruPath; - Dumping.DiscImageCreatorPath = GetStringSetting(source, "DiscImageCreatorPath", DumpSettings.DefaultDiscImageCreatorPath) ?? DumpSettings.DefaultDiscImageCreatorPath; - Dumping.DreamdumpPath = GetStringSetting(source, "DreamdumpPath", DumpSettings.DefaultDreamdumpPath) ?? DumpSettings.DefaultDreamdumpPath; - Dumping.RedumperPath = GetStringSetting(source, "RedumperPath", DumpSettings.DefaultRedumperPath) ?? DumpSettings.DefaultRedumperPath; - - Dumping.DefaultOutputPath = GetStringSetting(source, "DefaultOutputPath", "ISO"); - valueString = GetStringSetting(source, "DefaultSystem", RedumpSystem.IBMPCcompatible.ToString()); - Dumping.DefaultSystem = (valueString ?? string.Empty).ToRedumpSystem(); - Dumping.DumpSpeeds.CD = GetInt32Setting(source, "PreferredDumpSpeedCD", 24); - Dumping.DumpSpeeds.DVD = GetInt32Setting(source, "PreferredDumpSpeedDVD", 16); - Dumping.DumpSpeeds.HDDVD = GetInt32Setting(source, "PreferredDumpSpeedHDDVD", 8); - Dumping.DumpSpeeds.Bluray = GetInt32Setting(source, "PreferredDumpSpeedBD", 8); - - Dumping.Aaru.EnableDebug = GetBooleanSetting(source, AaruConstants.EnableDebug, AaruConstants.EnableDebugDefault); - Dumping.Aaru.EnableVerbose = GetBooleanSetting(source, AaruConstants.EnableVerbose, AaruConstants.EnableVerboseDefault); - Dumping.Aaru.ForceDumping = GetBooleanSetting(source, AaruConstants.ForceDumping, AaruConstants.ForceDumpingDefault); - Dumping.Aaru.RereadCount = GetInt32Setting(source, AaruConstants.RereadCount, AaruConstants.RereadCountDefault); - Dumping.Aaru.StripPersonalData = GetBooleanSetting(source, AaruConstants.StripPersonalData, AaruConstants.StripPersonalDataDefault); - - Dumping.DIC.MultiSectorRead = GetBooleanSetting(source, DiscImageCreatorConstants.MultiSectorRead, DiscImageCreatorConstants.MultiSectorReadDefault); - Dumping.DIC.MultiSectorReadValue = GetInt32Setting(source, DiscImageCreatorConstants.MultiSectorReadValue, DiscImageCreatorConstants.MultiSectorReadValueDefault); - Dumping.DIC.ParanoidMode = GetBooleanSetting(source, DiscImageCreatorConstants.ParanoidMode, DiscImageCreatorConstants.ParanoidModeDefault); - Dumping.DIC.QuietMode = GetBooleanSetting(source, DiscImageCreatorConstants.QuietMode, DiscImageCreatorConstants.QuietModeDefault); - Dumping.DIC.RereadCount = GetInt32Setting(source, DiscImageCreatorConstants.RereadCount, DiscImageCreatorConstants.RereadCountDefault); - Dumping.DIC.DVDRereadCount = GetInt32Setting(source, DiscImageCreatorConstants.DVDRereadCount, DiscImageCreatorConstants.DVDRereadCountDefault); - Dumping.DIC.UseCMIFlag = GetBooleanSetting(source, DiscImageCreatorConstants.UseCMIFlag, DiscImageCreatorConstants.UseCMIFlagDefault); - - Dumping.Dreamdump.NonRedumpMode = GetBooleanSetting(source, "DreamdumpNonRedumpMode", false); - valueString = GetStringSetting(source, DreamdumpConstants.SectorOrder, DreamdumpConstants.SectorOrderDefault.ToString()); - Dumping.Dreamdump.SectorOrder = valueString.ToDreamdumpSectorOrder(); - Dumping.Dreamdump.RereadCount = GetInt32Setting(source, DreamdumpConstants.RereadCount, DreamdumpConstants.RereadCountDefault); - - Dumping.Redumper.EnableSkeleton = GetBooleanSetting(source, RedumperConstants.EnableSkeleton, RedumperConstants.EnableSkeletonDefault); - Dumping.Redumper.EnableVerbose = GetBooleanSetting(source, RedumperConstants.EnableVerbose, RedumperConstants.EnableVerboseDefault); - Dumping.Redumper.LeadinRetryCount = GetInt32Setting(source, RedumperConstants.LeadinRetryCount, RedumperConstants.LeadinRetryCountDefault); - Dumping.Redumper.NonRedumpMode = GetBooleanSetting(source, "RedumperNonRedumpMode", false); - valueString = GetStringSetting(source, RedumperConstants.DriveType, RedumperConstants.DriveTypeDefault.ToString()); - Dumping.Redumper.DriveType = valueString.ToRedumperDriveType(); - Dumping.Redumper.DrivePregapStart = GetInt32Setting(source, RedumperConstants.DrivePregapStart, RedumperConstants.DrivePregapStartDefault); - valueString = GetStringSetting(source, RedumperConstants.ReadMethod, RedumperConstants.ReadMethodDefault.ToString()); - Dumping.Redumper.ReadMethod = valueString.ToRedumperReadMethod(); - valueString = GetStringSetting(source, RedumperConstants.SectorOrder, RedumperConstants.SectorOrderDefault.ToString()); - Dumping.Redumper.SectorOrder = valueString.ToRedumperSectorOrder(); - Dumping.Redumper.RereadCount = GetInt32Setting(source, RedumperConstants.RereadCount, RedumperConstants.RereadCountDefault); - Dumping.Redumper.RefineSectorMode = GetBooleanSetting(source, RedumperConstants.RefineSectorMode, RedumperConstants.RefineSectorModeDefault); - - Processing.ProtectionScanning.ScanForProtection = GetBooleanSetting(source, "ScanForProtection", true); - Processing.ProtectionScanning.ScanArchivesForProtection = GetBooleanSetting(source, "ScanArchivesForProtection", true); - Processing.ProtectionScanning.HideDriveLetters = GetBooleanSetting(source, "HideDriveLetters", false); - Processing.ProtectionScanning.IncludeDebugProtectionInformation = GetBooleanSetting(source, "IncludeDebugProtectionInformation", false); - - Processing.Login.PullAllInformation = GetBooleanSetting(source, "PullAllInformation", false); - Processing.Login.RedumpUsername = GetStringSetting(source, "RedumpUsername", string.Empty); - Processing.Login.RedumpPassword = GetStringSetting(source, "RedumpPassword", string.Empty); - Processing.Login.RetrieveMatchInformation = GetBooleanSetting(source, "RetrieveMatchInformation", true); - - Processing.MediaInformation.AddPlaceholders = GetBooleanSetting(source, "AddPlaceholders", true); - Processing.MediaInformation.EnableRedumpCompatibility = GetBooleanSetting(source, "EnableRedumpCompatibility", true); - Processing.MediaInformation.EnableTabsInInputFields = GetBooleanSetting(source, "EnableTabsInInputFields", true); - Processing.MediaInformation.PromptForDiscInformation = GetBooleanSetting(source, "PromptForDiscInformation", true); - - Processing.AddFilenameSuffix = GetBooleanSetting(source, "AddFilenameSuffix", false); - Processing.CompressLogFiles = GetBooleanSetting(source, "CompressLogFiles", true); - Processing.CreateIRDAfterDumping = GetBooleanSetting(source, "CreateIRDAfterDumping", false); - Processing.DeleteUnnecessaryFiles = GetBooleanSetting(source, "DeleteUnnecessaryFiles", false); - Processing.IncludeArtifacts = GetBooleanSetting(source, "IncludeArtifacts", false); - valueString = GetStringSetting(source, "LogCompression", LogCompression.DeflateMaximum.ToString()); - Processing.LogCompression = valueString.ToLogCompression(); - Processing.OutputSubmissionJSON = GetBooleanSetting(source, "OutputSubmissionJSON", false); - Processing.ShowDiscEjectReminder = GetBooleanSetting(source, "ShowDiscEjectReminder", true); - } - /// /// Constructor that converts from an existing Options object /// diff --git a/MPF.Frontend/Tools/OptionsLoader.cs b/MPF.Frontend/Tools/OptionsLoader.cs index 30e45702..69594b6c 100644 --- a/MPF.Frontend/Tools/OptionsLoader.cs +++ b/MPF.Frontend/Tools/OptionsLoader.cs @@ -1,9 +1,16 @@ using System; using System.Collections.Generic; using System.IO; +#if NET20 || NET35 || NET40 || NET452 using System.Reflection; +#endif using Newtonsoft.Json; using SabreTools.RedumpLib.Data; +using AaruConstants = MPF.ExecutionContexts.Aaru.SettingConstants; +using DiscImageCreatorConstants = MPF.ExecutionContexts.DiscImageCreator.SettingConstants; +using DreamdumpConstants = MPF.ExecutionContexts.Dreamdump.SettingConstants; +using LogCompression = MPF.Processors.LogCompression; +using RedumperConstants = MPF.ExecutionContexts.Redumper.SettingConstants; namespace MPF.Frontend.Tools { @@ -197,7 +204,7 @@ namespace MPF.Frontend.Tools using var reader = new StreamReader(stream); var settings = serializer.Deserialize(reader, typeof(Dictionary)) as Dictionary; - return new Options(settings); + return ConvertFromDictionary(settings); } /// @@ -259,98 +266,6 @@ namespace MPF.Frontend.Tools serializer.Serialize(writer, options, typeof(Options)); } - /// - /// Convert options object to a flat dictionary - /// - private static Dictionary ConvertToDictionary(Options options) - { - return new Dictionary - { - { "FirstRun", options.FirstRun.ToString()}, - - { "AaruPath", options.Dumping.AaruPath }, - { "DiscImageCreatorPath", options.Dumping.DiscImageCreatorPath }, - { "DreamdumpPath", options.Dumping.DreamdumpPath }, - { "RedumperPath", options.Dumping.RedumperPath }, - { "InternalProgram", options.InternalProgram.ToString() }, - - { "EnableDarkMode", options.GUI.Theming.EnableDarkMode.ToString() }, - { "EnablePurpMode", options.GUI.Theming.EnablePurpMode.ToString() }, - { "CustomBackgroundColor", options.GUI.Theming.CustomBackgroundColor }, - { "CustomTextColor", options.GUI.Theming.CustomTextColor }, - { "CheckForUpdatesOnStartup", options.CheckForUpdatesOnStartup.ToString() }, - { "CopyUpdateUrlToClipboard", options.GUI.CopyUpdateUrlToClipboard.ToString() }, - { "FastUpdateLabel", options.GUI.FastUpdateLabel.ToString() }, - { "DefaultInterfaceLanguage", options.GUI.DefaultInterfaceLanguage.ShortName() }, - { "DefaultOutputPath", options.Dumping.DefaultOutputPath }, - { "DefaultSystem", options.Dumping.DefaultSystem.ToString() }, - { "ShowDebugViewMenuItem", options.GUI.ShowDebugViewMenuItem.ToString() }, - - { "PreferredDumpSpeedCD", options.Dumping.DumpSpeeds.CD.ToString() }, - { "PreferredDumpSpeedDVD", options.Dumping.DumpSpeeds.DVD.ToString() }, - { "PreferredDumpSpeedHDDVD", options.Dumping.DumpSpeeds.HDDVD.ToString() }, - { "PreferredDumpSpeedBD", options.Dumping.DumpSpeeds.Bluray.ToString() }, - - { ExecutionContexts.Aaru.SettingConstants.EnableDebug, options.Dumping.Aaru.EnableDebug.ToString() }, - { ExecutionContexts.Aaru.SettingConstants.EnableVerbose, options.Dumping.Aaru.EnableVerbose.ToString() }, - { ExecutionContexts.Aaru.SettingConstants.ForceDumping, options.Dumping.Aaru.ForceDumping.ToString() }, - { ExecutionContexts.Aaru.SettingConstants.RereadCount, options.Dumping.Aaru.RereadCount.ToString() }, - { ExecutionContexts.Aaru.SettingConstants.StripPersonalData, options.Dumping.Aaru.StripPersonalData.ToString() }, - - { ExecutionContexts.DiscImageCreator.SettingConstants.MultiSectorRead, options.Dumping.DIC.MultiSectorRead.ToString() }, - { ExecutionContexts.DiscImageCreator.SettingConstants.MultiSectorReadValue, options.Dumping.DIC.MultiSectorReadValue.ToString() }, - { ExecutionContexts.DiscImageCreator.SettingConstants.ParanoidMode, options.Dumping.DIC.ParanoidMode.ToString() }, - { ExecutionContexts.DiscImageCreator.SettingConstants.QuietMode, options.Dumping.DIC.QuietMode.ToString() }, - { ExecutionContexts.DiscImageCreator.SettingConstants.RereadCount, options.Dumping.DIC.RereadCount.ToString() }, - { ExecutionContexts.DiscImageCreator.SettingConstants.DVDRereadCount, options.Dumping.DIC.DVDRereadCount.ToString() }, - { ExecutionContexts.DiscImageCreator.SettingConstants.UseCMIFlag, options.Dumping.DIC.UseCMIFlag.ToString() }, - - { "DreamdumpNonRedumpMode", options.Dumping.Dreamdump.NonRedumpMode.ToString() }, - { ExecutionContexts.Dreamdump.SettingConstants.SectorOrder, options.Dumping.Dreamdump.SectorOrder.ToString() }, - { ExecutionContexts.Dreamdump.SettingConstants.RereadCount, options.Dumping.Dreamdump.RereadCount.ToString() }, - - { ExecutionContexts.Redumper.SettingConstants.EnableSkeleton, options.Dumping.Redumper.EnableSkeleton.ToString() }, - { ExecutionContexts.Redumper.SettingConstants.EnableVerbose, options.Dumping.Redumper.EnableVerbose.ToString() }, - { ExecutionContexts.Redumper.SettingConstants.LeadinRetryCount, options.Dumping.Redumper.LeadinRetryCount.ToString() }, - { "RedumperNonRedumpMode", options.Dumping.Redumper.NonRedumpMode.ToString() }, - { ExecutionContexts.Redumper.SettingConstants.DriveType, options.Dumping.Redumper.DriveType.ToString() }, - { ExecutionContexts.Redumper.SettingConstants.DrivePregapStart, options.Dumping.Redumper.DrivePregapStart.ToString() }, - { ExecutionContexts.Redumper.SettingConstants.ReadMethod, options.Dumping.Redumper.ReadMethod.ToString() }, - { ExecutionContexts.Redumper.SettingConstants.SectorOrder, options.Dumping.Redumper.SectorOrder.ToString() }, - { ExecutionContexts.Redumper.SettingConstants.RereadCount, options.Dumping.Redumper.RereadCount.ToString() }, - { ExecutionContexts.Redumper.SettingConstants.RefineSectorMode, options.Dumping.Redumper.RefineSectorMode.ToString() }, - - { "ScanForProtection", options.Processing.ProtectionScanning.ScanForProtection.ToString() }, - { "AddPlaceholders", options.Processing.MediaInformation.AddPlaceholders.ToString() }, - { "PromptForDiscInformation", options.Processing.MediaInformation.PromptForDiscInformation.ToString() }, - { "PullAllInformation", options.Processing.Login.PullAllInformation.ToString() }, - { "EnableTabsInInputFields", options.Processing.MediaInformation.EnableTabsInInputFields.ToString() }, - { "EnableRedumpCompatibility", options.Processing.MediaInformation.EnableRedumpCompatibility.ToString() }, - { "ShowDiscEjectReminder", options.Processing.ShowDiscEjectReminder.ToString() }, - { "IgnoreFixedDrives", options.GUI.IgnoreFixedDrives.ToString() }, - { "AddFilenameSuffix", options.Processing.AddFilenameSuffix.ToString() }, - { "OutputSubmissionJSON", options.Processing.OutputSubmissionJSON.ToString() }, - { "IncludeArtifacts", options.Processing.IncludeArtifacts.ToString() }, - { "CompressLogFiles", options.Processing.CompressLogFiles.ToString() }, - { "LogCompression", options.Processing.LogCompression.ToString() }, - { "DeleteUnnecessaryFiles", options.Processing.DeleteUnnecessaryFiles.ToString() }, - { "CreateIRDAfterDumping", options.Processing.CreateIRDAfterDumping.ToString() }, - - { "SkipSystemDetection", options.GUI.SkipSystemDetection.ToString() }, - - { "ScanArchivesForProtection", options.Processing.ProtectionScanning.ScanArchivesForProtection.ToString() }, - { "IncludeDebugProtectionInformation", options.Processing.ProtectionScanning.IncludeDebugProtectionInformation.ToString() }, - { "HideDriveLetters", options.Processing.ProtectionScanning.HideDriveLetters.ToString() }, - - { "VerboseLogging", options.VerboseLogging.ToString() }, - { "OpenLogWindowAtStartup", options.GUI.OpenLogWindowAtStartup.ToString() }, - - { "RetrieveMatchInformation", options.Processing.Login.RetrieveMatchInformation.ToString() }, - { "RedumpUsername", options.Processing.Login.RedumpUsername }, - { "RedumpPassword", options.Processing.Login.RedumpPassword }, - }; - } - /// /// Attempt to determine the configuration path /// @@ -417,5 +332,265 @@ namespace MPF.Frontend.Tools } #endregion + + #region Options Helpers + + /// + /// Convert a flat dictionary to an options object + /// + private static Options ConvertFromDictionary(Dictionary? source) + { + source ??= []; + + var options = new Options(); + + options.FirstRun = GetBooleanSetting(source, "FirstRun", true); + options.CheckForUpdatesOnStartup = GetBooleanSetting(source, "CheckForUpdatesOnStartup", true); + options.VerboseLogging = GetBooleanSetting(source, "VerboseLogging", true); + var valueString = GetStringSetting(source, "InternalProgram", InternalProgram.Redumper.ToString()); + var tempInternalProgram = valueString.ToInternalProgram(); + options.InternalProgram = tempInternalProgram == InternalProgram.NONE ? InternalProgram.Redumper : tempInternalProgram; + + options.GUI.CopyUpdateUrlToClipboard = GetBooleanSetting(source, "CopyUpdateUrlToClipboard", true); + options.GUI.OpenLogWindowAtStartup = GetBooleanSetting(source, "OpenLogWindowAtStartup", true); + + valueString = GetStringSetting(source, "DefaultInterfaceLanguage", InterfaceLanguage.AutoDetect.ShortName()); + options.GUI.DefaultInterfaceLanguage = valueString.ToInterfaceLanguage(); + options.GUI.ShowDebugViewMenuItem = GetBooleanSetting(source, "ShowDebugViewMenuItem", false); + options.GUI.Theming.EnableDarkMode = GetBooleanSetting(source, "EnableDarkMode", false); + options.GUI.Theming.EnablePurpMode = GetBooleanSetting(source, "EnablePurpMode", false); + options.GUI.Theming.CustomBackgroundColor = GetStringSetting(source, "CustomBackgroundColor", null); + options.GUI.Theming.CustomTextColor = GetStringSetting(source, "CustomTextColor", null); + + options.GUI.FastUpdateLabel = GetBooleanSetting(source, "FastUpdateLabel", false); + options.GUI.IgnoreFixedDrives = GetBooleanSetting(source, "IgnoreFixedDrives", true); + options.GUI.SkipSystemDetection = GetBooleanSetting(source, "SkipSystemDetection", false); + + options.Dumping.AaruPath = GetStringSetting(source, "AaruPath", DumpSettings.DefaultAaruPath) ?? DumpSettings.DefaultAaruPath; + options.Dumping.DiscImageCreatorPath = GetStringSetting(source, "DiscImageCreatorPath", DumpSettings.DefaultDiscImageCreatorPath) ?? DumpSettings.DefaultDiscImageCreatorPath; + options.Dumping.DreamdumpPath = GetStringSetting(source, "DreamdumpPath", DumpSettings.DefaultDreamdumpPath) ?? DumpSettings.DefaultDreamdumpPath; + options.Dumping.RedumperPath = GetStringSetting(source, "RedumperPath", DumpSettings.DefaultRedumperPath) ?? DumpSettings.DefaultRedumperPath; + + options.Dumping.DefaultOutputPath = GetStringSetting(source, "DefaultOutputPath", "ISO"); + valueString = GetStringSetting(source, "DefaultSystem", RedumpSystem.IBMPCcompatible.ToString()); + options.Dumping.DefaultSystem = (valueString ?? string.Empty).ToRedumpSystem(); + options.Dumping.DumpSpeeds.CD = GetInt32Setting(source, "PreferredDumpSpeedCD", 24); + options.Dumping.DumpSpeeds.DVD = GetInt32Setting(source, "PreferredDumpSpeedDVD", 16); + options.Dumping.DumpSpeeds.HDDVD = GetInt32Setting(source, "PreferredDumpSpeedHDDVD", 8); + options.Dumping.DumpSpeeds.Bluray = GetInt32Setting(source, "PreferredDumpSpeedBD", 8); + + options.Dumping.Aaru.EnableDebug = GetBooleanSetting(source, AaruConstants.EnableDebug, AaruConstants.EnableDebugDefault); + options.Dumping.Aaru.EnableVerbose = GetBooleanSetting(source, AaruConstants.EnableVerbose, AaruConstants.EnableVerboseDefault); + options.Dumping.Aaru.ForceDumping = GetBooleanSetting(source, AaruConstants.ForceDumping, AaruConstants.ForceDumpingDefault); + options.Dumping.Aaru.RereadCount = GetInt32Setting(source, AaruConstants.RereadCount, AaruConstants.RereadCountDefault); + options.Dumping.Aaru.StripPersonalData = GetBooleanSetting(source, AaruConstants.StripPersonalData, AaruConstants.StripPersonalDataDefault); + + options.Dumping.DIC.MultiSectorRead = GetBooleanSetting(source, DiscImageCreatorConstants.MultiSectorRead, DiscImageCreatorConstants.MultiSectorReadDefault); + options.Dumping.DIC.MultiSectorReadValue = GetInt32Setting(source, DiscImageCreatorConstants.MultiSectorReadValue, DiscImageCreatorConstants.MultiSectorReadValueDefault); + options.Dumping.DIC.ParanoidMode = GetBooleanSetting(source, DiscImageCreatorConstants.ParanoidMode, DiscImageCreatorConstants.ParanoidModeDefault); + options.Dumping.DIC.QuietMode = GetBooleanSetting(source, DiscImageCreatorConstants.QuietMode, DiscImageCreatorConstants.QuietModeDefault); + options.Dumping.DIC.RereadCount = GetInt32Setting(source, DiscImageCreatorConstants.RereadCount, DiscImageCreatorConstants.RereadCountDefault); + options.Dumping.DIC.DVDRereadCount = GetInt32Setting(source, DiscImageCreatorConstants.DVDRereadCount, DiscImageCreatorConstants.DVDRereadCountDefault); + options.Dumping.DIC.UseCMIFlag = GetBooleanSetting(source, DiscImageCreatorConstants.UseCMIFlag, DiscImageCreatorConstants.UseCMIFlagDefault); + + options.Dumping.Dreamdump.NonRedumpMode = GetBooleanSetting(source, "DreamdumpNonRedumpMode", false); + valueString = GetStringSetting(source, DreamdumpConstants.SectorOrder, DreamdumpConstants.SectorOrderDefault.ToString()); + options.Dumping.Dreamdump.SectorOrder = valueString.ToDreamdumpSectorOrder(); + options.Dumping.Dreamdump.RereadCount = GetInt32Setting(source, DreamdumpConstants.RereadCount, DreamdumpConstants.RereadCountDefault); + + options.Dumping.Redumper.EnableSkeleton = GetBooleanSetting(source, RedumperConstants.EnableSkeleton, RedumperConstants.EnableSkeletonDefault); + options.Dumping.Redumper.EnableVerbose = GetBooleanSetting(source, RedumperConstants.EnableVerbose, RedumperConstants.EnableVerboseDefault); + options.Dumping.Redumper.LeadinRetryCount = GetInt32Setting(source, RedumperConstants.LeadinRetryCount, RedumperConstants.LeadinRetryCountDefault); + options.Dumping.Redumper.NonRedumpMode = GetBooleanSetting(source, "RedumperNonRedumpMode", false); + valueString = GetStringSetting(source, RedumperConstants.DriveType, RedumperConstants.DriveTypeDefault.ToString()); + options.Dumping.Redumper.DriveType = valueString.ToRedumperDriveType(); + options.Dumping.Redumper.DrivePregapStart = GetInt32Setting(source, RedumperConstants.DrivePregapStart, RedumperConstants.DrivePregapStartDefault); + valueString = GetStringSetting(source, RedumperConstants.ReadMethod, RedumperConstants.ReadMethodDefault.ToString()); + options.Dumping.Redumper.ReadMethod = valueString.ToRedumperReadMethod(); + valueString = GetStringSetting(source, RedumperConstants.SectorOrder, RedumperConstants.SectorOrderDefault.ToString()); + options.Dumping.Redumper.SectorOrder = valueString.ToRedumperSectorOrder(); + options.Dumping.Redumper.RereadCount = GetInt32Setting(source, RedumperConstants.RereadCount, RedumperConstants.RereadCountDefault); + options.Dumping.Redumper.RefineSectorMode = GetBooleanSetting(source, RedumperConstants.RefineSectorMode, RedumperConstants.RefineSectorModeDefault); + + options.Processing.ProtectionScanning.ScanForProtection = GetBooleanSetting(source, "ScanForProtection", true); + options.Processing.ProtectionScanning.ScanArchivesForProtection = GetBooleanSetting(source, "ScanArchivesForProtection", true); + options.Processing.ProtectionScanning.HideDriveLetters = GetBooleanSetting(source, "HideDriveLetters", false); + options.Processing.ProtectionScanning.IncludeDebugProtectionInformation = GetBooleanSetting(source, "IncludeDebugProtectionInformation", false); + + options.Processing.Login.PullAllInformation = GetBooleanSetting(source, "PullAllInformation", false); + options.Processing.Login.RedumpUsername = GetStringSetting(source, "RedumpUsername", string.Empty); + options.Processing.Login.RedumpPassword = GetStringSetting(source, "RedumpPassword", string.Empty); + options.Processing.Login.RetrieveMatchInformation = GetBooleanSetting(source, "RetrieveMatchInformation", true); + + options.Processing.MediaInformation.AddPlaceholders = GetBooleanSetting(source, "AddPlaceholders", true); + options.Processing.MediaInformation.EnableRedumpCompatibility = GetBooleanSetting(source, "EnableRedumpCompatibility", true); + options.Processing.MediaInformation.EnableTabsInInputFields = GetBooleanSetting(source, "EnableTabsInInputFields", true); + options.Processing.MediaInformation.PromptForDiscInformation = GetBooleanSetting(source, "PromptForDiscInformation", true); + + options.Processing.AddFilenameSuffix = GetBooleanSetting(source, "AddFilenameSuffix", false); + options.Processing.CompressLogFiles = GetBooleanSetting(source, "CompressLogFiles", true); + options.Processing.CreateIRDAfterDumping = GetBooleanSetting(source, "CreateIRDAfterDumping", false); + options.Processing.DeleteUnnecessaryFiles = GetBooleanSetting(source, "DeleteUnnecessaryFiles", false); + options.Processing.IncludeArtifacts = GetBooleanSetting(source, "IncludeArtifacts", false); + valueString = GetStringSetting(source, "LogCompression", LogCompression.DeflateMaximum.ToString()); + options.Processing.LogCompression = valueString.ToLogCompression(); + options.Processing.OutputSubmissionJSON = GetBooleanSetting(source, "OutputSubmissionJSON", false); + options.Processing.ShowDiscEjectReminder = GetBooleanSetting(source, "ShowDiscEjectReminder", true); + + return options; + } + + /// + /// Convert options object to a flat dictionary + /// + private static Dictionary ConvertToDictionary(Options options) + { + return new Dictionary + { + { "FirstRun", options.FirstRun.ToString()}, + + { "AaruPath", options.Dumping.AaruPath }, + { "DiscImageCreatorPath", options.Dumping.DiscImageCreatorPath }, + { "DreamdumpPath", options.Dumping.DreamdumpPath }, + { "RedumperPath", options.Dumping.RedumperPath }, + { "InternalProgram", options.InternalProgram.ToString() }, + + { "EnableDarkMode", options.GUI.Theming.EnableDarkMode.ToString() }, + { "EnablePurpMode", options.GUI.Theming.EnablePurpMode.ToString() }, + { "CustomBackgroundColor", options.GUI.Theming.CustomBackgroundColor }, + { "CustomTextColor", options.GUI.Theming.CustomTextColor }, + { "CheckForUpdatesOnStartup", options.CheckForUpdatesOnStartup.ToString() }, + { "CopyUpdateUrlToClipboard", options.GUI.CopyUpdateUrlToClipboard.ToString() }, + { "FastUpdateLabel", options.GUI.FastUpdateLabel.ToString() }, + { "DefaultInterfaceLanguage", options.GUI.DefaultInterfaceLanguage.ShortName() }, + { "DefaultOutputPath", options.Dumping.DefaultOutputPath }, + { "DefaultSystem", options.Dumping.DefaultSystem.ToString() }, + { "ShowDebugViewMenuItem", options.GUI.ShowDebugViewMenuItem.ToString() }, + + { "PreferredDumpSpeedCD", options.Dumping.DumpSpeeds.CD.ToString() }, + { "PreferredDumpSpeedDVD", options.Dumping.DumpSpeeds.DVD.ToString() }, + { "PreferredDumpSpeedHDDVD", options.Dumping.DumpSpeeds.HDDVD.ToString() }, + { "PreferredDumpSpeedBD", options.Dumping.DumpSpeeds.Bluray.ToString() }, + + { AaruConstants.EnableDebug, options.Dumping.Aaru.EnableDebug.ToString() }, + { AaruConstants.EnableVerbose, options.Dumping.Aaru.EnableVerbose.ToString() }, + { AaruConstants.ForceDumping, options.Dumping.Aaru.ForceDumping.ToString() }, + { AaruConstants.RereadCount, options.Dumping.Aaru.RereadCount.ToString() }, + { AaruConstants.StripPersonalData, options.Dumping.Aaru.StripPersonalData.ToString() }, + + { DiscImageCreatorConstants.MultiSectorRead, options.Dumping.DIC.MultiSectorRead.ToString() }, + { DiscImageCreatorConstants.MultiSectorReadValue, options.Dumping.DIC.MultiSectorReadValue.ToString() }, + { DiscImageCreatorConstants.ParanoidMode, options.Dumping.DIC.ParanoidMode.ToString() }, + { DiscImageCreatorConstants.QuietMode, options.Dumping.DIC.QuietMode.ToString() }, + { DiscImageCreatorConstants.RereadCount, options.Dumping.DIC.RereadCount.ToString() }, + { DiscImageCreatorConstants.DVDRereadCount, options.Dumping.DIC.DVDRereadCount.ToString() }, + { DiscImageCreatorConstants.UseCMIFlag, options.Dumping.DIC.UseCMIFlag.ToString() }, + + { "DreamdumpNonRedumpMode", options.Dumping.Dreamdump.NonRedumpMode.ToString() }, + { DreamdumpConstants.SectorOrder, options.Dumping.Dreamdump.SectorOrder.ToString() }, + { DreamdumpConstants.RereadCount, options.Dumping.Dreamdump.RereadCount.ToString() }, + + { RedumperConstants.EnableSkeleton, options.Dumping.Redumper.EnableSkeleton.ToString() }, + { RedumperConstants.EnableVerbose, options.Dumping.Redumper.EnableVerbose.ToString() }, + { RedumperConstants.LeadinRetryCount, options.Dumping.Redumper.LeadinRetryCount.ToString() }, + { "RedumperNonRedumpMode", options.Dumping.Redumper.NonRedumpMode.ToString() }, + { RedumperConstants.DriveType, options.Dumping.Redumper.DriveType.ToString() }, + { RedumperConstants.DrivePregapStart, options.Dumping.Redumper.DrivePregapStart.ToString() }, + { RedumperConstants.ReadMethod, options.Dumping.Redumper.ReadMethod.ToString() }, + { RedumperConstants.SectorOrder, options.Dumping.Redumper.SectorOrder.ToString() }, + { RedumperConstants.RereadCount, options.Dumping.Redumper.RereadCount.ToString() }, + { RedumperConstants.RefineSectorMode, options.Dumping.Redumper.RefineSectorMode.ToString() }, + + { "ScanForProtection", options.Processing.ProtectionScanning.ScanForProtection.ToString() }, + { "AddPlaceholders", options.Processing.MediaInformation.AddPlaceholders.ToString() }, + { "PromptForDiscInformation", options.Processing.MediaInformation.PromptForDiscInformation.ToString() }, + { "PullAllInformation", options.Processing.Login.PullAllInformation.ToString() }, + { "EnableTabsInInputFields", options.Processing.MediaInformation.EnableTabsInInputFields.ToString() }, + { "EnableRedumpCompatibility", options.Processing.MediaInformation.EnableRedumpCompatibility.ToString() }, + { "ShowDiscEjectReminder", options.Processing.ShowDiscEjectReminder.ToString() }, + { "IgnoreFixedDrives", options.GUI.IgnoreFixedDrives.ToString() }, + { "AddFilenameSuffix", options.Processing.AddFilenameSuffix.ToString() }, + { "OutputSubmissionJSON", options.Processing.OutputSubmissionJSON.ToString() }, + { "IncludeArtifacts", options.Processing.IncludeArtifacts.ToString() }, + { "CompressLogFiles", options.Processing.CompressLogFiles.ToString() }, + { "LogCompression", options.Processing.LogCompression.ToString() }, + { "DeleteUnnecessaryFiles", options.Processing.DeleteUnnecessaryFiles.ToString() }, + { "CreateIRDAfterDumping", options.Processing.CreateIRDAfterDumping.ToString() }, + + { "SkipSystemDetection", options.GUI.SkipSystemDetection.ToString() }, + + { "ScanArchivesForProtection", options.Processing.ProtectionScanning.ScanArchivesForProtection.ToString() }, + { "IncludeDebugProtectionInformation", options.Processing.ProtectionScanning.IncludeDebugProtectionInformation.ToString() }, + { "HideDriveLetters", options.Processing.ProtectionScanning.HideDriveLetters.ToString() }, + + { "VerboseLogging", options.VerboseLogging.ToString() }, + { "OpenLogWindowAtStartup", options.GUI.OpenLogWindowAtStartup.ToString() }, + + { "RetrieveMatchInformation", options.Processing.Login.RetrieveMatchInformation.ToString() }, + { "RedumpUsername", options.Processing.Login.RedumpUsername }, + { "RedumpPassword", options.Processing.Login.RedumpPassword }, + }; + } + + /// + /// Get a Boolean setting from a settings, dictionary + /// + /// Dictionary representing the settings + /// Setting key to get a value for + /// Default value to return if no value is found + /// Setting value if possible, default value otherwise + private static bool GetBooleanSetting(Dictionary settings, string key, bool defaultValue) + { + if (settings.ContainsKey(key)) + { + if (bool.TryParse(settings[key], out bool value)) + return value; + else + return defaultValue; + } + else + { + return defaultValue; + } + } + + /// + /// Get an Int32 setting from a settings, dictionary + /// + /// Dictionary representing the settings + /// Setting key to get a value for + /// Default value to return if no value is found + /// Setting value if possible, default value otherwise + private static int GetInt32Setting(Dictionary settings, string key, int defaultValue) + { + if (settings.ContainsKey(key)) + { + if (int.TryParse(settings[key], out int value)) + return value; + else + return defaultValue; + } + else + { + return defaultValue; + } + } + + /// + /// Get a String setting from a settings, dictionary + /// + /// Dictionary representing the settings + /// Setting key to get a value for + /// Default value to return if no value is found + /// Setting value if possible, default value otherwise + private static string? GetStringSetting(Dictionary settings, string key, string? defaultValue) + { + if (settings.ContainsKey(key)) + return settings[key]; + else + return defaultValue; + } + + #endregion } }