Reduce repeated lookups and reads

This commit is contained in:
Matt Nadareski
2026-03-26 16:52:07 -04:00
parent 85aefc8d90
commit 3a3b20df11
32 changed files with 544 additions and 347 deletions

View File

@@ -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.OfflineList.CanOpen>(Data.Models.Metadata.Header.CanOpenKey);
if (canOpen?.Extension is not null)
Header.Write<string[]?>(Data.Models.Metadata.Header.CanOpenKey, canOpen.Extension);
}
var canOpen = item.Read<Data.Models.OfflineList.CanOpen>(Data.Models.Metadata.Header.CanOpenKey);
if (canOpen?.Extension is not null)
Header.Write<string[]?>(Data.Models.Metadata.Header.CanOpenKey, canOpen.Extension);
if (item.ContainsKey(Data.Models.Metadata.Header.ImagesKey))
{
var images = item.Read<Data.Models.OfflineList.Images>(Data.Models.Metadata.Header.ImagesKey);
var images = item.Read<Data.Models.OfflineList.Images>(Data.Models.Metadata.Header.ImagesKey);
if (images is not null)
Header.Write<Data.Models.OfflineList.Images?>(Data.Models.Metadata.Header.ImagesKey, images);
}
if (item.ContainsKey(Data.Models.Metadata.Header.InfosKey))
{
var infos = item.Read<Data.Models.OfflineList.Infos>(Data.Models.Metadata.Header.InfosKey);
var infos = item.Read<Data.Models.OfflineList.Infos>(Data.Models.Metadata.Header.InfosKey);
if (infos is not null)
Header.Write<Data.Models.OfflineList.Infos?>(Data.Models.Metadata.Header.InfosKey, infos);
}
if (item.ContainsKey(Data.Models.Metadata.Header.NewDatKey))
{
var newDat = item.Read<Data.Models.OfflineList.NewDat>(Data.Models.Metadata.Header.NewDatKey);
var newDat = item.Read<Data.Models.OfflineList.NewDat>(Data.Models.Metadata.Header.NewDatKey);
if (newDat is not null)
Header.Write<Data.Models.OfflineList.NewDat?>(Data.Models.Metadata.Header.NewDatKey, newDat);
}
if (item.ContainsKey(Data.Models.Metadata.Header.SearchKey))
{
var search = item.Read<Data.Models.OfflineList.Search>(Data.Models.Metadata.Header.SearchKey);
var search = item.Read<Data.Models.OfflineList.Search>(Data.Models.Metadata.Header.SearchKey);
if (search is not null)
Header.Write<Data.Models.OfflineList.Search?>(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)

View File

@@ -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<string?>(Data.Models.Metadata.SlotOption.DevNameKey, slotOption);
slotOptionItem.CopyMachineInformation(copyFrom);
if (slotOptions.Contains(slotOption))
continue;
var slotItem = new Slot();
slotItem.Write<SlotOption[]?>(Data.Models.Metadata.Slot.SlotOptionKey, [slotOptionItem]);
slotItem.CopyMachineInformation(copyFrom);
slotOptions.Add(slotOption);
var slotOptionItem = new SlotOption();
slotOptionItem.Write<string?>(Data.Models.Metadata.SlotOption.DevNameKey, slotOption);
slotOptionItem.CopyMachineInformation(copyFrom);
Items.AddItem(slotItem, statsOnly: false);
}
var slotItem = new Slot();
slotItem.Write<SlotOption[]?>(Data.Models.Metadata.Slot.SlotOptionKey, [slotOptionItem]);
slotItem.CopyMachineInformation(copyFrom);
Items.AddItem(slotItem, statsOnly: false);
}
}
}

View File

@@ -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

View File

@@ -402,16 +402,17 @@ namespace SabreTools.Metadata.DatFiles
/// <param name="disk">Item to add info from</param>
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);
}
/// <summary>
@@ -420,16 +421,17 @@ namespace SabreTools.Metadata.DatFiles
/// <param name="disk">Item to add info from</param>
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);
}
/// <summary>
@@ -475,7 +477,8 @@ namespace SabreTools.Metadata.DatFiles
/// <param name="rom">Item to add info from</param>
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);
}
/// <summary>
@@ -505,7 +508,8 @@ namespace SabreTools.Metadata.DatFiles
/// <param name="rom">Item to add info from</param>
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);
}
/// <summary>
@@ -589,16 +593,17 @@ namespace SabreTools.Metadata.DatFiles
/// <param name="disk">Item to remove info for</param>
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);
}
/// <summary>
@@ -607,16 +612,17 @@ namespace SabreTools.Metadata.DatFiles
/// <param name="disk">Item to remove info for</param>
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);
}
/// <summary>
@@ -662,7 +668,8 @@ namespace SabreTools.Metadata.DatFiles
/// <param name="rom">Item to remove info for</param>
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);
}
/// <summary>
@@ -692,7 +699,8 @@ namespace SabreTools.Metadata.DatFiles
/// <param name="rom">Item to remove info for</param>
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);
}
/// <summary>

View File

@@ -104,7 +104,7 @@ namespace SabreTools.Metadata.DatItems
/// </summary>
/// <returns>Machine if available, null otherwise</returns>
/// <remarks>Relies on <see cref="MachineKey"/></remarks>
public Machine? GetMachine() => _internal.Read<Machine>(MachineKey);
public Machine? GetMachine() => Read<Machine>(MachineKey);
/// <summary>
/// Gets the name to use for a DatItem

View File

@@ -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<string?>(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<string?>(Data.Models.Metadata.Adjuster.DefaultKey, defaultValue.FromYesNo());
// Handle subitems
var condition = item.Read<Data.Models.Metadata.Condition>(Data.Models.Metadata.Adjuster.ConditionKey);

View File

@@ -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<string?>(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<string?>(Data.Models.Metadata.BiosSet.DefaultKey, defaultValue.FromYesNo());
}
public BiosSet(Data.Models.Metadata.BiosSet item, Machine machine, Source source) : this(item)

View File

@@ -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<string?>(Data.Models.Metadata.Chip.SoundOnlyKey, ReadBool(Data.Models.Metadata.Chip.SoundOnlyKey).FromYesNo());
if (ReadString(Data.Models.Metadata.Chip.ChipTypeKey) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Chip.SoundOnlyKey, soundOnly.FromYesNo());
string? chipType = ReadString(Data.Models.Metadata.Chip.ChipTypeKey);
if (chipType is not null)
Write<string?>(Data.Models.Metadata.Chip.ChipTypeKey, chipType.AsChipType().AsStringValue());
}
public Chip(Data.Models.Metadata.Chip item, Machine machine, Source source) : this(item)

View File

@@ -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<string?>(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<string?>(Data.Models.Metadata.Condition.RelationKey, condition.AsRelation().AsStringValue());
}
public Condition(Data.Models.Metadata.Condition item, Machine machine, Source source) : this(item)

View File

@@ -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<string?>(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<string?>(Data.Models.Metadata.ConfLocation.InvertedKey, inverted.FromYesNo());
}
public ConfLocation(Data.Models.Metadata.ConfLocation item, Machine machine, Source source) : this(item)

View File

@@ -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<string?>(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<string?>(Data.Models.Metadata.ConfSetting.DefaultKey, defaultValue.FromYesNo());
// Handle subitems
var condition = Read<Data.Models.Metadata.Condition>(Data.Models.Metadata.ConfSetting.ConditionKey);

View File

@@ -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<string?>(Data.Models.Metadata.Control.ButtonsKey, ReadLong(Data.Models.Metadata.Control.ButtonsKey).ToString());
if (ReadLong(Data.Models.Metadata.Control.KeyDeltaKey) is not null)
Write<string?>(Data.Models.Metadata.Control.KeyDeltaKey, ReadLong(Data.Models.Metadata.Control.KeyDeltaKey).ToString());
if (ReadLong(Data.Models.Metadata.Control.MaximumKey) is not null)
Write<string?>(Data.Models.Metadata.Control.MaximumKey, ReadLong(Data.Models.Metadata.Control.MaximumKey).ToString());
if (ReadLong(Data.Models.Metadata.Control.MinimumKey) is not null)
Write<string?>(Data.Models.Metadata.Control.MinimumKey, ReadLong(Data.Models.Metadata.Control.MinimumKey).ToString());
if (ReadLong(Data.Models.Metadata.Control.PlayerKey) is not null)
Write<string?>(Data.Models.Metadata.Control.PlayerKey, ReadLong(Data.Models.Metadata.Control.PlayerKey).ToString());
if (ReadLong(Data.Models.Metadata.Control.ReqButtonsKey) is not null)
Write<string?>(Data.Models.Metadata.Control.ReqButtonsKey, ReadLong(Data.Models.Metadata.Control.ReqButtonsKey).ToString());
if (ReadBool(Data.Models.Metadata.Control.ReverseKey) is not null)
Write<string?>(Data.Models.Metadata.Control.ReverseKey, ReadBool(Data.Models.Metadata.Control.ReverseKey).FromYesNo());
if (ReadLong(Data.Models.Metadata.Control.SensitivityKey) is not null)
Write<string?>(Data.Models.Metadata.Control.SensitivityKey, ReadLong(Data.Models.Metadata.Control.SensitivityKey).ToString());
if (ReadString(Data.Models.Metadata.Control.ControlTypeKey) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Control.ButtonsKey, buttons.ToString());
long? keyDelta = ReadLong(Data.Models.Metadata.Control.KeyDeltaKey);
if (keyDelta is not null)
Write<string?>(Data.Models.Metadata.Control.KeyDeltaKey, keyDelta.ToString());
long? maximum = ReadLong(Data.Models.Metadata.Control.MaximumKey);
if (maximum is not null)
Write<string?>(Data.Models.Metadata.Control.MaximumKey, maximum.ToString());
long? minimum = ReadLong(Data.Models.Metadata.Control.MinimumKey);
if (minimum is not null)
Write<string?>(Data.Models.Metadata.Control.MinimumKey, minimum.ToString());
long? player = ReadLong(Data.Models.Metadata.Control.PlayerKey);
if (player is not null)
Write<string?>(Data.Models.Metadata.Control.PlayerKey, player.ToString());
long? reqButtons = ReadLong(Data.Models.Metadata.Control.ReqButtonsKey);
if (reqButtons is not null)
Write<string?>(Data.Models.Metadata.Control.ReqButtonsKey, reqButtons.ToString());
bool? reverse = ReadBool(Data.Models.Metadata.Control.ReverseKey);
if (reverse is not null)
Write<string?>(Data.Models.Metadata.Control.ReverseKey, reverse.FromYesNo());
long? sensitivity = ReadLong(Data.Models.Metadata.Control.SensitivityKey);
if (sensitivity is not null)
Write<string?>(Data.Models.Metadata.Control.SensitivityKey, sensitivity.ToString());
string? controlType = ReadString(Data.Models.Metadata.Control.ControlTypeKey);
if (controlType is not null)
Write<string?>(Data.Models.Metadata.Control.ControlTypeKey, controlType.AsControlType().AsStringValue());
}
public Control(Data.Models.Metadata.Control item, Machine machine, Source source) : this(item)

View File

@@ -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<string?>(Data.Models.Metadata.DataArea.EndiannessKey, ReadString(Data.Models.Metadata.DataArea.EndiannessKey).AsEndianness().AsStringValue());
if (ReadLong(Data.Models.Metadata.DataArea.SizeKey) is not null)
Write<string?>(Data.Models.Metadata.DataArea.SizeKey, ReadLong(Data.Models.Metadata.DataArea.SizeKey).ToString());
if (ReadLong(Data.Models.Metadata.DataArea.WidthKey) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.DataArea.EndiannessKey, endianness.AsEndianness().AsStringValue());
long? size = ReadLong(Data.Models.Metadata.DataArea.SizeKey);
if (size is not null)
Write<string?>(Data.Models.Metadata.DataArea.SizeKey, size.ToString());
long? width = ReadLong(Data.Models.Metadata.DataArea.WidthKey);
if (width is not null)
Write<string?>(Data.Models.Metadata.DataArea.WidthKey, width.ToString());
}
public DataArea(Data.Models.Metadata.DataArea item, Machine machine, Source source) : this(item)

View File

@@ -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<string?>(Data.Models.Metadata.Device.MandatoryKey, ReadBool(Data.Models.Metadata.Device.MandatoryKey).FromYesNo());
if (ReadString(Data.Models.Metadata.Device.DeviceTypeKey) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Device.MandatoryKey, mandatory.FromYesNo());
string? deviceType = ReadString(Data.Models.Metadata.Device.DeviceTypeKey);
if (deviceType is not null)
Write<string?>(Data.Models.Metadata.Device.DeviceTypeKey, deviceType.AsDeviceType().AsStringValue());
// Handle subitems
var instance = item.Read<Data.Models.Metadata.Instance>(Data.Models.Metadata.Device.InstanceKey);

View File

@@ -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<string?>(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<string?>(Data.Models.Metadata.DipLocation.InvertedKey, inverted.FromYesNo());
}
public DipLocation(Data.Models.Metadata.DipLocation item, Machine machine, Source source) : this(item)

View File

@@ -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<string?>(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<string?>(Data.Models.Metadata.DipSwitch.DefaultKey, defaultValue.FromYesNo());
// Handle subitems
var condition = item.Read<Data.Models.Metadata.Condition>(Data.Models.Metadata.DipSwitch.ConditionKey);

View File

@@ -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<string?>(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<string?>(Data.Models.Metadata.DipValue.DefaultKey, defaultValue.FromYesNo());
// Handle subitems
var condition = Read<Data.Models.Metadata.Condition>(Data.Models.Metadata.DipValue.ConditionKey);

View File

@@ -67,18 +67,26 @@ namespace SabreTools.Metadata.DatItems.Formats
Write<DupeType>(DupeTypeKey, 0x00);
// Process flag values
if (ReadBool(Data.Models.Metadata.Disk.OptionalKey) is not null)
Write<string?>(Data.Models.Metadata.Disk.OptionalKey, ReadBool(Data.Models.Metadata.Disk.OptionalKey).FromYesNo());
if (ReadString(Data.Models.Metadata.Disk.StatusKey) is not null)
Write<string?>(Data.Models.Metadata.Disk.StatusKey, ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus().AsStringValue());
if (ReadBool(Data.Models.Metadata.Disk.WritableKey) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Disk.OptionalKey, optional.FromYesNo());
string? status = ReadString(Data.Models.Metadata.Disk.StatusKey);
if (status is not null)
Write<string?>(Data.Models.Metadata.Disk.StatusKey, status.AsItemStatus().AsStringValue());
bool? writable = ReadBool(Data.Models.Metadata.Disk.WritableKey);
if (writable is not null)
Write<string?>(Data.Models.Metadata.Disk.WritableKey, writable.FromYesNo());
// Process hash values
if (ReadString(Data.Models.Metadata.Disk.MD5Key) is not null)
Write<string?>(Data.Models.Metadata.Disk.MD5Key, TextHelper.NormalizeMD5(ReadString(Data.Models.Metadata.Disk.MD5Key)));
if (ReadString(Data.Models.Metadata.Disk.SHA1Key) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Disk.MD5Key, TextHelper.NormalizeMD5(md5));
string? sha1 = ReadString(Data.Models.Metadata.Disk.SHA1Key);
if (sha1 is not null)
Write<string?>(Data.Models.Metadata.Disk.SHA1Key, TextHelper.NormalizeSHA1(sha1));
}
public Disk(Data.Models.Metadata.Disk item, Machine machine, Source source) : this(item)

View File

@@ -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<string?>(Data.Models.Metadata.Display.FlipXKey, ReadBool(Data.Models.Metadata.Display.FlipXKey).FromYesNo());
if (ReadLong(Data.Models.Metadata.Display.HBEndKey) is not null)
Write<string?>(Data.Models.Metadata.Display.HBEndKey, ReadLong(Data.Models.Metadata.Display.HBEndKey).ToString());
if (ReadLong(Data.Models.Metadata.Display.HBStartKey) is not null)
Write<string?>(Data.Models.Metadata.Display.HBStartKey, ReadLong(Data.Models.Metadata.Display.HBStartKey).ToString());
if (ReadLong(Data.Models.Metadata.Display.HeightKey) is not null)
Write<string?>(Data.Models.Metadata.Display.HeightKey, ReadLong(Data.Models.Metadata.Display.HeightKey).ToString());
if (ReadLong(Data.Models.Metadata.Display.HTotalKey) is not null)
Write<string?>(Data.Models.Metadata.Display.HTotalKey, ReadLong(Data.Models.Metadata.Display.HTotalKey).ToString());
if (ReadLong(Data.Models.Metadata.Display.PixClockKey) is not null)
Write<string?>(Data.Models.Metadata.Display.PixClockKey, ReadLong(Data.Models.Metadata.Display.PixClockKey).ToString());
if (ReadDouble(Data.Models.Metadata.Display.RefreshKey) is not null)
Write<string?>(Data.Models.Metadata.Display.RefreshKey, ReadDouble(Data.Models.Metadata.Display.RefreshKey).ToString());
if (ReadLong(Data.Models.Metadata.Display.RotateKey) is not null)
Write<string?>(Data.Models.Metadata.Display.RotateKey, ReadLong(Data.Models.Metadata.Display.RotateKey).ToString());
if (ReadString(Data.Models.Metadata.Display.DisplayTypeKey) is not null)
Write<string?>(Data.Models.Metadata.Display.DisplayTypeKey, ReadString(Data.Models.Metadata.Display.DisplayTypeKey).AsDisplayType().AsStringValue());
if (ReadLong(Data.Models.Metadata.Display.VBEndKey) is not null)
Write<string?>(Data.Models.Metadata.Display.VBEndKey, ReadLong(Data.Models.Metadata.Display.VBEndKey).ToString());
if (ReadLong(Data.Models.Metadata.Display.VBStartKey) is not null)
Write<string?>(Data.Models.Metadata.Display.VBStartKey, ReadLong(Data.Models.Metadata.Display.VBStartKey).ToString());
if (ReadLong(Data.Models.Metadata.Display.VTotalKey) is not null)
Write<string?>(Data.Models.Metadata.Display.VTotalKey, ReadLong(Data.Models.Metadata.Display.VTotalKey).ToString());
if (ReadLong(Data.Models.Metadata.Display.WidthKey) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Display.FlipXKey, flipX.FromYesNo());
long? hbEnd = ReadLong(Data.Models.Metadata.Display.HBEndKey);
if (hbEnd is not null)
Write<string?>(Data.Models.Metadata.Display.HBEndKey, hbEnd.ToString());
long? hbStart = ReadLong(Data.Models.Metadata.Display.HBStartKey);
if (hbStart is not null)
Write<string?>(Data.Models.Metadata.Display.HBStartKey, hbStart.ToString());
long? height = ReadLong(Data.Models.Metadata.Display.HeightKey);
if (height is not null)
Write<string?>(Data.Models.Metadata.Display.HeightKey, height.ToString());
long? hTotal = ReadLong(Data.Models.Metadata.Display.HTotalKey);
if (hTotal is not null)
Write<string?>(Data.Models.Metadata.Display.HTotalKey, hTotal.ToString());
long? pixClock = ReadLong(Data.Models.Metadata.Display.PixClockKey);
if (pixClock is not null)
Write<string?>(Data.Models.Metadata.Display.PixClockKey, pixClock.ToString());
double? refresh = ReadDouble(Data.Models.Metadata.Display.RefreshKey);
if (refresh is not null)
Write<string?>(Data.Models.Metadata.Display.RefreshKey, refresh.ToString());
long? rotate = ReadLong(Data.Models.Metadata.Display.RotateKey);
if (rotate is not null)
Write<string?>(Data.Models.Metadata.Display.RotateKey, rotate.ToString());
string? displayType = ReadString(Data.Models.Metadata.Display.DisplayTypeKey);
if (displayType is not null)
Write<string?>(Data.Models.Metadata.Display.DisplayTypeKey, displayType.AsDisplayType().AsStringValue());
long? vbEnd = ReadLong(Data.Models.Metadata.Display.VBEndKey);
if (vbEnd is not null)
Write<string?>(Data.Models.Metadata.Display.VBEndKey, vbEnd.ToString());
long? vbStart = ReadLong(Data.Models.Metadata.Display.VBStartKey);
if (vbStart is not null)
Write<string?>(Data.Models.Metadata.Display.VBStartKey, vbStart.ToString());
long? vTotal = ReadLong(Data.Models.Metadata.Display.VTotalKey);
if (vTotal is not null)
Write<string?>(Data.Models.Metadata.Display.VTotalKey, vTotal.ToString());
long? width = ReadLong(Data.Models.Metadata.Display.WidthKey);
if (width is not null)
Write<string?>(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<string?>(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<string?>(Data.Models.Metadata.Video.AspectXKey, ReadLong(Data.Models.Metadata.Video.AspectXKey).ToString());
if (ReadLong(Data.Models.Metadata.Video.AspectYKey) is not null)
Write<string?>(Data.Models.Metadata.Video.AspectYKey, ReadLong(Data.Models.Metadata.Video.AspectYKey).ToString());
if (ReadLong(Data.Models.Metadata.Video.HeightKey) is not null)
Write<string?>(Data.Models.Metadata.Display.HeightKey, ReadLong(Data.Models.Metadata.Video.HeightKey).ToString());
if (ReadDouble(Data.Models.Metadata.Video.RefreshKey) is not null)
Write<string?>(Data.Models.Metadata.Display.RefreshKey, ReadDouble(Data.Models.Metadata.Video.RefreshKey).ToString());
if (ReadString(Data.Models.Metadata.Video.ScreenKey) is not null)
Write<string?>(Data.Models.Metadata.Display.DisplayTypeKey, ReadString(Data.Models.Metadata.Video.ScreenKey).AsDisplayType().AsStringValue());
if (ReadLong(Data.Models.Metadata.Video.WidthKey) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Video.AspectXKey, aspectX.ToString());
long? aspectY = ReadLong(Data.Models.Metadata.Video.AspectYKey);
if (aspectY is not null)
Write<string?>(Data.Models.Metadata.Video.AspectYKey, aspectY.ToString());
long? height = ReadLong(Data.Models.Metadata.Video.HeightKey);
if (height is not null)
Write<string?>(Data.Models.Metadata.Display.HeightKey, height.ToString());
double? refresh = ReadDouble(Data.Models.Metadata.Video.RefreshKey);
if (refresh is not null)
Write<string?>(Data.Models.Metadata.Display.RefreshKey, refresh.ToString());
string? screen = ReadString(Data.Models.Metadata.Video.ScreenKey);
if (screen is not null)
Write<string?>(Data.Models.Metadata.Display.DisplayTypeKey, screen.AsDisplayType().AsStringValue());
long? width = ReadLong(Data.Models.Metadata.Video.WidthKey);
if (width is not null)
Write<string?>(Data.Models.Metadata.Display.WidthKey, width.ToString());
}
public Display(Data.Models.Metadata.Video item, Machine machine, Source source) : this(item)

View File

@@ -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<string?>(Data.Models.Metadata.Driver.CocktailKey, ReadString(Data.Models.Metadata.Driver.CocktailKey).AsSupportStatus().AsStringValue());
if (ReadString(Data.Models.Metadata.Driver.ColorKey) is not null)
Write<string?>(Data.Models.Metadata.Driver.ColorKey, ReadString(Data.Models.Metadata.Driver.ColorKey).AsSupportStatus().AsStringValue());
if (ReadString(Data.Models.Metadata.Driver.EmulationKey) is not null)
Write<string?>(Data.Models.Metadata.Driver.EmulationKey, ReadString(Data.Models.Metadata.Driver.EmulationKey).AsSupportStatus().AsStringValue());
if (ReadBool(Data.Models.Metadata.Driver.IncompleteKey) is not null)
Write<string?>(Data.Models.Metadata.Driver.IncompleteKey, ReadBool(Data.Models.Metadata.Driver.IncompleteKey).FromYesNo());
if (ReadBool(Data.Models.Metadata.Driver.NoSoundHardwareKey) is not null)
Write<string?>(Data.Models.Metadata.Driver.NoSoundHardwareKey, ReadBool(Data.Models.Metadata.Driver.NoSoundHardwareKey).FromYesNo());
if (ReadLong(Data.Models.Metadata.Driver.PaletteSizeKey) is not null)
Write<string?>(Data.Models.Metadata.Driver.PaletteSizeKey, ReadLong(Data.Models.Metadata.Driver.PaletteSizeKey).ToString());
if (ReadBool(Data.Models.Metadata.Driver.RequiresArtworkKey) is not null)
Write<string?>(Data.Models.Metadata.Driver.RequiresArtworkKey, ReadBool(Data.Models.Metadata.Driver.RequiresArtworkKey).FromYesNo());
if (ReadString(Data.Models.Metadata.Driver.SaveStateKey) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Driver.SoundKey, ReadString(Data.Models.Metadata.Driver.SoundKey).AsSupportStatus().AsStringValue());
if (ReadString(Data.Models.Metadata.Driver.StatusKey) is not null)
Write<string?>(Data.Models.Metadata.Driver.StatusKey, ReadString(Data.Models.Metadata.Driver.StatusKey).AsSupportStatus().AsStringValue());
if (ReadBool(Data.Models.Metadata.Driver.UnofficialKey) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Driver.CocktailKey, cocktail.AsSupportStatus().AsStringValue());
string? color = ReadString(Data.Models.Metadata.Driver.ColorKey);
if (color is not null)
Write<string?>(Data.Models.Metadata.Driver.ColorKey, color.AsSupportStatus().AsStringValue());
string? emulation = ReadString(Data.Models.Metadata.Driver.EmulationKey);
if (emulation is not null)
Write<string?>(Data.Models.Metadata.Driver.EmulationKey, emulation.AsSupportStatus().AsStringValue());
bool? incomplete = ReadBool(Data.Models.Metadata.Driver.IncompleteKey);
if (incomplete is not null)
Write<string?>(Data.Models.Metadata.Driver.IncompleteKey, incomplete.FromYesNo());
bool? noSoundHardware = ReadBool(Data.Models.Metadata.Driver.NoSoundHardwareKey);
if (noSoundHardware is not null)
Write<string?>(Data.Models.Metadata.Driver.NoSoundHardwareKey, noSoundHardware.FromYesNo());
long? paletteSize = ReadLong(Data.Models.Metadata.Driver.PaletteSizeKey);
if (paletteSize is not null)
Write<string?>(Data.Models.Metadata.Driver.PaletteSizeKey, paletteSize.ToString());
bool? requiresArtwork = ReadBool(Data.Models.Metadata.Driver.RequiresArtworkKey);
if (requiresArtwork is not null)
Write<string?>(Data.Models.Metadata.Driver.RequiresArtworkKey, requiresArtwork.FromYesNo());
string? saveState = ReadString(Data.Models.Metadata.Driver.SaveStateKey);
if (saveState is not null)
Write<string?>(Data.Models.Metadata.Driver.SaveStateKey, saveState.AsSupported().AsStringValue(useSecond: true));
string? sound = ReadString(Data.Models.Metadata.Driver.SoundKey);
if (sound is not null)
Write<string?>(Data.Models.Metadata.Driver.SoundKey, sound.AsSupportStatus().AsStringValue());
string? status = ReadString(Data.Models.Metadata.Driver.StatusKey);
if (status is not null)
Write<string?>(Data.Models.Metadata.Driver.StatusKey, status.AsSupportStatus().AsStringValue());
bool? unofficial = ReadBool(Data.Models.Metadata.Driver.UnofficialKey);
if (unofficial is not null)
Write<string?>(Data.Models.Metadata.Driver.UnofficialKey, unofficial.FromYesNo());
}
public Driver(Data.Models.Metadata.Driver item, Machine machine, Source source) : this(item)

View File

@@ -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<string?>(Data.Models.Metadata.Feature.OverallKey, ReadString(Data.Models.Metadata.Feature.OverallKey).AsFeatureStatus().AsStringValue());
if (ReadString(Data.Models.Metadata.Feature.StatusKey) is not null)
Write<string?>(Data.Models.Metadata.Feature.StatusKey, ReadString(Data.Models.Metadata.Feature.StatusKey).AsFeatureStatus().AsStringValue());
if (ReadString(Data.Models.Metadata.Feature.FeatureTypeKey) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Feature.OverallKey, overall.AsFeatureStatus().AsStringValue());
string? status = ReadString(Data.Models.Metadata.Feature.StatusKey);
if (status is not null)
Write<string?>(Data.Models.Metadata.Feature.StatusKey, status.AsFeatureStatus().AsStringValue());
string? featureType = ReadString(Data.Models.Metadata.Feature.FeatureTypeKey);
if (featureType is not null)
Write<string?>(Data.Models.Metadata.Feature.FeatureTypeKey, featureType.AsFeatureType().AsStringValue());
}
public Feature(Data.Models.Metadata.Feature item, Machine machine, Source source) : this(item)

View File

@@ -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<string?>(Data.Models.Metadata.Input.ButtonsKey, ReadLong(Data.Models.Metadata.Input.ButtonsKey).ToString());
if (ReadLong(Data.Models.Metadata.Input.CoinsKey) is not null)
Write<string?>(Data.Models.Metadata.Input.CoinsKey, ReadLong(Data.Models.Metadata.Input.CoinsKey).ToString());
if (ReadLong(Data.Models.Metadata.Input.PlayersKey) is not null)
Write<string?>(Data.Models.Metadata.Input.PlayersKey, ReadLong(Data.Models.Metadata.Input.PlayersKey).ToString());
if (ReadBool(Data.Models.Metadata.Input.ServiceKey) is not null)
Write<string?>(Data.Models.Metadata.Input.ServiceKey, ReadBool(Data.Models.Metadata.Input.ServiceKey).FromYesNo());
if (ReadBool(Data.Models.Metadata.Input.TiltKey) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Input.ButtonsKey, buttons.ToString());
long? coins = ReadLong(Data.Models.Metadata.Input.CoinsKey);
if (coins is not null)
Write<string?>(Data.Models.Metadata.Input.CoinsKey, coins.ToString());
long? players = ReadLong(Data.Models.Metadata.Input.PlayersKey);
if (players is not null)
Write<string?>(Data.Models.Metadata.Input.PlayersKey, players.ToString());
bool? service = ReadBool(Data.Models.Metadata.Input.ServiceKey);
if (service is not null)
Write<string?>(Data.Models.Metadata.Input.ServiceKey, service.FromYesNo());
bool? tilt = ReadBool(Data.Models.Metadata.Input.TiltKey);
if (tilt is not null)
Write<string?>(Data.Models.Metadata.Input.TiltKey, tilt.FromYesNo());
// Handle subitems
var controls = item.ReadArray<Data.Models.Metadata.Control>(Data.Models.Metadata.Input.ControlKey);

View File

@@ -30,12 +30,17 @@ namespace SabreTools.Metadata.DatItems.Formats
Write<DupeType>(DupeTypeKey, 0x00);
// Process hash values
if (ReadString(Data.Models.Metadata.Media.MD5Key) is not null)
Write<string?>(Data.Models.Metadata.Media.MD5Key, TextHelper.NormalizeMD5(ReadString(Data.Models.Metadata.Media.MD5Key)));
if (ReadString(Data.Models.Metadata.Media.SHA1Key) is not null)
Write<string?>(Data.Models.Metadata.Media.SHA1Key, TextHelper.NormalizeSHA1(ReadString(Data.Models.Metadata.Media.SHA1Key)));
if (ReadString(Data.Models.Metadata.Media.SHA256Key) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Media.MD5Key, TextHelper.NormalizeMD5(md5));
string? sha1 = ReadString(Data.Models.Metadata.Media.SHA1Key);
if (sha1 is not null)
Write<string?>(Data.Models.Metadata.Media.SHA1Key, TextHelper.NormalizeSHA1(sha1));
string? sha256 = ReadString(Data.Models.Metadata.Media.SHA256Key);
if (sha256 is not null)
Write<string?>(Data.Models.Metadata.Media.SHA256Key, TextHelper.NormalizeSHA256(sha256));
}
public Media(Data.Models.Metadata.Media item, Machine machine, Source source) : this(item)

View File

@@ -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<string?>(Data.Models.Metadata.Feature.OverallKey, ReadString(Data.Models.Metadata.Feature.OverallKey).AsFeatureStatus().AsStringValue());
if (ReadString(Data.Models.Metadata.Feature.StatusKey) is not null)
Write<string?>(Data.Models.Metadata.Feature.StatusKey, ReadString(Data.Models.Metadata.Feature.StatusKey).AsFeatureStatus().AsStringValue());
if (ReadString(Data.Models.Metadata.Feature.FeatureTypeKey) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Feature.OverallKey, overall.AsFeatureStatus().AsStringValue());
string? status = ReadString(Data.Models.Metadata.Feature.StatusKey);
if (status is not null)
Write<string?>(Data.Models.Metadata.Feature.StatusKey, status.AsFeatureStatus().AsStringValue());
string? featureType = ReadString(Data.Models.Metadata.Feature.FeatureTypeKey);
if (featureType is not null)
Write<string?>(Data.Models.Metadata.Feature.FeatureTypeKey, featureType.AsFeatureType().AsStringValue());
}
public PartFeature(Data.Models.Metadata.Feature item, Machine machine, Source source) : this(item)

View File

@@ -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<string?>(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<string?>(Data.Models.Metadata.RamOption.DefaultKey, defaultValue.FromYesNo());
}
public RamOption(Data.Models.Metadata.RamOption item, Machine machine, Source source) : this(item)

View File

@@ -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<string?>(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<string?>(Data.Models.Metadata.Release.DefaultKey, defaultValue.FromYesNo());
}
public Release(Data.Models.Metadata.Release item, Machine machine, Source source) : this(item)

View File

@@ -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.Rom>(Data.Models.Metadata.Dump.RomKey) is not null)
{
rom = item.Read<Data.Models.Metadata.Rom>(Data.Models.Metadata.Dump.RomKey);
@@ -122,9 +123,9 @@ namespace SabreTools.Metadata.DatItems.Formats
Write<string?>(Data.Models.Metadata.Rom.StartKey, rom.ReadString(Data.Models.Metadata.Rom.StartKey));
Write<Source?>(SourceKey, source);
if (item.Read<Data.Models.Metadata.Original>(Data.Models.Metadata.Dump.OriginalKey) is not null)
var original = item.Read<Data.Models.Metadata.Original>(Data.Models.Metadata.Dump.OriginalKey);
if (original is not null)
{
var original = item.Read<Data.Models.Metadata.Original>(Data.Models.Metadata.Dump.OriginalKey)!;
Write<Original?>("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<string?>(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<string?>(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<string?>(Data.Models.Metadata.Rom.CRC16Key, NormalizeHashData(ReadString(Data.Models.Metadata.Rom.CRC16Key), 4));
if (ReadString(Data.Models.Metadata.Rom.CRCKey) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Rom.CRC16Key, NormalizeHashData(crc16, 4));
string? crc = ReadString(Data.Models.Metadata.Rom.CRCKey);
if (crc is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Rom.CRC64Key, NormalizeHashData(ReadString(Data.Models.Metadata.Rom.CRC64Key), 16));
if (ReadString(Data.Models.Metadata.Rom.MD2Key) is not null)
Write<string?>(Data.Models.Metadata.Rom.MD2Key, TextHelper.NormalizeMD2(ReadString(Data.Models.Metadata.Rom.MD2Key)));
if (ReadString(Data.Models.Metadata.Rom.MD4Key) is not null)
Write<string?>(Data.Models.Metadata.Rom.MD4Key, TextHelper.NormalizeMD5(ReadString(Data.Models.Metadata.Rom.MD4Key)));
if (ReadString(Data.Models.Metadata.Rom.MD5Key) is not null)
Write<string?>(Data.Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(ReadString(Data.Models.Metadata.Rom.MD5Key)));
if (ReadString(Data.Models.Metadata.Rom.RIPEMD128Key) is not null)
Write<string?>(Data.Models.Metadata.Rom.RIPEMD128Key, TextHelper.NormalizeRIPEMD128(ReadString(Data.Models.Metadata.Rom.RIPEMD128Key)));
if (ReadString(Data.Models.Metadata.Rom.RIPEMD160Key) is not null)
Write<string?>(Data.Models.Metadata.Rom.RIPEMD160Key, TextHelper.NormalizeRIPEMD160(ReadString(Data.Models.Metadata.Rom.RIPEMD160Key)));
if (ReadString(Data.Models.Metadata.Rom.SHA1Key) is not null)
Write<string?>(Data.Models.Metadata.Rom.SHA1Key, TextHelper.NormalizeSHA1(ReadString(Data.Models.Metadata.Rom.SHA1Key)));
if (ReadString(Data.Models.Metadata.Rom.SHA256Key) is not null)
Write<string?>(Data.Models.Metadata.Rom.SHA256Key, TextHelper.NormalizeSHA256(ReadString(Data.Models.Metadata.Rom.SHA256Key)));
if (ReadString(Data.Models.Metadata.Rom.SHA384Key) is not null)
Write<string?>(Data.Models.Metadata.Rom.SHA384Key, TextHelper.NormalizeSHA384(ReadString(Data.Models.Metadata.Rom.SHA384Key)));
if (ReadString(Data.Models.Metadata.Rom.SHA512Key) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Rom.CRC64Key, NormalizeHashData(crc64, 16));
string? md2 = ReadString(Data.Models.Metadata.Rom.MD2Key);
if (md2 is not null)
Write<string?>(Data.Models.Metadata.Rom.MD2Key, TextHelper.NormalizeMD2(md2));
string? md4 = ReadString(Data.Models.Metadata.Rom.MD4Key);
if (md4 is not null)
Write<string?>(Data.Models.Metadata.Rom.MD4Key, TextHelper.NormalizeMD5(md4));
string? md5 = ReadString(Data.Models.Metadata.Rom.MD5Key);
if (md5 is not null)
Write<string?>(Data.Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(md5));
string? ripemd128 = ReadString(Data.Models.Metadata.Rom.RIPEMD128Key);
if (ripemd128 is not null)
Write<string?>(Data.Models.Metadata.Rom.RIPEMD128Key, TextHelper.NormalizeRIPEMD128(ripemd128));
string? ripemd160 = ReadString(Data.Models.Metadata.Rom.RIPEMD160Key);
if (ripemd160 is not null)
Write<string?>(Data.Models.Metadata.Rom.RIPEMD160Key, TextHelper.NormalizeRIPEMD160(ripemd160));
string? sha1 = ReadString(Data.Models.Metadata.Rom.SHA1Key);
if (sha1 is not null)
Write<string?>(Data.Models.Metadata.Rom.SHA1Key, TextHelper.NormalizeSHA1(sha1));
string? sha256 = ReadString(Data.Models.Metadata.Rom.SHA256Key);
if (sha256 is not null)
Write<string?>(Data.Models.Metadata.Rom.SHA256Key, TextHelper.NormalizeSHA256(sha256));
string? sha384 = ReadString(Data.Models.Metadata.Rom.SHA384Key);
if (sha384 is not null)
Write<string?>(Data.Models.Metadata.Rom.SHA384Key, TextHelper.NormalizeSHA384(sha384));
string? sha512 = ReadString(Data.Models.Metadata.Rom.SHA512Key);
if (sha512 is not null)
Write<string?>(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<DupeType>(DupeTypeKey, 0x00);
// Process flag values
if (ReadBool(Data.Models.Metadata.Rom.DisposeKey) is not null)
Write<string?>(Data.Models.Metadata.Rom.DisposeKey, ReadBool(Data.Models.Metadata.Rom.DisposeKey).FromYesNo());
if (ReadBool(Data.Models.Metadata.Rom.InvertedKey) is not null)
Write<string?>(Data.Models.Metadata.Rom.InvertedKey, ReadBool(Data.Models.Metadata.Rom.InvertedKey).FromYesNo());
if (ReadString(Data.Models.Metadata.Rom.LoadFlagKey) is not null)
Write<string?>(Data.Models.Metadata.Rom.LoadFlagKey, ReadString(Data.Models.Metadata.Rom.LoadFlagKey).AsLoadFlag().AsStringValue());
if (ReadString(Data.Models.Metadata.Rom.OpenMSXMediaType) is not null)
Write<string?>(Data.Models.Metadata.Rom.OpenMSXMediaType, ReadString(Data.Models.Metadata.Rom.OpenMSXMediaType).AsOpenMSXSubType().AsStringValue());
if (ReadBool(Data.Models.Metadata.Rom.MIAKey) is not null)
Write<string?>(Data.Models.Metadata.Rom.MIAKey, ReadBool(Data.Models.Metadata.Rom.MIAKey).FromYesNo());
if (ReadBool(Data.Models.Metadata.Rom.OptionalKey) is not null)
Write<string?>(Data.Models.Metadata.Rom.OptionalKey, ReadBool(Data.Models.Metadata.Rom.OptionalKey).FromYesNo());
if (ReadBool(Data.Models.Metadata.Rom.SoundOnlyKey) is not null)
Write<string?>(Data.Models.Metadata.Rom.SoundOnlyKey, ReadBool(Data.Models.Metadata.Rom.SoundOnlyKey).FromYesNo());
if (ReadString(Data.Models.Metadata.Rom.StatusKey) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Rom.DisposeKey, dispose.FromYesNo());
bool? inverted = ReadBool(Data.Models.Metadata.Rom.InvertedKey);
if (inverted is not null)
Write<string?>(Data.Models.Metadata.Rom.InvertedKey, inverted.FromYesNo());
string? loadFlag = ReadString(Data.Models.Metadata.Rom.LoadFlagKey);
if (loadFlag is not null)
Write<string?>(Data.Models.Metadata.Rom.LoadFlagKey, loadFlag.AsLoadFlag().AsStringValue());
string? openMSXMediaType = ReadString(Data.Models.Metadata.Rom.OpenMSXMediaType);
if (openMSXMediaType is not null)
Write<string?>(Data.Models.Metadata.Rom.OpenMSXMediaType, openMSXMediaType.AsOpenMSXSubType().AsStringValue());
bool? mia = ReadBool(Data.Models.Metadata.Rom.MIAKey);
if (mia is not null)
Write<string?>(Data.Models.Metadata.Rom.MIAKey, mia.FromYesNo());
bool? optional = ReadBool(Data.Models.Metadata.Rom.OptionalKey);
if (optional is not null)
Write<string?>(Data.Models.Metadata.Rom.OptionalKey, optional.FromYesNo());
bool? soundOnly = ReadBool(Data.Models.Metadata.Rom.SoundOnlyKey);
if (soundOnly is not null)
Write<string?>(Data.Models.Metadata.Rom.SoundOnlyKey, soundOnly.FromYesNo());
string? status = ReadString(Data.Models.Metadata.Rom.StatusKey);
if (status is not null)
Write<string?>(Data.Models.Metadata.Rom.StatusKey, status.AsItemStatus().AsStringValue());
// Process hash values
if (ReadLong(Data.Models.Metadata.Rom.SizeKey) is not null)
Write<string?>(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<string?>(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<string?>(Data.Models.Metadata.Rom.CRC16Key, NormalizeHashData(ReadString(Data.Models.Metadata.Rom.CRC16Key), 4));
if (ReadString(Data.Models.Metadata.Rom.CRCKey) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Rom.CRC16Key, NormalizeHashData(crc16, 4));
string? crc = ReadString(Data.Models.Metadata.Rom.CRCKey);
if (crc is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Rom.CRC64Key, NormalizeHashData(ReadString(Data.Models.Metadata.Rom.CRC64Key), 16));
if (ReadString(Data.Models.Metadata.Rom.MD2Key) is not null)
Write<string?>(Data.Models.Metadata.Rom.MD2Key, TextHelper.NormalizeMD2(ReadString(Data.Models.Metadata.Rom.MD2Key)));
if (ReadString(Data.Models.Metadata.Rom.MD4Key) is not null)
Write<string?>(Data.Models.Metadata.Rom.MD4Key, TextHelper.NormalizeMD4(ReadString(Data.Models.Metadata.Rom.MD4Key)));
if (ReadString(Data.Models.Metadata.Rom.MD5Key) is not null)
Write<string?>(Data.Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(ReadString(Data.Models.Metadata.Rom.MD5Key)));
if (ReadString(Data.Models.Metadata.Rom.RIPEMD128Key) is not null)
Write<string?>(Data.Models.Metadata.Rom.RIPEMD128Key, TextHelper.NormalizeRIPEMD128(ReadString(Data.Models.Metadata.Rom.RIPEMD128Key)));
if (ReadString(Data.Models.Metadata.Rom.RIPEMD160Key) is not null)
Write<string?>(Data.Models.Metadata.Rom.RIPEMD160Key, TextHelper.NormalizeRIPEMD160(ReadString(Data.Models.Metadata.Rom.RIPEMD160Key)));
if (ReadString(Data.Models.Metadata.Rom.SHA1Key) is not null)
Write<string?>(Data.Models.Metadata.Rom.SHA1Key, TextHelper.NormalizeSHA1(ReadString(Data.Models.Metadata.Rom.SHA1Key)));
if (ReadString(Data.Models.Metadata.Rom.SHA256Key) is not null)
Write<string?>(Data.Models.Metadata.Rom.SHA256Key, TextHelper.NormalizeSHA256(ReadString(Data.Models.Metadata.Rom.SHA256Key)));
if (ReadString(Data.Models.Metadata.Rom.SHA384Key) is not null)
Write<string?>(Data.Models.Metadata.Rom.SHA384Key, TextHelper.NormalizeSHA384(ReadString(Data.Models.Metadata.Rom.SHA384Key)));
if (ReadString(Data.Models.Metadata.Rom.SHA512Key) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Rom.CRC64Key, NormalizeHashData(crc64, 16));
string? md2 = ReadString(Data.Models.Metadata.Rom.MD2Key);
if (md2 is not null)
Write<string?>(Data.Models.Metadata.Rom.MD2Key, TextHelper.NormalizeMD2(md2));
string? md4 = ReadString(Data.Models.Metadata.Rom.MD4Key);
if (md4 is not null)
Write<string?>(Data.Models.Metadata.Rom.MD4Key, TextHelper.NormalizeMD5(md4));
string? md5 = ReadString(Data.Models.Metadata.Rom.MD5Key);
if (md5 is not null)
Write<string?>(Data.Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(md5));
string? ripemd128 = ReadString(Data.Models.Metadata.Rom.RIPEMD128Key);
if (ripemd128 is not null)
Write<string?>(Data.Models.Metadata.Rom.RIPEMD128Key, TextHelper.NormalizeRIPEMD128(ripemd128));
string? ripemd160 = ReadString(Data.Models.Metadata.Rom.RIPEMD160Key);
if (ripemd160 is not null)
Write<string?>(Data.Models.Metadata.Rom.RIPEMD160Key, TextHelper.NormalizeRIPEMD160(ripemd160));
string? sha1 = ReadString(Data.Models.Metadata.Rom.SHA1Key);
if (sha1 is not null)
Write<string?>(Data.Models.Metadata.Rom.SHA1Key, TextHelper.NormalizeSHA1(sha1));
string? sha256 = ReadString(Data.Models.Metadata.Rom.SHA256Key);
if (sha256 is not null)
Write<string?>(Data.Models.Metadata.Rom.SHA256Key, TextHelper.NormalizeSHA256(sha256));
string? sha384 = ReadString(Data.Models.Metadata.Rom.SHA384Key);
if (sha384 is not null)
Write<string?>(Data.Models.Metadata.Rom.SHA384Key, TextHelper.NormalizeSHA384(sha384));
string? sha512 = ReadString(Data.Models.Metadata.Rom.SHA512Key);
if (sha512 is not null)
Write<string?>(Data.Models.Metadata.Rom.SHA512Key, TextHelper.NormalizeSHA512(sha512));
}
public Rom(Data.Models.Metadata.Rom item, Machine machine, Source source) : this(item)

View File

@@ -1,7 +1,6 @@
using System;
using System.Xml.Serialization;
using Newtonsoft.Json;
using SabreTools.Data.Extensions;
namespace SabreTools.Metadata.DatItems.Formats
{

View File

@@ -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<string?>(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<string?>(Data.Models.Metadata.SlotOption.DefaultKey, defaultValue.FromYesNo());
}
public SlotOption(Data.Models.Metadata.SlotOption item, Machine machine, Source source) : this(item)

View File

@@ -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<string?>(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<string?>(Data.Models.Metadata.SoftwareList.StatusKey, status.AsSoftwareListStatus().AsStringValue());
// Handle subitems
// TODO: Handle the Software subitem

View File

@@ -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<string?>(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<string?>(Data.Models.Metadata.Sound.ChannelsKey, channels.ToString());
}
public Sound(Data.Models.Metadata.Sound item, Machine machine, Source source) : this(item)

View File

@@ -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<string?>(Data.Models.Metadata.Machine.Im1CRCKey, TextHelper.NormalizeCRC32(ReadString(Data.Models.Metadata.Machine.Im1CRCKey)));
if (ReadString(Data.Models.Metadata.Machine.Im2CRCKey) is not null)
Write<string?>(Data.Models.Metadata.Machine.Im2CRCKey, TextHelper.NormalizeCRC32(ReadString(Data.Models.Metadata.Machine.Im2CRCKey)));
if (ReadBool(Data.Models.Metadata.Machine.IsBiosKey) is not null)
Write<string?>(Data.Models.Metadata.Machine.IsBiosKey, ReadBool(Data.Models.Metadata.Machine.IsBiosKey).FromYesNo());
if (ReadBool(Data.Models.Metadata.Machine.IsDeviceKey) is not null)
Write<string?>(Data.Models.Metadata.Machine.IsDeviceKey, ReadBool(Data.Models.Metadata.Machine.IsDeviceKey).FromYesNo());
if (ReadBool(Data.Models.Metadata.Machine.IsMechanicalKey) is not null)
Write<string?>(Data.Models.Metadata.Machine.IsMechanicalKey, ReadBool(Data.Models.Metadata.Machine.IsMechanicalKey).FromYesNo());
if (ReadString(Data.Models.Metadata.Machine.SupportedKey) is not null)
Write<string?>(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<string?>(Data.Models.Metadata.Machine.Im1CRCKey, TextHelper.NormalizeCRC32(im1Crc));
string? im2Crc = ReadString(Data.Models.Metadata.Machine.Im2CRCKey);
if (im2Crc is not null)
Write<string?>(Data.Models.Metadata.Machine.Im2CRCKey, TextHelper.NormalizeCRC32(im2Crc));
bool? isBios = ReadBool(Data.Models.Metadata.Machine.IsBiosKey);
if (isBios is not null)
Write<string?>(Data.Models.Metadata.Machine.IsBiosKey, isBios.FromYesNo());
bool? isDevice = ReadBool(Data.Models.Metadata.Machine.IsDeviceKey);
if (isDevice is not null)
Write<string?>(Data.Models.Metadata.Machine.IsDeviceKey, isDevice.FromYesNo());
bool? isMechanical = ReadBool(Data.Models.Metadata.Machine.IsMechanicalKey);
if (isMechanical is not null)
Write<string?>(Data.Models.Metadata.Machine.IsMechanicalKey, isMechanical.FromYesNo());
string? supported = ReadString(Data.Models.Metadata.Machine.SupportedKey);
if (supported is not null)
Write<string?>(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.Logiqx.Trurip>(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.Logiqx.Trurip>(Data.Models.Metadata.Machine.TruripKey);
if (truripItem is not null)
Write(Data.Models.Metadata.Machine.TruripKey, new Trurip(truripItem));
}
#endregion