From e411d90822ed56257ee6baaa58ff7511037c4d2a Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Sun, 10 Mar 2024 16:49:07 -0400 Subject: [PATCH] Migrate unoffical keys --- RombaSharp/Features/BaseFeature.cs | 15 +- .../DatFile.MetadataConverter.cs | 174 ++++++----------- SabreTools.DatFiles/DatFile.cs | 86 ++++----- SabreTools.DatFiles/DatHeader.cs | 157 ++++++++------- .../Formats/AttractMode.Writer.cs | 28 +-- .../Formats/ClrMamePro.Writer.cs | 2 +- .../Formats/DosCenter.Writer.cs | 2 +- .../Formats/EverdriveSMDB.Writer.cs | 2 +- .../Formats/Hashfile.Writer.cs | 94 ++++----- SabreTools.DatFiles/Formats/Listrom.Reader.cs | 36 ++-- SabreTools.DatFiles/Formats/Listrom.Writer.cs | 8 +- SabreTools.DatFiles/Formats/Listxml.Reader.cs | 128 +++++-------- SabreTools.DatFiles/Formats/Listxml.Writer.cs | 2 +- SabreTools.DatFiles/Formats/Logiqx.Writer.cs | 2 +- .../Formats/Missfile.Writer.cs | 10 +- .../Formats/OfflineList.Writer.cs | 2 +- SabreTools.DatFiles/Formats/OpenMSX.Reader.cs | 12 +- SabreTools.DatFiles/Formats/OpenMSX.Writer.cs | 2 +- .../Formats/RomCenter.Writer.cs | 10 +- SabreTools.DatFiles/Formats/SabreJSON.cs | 14 +- SabreTools.DatFiles/Formats/SabreXML.cs | 12 +- .../Formats/SeparatedValue.Writer.cs | 18 +- .../Formats/SoftwareList.Reader.cs | 86 ++++----- .../Formats/SoftwareList.Writer.cs | 46 ++--- SabreTools.DatFiles/ItemDictionary.cs | 20 +- SabreTools.DatFiles/ItemDictionaryDB.cs | 20 +- SabreTools.DatFiles/Setter.cs | 26 +-- SabreTools.DatItems/DatItem.cs | 179 +++++++----------- SabreTools.DatItems/Formats/Adjuster.cs | 15 +- SabreTools.DatItems/Formats/Analog.cs | 15 +- SabreTools.DatItems/Formats/Archive.cs | 15 +- SabreTools.DatItems/Formats/BiosSet.cs | 15 +- SabreTools.DatItems/Formats/Blank.cs | 20 +- SabreTools.DatItems/Formats/Chip.cs | 15 +- SabreTools.DatItems/Formats/Condition.cs | 15 +- SabreTools.DatItems/Formats/ConfLocation.cs | 15 +- SabreTools.DatItems/Formats/ConfSetting.cs | 15 +- SabreTools.DatItems/Formats/Configuration.cs | 15 +- SabreTools.DatItems/Formats/Control.cs | 15 +- SabreTools.DatItems/Formats/DataArea.cs | 15 +- SabreTools.DatItems/Formats/Device.cs | 15 +- .../Formats/DeviceReference.cs | 15 +- SabreTools.DatItems/Formats/DipLocation.cs | 15 +- SabreTools.DatItems/Formats/DipSwitch.cs | 26 +-- SabreTools.DatItems/Formats/DipValue.cs | 15 +- SabreTools.DatItems/Formats/Disk.cs | 60 +++--- SabreTools.DatItems/Formats/DiskArea.cs | 15 +- SabreTools.DatItems/Formats/Display.cs | 19 +- SabreTools.DatItems/Formats/Driver.cs | 15 +- SabreTools.DatItems/Formats/Extension.cs | 15 +- SabreTools.DatItems/Formats/Feature.cs | 15 +- SabreTools.DatItems/Formats/File.cs | 39 ++-- SabreTools.DatItems/Formats/Info.cs | 15 +- SabreTools.DatItems/Formats/Input.cs | 15 +- SabreTools.DatItems/Formats/Instance.cs | 15 +- SabreTools.DatItems/Formats/Media.cs | 41 ++-- SabreTools.DatItems/Formats/Part.cs | 15 +- SabreTools.DatItems/Formats/PartFeature.cs | 15 +- SabreTools.DatItems/Formats/Port.cs | 15 +- SabreTools.DatItems/Formats/RamOption.cs | 15 +- SabreTools.DatItems/Formats/Release.cs | 15 +- SabreTools.DatItems/Formats/ReleaseDetails.cs | 20 +- SabreTools.DatItems/Formats/Rom.cs | 56 +++--- SabreTools.DatItems/Formats/Sample.cs | 15 +- SabreTools.DatItems/Formats/Serials.cs | 20 +- SabreTools.DatItems/Formats/SharedFeature.cs | 15 +- SabreTools.DatItems/Formats/Slot.cs | 15 +- SabreTools.DatItems/Formats/SlotOption.cs | 15 +- SabreTools.DatItems/Formats/SoftwareList.cs | 15 +- SabreTools.DatItems/Formats/Sound.cs | 15 +- SabreTools.DatItems/Formats/SourceDetails.cs | 20 +- SabreTools.DatItems/Machine.cs | 19 ++ SabreTools.DatTools/DatFileTool.cs | 38 ++-- SabreTools.DatTools/DatFromDir.cs | 10 +- SabreTools.DatTools/Rebuilder.cs | 26 +-- SabreTools.DatTools/Splitter.cs | 107 +++++------ SabreTools.DatTools/Verification.cs | 4 +- SabreTools.Filtering/Cleaner.cs | 66 +++---- SabreTools.Filtering/ExtraIni.cs | 2 +- SabreTools.Filtering/Remover.cs | 16 +- SabreTools.Filtering/Replacer.cs | 4 +- SabreTools.Filtering/Splitter.cs | 87 +++++---- .../DatFiles/ItemDictionaryTests.cs | 3 +- SabreTools.Test/DatFiles/SetterTests.cs | 7 +- SabreTools.Test/DatItems/DatItemTests.cs | 52 ++--- SabreTools.Test/Filter/FilteringTests.cs | 3 +- SabreTools.Test/Filtering/CleaningTests.cs | 21 +- SabreTools.Test/Filtering/RemoverTests.cs | 5 +- SabreTools.Test/Filtering/ReplacerTests.cs | 9 +- SabreTools/Features/BaseFeature.cs | 17 +- SabreTools/Features/Update.cs | 12 +- 91 files changed, 1045 insertions(+), 1472 deletions(-) diff --git a/RombaSharp/Features/BaseFeature.cs b/RombaSharp/Features/BaseFeature.cs index 8a58ae45..266c2935 100644 --- a/RombaSharp/Features/BaseFeature.cs +++ b/RombaSharp/Features/BaseFeature.cs @@ -785,7 +785,11 @@ CREATE TABLE IF NOT EXISTS dat ( internal void AddDatToDatabase(Rom dat, SqliteConnection dbc) { // Get the dat full path - string fullpath = Path.Combine(_dats!, (dat.Machine.GetFieldValue(SabreTools.Models.Metadata.Machine.NameKey) == "dats" ? string.Empty : dat.Machine.GetFieldValue(SabreTools.Models.Metadata.Machine.NameKey))!, dat.GetName()!); + string fullpath = Path.Combine(_dats!, + (dat.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(SabreTools.Models.Metadata.Machine.NameKey) == "dats" + ? string.Empty + : dat.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(SabreTools.Models.Metadata.Machine.NameKey))! + , dat.GetName()!); // Parse the Dat if possible logger.User($"Adding from '{dat.GetName()}'"); @@ -807,9 +811,8 @@ CREATE TABLE IF NOT EXISTS dat ( { logger.Verbose($"Checking and adding file '{datItem.GetName() ?? string.Empty}'"); - if (datItem.ItemType == ItemType.Disk) + if (datItem is Disk disk) { - Disk disk = (Disk)datItem; hasItems = true; if (!string.IsNullOrWhiteSpace(disk.GetFieldValue(SabreTools.Models.Metadata.Disk.MD5Key))) @@ -823,9 +826,8 @@ CREATE TABLE IF NOT EXISTS dat ( md5sha1query += $" (\"{disk.GetFieldValue(SabreTools.Models.Metadata.Disk.MD5Key)}\", \"{disk.GetFieldValue(SabreTools.Models.Metadata.Disk.SHA1Key)}\"),"; } } - else if (datItem.ItemType == ItemType.Media) + else if (datItem is Media media) { - Media media = (Media)datItem; hasItems = true; if (!string.IsNullOrWhiteSpace(media.GetFieldValue(SabreTools.Models.Metadata.Media.MD5Key))) @@ -839,9 +841,8 @@ CREATE TABLE IF NOT EXISTS dat ( md5sha1query += $" (\"{media.GetFieldValue(SabreTools.Models.Metadata.Media.MD5Key)}\", \"{media.GetFieldValue(SabreTools.Models.Metadata.Media.SHA1Key)}\"),"; } } - else if (datItem.ItemType == ItemType.Rom) + else if (datItem is Rom rom) { - Rom rom = (Rom)datItem; hasItems = true; if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) diff --git a/SabreTools.DatFiles/DatFile.MetadataConverter.cs b/SabreTools.DatFiles/DatFile.MetadataConverter.cs index 75fac762..bc38dd9b 100644 --- a/SabreTools.DatFiles/DatFile.MetadataConverter.cs +++ b/SabreTools.DatFiles/DatFile.MetadataConverter.cs @@ -230,10 +230,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Adjuster(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Adjuster(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -256,10 +254,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Archive(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Archive(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -282,10 +278,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.BiosSet(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.BiosSet(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -308,10 +302,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Chip(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Chip(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -334,10 +326,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Configuration(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Configuration(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -362,10 +352,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.DataArea(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.DataArea(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -388,10 +376,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Device(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Device(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -414,10 +400,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.DeviceReference(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.DeviceReference(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -440,10 +424,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.DipLocation(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.DipLocation(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -466,10 +448,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.DipSwitch(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.DipSwitch(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -492,10 +472,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.DipValue(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.DipValue(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -518,10 +496,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Disk(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Disk(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -546,10 +522,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.DiskArea(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.DiskArea(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -572,10 +546,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Display(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Display(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -598,10 +570,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Driver(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Driver(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -645,10 +615,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Feature(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Feature(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -671,10 +639,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Info(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Info(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -697,10 +663,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Input(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Input(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -723,10 +687,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Media(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Media(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -753,10 +715,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Part(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Part(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -779,10 +739,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Port(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Port(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -805,10 +763,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.RamOption(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.RamOption(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -831,10 +787,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Release(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Release(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -857,10 +811,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Rom(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Rom(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -883,10 +835,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Sample(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Sample(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -909,10 +859,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.SharedFeature(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.SharedFeature(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -935,10 +883,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.SoftwareList(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.SoftwareList(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -961,10 +907,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Sound(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Sound(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } @@ -987,10 +931,8 @@ namespace SabreTools.DatFiles // Loop through the items and add foreach (var item in items) { - var datItem = new DatItems.Formats.Display(item) - { - Source = new DatItems.Source { Index = indexId, Name = filename } - }; + var datItem = new DatItems.Formats.Display(item); + datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); ParseAddHelper(datItem, statsOnly); } diff --git a/SabreTools.DatFiles/DatFile.cs b/SabreTools.DatFiles/DatFile.cs index 2587f86c..9c628d8e 100644 --- a/SabreTools.DatFiles/DatFile.cs +++ b/SabreTools.DatFiles/DatFile.cs @@ -218,7 +218,7 @@ namespace SabreTools.DatFiles string key; // If we have a Disk, Media, or Rom, clean the hash data - if (item.ItemType == ItemType.Disk && item is Disk disk) + if (item is Disk disk) { // If the file has aboslutely no hashes, skip and log if (disk.GetFieldValue(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump @@ -231,7 +231,7 @@ namespace SabreTools.DatFiles item = disk; } - if (item.ItemType == ItemType.Media && item is Media media) + if (item is Media media) { // If the file has aboslutely no hashes, skip and log if (string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.MD5Key)) @@ -244,7 +244,7 @@ namespace SabreTools.DatFiles item = media; } - else if (item.ItemType == ItemType.Rom && item is Rom rom) + else if (item is Rom rom) { // If we have the case where there is SHA-1 and nothing else, we don't fill in any other part of the data if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null && !rom.HasHashes()) @@ -366,8 +366,8 @@ namespace SabreTools.DatFiles { // Initialize strings string fix, - game = item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, - name = item.GetName() ?? item.ItemType.ToString(), + game = item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, + name = item.GetName() ?? item.GetFieldValue(Models.Metadata.DatItem.TypeKey).ToString(), crc = string.Empty, md5 = string.Empty, sha1 = string.Empty, @@ -379,26 +379,26 @@ namespace SabreTools.DatFiles // If we have a prefix if (prefix) - fix = Header.Prefix + (Header.Quotes ? "\"" : string.Empty); + fix = Header.GetFieldValue(DatHeader.PrefixKey) + (Header.GetFieldValue(DatHeader.QuotesKey) ? "\"" : string.Empty); // If we have a postfix else - fix = (Header.Quotes ? "\"" : string.Empty) + Header.Postfix; + fix = (Header.GetFieldValue(DatHeader.QuotesKey) ? "\"" : string.Empty) + Header.GetFieldValue(DatHeader.PostfixKey); // Ensure we have the proper values for replacement - if (item.ItemType == ItemType.Disk && item is Disk disk) + if (item is Disk disk) { md5 = disk.GetFieldValue(Models.Metadata.Disk.MD5Key) ?? string.Empty; sha1 = disk.GetFieldValue(Models.Metadata.Disk.SHA1Key) ?? string.Empty; } - else if (item.ItemType == ItemType.Media && item is Media media) + else if (item is Media media) { md5 = media.GetFieldValue(Models.Metadata.Media.MD5Key) ?? string.Empty; sha1 = media.GetFieldValue(Models.Metadata.Media.SHA1Key) ?? string.Empty; sha256 = media.GetFieldValue(Models.Metadata.Media.SHA256Key) ?? string.Empty; spamsum = media.GetFieldValue(Models.Metadata.Media.SpamSumKey) ?? string.Empty; } - else if (item.ItemType == ItemType.Rom && item is Rom rom) + else if (item is Rom rom) { crc = rom.GetFieldValue(Models.Metadata.Rom.CRCKey) ?? string.Empty; md5 = rom.GetFieldValue(Models.Metadata.Rom.MD5Key) ?? string.Empty; @@ -415,9 +415,9 @@ namespace SabreTools.DatFiles .Replace("%game%", game) .Replace("%machine%", game) .Replace("%name%", name) - .Replace("%manufacturer%", item.Machine.GetFieldValue(Models.Metadata.Machine.ManufacturerKey) ?? string.Empty) - .Replace("%publisher%", item.Machine.GetFieldValue(Models.Metadata.Machine.PublisherKey) ?? string.Empty) - .Replace("%category%", item.Machine.GetFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty) + .Replace("%manufacturer%", item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.ManufacturerKey) ?? string.Empty) + .Replace("%publisher%", item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.PublisherKey) ?? string.Empty) + .Replace("%category%", item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty) .Replace("%crc%", crc) .Replace("%md5%", md5) .Replace("%sha1%", sha1) @@ -439,15 +439,17 @@ namespace SabreTools.DatFiles protected void ProcessItemName(DatItem item, bool forceRemoveQuotes, bool forceRomName = true) { // Backup relevant values and set new ones accordingly - bool quotesBackup = Header.Quotes; - bool useRomNameBackup = Header.UseRomName; + bool quotesBackup = Header.GetFieldValue(DatHeader.QuotesKey); + bool useRomNameBackup = Header.GetFieldValue(DatHeader.UseRomNameKey); if (forceRemoveQuotes) - Header.Quotes = false; + Header.SetFieldValue(DatHeader.QuotesKey, false); if (forceRomName) - Header.UseRomName = true; + Header.SetFieldValue(DatHeader.UseRomNameKey, true); // Get the name to update - string? name = (Header.UseRomName ? item.GetName() : item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)) ?? string.Empty; + string? name = (Header.GetFieldValue(DatHeader.UseRomNameKey) + ? item.GetName() + : item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)) ?? string.Empty; // Create the proper Prefix and Postfix string pre = CreatePrefixPostfix(item, true); @@ -456,7 +458,7 @@ namespace SabreTools.DatFiles // If we're in Depot mode, take care of that instead if (Header.OutputDepot?.IsActive == true) { - if (item.ItemType == ItemType.Disk && item is Disk disk) + if (item is Disk disk) { // We can only write out if there's a SHA-1 if (!string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key))) @@ -465,7 +467,7 @@ namespace SabreTools.DatFiles item.SetName($"{pre}{name}{post}"); } } - else if (item.ItemType == ItemType.Media && item is Media media) + else if (item is Media media) { // We can only write out if there's a SHA-1 if (!string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA1Key))) @@ -474,7 +476,7 @@ namespace SabreTools.DatFiles item.SetName($"{pre}{name}{post}"); } } - else if (item.ItemType == ItemType.Rom && item is Rom rom) + else if (item is Rom rom) { // We can only write out if there's a SHA-1 if (!string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key))) @@ -487,38 +489,38 @@ namespace SabreTools.DatFiles return; } - if (!string.IsNullOrEmpty(Header.ReplaceExtension) || Header.RemoveExtension) + if (!string.IsNullOrEmpty(Header.GetFieldValue(DatHeader.ReplaceExtensionKey)) || Header.GetFieldValue(DatHeader.RemoveExtensionKey)) { - if (Header.RemoveExtension) - Header.ReplaceExtension = string.Empty; + if (Header.GetFieldValue(DatHeader.RemoveExtensionKey)) + 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) + Header.ReplaceExtension); + name = Path.Combine(dir, Path.GetFileNameWithoutExtension(name) + Header.GetFieldValue(DatHeader.ReplaceExtensionKey)); } } - if (!string.IsNullOrEmpty(Header.AddExtension)) - name += Header.AddExtension; + if (!string.IsNullOrEmpty(Header.GetFieldValue(DatHeader.AddExtensionKey))) + name += Header.GetFieldValue(DatHeader.AddExtensionKey); - if (Header.UseRomName && Header.GameName) - name = Path.Combine(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, name); + if (Header.GetFieldValue(DatHeader.UseRomNameKey) && Header.GetFieldValue(DatHeader.GameNameKey)) + name = Path.Combine(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, name); // Now assign back the formatted name name = $"{pre}{name}{post}"; - if (Header.UseRomName) + if (Header.GetFieldValue(DatHeader.UseRomNameKey)) item.SetName(name); - else if (item.Machine != null) - item.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, name); + else if (item.GetFieldValue(DatItem.MachineKey) != null) + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, name); // Restore all relevant values if (forceRemoveQuotes) - Header.Quotes = quotesBackup; + Header.SetFieldValue(DatHeader.QuotesKey, quotesBackup); if (forceRomName) - Header.UseRomName = useRomNameBackup; + Header.SetFieldValue(DatHeader.UseRomNameKey, useRomNameBackup); } /// @@ -529,17 +531,13 @@ namespace SabreTools.DatFiles protected DatItem ProcessNullifiedItem(DatItem datItem) { // If we don't have a Rom, we can ignore it - if (datItem.ItemType != ItemType.Rom) - return datItem; - - // Cast for easier parsing if (datItem is not Rom rom) return datItem; // If the Rom has "null" characteristics, ensure all fields if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null && rom.GetFieldValue(Models.Metadata.Rom.CRCKey) == "null") { - logger.Verbose($"Empty folder found: {datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}"); + logger.Verbose($"Empty folder found: {datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}"); rom.SetName(rom.GetName() == "null" ? "-" : rom.GetName()); rom.SetFieldValue(Models.Metadata.Rom.SizeKey, Constants.SizeZero); @@ -584,7 +582,7 @@ namespace SabreTools.DatFiles foreach (DatItem datItem in datItems) { - if (GetSupportedTypes().Contains(datItem.ItemType)) + if (GetSupportedTypes().Contains(datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey))) return true; } @@ -607,7 +605,7 @@ namespace SabreTools.DatFiles } // If the item is supposed to be removed, we ignore - if (datItem.Remove) + if (datItem.GetFieldValue(DatItem.RemoveKey)) { string itemString = JsonConvert.SerializeObject(datItem, Formatting.None); logger?.Verbose($"Item '{itemString}' was skipped because it was marked for removal"); @@ -615,7 +613,7 @@ namespace SabreTools.DatFiles } // If we have the Blank dat item, we ignore - if (datItem.ItemType == ItemType.Blank) + if (datItem is Blank) { string itemString = JsonConvert.SerializeObject(datItem, Formatting.None); logger?.Verbose($"Item '{itemString}' was skipped because it was of type 'Blank'"); @@ -623,7 +621,7 @@ namespace SabreTools.DatFiles } // If we're ignoring blanks and we have a Rom - if (ignoreBlanks && datItem.ItemType == ItemType.Rom && datItem is Rom rom) + if (ignoreBlanks && datItem is Rom rom) { // If we have a 0-size or blank rom, then we ignore if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == 0 || rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null) @@ -635,7 +633,7 @@ namespace SabreTools.DatFiles } // If we have an item type not in the list of supported values - if (!GetSupportedTypes().Contains(datItem.ItemType)) + if (!GetSupportedTypes().Contains(datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey))) { string itemString = JsonConvert.SerializeObject(datItem, Formatting.None); logger?.Verbose($"Item '{itemString}' was skipped because it was not supported in {Header?.DatFormat}"); diff --git a/SabreTools.DatFiles/DatHeader.cs b/SabreTools.DatFiles/DatHeader.cs index bb2b00d5..1dd99af3 100644 --- a/SabreTools.DatFiles/DatHeader.cs +++ b/SabreTools.DatFiles/DatHeader.cs @@ -15,6 +15,50 @@ namespace SabreTools.DatFiles [JsonObject("header"), XmlRoot("header")] public class DatHeader : ICloneable { + #region Constants + + /// + /// Add a new extension to all items + /// + public const string AddExtensionKey = "ADDEXTENSION"; + + /// + /// Output the machine name + /// + public const string GameNameKey = "GAMENAME"; + + /// + /// Text to append to all outputted lines + /// + public const string PostfixKey = "POSTFIX"; + + /// + /// Text to prepend to all outputted lines + /// + public const string PrefixKey = "PREFIX"; + + /// + /// Wrap quotes around the entire line, sans prefix and postfix + /// + public const string QuotesKey = "QUOTES"; + + /// + /// Remove all item extensions + /// + public const string RemoveExtensionKey = "REMOVEEXTENSION"; + + /// + /// Replace all item extensions + /// + public const string ReplaceExtensionKey = "REPLACEEXTENSION"; + + /// + /// Output the item name + /// + public const string UseRomNameKey = "USEROMNAME"; + + #endregion + #region Fields /// @@ -50,58 +94,6 @@ namespace SabreTools.DatFiles } } - /// - /// Output the item name - /// - [JsonIgnore, XmlIgnore] - public bool UseRomName { get; set; } - - #region Write pre-processing - - /// - /// Text to prepend to all outputted lines - /// - [JsonIgnore, XmlIgnore] - public string? Prefix { get; set; } - - /// - /// Text to append to all outputted lines - /// - [JsonIgnore, XmlIgnore] - public string? Postfix { get; set; } - - /// - /// Add a new extension to all items - /// - [JsonIgnore, XmlIgnore] - public string? AddExtension { get; set; } - - /// - /// Replace all item extensions - /// - [JsonIgnore, XmlIgnore] - public string? ReplaceExtension { get; set; } - - /// - /// Remove all item extensions - /// - [JsonIgnore, XmlIgnore] - public bool RemoveExtension { get; set; } - - /// - /// Output the machine name - /// - [JsonIgnore, XmlIgnore] - public bool GameName { get; set; } - - /// - /// Wrap quotes around the entire line, sans prefix and postfix - /// - [JsonIgnore, XmlIgnore] - public bool Quotes { get; set; } - - #endregion - #region Depot Information /// @@ -178,14 +170,6 @@ namespace SabreTools.DatFiles FileName = this.FileName, DatFormat = this.DatFormat, - UseRomName = this.UseRomName, - Prefix = this.Prefix, - Postfix = this.Postfix, - Quotes = this.Quotes, - ReplaceExtension = this.ReplaceExtension, - AddExtension = this.AddExtension, - RemoveExtension = this.RemoveExtension, - GameName = this.GameName, InputDepot = this.InputDepot?.Clone() as DepotInformation, OutputDepot = this.OutputDepot?.Clone() as DepotInformation, }; @@ -223,6 +207,15 @@ namespace SabreTools.DatFiles header.SetFieldValue(Models.Metadata.Header.UrlKey, GetFieldValue(Models.Metadata.Header.UrlKey)); header.SetFieldValue(Models.Metadata.Header.VersionKey, GetFieldValue(Models.Metadata.Header.VersionKey)); + header.SetFieldValue(DatHeader.AddExtensionKey, GetFieldValue(DatHeader.AddExtensionKey)); + header.SetFieldValue(DatHeader.GameNameKey, GetFieldValue(DatHeader.GameNameKey)); + header.SetFieldValue(DatHeader.PostfixKey, GetFieldValue(DatHeader.PostfixKey)); + header.SetFieldValue(DatHeader.PrefixKey, GetFieldValue(DatHeader.PrefixKey)); + header.SetFieldValue(DatHeader.RemoveExtensionKey, GetFieldValue(DatHeader.RemoveExtensionKey)); + header.SetFieldValue(DatHeader.ReplaceExtensionKey, GetFieldValue(DatHeader.ReplaceExtensionKey)); + header.SetFieldValue(DatHeader.QuotesKey, GetFieldValue(DatHeader.QuotesKey)); + header.SetFieldValue(DatHeader.UseRomNameKey, GetFieldValue(DatHeader.UseRomNameKey)); + return header; } @@ -261,21 +254,23 @@ namespace SabreTools.DatFiles /// public DatHeader CloneFiltering() { - return new DatHeader() + var header = new DatHeader() { DatFormat = this.DatFormat, - UseRomName = this.UseRomName, - Prefix = this.Prefix, - Postfix = this.Postfix, - Quotes = this.Quotes, - ReplaceExtension = this.ReplaceExtension, - AddExtension = this.AddExtension, - RemoveExtension = this.RemoveExtension, - GameName = this.GameName, InputDepot = this.InputDepot?.Clone() as DepotInformation, OutputDepot = this.OutputDepot?.Clone() as DepotInformation, }; + header.SetFieldValue(DatHeader.AddExtensionKey, GetFieldValue(DatHeader.AddExtensionKey)); + header.SetFieldValue(DatHeader.GameNameKey, GetFieldValue(DatHeader.GameNameKey)); + header.SetFieldValue(DatHeader.PostfixKey, GetFieldValue(DatHeader.PostfixKey)); + header.SetFieldValue(DatHeader.PrefixKey, GetFieldValue(DatHeader.PrefixKey)); + header.SetFieldValue(DatHeader.RemoveExtensionKey, GetFieldValue(DatHeader.RemoveExtensionKey)); + header.SetFieldValue(DatHeader.ReplaceExtensionKey, GetFieldValue(DatHeader.ReplaceExtensionKey)); + header.SetFieldValue(DatHeader.QuotesKey, GetFieldValue(DatHeader.QuotesKey)); + header.SetFieldValue(DatHeader.UseRomNameKey, GetFieldValue(DatHeader.UseRomNameKey)); + + return header; } /// @@ -341,24 +336,24 @@ namespace SabreTools.DatFiles if (datHeader.DatFormat != 0x00) DatFormat = datHeader.DatFormat; - if (!string.IsNullOrEmpty(datHeader.Prefix)) - Prefix = datHeader.Prefix; + if (!string.IsNullOrEmpty(datHeader.GetFieldValue(DatHeader.PrefixKey))) + SetFieldValue(DatHeader.PrefixKey, datHeader.GetFieldValue(DatHeader.PrefixKey)); - if (!string.IsNullOrEmpty(datHeader.Postfix)) - Postfix = datHeader.Postfix; + if (!string.IsNullOrEmpty(datHeader.GetFieldValue(DatHeader.PostfixKey))) + SetFieldValue(DatHeader.PostfixKey, datHeader.GetFieldValue(DatHeader.PostfixKey)); - if (!string.IsNullOrEmpty(datHeader.AddExtension)) - AddExtension = datHeader.AddExtension; + if (!string.IsNullOrEmpty(datHeader.GetFieldValue(DatHeader.AddExtensionKey))) + SetFieldValue(DatHeader.AddExtensionKey, datHeader.GetFieldValue(DatHeader.AddExtensionKey)); - if (!string.IsNullOrEmpty(datHeader.ReplaceExtension)) - ReplaceExtension = datHeader.ReplaceExtension; + if (!string.IsNullOrEmpty(datHeader.GetFieldValue(DatHeader.ReplaceExtensionKey))) + SetFieldValue(DatHeader.ReplaceExtensionKey, datHeader.GetFieldValue(DatHeader.ReplaceExtensionKey)); - RemoveExtension = datHeader.RemoveExtension; InputDepot = datHeader.InputDepot?.Clone() as DepotInformation; OutputDepot = datHeader.OutputDepot?.Clone() as DepotInformation; - GameName = datHeader.GameName; - Quotes = datHeader.Quotes; - UseRomName = datHeader.UseRomName; + SetFieldValue(DatHeader.GameNameKey, datHeader.GetFieldValue(DatHeader.GameNameKey)); + SetFieldValue(DatHeader.QuotesKey, datHeader.GetFieldValue(DatHeader.QuotesKey)); + SetFieldValue(DatHeader.RemoveExtensionKey, datHeader.GetFieldValue(DatHeader.RemoveExtensionKey)); + SetFieldValue(DatHeader.UseRomNameKey, datHeader.GetFieldValue(DatHeader.UseRomNameKey)); } #endregion diff --git a/SabreTools.DatFiles/Formats/AttractMode.Writer.cs b/SabreTools.DatFiles/Formats/AttractMode.Writer.cs index 886cb77c..6a00cb26 100644 --- a/SabreTools.DatFiles/Formats/AttractMode.Writer.cs +++ b/SabreTools.DatFiles/Formats/AttractMode.Writer.cs @@ -124,23 +124,23 @@ namespace SabreTools.DatFiles.Formats { var row = new Models.AttractMode.Row { - Name = rom.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), - Title = rom.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey), + Name = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), + Title = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey), Emulator = Header.FileName, - CloneOf = rom.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey), - Year = rom.Machine.GetFieldValue(Models.Metadata.Machine.YearKey), - Manufacturer = rom.Machine.GetFieldValue(Models.Metadata.Machine.ManufacturerKey), - Category = rom.Machine.GetFieldValue(Models.Metadata.Machine.CategoryKey), - Players = rom.Machine.GetFieldValue(Models.Metadata.Machine.PlayersKey), - Rotation = rom.Machine.GetFieldValue(Models.Metadata.Machine.RotationKey), - Control = rom.Machine.GetFieldValue(Models.Metadata.Machine.ControlKey), - Status = rom.Machine.GetFieldValue(Models.Metadata.Machine.StatusKey), - DisplayCount = rom.Machine.GetFieldValue(Models.Metadata.Machine.DisplayCountKey), - DisplayType = rom.Machine.GetFieldValue(Models.Metadata.Machine.DisplayTypeKey), + 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), + Category = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CategoryKey), + Players = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.PlayersKey), + Rotation = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RotationKey), + Control = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.ControlKey), + Status = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.StatusKey), + DisplayCount = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DisplayCountKey), + DisplayType = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DisplayTypeKey), AltRomname = rom.GetFieldValue(Models.Metadata.Rom.AltRomnameKey), AltTitle = rom.GetFieldValue(Models.Metadata.Rom.AltTitleKey), - Extra = rom.Machine.GetFieldValue(Models.Metadata.Machine.CommentKey), - Buttons = rom.Machine.GetFieldValue(Models.Metadata.Machine.ButtonsKey), + Extra = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CommentKey), + Buttons = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.ButtonsKey), // TODO: Add extended fields }; return row; diff --git a/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs b/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs index c2dfcf0f..76387a05 100644 --- a/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs +++ b/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs @@ -227,7 +227,7 @@ namespace SabreTools.DatFiles.Formats continue; // Get the first item for game information - var machine = items[0].Machine; + var machine = items[0].GetFieldValue(DatItem.MachineKey); // We normalize to all "game" var game = new Models.ClrMamePro.Game diff --git a/SabreTools.DatFiles/Formats/DosCenter.Writer.cs b/SabreTools.DatFiles/Formats/DosCenter.Writer.cs index ba79349a..695b4b37 100644 --- a/SabreTools.DatFiles/Formats/DosCenter.Writer.cs +++ b/SabreTools.DatFiles/Formats/DosCenter.Writer.cs @@ -129,7 +129,7 @@ namespace SabreTools.DatFiles.Formats continue; // Get the first item for game information - var machine = items[0].Machine; + var machine = items[0].GetFieldValue(DatItem.MachineKey); // We re-add the missing parts of the game name var game = new Models.DosCenter.Game diff --git a/SabreTools.DatFiles/Formats/EverdriveSMDB.Writer.cs b/SabreTools.DatFiles/Formats/EverdriveSMDB.Writer.cs index 30d62e6b..af1c879e 100644 --- a/SabreTools.DatFiles/Formats/EverdriveSMDB.Writer.cs +++ b/SabreTools.DatFiles/Formats/EverdriveSMDB.Writer.cs @@ -139,7 +139,7 @@ namespace SabreTools.DatFiles.Formats var row = new Models.EverdriveSMDB.Row { SHA256 = rom.GetFieldValue(Models.Metadata.Rom.SHA256Key), - Name = $"{rom.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty}/{rom.GetName()}", + Name = $"{rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty}/{rom.GetName()}", SHA1 = rom.GetFieldValue(Models.Metadata.Rom.SHA1Key), MD5 = rom.GetFieldValue(Models.Metadata.Rom.MD5Key), CRC32 = rom.GetFieldValue(Models.Metadata.Rom.CRCKey), diff --git a/SabreTools.DatFiles/Formats/Hashfile.Writer.cs b/SabreTools.DatFiles/Formats/Hashfile.Writer.cs index bae10f50..1519a9d1 100644 --- a/SabreTools.DatFiles/Formats/Hashfile.Writer.cs +++ b/SabreTools.DatFiles/Formats/Hashfile.Writer.cs @@ -37,10 +37,10 @@ namespace SabreTools.DatFiles.Formats switch (_hash) { case Serialization.Hash.CRC: - switch (datItem.ItemType) + switch (datItem) { - case ItemType.Rom: - if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue(Models.Metadata.Rom.CRCKey))) + case Rom rom: + if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey))) missingFields.Add(Models.Metadata.Rom.CRCKey); break; default: @@ -49,18 +49,18 @@ namespace SabreTools.DatFiles.Formats } break; case Serialization.Hash.MD5: - switch (datItem.ItemType) + switch (datItem) { - case ItemType.Disk: - if (string.IsNullOrEmpty((datItem as Disk)?.GetFieldValue(Models.Metadata.Disk.MD5Key))) + case Disk disk: + if (string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key))) missingFields.Add(Models.Metadata.Disk.MD5Key); break; - case ItemType.Media: - if (string.IsNullOrEmpty((datItem as Media)?.GetFieldValue(Models.Metadata.Media.MD5Key))) + case Media medium: + if (string.IsNullOrEmpty(medium.GetFieldValue(Models.Metadata.Media.MD5Key))) missingFields.Add(Models.Metadata.Media.MD5Key); break; - case ItemType.Rom: - if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue(Models.Metadata.Rom.MD5Key))) + case Rom rom: + if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key))) missingFields.Add(Models.Metadata.Rom.MD5Key); break; default: @@ -69,18 +69,18 @@ namespace SabreTools.DatFiles.Formats } break; case Serialization.Hash.SHA1: - switch (datItem.ItemType) + switch (datItem) { - case ItemType.Disk: - if (string.IsNullOrEmpty((datItem as Disk)?.GetFieldValue(Models.Metadata.Disk.SHA1Key))) + case Disk disk: + if (string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key))) missingFields.Add(Models.Metadata.Disk.SHA1Key); break; - case ItemType.Media: - if (string.IsNullOrEmpty((datItem as Media)?.GetFieldValue(Models.Metadata.Media.SHA1Key))) + case Media medium: + if (string.IsNullOrEmpty(medium.GetFieldValue(Models.Metadata.Media.SHA1Key))) missingFields.Add(Models.Metadata.Media.SHA1Key); break; - case ItemType.Rom: - if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue(Models.Metadata.Rom.SHA1Key))) + case Rom rom: + if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key))) missingFields.Add(Models.Metadata.Rom.SHA1Key); break; default: @@ -89,14 +89,14 @@ namespace SabreTools.DatFiles.Formats } break; case Serialization.Hash.SHA256: - switch (datItem.ItemType) + switch (datItem) { - case ItemType.Media: - if (string.IsNullOrEmpty((datItem as Media)?.GetFieldValue(Models.Metadata.Media.SHA256Key))) + case Media medium: + if (string.IsNullOrEmpty(medium.GetFieldValue(Models.Metadata.Media.SHA256Key))) missingFields.Add(Models.Metadata.Media.SHA256Key); break; - case ItemType.Rom: - if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue(Models.Metadata.Rom.SHA256Key))) + case Rom rom: + if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA256Key))) missingFields.Add(Models.Metadata.Rom.SHA256Key); break; default: @@ -105,10 +105,10 @@ namespace SabreTools.DatFiles.Formats } break; case Serialization.Hash.SHA384: - switch (datItem.ItemType) + switch (datItem) { - case ItemType.Rom: - if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue(Models.Metadata.Rom.SHA384Key))) + case Rom rom: + if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA384Key))) missingFields.Add(Models.Metadata.Rom.SHA384Key); break; default: @@ -117,10 +117,10 @@ namespace SabreTools.DatFiles.Formats } break; case Serialization.Hash.SHA512: - switch (datItem.ItemType) + switch (datItem) { - case ItemType.Rom: - if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue(Models.Metadata.Rom.SHA512Key))) + case Rom rom: + if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA512Key))) missingFields.Add(Models.Metadata.Rom.SHA512Key); break; default: @@ -129,14 +129,14 @@ namespace SabreTools.DatFiles.Formats } break; case Serialization.Hash.SpamSum: - switch (datItem.ItemType) + switch (datItem) { - case ItemType.Media: - if (string.IsNullOrEmpty((datItem as Media)?.GetFieldValue(Models.Metadata.Media.SpamSumKey))) + case Media medium: + if (string.IsNullOrEmpty(medium.GetFieldValue(Models.Metadata.Media.SpamSumKey))) missingFields.Add(Models.Metadata.Media.SpamSumKey); break; - case ItemType.Rom: - if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue(Models.Metadata.Rom.SpamSumKey))) + case Rom rom: + if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SpamSumKey))) missingFields.Add(Models.Metadata.Rom.SpamSumKey); break; default: @@ -243,8 +243,8 @@ namespace SabreTools.DatFiles.Formats continue; string name = string.Empty; - if (Header.GameName && item.Machine != null) - name = $"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; + if (Header.GetFieldValue(DatHeader.GameNameKey) && item.GetFieldValue(DatItem.MachineKey) != null) + name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { @@ -294,8 +294,8 @@ namespace SabreTools.DatFiles.Formats continue; string name = string.Empty; - if (Header.GameName && item.Machine != null) - name = $"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; + if (Header.GetFieldValue(DatHeader.GameNameKey) && item.GetFieldValue(DatItem.MachineKey) != null) + name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { @@ -361,8 +361,8 @@ namespace SabreTools.DatFiles.Formats continue; string name = string.Empty; - if (Header.GameName && item.Machine != null) - name = $"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; + if (Header.GetFieldValue(DatHeader.GameNameKey) && item.GetFieldValue(DatItem.MachineKey) != null) + name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { @@ -428,8 +428,8 @@ namespace SabreTools.DatFiles.Formats continue; string name = string.Empty; - if (Header.GameName && item.Machine != null) - name = $"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; + if (Header.GetFieldValue(DatHeader.GameNameKey) && item.GetFieldValue(DatItem.MachineKey) != null) + name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { @@ -487,8 +487,8 @@ namespace SabreTools.DatFiles.Formats continue; string name = string.Empty; - if (Header.GameName && item.Machine != null) - name = $"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; + if (Header.GetFieldValue(DatHeader.GameNameKey) && item.GetFieldValue(DatItem.MachineKey) != null) + name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { @@ -538,8 +538,8 @@ namespace SabreTools.DatFiles.Formats continue; string name = string.Empty; - if (Header.GameName && item.Machine != null) - name = $"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; + if (Header.GetFieldValue(DatHeader.GameNameKey) && item.GetFieldValue(DatItem.MachineKey) != null) + name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { @@ -589,8 +589,8 @@ namespace SabreTools.DatFiles.Formats continue; string name = string.Empty; - if (Header.GameName && item.Machine != null) - name = $"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; + if (Header.GetFieldValue(DatHeader.GameNameKey) && item.GetFieldValue(DatItem.MachineKey) != null) + name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { diff --git a/SabreTools.DatFiles/Formats/Listrom.Reader.cs b/SabreTools.DatFiles/Formats/Listrom.Reader.cs index fc521cf2..8afc95d3 100644 --- a/SabreTools.DatFiles/Formats/Listrom.Reader.cs +++ b/SabreTools.DatFiles/Formats/Listrom.Reader.cs @@ -109,12 +109,10 @@ namespace SabreTools.DatFiles.Formats && (!string.IsNullOrEmpty(row.MD5) || !string.IsNullOrEmpty(row.SHA1))) { - var disk = new Disk - { - Source = new Source { Index = indexId, Name = filename }, - }; + var disk = new Disk(); disk.SetName(row.Name); disk.SetFieldValue(Models.Metadata.Disk.StatusKey, ItemStatus.None); + disk.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); if (!string.IsNullOrEmpty(row.MD5)) disk.SetFieldValue(Models.Metadata.Disk.MD5Key, row.MD5); @@ -131,14 +129,12 @@ namespace SabreTools.DatFiles.Formats && !row.NoGoodDumpKnown && !row.Bad) { - var rom = new Rom - { - Source = new Source { Index = indexId, Name = filename }, - }; + var rom = new Rom(); rom.SetName(row.Name); rom.SetFieldValue(Models.Metadata.Rom.CRCKey, row.CRC); rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, row.SHA1); rom.SetFieldValue(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size)); + rom.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); rom.SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.None); // Now process and add the item @@ -153,12 +149,10 @@ namespace SabreTools.DatFiles.Formats && (!string.IsNullOrEmpty(row.MD5) || !string.IsNullOrEmpty(row.SHA1))) { - var disk = new Disk - { - Source = new Source { Index = indexId, Name = filename }, - }; + var disk = new Disk(); disk.SetName(row.Name); disk.SetFieldValue(Models.Metadata.Disk.StatusKey, value: ItemStatus.BadDump); + disk.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); if (!string.IsNullOrEmpty(row.MD5)) disk.SetFieldValue(Models.Metadata.Disk.MD5Key, row.MD5); @@ -174,13 +168,11 @@ namespace SabreTools.DatFiles.Formats else if (row.Size == null && row.NoGoodDumpKnown) { - var disk = new Disk - { - Source = new Source { Index = indexId, Name = filename }, - }; + var disk = new Disk(); disk.SetName(row.Name); disk.SetFieldValue(Models.Metadata.Disk.MD5Key, null); disk.SetFieldValue(Models.Metadata.Disk.SHA1Key, null); + disk.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); disk.SetFieldValue(Models.Metadata.Disk.StatusKey, ItemStatus.Nodump); // Now process and add the item @@ -193,14 +185,12 @@ namespace SabreTools.DatFiles.Formats && !row.NoGoodDumpKnown && row.Bad) { - var rom = new Rom - { - Source = new Source { Index = indexId, Name = filename }, - }; + var rom = new Rom(); rom.SetName(row.Name); rom.SetFieldValue(Models.Metadata.Rom.CRCKey, row.CRC); rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, row.SHA1); rom.SetFieldValue(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size)); + rom.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); rom.SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.BadDump); // Now process and add the item @@ -212,14 +202,12 @@ namespace SabreTools.DatFiles.Formats else if (row.Size != null && row.NoGoodDumpKnown) { - var rom = new Rom - { - Source = new Source { Index = indexId, Name = filename }, - }; + var rom = new Rom(); rom.SetName(row.Name); rom.SetFieldValue(Models.Metadata.Rom.CRCKey, null); rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, null); rom.SetFieldValue(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size)); + rom.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); rom.SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.Nodump); // Now process and add the item diff --git a/SabreTools.DatFiles/Formats/Listrom.Writer.cs b/SabreTools.DatFiles/Formats/Listrom.Writer.cs index c029018f..12a3d7fb 100644 --- a/SabreTools.DatFiles/Formats/Listrom.Writer.cs +++ b/SabreTools.DatFiles/Formats/Listrom.Writer.cs @@ -116,8 +116,12 @@ namespace SabreTools.DatFiles.Formats var set = new Models.Listrom.Set { - Driver = items[0]!.Machine!.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true ? items[0]!.Machine!.GetFieldValue(Models.Metadata.Machine.NameKey) : null, - Device = items[0]!.Machine!.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true ? items[0]!.Machine!.GetFieldValue(Models.Metadata.Machine.NameKey) : null, + Driver = items[0]!.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true + ? items[0]!.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) + : null, + Device = items[0]!.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true + ? items[0]!.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) + : null, }; // Loop through and convert the items to respective lists diff --git a/SabreTools.DatFiles/Formats/Listxml.Reader.cs b/SabreTools.DatFiles/Formats/Listxml.Reader.cs index 4dd87e86..afda3757 100644 --- a/SabreTools.DatFiles/Formats/Listxml.Reader.cs +++ b/SabreTools.DatFiles/Formats/Listxml.Reader.cs @@ -144,10 +144,8 @@ namespace SabreTools.DatFiles.Formats // If we had no items, create a Blank placeholder if (!containsItems) { - var blank = new Blank - { - Source = new Source { Index = indexId, Name = filename }, - }; + var blank = new Blank(); + blank.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); blank.CopyMachineInformation(machine); ParseAddHelper(blank, statsOnly); @@ -172,13 +170,11 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var biosset in biossets) { - var item = new BiosSet - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new BiosSet(); item.SetName(biosset.Name); item.SetFieldValue(Models.Metadata.BiosSet.DefaultKey, biosset.Default?.AsYesNo()); item.SetFieldValue(Models.Metadata.BiosSet.DescriptionKey, biosset.Description); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.CopyMachineInformation(machine); ParseAddHelper(item, statsOnly); @@ -203,10 +199,7 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var rom in roms) { - var item = new Rom - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Rom(); item.SetName(rom.Name); item.SetFieldValue(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(rom.Size)); item.SetFieldValue(Models.Metadata.Rom.BiosKey, rom.Bios); @@ -218,6 +211,7 @@ namespace SabreTools.DatFiles.Formats item.SetFieldValue(Models.Metadata.Rom.RegionKey, rom.Region); item.SetFieldValue(Models.Metadata.Rom.SHA1Key, rom.SHA1); item.SetFieldValue(Models.Metadata.Rom.SoundOnlyKey, rom.SoundOnly.AsYesNo()); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.Rom.StatusKey, rom.Status.AsEnumValue()); item.CopyMachineInformation(machine); @@ -243,10 +237,7 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var disk in disks) { - var item = new Disk - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Disk(); item.SetName(disk.Name); item.SetFieldValue(Models.Metadata.Disk.IndexKey, disk.Index); item.SetFieldValue(Models.Metadata.Disk.StatusKey, disk.Status?.AsEnumValue() ?? ItemStatus.NULL); @@ -255,6 +246,7 @@ namespace SabreTools.DatFiles.Formats item.SetFieldValue(Models.Metadata.Disk.OptionalKey, disk.Optional.AsYesNo()); item.SetFieldValue(Models.Metadata.Disk.RegionKey, disk.Region); item.SetFieldValue(Models.Metadata.Disk.SHA1Key, disk.SHA1); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.Disk.WritableKey, disk.Writable.AsYesNo()); item.CopyMachineInformation(machine); @@ -280,11 +272,9 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var deviceref in devicerefs) { - var item = new DeviceReference - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new DeviceReference(); item.SetName(deviceref.Name); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.CopyMachineInformation(machine); ParseAddHelper(item, statsOnly); @@ -309,11 +299,9 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var sample in samples) { - var item = new Sample - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Sample(); item.SetName(sample.Name); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.CopyMachineInformation(machine); ParseAddHelper(item, statsOnly); @@ -338,14 +326,12 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var chip in chips) { - var item = new Chip - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Chip(); item.SetName(chip.Name); item.SetFieldValue(Models.Metadata.Chip.ChipTypeKey, chip.Type.AsEnumValue()); item.SetFieldValue(Models.Metadata.Chip.ClockKey, NumberHelper.ConvertToInt64(chip.Clock)); - item.SetFieldValue(Models.Metadata.Chip.SoundOnlyKey, chip.Type.AsYesNo()); + item.SetFieldValue(Models.Metadata.Chip.SoundOnlyKey, chip.SoundOnly.AsYesNo()); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.Chip.TagKey, chip.Tag); item.CopyMachineInformation(machine); @@ -371,10 +357,7 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var display in displays) { - var item = new Display - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Display(); item.SetFieldValue(Models.Metadata.Display.DisplayTypeKey, display.Type.AsEnumValue()); item.SetFieldValue(Models.Metadata.Display.FlipXKey, display.FlipX.AsYesNo()); item.SetFieldValue(Models.Metadata.Display.HBEndKey, NumberHelper.ConvertToInt64(display.HBEnd)); @@ -384,6 +367,7 @@ namespace SabreTools.DatFiles.Formats item.SetFieldValue(Models.Metadata.Display.PixClockKey, NumberHelper.ConvertToInt64(display.PixClock)); item.SetFieldValue(Models.Metadata.Display.RefreshKey, NumberHelper.ConvertToDouble(display.Refresh)); item.SetFieldValue(Models.Metadata.Display.RotateKey, NumberHelper.ConvertToInt64(display.Rotate)); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.Display.TagKey, display.Tag); item.SetFieldValue(Models.Metadata.Display.VBEndKey, NumberHelper.ConvertToInt64(display.VBEnd)); item.SetFieldValue(Models.Metadata.Display.VBStartKey, NumberHelper.ConvertToInt64(display.VBStart)); @@ -413,15 +397,13 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var video in videos) { - var item = new Display - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Display(); item.SetFieldValue("ASPECTX", NumberHelper.ConvertToInt64(video.AspectX)); item.SetFieldValue("ASPECTY", NumberHelper.ConvertToInt64(video.AspectY)); item.SetFieldValue(Models.Metadata.Display.DisplayTypeKey, video.Screen?.AsEnumValue() ?? DisplayType.NULL); item.SetFieldValue(Models.Metadata.Display.HeightKey, NumberHelper.ConvertToInt64(video.Height)); item.SetFieldValue(Models.Metadata.Display.RefreshKey, NumberHelper.ConvertToDouble(video.Refresh)); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.Display.WidthKey, NumberHelper.ConvertToInt64(video.Width)); switch (video.Orientation) @@ -455,11 +437,9 @@ namespace SabreTools.DatFiles.Formats return; containsItems = true; - var item = new Sound - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Sound(); item.SetFieldValue(Models.Metadata.Sound.ChannelsKey, NumberHelper.ConvertToInt64(sound.Channels)); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.CopyMachineInformation(machine); ParseAddHelper(item, statsOnly); @@ -481,15 +461,13 @@ namespace SabreTools.DatFiles.Formats return; containsItems = true; - var item = new Input - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Input(); item.SetFieldValue(Models.Metadata.Input.ButtonsKey, NumberHelper.ConvertToInt64(input.Buttons)); item.SetFieldValue(Models.Metadata.Input.CoinsKey, NumberHelper.ConvertToInt64(input.Coins)); //item.SetFieldValue(Models.Metadata.Input.ControlKey, input.ControlAttr); item.SetFieldValue(Models.Metadata.Input.PlayersKey, NumberHelper.ConvertToInt64(input.Players)); item.SetFieldValue(Models.Metadata.Input.ServiceKey, input.Service?.AsYesNo()); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.Input.TiltKey, input.Tilt?.AsYesNo()); var controls = new List(); @@ -537,12 +515,10 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var dipswitch in dipswitches) { - var item = new DipSwitch - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new DipSwitch(); item.SetName(dipswitch.Name); item.SetFieldValue(Models.Metadata.DipSwitch.MaskKey, dipswitch.Mask); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.DipSwitch.TagKey, dipswitch.Tag); if (dipswitch.Condition != null) @@ -618,12 +594,10 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var configuration in configurations) { - var item = new Configuration - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Configuration(); item.SetName(configuration.Name); item.SetFieldValue(Models.Metadata.Configuration.MaskKey, configuration.Mask); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.Configuration.TagKey, configuration.Tag); if (configuration.Condition != null) @@ -699,10 +673,8 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var port in ports) { - var item = new Port - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Port(); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.Port.TagKey, port.Tag); var analogs = new List(); @@ -740,12 +712,10 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var adjuster in adjusters) { - var item = new Adjuster - { - Source = new Source { Index = indexId, Name = filename } - }; + var item = new Adjuster(); item.SetName(adjuster.Name); item.SetFieldValue(Models.Metadata.Adjuster.DefaultKey, adjuster.Default.AsYesNo()); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); if (adjuster.Condition != null) { @@ -779,10 +749,7 @@ namespace SabreTools.DatFiles.Formats return; containsItems = true; - var item = new Driver - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Driver(); item.SetFieldValue(Models.Metadata.Driver.CocktailKey, driver.Cocktail?.AsEnumValue() ?? SupportStatus.NULL); item.SetFieldValue(Models.Metadata.Driver.ColorKey, driver.Color?.AsEnumValue() ?? SupportStatus.NULL); item.SetFieldValue(Models.Metadata.Driver.EmulationKey, driver.Emulation?.AsEnumValue() ?? SupportStatus.NULL); @@ -792,6 +759,7 @@ namespace SabreTools.DatFiles.Formats item.SetFieldValue(Models.Metadata.Driver.RequiresArtworkKey, driver.RequiresArtwork.AsYesNo()); item.SetFieldValue(Models.Metadata.Driver.SaveStateKey, driver.SaveState?.AsEnumValue() ?? Supported.NULL); item.SetFieldValue(Models.Metadata.Driver.SoundKey, driver.Sound?.AsEnumValue() ?? SupportStatus.NULL); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.Driver.StatusKey, driver.Status?.AsEnumValue() ?? SupportStatus.NULL); item.SetFieldValue(Models.Metadata.Driver.UnofficialKey, driver.Unofficial.AsYesNo()); @@ -817,12 +785,10 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var feature in features) { - var item = new Feature - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Feature(); item.SetFieldValue(Models.Metadata.Feature.FeatureTypeKey, feature.Type.AsEnumValue()); item.SetFieldValue(Models.Metadata.Feature.OverallKey, feature.Overall.AsEnumValue()); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.Feature.StatusKey, feature.Status.AsEnumValue()); item.CopyMachineInformation(machine); @@ -848,14 +814,12 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var device in devices) { - var item = new Device - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Device(); item.SetFieldValue(Models.Metadata.Device.DeviceTypeKey, device.Type.AsEnumValue()); item.SetFieldValue(Models.Metadata.Device.FixedImageKey, device.FixedImage); item.SetFieldValue(Models.Metadata.Device.InterfaceKey, device.Interface); item.SetFieldValue(Models.Metadata.Device.MandatoryKey, NumberHelper.ConvertToInt64(device.Mandatory)); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.Device.TagKey, device.Tag); if (device.Instance != null) @@ -902,11 +866,9 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var slot in slots) { - var item = new Slot - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Slot(); item.SetName(slot.Name); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); var slotoptions = new List(); foreach (var slotoption in slot.SlotOption ?? []) @@ -945,12 +907,10 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var softwarelist in softwarelists) { - var item = new DatItems.Formats.SoftwareList - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new DatItems.Formats.SoftwareList(); item.SetName(softwarelist.Name); item.SetFieldValue(Models.Metadata.SoftwareList.FilterKey, softwarelist.Filter); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.SoftwareList.StatusKey, softwarelist.Status.AsEnumValue()); item.SetFieldValue(Models.Metadata.SoftwareList.TagKey, softwarelist.Tag); @@ -977,13 +937,11 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var ramoption in ramoptions) { - var item = new RamOption - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new RamOption(); item.SetName(ramoption.Name); item.SetFieldValue(Models.Metadata.RamOption.ContentKey, ramoption.Content); item.SetFieldValue(Models.Metadata.RamOption.DefaultKey, ramoption.Default.AsYesNo()); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.CopyMachineInformation(machine); ParseAddHelper(item, statsOnly); diff --git a/SabreTools.DatFiles/Formats/Listxml.Writer.cs b/SabreTools.DatFiles/Formats/Listxml.Writer.cs index 0dee638a..c2e67802 100644 --- a/SabreTools.DatFiles/Formats/Listxml.Writer.cs +++ b/SabreTools.DatFiles/Formats/Listxml.Writer.cs @@ -245,7 +245,7 @@ namespace SabreTools.DatFiles.Formats continue; // Get the first item for game information - var machine = items[0].Machine; + var machine = items[0].GetFieldValue(DatItem.MachineKey); var game = Listxml.CreateGame(machine!); // Create holders for all item types diff --git a/SabreTools.DatFiles/Formats/Logiqx.Writer.cs b/SabreTools.DatFiles/Formats/Logiqx.Writer.cs index a9548419..0ebb0b99 100644 --- a/SabreTools.DatFiles/Formats/Logiqx.Writer.cs +++ b/SabreTools.DatFiles/Formats/Logiqx.Writer.cs @@ -302,7 +302,7 @@ namespace SabreTools.DatFiles.Formats continue; // Get the first item for game information - var machine = items[0].Machine; + var machine = items[0].GetFieldValue(DatItem.MachineKey); var game = CreateGame(machine!); // Create holders for all item types diff --git a/SabreTools.DatFiles/Formats/Missfile.Writer.cs b/SabreTools.DatFiles/Formats/Missfile.Writer.cs index 6c320980..76d230a9 100644 --- a/SabreTools.DatFiles/Formats/Missfile.Writer.cs +++ b/SabreTools.DatFiles/Formats/Missfile.Writer.cs @@ -59,11 +59,11 @@ namespace SabreTools.DatFiles.Formats datItem = ProcessNullifiedItem(datItem); // Write out the item if we're using machine names or we're not ignoring - if (!Header.UseRomName || !ShouldIgnore(datItem, ignoreblanks)) + if (!Header.GetFieldValue(DatHeader.UseRomNameKey) || !ShouldIgnore(datItem, ignoreblanks)) WriteDatItem(sw, datItem, lastgame); // Set the new data to compare against - lastgame = datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey); + lastgame = datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey); } } @@ -92,10 +92,10 @@ namespace SabreTools.DatFiles.Formats ProcessItemName(datItem, false, forceRomName: false); // Romba mode automatically uses item name - if (Header.OutputDepot?.IsActive == true || Header.UseRomName) + if (Header.OutputDepot?.IsActive == true || Header.GetFieldValue(DatHeader.UseRomNameKey)) sw.Write($"{datItem.GetName() ?? string.Empty}\n"); - else if (!Header.UseRomName && datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) != lastgame) - sw.Write($"{datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty}\n"); + else if (!Header.GetFieldValue(DatHeader.UseRomNameKey) && datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) != lastgame) + sw.Write($"{datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty}\n"); sw.Flush(); } diff --git a/SabreTools.DatFiles/Formats/OfflineList.Writer.cs b/SabreTools.DatFiles/Formats/OfflineList.Writer.cs index 6de36778..9ba4988f 100644 --- a/SabreTools.DatFiles/Formats/OfflineList.Writer.cs +++ b/SabreTools.DatFiles/Formats/OfflineList.Writer.cs @@ -319,7 +319,7 @@ namespace SabreTools.DatFiles.Formats continue; // Get the first item for game information - var machine = items[0].Machine; + var machine = items[0].GetFieldValue(DatItem.MachineKey); var game = OfflineList.CreateGame(machine!); // Create holders for all item types diff --git a/SabreTools.DatFiles/Formats/OpenMSX.Reader.cs b/SabreTools.DatFiles/Formats/OpenMSX.Reader.cs index fdf518c8..bf5006c2 100644 --- a/SabreTools.DatFiles/Formats/OpenMSX.Reader.cs +++ b/SabreTools.DatFiles/Formats/OpenMSX.Reader.cs @@ -102,10 +102,8 @@ namespace SabreTools.DatFiles.Formats // If we had no items, create a Blank placeholder if (!containsItems) { - var blank = new Blank - { - Source = new Source { Index = indexId, Name = filename }, - }; + var blank = new Blank(); + blank.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); blank.CopyMachineInformation(machine); ParseAddHelper(blank, statsOnly); @@ -138,15 +136,13 @@ namespace SabreTools.DatFiles.Formats var rom = dump.Rom; string name = $"{machine.GetFieldValue(Models.Metadata.Machine.NameKey)}_{index++}{(!string.IsNullOrEmpty(rom.Remark) ? $" {rom.Remark}" : string.Empty)}"; - var item = new Rom - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Rom(); item.SetName(name); item.SetFieldValue(Models.Metadata.Rom.OffsetKey, dump.Rom?.Start); item.SetFieldValue(Models.Metadata.Rom.OpenMSXType, rom.Type); item.SetFieldValue(Models.Metadata.Rom.RemarkKey, rom.Remark); item.SetFieldValue(Models.Metadata.Rom.SHA1Key, rom.Hash); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); if (dump.Original != null) { diff --git a/SabreTools.DatFiles/Formats/OpenMSX.Writer.cs b/SabreTools.DatFiles/Formats/OpenMSX.Writer.cs index a6b34258..dff46707 100644 --- a/SabreTools.DatFiles/Formats/OpenMSX.Writer.cs +++ b/SabreTools.DatFiles/Formats/OpenMSX.Writer.cs @@ -103,7 +103,7 @@ namespace SabreTools.DatFiles.Formats continue; // Get the first item for game information - var machine = items[0].Machine; + var machine = items[0].GetFieldValue(DatItem.MachineKey); var software = new Models.OpenMSX.Software { Title = machine?.GetFieldValue(Models.Metadata.Machine.NameKey), diff --git a/SabreTools.DatFiles/Formats/RomCenter.Writer.cs b/SabreTools.DatFiles/Formats/RomCenter.Writer.cs index 73ac583a..6b0d57a7 100644 --- a/SabreTools.DatFiles/Formats/RomCenter.Writer.cs +++ b/SabreTools.DatFiles/Formats/RomCenter.Writer.cs @@ -183,14 +183,14 @@ namespace SabreTools.DatFiles.Formats { var rom = new Models.RomCenter.Rom { - ParentName = item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey), - //ParentDescription = item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfDescription), // TODO: Add to internal model or find mapping - GameName = item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), - GameDescription = item.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey), + ParentName = item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey), + //ParentDescription = item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfDescription), // TODO: Add to internal model or find mapping + GameName = item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), + GameDescription = item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey), RomName = item.GetName(), RomCRC = item.GetFieldValue(Models.Metadata.Rom.CRCKey), RomSize = item.GetFieldValue(Models.Metadata.Rom.SizeKey)?.ToString(), - RomOf = item.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey), + RomOf = item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey), MergeName = item.GetFieldValue(Models.Metadata.Rom.MergeKey), }; return rom; diff --git a/SabreTools.DatFiles/Formats/SabreJSON.cs b/SabreTools.DatFiles/Formats/SabreJSON.cs index bc488b81..066caa4d 100644 --- a/SabreTools.DatFiles/Formats/SabreJSON.cs +++ b/SabreTools.DatFiles/Formats/SabreJSON.cs @@ -344,7 +344,7 @@ namespace SabreTools.DatFiles.Formats if (datItem != null) { datItem.CopyMachineInformation(machine); - datItem.Source = new Source { Index = indexId, Name = filename }; + datItem.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); ParseAddHelper(datItem, statsOnly); } } @@ -395,11 +395,11 @@ namespace SabreTools.DatFiles.Formats DatItem datItem = datItems[index]; // If we have a different game and we're not at the start of the list, output the end of last item - if (lastgame != null && lastgame.ToLowerInvariant() != datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant()) + if (lastgame != null && lastgame.ToLowerInvariant() != datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant()) SabreJSON.WriteEndGame(jtw); // If we have a new game, output the beginning of the new item - if (lastgame == null || lastgame.ToLowerInvariant() != datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant()) + if (lastgame == null || lastgame.ToLowerInvariant() != datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant()) SabreJSON.WriteStartGame(jtw, datItem); // Check for a "null" item @@ -410,7 +410,7 @@ namespace SabreTools.DatFiles.Formats WriteDatItem(jtw, datItem); // Set the new data to compare against - lastgame = datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey); + lastgame = datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey); } } @@ -457,8 +457,8 @@ namespace SabreTools.DatFiles.Formats private static void WriteStartGame(JsonTextWriter jtw, DatItem datItem) { // No game should start with a path separator - if (!string.IsNullOrEmpty(datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey))) - datItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!.TrimStart(Path.DirectorySeparatorChar)); + if (!string.IsNullOrEmpty(datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey))) + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!.TrimStart(Path.DirectorySeparatorChar)); // Build the state jtw.WriteStartObject(); @@ -466,7 +466,7 @@ namespace SabreTools.DatFiles.Formats // Write the Machine jtw.WritePropertyName("machine"); JsonSerializer js = new() { Formatting = Formatting.Indented }; - js.Serialize(jtw, datItem.Machine); + js.Serialize(jtw, datItem.GetFieldValue(DatItem.MachineKey)!); jtw.WritePropertyName("items"); jtw.WriteStartArray(); diff --git a/SabreTools.DatFiles/Formats/SabreXML.cs b/SabreTools.DatFiles/Formats/SabreXML.cs index 02b99b11..018dbd45 100644 --- a/SabreTools.DatFiles/Formats/SabreXML.cs +++ b/SabreTools.DatFiles/Formats/SabreXML.cs @@ -170,7 +170,7 @@ namespace SabreTools.DatFiles.Formats if (xs.Deserialize(xtr.ReadSubtree()) is DatItem item) { item.CopyMachineInformation(machine); - item.Source = new Source { Name = filename, Index = indexId }; + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); ParseAddHelper(item, statsOnly); } xtr.Skip(); @@ -227,11 +227,11 @@ namespace SabreTools.DatFiles.Formats DatItem datItem = datItems[index]; // If we have a different game and we're not at the start of the list, output the end of last item - if (lastgame != null && lastgame.ToLowerInvariant() != datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant()) + if (lastgame != null && lastgame.ToLowerInvariant() != datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant()) WriteEndGame(xtw); // If we have a new game, output the beginning of the new item - if (lastgame == null || lastgame.ToLowerInvariant() != datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant()) + if (lastgame == null || lastgame.ToLowerInvariant() != datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant()) WriteStartGame(xtw, datItem); // Check for a "null" item @@ -242,7 +242,7 @@ namespace SabreTools.DatFiles.Formats WriteDatItem(xtw, datItem); // Set the new data to compare against - lastgame = datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey); + lastgame = datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey); } } @@ -292,14 +292,14 @@ namespace SabreTools.DatFiles.Formats private static void WriteStartGame(XmlTextWriter xtw, DatItem datItem) { // No game should start with a path separator - datItem.Machine!.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)?.TrimStart(Path.DirectorySeparatorChar) ?? string.Empty); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)?.TrimStart(Path.DirectorySeparatorChar) ?? string.Empty); // Write the machine xtw.WriteStartElement("directory"); XmlSerializer xs = new(typeof(Machine)); XmlSerializerNamespaces ns = new(); ns.Add("", ""); - xs.Serialize(xtw, datItem.Machine, ns); + xs.Serialize(xtw, datItem.GetFieldValue(DatItem.MachineKey), ns); xtw.WriteStartElement("files"); diff --git a/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs b/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs index ffeefb35..cb14de42 100644 --- a/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs +++ b/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs @@ -162,9 +162,9 @@ namespace SabreTools.DatFiles.Formats FileName = Header.FileName, InternalName = Header.GetFieldValue(Models.Metadata.Header.NameKey), Description = Header.GetFieldValue(Models.Metadata.Header.DescriptionKey), - GameName = disk.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), - GameDescription = disk.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey), - Type = disk.GetFieldValue(Models.Metadata.Disk.TypeKey).AsStringValue(), + GameName = disk.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), + GameDescription = disk.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey), + Type = disk.GetFieldValue(Models.Metadata.DatItem.TypeKey).AsStringValue(), RomName = string.Empty, DiskName = disk.GetName(), Size = string.Empty, @@ -190,9 +190,9 @@ namespace SabreTools.DatFiles.Formats FileName = Header.FileName, InternalName = Header.GetFieldValue(Models.Metadata.Header.NameKey), Description = Header.GetFieldValue(Models.Metadata.Header.DescriptionKey), - GameName = media.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), - GameDescription = media.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey), - Type = media.ItemType.AsStringValue(), + GameName = media.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), + GameDescription = media.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey), + Type = media.GetFieldValue(Models.Metadata.DatItem.TypeKey).AsStringValue(), RomName = string.Empty, DiskName = media.GetName(), Size = string.Empty, @@ -218,9 +218,9 @@ namespace SabreTools.DatFiles.Formats FileName = Header.FileName, InternalName = Header.GetFieldValue(Models.Metadata.Header.NameKey), Description = Header.GetFieldValue(Models.Metadata.Header.DescriptionKey), - GameName = rom.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), - GameDescription = rom.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey), - Type = rom.ItemType.AsStringValue(), + GameName = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), + GameDescription = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey), + Type = rom.GetFieldValue(Models.Metadata.DatItem.TypeKey).AsStringValue(), RomName = rom.GetName(), DiskName = string.Empty, Size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey)?.ToString(), diff --git a/SabreTools.DatFiles/Formats/SoftwareList.Reader.cs b/SabreTools.DatFiles/Formats/SoftwareList.Reader.cs index febd1a06..c738adde 100644 --- a/SabreTools.DatFiles/Formats/SoftwareList.Reader.cs +++ b/SabreTools.DatFiles/Formats/SoftwareList.Reader.cs @@ -108,11 +108,9 @@ namespace SabreTools.DatFiles.Formats // Add all Info objects foreach (var info in software.Info ?? []) { - var infoItem = new Info - { - Source = new Source { Index = indexId, Name = filename }, - }; + var infoItem = new Info(); infoItem.SetName(info.Name); + infoItem.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); infoItem.SetFieldValue(Models.Metadata.Info.ValueKey, info.Value); infoItem.CopyMachineInformation(machine); @@ -122,11 +120,9 @@ namespace SabreTools.DatFiles.Formats // Add all SharedFeat objects foreach (var sharedfeat in software.SharedFeat ?? []) { - var sharedfeatItem = new SharedFeature - { - Source = new Source { Index = indexId, Name = filename }, - }; + var sharedfeatItem = new SharedFeature(); sharedfeatItem.SetName(sharedfeat.Name); + sharedfeatItem.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); sharedfeatItem.SetFieldValue(Models.Metadata.SharedFeat.ValueKey, sharedfeat.Value); sharedfeatItem.CopyMachineInformation(machine); @@ -142,10 +138,8 @@ namespace SabreTools.DatFiles.Formats // If we had no items, create a Blank placeholder if (!containsItems) { - var blank = new Blank - { - Source = new Source { Index = indexId, Name = filename }, - }; + var blank = new Blank(); + blank.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); blank.CopyMachineInformation(machine); ParseAddHelper(blank, statsOnly); @@ -169,13 +163,11 @@ namespace SabreTools.DatFiles.Formats foreach (var part in parts) { - var item = new Part - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Part(); item.SetName(part.Name); item.SetFieldValue(Models.Metadata.Part.InterfaceKey, part.Interface); item.SetFieldValue(Models.Metadata.Part.FeatureKey, CreateFeatures(part.Feature, machine, filename, indexId, statsOnly)); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.CopyMachineInformation(machine); @@ -202,11 +194,9 @@ namespace SabreTools.DatFiles.Formats var partFeatures = new List(); foreach (var feature in features) { - var item = new PartFeature - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new PartFeature(); item.SetName(feature.Name); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.Feature.ValueKey, feature.Value); item.CopyMachineInformation(machine); @@ -234,13 +224,11 @@ namespace SabreTools.DatFiles.Formats foreach (var dataarea in dataareas) { - var item = new DataArea - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new DataArea(); item.SetName(dataarea.Name); item.SetFieldValue(Models.Metadata.DataArea.EndiannessKey, dataarea.Endianness.AsEnumValue()); item.SetFieldValue(Models.Metadata.DataArea.SizeKey, NumberHelper.ConvertToInt64(dataarea.Size)); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.DataArea.WidthKey, NumberHelper.ConvertToInt64(dataarea.Width)); item.CopyMachineInformation(machine); @@ -268,20 +256,18 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var rom in roms) { - var item = new Rom - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Rom(); item.SetName(rom.Name); - item.SetFieldValue(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(rom.Size ?? rom.Length)); item.SetFieldValue(Models.Metadata.Rom.CRCKey, rom.CRC); - item.SetFieldValue(Models.Metadata.Rom.SHA1Key, rom.SHA1); - item.SetFieldValue(Models.Metadata.Rom.OffsetKey, rom.Offset); - item.SetFieldValue(Models.Metadata.Rom.ValueKey, rom.Value); - item.SetFieldValue(Models.Metadata.Rom.StatusKey, rom.Status.AsEnumValue()); + item.SetFieldValue(Rom.DataAreaKey, dataarea); item.SetFieldValue(Models.Metadata.Rom.LoadFlagKey, rom.LoadFlag.AsEnumValue()); - item.SetFieldValue("PART", part); - item.SetFieldValue("DATAAREA", dataarea); + item.SetFieldValue(Models.Metadata.Rom.OffsetKey, rom.Offset); + item.SetFieldValue(Rom.PartKey, part); + item.SetFieldValue(Models.Metadata.Rom.SHA1Key, rom.SHA1); + item.SetFieldValue(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(rom.Size ?? rom.Length)); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); + item.SetFieldValue(Models.Metadata.Rom.StatusKey, rom.Status.AsEnumValue()); + item.SetFieldValue(Models.Metadata.Rom.ValueKey, rom.Value); item.CopyMachineInformation(machine); ParseAddHelper(item, statsOnly); @@ -306,11 +292,9 @@ namespace SabreTools.DatFiles.Formats foreach (var diskarea in diskareas) { - var item = new DiskArea - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new DiskArea(); item.SetName(diskarea.Name); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.CopyMachineInformation(machine); ConvertDisks(diskarea.Disk, part, item, machine, filename, indexId, statsOnly, ref containsItems); @@ -337,16 +321,14 @@ namespace SabreTools.DatFiles.Formats containsItems = true; foreach (var disk in disks) { - var item = new Disk - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new Disk(); item.SetName(disk.Name); - item.SetFieldValue("DISKAREA", diskarea); + item.SetFieldValue(Disk.DiskAreaKey, diskarea); item.SetFieldValue(Models.Metadata.Disk.StatusKey, disk.Status?.AsEnumValue() ?? ItemStatus.NULL); item.SetFieldValue(Models.Metadata.Disk.MD5Key, disk.MD5); - item.SetFieldValue("PART", part); + item.SetFieldValue(Disk.PartKey, part); item.SetFieldValue(Models.Metadata.Disk.SHA1Key, disk.SHA1); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.Disk.WritableKey, disk.Writeable.AsYesNo()); item.CopyMachineInformation(machine); @@ -372,14 +354,12 @@ namespace SabreTools.DatFiles.Formats foreach (var dipswitch in dipswitches) { - var item = new DipSwitch - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new DipSwitch(); item.SetName(dipswitch.Name); item.SetFieldValue(Models.Metadata.DipSwitch.DipValueKey, CreateDipValues(dipswitch.DipValue, machine, filename, indexId)?.ToArray()); - item.SetFieldValue("PART", part); + item.SetFieldValue(DipSwitch.PartKey, part); item.SetFieldValue(Models.Metadata.DipSwitch.MaskKey, dipswitch.Mask); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.DipSwitch.TagKey, dipswitch.Tag); item.CopyMachineInformation(machine); @@ -403,12 +383,10 @@ namespace SabreTools.DatFiles.Formats var settings = new List(); foreach (var dipvalue in dipvalues) { - var item = new DipValue - { - Source = new Source { Index = indexId, Name = filename }, - }; + var item = new DipValue(); item.SetName(dipvalue.Name); item.SetFieldValue(Models.Metadata.DipValue.DefaultKey, dipvalue.Default.AsYesNo()); + item.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue(Models.Metadata.DipValue.ValueKey, dipvalue.Value); item.CopyMachineInformation(machine); diff --git a/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs b/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs index 2dd90388..30583cb2 100644 --- a/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs +++ b/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs @@ -41,9 +41,9 @@ namespace SabreTools.DatFiles.Formats } else { - if (string.IsNullOrEmpty(dipSwitch.GetFieldValue("PART")!.GetName())) + if (string.IsNullOrEmpty(dipSwitch.GetFieldValue(DipSwitch.PartKey)!.GetName())) missingFields.Add(Models.Metadata.Part.NameKey); - if (string.IsNullOrEmpty(dipSwitch.GetFieldValue("PART")!.GetFieldValue(Models.Metadata.Part.InterfaceKey))) + if (string.IsNullOrEmpty(dipSwitch.GetFieldValue(DipSwitch.PartKey)!.GetFieldValue(Models.Metadata.Part.InterfaceKey))) missingFields.Add(Models.Metadata.Part.InterfaceKey); } if (string.IsNullOrEmpty(dipSwitch.GetName())) @@ -70,9 +70,9 @@ namespace SabreTools.DatFiles.Formats } else { - if (string.IsNullOrEmpty(disk.GetFieldValue("PART")!.GetName())) + if (string.IsNullOrEmpty(disk.GetFieldValue(Disk.PartKey)!.GetName())) missingFields.Add(Models.Metadata.Part.NameKey); - if (string.IsNullOrEmpty(disk.GetFieldValue("PART")!.GetFieldValue(Models.Metadata.Part.InterfaceKey))) + if (string.IsNullOrEmpty(disk.GetFieldValue(Disk.PartKey)!.GetFieldValue(Models.Metadata.Part.InterfaceKey))) missingFields.Add(Models.Metadata.Part.InterfaceKey); } if (!disk.DiskAreaSpecified) @@ -81,7 +81,7 @@ namespace SabreTools.DatFiles.Formats } else { - if (string.IsNullOrEmpty(disk.GetFieldValue("DISKAREA")!.GetName())) + if (string.IsNullOrEmpty(disk.GetFieldValue(Disk.DiskAreaKey)!.GetName())) missingFields.Add(Models.Metadata.DiskArea.NameKey); } if (string.IsNullOrEmpty(disk.GetName())) @@ -101,9 +101,9 @@ namespace SabreTools.DatFiles.Formats } else { - if (string.IsNullOrEmpty(rom.GetFieldValue("PART")!.GetName())) + if (string.IsNullOrEmpty(rom.GetFieldValue(Rom.PartKey)!.GetName())) missingFields.Add(Models.Metadata.Part.NameKey); - if (string.IsNullOrEmpty(rom.GetFieldValue("PART")!.GetFieldValue(Models.Metadata.Part.InterfaceKey))) + if (string.IsNullOrEmpty(rom.GetFieldValue(Rom.PartKey)!.GetFieldValue(Models.Metadata.Part.InterfaceKey))) missingFields.Add(Models.Metadata.Part.InterfaceKey); } if (!rom.DataAreaSpecified) @@ -113,9 +113,9 @@ namespace SabreTools.DatFiles.Formats } else { - if (string.IsNullOrEmpty(rom.GetFieldValue("DATAAREA")!.GetName())) + if (string.IsNullOrEmpty(rom.GetFieldValue(Rom.DataAreaKey)!.GetName())) missingFields.Add(Models.Metadata.DataArea.NameKey); - if (rom.GetFieldValue("DATAAREA")!.GetFieldValue(Models.Metadata.DataArea.SizeKey) == null) + if (rom.GetFieldValue(Rom.DataAreaKey)!.GetFieldValue(Models.Metadata.DataArea.SizeKey) == null) missingFields.Add(Models.Metadata.DataArea.SizeKey); } break; @@ -196,7 +196,7 @@ namespace SabreTools.DatFiles.Formats continue; // Get the first item for game information - var machine = items[0].Machine; + var machine = items[0].GetFieldValue(DatItem.MachineKey); var sw = CreateSoftware(machine!); // Create holders for all item types @@ -304,9 +304,9 @@ namespace SabreTools.DatFiles.Formats { var part = new Models.SoftwareList.Part { - Name = item.GetFieldValue("PART")?.GetName(), - Interface = item.GetFieldValue("PART")?.GetFieldValue(Models.Metadata.Part.InterfaceKey), - Feature = CreateFeatures(item.GetFieldValue("PART")?.GetFieldValue(Models.Metadata.Part.FeatureKey)), + Name = item.GetFieldValue(Rom.PartKey)?.GetName(), + Interface = item.GetFieldValue(Rom.PartKey)?.GetFieldValue(Models.Metadata.Part.InterfaceKey), + Feature = CreateFeatures(item.GetFieldValue(Rom.PartKey)?.GetFieldValue(Models.Metadata.Part.FeatureKey)), DataArea = CreateDataAreas(item), DiskArea = null, DipSwitch = null, @@ -321,9 +321,9 @@ namespace SabreTools.DatFiles.Formats { var part = new Models.SoftwareList.Part { - Name = item.GetFieldValue("PART")?.GetName(), - Interface = item.GetFieldValue("PART")?.GetFieldValue(Models.Metadata.Part.InterfaceKey), - Feature = CreateFeatures(item.GetFieldValue("PART")?.GetFieldValue(Models.Metadata.Part.FeatureKey)), + Name = item.GetFieldValue(Disk.PartKey)?.GetName(), + Interface = item.GetFieldValue(Disk.PartKey)?.GetFieldValue(Models.Metadata.Part.InterfaceKey), + Feature = CreateFeatures(item.GetFieldValue(Disk.PartKey)?.GetFieldValue(Models.Metadata.Part.FeatureKey)), DataArea = null, DiskArea = CreateDiskAreas(item), DipSwitch = null, @@ -338,9 +338,9 @@ namespace SabreTools.DatFiles.Formats { var part = new Models.SoftwareList.Part { - Name = item.GetFieldValue("PART")?.GetName(), - Interface = item.GetFieldValue("PART")?.GetFieldValue(Models.Metadata.Part.InterfaceKey), - Feature = CreateFeatures(item.GetFieldValue("PART")?.GetFieldValue(Models.Metadata.Part.FeatureKey)), + Name = item.GetFieldValue(DipSwitch.PartKey)?.GetName(), + Interface = item.GetFieldValue(DipSwitch.PartKey)?.GetFieldValue(Models.Metadata.Part.InterfaceKey), + Feature = CreateFeatures(item.GetFieldValue(DipSwitch.PartKey)?.GetFieldValue(Models.Metadata.Part.FeatureKey)), DataArea = null, DiskArea = null, DipSwitch = CreateDipSwitches(item), @@ -378,10 +378,10 @@ namespace SabreTools.DatFiles.Formats { var dataArea = new Models.SoftwareList.DataArea { - Name = item.GetFieldValue("DATAAREA")?.GetName(), - Size = item.GetFieldValue("DATAAREA")?.GetFieldValue(Models.Metadata.DataArea.SizeKey)?.ToString(), - Width = item.GetFieldValue("DATAAREA")?.GetFieldValue(Models.Metadata.DataArea.WidthKey)?.ToString(), - Endianness = item.GetFieldValue("DATAAREA")?.GetFieldValue(Models.Metadata.DataArea.EndiannessKey).AsStringValue(), + Name = item.GetFieldValue(Rom.DataAreaKey)?.GetName(), + Size = item.GetFieldValue(Rom.DataAreaKey)?.GetFieldValue(Models.Metadata.DataArea.SizeKey)?.ToString(), + Width = item.GetFieldValue(Rom.DataAreaKey)?.GetFieldValue(Models.Metadata.DataArea.WidthKey)?.ToString(), + Endianness = item.GetFieldValue(Rom.DataAreaKey)?.GetFieldValue(Models.Metadata.DataArea.EndiannessKey).AsStringValue(), Rom = CreateRom(item), }; return [dataArea]; diff --git a/SabreTools.DatFiles/ItemDictionary.cs b/SabreTools.DatFiles/ItemDictionary.cs index d47c71da..b610286f 100644 --- a/SabreTools.DatFiles/ItemDictionary.cs +++ b/SabreTools.DatFiles/ItemDictionary.cs @@ -219,11 +219,11 @@ namespace SabreTools.DatFiles TotalCount++; // Increment removal count - if (item.Remove) + if (item.GetFieldValue(DatItem.RemoveKey)) RemovedCount++; // Increment the item count for the type - AddItemCount(item.ItemType); + AddItemCount(item.GetFieldValue(Models.Metadata.DatItem.TypeKey)); // Some item types require special processing switch (item) @@ -399,8 +399,8 @@ namespace SabreTools.DatFiles // Filter the list return fi.Where(i => i != null) - .Where(i => !i.Remove) - .Where(i => i.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) != null) + .Where(i => !i.GetFieldValue(DatItem.RemoveKey)) + .Where(i => i.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) != null) .ToConcurrentList(); } } @@ -500,11 +500,11 @@ namespace SabreTools.DatFiles TotalCount--; // Decrement removal count - if (item.Remove) + if (item.GetFieldValue(DatItem.RemoveKey)) RemovedCount--; // Decrement the item count for the type - RemoveItemCount(item.ItemType); + RemoveItemCount(item.GetFieldValue(Models.Metadata.DatItem.TypeKey)); // Some item types require special processing switch (item) @@ -889,7 +889,7 @@ namespace SabreTools.DatFiles #endif // If there are no non-blank items, remove - else if (!items[key]!.Any(i => i != null && i.ItemType != ItemType.Blank)) + else if (!items[key]!.Any(i => i != null && i is not Blank)) #if NET40_OR_GREATER || NETCOREAPP items.TryRemove(key, out _); #else @@ -907,7 +907,7 @@ namespace SabreTools.DatFiles foreach (string key in keys) { ConcurrentList? oldItemList = items[key]; - ConcurrentList? newItemList = oldItemList?.Where(i => !i.Remove)?.ToConcurrentList(); + ConcurrentList? newItemList = oldItemList?.Where(i => !i.GetFieldValue(DatItem.RemoveKey))?.ToConcurrentList(); Remove(key); AddRange(key, newItemList); @@ -944,12 +944,12 @@ namespace SabreTools.DatFiles for (int i = 0; i < roms.Count; i++) { DatItem other = roms[i]; - if (other.Remove) + if (other.GetFieldValue(DatItem.RemoveKey)) continue; if (datItem.Equals(other)) { - other.Remove = true; + other.SetFieldValue(DatItem.RemoveKey, true); output.Add(other); } else diff --git a/SabreTools.DatFiles/ItemDictionaryDB.cs b/SabreTools.DatFiles/ItemDictionaryDB.cs index d95c2b69..7129d2b1 100644 --- a/SabreTools.DatFiles/ItemDictionaryDB.cs +++ b/SabreTools.DatFiles/ItemDictionaryDB.cs @@ -336,11 +336,11 @@ namespace SabreTools.DatFiles TotalCount++; // Increment removal count - if (item.Remove) + if (item.GetFieldValue(DatItem.RemoveKey)) RemovedCount++; // Increment the item count for the type - AddItemCount(item.ItemType); + AddItemCount(item.GetFieldValue(Models.Metadata.DatItem.TypeKey)); // Some item types require special processing switch (item) @@ -530,8 +530,8 @@ namespace SabreTools.DatFiles // Filter the list return fi.Where(i => i != null) - .Where(i => !i.Remove) - .Where(i => i.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) != null) + .Where(i => !i.GetFieldValue(DatItem.RemoveKey)) + .Where(i => i.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) != null) .ToConcurrentList(); } } @@ -644,11 +644,11 @@ namespace SabreTools.DatFiles TotalCount--; // Decrement removal count - if (item.Remove) + if (item.GetFieldValue(DatItem.RemoveKey)) RemovedCount--; // Decrement the item count for the type - RemoveItemCount(item.ItemType); + RemoveItemCount(item.GetFieldValue(Models.Metadata.DatItem.TypeKey)); // Some item types require special processing switch (item) @@ -1062,7 +1062,7 @@ CREATE TABLE IF NOT EXISTS groups ( this[key] = null; // If there are no non-blank items, remove - else if (!this[key]!.Any(i => i != null && i.ItemType != ItemType.Blank)) + else if (!this[key]!.Any(i => i != null && i is not Blank)) this[key] = null; } } @@ -1079,7 +1079,7 @@ CREATE TABLE IF NOT EXISTS groups ( foreach (string key in keys) { ConcurrentList? oldItemList = this[key]; - ConcurrentList? newItemList = oldItemList?.Where(i => !i.Remove)?.ToConcurrentList(); + ConcurrentList? newItemList = oldItemList?.Where(i => !i.GetFieldValue(DatItem.RemoveKey))?.ToConcurrentList(); Remove(key); AddRange(key, newItemList); @@ -1113,12 +1113,12 @@ CREATE TABLE IF NOT EXISTS groups ( for (int i = 0; i < roms.Count; i++) { DatItem other = roms[i]; - if (other.Remove) + if (other.GetFieldValue(DatItem.RemoveKey)) continue; if (datItem.Equals(other)) { - other.Remove = true; + other.SetFieldValue(DatItem.RemoveKey, true); output.Add(other); } else diff --git a/SabreTools.DatFiles/Setter.cs b/SabreTools.DatFiles/Setter.cs index 96fe03b9..483b5dd1 100644 --- a/SabreTools.DatFiles/Setter.cs +++ b/SabreTools.DatFiles/Setter.cs @@ -182,15 +182,15 @@ namespace SabreTools.DatFiles #region Common // Handle Machine fields - if (MachineFieldMappings.Any() && datItem.Machine != null) - SetFields(datItem.Machine); + if (MachineFieldMappings.Any() && datItem.GetFieldValue(DatItem.MachineKey) != null) + SetFields(datItem.GetFieldValue(DatItem.MachineKey)!); // If there are no field names, return if (ItemFieldMappings == null || !ItemFieldMappings.Any()) return; // If there are no field names for this type or generic, return - string? itemType = datItem.ItemType.AsStringValue(); + string? itemType = datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey).AsStringValue(); if (itemType == null || (!ItemFieldMappings.Keys.Any(kvp => kvp.Item1 == itemType) && !ItemFieldMappings.Keys.Any(kvp => kvp.Item1 == "item"))) return; @@ -355,9 +355,9 @@ namespace SabreTools.DatFiles } if (!dipSwitch.PartSpecified) - dipSwitch.SetFieldValue("PART", new Part()); + dipSwitch.SetFieldValue(DipSwitch.PartKey, new Part()); - SetFields((dipSwitch.GetFieldValue("PART") as DatItem)!); + SetFields((dipSwitch.GetFieldValue(DipSwitch.PartKey) as DatItem)!); } /// @@ -382,14 +382,14 @@ namespace SabreTools.DatFiles private void SetFields(Disk disk) { if (!disk.DiskAreaSpecified) - disk.SetFieldValue("DISKAREA", new DiskArea()); + disk.SetFieldValue(Disk.DiskAreaKey, new DiskArea()); - SetFields(disk.GetFieldValue("DISKAREA")! as DatItem); + SetFields(disk.GetFieldValue(Disk.DiskAreaKey)! as DatItem); if (!disk.PartSpecified) - disk.SetFieldValue("PART", new Part()); + disk.SetFieldValue(Disk.PartKey, new Part()); - SetFields(disk.GetFieldValue("PART")! as DatItem); + SetFields(disk.GetFieldValue(Disk.PartKey)! as DatItem); } /// @@ -444,14 +444,14 @@ namespace SabreTools.DatFiles private void SetFields(Rom rom) { if (!rom.DataAreaSpecified) - rom.SetFieldValue("DATAAREA", new DataArea()); + rom.SetFieldValue(Rom.DataAreaKey, new DataArea()); - SetFields(rom.GetFieldValue("DATAAREA")! as DatItem); + SetFields(rom.GetFieldValue(Rom.DataAreaKey)! as DatItem); if (!rom.PartSpecified) - rom.SetFieldValue("PART", new Part()); + rom.SetFieldValue(Rom.PartKey, new Part()); - SetFields(rom.GetFieldValue("PART")! as DatItem); + SetFields(rom.GetFieldValue(Rom.PartKey)! as DatItem); } /// diff --git a/SabreTools.DatItems/DatItem.cs b/SabreTools.DatItems/DatItem.cs index 2e2daf35..7f02980a 100644 --- a/SabreTools.DatItems/DatItem.cs +++ b/SabreTools.DatItems/DatItem.cs @@ -2,7 +2,6 @@ using System.IO; using System.Xml.Serialization; using Newtonsoft.Json; -using Newtonsoft.Json.Converters; using SabreTools.Core; using SabreTools.Core.Tools; using SabreTools.DatItems.Formats; @@ -62,32 +61,31 @@ namespace SabreTools.DatItems [XmlInclude(typeof(Sound))] public abstract class DatItem : IEquatable, IComparable, ICloneable { - #region Fields - - #region Common Fields - - /// - /// Item type for outputting - /// - [JsonProperty("itemtype")] - [JsonConverter(typeof(StringEnumConverter))] - [XmlElement("itemtype")] - public ItemType ItemType - { - get => _internal.ReadString(Models.Metadata.DatItem.TypeKey).AsEnumValue(); - set => _internal[Models.Metadata.DatItem.TypeKey] = value.AsStringValue(); - } + #region Constants /// /// Duplicate type when compared to another item /// - /// Hack on top of internal model - [JsonIgnore, XmlIgnore] - public DupeType DupeType - { - get => _internal.Read("DUPETYPE") ?? 0; - set => _internal["DUPETYPE"] = value; - } + public const string DupeTypeKey = "DUPETYPE"; + + /// + /// Machine associated with the item + /// + public const string MachineKey = "MACHINE"; + + /// + /// Flag if item should be removed + /// + public const string RemoveKey = "REMOVE"; + + /// + /// Source information + /// + public const string SourceKey = "SOURCE"; + + #endregion + + #region Fields /// /// Internal model wrapped by this DatItem @@ -97,49 +95,6 @@ namespace SabreTools.DatItems #endregion - #region Machine Fields - - /// - /// Machine values - /// - /// Hack on top of internal model - [JsonIgnore, XmlIgnore] - public Machine Machine - { - get => _internal.Read("MACHINE") ?? new Machine(); - set => _internal["MACHINE"] = value; - } - - #endregion - - #region Metadata information - - /// - /// Source information - /// - /// Hack on top of internal model - [JsonIgnore, XmlIgnore] - public Source? Source - { - get => _internal.Read("SOURCE") ?? new Source(); - set => _internal["SOURCE"] = value; - } - - /// - /// Flag if item should be removed - /// - /// Hack on top of internal model - [JsonIgnore, XmlIgnore] - public bool Remove - { - get => _internal.ReadBool("REMOVE") ?? false; - set => _internal["REMOVE"] = value; - } - - #endregion // Metadata information - - #endregion - #region Logging /// @@ -216,7 +171,7 @@ namespace SabreTools.DatItems public DatItem() { _internal = new Models.Metadata.Blank(); - Machine = new Machine(); + SetFieldValue(DatItem.MachineKey, new Machine()); logger = new Logger(this); } @@ -312,11 +267,11 @@ namespace SabreTools.DatItems /// Existing item to copy information from public void CopyMachineInformation(DatItem item) { - if (item?.Machine == null) + if (item?.GetFieldValue(DatItem.MachineKey) == null) return; - if (item.Machine.Clone() is Machine cloned) - Machine = cloned; + if (item.GetFieldValue(DatItem.MachineKey)!.Clone() is Machine cloned) + SetFieldValue(DatItem.MachineKey, cloned); } /// @@ -329,7 +284,7 @@ namespace SabreTools.DatItems return; if (machine.Clone() is Machine cloned) - Machine = cloned; + SetFieldValue(DatItem.MachineKey, cloned); } #endregion @@ -360,7 +315,7 @@ namespace SabreTools.DatItems public virtual bool Equals(DatItem? other) { // If we don't have a matched type, return false - if (ItemType != other?.ItemType) + if (GetFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetFieldValue(Models.Metadata.DatItem.TypeKey)) return false; // Compare the internal models @@ -382,12 +337,12 @@ namespace SabreTools.DatItems // If the duplicate is external already or should be, set it #if NETFRAMEWORK - if ((lastItem.DupeType & DupeType.External) != 0 || lastItem?.Source?.Index != Source?.Index) + if ((lastItem.GetFieldValue(DatItem.DupeTypeKey) & DupeType.External) != 0 || lastItem?.GetFieldValue(DatItem.SourceKey)?.Index != GetFieldValue(DatItem.SourceKey)?.Index) #else - if (lastItem.DupeType.HasFlag(DupeType.External) || lastItem?.Source?.Index != Source?.Index) + if (lastItem.GetFieldValue(DatItem.DupeTypeKey).HasFlag(DupeType.External) || lastItem?.GetFieldValue(DatItem.SourceKey)?.Index != GetFieldValue(DatItem.SourceKey)?.Index) #endif { - if (lastItem?.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) == Machine?.GetFieldValue(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName()) + if (lastItem?.GetFieldValue(DatItem.MachineKey)?.GetFieldValue(Models.Metadata.Machine.NameKey) == GetFieldValue(DatItem.MachineKey)?.GetFieldValue(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName()) output = DupeType.External | DupeType.All; else output = DupeType.External | DupeType.Hash; @@ -396,7 +351,7 @@ namespace SabreTools.DatItems // Otherwise, it's considered an internal dupe else { - if (lastItem?.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) == Machine?.GetFieldValue(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName()) + if (lastItem?.GetFieldValue(DatItem.MachineKey)?.GetFieldValue(Models.Metadata.Machine.NameKey) == GetFieldValue(DatItem.MachineKey)?.GetFieldValue(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName()) output = DupeType.Internal | DupeType.All; else output = DupeType.Internal | DupeType.Hash; @@ -416,7 +371,7 @@ namespace SabreTools.DatItems /// True if the item passes the filter, false otherwise public bool PassesFilter(FilterRunner filterRunner) { - if (!Machine.PassesFilter(filterRunner)) + if (!GetFieldValue(DatItem.MachineKey)!.PassesFilter(filterRunner)) return false; return filterRunner.Run(_internal); @@ -474,11 +429,11 @@ namespace SabreTools.DatItems case ItemKey.Machine: key = (norename ? string.Empty - : Source?.Index.ToString().PadLeft(10, '0') + : GetFieldValue(DatItem.SourceKey)?.Index.ToString().PadLeft(10, '0') + "-") - + (string.IsNullOrEmpty(Machine?.GetFieldValue(Models.Metadata.Machine.NameKey)) + + (string.IsNullOrEmpty(GetFieldValue(DatItem.MachineKey)?.GetFieldValue(Models.Metadata.Machine.NameKey)) ? "Default" - : Machine!.GetFieldValue(Models.Metadata.Machine.NameKey)!); + : GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!); if (lower) key = key.ToLowerInvariant(); @@ -543,36 +498,35 @@ namespace SabreTools.DatItems int nodumpCount = 0; for (int f = 0; f < infiles.Count; f++) { - DatItem file = infiles[f]; + DatItem item = infiles[f]; // If we somehow have a null item, skip - if (file == null) + if (item == null) continue; // If we don't have a Disk, File, Media, or Rom, we skip checking for duplicates - if (file.ItemType != ItemType.Disk && file.ItemType != ItemType.File - && file.ItemType != ItemType.Media && file.ItemType != ItemType.Rom) + if (item is not Disk && item is not Formats.File && item is not Media && item is not Rom) { continue; } // If it's a nodump, add and skip - if (file is Rom rom && rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump) + if (item is Rom rom && rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump) { - outfiles.Add(file); + outfiles.Add(item); nodumpCount++; continue; } - else if (file is Disk disk && disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump) + else if (item is Disk disk && disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump) { - outfiles.Add(file); + outfiles.Add(item); nodumpCount++; continue; } // If it's the first non-nodump rom in the list, don't touch it else if (outfiles.Count == 0 || outfiles.Count == nodumpCount) { - outfiles.Add(file); + outfiles.Add(item); continue; } @@ -585,7 +539,7 @@ namespace SabreTools.DatItems DatItem lastrom = outfiles[i]; // Get the duplicate status - dupetype = file.GetDuplicateStatus(lastrom); + dupetype = item.GetDuplicateStatus(lastrom); // If it's a duplicate, skip adding it to the output but add any missing information if (dupetype != 0x00) @@ -594,31 +548,31 @@ namespace SabreTools.DatItems pos = i; // Disks, Media, and Roms have more information to fill - if (file is Disk disk && saveditem is Disk savedDisk) + if (item is Disk disk && saveditem is Disk savedDisk) savedDisk.FillMissingInformation(disk); - else if (file is Formats.File fileItem && saveditem is Formats.File savedFile) + else if (item is Formats.File fileItem && saveditem is Formats.File savedFile) savedFile.FillMissingInformation(fileItem); - else if (file is Media media && saveditem is Media savedMedia) + else if (item is Media media && saveditem is Media savedMedia) savedMedia.FillMissingInformation(media); - else if (file is Rom romItem && saveditem is Rom savedRom) + else if (item is Rom romItem && saveditem is Rom savedRom) savedRom.FillMissingInformation(romItem); - saveditem.DupeType = dupetype; + saveditem.SetFieldValue(DatItem.DupeTypeKey, dupetype); // If the current system has a lower ID than the previous, set the system accordingly - if (file.Source?.Index < saveditem.Source?.Index) + if (item.GetFieldValue(DatItem.SourceKey)?.Index < saveditem.GetFieldValue(DatItem.SourceKey)?.Index) { - saveditem.Source = file.Source.Clone() as Source; - saveditem.CopyMachineInformation(file); - saveditem.SetName(file.GetName()); + item.SetFieldValue(DatItem.SourceKey, item.GetFieldValue(DatItem.SourceKey)!.Clone() as Source); + saveditem.CopyMachineInformation(item); + saveditem.SetName(item.GetName()); } // If the current machine is a child of the new machine, use the new machine instead - if (saveditem.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey) == file.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) - || saveditem.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey) == file.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)) + if (saveditem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey) == item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) + || saveditem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey) == item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)) { - saveditem.CopyMachineInformation(file); - saveditem.SetName(file.GetName()); + saveditem.CopyMachineInformation(item); + saveditem.SetName(item.GetName()); } break; @@ -628,7 +582,7 @@ namespace SabreTools.DatItems // If no duplicate is found, add it to the list if (dupetype == 0x00) { - outfiles.Add(file); + outfiles.Add(item); } // Otherwise, if a new rom information is found, add that else @@ -672,10 +626,10 @@ namespace SabreTools.DatItems } // Get the last item name, if applicable - string lastItemName = lastItem.GetName() ?? lastItem.ItemType.ToString(); + string lastItemName = lastItem.GetName() ?? lastItem.GetFieldValue(Models.Metadata.DatItem.TypeKey).ToString(); // Get the current item name, if applicable - string datItemName = datItem.GetName() ?? datItem.ItemType.ToString(); + string datItemName = datItem.GetName() ?? datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey).ToString(); // If the current item exactly matches the last item, then we don't add it #if NETFRAMEWORK @@ -693,8 +647,7 @@ namespace SabreTools.DatItems { staticLogger.Verbose($"Name duplicate found for '{datItemName}'"); - if (datItem.ItemType == ItemType.Disk || datItem.ItemType == ItemType.File - || datItem.ItemType == ItemType.Media || datItem.ItemType == ItemType.Rom) + if (datItem is Disk || datItem is Formats.File || datItem is Media || datItem is Rom) { datItemName += GetDuplicateSuffix(datItem); lastrenamed ??= datItemName; @@ -766,10 +719,10 @@ namespace SabreTools.DatItems NaturalComparer nc = new(); // If machine names match, more refinement is needed - if (x.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) == y.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)) + if (x.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) == y.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)) { // If item types match, more refinement is needed - if (x.ItemType == y.ItemType) + if (x.GetFieldValue(Models.Metadata.DatItem.TypeKey) == y.GetFieldValue(Models.Metadata.DatItem.TypeKey)) { string? xDirectoryName = Path.GetDirectoryName(TextHelper.RemovePathUnsafeCharacters(x.GetName() ?? string.Empty)); string? yDirectoryName = Path.GetDirectoryName(TextHelper.RemovePathUnsafeCharacters(y.GetName() ?? string.Empty)); @@ -782,7 +735,7 @@ namespace SabreTools.DatItems // If item names match, then compare on machine or source, depending on the flag if (xName == yName) - return (norename ? nc.Compare(x.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), y.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)) : (x.Source?.Index - y.Source?.Index) ?? 0); + return (norename ? nc.Compare(x.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), y.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)) : (x.GetFieldValue(DatItem.SourceKey)?.Index - y.GetFieldValue(DatItem.SourceKey)?.Index) ?? 0); // Otherwise, just sort based on item names return nc.Compare(xName, yName); @@ -793,11 +746,11 @@ namespace SabreTools.DatItems } // Otherwise, just sort based on item type - return x.ItemType - y.ItemType; + return x.GetFieldValue(Models.Metadata.DatItem.TypeKey) - y.GetFieldValue(Models.Metadata.DatItem.TypeKey); } // Otherwise, just sort based on machine name - return nc.Compare(x.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), y.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); + return nc.Compare(x.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), y.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); } catch { diff --git a/SabreTools.DatItems/Formats/Adjuster.cs b/SabreTools.DatItems/Formats/Adjuster.cs index d3c74147..edfc44e6 100644 --- a/SabreTools.DatItems/Formats/Adjuster.cs +++ b/SabreTools.DatItems/Formats/Adjuster.cs @@ -42,10 +42,10 @@ namespace SabreTools.DatItems.Formats public Adjuster() { _internal = new Models.Metadata.Adjuster(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.Adjuster; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Adjuster); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -54,9 +54,9 @@ namespace SabreTools.DatItems.Formats public Adjuster(Models.Metadata.Adjuster? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Adjuster; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Adjuster); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -68,13 +68,6 @@ namespace SabreTools.DatItems.Formats { return new Adjuster() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Adjuster ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Analog.cs b/SabreTools.DatItems/Formats/Analog.cs index 60b2e7fd..16900687 100644 --- a/SabreTools.DatItems/Formats/Analog.cs +++ b/SabreTools.DatItems/Formats/Analog.cs @@ -18,9 +18,9 @@ namespace SabreTools.DatItems.Formats public Analog() { _internal = new Models.Metadata.Analog(); - Machine = new Machine(); - ItemType = ItemType.Analog; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Analog); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -29,9 +29,9 @@ namespace SabreTools.DatItems.Formats public Analog(Models.Metadata.Analog? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Analog; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Analog); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -43,13 +43,6 @@ namespace SabreTools.DatItems.Formats { return new Analog() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Analog ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Archive.cs b/SabreTools.DatItems/Formats/Archive.cs index 824eafcc..568bec26 100644 --- a/SabreTools.DatItems/Formats/Archive.cs +++ b/SabreTools.DatItems/Formats/Archive.cs @@ -97,10 +97,10 @@ namespace SabreTools.DatItems.Formats public Archive() { _internal = new Models.Metadata.Archive(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.Archive; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Archive); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -109,9 +109,9 @@ namespace SabreTools.DatItems.Formats public Archive(Models.Metadata.Archive? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Archive; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Archive); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -123,13 +123,6 @@ namespace SabreTools.DatItems.Formats { return new Archive() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Archive ?? [], }; } diff --git a/SabreTools.DatItems/Formats/BiosSet.cs b/SabreTools.DatItems/Formats/BiosSet.cs index 0d83b79f..fbc3f514 100644 --- a/SabreTools.DatItems/Formats/BiosSet.cs +++ b/SabreTools.DatItems/Formats/BiosSet.cs @@ -28,10 +28,10 @@ namespace SabreTools.DatItems.Formats public BiosSet() { _internal = new Models.Metadata.BiosSet(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.BiosSet; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.BiosSet); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -40,9 +40,9 @@ namespace SabreTools.DatItems.Formats public BiosSet(Models.Metadata.BiosSet? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.BiosSet; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.BiosSet); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -54,13 +54,6 @@ namespace SabreTools.DatItems.Formats { return new BiosSet() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.BiosSet ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Blank.cs b/SabreTools.DatItems/Formats/Blank.cs index 6ac8543c..8e6be093 100644 --- a/SabreTools.DatItems/Formats/Blank.cs +++ b/SabreTools.DatItems/Formats/Blank.cs @@ -17,7 +17,7 @@ namespace SabreTools.DatItems.Formats /// public Blank() { - ItemType = ItemType.Blank; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Blank); } #endregion @@ -27,15 +27,13 @@ namespace SabreTools.DatItems.Formats /// public override object Clone() { - return new Blank() - { - ItemType = this.ItemType, - DupeType = this.DupeType, + var blank = new Blank(); + blank.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)); + blank.SetFieldValue(DatItem.RemoveKey, GetFieldValue(DatItem.RemoveKey)); + blank.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); + blank.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetFieldValue(Models.Metadata.DatItem.TypeKey)); - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - }; + return blank; } #endregion @@ -46,14 +44,14 @@ namespace SabreTools.DatItems.Formats public override bool Equals(DatItem? other) { // If we don't have a blank, return false - if (ItemType != other?.ItemType) + if (GetFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetFieldValue(Models.Metadata.DatItem.TypeKey)) return false; // Otherwise, treat it as a Blank Blank? newOther = other as Blank; // If the archive information matches - return (Machine == newOther!.Machine); + return GetFieldValue(DatItem.MachineKey) == newOther!.GetFieldValue(DatItem.MachineKey); } #endregion diff --git a/SabreTools.DatItems/Formats/Chip.cs b/SabreTools.DatItems/Formats/Chip.cs index 22f50af5..229ea3c8 100644 --- a/SabreTools.DatItems/Formats/Chip.cs +++ b/SabreTools.DatItems/Formats/Chip.cs @@ -28,10 +28,10 @@ namespace SabreTools.DatItems.Formats public Chip() { _internal = new Models.Metadata.Chip(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.Chip; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Chip); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -40,9 +40,9 @@ namespace SabreTools.DatItems.Formats public Chip(Models.Metadata.Chip? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Chip; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Chip); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -54,13 +54,6 @@ namespace SabreTools.DatItems.Formats { return new Chip() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Chip ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Condition.cs b/SabreTools.DatItems/Formats/Condition.cs index 1c655533..83e62287 100644 --- a/SabreTools.DatItems/Formats/Condition.cs +++ b/SabreTools.DatItems/Formats/Condition.cs @@ -18,9 +18,9 @@ namespace SabreTools.DatItems.Formats public Condition() { _internal = new Models.Metadata.Condition(); - Machine = new Machine(); - ItemType = ItemType.Condition; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Condition); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -29,9 +29,9 @@ namespace SabreTools.DatItems.Formats public Condition(Models.Metadata.Condition? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Condition; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Condition); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -43,13 +43,6 @@ namespace SabreTools.DatItems.Formats { return new Condition() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Condition ?? [], }; } diff --git a/SabreTools.DatItems/Formats/ConfLocation.cs b/SabreTools.DatItems/Formats/ConfLocation.cs index 63ecedce..28bbccfa 100644 --- a/SabreTools.DatItems/Formats/ConfLocation.cs +++ b/SabreTools.DatItems/Formats/ConfLocation.cs @@ -28,10 +28,10 @@ namespace SabreTools.DatItems.Formats public ConfLocation() { _internal = new Models.Metadata.ConfLocation(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.ConfLocation; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.ConfLocation); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -40,9 +40,9 @@ namespace SabreTools.DatItems.Formats public ConfLocation(Models.Metadata.ConfLocation? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.ConfLocation; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.ConfLocation); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -54,13 +54,6 @@ namespace SabreTools.DatItems.Formats { return new ConfLocation() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.ConfLocation ?? [], }; } diff --git a/SabreTools.DatItems/Formats/ConfSetting.cs b/SabreTools.DatItems/Formats/ConfSetting.cs index 5cdec69a..b29ec9b3 100644 --- a/SabreTools.DatItems/Formats/ConfSetting.cs +++ b/SabreTools.DatItems/Formats/ConfSetting.cs @@ -42,10 +42,10 @@ namespace SabreTools.DatItems.Formats public ConfSetting() { _internal = new Models.Metadata.ConfSetting(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.ConfSetting; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.ConfSetting); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -54,9 +54,9 @@ namespace SabreTools.DatItems.Formats public ConfSetting(Models.Metadata.ConfSetting? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.ConfSetting; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.ConfSetting); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -68,13 +68,6 @@ namespace SabreTools.DatItems.Formats { return new ConfSetting() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.ConfSetting ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Configuration.cs b/SabreTools.DatItems/Formats/Configuration.cs index 74a011a1..80639ee9 100644 --- a/SabreTools.DatItems/Formats/Configuration.cs +++ b/SabreTools.DatItems/Formats/Configuration.cs @@ -62,10 +62,10 @@ namespace SabreTools.DatItems.Formats public Configuration() { _internal = new Models.Metadata.Configuration(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.Configuration; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Configuration); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -74,9 +74,9 @@ namespace SabreTools.DatItems.Formats public Configuration(Models.Metadata.Configuration? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Configuration; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Configuration); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -88,13 +88,6 @@ namespace SabreTools.DatItems.Formats { return new Configuration() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Configuration ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Control.cs b/SabreTools.DatItems/Formats/Control.cs index 83fbea13..854e9d8f 100644 --- a/SabreTools.DatItems/Formats/Control.cs +++ b/SabreTools.DatItems/Formats/Control.cs @@ -18,9 +18,9 @@ namespace SabreTools.DatItems.Formats public Control() { _internal = new Models.Metadata.Control(); - Machine = new Machine(); - ItemType = ItemType.Control; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Control); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -29,9 +29,9 @@ namespace SabreTools.DatItems.Formats public Control(Models.Metadata.Control? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Control; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Control); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -43,13 +43,6 @@ namespace SabreTools.DatItems.Formats { return new Control() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Control ?? [], }; } diff --git a/SabreTools.DatItems/Formats/DataArea.cs b/SabreTools.DatItems/Formats/DataArea.cs index a2ada4a4..2a7394cf 100644 --- a/SabreTools.DatItems/Formats/DataArea.cs +++ b/SabreTools.DatItems/Formats/DataArea.cs @@ -29,10 +29,10 @@ namespace SabreTools.DatItems.Formats public DataArea() { _internal = new Models.Metadata.DataArea(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.DataArea; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.DataArea); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -41,9 +41,9 @@ namespace SabreTools.DatItems.Formats public DataArea(Models.Metadata.DataArea? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.DataArea; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.DataArea); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -55,13 +55,6 @@ namespace SabreTools.DatItems.Formats { return new DataArea() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.DataArea ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Device.cs b/SabreTools.DatItems/Formats/Device.cs index 6a74fa20..e4a2816c 100644 --- a/SabreTools.DatItems/Formats/Device.cs +++ b/SabreTools.DatItems/Formats/Device.cs @@ -42,9 +42,9 @@ namespace SabreTools.DatItems.Formats public Device() { _internal = new Models.Metadata.Device(); - Machine = new Machine(); - ItemType = ItemType.Device; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Device); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -53,9 +53,9 @@ namespace SabreTools.DatItems.Formats public Device(Models.Metadata.Device? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Device; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Device); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -67,13 +67,6 @@ namespace SabreTools.DatItems.Formats { return new Device() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Device ?? [], }; } diff --git a/SabreTools.DatItems/Formats/DeviceReference.cs b/SabreTools.DatItems/Formats/DeviceReference.cs index 7e400cd0..444dad85 100644 --- a/SabreTools.DatItems/Formats/DeviceReference.cs +++ b/SabreTools.DatItems/Formats/DeviceReference.cs @@ -28,10 +28,10 @@ namespace SabreTools.DatItems.Formats public DeviceReference() { _internal = new Models.Metadata.DeviceRef(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.DeviceReference; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.DeviceReference); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -40,9 +40,9 @@ namespace SabreTools.DatItems.Formats public DeviceReference(Models.Metadata.DeviceRef? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.DeviceReference; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.DeviceReference); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -54,13 +54,6 @@ namespace SabreTools.DatItems.Formats { return new DeviceReference() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.DeviceRef ?? [], }; } diff --git a/SabreTools.DatItems/Formats/DipLocation.cs b/SabreTools.DatItems/Formats/DipLocation.cs index 9dd61add..b99e8245 100644 --- a/SabreTools.DatItems/Formats/DipLocation.cs +++ b/SabreTools.DatItems/Formats/DipLocation.cs @@ -28,10 +28,10 @@ namespace SabreTools.DatItems.Formats public DipLocation() { _internal = new Models.Metadata.DipLocation(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.DipLocation; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.DipLocation); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -40,9 +40,9 @@ namespace SabreTools.DatItems.Formats public DipLocation(Models.Metadata.DipLocation? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.DipLocation; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.DipLocation); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -54,13 +54,6 @@ namespace SabreTools.DatItems.Formats { return new DipLocation() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.DipLocation ?? [], }; } diff --git a/SabreTools.DatItems/Formats/DipSwitch.cs b/SabreTools.DatItems/Formats/DipSwitch.cs index d3fdb897..015da37f 100644 --- a/SabreTools.DatItems/Formats/DipSwitch.cs +++ b/SabreTools.DatItems/Formats/DipSwitch.cs @@ -10,6 +10,15 @@ namespace SabreTools.DatItems.Formats [JsonObject("dipswitch"), XmlRoot("dipswitch")] public class DipSwitch : DatItem { + #region Constants + + /// + /// Non-standard key for inverted logic + /// + public const string PartKey = "PART"; + + #endregion + #region Fields [JsonIgnore] @@ -47,7 +56,7 @@ namespace SabreTools.DatItems.Formats { get { - var part = GetFieldValue("PART"); + var part = GetFieldValue(DipSwitch.PartKey); return part != null && (!string.IsNullOrEmpty(part.GetName()) || !string.IsNullOrEmpty(part.GetFieldValue(Models.Metadata.Part.InterfaceKey))); @@ -74,10 +83,10 @@ namespace SabreTools.DatItems.Formats public DipSwitch() { _internal = new Models.Metadata.DipSwitch(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.DipSwitch; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.DipSwitch); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -86,9 +95,9 @@ namespace SabreTools.DatItems.Formats public DipSwitch(Models.Metadata.DipSwitch? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.DipSwitch; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.DipSwitch); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -100,13 +109,6 @@ namespace SabreTools.DatItems.Formats { return new DipSwitch() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.DipSwitch ?? [], }; } diff --git a/SabreTools.DatItems/Formats/DipValue.cs b/SabreTools.DatItems/Formats/DipValue.cs index 7e0c0100..a4b98223 100644 --- a/SabreTools.DatItems/Formats/DipValue.cs +++ b/SabreTools.DatItems/Formats/DipValue.cs @@ -42,10 +42,10 @@ namespace SabreTools.DatItems.Formats public DipValue() { _internal = new Models.Metadata.DipValue(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.DipValue; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.DipValue); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -54,9 +54,9 @@ namespace SabreTools.DatItems.Formats public DipValue(Models.Metadata.DipValue? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.DipValue; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.DipValue); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -68,13 +68,6 @@ namespace SabreTools.DatItems.Formats { return new DipValue() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.DipValue ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Disk.cs b/SabreTools.DatItems/Formats/Disk.cs index 1ecf59ba..52d92028 100644 --- a/SabreTools.DatItems/Formats/Disk.cs +++ b/SabreTools.DatItems/Formats/Disk.cs @@ -12,6 +12,20 @@ namespace SabreTools.DatItems.Formats [JsonObject("disk"), XmlRoot("disk")] public class Disk : DatItem { + #region Constants + + /// + /// Non-standard key for inverted logic + /// + public const string DiskAreaKey = "DISKAREA"; + + /// + /// Non-standard key for inverted logic + /// + public const string PartKey = "PART"; + + #endregion + #region Fields [JsonIgnore] @@ -19,7 +33,7 @@ namespace SabreTools.DatItems.Formats { get { - var diskArea = GetFieldValue("DISKAREA"); + var diskArea = GetFieldValue(Disk.DiskAreaKey); return diskArea != null && !string.IsNullOrEmpty(diskArea.GetName()); } } @@ -29,7 +43,7 @@ namespace SabreTools.DatItems.Formats { get { - var part = GetFieldValue("PART"); + var part = GetFieldValue(Disk.PartKey); return part != null && (!string.IsNullOrEmpty(part.GetName()) || !string.IsNullOrEmpty(part.GetFieldValue(Models.Metadata.Part.InterfaceKey))); @@ -56,11 +70,11 @@ namespace SabreTools.DatItems.Formats public Disk() { _internal = new Models.Metadata.Disk(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.Disk; - DupeType = 0x00; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Disk); + SetFieldValue(DatItem.DupeTypeKey, 0x00); + SetFieldValue(DatItem.MachineKey, new Machine()); SetFieldValue(Models.Metadata.Disk.StatusKey, ItemStatus.None); } @@ -70,14 +84,14 @@ namespace SabreTools.DatItems.Formats public Disk(BaseFile baseFile) { _internal = new Models.Metadata.Disk(); - Machine = new Machine(); SetName(baseFile.Filename); SetFieldValue(Models.Metadata.Disk.MD5Key, TextHelper.ByteArrayToString(baseFile.MD5)); SetFieldValue(Models.Metadata.Disk.SHA1Key, TextHelper.ByteArrayToString(baseFile.SHA1)); - ItemType = ItemType.Disk; - DupeType = 0x00; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Disk); + SetFieldValue(DatItem.DupeTypeKey, 0x00); + SetFieldValue(DatItem.MachineKey, new Machine()); SetFieldValue(Models.Metadata.Disk.StatusKey, ItemStatus.None); } @@ -87,9 +101,9 @@ namespace SabreTools.DatItems.Formats public Disk(Models.Metadata.Disk? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Disk; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Disk); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -101,13 +115,6 @@ namespace SabreTools.DatItems.Formats { return new Disk() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Disk ?? [], }; } @@ -120,7 +127,7 @@ namespace SabreTools.DatItems.Formats return new BaseFile() { Filename = this.GetName(), - Parent = this.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), + Parent = GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), MD5 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Disk.MD5Key)), SHA1 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Disk.SHA1Key)), }; @@ -132,17 +139,12 @@ namespace SabreTools.DatItems.Formats /// public Rom ConvertToRom() { - var rom = new Rom(_internal.ConvertToRom()) - { - ItemType = ItemType.Rom, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - }; - - rom.GetFieldValue("DATAAREA")?.SetName(this.GetFieldValue("DISKAREA")?.GetName()); + var rom = new Rom(_internal.ConvertToRom()); + rom.GetFieldValue(Rom.DataAreaKey)?.SetName(this.GetFieldValue(Disk.DiskAreaKey)?.GetName()); + rom.SetFieldValue(DatItem.DupeTypeKey, GetFieldValue(DatItem.DupeTypeKey)); + rom.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)!.Clone() as Machine ?? new Machine()); + rom.SetFieldValue(DatItem.RemoveKey, GetFieldValue(DatItem.RemoveKey)); + rom.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); return rom; } diff --git a/SabreTools.DatItems/Formats/DiskArea.cs b/SabreTools.DatItems/Formats/DiskArea.cs index fdf4adfa..b6462a78 100644 --- a/SabreTools.DatItems/Formats/DiskArea.cs +++ b/SabreTools.DatItems/Formats/DiskArea.cs @@ -29,10 +29,10 @@ namespace SabreTools.DatItems.Formats public DiskArea() { _internal = new Models.Metadata.DiskArea(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.DiskArea; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.DiskArea); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -41,9 +41,9 @@ namespace SabreTools.DatItems.Formats public DiskArea(Models.Metadata.DiskArea? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.DiskArea; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.DiskArea); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -55,13 +55,6 @@ namespace SabreTools.DatItems.Formats { return new DiskArea() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.DiskArea ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Display.cs b/SabreTools.DatItems/Formats/Display.cs index 14420c56..186a3667 100644 --- a/SabreTools.DatItems/Formats/Display.cs +++ b/SabreTools.DatItems/Formats/Display.cs @@ -18,9 +18,9 @@ namespace SabreTools.DatItems.Formats public Display() { _internal = new Models.Metadata.Display(); - Machine = new Machine(); - ItemType = ItemType.Display; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Display); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -29,9 +29,9 @@ namespace SabreTools.DatItems.Formats public Display(Models.Metadata.Display? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Display; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Display); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -41,9 +41,9 @@ namespace SabreTools.DatItems.Formats { // TODO: Determine what transformation is needed here _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Display; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Display); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -55,13 +55,6 @@ namespace SabreTools.DatItems.Formats { return new Display() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Display ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Driver.cs b/SabreTools.DatItems/Formats/Driver.cs index 0ecbd6e9..b4684a3a 100644 --- a/SabreTools.DatItems/Formats/Driver.cs +++ b/SabreTools.DatItems/Formats/Driver.cs @@ -21,9 +21,9 @@ namespace SabreTools.DatItems.Formats public Driver() { _internal = new Models.Metadata.Driver(); - Machine = new Machine(); - ItemType = ItemType.Driver; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Driver); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -32,9 +32,9 @@ namespace SabreTools.DatItems.Formats public Driver(Models.Metadata.Driver? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Driver; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Driver); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -46,13 +46,6 @@ namespace SabreTools.DatItems.Formats { return new Driver() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Driver ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Extension.cs b/SabreTools.DatItems/Formats/Extension.cs index 5793c14f..916cbc8e 100644 --- a/SabreTools.DatItems/Formats/Extension.cs +++ b/SabreTools.DatItems/Formats/Extension.cs @@ -28,10 +28,10 @@ namespace SabreTools.DatItems.Formats public Extension() { _internal = new Models.Metadata.Extension(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.Extension; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Extension); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -40,9 +40,9 @@ namespace SabreTools.DatItems.Formats public Extension(Models.Metadata.Extension? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Extension; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Extension); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -54,13 +54,6 @@ namespace SabreTools.DatItems.Formats { return new Extension() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Extension ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Feature.cs b/SabreTools.DatItems/Formats/Feature.cs index 3e5923dc..6350b625 100644 --- a/SabreTools.DatItems/Formats/Feature.cs +++ b/SabreTools.DatItems/Formats/Feature.cs @@ -18,9 +18,9 @@ namespace SabreTools.DatItems.Formats public Feature() { _internal = new Models.Metadata.Feature(); - Machine = new Machine(); - ItemType = ItemType.Feature; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Feature); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -29,9 +29,9 @@ namespace SabreTools.DatItems.Formats public Feature(Models.Metadata.Feature? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Feature; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Feature); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -43,13 +43,6 @@ namespace SabreTools.DatItems.Formats { return new Feature() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Feature ?? [], }; } diff --git a/SabreTools.DatItems/Formats/File.cs b/SabreTools.DatItems/Formats/File.cs index ebe2b28b..9516f776 100644 --- a/SabreTools.DatItems/Formats/File.cs +++ b/SabreTools.DatItems/Formats/File.cs @@ -100,7 +100,7 @@ namespace SabreTools.DatItems.Formats /// public File() { - ItemType = ItemType.File; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.File); } /// @@ -114,8 +114,8 @@ namespace SabreTools.DatItems.Formats _sha1 = baseFile.SHA1; _sha256 = baseFile.SHA256; - ItemType = ItemType.File; - DupeType = 0x00; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.File); + SetFieldValue(DatItem.DupeTypeKey, 0x00); } #endregion @@ -125,15 +125,8 @@ namespace SabreTools.DatItems.Formats /// public override object Clone() { - return new File() + var file = new File() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - Id = this.Id, Extension = this.Extension, Size = this.Size, @@ -143,6 +136,12 @@ namespace SabreTools.DatItems.Formats _sha256 = this._sha256, Format = this.Format, }; + file.SetFieldValue(DatItem.DupeTypeKey, GetFieldValue(DatItem.DupeTypeKey)); + file.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)!.Clone() as Machine ?? new Machine()); + file.SetFieldValue(DatItem.RemoveKey, GetFieldValue(DatItem.RemoveKey)); + file.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); + + return file; } /// @@ -152,7 +151,7 @@ namespace SabreTools.DatItems.Formats { return new BaseFile() { - Parent = this.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), + Parent = GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), CRC = this._crc, MD5 = this._md5, SHA1 = this._sha1, @@ -166,20 +165,16 @@ namespace SabreTools.DatItems.Formats /// public Rom ConvertToRom() { - var rom = new Rom() - { - ItemType = ItemType.Rom, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - }; + var rom = new Rom(); rom.SetName($"{this.Id}.{this.Extension}"); rom.SetFieldValue(Models.Metadata.Rom.CRCKey, CRC); + rom.SetFieldValue(DatItem.DupeTypeKey, GetFieldValue(DatItem.DupeTypeKey)); + rom.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)!.Clone() as Machine ?? new Machine()); rom.SetFieldValue(Models.Metadata.Rom.MD5Key, MD5); + rom.SetFieldValue(DatItem.RemoveKey, GetFieldValue(DatItem.RemoveKey)); rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, SHA1); rom.SetFieldValue(Models.Metadata.Rom.SHA256Key, SHA256); + rom.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); return rom; } @@ -194,7 +189,7 @@ namespace SabreTools.DatItems.Formats bool dupefound = false; // If we don't have a file, return false - if (ItemType != other?.ItemType) + if (GetFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetFieldValue(Models.Metadata.DatItem.TypeKey)) return dupefound; // Otherwise, treat it as a File diff --git a/SabreTools.DatItems/Formats/Info.cs b/SabreTools.DatItems/Formats/Info.cs index e29296eb..55b19728 100644 --- a/SabreTools.DatItems/Formats/Info.cs +++ b/SabreTools.DatItems/Formats/Info.cs @@ -28,10 +28,10 @@ namespace SabreTools.DatItems.Formats public Info() { _internal = new Models.Metadata.Info(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.Info; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Info); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -40,9 +40,9 @@ namespace SabreTools.DatItems.Formats public Info(Models.Metadata.Info? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Info; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Info); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -54,13 +54,6 @@ namespace SabreTools.DatItems.Formats { return new Info() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Info ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Input.cs b/SabreTools.DatItems/Formats/Input.cs index f31cf2f8..9202bf39 100644 --- a/SabreTools.DatItems/Formats/Input.cs +++ b/SabreTools.DatItems/Formats/Input.cs @@ -32,9 +32,9 @@ namespace SabreTools.DatItems.Formats public Input() { _internal = new Models.Metadata.Input(); - Machine = new Machine(); - ItemType = ItemType.Input; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Input); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -43,9 +43,9 @@ namespace SabreTools.DatItems.Formats public Input(Models.Metadata.Input? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Input; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Input); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -57,13 +57,6 @@ namespace SabreTools.DatItems.Formats { return new Input() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Input ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Instance.cs b/SabreTools.DatItems/Formats/Instance.cs index d3ab2d6a..a62315f1 100644 --- a/SabreTools.DatItems/Formats/Instance.cs +++ b/SabreTools.DatItems/Formats/Instance.cs @@ -28,10 +28,10 @@ namespace SabreTools.DatItems.Formats public Instance() { _internal = new Models.Metadata.Instance(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.Instance; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Instance); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -40,9 +40,9 @@ namespace SabreTools.DatItems.Formats public Instance(Models.Metadata.Instance? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Instance; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Instance); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -54,13 +54,6 @@ namespace SabreTools.DatItems.Formats { return new Instance() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Instance ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Media.cs b/SabreTools.DatItems/Formats/Media.cs index e767248d..4dd78629 100644 --- a/SabreTools.DatItems/Formats/Media.cs +++ b/SabreTools.DatItems/Formats/Media.cs @@ -30,11 +30,11 @@ namespace SabreTools.DatItems.Formats public Media() { _internal = new Models.Metadata.Media(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.Media; - DupeType = 0x00; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Media); + SetFieldValue(DatItem.DupeTypeKey, 0x00); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -43,10 +43,10 @@ namespace SabreTools.DatItems.Formats public Media(Models.Metadata.Media? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Media; - DupeType = 0x00; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Media); + SetFieldValue(DatItem.DupeTypeKey, 0x00); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -56,7 +56,6 @@ namespace SabreTools.DatItems.Formats public Media(BaseFile baseFile) { _internal = new Models.Metadata.Media(); - Machine = new Machine(); SetName(baseFile.Filename); SetFieldValue(Models.Metadata.Media.MD5Key, TextHelper.ByteArrayToString(baseFile.MD5)); @@ -64,8 +63,9 @@ namespace SabreTools.DatItems.Formats SetFieldValue(Models.Metadata.Media.SHA256Key, TextHelper.ByteArrayToString(baseFile.SHA256)); SetFieldValue(Models.Metadata.Media.SpamSumKey, System.Text.Encoding.UTF8.GetString(baseFile.SpamSum ?? [])); - ItemType = ItemType.Media; - DupeType = 0x00; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Media); + SetFieldValue(DatItem.DupeTypeKey, 0x00); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -77,13 +77,6 @@ namespace SabreTools.DatItems.Formats { return new Media() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Media ?? [], }; } @@ -96,7 +89,7 @@ namespace SabreTools.DatItems.Formats return new BaseFile() { Filename = this.GetName(), - Parent = this.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), + Parent = GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), MD5 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Media.MD5Key)), SHA1 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Media.SHA1Key)), SHA256 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Media.SHA256Key)), @@ -110,15 +103,11 @@ namespace SabreTools.DatItems.Formats /// public Rom ConvertToRom() { - var rom = new Rom(_internal.ConvertToRom()) - { - ItemType = ItemType.Rom, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - }; + var rom = new Rom(_internal.ConvertToRom()); + rom.SetFieldValue(DatItem.DupeTypeKey, GetFieldValue(DatItem.DupeTypeKey)); + rom.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)); + rom.SetFieldValue(DatItem.RemoveKey, GetFieldValue(DatItem.RemoveKey)); + rom.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); return rom; } diff --git a/SabreTools.DatItems/Formats/Part.cs b/SabreTools.DatItems/Formats/Part.cs index a53f26a1..faf36f18 100644 --- a/SabreTools.DatItems/Formats/Part.cs +++ b/SabreTools.DatItems/Formats/Part.cs @@ -43,10 +43,10 @@ namespace SabreTools.DatItems.Formats public Part() { _internal = new Models.Metadata.Part(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.Part; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Part); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -55,9 +55,9 @@ namespace SabreTools.DatItems.Formats public Part(Models.Metadata.Part? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Part; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Part); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -69,13 +69,6 @@ namespace SabreTools.DatItems.Formats { return new Part() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Part ?? [], }; } diff --git a/SabreTools.DatItems/Formats/PartFeature.cs b/SabreTools.DatItems/Formats/PartFeature.cs index 7aa9fdc3..e7105882 100644 --- a/SabreTools.DatItems/Formats/PartFeature.cs +++ b/SabreTools.DatItems/Formats/PartFeature.cs @@ -28,10 +28,10 @@ namespace SabreTools.DatItems.Formats public PartFeature() { _internal = new Models.Metadata.Feature(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.PartFeature; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.PartFeature); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -40,9 +40,9 @@ namespace SabreTools.DatItems.Formats public PartFeature(Models.Metadata.Feature? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.PartFeature; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.PartFeature); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -54,13 +54,6 @@ namespace SabreTools.DatItems.Formats { return new PartFeature() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Feature ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Port.cs b/SabreTools.DatItems/Formats/Port.cs index 57d7b7a2..038095da 100644 --- a/SabreTools.DatItems/Formats/Port.cs +++ b/SabreTools.DatItems/Formats/Port.cs @@ -32,9 +32,9 @@ namespace SabreTools.DatItems.Formats public Port() { _internal = new Models.Metadata.Port(); - Machine = new Machine(); - ItemType = ItemType.Port; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Port); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -43,9 +43,9 @@ namespace SabreTools.DatItems.Formats public Port(Models.Metadata.Port? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Port; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Port); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -57,13 +57,6 @@ namespace SabreTools.DatItems.Formats { return new Port() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Port ?? [], }; } diff --git a/SabreTools.DatItems/Formats/RamOption.cs b/SabreTools.DatItems/Formats/RamOption.cs index c3dd7ae6..e4145c1b 100644 --- a/SabreTools.DatItems/Formats/RamOption.cs +++ b/SabreTools.DatItems/Formats/RamOption.cs @@ -28,10 +28,10 @@ namespace SabreTools.DatItems.Formats public RamOption() { _internal = new Models.Metadata.RamOption(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.RamOption; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.RamOption); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -40,9 +40,9 @@ namespace SabreTools.DatItems.Formats public RamOption(Models.Metadata.RamOption? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.RamOption; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.RamOption); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -54,13 +54,6 @@ namespace SabreTools.DatItems.Formats { return new RamOption() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.RamOption ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Release.cs b/SabreTools.DatItems/Formats/Release.cs index 6a4eb864..c9dffd69 100644 --- a/SabreTools.DatItems/Formats/Release.cs +++ b/SabreTools.DatItems/Formats/Release.cs @@ -28,10 +28,10 @@ namespace SabreTools.DatItems.Formats public Release() { _internal = new Models.Metadata.Release(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.Release; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Release); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -40,9 +40,9 @@ namespace SabreTools.DatItems.Formats public Release(Models.Metadata.Release? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Release; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Release); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -54,13 +54,6 @@ namespace SabreTools.DatItems.Formats { return new Release() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Release ?? [], }; } diff --git a/SabreTools.DatItems/Formats/ReleaseDetails.cs b/SabreTools.DatItems/Formats/ReleaseDetails.cs index b4df93ca..389d3d2b 100644 --- a/SabreTools.DatItems/Formats/ReleaseDetails.cs +++ b/SabreTools.DatItems/Formats/ReleaseDetails.cs @@ -113,7 +113,7 @@ namespace SabreTools.DatItems.Formats /// public ReleaseDetails() { - ItemType = ItemType.ReleaseDetails; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.ReleaseDetails); } #endregion @@ -123,15 +123,8 @@ namespace SabreTools.DatItems.Formats /// public override object Clone() { - return new ReleaseDetails() + var releaseDetails = new ReleaseDetails() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - Id = this.Id, DirName = this.DirName, RomInfo = this.RomInfo, @@ -148,6 +141,13 @@ namespace SabreTools.DatItems.Formats Region = this.Region, Origin = this.Origin, }; + releaseDetails.SetFieldValue(DatItem.DupeTypeKey, GetFieldValue(DatItem.DupeTypeKey)); + releaseDetails.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)); + releaseDetails.SetFieldValue(DatItem.RemoveKey, GetFieldValue(DatItem.RemoveKey)); + releaseDetails.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); + releaseDetails.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetFieldValue(Models.Metadata.DatItem.TypeKey)); + + return releaseDetails; } #endregion @@ -158,7 +158,7 @@ namespace SabreTools.DatItems.Formats public override bool Equals(DatItem? other) { // If we don't have a Details, return false - if (ItemType != other?.ItemType) + if (GetFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetFieldValue(Models.Metadata.DatItem.TypeKey)) return false; // Otherwise, treat it as a Details diff --git a/SabreTools.DatItems/Formats/Rom.cs b/SabreTools.DatItems/Formats/Rom.cs index 8abbc343..6a87aa2b 100644 --- a/SabreTools.DatItems/Formats/Rom.cs +++ b/SabreTools.DatItems/Formats/Rom.cs @@ -1,10 +1,8 @@ -using System.Reflection; -using System.Xml.Serialization; +using System.Xml.Serialization; using Newtonsoft.Json; using SabreTools.Core; using SabreTools.Core.Tools; using SabreTools.FileTypes; -using SabreTools.Filter; namespace SabreTools.DatItems.Formats { @@ -14,6 +12,20 @@ namespace SabreTools.DatItems.Formats [JsonObject("rom"), XmlRoot("rom")] public class Rom : DatItem { + #region Constants + + /// + /// Non-standard key for inverted logic + /// + public const string DataAreaKey = "DATAAREA"; + + /// + /// Non-standard key for inverted logic + /// + public const string PartKey = "PART"; + + #endregion + #region Fields [JsonIgnore] @@ -41,7 +53,7 @@ namespace SabreTools.DatItems.Formats { get { - var dataArea = GetFieldValue("DATAAREA"); + var dataArea = GetFieldValue(Rom.DataAreaKey); return dataArea != null && (!string.IsNullOrEmpty(dataArea.GetName()) || dataArea.GetFieldValue(Models.Metadata.DataArea.SizeKey) != null @@ -55,7 +67,7 @@ namespace SabreTools.DatItems.Formats { get { - var part = GetFieldValue("PART"); + var part = GetFieldValue(Rom.PartKey); return part != null && (!string.IsNullOrEmpty(part.GetName()) || !string.IsNullOrEmpty(part.GetFieldValue(Models.Metadata.Part.InterfaceKey))); @@ -82,11 +94,11 @@ namespace SabreTools.DatItems.Formats public Rom() { _internal = new Models.Metadata.Rom(); - Machine = new Machine(); SetName(null); - ItemType = ItemType.Rom; - DupeType = 0x00; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Rom); + SetFieldValue(DatItem.DupeTypeKey, 0x00); + SetFieldValue(DatItem.MachineKey, new Machine()); SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.None); } @@ -100,13 +112,13 @@ namespace SabreTools.DatItems.Formats { _internal = new Models.Metadata.Rom(); SetName(name); - ItemType = ItemType.Rom; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Rom); SetFieldValue(Models.Metadata.Rom.SizeKey, null); SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.None); - Machine = new Machine(); - Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, machineName); - Machine.SetFieldValue(Models.Metadata.Machine.NameKey, machineName); + SetFieldValue(DatItem.MachineKey, new Machine()); + GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, machineName); + GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, machineName); } /// @@ -116,7 +128,6 @@ namespace SabreTools.DatItems.Formats public Rom(BaseFile baseFile) { _internal = new Models.Metadata.Rom(); - Machine = new Machine(); SetName(baseFile.Filename); SetFieldValue(Models.Metadata.Rom.SizeKey, baseFile.Size); @@ -128,8 +139,9 @@ namespace SabreTools.DatItems.Formats SetFieldValue(Models.Metadata.Rom.SHA512Key, TextHelper.ByteArrayToString(baseFile.SHA512)); SetFieldValue(Models.Metadata.Rom.SpamSumKey, System.Text.Encoding.UTF8.GetString(baseFile.SpamSum ?? [])); - ItemType = ItemType.Rom; - DupeType = 0x00; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Rom); + SetFieldValue(DatItem.DupeTypeKey, 0x00); + SetFieldValue(DatItem.MachineKey, new Machine()); SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.None); SetFieldValue(Models.Metadata.Rom.DateKey, baseFile.Date); } @@ -140,10 +152,9 @@ namespace SabreTools.DatItems.Formats public Rom(Models.Metadata.Rom? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Rom; - DupeType = 0x00; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Rom); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -155,13 +166,6 @@ namespace SabreTools.DatItems.Formats { return new Rom() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Rom ?? [], }; } @@ -174,7 +178,7 @@ namespace SabreTools.DatItems.Formats return new BaseFile() { Filename = GetName(), - Parent = this.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), + Parent = GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), Date = GetFieldValue(Models.Metadata.Rom.DateKey), Size = GetFieldValue(Models.Metadata.Rom.SizeKey), CRC = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Rom.CRCKey)), diff --git a/SabreTools.DatItems/Formats/Sample.cs b/SabreTools.DatItems/Formats/Sample.cs index ff455c7b..bdd937a7 100644 --- a/SabreTools.DatItems/Formats/Sample.cs +++ b/SabreTools.DatItems/Formats/Sample.cs @@ -28,10 +28,10 @@ namespace SabreTools.DatItems.Formats public Sample() { _internal = new Models.Metadata.Sample(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.Sample; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Sample); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -40,9 +40,9 @@ namespace SabreTools.DatItems.Formats public Sample(Models.Metadata.Sample? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Sample; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Sample); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -54,13 +54,6 @@ namespace SabreTools.DatItems.Formats { return new Sample() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Sample ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Serials.cs b/SabreTools.DatItems/Formats/Serials.cs index 5f35fb70..b02ddbfd 100644 --- a/SabreTools.DatItems/Formats/Serials.cs +++ b/SabreTools.DatItems/Formats/Serials.cs @@ -106,7 +106,7 @@ namespace SabreTools.DatItems.Formats /// public Serials() { - ItemType = ItemType.Serials; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Serials); } #endregion @@ -116,15 +116,8 @@ namespace SabreTools.DatItems.Formats /// public override object Clone() { - return new Serials() + var serials = new Serials() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - DigitalSerial1 = this.DigitalSerial1, DigitalSerial2 = this.DigitalSerial2, MediaSerial1 = this.MediaSerial1, @@ -140,6 +133,13 @@ namespace SabreTools.DatItems.Formats MediaStamp = this.MediaStamp, BoxBarcode = this.BoxBarcode, }; + serials.SetFieldValue(DatItem.DupeTypeKey, GetFieldValue(DatItem.DupeTypeKey)); + serials.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)); + serials.SetFieldValue(DatItem.RemoveKey, GetFieldValue(DatItem.RemoveKey)); + serials.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); + serials.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetFieldValue(Models.Metadata.DatItem.TypeKey)); + + return serials; } #endregion @@ -150,7 +150,7 @@ namespace SabreTools.DatItems.Formats public override bool Equals(DatItem? other) { // If we don't have a Serials, return false - if (ItemType != other?.ItemType) + if (GetFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetFieldValue(Models.Metadata.DatItem.TypeKey)) return false; // Otherwise, treat it as a Serials diff --git a/SabreTools.DatItems/Formats/SharedFeature.cs b/SabreTools.DatItems/Formats/SharedFeature.cs index 4315d362..c46f101b 100644 --- a/SabreTools.DatItems/Formats/SharedFeature.cs +++ b/SabreTools.DatItems/Formats/SharedFeature.cs @@ -28,10 +28,10 @@ namespace SabreTools.DatItems.Formats public SharedFeature() { _internal = new Models.Metadata.SharedFeat(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.SharedFeature; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.SharedFeature); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -40,9 +40,9 @@ namespace SabreTools.DatItems.Formats public SharedFeature(Models.Metadata.SharedFeat? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.SharedFeature; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.SharedFeature); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -54,13 +54,6 @@ namespace SabreTools.DatItems.Formats { return new SharedFeature() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.SharedFeat ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Slot.cs b/SabreTools.DatItems/Formats/Slot.cs index a92d91d6..7c898e79 100644 --- a/SabreTools.DatItems/Formats/Slot.cs +++ b/SabreTools.DatItems/Formats/Slot.cs @@ -42,10 +42,10 @@ namespace SabreTools.DatItems.Formats public Slot() { _internal = new Models.Metadata.Slot(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.Slot; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Slot); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -54,9 +54,9 @@ namespace SabreTools.DatItems.Formats public Slot(Models.Metadata.Slot? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Slot; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Slot); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -68,13 +68,6 @@ namespace SabreTools.DatItems.Formats { return new Slot() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Slot ?? [], }; } diff --git a/SabreTools.DatItems/Formats/SlotOption.cs b/SabreTools.DatItems/Formats/SlotOption.cs index f988d28a..b59f23d5 100644 --- a/SabreTools.DatItems/Formats/SlotOption.cs +++ b/SabreTools.DatItems/Formats/SlotOption.cs @@ -28,10 +28,10 @@ namespace SabreTools.DatItems.Formats public SlotOption() { _internal = new Models.Metadata.SlotOption(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.SlotOption; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.SlotOption); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -40,9 +40,9 @@ namespace SabreTools.DatItems.Formats public SlotOption(Models.Metadata.SlotOption? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.SlotOption; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.SlotOption); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -54,13 +54,6 @@ namespace SabreTools.DatItems.Formats { return new SlotOption() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.SlotOption ?? [], }; } diff --git a/SabreTools.DatItems/Formats/SoftwareList.cs b/SabreTools.DatItems/Formats/SoftwareList.cs index 5cedf811..977a1c96 100644 --- a/SabreTools.DatItems/Formats/SoftwareList.cs +++ b/SabreTools.DatItems/Formats/SoftwareList.cs @@ -31,10 +31,10 @@ namespace SabreTools.DatItems.Formats public SoftwareList() { _internal = new Models.Metadata.SoftwareList(); - Machine = new Machine(); SetName(string.Empty); - ItemType = ItemType.SoftwareList; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.SoftwareList); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -43,9 +43,9 @@ namespace SabreTools.DatItems.Formats public SoftwareList(Models.Metadata.SoftwareList? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.SoftwareList; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.SoftwareList); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -56,13 +56,6 @@ namespace SabreTools.DatItems.Formats { return new SoftwareList() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.SoftwareList ?? [], }; } diff --git a/SabreTools.DatItems/Formats/Sound.cs b/SabreTools.DatItems/Formats/Sound.cs index 54f6384b..9698b540 100644 --- a/SabreTools.DatItems/Formats/Sound.cs +++ b/SabreTools.DatItems/Formats/Sound.cs @@ -18,9 +18,9 @@ namespace SabreTools.DatItems.Formats public Sound() { _internal = new Models.Metadata.Sound(); - Machine = new Machine(); - ItemType = ItemType.Sound; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Sound); + SetFieldValue(DatItem.MachineKey, new Machine()); } /// @@ -29,9 +29,9 @@ namespace SabreTools.DatItems.Formats public Sound(Models.Metadata.Sound? item) { _internal = item ?? []; - Machine = new Machine(); - ItemType = ItemType.Sound; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.Sound); + SetFieldValue(DatItem.MachineKey, new Machine()); } #endregion @@ -43,13 +43,6 @@ namespace SabreTools.DatItems.Formats { return new Sound() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - _internal = this._internal?.Clone() as Models.Metadata.Sound ?? [], }; } diff --git a/SabreTools.DatItems/Formats/SourceDetails.cs b/SabreTools.DatItems/Formats/SourceDetails.cs index a20ff661..08bdea96 100644 --- a/SabreTools.DatItems/Formats/SourceDetails.cs +++ b/SabreTools.DatItems/Formats/SourceDetails.cs @@ -143,7 +143,7 @@ namespace SabreTools.DatItems.Formats /// public SourceDetails() { - ItemType = ItemType.SourceDetails; + SetFieldValue(Models.Metadata.DatItem.TypeKey, ItemType.SourceDetails); } #endregion @@ -153,15 +153,8 @@ namespace SabreTools.DatItems.Formats /// public override object Clone() { - return new SourceDetails() + var sourceDetails = new SourceDetails() { - ItemType = this.ItemType, - DupeType = this.DupeType, - - Machine = this.Machine.Clone() as Machine ?? new Machine(), - Source = this.Source?.Clone() as Source, - Remove = this.Remove, - Id = this.Id, Section = this.Section, RomInfo = this.RomInfo, @@ -183,6 +176,13 @@ namespace SabreTools.DatItems.Formats Link2 = this.Link2, Link3 = this.Link3, }; + sourceDetails.SetFieldValue(DatItem.DupeTypeKey, GetFieldValue(DatItem.DupeTypeKey)); + sourceDetails.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)); + sourceDetails.SetFieldValue(DatItem.RemoveKey, GetFieldValue(DatItem.RemoveKey)); + sourceDetails.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); + sourceDetails.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetFieldValue(Models.Metadata.DatItem.TypeKey)); + + return sourceDetails; } #endregion @@ -193,7 +193,7 @@ namespace SabreTools.DatItems.Formats public override bool Equals(DatItem? other) { // If we don't have a SourceDetails, return false - if (ItemType != other?.ItemType) + if (GetFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetFieldValue(Models.Metadata.DatItem.TypeKey)) return false; // Otherwise, treat it as a SourceDetails diff --git a/SabreTools.DatItems/Machine.cs b/SabreTools.DatItems/Machine.cs index 59ec292c..13f20912 100644 --- a/SabreTools.DatItems/Machine.cs +++ b/SabreTools.DatItems/Machine.cs @@ -12,6 +12,25 @@ namespace SabreTools.DatItems [JsonObject("machine"), XmlRoot("machine")] public class Machine : ICloneable { + #region Constants + + /// + /// Trurip/EmuArc Machine developer + /// + public const string DeveloperKey = "DEVELOPER"; + + /// + /// Trurip/EmuArc Game genre + /// + public const string GenreKey = "GENRE"; + + /// + /// Trurip/EmuArc Title ID + /// + public const string TitleIDKey = "TITLEID"; + + #endregion + #region Fields // TODO: Should this be a separate object for TruRip? diff --git a/SabreTools.DatTools/DatFileTool.cs b/SabreTools.DatTools/DatFileTool.cs index 91e2e475..e86e4708 100644 --- a/SabreTools.DatTools/DatFileTool.cs +++ b/SabreTools.DatTools/DatFileTool.cs @@ -55,11 +55,11 @@ namespace SabreTools.DatTools foreach (DatItem item in items) { DatItem newItem = item; - if (newItem.Source == null) + if (newItem.GetFieldValue(DatItem.SourceKey) == null) continue; - string filename = inputs[newItem.Source.Index].CurrentPath; - string? rootpath = inputs[newItem.Source.Index].ParentPath; + string filename = inputs[newItem.GetFieldValue(DatItem.SourceKey)!.Index].CurrentPath; + string? rootpath = inputs[newItem.GetFieldValue(DatItem.SourceKey)!.Index].ParentPath; if (!string.IsNullOrEmpty(rootpath) #if NETFRAMEWORK @@ -74,9 +74,9 @@ namespace SabreTools.DatTools } filename = filename.Remove(0, rootpath?.Length ?? 0); - newItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, Path.GetDirectoryName(filename) + Path.DirectorySeparatorChar + newItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, Path.GetDirectoryName(filename) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(filename) + Path.DirectorySeparatorChar - + newItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); + + newItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); newItems.Add(newItem); } @@ -189,7 +189,7 @@ namespace SabreTools.DatTools continue; if (datFile.Items.ContainsKey(key) && list.Count > 0) - Replacer.ReplaceFields(newDatItem.Machine, list[0].Machine, machineFieldNames, onlySame); + Replacer.ReplaceFields(newDatItem.GetFieldValue(DatItem.MachineKey)!, list[index: 0].GetFieldValue(DatItem.MachineKey)!, machineFieldNames, onlySame); newDatItems.Add(newDatItem); } @@ -421,16 +421,16 @@ namespace SabreTools.DatTools foreach (DatItem item in items) { #if NETFRAMEWORK - if ((item.DupeType & DupeType.External) != 0) + if ((item.GetFieldValue(DatItem.DupeTypeKey) & DupeType.External) != 0) #else - if (item.DupeType.HasFlag(DupeType.External)) + if (item.GetFieldValue(DatItem.DupeTypeKey).HasFlag(DupeType.External)) #endif { if (item.Clone() is not DatItem newrom) continue; - if (item.Source != null) - newrom.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, newrom.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) + $" ({Path.GetFileNameWithoutExtension(inputs[item.Source.Index].CurrentPath)})"); + if (item.GetFieldValue(DatItem.SourceKey) != null) + newrom.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, newrom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) + $" ({Path.GetFileNameWithoutExtension(inputs[item.GetFieldValue(DatItem.SourceKey)!.Index].CurrentPath)})"); dupeData.Items.Add(key, newrom); } @@ -529,15 +529,15 @@ namespace SabreTools.DatTools // Loop through and add the items correctly foreach (DatItem item in items) { - if (item.Source == null) + if (item.GetFieldValue(DatItem.SourceKey) == null) continue; #if NETFRAMEWORK - if ((item.DupeType & DupeType.Internal) != 0 || item.DupeType == 0x00) + if ((item.GetFieldValue(DatItem.DupeTypeKey) & DupeType.Internal) != 0 || item.GetFieldValue(DatItem.DupeTypeKey) == 0x00) #else - if (item.DupeType.HasFlag(DupeType.Internal) || item.DupeType == 0x00) + if (item.GetFieldValue(DatItem.DupeTypeKey).HasFlag(DupeType.Internal) || item.GetFieldValue(DatItem.DupeTypeKey) == 0x00) #endif - outDats[item.Source.Index].Items.Add(key, item); + outDats[item.GetFieldValue(DatItem.SourceKey)!.Index].Items.Add(key, item); } #if NET40_OR_GREATER || NETCOREAPP }); @@ -614,15 +614,15 @@ namespace SabreTools.DatTools foreach (DatItem item in items) { #if NETFRAMEWORK - if ((item.DupeType & DupeType.Internal) != 0 || item.DupeType == 0x00) + if ((item.GetFieldValue(DatItem.DupeTypeKey) & DupeType.Internal) != 0 || item.GetFieldValue(DatItem.DupeTypeKey) == 0x00) #else - if (item.DupeType.HasFlag(DupeType.Internal) || item.DupeType == 0x00) + if (item.GetFieldValue(DatItem.DupeTypeKey).HasFlag(DupeType.Internal) || item.GetFieldValue(DatItem.DupeTypeKey) == 0x00) #endif { - if (item.Clone() is not DatItem newrom || newrom.Source == null) + if (item.Clone() is not DatItem newrom || newrom.GetFieldValue(DatItem.SourceKey) == null) continue; - newrom.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, newrom.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) + $" ({Path.GetFileNameWithoutExtension(inputs[newrom.Source.Index].CurrentPath)})"); + newrom.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, newrom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) + $" ({Path.GetFileNameWithoutExtension(inputs[newrom.GetFieldValue(DatItem.SourceKey)!.Index].CurrentPath)})"); outerDiffData.Items.Add(key, newrom); } } @@ -747,7 +747,7 @@ namespace SabreTools.DatTools foreach (DatItem item in items) { - if (item.Source != null && item.Source.Index == index) + if (item.GetFieldValue(DatItem.SourceKey) != null && item.GetFieldValue(DatItem.SourceKey)!.Index == index) indexDat.Items.Add(key, item); } #if NET40_OR_GREATER || NETCOREAPP diff --git a/SabreTools.DatTools/DatFromDir.cs b/SabreTools.DatTools/DatFromDir.cs index b8d0a516..db50e643 100644 --- a/SabreTools.DatTools/DatFromDir.cs +++ b/SabreTools.DatTools/DatFromDir.cs @@ -402,7 +402,7 @@ namespace SabreTools.DatTools { // If we didn't get an accepted parsed type somehow, cancel out List parsed = [ItemType.Disk, ItemType.File, ItemType.Media, ItemType.Rom]; - if (!parsed.Contains(datItem.ItemType)) + if (!parsed.Contains(datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey))) return; try @@ -493,17 +493,17 @@ namespace SabreTools.DatTools } // Update machine information - datItem.Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, machineName); - datItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, machineName); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, machineName); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, machineName); // If we have a Disk, then the ".chd" extension needs to be removed - if (datItem.ItemType == ItemType.Disk && itemName!.EndsWith(".chd")) + if (datItem is Disk && itemName!.EndsWith(".chd")) { itemName = itemName.Substring(0, itemName.Length - 4); } // If we have a Media, then the extension needs to be removed - else if (datItem.ItemType == ItemType.Media) + else if (datItem is Media) { if (itemName!.EndsWith(".dicf")) itemName = itemName.Substring(0, itemName.Length - 5); diff --git a/SabreTools.DatTools/Rebuilder.cs b/SabreTools.DatTools/Rebuilder.cs index 1535d1e7..d7d47e7d 100644 --- a/SabreTools.DatTools/Rebuilder.cs +++ b/SabreTools.DatTools/Rebuilder.cs @@ -157,11 +157,11 @@ namespace SabreTools.DatTools // Otherwise, we rebuild that file to all locations that we need to bool usedInternally; - if (items[0].ItemType == ItemType.Disk) + if (items[0].GetFieldValue(Models.Metadata.DatItem.TypeKey) == ItemType.Disk) usedInternally = RebuildIndividualFile(datFile, new Disk(fileinfo), foundpath, outDir, date, inverse, outputFormat, isZip: false); - else if (items[0].ItemType == ItemType.File) + else if (items[0].GetFieldValue(Models.Metadata.DatItem.TypeKey) == ItemType.File) usedInternally = RebuildIndividualFile(datFile, new DatItems.Formats.File(fileinfo), foundpath, outDir, date, inverse, outputFormat, isZip: false); - else if (items[0].ItemType == ItemType.Media) + else if (items[0].GetFieldValue(Models.Metadata.DatItem.TypeKey) == ItemType.Media) usedInternally = RebuildIndividualFile(datFile, new Media(fileinfo), foundpath, outDir, date, inverse, outputFormat, isZip: false); else usedInternally = RebuildIndividualFile(datFile, new Rom(fileinfo), foundpath, outDir, date, inverse, outputFormat, isZip: false); @@ -389,7 +389,7 @@ namespace SabreTools.DatTools bool rebuilt = false; // If the DatItem is a Disk or Media, force rebuilding to a folder except if TGZ or TXZ - if ((datItem.ItemType == ItemType.Disk || datItem.ItemType == ItemType.Media) + if ((datItem is Disk || datItem is Media) && !(outputFormat == OutputFormat.TorrentGzip || outputFormat == OutputFormat.TorrentGzipRomba) && !(outputFormat == OutputFormat.TorrentXZ || outputFormat == OutputFormat.TorrentXZRomba)) { @@ -422,7 +422,7 @@ namespace SabreTools.DatTools if (RebuildTorrentXz(datFile, datItem, file, outDir, outputFormat, isZip)) return true; - logger.User($"{(inverse ? "No matches" : "Matches")} found for '{Path.GetFileName(datItem.GetName() ?? datItem.ItemType.ToString())}', rebuilding accordingly..."); + logger.User($"{(inverse ? "No matches" : "Matches")} found for '{Path.GetFileName(datItem.GetName() ?? datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey).ToString())}', rebuilding accordingly..."); rebuilt = true; // Special case for partial packing mode @@ -437,11 +437,11 @@ namespace SabreTools.DatTools foreach (DatItem item in dupes) { // If we don't have a proper machine - if (item.Machine?.GetFieldValue(Models.Metadata.Machine.NameKey) == null || !datFile.Items.ContainsKey(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!)) + if (item.GetFieldValue(DatItem.MachineKey)!?.GetFieldValue(Models.Metadata.Machine.NameKey) == null || !datFile.Items.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!)) continue; // If we should check for the items in the machine - var items = datFile.Items[item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!]; + var items = datFile.Items[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!]; if (shouldCheck && items!.Count > 1) outputFormat = OutputFormat.Folder; else if (shouldCheck && items!.Count == 1) @@ -478,7 +478,7 @@ namespace SabreTools.DatTools // If we have duplicates and we're not filtering if (ShouldRebuild(datFile, headerless, transformStream, false, out dupes)) { - logger.User($"Headerless matches found for '{Path.GetFileName(datItem.GetName() ?? datItem.ItemType.ToString())}', rebuilding accordingly..."); + logger.User($"Headerless matches found for '{Path.GetFileName(datItem.GetName() ?? datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey).ToString())}', rebuilding accordingly..."); rebuilt = true; // Now loop through the list and rebuild accordingly @@ -547,14 +547,14 @@ namespace SabreTools.DatTools // Get the item from the current file Rom item = new(BaseFile.GetInfo(stream, keepReadOpen: true)); - item.Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, Path.GetFileNameWithoutExtension(item.GetName())); - item.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, Path.GetFileNameWithoutExtension(item.GetName())); + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, Path.GetFileNameWithoutExtension(item.GetName())); + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, Path.GetFileNameWithoutExtension(item.GetName())); // If we are coming from an archive, set the correct machine name if (machinename != null) { - item.Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, machinename); - item.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, machinename); + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, machinename); + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, machinename); } dupes.Add(item); @@ -678,7 +678,7 @@ namespace SabreTools.DatTools { BaseArchive? archive = BaseArchive.Create(file); if (archive != null) - (stream, _) = archive.CopyToStream(datItem.GetName() ?? datItem.ItemType.ToString()); + (stream, _) = archive.CopyToStream(datItem.GetName() ?? datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey).ToString()); } // Otherwise, just open the filestream else diff --git a/SabreTools.DatTools/Splitter.cs b/SabreTools.DatTools/Splitter.cs index 0bc1775d..4ac661de 100644 --- a/SabreTools.DatTools/Splitter.cs +++ b/SabreTools.DatTools/Splitter.cs @@ -181,60 +181,53 @@ namespace SabreTools.DatTools foreach (DatItem item in items) { // If the file is not a Disk, Media, or Rom, continue - if (item.ItemType != ItemType.Disk && item.ItemType != ItemType.Media && item.ItemType != ItemType.Rom) - continue; - - // If the file is a nodump - if ((item.ItemType == ItemType.Rom && (item as Rom)!.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump) - || (item.ItemType == ItemType.Disk && (item as Disk)!.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump)) + switch (item) { - fieldDats[Models.Metadata.Rom.StatusKey].Items.Add(key, item); - } + case Disk disk: + if (disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump) + fieldDats[Models.Metadata.Disk.StatusKey].Items.Add(key, item); + else if (!string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key))) + fieldDats[Models.Metadata.Disk.SHA1Key].Items.Add(key, item); + else if (!string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key))) + fieldDats[Models.Metadata.Disk.MD5Key].Items.Add(key, item); + else if (!string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key))) + fieldDats[Models.Metadata.Disk.MD5Key].Items.Add(key, item); + else + fieldDats["null"].Items.Add(key, item); + break; - // If the file has a SHA-512 - else if ((item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.GetFieldValue(Models.Metadata.Rom.SHA512Key)))) - { - fieldDats[Models.Metadata.Rom.SHA512Key].Items.Add(key, item); - } + case Media media: + if (!string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA256Key))) + fieldDats[Models.Metadata.Media.SHA256Key].Items.Add(key, item); + else if (!string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA1Key))) + fieldDats[Models.Metadata.Media.SHA1Key].Items.Add(key, item); + else if (!string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.MD5Key))) + fieldDats[Models.Metadata.Media.MD5Key].Items.Add(key, item); + else + fieldDats["null"].Items.Add(key, item); + break; - // If the file has a SHA-384 - else if ((item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.GetFieldValue(Models.Metadata.Rom.SHA384Key)))) - { - fieldDats[Models.Metadata.Rom.SHA384Key].Items.Add(key, item); - } + case Rom rom: + if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump) + fieldDats[Models.Metadata.Rom.StatusKey].Items.Add(key, item); + else if (!string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA512Key))) + fieldDats[Models.Metadata.Rom.SHA512Key].Items.Add(key, item); + else if (!string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA384Key))) + fieldDats[Models.Metadata.Rom.SHA384Key].Items.Add(key, item); + else if (!string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA256Key))) + fieldDats[Models.Metadata.Rom.SHA256Key].Items.Add(key, item); + else if (!string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key))) + fieldDats[Models.Metadata.Rom.SHA1Key].Items.Add(key, item); + else if (!string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key))) + fieldDats[Models.Metadata.Rom.MD5Key].Items.Add(key, item); + else if (!string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey))) + fieldDats[Models.Metadata.Rom.CRCKey].Items.Add(key, item); + else + fieldDats["null"].Items.Add(key, item); + break; - // If the file has a SHA-256 - else if ((item.ItemType == ItemType.Media && !string.IsNullOrEmpty((item as Media)!.GetFieldValue(Models.Metadata.Media.SHA256Key))) - || (item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.GetFieldValue(Models.Metadata.Rom.SHA256Key)))) - { - fieldDats[Models.Metadata.Rom.SHA256Key].Items.Add(key, item); - } - - // If the file has a SHA-1 - else if ((item.ItemType == ItemType.Disk && !string.IsNullOrEmpty((item as Disk)!.GetFieldValue(Models.Metadata.Disk.SHA1Key))) - || (item.ItemType == ItemType.Media && !string.IsNullOrEmpty((item as Media)!.GetFieldValue(Models.Metadata.Media.SHA1Key))) - || (item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.GetFieldValue(Models.Metadata.Rom.SHA1Key)))) - { - fieldDats[Models.Metadata.Rom.SHA1Key].Items.Add(key, item); - } - - // If the file has an MD5 - else if ((item.ItemType == ItemType.Disk && !string.IsNullOrEmpty((item as Disk)!.GetFieldValue(Models.Metadata.Disk.MD5Key))) - || (item.ItemType == ItemType.Media && !string.IsNullOrEmpty((item as Media)!.GetFieldValue(Models.Metadata.Media.MD5Key))) - || (item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.GetFieldValue(Models.Metadata.Rom.MD5Key)))) - { - fieldDats[Models.Metadata.Rom.MD5Key].Items.Add(key, item); - } - - // If the file has a CRC - else if ((item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.GetFieldValue(Models.Metadata.Rom.CRCKey)))) - { - fieldDats[Models.Metadata.Rom.CRCKey].Items.Add(key, item); - } - - else - { - fieldDats["null"].Items.Add(key, item); + default: + continue; } } #if NET40_OR_GREATER || NETCOREAPP @@ -295,8 +288,8 @@ namespace SabreTools.DatTools #else continue; #endif - items.ForEach(item => item.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, Path.GetFileName(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)))); - items.ForEach(item => item.Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, Path.GetFileName(item.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey)))); + items.ForEach(item => item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, Path.GetFileName(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)))); + items.ForEach(item => item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, Path.GetFileName(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)))); // Now add the game to the output DAT tempDat.Items.AddRange(key, items); @@ -411,19 +404,19 @@ namespace SabreTools.DatTools foreach (DatItem item in items) { // If the file is not a Rom, it automatically goes in the "lesser" dat - if (item.ItemType != ItemType.Rom) + if (item is not Rom rom) lessThan.Items.Add(key, item); // If the file is a Rom and has no size, put it in the "lesser" dat - else if (item.ItemType == ItemType.Rom && (item as Rom)!.GetFieldValue(Models.Metadata.Rom.SizeKey) == null) + else if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null) lessThan.Items.Add(key, item); // If the file is a Rom and less than the radix, put it in the "lesser" dat - else if (item.ItemType == ItemType.Rom && (item as Rom)!.GetFieldValue(Models.Metadata.Rom.SizeKey) < radix) + else if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) < radix) lessThan.Items.Add(key, item); // If the file is a Rom and greater than or equal to the radix, put it in the "greater" dat - else if (item.ItemType == ItemType.Rom && (item as Rom)!.GetFieldValue(Models.Metadata.Rom.SizeKey) >= radix) + else if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) >= radix) greaterThan.Items.Add(key, item); } #if NET40_OR_GREATER || NETCOREAPP @@ -607,7 +600,7 @@ namespace SabreTools.DatTools foreach (DatItem item in items) { - if (item.ItemType == itemType) + if (item.GetFieldValue(Models.Metadata.DatItem.TypeKey) == itemType) indexDat.Items.Add(key, item); } #if NET40_OR_GREATER || NETCOREAPP diff --git a/SabreTools.DatTools/Verification.cs b/SabreTools.DatTools/Verification.cs index 7ac7fd71..7e387815 100644 --- a/SabreTools.DatTools/Verification.cs +++ b/SabreTools.DatTools/Verification.cs @@ -142,8 +142,8 @@ namespace SabreTools.DatTools for (int i = 0; i < items.Count; i++) { // Unmatched items will have a source ID of int.MaxValue, remove all others - if (items[i].Source?.Index != int.MaxValue) - items[i].Remove = true; + if (items[i].GetFieldValue(DatItem.SourceKey)?.Index != int.MaxValue) + items[i].SetFieldValue(DatItem.RemoveKey, true); } // Set the list back, just in case diff --git a/SabreTools.Filtering/Cleaner.cs b/SabreTools.Filtering/Cleaner.cs index 937ee2cf..414a0219 100644 --- a/SabreTools.Filtering/Cleaner.cs +++ b/SabreTools.Filtering/Cleaner.cs @@ -195,27 +195,27 @@ namespace SabreTools.Filtering // If we're stripping unicode characters, strip machine name and description if (RemoveUnicode) { - datItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, TextHelper.RemoveUnicodeCharacters(datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey))); - datItem.Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, TextHelper.RemoveUnicodeCharacters(datItem.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey))); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, TextHelper.RemoveUnicodeCharacters(datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey))); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, TextHelper.RemoveUnicodeCharacters(datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey))); datItem.SetName(TextHelper.RemoveUnicodeCharacters(datItem.GetName())); } // If we're in cleaning mode, sanitize machine name and description if (Clean) { - datItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, TextHelper.NormalizeCharacters(datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey))); - datItem.Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, TextHelper.NormalizeCharacters(datItem.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey))); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, TextHelper.NormalizeCharacters(datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey))); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, TextHelper.NormalizeCharacters(datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey))); } // If we are in single game mode, rename the machine if (Single) - datItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, "!"); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, "!"); // If we are in NTFS trim mode, trim the item name if (Trim && datItem.GetName() != null) { // Windows max name length is 260 - int usableLength = 260 - datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!.Length - (Root?.Length ?? 0); + int usableLength = 260 - datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!.Length - (Root?.Length ?? 0); if (datItem.GetName()!.Length > usableLength) { string ext = Path.GetExtension(datItem.GetName()!); @@ -261,9 +261,9 @@ namespace SabreTools.Filtering { // If the key mapping doesn't exist, add it #if NET40_OR_GREATER || NETCOREAPP - mapping.TryAdd(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!, item.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey)!.Replace('/', '_').Replace("\"", "''").Replace(":", " -")); + mapping.TryAdd(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!, item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)!.Replace('/', '_').Replace("\"", "''").Replace(":", " -")); #else - mapping[item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!] = item.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey)!.Replace('/', '_').Replace("\"", "''").Replace(":", " -"); + mapping[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!] = item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)!.Replace('/', '_').Replace("\"", "''").Replace(":", " -"); #endif } #if NET40_OR_GREATER || NETCOREAPP @@ -293,20 +293,20 @@ namespace SabreTools.Filtering foreach (DatItem item in items) { // Update machine name - if (!string.IsNullOrEmpty(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)) && mapping.ContainsKey(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!)) - item.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, mapping[item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!]); + if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)) && mapping.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!)) + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, value: mapping[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!]); // Update cloneof - if (!string.IsNullOrEmpty(item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey)) && mapping.ContainsKey(item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!)) - item.Machine.SetFieldValue(Models.Metadata.Machine.CloneOfKey, mapping[item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!]); + if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey)) && mapping.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!)) + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.CloneOfKey, mapping[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!]); // Update romof - if (!string.IsNullOrEmpty(item.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey)) && mapping.ContainsKey(item.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey)!)) - item.Machine.SetFieldValue(Models.Metadata.Machine.RomOfKey, mapping[item.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey)!]); + if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey)) && mapping.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey)!)) + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.RomOfKey, mapping[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey)!]); // Update sampleof - if (!string.IsNullOrEmpty(item.Machine.GetFieldValue(Models.Metadata.Machine.SampleOfKey)) && mapping.ContainsKey(item.Machine.GetFieldValue(Models.Metadata.Machine.SampleOfKey)!)) - item.Machine.SetFieldValue(Models.Metadata.Machine.SampleOfKey, mapping[item.Machine.GetFieldValue(Models.Metadata.Machine.SampleOfKey)!]); + if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.SampleOfKey)) && mapping.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.SampleOfKey)!)) + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.SampleOfKey, mapping[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.SampleOfKey)!]); // Add the new item to the output list newItems.Add(item); @@ -356,30 +356,30 @@ namespace SabreTools.Filtering DatItem item = datFile.Items[key]![0]; // Match on CloneOf first - if (!string.IsNullOrEmpty(item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey))) + if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey))) { - if (!parents.ContainsKey(item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant())) - parents.Add(item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant(), []); + if (!parents.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant())) + parents.Add(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant(), []); - parents[item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant()].Add(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()); + parents[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant()].Add(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()); } // Then by RomOf - else if (!string.IsNullOrEmpty(item.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey))) + else if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey))) { - if (!parents.ContainsKey(item.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant())) - parents.Add(item.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant(), []); + if (!parents.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant())) + parents.Add(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant(), []); - parents[item.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant()].Add(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()); + parents[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant()].Add(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()); } // Otherwise, treat it as a parent else { - if (!parents.ContainsKey(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant())) - parents.Add(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant(), []); + if (!parents.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant())) + parents.Add(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant(), []); - parents[item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()].Add(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()); + parents[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()].Add(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()); } } @@ -458,9 +458,9 @@ namespace SabreTools.Filtering string[] splitname = datItem.GetName()!.Split('.'); #if NET20 || NET35 - datItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) + $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1).ToArray())}"); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) + $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1).ToArray())}"); #else - datItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) + $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1))}"); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) + $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1))}"); #endif datItem.SetName(Path.GetFileName(datItem.GetName())); } @@ -497,11 +497,11 @@ namespace SabreTools.Filtering for (int j = 0; j < items.Count; j++) { DatItem item = items[j]; - if (Regex.IsMatch(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!, pattern)) - item.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, Regex.Replace(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!, pattern, "$2")); + if (Regex.IsMatch(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!, pattern)) + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, Regex.Replace(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!, pattern, "$2")); - if (Regex.IsMatch(item.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey)!, pattern)) - item.Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, Regex.Replace(item.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey)!, pattern, "$2")); + if (Regex.IsMatch(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)!, pattern)) + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, Regex.Replace(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)!, pattern, "$2")); items[j] = item; } diff --git a/SabreTools.Filtering/ExtraIni.cs b/SabreTools.Filtering/ExtraIni.cs index 6ccc0a1c..9c0a33cd 100644 --- a/SabreTools.Filtering/ExtraIni.cs +++ b/SabreTools.Filtering/ExtraIni.cs @@ -125,7 +125,7 @@ namespace SabreTools.Filtering // Loop through and set the fields accordingly foreach (var datItem in datItems) { - setter.SetFields(datItem.Machine); + setter.SetFields(datItem.GetFieldValue(DatItem.MachineKey)); setter.SetFields(datItem); } } diff --git a/SabreTools.Filtering/Remover.cs b/SabreTools.Filtering/Remover.cs index 9b84bf61..82241162 100644 --- a/SabreTools.Filtering/Remover.cs +++ b/SabreTools.Filtering/Remover.cs @@ -219,15 +219,15 @@ namespace SabreTools.Filtering #region Common // Handle Machine fields - if (MachineFieldNames.Any() && datItem.Machine != null) - RemoveFields(datItem.Machine); + if (MachineFieldNames.Any() && datItem.GetFieldValue(DatItem.MachineKey) != null) + RemoveFields(datItem.GetFieldValue(DatItem.MachineKey)); // If there are no field names, return if (ItemFieldNames == null || !ItemFieldNames.Any()) return; // If there are no field names for this type or generic, return - string? itemType = datItem.ItemType.AsStringValue(); + string? itemType = datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey).AsStringValue(); if (itemType == null || (!ItemFieldNames.ContainsKey(itemType) && !ItemFieldNames.ContainsKey("item"))) return; @@ -388,7 +388,7 @@ namespace SabreTools.Filtering } if (dipSwitch.PartSpecified) - RemoveFields(dipSwitch.GetFieldValue("PART")! as DatItem); + RemoveFields(dipSwitch.GetFieldValue(DipSwitch.PartKey)! as DatItem); } /// @@ -413,10 +413,10 @@ namespace SabreTools.Filtering private void RemoveFields(Disk disk) { if (disk.DiskAreaSpecified) - RemoveFields(disk.GetFieldValue("DISKAREA")! as DatItem); + RemoveFields(disk.GetFieldValue(Disk.DiskAreaKey)! as DatItem); if (disk.PartSpecified) - RemoveFields(disk.GetFieldValue("PART")! as DatItem); + RemoveFields(disk.GetFieldValue(Disk.PartKey)! as DatItem); } /// @@ -471,10 +471,10 @@ namespace SabreTools.Filtering private void RemoveFields(Rom rom) { if (rom.DataAreaSpecified) - RemoveFields(rom.GetFieldValue("DATAAREA")!); + RemoveFields(rom.GetFieldValue(Rom.DataAreaKey)!); if (rom.PartSpecified) - RemoveFields(rom.GetFieldValue("PART")! as DatItem); + RemoveFields(rom.GetFieldValue(Rom.PartKey)! as DatItem); } /// diff --git a/SabreTools.Filtering/Replacer.cs b/SabreTools.Filtering/Replacer.cs index 8af21710..cd0c4fc3 100644 --- a/SabreTools.Filtering/Replacer.cs +++ b/SabreTools.Filtering/Replacer.cs @@ -55,11 +55,11 @@ namespace SabreTools.Filtering #region Common - if (datItem.ItemType != repDatItem.ItemType) + if (datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey) != repDatItem.GetFieldValue(Models.Metadata.DatItem.TypeKey)) return; // If there are no field names for this type or generic, return - string? itemType = datItem.ItemType.AsStringValue(); + string? itemType = datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey).AsStringValue(); if (itemType == null || (!itemFieldNames.ContainsKey(itemType) && !itemFieldNames.ContainsKey("item"))) return; diff --git a/SabreTools.Filtering/Splitter.cs b/SabreTools.Filtering/Splitter.cs index df128e14..e84b762c 100644 --- a/SabreTools.Filtering/Splitter.cs +++ b/SabreTools.Filtering/Splitter.cs @@ -246,8 +246,8 @@ namespace SabreTools.Filtering // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrEmpty(items[0].Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey))) - parent = items[0].Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey); + if (!string.IsNullOrEmpty(items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey))) + parent = items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey); // If the parent doesnt exist, we want to continue if (string.IsNullOrEmpty(parent)) @@ -290,12 +290,12 @@ namespace SabreTools.Filtering continue; // If the machine (is/is not) a device, we want to continue - if (dev ^ (datFile.Items[machine]![0].Machine.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true)) + if (dev ^ (datFile.Items[machine]![0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true)) continue; // Get all device reference names from the current machine List deviceReferences = datFile.Items[machine]! - .Where(i => i.ItemType == ItemType.DeviceReference) + .Where(i => i is DeviceReference) .Select(i => i as DeviceReference) .Select(dr => dr!.GetName()) .Distinct() @@ -303,7 +303,7 @@ namespace SabreTools.Filtering // Get all slot option names from the current machine List slotOptions = datFile.Items[machine]! - .Where(i => i.ItemType == ItemType.Slot) + .Where(i => i is Slot) .Select(i => i as Slot) .Where(s => s!.SlotOptionsSpecified) .SelectMany(s => s!.GetFieldValue(Models.Metadata.Slot.SlotOptionKey)!) @@ -328,7 +328,7 @@ namespace SabreTools.Filtering continue; newDeviceReferences.AddRange(devItems - .Where(i => i.ItemType == ItemType.DeviceReference) + .Where(i => i is DeviceReference) .Select(i => (i as DeviceReference)!.GetName()!)); // Set new machine information and add to the current machine @@ -336,7 +336,7 @@ namespace SabreTools.Filtering foreach (DatItem item in devItems) { // If the parent machine doesn't already contain this item, add it - if (!datFile.Items[machine]!.Any(i => i.ItemType == item.ItemType && i.GetName() == item.GetName())) + if (!datFile.Items[machine]!.Any(i => i.GetFieldValue(Models.Metadata.DatItem.TypeKey) == item.GetFieldValue(Models.Metadata.DatItem.TypeKey) && i.GetName() == item.GetName())) { // Set that we found new items foundnew = true; @@ -378,7 +378,7 @@ namespace SabreTools.Filtering continue; newSlotOptions.AddRange(slotItems - .Where(i => i.ItemType == ItemType.Slot) + .Where(i => i is Slot) .Where(s => (s as Slot)!.SlotOptionsSpecified) .SelectMany(s => (s as Slot)!.GetFieldValue(Models.Metadata.Slot.SlotOptionKey)!) .Select(o => o.GetFieldValue(Models.Metadata.SlotOption.DevNameKey)!)); @@ -388,7 +388,7 @@ namespace SabreTools.Filtering foreach (DatItem item in slotItems) { // If the parent machine doesn't already contain this item, add it - if (!datFile.Items[machine]!.Any(i => i.ItemType == item.ItemType && i.GetName() == item.GetName())) + if (!datFile.Items[machine]!.Any(i => i.GetFieldValue(Models.Metadata.DatItem.TypeKey) == item.GetFieldValue(Models.Metadata.DatItem.TypeKey) && i.GetName() == item.GetName())) { // Set that we found new items foundnew = true; @@ -437,8 +437,8 @@ namespace SabreTools.Filtering // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrEmpty(items[0].Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey))) - parent = items[0].Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey); + if (!string.IsNullOrEmpty(items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey))) + parent = items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey); // If the parent doesnt exist, we want to continue if (string.IsNullOrEmpty(parent)) @@ -464,10 +464,10 @@ namespace SabreTools.Filtering // Now we want to get the parent romof tag and put it in each of the items items = datFile.Items[game]; - string? romof = datFile.Items[parent!]![0].Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey); + string? romof = datFile.Items[parent!]![0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey); foreach (DatItem item in items!) { - item.Machine.SetFieldValue(Models.Metadata.Machine.RomOfKey, romof); + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.RomOfKey, romof); } } } @@ -490,8 +490,8 @@ namespace SabreTools.Filtering // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrEmpty(items[0].Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey))) - parent = items[0].Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey); + if (!string.IsNullOrEmpty(items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey))) + parent = items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey); // If there is no parent, then we continue if (string.IsNullOrEmpty(parent)) @@ -502,8 +502,8 @@ namespace SabreTools.Filtering if (datFile.Items[parent!]!.Count == 0) { copyFrom = new Rom(); - copyFrom.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, parent); - copyFrom.Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, parent); + copyFrom.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, parent); + copyFrom.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, parent); } else { @@ -514,19 +514,22 @@ namespace SabreTools.Filtering foreach (DatItem item in items!) { // Special disk handling - if (item.ItemType == ItemType.Disk) + if (item is Disk disk) { - Disk disk = (item as Disk)!; string? mergeTag = disk.GetFieldValue(Models.Metadata.Disk.MergeKey); // If the merge tag exists and the parent already contains it, skip - if (mergeTag != null && datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Disk).Select(i => (i as Disk)!.GetName()).Contains(mergeTag)) + if (mergeTag != null && datFile.Items[parent!]! + .Where(i => i is Disk) + .Select(i => (i as Disk)!.GetName()).Contains(mergeTag)) { continue; } // If the merge tag exists but the parent doesn't contain it, add to parent - else if (mergeTag != null && !datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Disk).Select(i => (i as Disk)!.GetName()).Contains(mergeTag)) + else if (mergeTag != null && !datFile.Items[parent!]! + .Where(i => i is Disk) + .Select(i => (i as Disk)!.GetName()).Contains(mergeTag)) { disk.CopyMachineInformation(copyFrom); datFile.Items.Add(parent!, disk); @@ -541,21 +544,23 @@ namespace SabreTools.Filtering } // Special rom handling - else if (item.ItemType == ItemType.Rom) + else if (item is Rom rom) { - Rom rom = (item as Rom)!; - // If the merge tag exists and the parent already contains it, skip - if (rom.GetFieldValue(Models.Metadata.Rom.MergeKey) != null && datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Rom).Select(i => (i as Rom)!.GetName()).Contains(rom.GetFieldValue(Models.Metadata.Rom.MergeKey))) + if (rom.GetFieldValue(Models.Metadata.Rom.MergeKey) != null && datFile.Items[parent!]! + .Where(i => i is Rom).Select(i => (i as Rom)!.GetName()) + .Contains(rom.GetFieldValue(Models.Metadata.Rom.MergeKey))) { continue; } // If the merge tag exists but the parent doesn't contain it, add to subfolder of parent - else if (rom.GetFieldValue(Models.Metadata.Rom.MergeKey) != null && !datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Rom).Select(i => (i as Rom)!.GetName()).Contains(rom.GetFieldValue(Models.Metadata.Rom.MergeKey))) + else if (rom.GetFieldValue(Models.Metadata.Rom.MergeKey) != null && !datFile.Items[parent!]! + .Where(i => i is Rom).Select(i => (i as Rom)!.GetName()) + .Contains(rom.GetFieldValue(Models.Metadata.Rom.MergeKey))) { if (subfolder) - rom.SetName($"{rom.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}\\{rom.GetName()}"); + rom.SetName($"{rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}\\{rom.GetName()}"); rom.CopyMachineInformation(copyFrom); datFile.Items.Add(parent!, rom); @@ -565,7 +570,7 @@ namespace SabreTools.Filtering else if (!datFile.Items[parent!]!.Contains(item) || skipDedup) { if (subfolder) - rom.SetName($"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}\\{rom.GetName()}"); + rom.SetName($"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}\\{rom.GetName()}"); rom.CopyMachineInformation(copyFrom); datFile.Items.Add(parent!, rom); @@ -576,7 +581,7 @@ namespace SabreTools.Filtering else if (!datFile.Items[parent!]!.Contains(item)) { if (subfolder) - item.SetName($"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}\\{item.GetName()}"); + item.SetName($"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}\\{item.GetName()}"); item.CopyMachineInformation(copyFrom); datFile.Items.Add(parent!, item); @@ -602,8 +607,8 @@ namespace SabreTools.Filtering continue; if (items.Count > 0 - && ((items[0].Machine.GetFieldValue(Models.Metadata.Machine.IsBiosKey) == true) - || (items[0].Machine.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true))) + && ((items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.IsBiosKey) == true) + || (items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true))) { datFile.Items.Remove(game); } @@ -627,13 +632,13 @@ namespace SabreTools.Filtering continue; // If the game (is/is not) a bios, we want to continue - if (bios ^ (items[0].Machine.GetFieldValue(Models.Metadata.Machine.IsBiosKey) == true)) + if (bios ^ (items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.IsBiosKey) == true)) continue; // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrEmpty(items[0].Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey))) - parent = items[0].Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey); + if (!string.IsNullOrEmpty(items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey))) + parent = items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey); // If the parent doesnt exist, we want to continue if (string.IsNullOrEmpty(parent)) @@ -678,8 +683,8 @@ namespace SabreTools.Filtering // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrEmpty(items[0].Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey))) - parent = items[0].Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey); + if (!string.IsNullOrEmpty(items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey))) + parent = items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey); // If the parent doesnt exist, we want to continue if (string.IsNullOrEmpty(parent)) @@ -702,10 +707,10 @@ namespace SabreTools.Filtering // Now we want to get the parent romof tag and put it in each of the remaining items items = datFile.Items[game]; - string? romof = datFile.Items[parent!]![0].Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey); + string? romof = datFile.Items[parent!]![0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey); foreach (DatItem item in items!) { - item.Machine.SetFieldValue(Models.Metadata.Machine.RomOfKey, romof); + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.RomOfKey, romof); } } } @@ -725,9 +730,9 @@ namespace SabreTools.Filtering foreach (DatItem item in items) { - item.Machine.SetFieldValue(Models.Metadata.Machine.CloneOfKey, null); - item.Machine.SetFieldValue(Models.Metadata.Machine.RomOfKey, null); - item.Machine.SetFieldValue(Models.Metadata.Machine.SampleOfKey, null); + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.CloneOfKey, null); + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.RomOfKey, null); + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.SampleOfKey, null); } } } diff --git a/SabreTools.Test/DatFiles/ItemDictionaryTests.cs b/SabreTools.Test/DatFiles/ItemDictionaryTests.cs index ac8d4652..49f2f356 100644 --- a/SabreTools.Test/DatFiles/ItemDictionaryTests.cs +++ b/SabreTools.Test/DatFiles/ItemDictionaryTests.cs @@ -89,9 +89,10 @@ namespace SabreTools.Test.DatFiles rom1.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); rom1.CopyMachineInformation(machine1); - var rom2 = new Rom { Remove = true }; + var rom2 = new Rom(); rom2.SetName("rom-2"); rom2.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + rom2.SetFieldValue(DatItem.RemoveKey, true); rom2.SetFieldValue(Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); rom2.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); rom1.CopyMachineInformation(machine1); diff --git a/SabreTools.Test/DatFiles/SetterTests.cs b/SabreTools.Test/DatFiles/SetterTests.cs index fbc1d25d..24e8a38b 100644 --- a/SabreTools.Test/DatFiles/SetterTests.cs +++ b/SabreTools.Test/DatFiles/SetterTests.cs @@ -23,8 +23,8 @@ namespace SabreTools.Test.DatFiles var datItem = CreateDatItem(); var setter = new Setter(); setter.PopulateSetters("machine.name", "foo"); - setter.SetFields(datItem.Machine); - Assert.Equal("foo", datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); + setter.SetFields(datItem.GetFieldValue(DatItem.MachineKey)); + Assert.Equal("foo", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); } /// @@ -36,7 +36,8 @@ namespace SabreTools.Test.DatFiles machine.SetFieldValue(Models.Metadata.Machine.NameKey, "bar"); machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, "bar"); - var rom = new Rom { Machine = machine }; + var rom = new Rom(); + rom.SetFieldValue(DatItem.MachineKey, machine); rom.SetName("foo"); return rom; diff --git a/SabreTools.Test/DatItems/DatItemTests.cs b/SabreTools.Test/DatItems/DatItemTests.cs index 5b61dcad..edd3d418 100644 --- a/SabreTools.Test/DatItems/DatItemTests.cs +++ b/SabreTools.Test/DatItems/DatItemTests.cs @@ -19,7 +19,7 @@ namespace SabreTools.Test.DatItems public void CreateItemTypeTest(ItemType? itemType, ItemType expected) { var actual = DatItem.Create(itemType); - Assert.Equal(expected, actual.ItemType); + Assert.Equal(expected, actual.GetFieldValue(Models.Metadata.DatItem.TypeKey)); } [Theory] @@ -32,7 +32,7 @@ namespace SabreTools.Test.DatItems { var baseFile = CreateBaseFile(fileType); var actual = DatItem.Create(baseFile); - Assert.Equal(expected, actual?.ItemType); + Assert.Equal(expected, actual?.GetFieldValue(Models.Metadata.DatItem.TypeKey)); } [Fact] @@ -53,20 +53,16 @@ namespace SabreTools.Test.DatItems var machineB = new Machine(); machineB.SetFieldValue(Models.Metadata.Machine.NameKey, "name-same"); - var romA = new Rom - { - Source = new Source { Index = 0 }, - }; + var romA = new Rom(); romA.SetName("same-name"); romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + romA.SetFieldValue(DatItem.SourceKey, new Source { Index = 0 }); romA.CopyMachineInformation(machineA); - var romB = new Rom - { - Source = new Source { Index = 1 }, - }; + var romB = new Rom(); romB.SetName("same-name"); romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + romB.SetFieldValue(DatItem.SourceKey, new Source { Index = 1 }); romB.CopyMachineInformation(machineB); var actual = romA.GetDuplicateStatus(romB); @@ -82,20 +78,16 @@ namespace SabreTools.Test.DatItems var machineB = new Machine(); machineB.SetFieldValue(Models.Metadata.Machine.NameKey, "not-name-same"); - var romA = new Rom - { - Source = new Source { Index = 0 }, - }; + var romA = new Rom(); romA.SetName("same-name"); romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + romA.SetFieldValue(DatItem.SourceKey, new Source { Index = 0 }); romA.CopyMachineInformation(machineA); - var romB = new Rom - { - Source = new Source { Index = 1 }, - }; + var romB = new Rom(); romB.SetName("same-name"); romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + romB.SetFieldValue(DatItem.SourceKey, new Source { Index = 1 }); romB.CopyMachineInformation(machineB); var actual = romA.GetDuplicateStatus(romB); @@ -111,20 +103,16 @@ namespace SabreTools.Test.DatItems var machineB = new Machine(); machineB.SetFieldValue(Models.Metadata.Machine.NameKey, "name-same"); - var romA = new Rom - { - Source = new Source { Index = 0 }, - }; + var romA = new Rom(); romA.SetName("same-name"); romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + romA.SetFieldValue(DatItem.SourceKey, new Source { Index = 0 }); romA.CopyMachineInformation(machineA); - var romB = new Rom - { - Source = new Source { Index = 0 }, - }; + var romB = new Rom(); romB.SetName("same-name"); romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + romB.SetFieldValue(DatItem.SourceKey, new Source { Index = 0 }); romB.CopyMachineInformation(machineB); var actual = romA.GetDuplicateStatus(romB); @@ -140,20 +128,16 @@ namespace SabreTools.Test.DatItems var machineB = new Machine(); machineB.SetFieldValue(Models.Metadata.Machine.NameKey, "not-name-same"); - var romA = new Rom - { - Source = new Source { Index = 0 }, - }; + var romA = new Rom(); romA.SetName("same-name"); romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + romA.SetFieldValue(DatItem.SourceKey, new Source { Index = 0 }); romA.CopyMachineInformation(machineA); - var romB = new Rom - { - Source = new Source { Index = 0 }, - }; + var romB = new Rom(); romB.SetName("same-name"); romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + romB.SetFieldValue(DatItem.SourceKey, new Source { Index = 0 }); romB.CopyMachineInformation(machineB); var actual = romA.GetDuplicateStatus(romB); diff --git a/SabreTools.Test/Filter/FilteringTests.cs b/SabreTools.Test/Filter/FilteringTests.cs index 9f2d2084..c3627917 100644 --- a/SabreTools.Test/Filter/FilteringTests.cs +++ b/SabreTools.Test/Filter/FilteringTests.cs @@ -72,8 +72,9 @@ namespace SabreTools.Test.Filter machine.SetFieldValue(Models.Metadata.Machine.NameKey, "bar"); machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, "bar"); - var rom = new Rom { Machine = machine }; + var rom = new Rom(); rom.SetName("foo"); + rom.SetFieldValue(DatItem.MachineKey, machine); return rom; } diff --git a/SabreTools.Test/Filtering/CleaningTests.cs b/SabreTools.Test/Filtering/CleaningTests.cs index 3fd7e82f..a1bd79df 100644 --- a/SabreTools.Test/Filtering/CleaningTests.cs +++ b/SabreTools.Test/Filtering/CleaningTests.cs @@ -24,8 +24,8 @@ namespace SabreTools.Test.Filtering // Check the fields Assert.Equal("nam", datItem.GetName()); - Assert.Equal("nam-2", datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); - Assert.Equal("nam-3", datItem.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey)); + Assert.Equal("nam-2", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("nam-3", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)); } [Fact] @@ -45,8 +45,8 @@ namespace SabreTools.Test.Filtering // Check the fields Assert.Equal("name", datItem.GetName()); - Assert.Equal("'AB'", datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); - Assert.Equal("ae-Zh", datItem.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey)); + Assert.Equal("'AB'", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("ae-Zh", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)); } [Fact] @@ -66,8 +66,8 @@ namespace SabreTools.Test.Filtering // Check the fields Assert.Equal("name", datItem.GetName()); - Assert.Equal("!", datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); - Assert.Equal("name-3", datItem.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey)); + Assert.Equal("!", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("name-3", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)); } [Theory] @@ -92,8 +92,8 @@ namespace SabreTools.Test.Filtering // Check the fields Assert.Equal(expected, datItem.GetName()); - Assert.Equal("name-2", datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); - Assert.Equal("name-3", datItem.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey)); + Assert.Equal("name-2", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("name-3", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)); } [Fact] @@ -107,7 +107,7 @@ namespace SabreTools.Test.Filtering // Check the fields Assert.Equal("name", datItem.GetName()); - Assert.Equal("name-2/name", datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("name-2/name", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); } /// @@ -119,8 +119,9 @@ namespace SabreTools.Test.Filtering machine.SetFieldValue(Models.Metadata.Machine.NameKey, machName); machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, desc); - var rom = new Rom { Machine = machine }; + var rom = new Rom(); rom.SetName(name); + rom.SetFieldValue(DatItem.MachineKey, machine); return rom; } diff --git a/SabreTools.Test/Filtering/RemoverTests.cs b/SabreTools.Test/Filtering/RemoverTests.cs index cde684e4..af562036 100644 --- a/SabreTools.Test/Filtering/RemoverTests.cs +++ b/SabreTools.Test/Filtering/RemoverTests.cs @@ -24,7 +24,7 @@ namespace SabreTools.Test.Filtering var remover = new Remover(); remover.PopulateExclusions("Machine.Name"); remover.RemoveFields(datItem); - Assert.Null(datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Null(datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); } /// @@ -36,8 +36,9 @@ namespace SabreTools.Test.Filtering machine.SetFieldValue(Models.Metadata.Machine.NameKey, "bar"); machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, "bar"); - var rom = new Rom { Machine = machine }; + var rom = new Rom(); rom.SetName("foo"); + rom.SetFieldValue(DatItem.MachineKey, machine); return rom; } diff --git a/SabreTools.Test/Filtering/ReplacerTests.cs b/SabreTools.Test/Filtering/ReplacerTests.cs index 544df6d5..b9d6eb54 100644 --- a/SabreTools.Test/Filtering/ReplacerTests.cs +++ b/SabreTools.Test/Filtering/ReplacerTests.cs @@ -29,10 +29,10 @@ namespace SabreTools.Test.Filtering { var datItem = CreateDatItem(); var repDatItem = CreateDatItem(); - repDatItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, "foo"); + repDatItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, "foo"); List fields = [Models.Metadata.Machine.NameKey]; - Replacer.ReplaceFields(datItem.Machine, repDatItem.Machine, fields, false); - Assert.Equal("foo", datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); + Replacer.ReplaceFields(datItem.GetFieldValue(DatItem.MachineKey)!, repDatItem.GetFieldValue(DatItem.MachineKey)!, fields, false); + Assert.Equal("foo", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); } /// @@ -44,8 +44,9 @@ namespace SabreTools.Test.Filtering machine.SetFieldValue(Models.Metadata.Machine.NameKey, "bar"); machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, "bar"); - var rom = new Rom { Machine = machine }; + var rom = new Rom(); rom.SetName("foo"); + rom.SetFieldValue(DatItem.MachineKey, machine); return rom; } diff --git a/SabreTools/Features/BaseFeature.cs b/SabreTools/Features/BaseFeature.cs index 35d44a98..bf9f05e2 100644 --- a/SabreTools/Features/BaseFeature.cs +++ b/SabreTools/Features/BaseFeature.cs @@ -2152,15 +2152,7 @@ Some special strings that can be used: // TODO: Sort this by region, like the actual header var datHeader = new DatHeader() { - AddExtension = GetString(features, AddExtensionStringValue), FileName = GetString(features, FilenameStringValue), - GameName = GetBoolean(features, GamePrefixValue), - Postfix = GetString(features, PostfixStringValue), - Prefix = GetString(features, PrefixStringValue), - Quotes = GetBoolean(features, QuotesValue), - RemoveExtension = GetBoolean(features, RemoveExtensionsValue), - ReplaceExtension = GetString(features, ReplaceExtensionStringValue), - UseRomName = GetBoolean(features, RomsValue), // Get the depot information InputDepot = new DepotInformation( @@ -2187,6 +2179,15 @@ Some special strings that can be used: datHeader.SetFieldValue(Models.Metadata.Header.UrlKey, GetString(features, UrlStringValue)); datHeader.SetFieldValue(Models.Metadata.Header.VersionKey, GetString(features, VersionStringValue)); + datHeader.SetFieldValue(DatHeader.AddExtensionKey, GetString(features, AddExtensionStringValue)); + datHeader.SetFieldValue(DatHeader.GameNameKey, GetBoolean(features, GamePrefixValue)); + datHeader.SetFieldValue(DatHeader.PostfixKey, GetString(features, PostfixStringValue)); + datHeader.SetFieldValue(DatHeader.PrefixKey, GetString(features, PrefixStringValue)); + datHeader.SetFieldValue(DatHeader.QuotesKey, GetBoolean(features, QuotesValue)); + datHeader.SetFieldValue(DatHeader.RemoveExtensionKey, GetBoolean(features, RemoveExtensionsValue)); + datHeader.SetFieldValue(DatHeader.ReplaceExtensionKey, GetString(features, ReplaceExtensionStringValue)); + datHeader.SetFieldValue(DatHeader.UseRomNameKey, GetBoolean(features, RomsValue)); + bool deprecated = GetBoolean(features, DeprecatedValue); foreach (string ot in GetList(features, OutputTypeListValue)) { diff --git a/SabreTools/Features/Update.cs b/SabreTools/Features/Update.cs index c153692d..2492c0ab 100644 --- a/SabreTools/Features/Update.cs +++ b/SabreTools/Features/Update.cs @@ -95,12 +95,12 @@ namespace SabreTools.Features var updateMode = GetUpdateMode(features); // Normalize the extensions - Header!.AddExtension = (string.IsNullOrWhiteSpace(Header.AddExtension) || Header.AddExtension.StartsWith(".") - ? Header.AddExtension - : $".{Header.AddExtension}"); - Header.ReplaceExtension = (string.IsNullOrWhiteSpace(Header.ReplaceExtension) || Header.ReplaceExtension.StartsWith(".") - ? Header.ReplaceExtension - : $".{Header.ReplaceExtension}"); + Header!.SetFieldValue(DatHeader.AddExtensionKey, (string.IsNullOrWhiteSpace(Header.GetFieldValue(DatHeader.AddExtensionKey)) || Header.GetFieldValue(DatHeader.AddExtensionKey)!.StartsWith(".") + ? Header.GetFieldValue(DatHeader.AddExtensionKey) + : $".{Header.GetFieldValue(DatHeader.AddExtensionKey)}")); + Header.SetFieldValue(DatHeader.ReplaceExtensionKey, (string.IsNullOrWhiteSpace(Header.GetFieldValue(DatHeader.ReplaceExtensionKey)) || Header.GetFieldValue(DatHeader.ReplaceExtensionKey)!.StartsWith(".") + ? Header.GetFieldValue(DatHeader.ReplaceExtensionKey) + : $".{Header.GetFieldValue(DatHeader.ReplaceExtensionKey)}")); // If we're in a non-replacement special update mode and the names aren't set, set defaults if (updateMode != 0