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
}
}