diff --git a/SabreTools.DatTools/Splitter.cs b/SabreTools.DatTools/Splitter.cs index de6b2f81..53894383 100644 --- a/SabreTools.DatTools/Splitter.cs +++ b/SabreTools.DatTools/Splitter.cs @@ -219,6 +219,24 @@ namespace SabreTools.DatTools // Create each of the respective output DATs var watch = new InternalStopwatch($"Splitting DAT by best available hashes"); + // Initialize the outputs + Dictionary fieldDats = SplitByHashInit(datFile); + + // Now populate each of the DAT objects in turn + SplitByHashImpl(datFile, fieldDats); + SplitByHashDBImpl(datFile, fieldDats); + + watch.Stop(); + return fieldDats; + } + + /// + /// Initialize splitting by hash + /// + /// Current DatFile object to split + /// Dictionary of hash-specific DatFiles + private static Dictionary SplitByHashInit(DatFile datFile) + { // Create mapping of keys to suffixes var mappings = new Dictionary { @@ -244,7 +262,16 @@ namespace SabreTools.DatTools fieldDats[kvp.Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[kvp.Key].Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + kvp.Value); } - // Now populate each of the DAT objects in turn + return fieldDats; + } + + /// + /// Split a DAT by best available hashes + /// + /// Current DatFile object to split + /// Dictionary of hash-specific DatFiles + private static void SplitByHashImpl(DatFile datFile, Dictionary fieldDats) + { #if NET452_OR_GREATER || NETCOREAPP Parallel.ForEach(datFile.Items.SortedKeys, Core.Globals.ParallelOptions, key => #elif NET40_OR_GREATER @@ -321,46 +348,15 @@ namespace SabreTools.DatTools #else } #endif - - watch.Stop(); - return fieldDats; } /// /// Split a DAT by best available hashes /// /// Current DatFile object to split - /// Dictionary of Field to DatFile mappings - public static Dictionary SplitByHashDB(DatFile datFile) + /// Dictionary of hash-specific DatFiles + private static void SplitByHashDBImpl(DatFile datFile, Dictionary fieldDats) { - // Create each of the respective output DATs - var watch = new InternalStopwatch($"Splitting DAT by best available hashes"); - - // Create mapping of keys to suffixes - var mappings = new Dictionary - { - [Models.Metadata.Rom.StatusKey] = " (Nodump)", - [Models.Metadata.Rom.SHA512Key] = " (SHA-512)", - [Models.Metadata.Rom.SHA384Key] = " (SHA-384)", - [Models.Metadata.Rom.SHA256Key] = " (SHA-256)", - [Models.Metadata.Rom.SHA1Key] = " (SHA-1)", - [Models.Metadata.Rom.MD5Key] = " (MD5)", - [Models.Metadata.Rom.MD4Key] = " (MD4)", - [Models.Metadata.Rom.MD2Key] = " (MD2)", - [Models.Metadata.Rom.CRCKey] = " (CRC)", - ["null"] = " (Other)", - }; - - // Create the set of field-to-dat mappings - Dictionary fieldDats = []; - foreach (var kvp in mappings) - { - fieldDats[kvp.Key] = Parser.CreateDatFile((DatHeader)datFile.Header.Clone(), datFile.Modifiers); - fieldDats[kvp.Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[kvp.Key].Header.GetStringFieldValue(DatHeader.FileNameKey) + kvp.Value); - fieldDats[kvp.Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[kvp.Key].Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + kvp.Value); - fieldDats[kvp.Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[kvp.Key].Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + kvp.Value); - } - // Get all current items, machines, and mappings var datItems = datFile.ItemsDB.GetItems(); var machines = datFile.GetMachinesDB(); @@ -477,9 +473,6 @@ namespace SabreTools.DatTools #else } #endif - - watch.Stop(); - return fieldDats; } #endregion diff --git a/SabreTools/Features/Split.cs b/SabreTools/Features/Split.cs index 6bc40668..cee91373 100644 --- a/SabreTools/Features/Split.cs +++ b/SabreTools/Features/Split.cs @@ -79,7 +79,6 @@ namespace SabreTools.Features #endif { (DatFile? extADat, DatFile? extBDat) = DatTools.Splitter.SplitByExtension(internalDat, GetList(features, ExtAListValue), GetList(features, ExtBListValue)); - //(DatFile? extADat, DatFile? extBDat) = DatTools.Splitter.SplitByExtensionDB(internalDat, GetList(features, ExtAListValue), GetList(features, ExtBListValue)); if (extADat != null && extBDat != null) { var watch = new InternalStopwatch("Outputting extension-split DATs"); @@ -100,7 +99,6 @@ namespace SabreTools.Features #endif { Dictionary typeDats = DatTools.Splitter.SplitByHash(internalDat); - //Dictionary typeDats = DatTools.Splitter.SplitByHashDB(internalDat); var watch = new InternalStopwatch("Outputting hash-split DATs");