From eb7430e7166d934fc034205d79ce665bb02e0efa Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Mon, 12 May 2025 22:40:55 -0400 Subject: [PATCH] Try to reconsile header values again --- SabreTools.DatFiles/DatHeader.cs | 6 ++++ SabreTools.DatTools/Parser.cs | 3 ++ SabreTools/Features/Update.cs | 51 ++++++++++++++++++-------------- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/SabreTools.DatFiles/DatHeader.cs b/SabreTools.DatFiles/DatHeader.cs index e26c7841..f173a562 100644 --- a/SabreTools.DatFiles/DatHeader.cs +++ b/SabreTools.DatFiles/DatHeader.cs @@ -159,6 +159,12 @@ namespace SabreTools.DatFiles header.Remove(Models.Metadata.Header.ForceNodumpKey); if (header.ReadString(Models.Metadata.Header.ForcePackingKey).AsPackingFlag() == PackingFlag.None) header.Remove(Models.Metadata.Header.ForcePackingKey); + if (header.ReadString(Models.Metadata.Header.BiosModeKey).AsMergingFlag() == MergingFlag.None) + header.Remove(Models.Metadata.Header.BiosModeKey); + if (header.ReadString(Models.Metadata.Header.RomModeKey).AsMergingFlag() == MergingFlag.None) + header.Remove(Models.Metadata.Header.RomModeKey); + if (header.ReadString(Models.Metadata.Header.SampleModeKey).AsMergingFlag() == MergingFlag.None) + header.Remove(Models.Metadata.Header.SampleModeKey); // Convert subheader values if (CanOpenSpecified) diff --git a/SabreTools.DatTools/Parser.cs b/SabreTools.DatTools/Parser.cs index a1b697c2..4136fd8e 100644 --- a/SabreTools.DatTools/Parser.cs +++ b/SabreTools.DatTools/Parser.cs @@ -149,6 +149,9 @@ namespace SabreTools.DatTools statsOnly: statsOnly, filterRunner: filterRunner, throwOnError: throwOnError); + + // Copy the header values back + datFile.SetHeader(parsingDatFile.Header); } catch (Exception ex) when (!throwOnError) { diff --git a/SabreTools/Features/Update.cs b/SabreTools/Features/Update.cs index e2f4307c..6024908f 100644 --- a/SabreTools/Features/Update.cs +++ b/SabreTools/Features/Update.cs @@ -103,9 +103,6 @@ namespace SabreTools.Features ? Modifiers.ReplaceExtension : $".{Modifiers.ReplaceExtension}"; - // If we're in a non-replacement special update mode and the names aren't set, set defaults - SetDefaultHeaderValues(updateMode, GetBoolean(features, NoAutomaticDateValue)); - // If no update fields are set, default to Names if (updateItemFieldNames == null || updateItemFieldNames.Count == 0) { @@ -123,7 +120,7 @@ namespace SabreTools.Features // If we're in standard update mode, run through all of the inputs if (updateMode == UpdateMode.None) { - StandardUpdate(inputPaths, GetBoolean(features, InplaceValue)); + StandardUpdate(inputPaths, GetBoolean(features, InplaceValue), GetBoolean(features, NoAutomaticDateValue)); return true; } @@ -150,6 +147,9 @@ namespace SabreTools.Features // Create a DAT to capture inputs DatFile userInputDat = Parser.CreateDatFile(Header!, Modifiers); + // If we're in a non-replacement special update mode and the names aren't set, set defaults + SetDefaultHeaderValues(userInputDat, updateMode, GetBoolean(features, NoAutomaticDateValue)); + // Populate using the correct set List datHeaders = GetDatHeaders(updateMode, inputPaths, basePaths, userInputDat); @@ -391,12 +391,13 @@ namespace SabreTools.Features /// /// Set default header values for non-specialized update types /// + /// DatFile to update the header for /// Update mode that is currently being run /// True if date should be omitted from the description, false otherwise - private void SetDefaultHeaderValues(UpdateMode updateMode, bool noAutomaticDate) + private void SetDefaultHeaderValues(DatFile datFile, UpdateMode updateMode, bool noAutomaticDate) { - // Skip running if a required object is null - if (Header == null || Cleaner == null) + // Skip running if a required objects are null + if (datFile.Header == null || Cleaner == null) return; // Skip running for diff against and base replacement @@ -413,39 +414,39 @@ namespace SabreTools.Features #endif // Date - if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.DateKey))) - Header.SetFieldValue(Models.Metadata.Header.DateKey, DateTime.Now.ToString("yyyy-MM-dd")); + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.DateKey))) + datFile.Header.SetFieldValue(Models.Metadata.Header.DateKey, DateTime.Now.ToString("yyyy-MM-dd")); // Name - if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.NameKey))) + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey))) { - Header.SetFieldValue(Models.Metadata.Header.NameKey, (updateMode != 0 ? "DiffDAT" : "MergeDAT") - + (Header.GetStringFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT" ? "-SuperDAT" : string.Empty) + datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, (updateMode != 0 ? "DiffDAT" : "MergeDAT") + + (datFile.Header.GetStringFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT" ? "-SuperDAT" : string.Empty) + (Cleaner.DedupeRoms != DedupeType.None ? "-deduped" : string.Empty)); } // Description - if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) { - Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, (updateMode != 0 ? "DiffDAT" : "MergeDAT") - + (Header.GetStringFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT" ? "-SuperDAT" : string.Empty) + datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, (updateMode != 0 ? "DiffDAT" : "MergeDAT") + + (datFile.Header.GetStringFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT" ? "-SuperDAT" : string.Empty) + (Cleaner!.DedupeRoms != DedupeType.None ? " - deduped" : string.Empty)); if (!noAutomaticDate) - Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, $"{Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)} ({Header.GetStringFieldValue(Models.Metadata.Header.DateKey)})"); + datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, $"{datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)} ({datFile.Header.GetStringFieldValue(Models.Metadata.Header.DateKey)})"); } // Category - if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.CategoryKey)) && updateMode != 0) - Header.SetFieldValue(Models.Metadata.Header.CategoryKey, "DiffDAT"); + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.CategoryKey)) && updateMode != 0) + datFile.Header.SetFieldValue(Models.Metadata.Header.CategoryKey, "DiffDAT"); // Author - if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.AuthorKey))) - Header.SetFieldValue(Models.Metadata.Header.AuthorKey, $"SabreTools {Globals.Version}"); + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.AuthorKey))) + datFile.Header.SetFieldValue(Models.Metadata.Header.AuthorKey, $"SabreTools {Globals.Version}"); // Comment - if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.CommentKey))) - Header.SetFieldValue(Models.Metadata.Header.CommentKey, $"Generated by SabreTools {Globals.Version}"); + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.CommentKey))) + datFile.Header.SetFieldValue(Models.Metadata.Header.CommentKey, $"Generated by SabreTools {Globals.Version}"); } /// @@ -453,7 +454,8 @@ namespace SabreTools.Features /// /// Set of input paths to process /// True to output to the input folder, false otherwise - private void StandardUpdate(List inputPaths, bool inplace) + /// True if date should be omitted from the description, false otherwise + private void StandardUpdate(List inputPaths, bool inplace, bool noAutomaticDate) { // Loop through each input and update #if NET452_OR_GREATER || NETCOREAPP @@ -489,6 +491,9 @@ namespace SabreTools.Features filterRunner: FilterRunner); datFile.Header.SetFieldValue(DatHeader.DatFormatKey, currentFormat); + // Set any missing header values + SetDefaultHeaderValues(datFile, updateMode: UpdateMode.None, noAutomaticDate: noAutomaticDate); + // Perform additional processing steps AdditionalProcessing(datFile);