diff --git a/SabreTools.DatFiles/DatFile.cs b/SabreTools.DatFiles/DatFile.cs index 9c628d8e..f4e6f2ad 100644 --- a/SabreTools.DatFiles/DatFile.cs +++ b/SabreTools.DatFiles/DatFile.cs @@ -250,7 +250,7 @@ namespace SabreTools.DatFiles if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null && !rom.HasHashes()) { // No-op, just catch it so it doesn't go further - logger.Verbose($"{Header.FileName}: Entry with only SHA-1 found - '{rom.GetName()}'"); + logger.Verbose($"{Header.GetFieldValue(DatHeader.FileNameKey)}: Entry with only SHA-1 found - '{rom.GetName()}'"); } // If we have a rom and it's missing size AND the hashes match a 0-byte file, fill in the rest of the info @@ -271,7 +271,7 @@ namespace SabreTools.DatFiles // If the file has no size and it's not the above case, skip and log else if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump && (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == 0 || rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null)) { - logger.Verbose($"{Header.FileName}: Incomplete entry for '{rom.GetName()}' will be output as nodump"); + logger.Verbose($"{Header.GetFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.GetName()}' will be output as nodump"); rom.SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.Nodump); } @@ -280,7 +280,7 @@ namespace SabreTools.DatFiles && rom.GetFieldValue(Models.Metadata.Rom.SizeKey) != null && rom.GetFieldValue(Models.Metadata.Rom.SizeKey) > 0 && !rom.HasHashes()) { - logger.Verbose($"{Header.FileName}: Incomplete entry for '{rom.GetName()}' will be output as nodump"); + logger.Verbose($"{Header.GetFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.GetName()}' will be output as nodump"); rom.SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.Nodump); } diff --git a/SabreTools.DatFiles/DatHeader.cs b/SabreTools.DatFiles/DatHeader.cs index 5577fcd8..4adb42a5 100644 --- a/SabreTools.DatFiles/DatHeader.cs +++ b/SabreTools.DatFiles/DatHeader.cs @@ -23,6 +23,11 @@ namespace SabreTools.DatFiles /// public const string AddExtensionKey = "ADDEXTENSION"; + /// + /// External name of the DAT + /// + public const string FileNameKey = "FILENAME"; + /// /// Output the machine name /// @@ -62,13 +67,6 @@ namespace SabreTools.DatFiles #region Fields - /// - /// External name of the DAT - /// - [JsonProperty("filename", DefaultValueHandling = DefaultValueHandling.Include)] - [XmlElement("filename")] - public string? FileName { get; set; } - /// /// Read or write format /// @@ -168,7 +166,6 @@ namespace SabreTools.DatFiles { var header = new DatHeader() { - FileName = this.FileName, DatFormat = this.DatFormat, InputDepot = this.InputDepot?.Clone() as DepotInformation, @@ -185,6 +182,7 @@ namespace SabreTools.DatFiles header.SetFieldValue(Models.Metadata.Header.DebugKey, GetFieldValue(Models.Metadata.Header.DebugKey)); header.SetFieldValue(Models.Metadata.Header.DescriptionKey, GetFieldValue(Models.Metadata.Header.DescriptionKey)); header.SetFieldValue(Models.Metadata.Header.EmailKey, GetFieldValue(Models.Metadata.Header.EmailKey)); + header.SetFieldValue(DatHeader.FileNameKey, GetFieldValue(DatHeader.FileNameKey)); header.SetFieldValue(Models.Metadata.Header.ForceMergingKey, GetFieldValue(Models.Metadata.Header.ForceMergingKey)); header.SetFieldValue(Models.Metadata.Header.ForceNodumpKey, GetFieldValue(Models.Metadata.Header.ForceNodumpKey)); header.SetFieldValue(Models.Metadata.Header.ForcePackingKey, GetFieldValue(Models.Metadata.Header.ForcePackingKey)); @@ -227,7 +225,6 @@ namespace SabreTools.DatFiles { var header = new DatHeader() { - FileName = this.FileName, DatFormat = this.DatFormat, }; header.SetFieldValue(Models.Metadata.Header.AuthorKey, GetFieldValue(Models.Metadata.Header.AuthorKey)); @@ -236,6 +233,7 @@ namespace SabreTools.DatFiles header.SetFieldValue(Models.Metadata.Header.DateKey, GetFieldValue(Models.Metadata.Header.DateKey)); header.SetFieldValue(Models.Metadata.Header.DescriptionKey, GetFieldValue(Models.Metadata.Header.DescriptionKey)); header.SetFieldValue(Models.Metadata.Header.EmailKey, GetFieldValue(Models.Metadata.Header.EmailKey)); + header.SetFieldValue(DatHeader.FileNameKey, GetFieldValue(DatHeader.FileNameKey)); header.SetFieldValue(Models.Metadata.Header.ForceMergingKey, GetFieldValue(Models.Metadata.Header.ForceMergingKey)); header.SetFieldValue(Models.Metadata.Header.ForceNodumpKey, GetFieldValue(Models.Metadata.Header.ForceNodumpKey)); header.SetFieldValue(Models.Metadata.Header.ForcePackingKey, GetFieldValue(Models.Metadata.Header.ForcePackingKey)); @@ -283,8 +281,8 @@ namespace SabreTools.DatFiles if (datHeader == null) return; - if (!string.IsNullOrEmpty(datHeader.FileName)) - FileName = datHeader.FileName; + if (!string.IsNullOrEmpty(datHeader.GetFieldValue(DatHeader.FileNameKey))) + SetFieldValue(DatHeader.FileNameKey, datHeader.GetFieldValue(DatHeader.FileNameKey)); if (!string.IsNullOrEmpty(datHeader.GetFieldValue(Models.Metadata.Header.NameKey))) SetFieldValue(Models.Metadata.Header.NameKey, datHeader.GetFieldValue(Models.Metadata.Header.NameKey)); @@ -859,7 +857,9 @@ namespace SabreTools.DatFiles /// String containing the new filename private string CreateOutFileNamesHelper(string outDir, string extension, bool overwrite) { - string? filename = string.IsNullOrEmpty(FileName) ? GetFieldValue(Models.Metadata.Header.DescriptionKey) : FileName; + string? filename = string.IsNullOrEmpty(GetFieldValue(DatHeader.FileNameKey)) + ? GetFieldValue(Models.Metadata.Header.DescriptionKey) + : GetFieldValue(DatHeader.FileNameKey); // Strip off the extension if it's a holdover from the DAT if (Utilities.HasValidDatExtension(filename)) diff --git a/SabreTools.DatFiles/Formats/AttractMode.Writer.cs b/SabreTools.DatFiles/Formats/AttractMode.Writer.cs index 6a00cb26..2b47c2d9 100644 --- a/SabreTools.DatFiles/Formats/AttractMode.Writer.cs +++ b/SabreTools.DatFiles/Formats/AttractMode.Writer.cs @@ -126,7 +126,7 @@ namespace SabreTools.DatFiles.Formats { Name = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), Title = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey), - Emulator = Header.FileName, + Emulator = Header.GetFieldValue(DatHeader.FileNameKey), CloneOf = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey), Year = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.YearKey), Manufacturer = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.ManufacturerKey), diff --git a/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs b/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs index cb14de42..3a1313d3 100644 --- a/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs +++ b/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs @@ -159,7 +159,7 @@ namespace SabreTools.DatFiles.Formats { var row = new Models.SeparatedValue.Row { - FileName = Header.FileName, + FileName = Header.GetFieldValue(DatHeader.FileNameKey), InternalName = Header.GetFieldValue(Models.Metadata.Header.NameKey), Description = Header.GetFieldValue(Models.Metadata.Header.DescriptionKey), GameName = disk.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), @@ -187,7 +187,7 @@ namespace SabreTools.DatFiles.Formats { var row = new Models.SeparatedValue.Row { - FileName = Header.FileName, + FileName = Header.GetFieldValue(DatHeader.FileNameKey), InternalName = Header.GetFieldValue(Models.Metadata.Header.NameKey), Description = Header.GetFieldValue(Models.Metadata.Header.DescriptionKey), GameName = media.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), @@ -215,7 +215,7 @@ namespace SabreTools.DatFiles.Formats { var row = new Models.SeparatedValue.Row { - FileName = Header.FileName, + FileName = Header.GetFieldValue(DatHeader.FileNameKey), InternalName = Header.GetFieldValue(Models.Metadata.Header.NameKey), Description = Header.GetFieldValue(Models.Metadata.Header.DescriptionKey), GameName = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), diff --git a/SabreTools.DatTools/DatFileTool.cs b/SabreTools.DatTools/DatFileTool.cs index e86e4708..c7a2570b 100644 --- a/SabreTools.DatTools/DatFileTool.cs +++ b/SabreTools.DatTools/DatFileTool.cs @@ -105,7 +105,7 @@ namespace SabreTools.DatTools Dictionary> itemFieldNames, bool onlySame) { - InternalStopwatch watch = new($"Replacing items in '{intDat.Header.FileName}' from the base DAT"); + InternalStopwatch watch = new($"Replacing items in '{intDat.Header.GetFieldValue(DatHeader.FileNameKey)}' from the base DAT"); // If we are matching based on DatItem fields of any sort if (itemFieldNames.Any()) @@ -221,7 +221,7 @@ namespace SabreTools.DatTools else datFile.Items.BucketBy(ItemKey.CRC, DedupeType.None); - InternalStopwatch watch = new($"Comparing '{intDat.Header.FileName}' to base DAT"); + InternalStopwatch watch = new($"Comparing '{intDat.Header.GetFieldValue(DatHeader.FileNameKey)}' to base DAT"); // For comparison's sake, we want to a the base bucketing if (useGames) @@ -378,8 +378,8 @@ namespace SabreTools.DatTools InternalStopwatch watch = new("Initializing duplicate DAT"); // Fill in any information not in the base DAT - if (string.IsNullOrEmpty(datFile.Header.FileName)) - datFile.Header.FileName = "All DATs"; + if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(DatHeader.FileNameKey))) + datFile.Header.SetFieldValue(DatHeader.FileNameKey, "All DATs"); if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey))) datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, "datFile.All DATs"); @@ -389,7 +389,7 @@ namespace SabreTools.DatTools string post = " (Duplicates)"; DatFile dupeData = DatFile.Create(datFile.Header); - dupeData.Header.FileName += post; + dupeData.Header.SetFieldValue(DatHeader.FileNameKey, dupeData.Header.GetFieldValue(DatHeader.FileNameKey) + post); dupeData.Header.SetFieldValue(Models.Metadata.Header.NameKey, dupeData.Header.GetFieldValue(Models.Metadata.Header.NameKey) + post); dupeData.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, dupeData.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + post); dupeData.Items = []; @@ -467,8 +467,8 @@ namespace SabreTools.DatTools InternalStopwatch watch = new("Initializing all individual DATs"); // Fill in any information not in the base DAT - if (string.IsNullOrEmpty(datFile.Header.FileName)) - datFile.Header.FileName = "All DATs"; + if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(DatHeader.FileNameKey))) + datFile.Header.SetFieldValue(DatHeader.FileNameKey, "All DATs"); if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey))) datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, "All DATs"); @@ -489,7 +489,7 @@ namespace SabreTools.DatTools { string innerpost = $" ({j} - {inputs[j].GetNormalizedFileName(true)} Only)"; DatFile diffData = DatFile.Create(datFile.Header); - diffData.Header.FileName += innerpost; + diffData.Header.SetFieldValue(DatHeader.FileNameKey, diffData.Header.GetFieldValue(DatHeader.FileNameKey) + innerpost); diffData.Header.SetFieldValue(Models.Metadata.Header.NameKey, diffData.Header.GetFieldValue(Models.Metadata.Header.NameKey) + innerpost); diffData.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, diffData.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + innerpost); diffData.Items = []; @@ -571,8 +571,8 @@ namespace SabreTools.DatTools InternalStopwatch watch = new("Initializing no duplicate DAT"); // Fill in any information not in the base DAT - if (string.IsNullOrEmpty(datFile.Header.FileName)) - datFile.Header.FileName = "All DATs"; + if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(DatHeader.FileNameKey))) + datFile.Header.SetFieldValue(DatHeader.FileNameKey, "All DATs"); if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey))) datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, "All DATs"); @@ -582,7 +582,7 @@ namespace SabreTools.DatTools string post = " (No Duplicates)"; DatFile outerDiffData = DatFile.Create(datFile.Header); - outerDiffData.Header.FileName += post; + outerDiffData.Header.SetFieldValue(DatHeader.FileNameKey, outerDiffData.Header.GetFieldValue(DatHeader.FileNameKey) + post); outerDiffData.Header.SetFieldValue(Models.Metadata.Header.NameKey, outerDiffData.Header.GetFieldValue(Models.Metadata.Header.NameKey) + post); outerDiffData.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, outerDiffData.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + post); outerDiffData.Items = []; diff --git a/SabreTools.DatTools/Parser.cs b/SabreTools.DatTools/Parser.cs index b9134b11..44a64bbc 100644 --- a/SabreTools.DatTools/Parser.cs +++ b/SabreTools.DatTools/Parser.cs @@ -94,11 +94,11 @@ namespace SabreTools.DatTools return; // If the output filename isn't set already, get the internal filename - datFile.Header.FileName = string.IsNullOrEmpty(datFile.Header.FileName) + datFile.Header.SetFieldValue(DatHeader.FileNameKey, string.IsNullOrEmpty(datFile.Header.GetFieldValue(DatHeader.FileNameKey)) ? (keepext ? Path.GetFileName(currentPath) : Path.GetFileNameWithoutExtension(currentPath)) - : datFile.Header.FileName; + : datFile.Header.GetFieldValue(DatHeader.FileNameKey)); // If the output type isn't set already, get the internal output type DatFormat currentPathFormat = GetDatFormat(currentPath); diff --git a/SabreTools.DatTools/Splitter.cs b/SabreTools.DatTools/Splitter.cs index 4ac661de..bb83d56e 100644 --- a/SabreTools.DatTools/Splitter.cs +++ b/SabreTools.DatTools/Splitter.cs @@ -55,12 +55,12 @@ namespace SabreTools.DatTools // Set all of the appropriate outputs for each of the subsets DatFile extADat = DatFile.Create(datFile.Header.CloneStandard()); - extADat.Header.FileName += $" ({newExtAString})"; + extADat.Header.SetFieldValue(DatHeader.FileNameKey, extADat.Header.GetFieldValue(DatHeader.FileNameKey) + $" ({newExtAString})"); extADat.Header.SetFieldValue(Models.Metadata.Header.NameKey, extADat.Header.GetFieldValue(Models.Metadata.Header.NameKey) + $" ({newExtAString})"); extADat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, extADat.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + $" ({newExtAString})"); DatFile extBDat = DatFile.Create(datFile.Header.CloneStandard()); - extBDat.Header.FileName += $" ({newExtBString})"; + extBDat.Header.SetFieldValue(DatHeader.FileNameKey, extBDat.Header.GetFieldValue(DatHeader.FileNameKey) + $" ({newExtBString})"); extBDat.Header.SetFieldValue(Models.Metadata.Header.NameKey, extBDat.Header.GetFieldValue(Models.Metadata.Header.NameKey) + $" ({newExtBString})"); extBDat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, extBDat.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + $" ({newExtBString})"); @@ -123,42 +123,42 @@ namespace SabreTools.DatTools // TODO: Can this be made into a loop? fieldDats[Models.Metadata.Rom.StatusKey] = DatFile.Create(datFile.Header.CloneStandard()); - fieldDats[Models.Metadata.Rom.StatusKey].Header.FileName += " (Nodump)"; + fieldDats[Models.Metadata.Rom.StatusKey].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.StatusKey].Header.GetFieldValue(DatHeader.FileNameKey) + " (Nodump)"); fieldDats[Models.Metadata.Rom.StatusKey].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.StatusKey].Header.GetFieldValue(Models.Metadata.Header.NameKey) + " (Nodump)"); fieldDats[Models.Metadata.Rom.StatusKey].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.StatusKey].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + " (Nodump)"); fieldDats[Models.Metadata.Rom.SHA512Key] = DatFile.Create(datFile.Header.CloneStandard()); - fieldDats[Models.Metadata.Rom.SHA512Key].Header.FileName += " (SHA-512)"; + fieldDats[Models.Metadata.Rom.SHA512Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.SHA512Key].Header.GetFieldValue(DatHeader.FileNameKey) + " (SHA-512)"); fieldDats[Models.Metadata.Rom.SHA512Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.SHA512Key].Header.GetFieldValue(Models.Metadata.Header.NameKey) + " (SHA-512)"); fieldDats[Models.Metadata.Rom.SHA512Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.SHA512Key].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + " (SHA-512)"); fieldDats[Models.Metadata.Rom.SHA384Key] = DatFile.Create(datFile.Header.CloneStandard()); - fieldDats[Models.Metadata.Rom.SHA384Key].Header.FileName += " (SHA-384)"; + fieldDats[Models.Metadata.Rom.SHA384Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.SHA384Key].Header.GetFieldValue(DatHeader.FileNameKey) + " (SHA-384)"); fieldDats[Models.Metadata.Rom.SHA384Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.SHA384Key].Header.GetFieldValue(Models.Metadata.Header.NameKey) + " (SHA-384)"); fieldDats[Models.Metadata.Rom.SHA384Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.SHA384Key].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + " (SHA-384)"); fieldDats[Models.Metadata.Rom.SHA256Key] = DatFile.Create(datFile.Header.CloneStandard()); - fieldDats[Models.Metadata.Rom.SHA256Key].Header.FileName += " (SHA-256)"; + fieldDats[Models.Metadata.Rom.SHA256Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.SHA256Key].Header.GetFieldValue(DatHeader.FileNameKey) + " (SHA-256)"); fieldDats[Models.Metadata.Rom.SHA256Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.SHA256Key].Header.GetFieldValue(Models.Metadata.Header.NameKey) + " (SHA-256)"); fieldDats[Models.Metadata.Rom.SHA256Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.SHA256Key].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + " (SHA-256)"); fieldDats[Models.Metadata.Rom.SHA1Key] = DatFile.Create(datFile.Header.CloneStandard()); - fieldDats[Models.Metadata.Rom.SHA1Key].Header.FileName += " (SHA-1)"; + fieldDats[Models.Metadata.Rom.SHA1Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.SHA1Key].Header.GetFieldValue(DatHeader.FileNameKey) + " (SHA-1)"); fieldDats[Models.Metadata.Rom.SHA1Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.SHA1Key].Header.GetFieldValue(Models.Metadata.Header.NameKey) + " (SHA-1)"); fieldDats[Models.Metadata.Rom.SHA1Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.SHA1Key].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + " (SHA-1)"); fieldDats[Models.Metadata.Rom.MD5Key] = DatFile.Create(datFile.Header.CloneStandard()); - fieldDats[Models.Metadata.Rom.MD5Key].Header.FileName += " (MD5)"; + fieldDats[Models.Metadata.Rom.MD5Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.MD5Key].Header.GetFieldValue(DatHeader.FileNameKey) + " (MD5)"); fieldDats[Models.Metadata.Rom.MD5Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.MD5Key].Header.GetFieldValue(Models.Metadata.Header.NameKey) + " (MD5)"); fieldDats[Models.Metadata.Rom.MD5Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.MD5Key].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + " (MD5)"); fieldDats[Models.Metadata.Rom.CRCKey] = DatFile.Create(datFile.Header.CloneStandard()); - fieldDats[Models.Metadata.Rom.CRCKey].Header.FileName += " (CRC)"; + fieldDats[Models.Metadata.Rom.CRCKey].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.CRCKey].Header.GetFieldValue(DatHeader.FileNameKey) + " (CRC)"); fieldDats[Models.Metadata.Rom.CRCKey].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.CRCKey].Header.GetFieldValue(Models.Metadata.Header.NameKey) + " (CRC)"); fieldDats[Models.Metadata.Rom.CRCKey].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.CRCKey].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + " (CRC)"); fieldDats["null"] = DatFile.Create(datFile.Header.CloneStandard()); - fieldDats["null"].Header.FileName += " (Other)"; + fieldDats["null"].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats["null"].Header.GetFieldValue(DatHeader.FileNameKey) + " (Other)"); fieldDats["null"].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats["null"].Header.GetFieldValue(Models.Metadata.Header.NameKey) + " (Other)"); fieldDats["null"].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats["null"].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + " (Other)"); @@ -340,24 +340,28 @@ namespace SabreTools.DatTools // Now set the new output values #if NET20 || NET35 - newDatFile.Header.FileName = string.IsNullOrEmpty(name) - ? datFile.Header.FileName + newDatFile.Header.SetFieldValue(DatHeader.FileNameKey, string.IsNullOrEmpty(name) + ? datFile.Header.GetFieldValue(DatHeader.FileNameKey) : (shortname ? Path.GetFileName(name) : expName - ); + )); #else - newDatFile.Header.FileName = WebUtility.HtmlDecode(string.IsNullOrEmpty(name) - ? datFile.Header.FileName + newDatFile.Header.SetFieldValue(DatHeader.FileNameKey, WebUtility.HtmlDecode(string.IsNullOrEmpty(name) + ? datFile.Header.GetFieldValue(DatHeader.FileNameKey) : (shortname ? Path.GetFileName(name) : expName ) - ); + )); #endif - newDatFile.Header.FileName = restore ? $"{datFile.Header.FileName} ({newDatFile.Header.FileName})" : newDatFile.Header.FileName; + newDatFile.Header.SetFieldValue(DatHeader.FileNameKey, restore + ? $"{datFile.Header.GetFieldValue(DatHeader.FileNameKey)} ({newDatFile.Header.GetFieldValue(DatHeader.FileNameKey)})" + : newDatFile.Header.GetFieldValue(DatHeader.FileNameKey)); newDatFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, $"{datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)} ({expName})"); - newDatFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)) ? newDatFile.Header.GetFieldValue(Models.Metadata.Header.NameKey) : $"{datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)} ({expName})"); + newDatFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)) + ? newDatFile.Header.GetFieldValue(Models.Metadata.Header.NameKey) + : $"{datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)} ({expName})"); newDatFile.Header.SetFieldValue(Models.Metadata.Header.TypeKey, null); // Write out the temporary DAT to the proper directory @@ -376,12 +380,12 @@ namespace SabreTools.DatTools InternalStopwatch watch = new($"Splitting DAT by size"); DatFile lessThan = DatFile.Create(datFile.Header.CloneStandard()); - lessThan.Header.FileName += $" (less than {radix})"; + lessThan.Header.SetFieldValue(DatHeader.FileNameKey, lessThan.Header.GetFieldValue(DatHeader.FileNameKey) + $" (less than {radix})"); lessThan.Header.SetFieldValue(Models.Metadata.Header.NameKey, lessThan.Header.GetFieldValue(Models.Metadata.Header.NameKey) + $" (less than {radix})"); lessThan.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, lessThan.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + $" (less than {radix})"); DatFile greaterThan = DatFile.Create(datFile.Header.CloneStandard()); - greaterThan.Header.FileName += $" (equal-greater than {radix})"; + greaterThan.Header.SetFieldValue(DatHeader.FileNameKey, greaterThan.Header.GetFieldValue(DatHeader.FileNameKey) + $" (equal-greater than {radix})"); greaterThan.Header.SetFieldValue(Models.Metadata.Header.NameKey, greaterThan.Header.GetFieldValue(Models.Metadata.Header.NameKey) + $" (equal-greater than {radix})"); greaterThan.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, greaterThan.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + $" (equal-greater than {radix})"); @@ -458,7 +462,7 @@ namespace SabreTools.DatTools long currentSize = 0; long currentIndex = 0; DatFile currentDat = DatFile.Create(datFile.Header.CloneStandard()); - currentDat.Header.FileName += $"_{currentIndex}"; + currentDat.Header.SetFieldValue(DatHeader.FileNameKey, currentDat.Header.GetFieldValue(DatHeader.FileNameKey) + $"_{currentIndex}"); currentDat.Header.SetFieldValue(Models.Metadata.Header.NameKey, currentDat.Header.GetFieldValue(Models.Metadata.Header.NameKey) + $"_{currentIndex}"); currentDat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, currentDat.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + $"_{currentIndex}"); @@ -501,7 +505,7 @@ namespace SabreTools.DatTools currentSize = 0; currentIndex++; currentDat = DatFile.Create(datFile.Header.CloneStandard()); - currentDat.Header.FileName += $"_{currentIndex}"; + currentDat.Header.SetFieldValue(DatHeader.FileNameKey, currentDat.Header.GetFieldValue(DatHeader.FileNameKey) + $"_{currentIndex}"); currentDat.Header.SetFieldValue(Models.Metadata.Header.NameKey, currentDat.Header.GetFieldValue(Models.Metadata.Header.NameKey) + $"_{currentIndex}"); currentDat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, currentDat.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + $"_{currentIndex}"); } @@ -545,7 +549,7 @@ namespace SabreTools.DatTools foreach (ItemType itemType in outputTypes) { typeDats[itemType] = DatFile.Create(datFile.Header.CloneStandard()); - typeDats[itemType].Header.FileName += $" ({itemType})"; + typeDats[itemType].Header.SetFieldValue(DatHeader.FileNameKey, typeDats[itemType].Header.GetFieldValue(DatHeader.FileNameKey) + $" ({itemType})"); typeDats[itemType].Header.SetFieldValue(Models.Metadata.Header.NameKey, typeDats[itemType].Header.GetFieldValue(Models.Metadata.Header.NameKey) + $" ({itemType})"); typeDats[itemType].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, typeDats[itemType].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + $" ({itemType})"); } diff --git a/SabreTools.DatTools/Statistics.cs b/SabreTools.DatTools/Statistics.cs index 603bfd92..2054b79f 100644 --- a/SabreTools.DatTools/Statistics.cs +++ b/SabreTools.DatTools/Statistics.cs @@ -100,7 +100,7 @@ namespace SabreTools.DatTools DatStatistics individualStats = new() { Statistics = datdata.Items, - DisplayName = datdata.Header.FileName, + DisplayName = datdata.Header.GetFieldValue(DatHeader.FileNameKey), MachineCount = datdata.Items.Keys.Count, IsDirectory = false, }; diff --git a/SabreTools.DatTools/Verification.cs b/SabreTools.DatTools/Verification.cs index 7e387815..bad14cd9 100644 --- a/SabreTools.DatTools/Verification.cs +++ b/SabreTools.DatTools/Verification.cs @@ -104,7 +104,7 @@ namespace SabreTools.DatTools watch.Stop(); // Set fixdat headers in case of writing out - datFile.Header.FileName = $"fixDAT_{datFile.Header.FileName}"; + datFile.Header.SetFieldValue(DatHeader.FileNameKey, $"fixDAT_{datFile.Header.GetFieldValue(DatHeader.FileNameKey)}"); datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, $"fixDAT_{datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)}"); datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, $"fixDAT_{datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)}"); datFile.Items.ClearMarked(); @@ -153,7 +153,7 @@ namespace SabreTools.DatTools watch.Stop(); // Set fixdat headers in case of writing out - datFile.Header.FileName = $"fixDAT_{datFile.Header.FileName}"; + datFile.Header.SetFieldValue(DatHeader.FileNameKey, $"fixDAT_{datFile.Header.GetFieldValue(DatHeader.FileNameKey)}"); datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, $"fixDAT_{datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)}"); datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, $"fixDAT_{datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)}"); datFile.Items.ClearMarked(); diff --git a/SabreTools.DatTools/Writer.cs b/SabreTools.DatTools/Writer.cs index d75b13da..ff161b36 100644 --- a/SabreTools.DatTools/Writer.cs +++ b/SabreTools.DatTools/Writer.cs @@ -71,7 +71,7 @@ namespace SabreTools.DatTools datFile.Items.BucketBy(ItemKey.Machine, DedupeType.None); // Output the number of items we're going to be writing - logger.User($"A total of {datFile.Items.TotalCount - datFile.Items.RemovedCount} items will be written out to '{datFile.Header.FileName}'"); + logger.User($"A total of {datFile.Items.TotalCount - datFile.Items.RemovedCount} items will be written out to '{datFile.Header.GetFieldValue(DatHeader.FileNameKey)}'"); // Get the outfile names Dictionary outfiles = datFile.Header.CreateOutFileNames(outDir!, overwrite); @@ -135,7 +135,7 @@ namespace SabreTools.DatTools new() { Statistics = datFile.Items, - DisplayName = datFile.Header.FileName, + DisplayName = datFile.Header.GetFieldValue(DatHeader.FileNameKey), MachineCount = datFile.Items.Keys.Count, IsDirectory = false, }, @@ -151,30 +151,30 @@ namespace SabreTools.DatTools private static void EnsureHeaderFields(DatFile datFile) { // Empty FileName - if (string.IsNullOrEmpty(datFile.Header.FileName)) + if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(DatHeader.FileNameKey))) { if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) { - datFile.Header.FileName = "Default"; + datFile.Header.SetFieldValue(DatHeader.FileNameKey,"Default"); datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, "Default"); datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, "Default"); } else if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)) && !string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) { - datFile.Header.FileName = datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey); + datFile.Header.SetFieldValue(DatHeader.FileNameKey,datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)); datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)); } else if (!string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) { - datFile.Header.FileName = datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey); + datFile.Header.SetFieldValue(DatHeader.FileNameKey, datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)); datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)); } else if (!string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)) && !string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) { - datFile.Header.FileName = datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey); + datFile.Header.SetFieldValue(DatHeader.FileNameKey, datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)); } } @@ -183,8 +183,8 @@ namespace SabreTools.DatTools { if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) { - datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, datFile.Header.FileName); - datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, datFile.Header.FileName); + datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, datFile.Header.GetFieldValue(DatHeader.FileNameKey)); + datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, datFile.Header.GetFieldValue(DatHeader.FileNameKey)); } else if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)) && !string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) diff --git a/SabreTools.Test/DatFiles/DatHeaderTests.cs b/SabreTools.Test/DatFiles/DatHeaderTests.cs index b90d2cf5..296befba 100644 --- a/SabreTools.Test/DatFiles/DatHeaderTests.cs +++ b/SabreTools.Test/DatFiles/DatHeaderTests.cs @@ -17,8 +17,8 @@ namespace SabreTools.Test.DatFiles var datHeader = new DatHeader { DatFormat = datFormat, - FileName = "test.dat", }; + datHeader.SetFieldValue(DatHeader.FileNameKey, "test.dat"); // Invoke the method string outDir = "C:\\Test"; @@ -37,8 +37,8 @@ namespace SabreTools.Test.DatFiles var datHeader = new DatHeader { DatFormat = DatFormat.ALL, - FileName = "test.dat", }; + datHeader.SetFieldValue(DatHeader.FileNameKey, "test.dat"); // Invoke the method string outDir = "C:\\Test"; diff --git a/SabreTools/Features/BaseFeature.cs b/SabreTools/Features/BaseFeature.cs index bf9f05e2..95022666 100644 --- a/SabreTools/Features/BaseFeature.cs +++ b/SabreTools/Features/BaseFeature.cs @@ -2152,8 +2152,6 @@ Some special strings that can be used: // TODO: Sort this by region, like the actual header var datHeader = new DatHeader() { - FileName = GetString(features, FilenameStringValue), - // Get the depot information InputDepot = new DepotInformation( GetBoolean(features, DepotValue), @@ -2168,6 +2166,7 @@ Some special strings that can be used: datHeader.SetFieldValue(Models.Metadata.Header.DateKey, GetString(features, DateStringValue)); datHeader.SetFieldValue(Models.Metadata.Header.DescriptionKey, GetString(features, DescriptionStringValue)); datHeader.SetFieldValue(Models.Metadata.Header.EmailKey, GetString(features, EmailStringValue)); + datHeader.SetFieldValue(DatHeader.FileNameKey, GetString(features, FilenameStringValue)); datHeader.SetFieldValue(Models.Metadata.Header.ForceMergingKey, GetString(features, ForceMergingStringValue).AsEnumValue()); datHeader.SetFieldValue(Models.Metadata.Header.ForceNodumpKey, GetString(features, ForceNodumpStringValue).AsEnumValue()); datHeader.SetFieldValue(Models.Metadata.Header.ForceNodumpKey, GetString(features, ForcePackingStringValue).AsEnumValue()); diff --git a/SabreTools/Features/Sort.cs b/SabreTools/Features/Sort.cs index 09dcaccb..e8b99c37 100644 --- a/SabreTools/Features/Sort.cs +++ b/SabreTools/Features/Sort.cs @@ -108,14 +108,14 @@ namespace SabreTools.Features // If we have the depot flag, respect it bool success; if (Header.InputDepot?.IsActive ?? false) - success = Rebuilder.RebuildDepot(datdata, Inputs, Path.Combine(OutputDir!, datdata.Header.FileName!), date, delete, inverse, outputFormat); + success = Rebuilder.RebuildDepot(datdata, Inputs, Path.Combine(OutputDir!, datdata.Header.GetFieldValue(DatHeader.FileNameKey)!), date, delete, inverse, outputFormat); else - success = Rebuilder.RebuildGeneric(datdata, Inputs, Path.Combine(OutputDir!, datdata.Header.FileName!), quickScan, date, delete, inverse, outputFormat, asFiles); + success = Rebuilder.RebuildGeneric(datdata, Inputs, Path.Combine(OutputDir!, datdata.Header.GetFieldValue(DatHeader.FileNameKey)!), quickScan, date, delete, inverse, outputFormat, asFiles); // If we have a success and we're updating the DAT, write it out if (success && updateDat) { - datdata.Header.FileName = $"fixDAT_{Header.FileName}"; + datdata.Header.SetFieldValue(DatHeader.FileNameKey, $"fixDAT_{Header.GetFieldValue(DatHeader.FileNameKey)}"); datdata.Header.SetFieldValue(Models.Metadata.Header.NameKey, $"fixDAT_{Header.GetFieldValue(Models.Metadata.Header.NameKey)}"); datdata.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, $"fixDAT_{Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)}"); datdata.Items.ClearMarked(); @@ -156,7 +156,7 @@ namespace SabreTools.Features // If we have a success and we're updating the DAT, write it out if (success && updateDat) { - datdata.Header.FileName = $"fixDAT_{Header.FileName}"; + datdata.Header.SetFieldValue(DatHeader.FileNameKey, $"fixDAT_{Header.GetFieldValue(DatHeader.FileNameKey)}"); datdata.Header.SetFieldValue(Models.Metadata.Header.NameKey, $"fixDAT_{Header.GetFieldValue(Models.Metadata.Header.NameKey)}"); datdata.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, $"fixDAT_{Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)}"); datdata.Items.ClearMarked(); diff --git a/SabreTools/Features/Stats.cs b/SabreTools/Features/Stats.cs index 34c2144a..24dffdf5 100644 --- a/SabreTools/Features/Stats.cs +++ b/SabreTools/Features/Stats.cs @@ -49,7 +49,7 @@ The stats that are outputted are as follows: if (!base.ProcessFeatures(features)) return false; - string filename = Header!.FileName!; + string filename = Header!.GetFieldValue(DatFiles.DatHeader.FileNameKey)!; if (Path.GetFileName(filename) != filename) { if (string.IsNullOrWhiteSpace(OutputDir)) diff --git a/SabreTools/Features/Update.cs b/SabreTools/Features/Update.cs index 2492c0ab..800b11b0 100644 --- a/SabreTools/Features/Update.cs +++ b/SabreTools/Features/Update.cs @@ -289,7 +289,7 @@ namespace SabreTools.Features string innerpost = $" ({j} - {inputPaths[j].GetNormalizedFileName(true)} Only)"; datHeaders[j] = userInputDat.Header; - datHeaders[j].FileName += innerpost; + datHeaders[j].SetFieldValue(DatHeader.FileNameKey, datHeaders[j].GetFieldValue(DatHeader.FileNameKey) + innerpost); datHeaders[j].SetFieldValue(Models.Metadata.Header.NameKey, datHeaders[j].GetFieldValue(Models.Metadata.Header.NameKey) + innerpost); datHeaders[j].SetFieldValue(Models.Metadata.Header.DescriptionKey, datHeaders[j].GetFieldValue(Models.Metadata.Header.DescriptionKey) + innerpost); }