From 3a3b20df11b2bc9b9aeee52a7327f58f6a4800d4 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 26 Mar 2026 16:52:07 -0400 Subject: [PATCH] Reduce repeated lookups and reads --- .../DatFile.FromMetadata.cs | 34 +-- .../DatFile.Splitting.cs | 38 ++-- SabreTools.Metadata.DatFiles/DatHeader.cs | 28 +-- SabreTools.Metadata.DatFiles/DatStatistics.cs | 88 ++++---- SabreTools.Metadata.DatItems/DatItem.cs | 2 +- .../Formats/Adjuster.cs | 5 +- .../Formats/BiosSet.cs | 5 +- SabreTools.Metadata.DatItems/Formats/Chip.cs | 11 +- .../Formats/Condition.cs | 5 +- .../Formats/ConfLocation.cs | 5 +- .../Formats/ConfSetting.cs | 5 +- .../Formats/Control.cs | 53 +++-- .../Formats/DataArea.cs | 17 +- .../Formats/Device.cs | 12 +- .../Formats/DipLocation.cs | 5 +- .../Formats/DipSwitch.cs | 6 +- .../Formats/DipValue.cs | 5 +- SabreTools.Metadata.DatItems/Formats/Disk.cs | 28 ++- .../Formats/Display.cs | 113 ++++++---- .../Formats/Driver.cs | 65 ++++-- .../Formats/Feature.cs | 17 +- SabreTools.Metadata.DatItems/Formats/Input.cs | 30 ++- SabreTools.Metadata.DatItems/Formats/Media.cs | 17 +- .../Formats/PartFeature.cs | 17 +- .../Formats/RamOption.cs | 5 +- .../Formats/Release.cs | 5 +- SabreTools.Metadata.DatItems/Formats/Rom.cs | 206 ++++++++++++------ SabreTools.Metadata.DatItems/Formats/Slot.cs | 1 - .../Formats/SlotOption.cs | 5 +- .../Formats/SoftwareList.cs | 5 +- SabreTools.Metadata.DatItems/Formats/Sound.cs | 5 +- SabreTools.Metadata.DatItems/Machine.cs | 48 ++-- 32 files changed, 544 insertions(+), 347 deletions(-) diff --git a/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs b/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs index 218d5600..9fef07f6 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; #if NET40_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER using System.Threading.Tasks; #endif -using SabreTools.Data.Extensions; using SabreTools.Metadata.Filter; using SabreTools.Metadata.DatItems; using SabreTools.Metadata.DatItems.Formats; @@ -66,36 +65,25 @@ namespace SabreTools.Metadata.DatFiles var header = new DatHeader(item); // Convert subheader values - if (item.ContainsKey(Data.Models.Metadata.Header.CanOpenKey)) - { - var canOpen = item.Read(Data.Models.Metadata.Header.CanOpenKey); - if (canOpen?.Extension is not null) - Header.Write(Data.Models.Metadata.Header.CanOpenKey, canOpen.Extension); - } + var canOpen = item.Read(Data.Models.Metadata.Header.CanOpenKey); + if (canOpen?.Extension is not null) + Header.Write(Data.Models.Metadata.Header.CanOpenKey, canOpen.Extension); - if (item.ContainsKey(Data.Models.Metadata.Header.ImagesKey)) - { - var images = item.Read(Data.Models.Metadata.Header.ImagesKey); + var images = item.Read(Data.Models.Metadata.Header.ImagesKey); + if (images is not null) Header.Write(Data.Models.Metadata.Header.ImagesKey, images); - } - if (item.ContainsKey(Data.Models.Metadata.Header.InfosKey)) - { - var infos = item.Read(Data.Models.Metadata.Header.InfosKey); + var infos = item.Read(Data.Models.Metadata.Header.InfosKey); + if (infos is not null) Header.Write(Data.Models.Metadata.Header.InfosKey, infos); - } - if (item.ContainsKey(Data.Models.Metadata.Header.NewDatKey)) - { - var newDat = item.Read(Data.Models.Metadata.Header.NewDatKey); + var newDat = item.Read(Data.Models.Metadata.Header.NewDatKey); + if (newDat is not null) Header.Write(Data.Models.Metadata.Header.NewDatKey, newDat); - } - if (item.ContainsKey(Data.Models.Metadata.Header.SearchKey)) - { - var search = item.Read(Data.Models.Metadata.Header.SearchKey); + var search = item.Read(Data.Models.Metadata.Header.SearchKey); + if (search is not null) Header.Write(Data.Models.Metadata.Header.SearchKey, search); - } // Selectively set all possible fields -- TODO: Figure out how to make this less manual if (Header.ReadString(Data.Models.Metadata.Header.AuthorKey) is null) diff --git a/SabreTools.Metadata.DatFiles/DatFile.Splitting.cs b/SabreTools.Metadata.DatFiles/DatFile.Splitting.cs index 91910fda..5ab124e8 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.Splitting.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.Splitting.cs @@ -719,14 +719,14 @@ namespace SabreTools.Metadata.DatFiles // Now that every device reference is accounted for, add the new list of device references, if they don't already exist foreach (var deviceReference in newDeviceReferences) { - if (!deviceReferences.Contains(deviceReference)) - { - deviceReferences.Add(deviceReference); - var deviceRef = new DeviceRef(); - deviceRef.SetName(deviceReference); - deviceRef.CopyMachineInformation(copyFrom); - Items.AddItem(deviceRef, statsOnly: false); - } + if (deviceReferences.Contains(deviceReference)) + continue; + + deviceReferences.Add(deviceReference); + var deviceRef = new DeviceRef(); + deviceRef.SetName(deviceReference); + deviceRef.CopyMachineInformation(copyFrom); + Items.AddItem(deviceRef, statsOnly: false); } } @@ -769,19 +769,19 @@ namespace SabreTools.Metadata.DatFiles // Now that every device is accounted for, add the new list of slot options, if they don't already exist foreach (var slotOption in newSlotOptions) { - if (!slotOptions.Contains(slotOption)) - { - slotOptions.Add(slotOption); - var slotOptionItem = new SlotOption(); - slotOptionItem.Write(Data.Models.Metadata.SlotOption.DevNameKey, slotOption); - slotOptionItem.CopyMachineInformation(copyFrom); + if (slotOptions.Contains(slotOption)) + continue; - var slotItem = new Slot(); - slotItem.Write(Data.Models.Metadata.Slot.SlotOptionKey, [slotOptionItem]); - slotItem.CopyMachineInformation(copyFrom); + slotOptions.Add(slotOption); + var slotOptionItem = new SlotOption(); + slotOptionItem.Write(Data.Models.Metadata.SlotOption.DevNameKey, slotOption); + slotOptionItem.CopyMachineInformation(copyFrom); - Items.AddItem(slotItem, statsOnly: false); - } + var slotItem = new Slot(); + slotItem.Write(Data.Models.Metadata.Slot.SlotOptionKey, [slotOptionItem]); + slotItem.CopyMachineInformation(copyFrom); + + Items.AddItem(slotItem, statsOnly: false); } } } diff --git a/SabreTools.Metadata.DatFiles/DatHeader.cs b/SabreTools.Metadata.DatFiles/DatHeader.cs index 739d8e10..84bd23ac 100644 --- a/SabreTools.Metadata.DatFiles/DatHeader.cs +++ b/SabreTools.Metadata.DatFiles/DatHeader.cs @@ -91,8 +91,8 @@ namespace SabreTools.Metadata.DatFiles // Populate the internal machine from non-filter fields foreach (string fieldName in nonItemFields) { - if (header.ContainsKey(fieldName)) - _internal[fieldName] = header[fieldName]; + if (header.TryGetValue(fieldName, out var fieldValue)) + _internal[fieldName] = fieldValue; } } @@ -103,22 +103,22 @@ namespace SabreTools.Metadata.DatFiles // Populate the internal machine from filter fields foreach (string fieldName in nonStandardFields) { - if (header.ContainsKey(fieldName)) - _internal[fieldName] = header[fieldName]; + if (header.TryGetValue(fieldName, out var fieldValue)) + _internal[fieldName] = fieldValue; } } // Get all no-filter fields - if (header.ContainsKey(Data.Models.Metadata.Header.CanOpenKey)) - _internal[Data.Models.Metadata.Header.CanOpenKey] = header[Data.Models.Metadata.Header.CanOpenKey]; - if (header.ContainsKey(Data.Models.Metadata.Header.ImagesKey)) - _internal[Data.Models.Metadata.Header.ImagesKey] = header[Data.Models.Metadata.Header.ImagesKey]; - if (header.ContainsKey(Data.Models.Metadata.Header.InfosKey)) - _internal[Data.Models.Metadata.Header.InfosKey] = header[Data.Models.Metadata.Header.InfosKey]; - if (header.ContainsKey(Data.Models.Metadata.Header.NewDatKey)) - _internal[Data.Models.Metadata.Header.NewDatKey] = header[Data.Models.Metadata.Header.NewDatKey]; - if (header.ContainsKey(Data.Models.Metadata.Header.SearchKey)) - _internal[Data.Models.Metadata.Header.SearchKey] = header[Data.Models.Metadata.Header.SearchKey]; + if (header.TryGetValue(Data.Models.Metadata.Header.CanOpenKey, out var canOpenValue)) + _internal[Data.Models.Metadata.Header.CanOpenKey] = canOpenValue; + if (header.TryGetValue(Data.Models.Metadata.Header.ImagesKey, out var imageValue)) + _internal[Data.Models.Metadata.Header.ImagesKey] = imageValue; + if (header.TryGetValue(Data.Models.Metadata.Header.InfosKey, out var infosValue)) + _internal[Data.Models.Metadata.Header.InfosKey] = infosValue; + if (header.TryGetValue(Data.Models.Metadata.Header.NewDatKey, out var newDatValue)) + _internal[Data.Models.Metadata.Header.NewDatKey] = newDatValue; + if (header.TryGetValue(Data.Models.Metadata.Header.SearchKey, out var searchValue)) + _internal[Data.Models.Metadata.Header.SearchKey] = searchValue; } #endregion diff --git a/SabreTools.Metadata.DatFiles/DatStatistics.cs b/SabreTools.Metadata.DatFiles/DatStatistics.cs index f2784131..7430bbe7 100644 --- a/SabreTools.Metadata.DatFiles/DatStatistics.cs +++ b/SabreTools.Metadata.DatFiles/DatStatistics.cs @@ -402,16 +402,17 @@ namespace SabreTools.Metadata.DatFiles /// Item to add info from private void AddItemStatistics(Disk disk) { - if (disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() != ItemStatus.Nodump) + ItemStatus status = disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus(); + if (status != ItemStatus.Nodump) { AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) ? 0 : 1); AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)) ? 0 : 1); } - AddStatusCount(ItemStatus.BadDump, disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Verified ? 1 : 0); + AddStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); + AddStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); + AddStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); + AddStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); } /// @@ -420,16 +421,17 @@ namespace SabreTools.Metadata.DatFiles /// Item to add info from private void AddItemStatistics(Data.Models.Metadata.Disk disk) { - if (disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() != ItemStatus.Nodump) + ItemStatus status = disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus(); + if (status != ItemStatus.Nodump) { AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) ? 0 : 1); AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)) ? 0 : 1); } - AddStatusCount(ItemStatus.BadDump, disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Verified ? 1 : 0); + AddStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); + AddStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); + AddStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); + AddStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); } /// @@ -475,7 +477,8 @@ namespace SabreTools.Metadata.DatFiles /// Item to add info from private void AddItemStatistics(Rom rom) { - if (rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() != ItemStatus.Nodump) + ItemStatus status = rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus(); + if (status != ItemStatus.Nodump) { TotalSize += rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) ?? 0; AddHashCount(HashType.CRC16, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRC16Key)) ? 0 : 1); @@ -493,10 +496,10 @@ namespace SabreTools.Metadata.DatFiles AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); } - AddStatusCount(ItemStatus.BadDump, rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Verified ? 1 : 0); + AddStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); + AddStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); + AddStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); + AddStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); } /// @@ -505,7 +508,8 @@ namespace SabreTools.Metadata.DatFiles /// Item to add info from private void AddItemStatistics(Data.Models.Metadata.Rom rom) { - if (rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() != ItemStatus.Nodump) + ItemStatus status = rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus(); + if (status != ItemStatus.Nodump) { TotalSize += rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) ?? 0; AddHashCount(HashType.CRC16, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRC16Key)) ? 0 : 1); @@ -523,10 +527,10 @@ namespace SabreTools.Metadata.DatFiles AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); } - AddStatusCount(ItemStatus.BadDump, rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Verified ? 1 : 0); + AddStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); + AddStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); + AddStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); + AddStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); } /// @@ -589,16 +593,17 @@ namespace SabreTools.Metadata.DatFiles /// Item to remove info for private void RemoveItemStatistics(Disk disk) { - if (disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() != ItemStatus.Nodump) + ItemStatus status = disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus(); + if (status != ItemStatus.Nodump) { RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) ? 0 : 1); RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)) ? 0 : 1); } - RemoveStatusCount(ItemStatus.BadDump, disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Verified ? 1 : 0); + RemoveStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); + RemoveStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); + RemoveStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); + RemoveStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); } /// @@ -607,16 +612,17 @@ namespace SabreTools.Metadata.DatFiles /// Item to remove info for private void RemoveItemStatistics(Data.Models.Metadata.Disk disk) { - if (disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() != ItemStatus.Nodump) + ItemStatus status = disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus(); + if (status != ItemStatus.Nodump) { RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) ? 0 : 1); RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)) ? 0 : 1); } - RemoveStatusCount(ItemStatus.BadDump, disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Verified ? 1 : 0); + RemoveStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); + RemoveStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); + RemoveStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); + RemoveStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); } /// @@ -662,7 +668,8 @@ namespace SabreTools.Metadata.DatFiles /// Item to remove info for private void RemoveItemStatistics(Rom rom) { - if (rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() != ItemStatus.Nodump) + ItemStatus status = rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus(); + if (status != ItemStatus.Nodump) { TotalSize -= rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) ?? 0; RemoveHashCount(HashType.CRC16, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRC16Key)) ? 0 : 1); @@ -680,10 +687,10 @@ namespace SabreTools.Metadata.DatFiles RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); } - RemoveStatusCount(ItemStatus.BadDump, rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Verified ? 1 : 0); + RemoveStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); + RemoveStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); + RemoveStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); + RemoveStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); } /// @@ -692,7 +699,8 @@ namespace SabreTools.Metadata.DatFiles /// Item to remove info for private void RemoveItemStatistics(Data.Models.Metadata.Rom rom) { - if (rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() != ItemStatus.Nodump) + ItemStatus status = rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus(); + if (status != ItemStatus.Nodump) { TotalSize -= rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) ?? 0; RemoveHashCount(HashType.CRC16, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRC16Key)) ? 0 : 1); @@ -710,10 +718,10 @@ namespace SabreTools.Metadata.DatFiles RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); } - RemoveStatusCount(ItemStatus.BadDump, rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Verified ? 1 : 0); + RemoveStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); + RemoveStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); + RemoveStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); + RemoveStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); } /// diff --git a/SabreTools.Metadata.DatItems/DatItem.cs b/SabreTools.Metadata.DatItems/DatItem.cs index f249adce..60d6c6b4 100644 --- a/SabreTools.Metadata.DatItems/DatItem.cs +++ b/SabreTools.Metadata.DatItems/DatItem.cs @@ -104,7 +104,7 @@ namespace SabreTools.Metadata.DatItems /// /// Machine if available, null otherwise /// Relies on - public Machine? GetMachine() => _internal.Read(MachineKey); + public Machine? GetMachine() => Read(MachineKey); /// /// Gets the name to use for a DatItem diff --git a/SabreTools.Metadata.DatItems/Formats/Adjuster.cs b/SabreTools.Metadata.DatItems/Formats/Adjuster.cs index 5d273141..de12d320 100644 --- a/SabreTools.Metadata.DatItems/Formats/Adjuster.cs +++ b/SabreTools.Metadata.DatItems/Formats/Adjuster.cs @@ -33,8 +33,9 @@ namespace SabreTools.Metadata.DatItems.Formats public Adjuster(Data.Models.Metadata.Adjuster item) : base(item) { // Process flag values - if (ReadBool(Data.Models.Metadata.Adjuster.DefaultKey) is not null) - Write(Data.Models.Metadata.Adjuster.DefaultKey, ReadBool(Data.Models.Metadata.Adjuster.DefaultKey).FromYesNo()); + bool? defaultValue = ReadBool(Data.Models.Metadata.Adjuster.DefaultKey); + if (defaultValue is not null) + Write(Data.Models.Metadata.Adjuster.DefaultKey, defaultValue.FromYesNo()); // Handle subitems var condition = item.Read(Data.Models.Metadata.Adjuster.ConditionKey); diff --git a/SabreTools.Metadata.DatItems/Formats/BiosSet.cs b/SabreTools.Metadata.DatItems/Formats/BiosSet.cs index 50ddfa6f..429745f3 100644 --- a/SabreTools.Metadata.DatItems/Formats/BiosSet.cs +++ b/SabreTools.Metadata.DatItems/Formats/BiosSet.cs @@ -23,8 +23,9 @@ namespace SabreTools.Metadata.DatItems.Formats public BiosSet(Data.Models.Metadata.BiosSet item) : base(item) { // Process flag values - if (ReadBool(Data.Models.Metadata.BiosSet.DefaultKey) is not null) - Write(Data.Models.Metadata.BiosSet.DefaultKey, ReadBool(Data.Models.Metadata.BiosSet.DefaultKey).FromYesNo()); + bool? defaultValue = ReadBool(Data.Models.Metadata.BiosSet.DefaultKey); + if (defaultValue is not null) + Write(Data.Models.Metadata.BiosSet.DefaultKey, defaultValue.FromYesNo()); } public BiosSet(Data.Models.Metadata.BiosSet item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/Chip.cs b/SabreTools.Metadata.DatItems/Formats/Chip.cs index f5eb2391..cf18885b 100644 --- a/SabreTools.Metadata.DatItems/Formats/Chip.cs +++ b/SabreTools.Metadata.DatItems/Formats/Chip.cs @@ -23,10 +23,13 @@ namespace SabreTools.Metadata.DatItems.Formats public Chip(Data.Models.Metadata.Chip item) : base(item) { // Process flag values - if (ReadBool(Data.Models.Metadata.Chip.SoundOnlyKey) is not null) - Write(Data.Models.Metadata.Chip.SoundOnlyKey, ReadBool(Data.Models.Metadata.Chip.SoundOnlyKey).FromYesNo()); - if (ReadString(Data.Models.Metadata.Chip.ChipTypeKey) is not null) - Write(Data.Models.Metadata.Chip.ChipTypeKey, ReadString(Data.Models.Metadata.Chip.ChipTypeKey).AsChipType().AsStringValue()); + bool? soundOnly = ReadBool(Data.Models.Metadata.Chip.SoundOnlyKey); + if (soundOnly is not null) + Write(Data.Models.Metadata.Chip.SoundOnlyKey, soundOnly.FromYesNo()); + + string? chipType = ReadString(Data.Models.Metadata.Chip.ChipTypeKey); + if (chipType is not null) + Write(Data.Models.Metadata.Chip.ChipTypeKey, chipType.AsChipType().AsStringValue()); } public Chip(Data.Models.Metadata.Chip item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/Condition.cs b/SabreTools.Metadata.DatItems/Formats/Condition.cs index 377a5576..6d76d0f4 100644 --- a/SabreTools.Metadata.DatItems/Formats/Condition.cs +++ b/SabreTools.Metadata.DatItems/Formats/Condition.cs @@ -23,8 +23,9 @@ namespace SabreTools.Metadata.DatItems.Formats public Condition(Data.Models.Metadata.Condition item) : base(item) { // Process flag values - if (ReadString(Data.Models.Metadata.Condition.RelationKey) is not null) - Write(Data.Models.Metadata.Condition.RelationKey, ReadString(Data.Models.Metadata.Condition.RelationKey).AsRelation().AsStringValue()); + string? condition = ReadString(Data.Models.Metadata.Condition.RelationKey); + if (condition is not null) + Write(Data.Models.Metadata.Condition.RelationKey, condition.AsRelation().AsStringValue()); } public Condition(Data.Models.Metadata.Condition item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs b/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs index 55d1d302..610a52ec 100644 --- a/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs +++ b/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs @@ -23,8 +23,9 @@ namespace SabreTools.Metadata.DatItems.Formats public ConfLocation(Data.Models.Metadata.ConfLocation item) : base(item) { // Process flag values - if (ReadBool(Data.Models.Metadata.ConfLocation.InvertedKey) is not null) - Write(Data.Models.Metadata.ConfLocation.InvertedKey, ReadBool(Data.Models.Metadata.ConfLocation.InvertedKey).FromYesNo()); + bool? inverted = ReadBool(Data.Models.Metadata.ConfLocation.InvertedKey); + if (inverted is not null) + Write(Data.Models.Metadata.ConfLocation.InvertedKey, inverted.FromYesNo()); } public ConfLocation(Data.Models.Metadata.ConfLocation item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs b/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs index 619ca965..6768a728 100644 --- a/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs +++ b/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs @@ -33,8 +33,9 @@ namespace SabreTools.Metadata.DatItems.Formats public ConfSetting(Data.Models.Metadata.ConfSetting item) : base(item) { // Process flag values - if (ReadBool(Data.Models.Metadata.ConfSetting.DefaultKey) is not null) - Write(Data.Models.Metadata.ConfSetting.DefaultKey, ReadBool(Data.Models.Metadata.ConfSetting.DefaultKey).FromYesNo()); + bool? defaultValue = ReadBool(Data.Models.Metadata.ConfSetting.DefaultKey); + if (defaultValue is not null) + Write(Data.Models.Metadata.ConfSetting.DefaultKey, defaultValue.FromYesNo()); // Handle subitems var condition = Read(Data.Models.Metadata.ConfSetting.ConditionKey); diff --git a/SabreTools.Metadata.DatItems/Formats/Control.cs b/SabreTools.Metadata.DatItems/Formats/Control.cs index def23baf..fd72bf7b 100644 --- a/SabreTools.Metadata.DatItems/Formats/Control.cs +++ b/SabreTools.Metadata.DatItems/Formats/Control.cs @@ -23,24 +23,41 @@ namespace SabreTools.Metadata.DatItems.Formats public Control(Data.Models.Metadata.Control item) : base(item) { // Process flag values - if (ReadLong(Data.Models.Metadata.Control.ButtonsKey) is not null) - Write(Data.Models.Metadata.Control.ButtonsKey, ReadLong(Data.Models.Metadata.Control.ButtonsKey).ToString()); - if (ReadLong(Data.Models.Metadata.Control.KeyDeltaKey) is not null) - Write(Data.Models.Metadata.Control.KeyDeltaKey, ReadLong(Data.Models.Metadata.Control.KeyDeltaKey).ToString()); - if (ReadLong(Data.Models.Metadata.Control.MaximumKey) is not null) - Write(Data.Models.Metadata.Control.MaximumKey, ReadLong(Data.Models.Metadata.Control.MaximumKey).ToString()); - if (ReadLong(Data.Models.Metadata.Control.MinimumKey) is not null) - Write(Data.Models.Metadata.Control.MinimumKey, ReadLong(Data.Models.Metadata.Control.MinimumKey).ToString()); - if (ReadLong(Data.Models.Metadata.Control.PlayerKey) is not null) - Write(Data.Models.Metadata.Control.PlayerKey, ReadLong(Data.Models.Metadata.Control.PlayerKey).ToString()); - if (ReadLong(Data.Models.Metadata.Control.ReqButtonsKey) is not null) - Write(Data.Models.Metadata.Control.ReqButtonsKey, ReadLong(Data.Models.Metadata.Control.ReqButtonsKey).ToString()); - if (ReadBool(Data.Models.Metadata.Control.ReverseKey) is not null) - Write(Data.Models.Metadata.Control.ReverseKey, ReadBool(Data.Models.Metadata.Control.ReverseKey).FromYesNo()); - if (ReadLong(Data.Models.Metadata.Control.SensitivityKey) is not null) - Write(Data.Models.Metadata.Control.SensitivityKey, ReadLong(Data.Models.Metadata.Control.SensitivityKey).ToString()); - if (ReadString(Data.Models.Metadata.Control.ControlTypeKey) is not null) - Write(Data.Models.Metadata.Control.ControlTypeKey, ReadString(Data.Models.Metadata.Control.ControlTypeKey).AsControlType().AsStringValue()); + long? buttons = ReadLong(Data.Models.Metadata.Control.ButtonsKey); + if (buttons is not null) + Write(Data.Models.Metadata.Control.ButtonsKey, buttons.ToString()); + + long? keyDelta = ReadLong(Data.Models.Metadata.Control.KeyDeltaKey); + if (keyDelta is not null) + Write(Data.Models.Metadata.Control.KeyDeltaKey, keyDelta.ToString()); + + long? maximum = ReadLong(Data.Models.Metadata.Control.MaximumKey); + if (maximum is not null) + Write(Data.Models.Metadata.Control.MaximumKey, maximum.ToString()); + + long? minimum = ReadLong(Data.Models.Metadata.Control.MinimumKey); + if (minimum is not null) + Write(Data.Models.Metadata.Control.MinimumKey, minimum.ToString()); + + long? player = ReadLong(Data.Models.Metadata.Control.PlayerKey); + if (player is not null) + Write(Data.Models.Metadata.Control.PlayerKey, player.ToString()); + + long? reqButtons = ReadLong(Data.Models.Metadata.Control.ReqButtonsKey); + if (reqButtons is not null) + Write(Data.Models.Metadata.Control.ReqButtonsKey, reqButtons.ToString()); + + bool? reverse = ReadBool(Data.Models.Metadata.Control.ReverseKey); + if (reverse is not null) + Write(Data.Models.Metadata.Control.ReverseKey, reverse.FromYesNo()); + + long? sensitivity = ReadLong(Data.Models.Metadata.Control.SensitivityKey); + if (sensitivity is not null) + Write(Data.Models.Metadata.Control.SensitivityKey, sensitivity.ToString()); + + string? controlType = ReadString(Data.Models.Metadata.Control.ControlTypeKey); + if (controlType is not null) + Write(Data.Models.Metadata.Control.ControlTypeKey, controlType.AsControlType().AsStringValue()); } public Control(Data.Models.Metadata.Control item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/DataArea.cs b/SabreTools.Metadata.DatItems/Formats/DataArea.cs index 1a7d5e9f..97e3f167 100644 --- a/SabreTools.Metadata.DatItems/Formats/DataArea.cs +++ b/SabreTools.Metadata.DatItems/Formats/DataArea.cs @@ -24,12 +24,17 @@ namespace SabreTools.Metadata.DatItems.Formats public DataArea(Data.Models.Metadata.DataArea item) : base(item) { // Process flag values - if (ReadString(Data.Models.Metadata.DataArea.EndiannessKey) is not null) - Write(Data.Models.Metadata.DataArea.EndiannessKey, ReadString(Data.Models.Metadata.DataArea.EndiannessKey).AsEndianness().AsStringValue()); - if (ReadLong(Data.Models.Metadata.DataArea.SizeKey) is not null) - Write(Data.Models.Metadata.DataArea.SizeKey, ReadLong(Data.Models.Metadata.DataArea.SizeKey).ToString()); - if (ReadLong(Data.Models.Metadata.DataArea.WidthKey) is not null) - Write(Data.Models.Metadata.DataArea.WidthKey, ReadLong(Data.Models.Metadata.DataArea.WidthKey).ToString()); + string? endianness = ReadString(Data.Models.Metadata.DataArea.EndiannessKey); + if (endianness is not null) + Write(Data.Models.Metadata.DataArea.EndiannessKey, endianness.AsEndianness().AsStringValue()); + + long? size = ReadLong(Data.Models.Metadata.DataArea.SizeKey); + if (size is not null) + Write(Data.Models.Metadata.DataArea.SizeKey, size.ToString()); + + long? width = ReadLong(Data.Models.Metadata.DataArea.WidthKey); + if (width is not null) + Write(Data.Models.Metadata.DataArea.WidthKey, width.ToString()); } public DataArea(Data.Models.Metadata.DataArea item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/Device.cs b/SabreTools.Metadata.DatItems/Formats/Device.cs index e6e143f8..a88dbcf6 100644 --- a/SabreTools.Metadata.DatItems/Formats/Device.cs +++ b/SabreTools.Metadata.DatItems/Formats/Device.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -45,10 +44,13 @@ namespace SabreTools.Metadata.DatItems.Formats public Device(Data.Models.Metadata.Device item) : base(item) { // Process flag values - if (ReadBool(Data.Models.Metadata.Device.MandatoryKey) is not null) - Write(Data.Models.Metadata.Device.MandatoryKey, ReadBool(Data.Models.Metadata.Device.MandatoryKey).FromYesNo()); - if (ReadString(Data.Models.Metadata.Device.DeviceTypeKey) is not null) - Write(Data.Models.Metadata.Device.DeviceTypeKey, ReadString(Data.Models.Metadata.Device.DeviceTypeKey).AsDeviceType().AsStringValue()); + bool? mandatory = ReadBool(Data.Models.Metadata.Device.MandatoryKey); + if (mandatory is not null) + Write(Data.Models.Metadata.Device.MandatoryKey, mandatory.FromYesNo()); + + string? deviceType = ReadString(Data.Models.Metadata.Device.DeviceTypeKey); + if (deviceType is not null) + Write(Data.Models.Metadata.Device.DeviceTypeKey, deviceType.AsDeviceType().AsStringValue()); // Handle subitems var instance = item.Read(Data.Models.Metadata.Device.InstanceKey); diff --git a/SabreTools.Metadata.DatItems/Formats/DipLocation.cs b/SabreTools.Metadata.DatItems/Formats/DipLocation.cs index 9d69049c..5ef31dc9 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipLocation.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipLocation.cs @@ -23,8 +23,9 @@ namespace SabreTools.Metadata.DatItems.Formats public DipLocation(Data.Models.Metadata.DipLocation item) : base(item) { // Process flag values - if (ReadBool(Data.Models.Metadata.DipLocation.InvertedKey) is not null) - Write(Data.Models.Metadata.DipLocation.InvertedKey, ReadBool(Data.Models.Metadata.DipLocation.InvertedKey).FromYesNo()); + bool? inverted = ReadBool(Data.Models.Metadata.DipLocation.InvertedKey); + if (inverted is not null) + Write(Data.Models.Metadata.DipLocation.InvertedKey, inverted.FromYesNo()); } public DipLocation(Data.Models.Metadata.DipLocation item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs index b0753650..dc7e36e9 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -76,8 +75,9 @@ namespace SabreTools.Metadata.DatItems.Formats public DipSwitch(Data.Models.Metadata.DipSwitch item) : base(item) { // Process flag values - if (ReadBool(Data.Models.Metadata.DipSwitch.DefaultKey) is not null) - Write(Data.Models.Metadata.DipSwitch.DefaultKey, ReadBool(Data.Models.Metadata.DipSwitch.DefaultKey).FromYesNo()); + bool? defaultValue = ReadBool(Data.Models.Metadata.DipSwitch.DefaultKey); + if (defaultValue is not null) + Write(Data.Models.Metadata.DipSwitch.DefaultKey, defaultValue.FromYesNo()); // Handle subitems var condition = item.Read(Data.Models.Metadata.DipSwitch.ConditionKey); diff --git a/SabreTools.Metadata.DatItems/Formats/DipValue.cs b/SabreTools.Metadata.DatItems/Formats/DipValue.cs index 390440a8..b1495ab4 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipValue.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipValue.cs @@ -33,8 +33,9 @@ namespace SabreTools.Metadata.DatItems.Formats public DipValue(Data.Models.Metadata.DipValue item) : base(item) { // Process flag values - if (ReadBool(Data.Models.Metadata.DipValue.DefaultKey) is not null) - Write(Data.Models.Metadata.DipValue.DefaultKey, ReadBool(Data.Models.Metadata.DipValue.DefaultKey).FromYesNo()); + bool? defaultValue = ReadBool(Data.Models.Metadata.DipValue.DefaultKey); + if (defaultValue is not null) + Write(Data.Models.Metadata.DipValue.DefaultKey, defaultValue.FromYesNo()); // Handle subitems var condition = Read(Data.Models.Metadata.DipValue.ConditionKey); diff --git a/SabreTools.Metadata.DatItems/Formats/Disk.cs b/SabreTools.Metadata.DatItems/Formats/Disk.cs index f2720345..2b44c186 100644 --- a/SabreTools.Metadata.DatItems/Formats/Disk.cs +++ b/SabreTools.Metadata.DatItems/Formats/Disk.cs @@ -67,18 +67,26 @@ namespace SabreTools.Metadata.DatItems.Formats Write(DupeTypeKey, 0x00); // Process flag values - if (ReadBool(Data.Models.Metadata.Disk.OptionalKey) is not null) - Write(Data.Models.Metadata.Disk.OptionalKey, ReadBool(Data.Models.Metadata.Disk.OptionalKey).FromYesNo()); - if (ReadString(Data.Models.Metadata.Disk.StatusKey) is not null) - Write(Data.Models.Metadata.Disk.StatusKey, ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus().AsStringValue()); - if (ReadBool(Data.Models.Metadata.Disk.WritableKey) is not null) - Write(Data.Models.Metadata.Disk.WritableKey, ReadBool(Data.Models.Metadata.Disk.WritableKey).FromYesNo()); + bool? optional = ReadBool(Data.Models.Metadata.Disk.OptionalKey); + if (optional is not null) + Write(Data.Models.Metadata.Disk.OptionalKey, optional.FromYesNo()); + + string? status = ReadString(Data.Models.Metadata.Disk.StatusKey); + if (status is not null) + Write(Data.Models.Metadata.Disk.StatusKey, status.AsItemStatus().AsStringValue()); + + bool? writable = ReadBool(Data.Models.Metadata.Disk.WritableKey); + if (writable is not null) + Write(Data.Models.Metadata.Disk.WritableKey, writable.FromYesNo()); // Process hash values - if (ReadString(Data.Models.Metadata.Disk.MD5Key) is not null) - Write(Data.Models.Metadata.Disk.MD5Key, TextHelper.NormalizeMD5(ReadString(Data.Models.Metadata.Disk.MD5Key))); - if (ReadString(Data.Models.Metadata.Disk.SHA1Key) is not null) - Write(Data.Models.Metadata.Disk.SHA1Key, TextHelper.NormalizeSHA1(ReadString(Data.Models.Metadata.Disk.SHA1Key))); + string? md5 = ReadString(Data.Models.Metadata.Disk.MD5Key); + if (md5 is not null) + Write(Data.Models.Metadata.Disk.MD5Key, TextHelper.NormalizeMD5(md5)); + + string? sha1 = ReadString(Data.Models.Metadata.Disk.SHA1Key); + if (sha1 is not null) + Write(Data.Models.Metadata.Disk.SHA1Key, TextHelper.NormalizeSHA1(sha1)); } public Disk(Data.Models.Metadata.Disk item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/Display.cs b/SabreTools.Metadata.DatItems/Formats/Display.cs index 5081f686..d4197c40 100644 --- a/SabreTools.Metadata.DatItems/Formats/Display.cs +++ b/SabreTools.Metadata.DatItems/Formats/Display.cs @@ -24,32 +24,57 @@ namespace SabreTools.Metadata.DatItems.Formats public Display(Data.Models.Metadata.Display item) : base(item) { // Process flag values - if (ReadBool(Data.Models.Metadata.Display.FlipXKey) is not null) - Write(Data.Models.Metadata.Display.FlipXKey, ReadBool(Data.Models.Metadata.Display.FlipXKey).FromYesNo()); - if (ReadLong(Data.Models.Metadata.Display.HBEndKey) is not null) - Write(Data.Models.Metadata.Display.HBEndKey, ReadLong(Data.Models.Metadata.Display.HBEndKey).ToString()); - if (ReadLong(Data.Models.Metadata.Display.HBStartKey) is not null) - Write(Data.Models.Metadata.Display.HBStartKey, ReadLong(Data.Models.Metadata.Display.HBStartKey).ToString()); - if (ReadLong(Data.Models.Metadata.Display.HeightKey) is not null) - Write(Data.Models.Metadata.Display.HeightKey, ReadLong(Data.Models.Metadata.Display.HeightKey).ToString()); - if (ReadLong(Data.Models.Metadata.Display.HTotalKey) is not null) - Write(Data.Models.Metadata.Display.HTotalKey, ReadLong(Data.Models.Metadata.Display.HTotalKey).ToString()); - if (ReadLong(Data.Models.Metadata.Display.PixClockKey) is not null) - Write(Data.Models.Metadata.Display.PixClockKey, ReadLong(Data.Models.Metadata.Display.PixClockKey).ToString()); - if (ReadDouble(Data.Models.Metadata.Display.RefreshKey) is not null) - Write(Data.Models.Metadata.Display.RefreshKey, ReadDouble(Data.Models.Metadata.Display.RefreshKey).ToString()); - if (ReadLong(Data.Models.Metadata.Display.RotateKey) is not null) - Write(Data.Models.Metadata.Display.RotateKey, ReadLong(Data.Models.Metadata.Display.RotateKey).ToString()); - if (ReadString(Data.Models.Metadata.Display.DisplayTypeKey) is not null) - Write(Data.Models.Metadata.Display.DisplayTypeKey, ReadString(Data.Models.Metadata.Display.DisplayTypeKey).AsDisplayType().AsStringValue()); - if (ReadLong(Data.Models.Metadata.Display.VBEndKey) is not null) - Write(Data.Models.Metadata.Display.VBEndKey, ReadLong(Data.Models.Metadata.Display.VBEndKey).ToString()); - if (ReadLong(Data.Models.Metadata.Display.VBStartKey) is not null) - Write(Data.Models.Metadata.Display.VBStartKey, ReadLong(Data.Models.Metadata.Display.VBStartKey).ToString()); - if (ReadLong(Data.Models.Metadata.Display.VTotalKey) is not null) - Write(Data.Models.Metadata.Display.VTotalKey, ReadLong(Data.Models.Metadata.Display.VTotalKey).ToString()); - if (ReadLong(Data.Models.Metadata.Display.WidthKey) is not null) - Write(Data.Models.Metadata.Display.WidthKey, ReadLong(Data.Models.Metadata.Display.WidthKey).ToString()); + bool? flipX = ReadBool(Data.Models.Metadata.Display.FlipXKey); + if (flipX is not null) + Write(Data.Models.Metadata.Display.FlipXKey, flipX.FromYesNo()); + + long? hbEnd = ReadLong(Data.Models.Metadata.Display.HBEndKey); + if (hbEnd is not null) + Write(Data.Models.Metadata.Display.HBEndKey, hbEnd.ToString()); + + long? hbStart = ReadLong(Data.Models.Metadata.Display.HBStartKey); + if (hbStart is not null) + Write(Data.Models.Metadata.Display.HBStartKey, hbStart.ToString()); + + long? height = ReadLong(Data.Models.Metadata.Display.HeightKey); + if (height is not null) + Write(Data.Models.Metadata.Display.HeightKey, height.ToString()); + + long? hTotal = ReadLong(Data.Models.Metadata.Display.HTotalKey); + if (hTotal is not null) + Write(Data.Models.Metadata.Display.HTotalKey, hTotal.ToString()); + + long? pixClock = ReadLong(Data.Models.Metadata.Display.PixClockKey); + if (pixClock is not null) + Write(Data.Models.Metadata.Display.PixClockKey, pixClock.ToString()); + + double? refresh = ReadDouble(Data.Models.Metadata.Display.RefreshKey); + if (refresh is not null) + Write(Data.Models.Metadata.Display.RefreshKey, refresh.ToString()); + + long? rotate = ReadLong(Data.Models.Metadata.Display.RotateKey); + if (rotate is not null) + Write(Data.Models.Metadata.Display.RotateKey, rotate.ToString()); + + string? displayType = ReadString(Data.Models.Metadata.Display.DisplayTypeKey); + if (displayType is not null) + Write(Data.Models.Metadata.Display.DisplayTypeKey, displayType.AsDisplayType().AsStringValue()); + + long? vbEnd = ReadLong(Data.Models.Metadata.Display.VBEndKey); + if (vbEnd is not null) + Write(Data.Models.Metadata.Display.VBEndKey, vbEnd.ToString()); + + long? vbStart = ReadLong(Data.Models.Metadata.Display.VBStartKey); + if (vbStart is not null) + Write(Data.Models.Metadata.Display.VBStartKey, vbStart.ToString()); + + long? vTotal = ReadLong(Data.Models.Metadata.Display.VTotalKey); + if (vTotal is not null) + Write(Data.Models.Metadata.Display.VTotalKey, vTotal.ToString()); + + long? width = ReadLong(Data.Models.Metadata.Display.WidthKey); + if (width is not null) + Write(Data.Models.Metadata.Display.WidthKey, width.ToString()); } public Display(Data.Models.Metadata.Display item, Machine machine, Source source) : this(item) @@ -60,6 +85,7 @@ namespace SabreTools.Metadata.DatItems.Formats public Display(Data.Models.Metadata.Video item) : base() { + // TODO: Convert this block to more traditional set of if/then Write(Data.Models.Metadata.Video.AspectXKey, NumberHelper.ConvertToInt64(item.ReadString(Data.Models.Metadata.Video.AspectXKey))); Write(Data.Models.Metadata.Video.AspectYKey, NumberHelper.ConvertToInt64(item.ReadString(Data.Models.Metadata.Video.AspectYKey))); Write(Data.Models.Metadata.Display.DisplayTypeKey, item.ReadString(Data.Models.Metadata.Video.ScreenKey).AsDisplayType().AsStringValue()); @@ -81,18 +107,29 @@ namespace SabreTools.Metadata.DatItems.Formats } // Process flag values - if (ReadLong(Data.Models.Metadata.Video.AspectXKey) is not null) - Write(Data.Models.Metadata.Video.AspectXKey, ReadLong(Data.Models.Metadata.Video.AspectXKey).ToString()); - if (ReadLong(Data.Models.Metadata.Video.AspectYKey) is not null) - Write(Data.Models.Metadata.Video.AspectYKey, ReadLong(Data.Models.Metadata.Video.AspectYKey).ToString()); - if (ReadLong(Data.Models.Metadata.Video.HeightKey) is not null) - Write(Data.Models.Metadata.Display.HeightKey, ReadLong(Data.Models.Metadata.Video.HeightKey).ToString()); - if (ReadDouble(Data.Models.Metadata.Video.RefreshKey) is not null) - Write(Data.Models.Metadata.Display.RefreshKey, ReadDouble(Data.Models.Metadata.Video.RefreshKey).ToString()); - if (ReadString(Data.Models.Metadata.Video.ScreenKey) is not null) - Write(Data.Models.Metadata.Display.DisplayTypeKey, ReadString(Data.Models.Metadata.Video.ScreenKey).AsDisplayType().AsStringValue()); - if (ReadLong(Data.Models.Metadata.Video.WidthKey) is not null) - Write(Data.Models.Metadata.Display.WidthKey, ReadLong(Data.Models.Metadata.Video.WidthKey).ToString()); + long? aspectX = ReadLong(Data.Models.Metadata.Video.AspectXKey); + if (aspectX is not null) + Write(Data.Models.Metadata.Video.AspectXKey, aspectX.ToString()); + + long? aspectY = ReadLong(Data.Models.Metadata.Video.AspectYKey); + if (aspectY is not null) + Write(Data.Models.Metadata.Video.AspectYKey, aspectY.ToString()); + + long? height = ReadLong(Data.Models.Metadata.Video.HeightKey); + if (height is not null) + Write(Data.Models.Metadata.Display.HeightKey, height.ToString()); + + double? refresh = ReadDouble(Data.Models.Metadata.Video.RefreshKey); + if (refresh is not null) + Write(Data.Models.Metadata.Display.RefreshKey, refresh.ToString()); + + string? screen = ReadString(Data.Models.Metadata.Video.ScreenKey); + if (screen is not null) + Write(Data.Models.Metadata.Display.DisplayTypeKey, screen.AsDisplayType().AsStringValue()); + + long? width = ReadLong(Data.Models.Metadata.Video.WidthKey); + if (width is not null) + Write(Data.Models.Metadata.Display.WidthKey, width.ToString()); } public Display(Data.Models.Metadata.Video item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/Driver.cs b/SabreTools.Metadata.DatItems/Formats/Driver.cs index 4ab69a5c..369f9071 100644 --- a/SabreTools.Metadata.DatItems/Formats/Driver.cs +++ b/SabreTools.Metadata.DatItems/Formats/Driver.cs @@ -23,28 +23,49 @@ namespace SabreTools.Metadata.DatItems.Formats public Driver(Data.Models.Metadata.Driver item) : base(item) { // Process flag values - if (ReadString(Data.Models.Metadata.Driver.CocktailKey) is not null) - Write(Data.Models.Metadata.Driver.CocktailKey, ReadString(Data.Models.Metadata.Driver.CocktailKey).AsSupportStatus().AsStringValue()); - if (ReadString(Data.Models.Metadata.Driver.ColorKey) is not null) - Write(Data.Models.Metadata.Driver.ColorKey, ReadString(Data.Models.Metadata.Driver.ColorKey).AsSupportStatus().AsStringValue()); - if (ReadString(Data.Models.Metadata.Driver.EmulationKey) is not null) - Write(Data.Models.Metadata.Driver.EmulationKey, ReadString(Data.Models.Metadata.Driver.EmulationKey).AsSupportStatus().AsStringValue()); - if (ReadBool(Data.Models.Metadata.Driver.IncompleteKey) is not null) - Write(Data.Models.Metadata.Driver.IncompleteKey, ReadBool(Data.Models.Metadata.Driver.IncompleteKey).FromYesNo()); - if (ReadBool(Data.Models.Metadata.Driver.NoSoundHardwareKey) is not null) - Write(Data.Models.Metadata.Driver.NoSoundHardwareKey, ReadBool(Data.Models.Metadata.Driver.NoSoundHardwareKey).FromYesNo()); - if (ReadLong(Data.Models.Metadata.Driver.PaletteSizeKey) is not null) - Write(Data.Models.Metadata.Driver.PaletteSizeKey, ReadLong(Data.Models.Metadata.Driver.PaletteSizeKey).ToString()); - if (ReadBool(Data.Models.Metadata.Driver.RequiresArtworkKey) is not null) - Write(Data.Models.Metadata.Driver.RequiresArtworkKey, ReadBool(Data.Models.Metadata.Driver.RequiresArtworkKey).FromYesNo()); - if (ReadString(Data.Models.Metadata.Driver.SaveStateKey) is not null) - Write(Data.Models.Metadata.Driver.SaveStateKey, ReadString(Data.Models.Metadata.Driver.SaveStateKey).AsSupported().AsStringValue(useSecond: true)); - if (ReadString(Data.Models.Metadata.Driver.SoundKey) is not null) - Write(Data.Models.Metadata.Driver.SoundKey, ReadString(Data.Models.Metadata.Driver.SoundKey).AsSupportStatus().AsStringValue()); - if (ReadString(Data.Models.Metadata.Driver.StatusKey) is not null) - Write(Data.Models.Metadata.Driver.StatusKey, ReadString(Data.Models.Metadata.Driver.StatusKey).AsSupportStatus().AsStringValue()); - if (ReadBool(Data.Models.Metadata.Driver.UnofficialKey) is not null) - Write(Data.Models.Metadata.Driver.UnofficialKey, ReadBool(Data.Models.Metadata.Driver.UnofficialKey).FromYesNo()); + string? cocktail = ReadString(Data.Models.Metadata.Driver.CocktailKey); + if (cocktail is not null) + Write(Data.Models.Metadata.Driver.CocktailKey, cocktail.AsSupportStatus().AsStringValue()); + + string? color = ReadString(Data.Models.Metadata.Driver.ColorKey); + if (color is not null) + Write(Data.Models.Metadata.Driver.ColorKey, color.AsSupportStatus().AsStringValue()); + + string? emulation = ReadString(Data.Models.Metadata.Driver.EmulationKey); + if (emulation is not null) + Write(Data.Models.Metadata.Driver.EmulationKey, emulation.AsSupportStatus().AsStringValue()); + + bool? incomplete = ReadBool(Data.Models.Metadata.Driver.IncompleteKey); + if (incomplete is not null) + Write(Data.Models.Metadata.Driver.IncompleteKey, incomplete.FromYesNo()); + + bool? noSoundHardware = ReadBool(Data.Models.Metadata.Driver.NoSoundHardwareKey); + if (noSoundHardware is not null) + Write(Data.Models.Metadata.Driver.NoSoundHardwareKey, noSoundHardware.FromYesNo()); + + long? paletteSize = ReadLong(Data.Models.Metadata.Driver.PaletteSizeKey); + if (paletteSize is not null) + Write(Data.Models.Metadata.Driver.PaletteSizeKey, paletteSize.ToString()); + + bool? requiresArtwork = ReadBool(Data.Models.Metadata.Driver.RequiresArtworkKey); + if (requiresArtwork is not null) + Write(Data.Models.Metadata.Driver.RequiresArtworkKey, requiresArtwork.FromYesNo()); + + string? saveState = ReadString(Data.Models.Metadata.Driver.SaveStateKey); + if (saveState is not null) + Write(Data.Models.Metadata.Driver.SaveStateKey, saveState.AsSupported().AsStringValue(useSecond: true)); + + string? sound = ReadString(Data.Models.Metadata.Driver.SoundKey); + if (sound is not null) + Write(Data.Models.Metadata.Driver.SoundKey, sound.AsSupportStatus().AsStringValue()); + + string? status = ReadString(Data.Models.Metadata.Driver.StatusKey); + if (status is not null) + Write(Data.Models.Metadata.Driver.StatusKey, status.AsSupportStatus().AsStringValue()); + + bool? unofficial = ReadBool(Data.Models.Metadata.Driver.UnofficialKey); + if (unofficial is not null) + Write(Data.Models.Metadata.Driver.UnofficialKey, unofficial.FromYesNo()); } public Driver(Data.Models.Metadata.Driver item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/Feature.cs b/SabreTools.Metadata.DatItems/Formats/Feature.cs index e0503110..9c9692d9 100644 --- a/SabreTools.Metadata.DatItems/Formats/Feature.cs +++ b/SabreTools.Metadata.DatItems/Formats/Feature.cs @@ -23,12 +23,17 @@ namespace SabreTools.Metadata.DatItems.Formats public Feature(Data.Models.Metadata.Feature item) : base(item) { // Process flag values - if (ReadString(Data.Models.Metadata.Feature.OverallKey) is not null) - Write(Data.Models.Metadata.Feature.OverallKey, ReadString(Data.Models.Metadata.Feature.OverallKey).AsFeatureStatus().AsStringValue()); - if (ReadString(Data.Models.Metadata.Feature.StatusKey) is not null) - Write(Data.Models.Metadata.Feature.StatusKey, ReadString(Data.Models.Metadata.Feature.StatusKey).AsFeatureStatus().AsStringValue()); - if (ReadString(Data.Models.Metadata.Feature.FeatureTypeKey) is not null) - Write(Data.Models.Metadata.Feature.FeatureTypeKey, ReadString(Data.Models.Metadata.Feature.FeatureTypeKey).AsFeatureType().AsStringValue()); + string? overall = ReadString(Data.Models.Metadata.Feature.OverallKey); + if (overall is not null) + Write(Data.Models.Metadata.Feature.OverallKey, overall.AsFeatureStatus().AsStringValue()); + + string? status = ReadString(Data.Models.Metadata.Feature.StatusKey); + if (status is not null) + Write(Data.Models.Metadata.Feature.StatusKey, status.AsFeatureStatus().AsStringValue()); + + string? featureType = ReadString(Data.Models.Metadata.Feature.FeatureTypeKey); + if (featureType is not null) + Write(Data.Models.Metadata.Feature.FeatureTypeKey, featureType.AsFeatureType().AsStringValue()); } public Feature(Data.Models.Metadata.Feature item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/Input.cs b/SabreTools.Metadata.DatItems/Formats/Input.cs index b32e32f9..ed29ab64 100644 --- a/SabreTools.Metadata.DatItems/Formats/Input.cs +++ b/SabreTools.Metadata.DatItems/Formats/Input.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -35,16 +34,25 @@ namespace SabreTools.Metadata.DatItems.Formats public Input(Data.Models.Metadata.Input item) : base(item) { // Process flag values - if (ReadLong(Data.Models.Metadata.Input.ButtonsKey) is not null) - Write(Data.Models.Metadata.Input.ButtonsKey, ReadLong(Data.Models.Metadata.Input.ButtonsKey).ToString()); - if (ReadLong(Data.Models.Metadata.Input.CoinsKey) is not null) - Write(Data.Models.Metadata.Input.CoinsKey, ReadLong(Data.Models.Metadata.Input.CoinsKey).ToString()); - if (ReadLong(Data.Models.Metadata.Input.PlayersKey) is not null) - Write(Data.Models.Metadata.Input.PlayersKey, ReadLong(Data.Models.Metadata.Input.PlayersKey).ToString()); - if (ReadBool(Data.Models.Metadata.Input.ServiceKey) is not null) - Write(Data.Models.Metadata.Input.ServiceKey, ReadBool(Data.Models.Metadata.Input.ServiceKey).FromYesNo()); - if (ReadBool(Data.Models.Metadata.Input.TiltKey) is not null) - Write(Data.Models.Metadata.Input.TiltKey, ReadBool(Data.Models.Metadata.Input.TiltKey).FromYesNo()); + long? buttons = ReadLong(Data.Models.Metadata.Input.ButtonsKey); + if (buttons is not null) + Write(Data.Models.Metadata.Input.ButtonsKey, buttons.ToString()); + + long? coins = ReadLong(Data.Models.Metadata.Input.CoinsKey); + if (coins is not null) + Write(Data.Models.Metadata.Input.CoinsKey, coins.ToString()); + + long? players = ReadLong(Data.Models.Metadata.Input.PlayersKey); + if (players is not null) + Write(Data.Models.Metadata.Input.PlayersKey, players.ToString()); + + bool? service = ReadBool(Data.Models.Metadata.Input.ServiceKey); + if (service is not null) + Write(Data.Models.Metadata.Input.ServiceKey, service.FromYesNo()); + + bool? tilt = ReadBool(Data.Models.Metadata.Input.TiltKey); + if (tilt is not null) + Write(Data.Models.Metadata.Input.TiltKey, tilt.FromYesNo()); // Handle subitems var controls = item.ReadArray(Data.Models.Metadata.Input.ControlKey); diff --git a/SabreTools.Metadata.DatItems/Formats/Media.cs b/SabreTools.Metadata.DatItems/Formats/Media.cs index c8e4bc27..69154cbf 100644 --- a/SabreTools.Metadata.DatItems/Formats/Media.cs +++ b/SabreTools.Metadata.DatItems/Formats/Media.cs @@ -30,12 +30,17 @@ namespace SabreTools.Metadata.DatItems.Formats Write(DupeTypeKey, 0x00); // Process hash values - if (ReadString(Data.Models.Metadata.Media.MD5Key) is not null) - Write(Data.Models.Metadata.Media.MD5Key, TextHelper.NormalizeMD5(ReadString(Data.Models.Metadata.Media.MD5Key))); - if (ReadString(Data.Models.Metadata.Media.SHA1Key) is not null) - Write(Data.Models.Metadata.Media.SHA1Key, TextHelper.NormalizeSHA1(ReadString(Data.Models.Metadata.Media.SHA1Key))); - if (ReadString(Data.Models.Metadata.Media.SHA256Key) is not null) - Write(Data.Models.Metadata.Media.SHA256Key, TextHelper.NormalizeSHA256(ReadString(Data.Models.Metadata.Media.SHA256Key))); + string? md5 = ReadString(Data.Models.Metadata.Media.MD5Key); + if (md5 is not null) + Write(Data.Models.Metadata.Media.MD5Key, TextHelper.NormalizeMD5(md5)); + + string? sha1 = ReadString(Data.Models.Metadata.Media.SHA1Key); + if (sha1 is not null) + Write(Data.Models.Metadata.Media.SHA1Key, TextHelper.NormalizeSHA1(sha1)); + + string? sha256 = ReadString(Data.Models.Metadata.Media.SHA256Key); + if (sha256 is not null) + Write(Data.Models.Metadata.Media.SHA256Key, TextHelper.NormalizeSHA256(sha256)); } public Media(Data.Models.Metadata.Media item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/PartFeature.cs b/SabreTools.Metadata.DatItems/Formats/PartFeature.cs index a709f2ee..9d9b2555 100644 --- a/SabreTools.Metadata.DatItems/Formats/PartFeature.cs +++ b/SabreTools.Metadata.DatItems/Formats/PartFeature.cs @@ -32,12 +32,17 @@ namespace SabreTools.Metadata.DatItems.Formats public PartFeature(Data.Models.Metadata.Feature item) : base(item) { // Process flag values - if (ReadString(Data.Models.Metadata.Feature.OverallKey) is not null) - Write(Data.Models.Metadata.Feature.OverallKey, ReadString(Data.Models.Metadata.Feature.OverallKey).AsFeatureStatus().AsStringValue()); - if (ReadString(Data.Models.Metadata.Feature.StatusKey) is not null) - Write(Data.Models.Metadata.Feature.StatusKey, ReadString(Data.Models.Metadata.Feature.StatusKey).AsFeatureStatus().AsStringValue()); - if (ReadString(Data.Models.Metadata.Feature.FeatureTypeKey) is not null) - Write(Data.Models.Metadata.Feature.FeatureTypeKey, ReadString(Data.Models.Metadata.Feature.FeatureTypeKey).AsFeatureType().AsStringValue()); + string? overall = ReadString(Data.Models.Metadata.Feature.OverallKey); + if (overall is not null) + Write(Data.Models.Metadata.Feature.OverallKey, overall.AsFeatureStatus().AsStringValue()); + + string? status = ReadString(Data.Models.Metadata.Feature.StatusKey); + if (status is not null) + Write(Data.Models.Metadata.Feature.StatusKey, status.AsFeatureStatus().AsStringValue()); + + string? featureType = ReadString(Data.Models.Metadata.Feature.FeatureTypeKey); + if (featureType is not null) + Write(Data.Models.Metadata.Feature.FeatureTypeKey, featureType.AsFeatureType().AsStringValue()); } public PartFeature(Data.Models.Metadata.Feature item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/RamOption.cs b/SabreTools.Metadata.DatItems/Formats/RamOption.cs index 3e838066..dca4d71d 100644 --- a/SabreTools.Metadata.DatItems/Formats/RamOption.cs +++ b/SabreTools.Metadata.DatItems/Formats/RamOption.cs @@ -23,8 +23,9 @@ namespace SabreTools.Metadata.DatItems.Formats public RamOption(Data.Models.Metadata.RamOption item) : base(item) { // Process flag values - if (ReadBool(Data.Models.Metadata.RamOption.DefaultKey) is not null) - Write(Data.Models.Metadata.RamOption.DefaultKey, ReadBool(Data.Models.Metadata.RamOption.DefaultKey).FromYesNo()); + bool? defaultValue = ReadBool(Data.Models.Metadata.RamOption.DefaultKey); + if (defaultValue is not null) + Write(Data.Models.Metadata.RamOption.DefaultKey, defaultValue.FromYesNo()); } public RamOption(Data.Models.Metadata.RamOption item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/Release.cs b/SabreTools.Metadata.DatItems/Formats/Release.cs index 61aadec5..c0da36c5 100644 --- a/SabreTools.Metadata.DatItems/Formats/Release.cs +++ b/SabreTools.Metadata.DatItems/Formats/Release.cs @@ -23,8 +23,9 @@ namespace SabreTools.Metadata.DatItems.Formats public Release(Data.Models.Metadata.Release item) : base(item) { // Process flag values - if (ReadBool(Data.Models.Metadata.Release.DefaultKey) is not null) - Write(Data.Models.Metadata.Release.DefaultKey, ReadBool(Data.Models.Metadata.Release.DefaultKey).FromYesNo()); + bool? defaultValue = ReadBool(Data.Models.Metadata.Release.DefaultKey); + if (defaultValue is not null) + Write(Data.Models.Metadata.Release.DefaultKey, defaultValue.FromYesNo()); } public Release(Data.Models.Metadata.Release item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/Rom.cs b/SabreTools.Metadata.DatItems/Formats/Rom.cs index a1db9cf2..8eda87ab 100644 --- a/SabreTools.Metadata.DatItems/Formats/Rom.cs +++ b/SabreTools.Metadata.DatItems/Formats/Rom.cs @@ -91,6 +91,7 @@ namespace SabreTools.Metadata.DatItems.Formats // If we don't have rom data, we can't do anything Data.Models.Metadata.Rom? rom = null; OpenMSXSubType subType = OpenMSXSubType.NULL; + if (item.Read(Data.Models.Metadata.Dump.RomKey) is not null) { rom = item.Read(Data.Models.Metadata.Dump.RomKey); @@ -122,9 +123,9 @@ namespace SabreTools.Metadata.DatItems.Formats Write(Data.Models.Metadata.Rom.StartKey, rom.ReadString(Data.Models.Metadata.Rom.StartKey)); Write(SourceKey, source); - if (item.Read(Data.Models.Metadata.Dump.OriginalKey) is not null) + var original = item.Read(Data.Models.Metadata.Dump.OriginalKey); + if (original is not null) { - var original = item.Read(Data.Models.Metadata.Dump.OriginalKey)!; Write("ORIGINAL", new Original { Value = original.ReadBool(Data.Models.Metadata.Original.ValueKey), @@ -135,34 +136,59 @@ namespace SabreTools.Metadata.DatItems.Formats CopyMachineInformation(machine); // Process hash values - if (ReadLong(Data.Models.Metadata.Rom.SizeKey) is not null) - Write(Data.Models.Metadata.Rom.SizeKey, ReadLong(Data.Models.Metadata.Rom.SizeKey).ToString()); + long? size = ReadLong(Data.Models.Metadata.Rom.SizeKey); + if (size is not null) + Write(Data.Models.Metadata.Rom.SizeKey, size.ToString()); + // TODO: This should be normalized to CRC-16 - if (ReadString(Data.Models.Metadata.Rom.CRC16Key) is not null) - Write(Data.Models.Metadata.Rom.CRC16Key, NormalizeHashData(ReadString(Data.Models.Metadata.Rom.CRC16Key), 4)); - if (ReadString(Data.Models.Metadata.Rom.CRCKey) is not null) - Write(Data.Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(ReadString(Data.Models.Metadata.Rom.CRCKey))); + string? crc16 = ReadString(Data.Models.Metadata.Rom.CRC16Key); + if (crc16 is not null) + Write(Data.Models.Metadata.Rom.CRC16Key, NormalizeHashData(crc16, 4)); + + string? crc = ReadString(Data.Models.Metadata.Rom.CRCKey); + if (crc is not null) + Write(Data.Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(crc)); + // TODO: This should be normalized to CRC-64 - if (ReadString(Data.Models.Metadata.Rom.CRC64Key) is not null) - Write(Data.Models.Metadata.Rom.CRC64Key, NormalizeHashData(ReadString(Data.Models.Metadata.Rom.CRC64Key), 16)); - if (ReadString(Data.Models.Metadata.Rom.MD2Key) is not null) - Write(Data.Models.Metadata.Rom.MD2Key, TextHelper.NormalizeMD2(ReadString(Data.Models.Metadata.Rom.MD2Key))); - if (ReadString(Data.Models.Metadata.Rom.MD4Key) is not null) - Write(Data.Models.Metadata.Rom.MD4Key, TextHelper.NormalizeMD5(ReadString(Data.Models.Metadata.Rom.MD4Key))); - if (ReadString(Data.Models.Metadata.Rom.MD5Key) is not null) - Write(Data.Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(ReadString(Data.Models.Metadata.Rom.MD5Key))); - if (ReadString(Data.Models.Metadata.Rom.RIPEMD128Key) is not null) - Write(Data.Models.Metadata.Rom.RIPEMD128Key, TextHelper.NormalizeRIPEMD128(ReadString(Data.Models.Metadata.Rom.RIPEMD128Key))); - if (ReadString(Data.Models.Metadata.Rom.RIPEMD160Key) is not null) - Write(Data.Models.Metadata.Rom.RIPEMD160Key, TextHelper.NormalizeRIPEMD160(ReadString(Data.Models.Metadata.Rom.RIPEMD160Key))); - if (ReadString(Data.Models.Metadata.Rom.SHA1Key) is not null) - Write(Data.Models.Metadata.Rom.SHA1Key, TextHelper.NormalizeSHA1(ReadString(Data.Models.Metadata.Rom.SHA1Key))); - if (ReadString(Data.Models.Metadata.Rom.SHA256Key) is not null) - Write(Data.Models.Metadata.Rom.SHA256Key, TextHelper.NormalizeSHA256(ReadString(Data.Models.Metadata.Rom.SHA256Key))); - if (ReadString(Data.Models.Metadata.Rom.SHA384Key) is not null) - Write(Data.Models.Metadata.Rom.SHA384Key, TextHelper.NormalizeSHA384(ReadString(Data.Models.Metadata.Rom.SHA384Key))); - if (ReadString(Data.Models.Metadata.Rom.SHA512Key) is not null) - Write(Data.Models.Metadata.Rom.SHA512Key, TextHelper.NormalizeSHA512(ReadString(Data.Models.Metadata.Rom.SHA512Key))); + string? crc64 = ReadString(Data.Models.Metadata.Rom.CRC64Key); + if (crc64 is not null) + Write(Data.Models.Metadata.Rom.CRC64Key, NormalizeHashData(crc64, 16)); + + string? md2 = ReadString(Data.Models.Metadata.Rom.MD2Key); + if (md2 is not null) + Write(Data.Models.Metadata.Rom.MD2Key, TextHelper.NormalizeMD2(md2)); + + string? md4 = ReadString(Data.Models.Metadata.Rom.MD4Key); + if (md4 is not null) + Write(Data.Models.Metadata.Rom.MD4Key, TextHelper.NormalizeMD5(md4)); + + string? md5 = ReadString(Data.Models.Metadata.Rom.MD5Key); + if (md5 is not null) + Write(Data.Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(md5)); + + string? ripemd128 = ReadString(Data.Models.Metadata.Rom.RIPEMD128Key); + if (ripemd128 is not null) + Write(Data.Models.Metadata.Rom.RIPEMD128Key, TextHelper.NormalizeRIPEMD128(ripemd128)); + + string? ripemd160 = ReadString(Data.Models.Metadata.Rom.RIPEMD160Key); + if (ripemd160 is not null) + Write(Data.Models.Metadata.Rom.RIPEMD160Key, TextHelper.NormalizeRIPEMD160(ripemd160)); + + string? sha1 = ReadString(Data.Models.Metadata.Rom.SHA1Key); + if (sha1 is not null) + Write(Data.Models.Metadata.Rom.SHA1Key, TextHelper.NormalizeSHA1(sha1)); + + string? sha256 = ReadString(Data.Models.Metadata.Rom.SHA256Key); + if (sha256 is not null) + Write(Data.Models.Metadata.Rom.SHA256Key, TextHelper.NormalizeSHA256(sha256)); + + string? sha384 = ReadString(Data.Models.Metadata.Rom.SHA384Key); + if (sha384 is not null) + Write(Data.Models.Metadata.Rom.SHA384Key, TextHelper.NormalizeSHA384(sha384)); + + string? sha512 = ReadString(Data.Models.Metadata.Rom.SHA512Key); + if (sha512 is not null) + Write(Data.Models.Metadata.Rom.SHA512Key, TextHelper.NormalizeSHA512(sha512)); } public Rom(Data.Models.Metadata.Rom item) : base(item) @@ -170,52 +196,92 @@ namespace SabreTools.Metadata.DatItems.Formats Write(DupeTypeKey, 0x00); // Process flag values - if (ReadBool(Data.Models.Metadata.Rom.DisposeKey) is not null) - Write(Data.Models.Metadata.Rom.DisposeKey, ReadBool(Data.Models.Metadata.Rom.DisposeKey).FromYesNo()); - if (ReadBool(Data.Models.Metadata.Rom.InvertedKey) is not null) - Write(Data.Models.Metadata.Rom.InvertedKey, ReadBool(Data.Models.Metadata.Rom.InvertedKey).FromYesNo()); - if (ReadString(Data.Models.Metadata.Rom.LoadFlagKey) is not null) - Write(Data.Models.Metadata.Rom.LoadFlagKey, ReadString(Data.Models.Metadata.Rom.LoadFlagKey).AsLoadFlag().AsStringValue()); - if (ReadString(Data.Models.Metadata.Rom.OpenMSXMediaType) is not null) - Write(Data.Models.Metadata.Rom.OpenMSXMediaType, ReadString(Data.Models.Metadata.Rom.OpenMSXMediaType).AsOpenMSXSubType().AsStringValue()); - if (ReadBool(Data.Models.Metadata.Rom.MIAKey) is not null) - Write(Data.Models.Metadata.Rom.MIAKey, ReadBool(Data.Models.Metadata.Rom.MIAKey).FromYesNo()); - if (ReadBool(Data.Models.Metadata.Rom.OptionalKey) is not null) - Write(Data.Models.Metadata.Rom.OptionalKey, ReadBool(Data.Models.Metadata.Rom.OptionalKey).FromYesNo()); - if (ReadBool(Data.Models.Metadata.Rom.SoundOnlyKey) is not null) - Write(Data.Models.Metadata.Rom.SoundOnlyKey, ReadBool(Data.Models.Metadata.Rom.SoundOnlyKey).FromYesNo()); - if (ReadString(Data.Models.Metadata.Rom.StatusKey) is not null) - Write(Data.Models.Metadata.Rom.StatusKey, ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus().AsStringValue()); + bool? dispose = ReadBool(Data.Models.Metadata.Rom.DisposeKey); + if (dispose is not null) + Write(Data.Models.Metadata.Rom.DisposeKey, dispose.FromYesNo()); + + bool? inverted = ReadBool(Data.Models.Metadata.Rom.InvertedKey); + if (inverted is not null) + Write(Data.Models.Metadata.Rom.InvertedKey, inverted.FromYesNo()); + + string? loadFlag = ReadString(Data.Models.Metadata.Rom.LoadFlagKey); + if (loadFlag is not null) + Write(Data.Models.Metadata.Rom.LoadFlagKey, loadFlag.AsLoadFlag().AsStringValue()); + + string? openMSXMediaType = ReadString(Data.Models.Metadata.Rom.OpenMSXMediaType); + if (openMSXMediaType is not null) + Write(Data.Models.Metadata.Rom.OpenMSXMediaType, openMSXMediaType.AsOpenMSXSubType().AsStringValue()); + + bool? mia = ReadBool(Data.Models.Metadata.Rom.MIAKey); + if (mia is not null) + Write(Data.Models.Metadata.Rom.MIAKey, mia.FromYesNo()); + + bool? optional = ReadBool(Data.Models.Metadata.Rom.OptionalKey); + if (optional is not null) + Write(Data.Models.Metadata.Rom.OptionalKey, optional.FromYesNo()); + + bool? soundOnly = ReadBool(Data.Models.Metadata.Rom.SoundOnlyKey); + if (soundOnly is not null) + Write(Data.Models.Metadata.Rom.SoundOnlyKey, soundOnly.FromYesNo()); + + string? status = ReadString(Data.Models.Metadata.Rom.StatusKey); + if (status is not null) + Write(Data.Models.Metadata.Rom.StatusKey, status.AsItemStatus().AsStringValue()); // Process hash values - if (ReadLong(Data.Models.Metadata.Rom.SizeKey) is not null) - Write(Data.Models.Metadata.Rom.SizeKey, ReadLong(Data.Models.Metadata.Rom.SizeKey).ToString()); + long? size = ReadLong(Data.Models.Metadata.Rom.SizeKey); + if (size is not null) + Write(Data.Models.Metadata.Rom.SizeKey, size.ToString()); + // TODO: This should be normalized to CRC-16 - if (ReadString(Data.Models.Metadata.Rom.CRC16Key) is not null) - Write(Data.Models.Metadata.Rom.CRC16Key, NormalizeHashData(ReadString(Data.Models.Metadata.Rom.CRC16Key), 4)); - if (ReadString(Data.Models.Metadata.Rom.CRCKey) is not null) - Write(Data.Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(ReadString(Data.Models.Metadata.Rom.CRCKey))); + string? crc16 = ReadString(Data.Models.Metadata.Rom.CRC16Key); + if (crc16 is not null) + Write(Data.Models.Metadata.Rom.CRC16Key, NormalizeHashData(crc16, 4)); + + string? crc = ReadString(Data.Models.Metadata.Rom.CRCKey); + if (crc is not null) + Write(Data.Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(crc)); + // TODO: This should be normalized to CRC-64 - if (ReadString(Data.Models.Metadata.Rom.CRC64Key) is not null) - Write(Data.Models.Metadata.Rom.CRC64Key, NormalizeHashData(ReadString(Data.Models.Metadata.Rom.CRC64Key), 16)); - if (ReadString(Data.Models.Metadata.Rom.MD2Key) is not null) - Write(Data.Models.Metadata.Rom.MD2Key, TextHelper.NormalizeMD2(ReadString(Data.Models.Metadata.Rom.MD2Key))); - if (ReadString(Data.Models.Metadata.Rom.MD4Key) is not null) - Write(Data.Models.Metadata.Rom.MD4Key, TextHelper.NormalizeMD4(ReadString(Data.Models.Metadata.Rom.MD4Key))); - if (ReadString(Data.Models.Metadata.Rom.MD5Key) is not null) - Write(Data.Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(ReadString(Data.Models.Metadata.Rom.MD5Key))); - if (ReadString(Data.Models.Metadata.Rom.RIPEMD128Key) is not null) - Write(Data.Models.Metadata.Rom.RIPEMD128Key, TextHelper.NormalizeRIPEMD128(ReadString(Data.Models.Metadata.Rom.RIPEMD128Key))); - if (ReadString(Data.Models.Metadata.Rom.RIPEMD160Key) is not null) - Write(Data.Models.Metadata.Rom.RIPEMD160Key, TextHelper.NormalizeRIPEMD160(ReadString(Data.Models.Metadata.Rom.RIPEMD160Key))); - if (ReadString(Data.Models.Metadata.Rom.SHA1Key) is not null) - Write(Data.Models.Metadata.Rom.SHA1Key, TextHelper.NormalizeSHA1(ReadString(Data.Models.Metadata.Rom.SHA1Key))); - if (ReadString(Data.Models.Metadata.Rom.SHA256Key) is not null) - Write(Data.Models.Metadata.Rom.SHA256Key, TextHelper.NormalizeSHA256(ReadString(Data.Models.Metadata.Rom.SHA256Key))); - if (ReadString(Data.Models.Metadata.Rom.SHA384Key) is not null) - Write(Data.Models.Metadata.Rom.SHA384Key, TextHelper.NormalizeSHA384(ReadString(Data.Models.Metadata.Rom.SHA384Key))); - if (ReadString(Data.Models.Metadata.Rom.SHA512Key) is not null) - Write(Data.Models.Metadata.Rom.SHA512Key, TextHelper.NormalizeSHA512(ReadString(Data.Models.Metadata.Rom.SHA512Key))); + string? crc64 = ReadString(Data.Models.Metadata.Rom.CRC64Key); + if (crc64 is not null) + Write(Data.Models.Metadata.Rom.CRC64Key, NormalizeHashData(crc64, 16)); + + string? md2 = ReadString(Data.Models.Metadata.Rom.MD2Key); + if (md2 is not null) + Write(Data.Models.Metadata.Rom.MD2Key, TextHelper.NormalizeMD2(md2)); + + string? md4 = ReadString(Data.Models.Metadata.Rom.MD4Key); + if (md4 is not null) + Write(Data.Models.Metadata.Rom.MD4Key, TextHelper.NormalizeMD5(md4)); + + string? md5 = ReadString(Data.Models.Metadata.Rom.MD5Key); + if (md5 is not null) + Write(Data.Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(md5)); + + string? ripemd128 = ReadString(Data.Models.Metadata.Rom.RIPEMD128Key); + if (ripemd128 is not null) + Write(Data.Models.Metadata.Rom.RIPEMD128Key, TextHelper.NormalizeRIPEMD128(ripemd128)); + + string? ripemd160 = ReadString(Data.Models.Metadata.Rom.RIPEMD160Key); + if (ripemd160 is not null) + Write(Data.Models.Metadata.Rom.RIPEMD160Key, TextHelper.NormalizeRIPEMD160(ripemd160)); + + string? sha1 = ReadString(Data.Models.Metadata.Rom.SHA1Key); + if (sha1 is not null) + Write(Data.Models.Metadata.Rom.SHA1Key, TextHelper.NormalizeSHA1(sha1)); + + string? sha256 = ReadString(Data.Models.Metadata.Rom.SHA256Key); + if (sha256 is not null) + Write(Data.Models.Metadata.Rom.SHA256Key, TextHelper.NormalizeSHA256(sha256)); + + string? sha384 = ReadString(Data.Models.Metadata.Rom.SHA384Key); + if (sha384 is not null) + Write(Data.Models.Metadata.Rom.SHA384Key, TextHelper.NormalizeSHA384(sha384)); + + string? sha512 = ReadString(Data.Models.Metadata.Rom.SHA512Key); + if (sha512 is not null) + Write(Data.Models.Metadata.Rom.SHA512Key, TextHelper.NormalizeSHA512(sha512)); } public Rom(Data.Models.Metadata.Rom item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/Slot.cs b/SabreTools.Metadata.DatItems/Formats/Slot.cs index 97353a5d..c363baeb 100644 --- a/SabreTools.Metadata.DatItems/Formats/Slot.cs +++ b/SabreTools.Metadata.DatItems/Formats/Slot.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/SlotOption.cs b/SabreTools.Metadata.DatItems/Formats/SlotOption.cs index 2f8fb6b4..c8aa219c 100644 --- a/SabreTools.Metadata.DatItems/Formats/SlotOption.cs +++ b/SabreTools.Metadata.DatItems/Formats/SlotOption.cs @@ -23,8 +23,9 @@ namespace SabreTools.Metadata.DatItems.Formats public SlotOption(Data.Models.Metadata.SlotOption item) : base(item) { // Process flag values - if (ReadBool(Data.Models.Metadata.SlotOption.DefaultKey) is not null) - Write(Data.Models.Metadata.SlotOption.DefaultKey, ReadBool(Data.Models.Metadata.SlotOption.DefaultKey).FromYesNo()); + bool? defaultValue = ReadBool(Data.Models.Metadata.SlotOption.DefaultKey); + if (defaultValue is not null) + Write(Data.Models.Metadata.SlotOption.DefaultKey, defaultValue.FromYesNo()); } public SlotOption(Data.Models.Metadata.SlotOption item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Formats/SoftwareList.cs b/SabreTools.Metadata.DatItems/Formats/SoftwareList.cs index d6684e4d..85f08e1a 100644 --- a/SabreTools.Metadata.DatItems/Formats/SoftwareList.cs +++ b/SabreTools.Metadata.DatItems/Formats/SoftwareList.cs @@ -23,8 +23,9 @@ namespace SabreTools.Metadata.DatItems.Formats public SoftwareList(Data.Models.Metadata.SoftwareList item) : base(item) { // Process flag values - if (ReadString(Data.Models.Metadata.SoftwareList.StatusKey) is not null) - Write(Data.Models.Metadata.SoftwareList.StatusKey, ReadString(Data.Models.Metadata.SoftwareList.StatusKey).AsSoftwareListStatus().AsStringValue()); + string? status = ReadString(Data.Models.Metadata.SoftwareList.StatusKey); + if (status is not null) + Write(Data.Models.Metadata.SoftwareList.StatusKey, status.AsSoftwareListStatus().AsStringValue()); // Handle subitems // TODO: Handle the Software subitem diff --git a/SabreTools.Metadata.DatItems/Formats/Sound.cs b/SabreTools.Metadata.DatItems/Formats/Sound.cs index d66055e2..b1ffa6d8 100644 --- a/SabreTools.Metadata.DatItems/Formats/Sound.cs +++ b/SabreTools.Metadata.DatItems/Formats/Sound.cs @@ -23,8 +23,9 @@ namespace SabreTools.Metadata.DatItems.Formats public Sound(Data.Models.Metadata.Sound item) : base(item) { // Process flag values - if (ReadLong(Data.Models.Metadata.Sound.ChannelsKey) is not null) - Write(Data.Models.Metadata.Sound.ChannelsKey, ReadLong(Data.Models.Metadata.Sound.ChannelsKey).ToString()); + long? channels = ReadLong(Data.Models.Metadata.Sound.ChannelsKey); + if (channels is not null) + Write(Data.Models.Metadata.Sound.ChannelsKey, channels.ToString()); } public Sound(Data.Models.Metadata.Sound item, Machine machine, Source source) : this(item) diff --git a/SabreTools.Metadata.DatItems/Machine.cs b/SabreTools.Metadata.DatItems/Machine.cs index 50b78cfb..a2481f53 100644 --- a/SabreTools.Metadata.DatItems/Machine.cs +++ b/SabreTools.Metadata.DatItems/Machine.cs @@ -31,31 +31,39 @@ namespace SabreTools.Metadata.DatItems _internal = []; foreach (string fieldName in nonItemFields) { - if (machine.TryGetValue(fieldName, out var value)) - _internal[fieldName] = value; + if (machine.TryGetValue(fieldName, out var fieldValue)) + _internal[fieldName] = fieldValue; } // Process flag values - if (ReadString(Data.Models.Metadata.Machine.Im1CRCKey) is not null) - Write(Data.Models.Metadata.Machine.Im1CRCKey, TextHelper.NormalizeCRC32(ReadString(Data.Models.Metadata.Machine.Im1CRCKey))); - if (ReadString(Data.Models.Metadata.Machine.Im2CRCKey) is not null) - Write(Data.Models.Metadata.Machine.Im2CRCKey, TextHelper.NormalizeCRC32(ReadString(Data.Models.Metadata.Machine.Im2CRCKey))); - if (ReadBool(Data.Models.Metadata.Machine.IsBiosKey) is not null) - Write(Data.Models.Metadata.Machine.IsBiosKey, ReadBool(Data.Models.Metadata.Machine.IsBiosKey).FromYesNo()); - if (ReadBool(Data.Models.Metadata.Machine.IsDeviceKey) is not null) - Write(Data.Models.Metadata.Machine.IsDeviceKey, ReadBool(Data.Models.Metadata.Machine.IsDeviceKey).FromYesNo()); - if (ReadBool(Data.Models.Metadata.Machine.IsMechanicalKey) is not null) - Write(Data.Models.Metadata.Machine.IsMechanicalKey, ReadBool(Data.Models.Metadata.Machine.IsMechanicalKey).FromYesNo()); - if (ReadString(Data.Models.Metadata.Machine.SupportedKey) is not null) - Write(Data.Models.Metadata.Machine.SupportedKey, ReadString(Data.Models.Metadata.Machine.SupportedKey).AsSupported().AsStringValue()); + string? im1Crc = ReadString(Data.Models.Metadata.Machine.Im1CRCKey); + if (im1Crc is not null) + Write(Data.Models.Metadata.Machine.Im1CRCKey, TextHelper.NormalizeCRC32(im1Crc)); + + string? im2Crc = ReadString(Data.Models.Metadata.Machine.Im2CRCKey); + if (im2Crc is not null) + Write(Data.Models.Metadata.Machine.Im2CRCKey, TextHelper.NormalizeCRC32(im2Crc)); + + bool? isBios = ReadBool(Data.Models.Metadata.Machine.IsBiosKey); + if (isBios is not null) + Write(Data.Models.Metadata.Machine.IsBiosKey, isBios.FromYesNo()); + + bool? isDevice = ReadBool(Data.Models.Metadata.Machine.IsDeviceKey); + if (isDevice is not null) + Write(Data.Models.Metadata.Machine.IsDeviceKey, isDevice.FromYesNo()); + + bool? isMechanical = ReadBool(Data.Models.Metadata.Machine.IsMechanicalKey); + if (isMechanical is not null) + Write(Data.Models.Metadata.Machine.IsMechanicalKey, isMechanical.FromYesNo()); + + string? supported = ReadString(Data.Models.Metadata.Machine.SupportedKey); + if (supported is not null) + Write(Data.Models.Metadata.Machine.SupportedKey, supported.AsSupported().AsStringValue()); // Handle Trurip object, if it exists - if (machine.ContainsKey(Data.Models.Metadata.Machine.TruripKey)) - { - var truripItem = machine.Read(Data.Models.Metadata.Machine.TruripKey); - if (truripItem is not null) - Write(Data.Models.Metadata.Machine.TruripKey, new Trurip(truripItem)); - } + var truripItem = machine.Read(Data.Models.Metadata.Machine.TruripKey); + if (truripItem is not null) + Write(Data.Models.Metadata.Machine.TruripKey, new Trurip(truripItem)); } #endregion