Try to reconsile header values again

This commit is contained in:
Matt Nadareski
2025-05-12 22:40:55 -04:00
parent 6ed1cca60e
commit eb7430e716
3 changed files with 37 additions and 23 deletions

View File

@@ -159,6 +159,12 @@ namespace SabreTools.DatFiles
header.Remove(Models.Metadata.Header.ForceNodumpKey); header.Remove(Models.Metadata.Header.ForceNodumpKey);
if (header.ReadString(Models.Metadata.Header.ForcePackingKey).AsPackingFlag() == PackingFlag.None) if (header.ReadString(Models.Metadata.Header.ForcePackingKey).AsPackingFlag() == PackingFlag.None)
header.Remove(Models.Metadata.Header.ForcePackingKey); 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 // Convert subheader values
if (CanOpenSpecified) if (CanOpenSpecified)

View File

@@ -149,6 +149,9 @@ namespace SabreTools.DatTools
statsOnly: statsOnly, statsOnly: statsOnly,
filterRunner: filterRunner, filterRunner: filterRunner,
throwOnError: throwOnError); throwOnError: throwOnError);
// Copy the header values back
datFile.SetHeader(parsingDatFile.Header);
} }
catch (Exception ex) when (!throwOnError) catch (Exception ex) when (!throwOnError)
{ {

View File

@@ -103,9 +103,6 @@ namespace SabreTools.Features
? Modifiers.ReplaceExtension ? Modifiers.ReplaceExtension
: $".{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 no update fields are set, default to Names
if (updateItemFieldNames == null || updateItemFieldNames.Count == 0) 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 we're in standard update mode, run through all of the inputs
if (updateMode == UpdateMode.None) if (updateMode == UpdateMode.None)
{ {
StandardUpdate(inputPaths, GetBoolean(features, InplaceValue)); StandardUpdate(inputPaths, GetBoolean(features, InplaceValue), GetBoolean(features, NoAutomaticDateValue));
return true; return true;
} }
@@ -150,6 +147,9 @@ namespace SabreTools.Features
// Create a DAT to capture inputs // Create a DAT to capture inputs
DatFile userInputDat = Parser.CreateDatFile(Header!, Modifiers); 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 // Populate using the correct set
List<DatHeader> datHeaders = GetDatHeaders(updateMode, inputPaths, basePaths, userInputDat); List<DatHeader> datHeaders = GetDatHeaders(updateMode, inputPaths, basePaths, userInputDat);
@@ -391,12 +391,13 @@ namespace SabreTools.Features
/// <summary> /// <summary>
/// Set default header values for non-specialized update types /// Set default header values for non-specialized update types
/// </summary> /// </summary>
/// <param name="datFile">DatFile to update the header for</param>
/// <param name="updateMode">Update mode that is currently being run</param> /// <param name="updateMode">Update mode that is currently being run</param>
/// <param name="noAutomaticDate">True if date should be omitted from the description, false otherwise</param> /// <param name="noAutomaticDate">True if date should be omitted from the description, false otherwise</param>
private void SetDefaultHeaderValues(UpdateMode updateMode, bool noAutomaticDate) private void SetDefaultHeaderValues(DatFile datFile, UpdateMode updateMode, bool noAutomaticDate)
{ {
// Skip running if a required object is null // Skip running if a required objects are null
if (Header == null || Cleaner == null) if (datFile.Header == null || Cleaner == null)
return; return;
// Skip running for diff against and base replacement // Skip running for diff against and base replacement
@@ -413,39 +414,39 @@ namespace SabreTools.Features
#endif #endif
// Date // Date
if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.DateKey))) if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.DateKey)))
Header.SetFieldValue<string?>(Models.Metadata.Header.DateKey, DateTime.Now.ToString("yyyy-MM-dd")); datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.DateKey, DateTime.Now.ToString("yyyy-MM-dd"));
// Name // Name
if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.NameKey))) if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey)))
{ {
Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, (updateMode != 0 ? "DiffDAT" : "MergeDAT") datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.NameKey, (updateMode != 0 ? "DiffDAT" : "MergeDAT")
+ (Header.GetStringFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT" ? "-SuperDAT" : string.Empty) + (datFile.Header.GetStringFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT" ? "-SuperDAT" : string.Empty)
+ (Cleaner.DedupeRoms != DedupeType.None ? "-deduped" : string.Empty)); + (Cleaner.DedupeRoms != DedupeType.None ? "-deduped" : string.Empty));
} }
// Description // Description
if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)))
{ {
Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, (updateMode != 0 ? "DiffDAT" : "MergeDAT") datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, (updateMode != 0 ? "DiffDAT" : "MergeDAT")
+ (Header.GetStringFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT" ? "-SuperDAT" : string.Empty) + (datFile.Header.GetStringFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT" ? "-SuperDAT" : string.Empty)
+ (Cleaner!.DedupeRoms != DedupeType.None ? " - deduped" : string.Empty)); + (Cleaner!.DedupeRoms != DedupeType.None ? " - deduped" : string.Empty));
if (!noAutomaticDate) if (!noAutomaticDate)
Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, $"{Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)} ({Header.GetStringFieldValue(Models.Metadata.Header.DateKey)})"); datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.DescriptionKey, $"{datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)} ({datFile.Header.GetStringFieldValue(Models.Metadata.Header.DateKey)})");
} }
// Category // Category
if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.CategoryKey)) && updateMode != 0) if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.CategoryKey)) && updateMode != 0)
Header.SetFieldValue<string?>(Models.Metadata.Header.CategoryKey, "DiffDAT"); datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.CategoryKey, "DiffDAT");
// Author // Author
if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.AuthorKey))) if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.AuthorKey)))
Header.SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, $"SabreTools {Globals.Version}"); datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.AuthorKey, $"SabreTools {Globals.Version}");
// Comment // Comment
if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.CommentKey))) if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.CommentKey)))
Header.SetFieldValue<string?>(Models.Metadata.Header.CommentKey, $"Generated by SabreTools {Globals.Version}"); datFile.Header.SetFieldValue<string?>(Models.Metadata.Header.CommentKey, $"Generated by SabreTools {Globals.Version}");
} }
/// <summary> /// <summary>
@@ -453,7 +454,8 @@ namespace SabreTools.Features
/// </summary> /// </summary>
/// <param name="inputPaths">Set of input paths to process</param> /// <param name="inputPaths">Set of input paths to process</param>
/// <param name="inplace">True to output to the input folder, false otherwise</param> /// <param name="inplace">True to output to the input folder, false otherwise</param>
private void StandardUpdate(List<ParentablePath> inputPaths, bool inplace) /// <param name="noAutomaticDate">True if date should be omitted from the description, false otherwise</param>
private void StandardUpdate(List<ParentablePath> inputPaths, bool inplace, bool noAutomaticDate)
{ {
// Loop through each input and update // Loop through each input and update
#if NET452_OR_GREATER || NETCOREAPP #if NET452_OR_GREATER || NETCOREAPP
@@ -489,6 +491,9 @@ namespace SabreTools.Features
filterRunner: FilterRunner); filterRunner: FilterRunner);
datFile.Header.SetFieldValue<DatFormat>(DatHeader.DatFormatKey, currentFormat); datFile.Header.SetFieldValue<DatFormat>(DatHeader.DatFormatKey, currentFormat);
// Set any missing header values
SetDefaultHeaderValues(datFile, updateMode: UpdateMode.None, noAutomaticDate: noAutomaticDate);
// Perform additional processing steps // Perform additional processing steps
AdditionalProcessing(datFile); AdditionalProcessing(datFile);