diff --git a/SabreTools.DatFiles.Test/DatFileTests.cs b/SabreTools.DatFiles.Test/DatFileTests.cs index 73632098..3595dab3 100644 --- a/SabreTools.DatFiles.Test/DatFileTests.cs +++ b/SabreTools.DatFiles.Test/DatFileTests.cs @@ -232,12 +232,6 @@ namespace SabreTools.DatFiles.Test #endregion - #region ProcessNullifiedItemDB - - // TODO: Write ProcessNullifiedItemDB tests - - #endregion - #region GetMissingRequiredFields // TODO: Write GetMissingRequiredFields tests diff --git a/SabreTools.DatFiles/DatFile.ToMetadata.cs b/SabreTools.DatFiles/DatFile.ToMetadata.cs index 0da85b45..4537b27f 100644 --- a/SabreTools.DatFiles/DatFile.ToMetadata.cs +++ b/SabreTools.DatFiles/DatFile.ToMetadata.cs @@ -560,7 +560,7 @@ namespace SabreTools.DatFiles foreach (var kvp in items) { // Check for a "null" item - var item = ProcessNullifiedItemDB(kvp); + var item = new KeyValuePair(kvp.Key, ProcessNullifiedItem(kvp.Value)); // Skip if we're ignoring the item if (ShouldIgnore(item.Value, ignoreblanks)) diff --git a/SabreTools.DatFiles/DatFile.cs b/SabreTools.DatFiles/DatFile.cs index 988bca4c..a7a29885 100644 --- a/SabreTools.DatFiles/DatFile.cs +++ b/SabreTools.DatFiles/DatFile.cs @@ -207,8 +207,41 @@ namespace SabreTools.DatFiles if (machine == null) return; + // Process the item name with common rules + ProcessItemNameImpl(item, machine, quotes, useRomName); + } + + /// + /// Process an item and correctly set the item name + /// + /// DatItem to update + /// True if the Quotes flag should be ignored, false otherwise + /// True if the UseRomName should be always on (default), false otherwise + protected void ProcessItemNameDB(KeyValuePair item, bool forceRemoveQuotes, bool forceRomName = true) + { + // Get the relevant processing values + bool quotes = forceRemoveQuotes ? false : Header.GetBoolFieldValue(DatHeader.QuotesKey) ?? false; + bool useRomName = forceRomName ? true : Header.GetBoolFieldValue(DatHeader.UseRomNameKey) ?? false; + + // Get machine for the item + var machine = ItemsDB.GetMachineForItem(item.Key); + if (machine.Value == null) + return; + + // Process the item name with common rules + ProcessItemNameImpl(item.Value, machine.Value, quotes, useRomName); + } + + /// + /// Process an item and correctly set the item name + /// + /// DatItem to update + /// True if the Quotes flag should be ignored, false otherwise + /// True if the UseRomName should be always on (default), false otherwise + private void ProcessItemNameImpl(DatItem item, Machine machine, bool quotes, bool useRomName) + { // Get the name to update - string? name = (useRomName + string? name = (useRomName == true ? item.GetName() : machine.GetStringFieldValue(Models.Metadata.Machine.NameKey)) ?? string.Empty; @@ -276,104 +309,12 @@ namespace SabreTools.DatFiles if (useRomName && Header.GetBoolFieldValue(DatHeader.GameNameKey) == true) name = Path.Combine(machine.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, name); - // Now assign back the formatted name - name = $"{pre}{name}{post}"; - if (useRomName == true) - item.SetName(name); - else - machine.SetFieldValue(Models.Metadata.Machine.NameKey, name); - } - - /// - /// Process an item and correctly set the item name - /// - /// DatItem to update - /// True if the Quotes flag should be ignored, false otherwise - /// True if the UseRomName should be always on (default), false otherwise - protected void ProcessItemNameDB(KeyValuePair item, bool forceRemoveQuotes, bool forceRomName = true) - { - // Get the relevant processing values - bool quotes = forceRemoveQuotes ? false : Header.GetBoolFieldValue(DatHeader.QuotesKey) ?? false; - bool useRomName = forceRomName ? true : Header.GetBoolFieldValue(DatHeader.UseRomNameKey) ?? false; - - // Get machine for the item - var machine = ItemsDB.GetMachineForItem(item.Key); - - // Get the name to update - string? name = (useRomName == true - ? item.Value.GetName() - : machine.Value!.GetStringFieldValue(Models.Metadata.Machine.NameKey)) ?? string.Empty; - - // Create the proper Prefix and Postfix - string pre = CreatePrefix(item.Value, machine.Value, quotes); - string post = CreatePostfix(item.Value, machine.Value, quotes); - - // If we're in Depot mode, take care of that instead - var outputDepot = Header.GetFieldValue(DatHeader.OutputDepotKey); - if (outputDepot?.IsActive == true) - { - if (item.Value is Disk disk) - { - // We can only write out if there's a SHA-1 - string? sha1 = disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key); - if (!string.IsNullOrEmpty(sha1)) - { - name = Utilities.GetDepotPath(sha1, outputDepot.Depth)?.Replace('\\', '/'); - item.Value.SetName($"{pre}{name}{post}"); - } - } - else if (item.Value is Media media) - { - // We can only write out if there's a SHA-1 - string? sha1 = media.GetStringFieldValue(Models.Metadata.Media.SHA1Key); - if (!string.IsNullOrEmpty(sha1)) - { - name = Utilities.GetDepotPath(sha1, outputDepot.Depth)?.Replace('\\', '/'); - item.Value.SetName($"{pre}{name}{post}"); - } - } - else if (item.Value is Rom rom) - { - // We can only write out if there's a SHA-1 - string? sha1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key); - if (!string.IsNullOrEmpty(sha1)) - { - name = Utilities.GetDepotPath(sha1, outputDepot.Depth)?.Replace('\\', '/'); - item.Value.SetName($"{pre}{name}{post}"); - } - } - - return; - } - - string? replaceExtension = Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey); - bool? removeExtension = Header.GetBoolFieldValue(DatHeader.RemoveExtensionKey); - if (!string.IsNullOrEmpty(replaceExtension) || removeExtension == true) - { - if (removeExtension == true) - Header.SetFieldValue(DatHeader.ReplaceExtensionKey, string.Empty); - - string? dir = Path.GetDirectoryName(name); - if (dir != null) - { - dir = dir.TrimStart(Path.DirectorySeparatorChar); - name = Path.Combine(dir, Path.GetFileNameWithoutExtension(name) + replaceExtension); - } - } - - string? addExtension = Header.GetStringFieldValue(DatHeader.AddExtensionKey); - if (!string.IsNullOrEmpty(addExtension)) - name += addExtension; - - if (useRomName && Header.GetBoolFieldValue(DatHeader.GameNameKey) == true) - name = Path.Combine(machine.Value!.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, name); - // Now assign back the formatted name name = $"{pre}{name}{post}"; if (useRomName) - item.Value.SetName(name); - else if (machine.Value != null) - machine.Value.SetFieldValue(Models.Metadata.Machine.NameKey, name); + item.SetName(name); + else if (machine != null) + machine.SetFieldValue(Models.Metadata.Machine.NameKey, name); } /// @@ -505,32 +446,6 @@ namespace SabreTools.DatFiles if (item is not Rom rom) return item; - // Process the possibly nullified item - return ProcessNullifiedItemImpl(rom); - } - - /// - /// Process any DatItems that are "null", usually created from directory population - /// - /// DatItem to check for "null" status - /// Cleaned DatItem - protected KeyValuePair ProcessNullifiedItemDB(KeyValuePair item) - { - // If we don't have a Rom, we can ignore it - if (item.Value is not Rom rom) - return item; - - // Process the possibly nullified item - return new KeyValuePair(item.Key, ProcessNullifiedItemImpl(rom)); - } - - /// - /// Process any DatItems that are "null", usually created from directory population - /// - /// Rom to check for "null" status - /// Cleaned DatItem - private DatItem ProcessNullifiedItemImpl(Rom rom) - { // If the item has a size if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) != null) return rom; diff --git a/SabreTools.DatFiles/Formats/Missfile.cs b/SabreTools.DatFiles/Formats/Missfile.cs index d730d527..961ab20a 100644 --- a/SabreTools.DatFiles/Formats/Missfile.cs +++ b/SabreTools.DatFiles/Formats/Missfile.cs @@ -132,7 +132,7 @@ namespace SabreTools.DatFiles.Formats foreach (var kvp in items) { // Check for a "null" item - var datItem = ProcessNullifiedItemDB(kvp); + var datItem = new KeyValuePair(kvp.Key, ProcessNullifiedItem(kvp.Value)); // Get the machine for the item var machine = ItemsDB.GetMachineForItem(datItem.Key); diff --git a/SabreTools.DatFiles/Formats/SabreJSON.cs b/SabreTools.DatFiles/Formats/SabreJSON.cs index 1327c8b9..aad17174 100644 --- a/SabreTools.DatFiles/Formats/SabreJSON.cs +++ b/SabreTools.DatFiles/Formats/SabreJSON.cs @@ -499,7 +499,7 @@ namespace SabreTools.DatFiles.Formats WriteStartGame(jtw, kvp.Value); // Check for a "null" item - var datItem = ProcessNullifiedItemDB(kvp); + var datItem = new KeyValuePair(kvp.Key, ProcessNullifiedItem(kvp.Value)); // Write out the item if we're not ignoring if (!ShouldIgnore(datItem.Value, ignoreblanks)) diff --git a/SabreTools.DatFiles/Formats/SabreXML.cs b/SabreTools.DatFiles/Formats/SabreXML.cs index 91869c0d..cf7672df 100644 --- a/SabreTools.DatFiles/Formats/SabreXML.cs +++ b/SabreTools.DatFiles/Formats/SabreXML.cs @@ -328,7 +328,7 @@ namespace SabreTools.DatFiles.Formats WriteStartGame(xtw, kvp.Value); // Check for a "null" item - var datItem = ProcessNullifiedItemDB(kvp); + var datItem = new KeyValuePair(kvp.Key, ProcessNullifiedItem(kvp.Value)); // Write out the item if we're not ignoring if (!ShouldIgnore(datItem.Value, ignoreblanks))