From bd098101804031bfdc1941cc3693ba0a3b0e8a43 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Sun, 11 May 2025 22:55:38 -0400 Subject: [PATCH] Replace AsEnumValue for performance --- SabreTools.Core.Test/Tools/ConvertersTests.cs | 48 -- SabreTools.Core/Tools/Converters.cs | 24 - SabreTools.DatFiles.Test/ExtensionsTests.cs | 59 +++ SabreTools.DatFiles/DatFile.FromMetadata.cs | 24 +- SabreTools.DatFiles/DatFile.ToMetadata.cs | 4 +- SabreTools.DatFiles/DatFile.cs | 18 +- SabreTools.DatFiles/DatHeader.cs | 6 +- SabreTools.DatFiles/DatStatistics.cs | 88 ++-- SabreTools.DatFiles/Extensions.cs | 94 ++++ SabreTools.DatFiles/Formats/ClrMamePro.cs | 8 +- SabreTools.DatFiles/Formats/Listxml.cs | 18 +- SabreTools.DatFiles/Formats/Logiqx.cs | 10 +- SabreTools.DatFiles/Formats/SabreJSON.cs | 2 +- SabreTools.DatFiles/ItemDictionary.cs | 12 +- SabreTools.DatFiles/ItemDictionaryDB.cs | 12 +- SabreTools.DatItems.Test/ConvertersTests.cs | 34 +- SabreTools.DatItems/DatItem.cs | 8 +- SabreTools.DatItems/Extensions.cs | 458 ++++++++++++++++++ SabreTools.DatItems/Formats/Blank.cs | 2 +- SabreTools.DatItems/Formats/Chip.cs | 2 +- SabreTools.DatItems/Formats/Condition.cs | 2 +- SabreTools.DatItems/Formats/Control.cs | 2 +- SabreTools.DatItems/Formats/DataArea.cs | 2 +- SabreTools.DatItems/Formats/Device.cs | 2 +- SabreTools.DatItems/Formats/Disk.cs | 2 +- SabreTools.DatItems/Formats/Display.cs | 6 +- SabreTools.DatItems/Formats/Driver.cs | 12 +- SabreTools.DatItems/Formats/Feature.cs | 6 +- SabreTools.DatItems/Formats/PartFeature.cs | 6 +- SabreTools.DatItems/Formats/ReleaseDetails.cs | 2 +- SabreTools.DatItems/Formats/Rom.cs | 10 +- SabreTools.DatItems/Formats/Serials.cs | 2 +- SabreTools.DatItems/Formats/SoftwareList.cs | 2 +- SabreTools.DatItems/Formats/SourceDetails.cs | 2 +- SabreTools.DatItems/Machine.cs | 2 +- SabreTools.DatTools.Test/DatItemToolTests.cs | 2 +- SabreTools.DatTools/DatFromDir.cs | 2 +- SabreTools.DatTools/MergeSplit.cs | 2 +- SabreTools.DatTools/Rebuilder.cs | 18 +- SabreTools.DatTools/Remover.cs | 2 +- SabreTools.DatTools/Replacer.cs | 2 +- SabreTools.DatTools/Setter.cs | 2 +- SabreTools.DatTools/Splitter.cs | 12 +- SabreTools/Features/BaseFeature.cs | 6 +- SabreTools/Features/Batch.cs | 4 +- 45 files changed, 791 insertions(+), 252 deletions(-) create mode 100644 SabreTools.DatFiles.Test/ExtensionsTests.cs create mode 100644 SabreTools.DatFiles/Extensions.cs create mode 100644 SabreTools.DatItems/Extensions.cs diff --git a/SabreTools.Core.Test/Tools/ConvertersTests.cs b/SabreTools.Core.Test/Tools/ConvertersTests.cs index c53db42b..67b6b11a 100644 --- a/SabreTools.Core.Test/Tools/ConvertersTests.cs +++ b/SabreTools.Core.Test/Tools/ConvertersTests.cs @@ -9,54 +9,6 @@ namespace SabreTools.Core.Test.Tools { #region String to Enum - [Theory] - [InlineData(null, MergingFlag.None)] - [InlineData("none", MergingFlag.None)] - [InlineData("split", MergingFlag.Split)] - [InlineData("merged", MergingFlag.Merged)] - [InlineData("nonmerged", MergingFlag.NonMerged)] - [InlineData("unmerged", MergingFlag.NonMerged)] - [InlineData("fullmerged", MergingFlag.FullMerged)] - [InlineData("device", MergingFlag.DeviceNonMerged)] - [InlineData("devicenonmerged", MergingFlag.DeviceNonMerged)] - [InlineData("deviceunmerged", MergingFlag.DeviceNonMerged)] - [InlineData("full", MergingFlag.FullNonMerged)] - [InlineData("fullnonmerged", MergingFlag.FullNonMerged)] - [InlineData("fullunmerged", MergingFlag.FullNonMerged)] - public void AsMergingFlagTest(string? field, MergingFlag expected) - { - MergingFlag actual = field.AsEnumValue(); - Assert.Equal(expected, actual); - } - - [Theory] - [InlineData(null, NodumpFlag.None)] - [InlineData("none", NodumpFlag.None)] - [InlineData("obsolete", NodumpFlag.Obsolete)] - [InlineData("required", NodumpFlag.Required)] - [InlineData("ignore", NodumpFlag.Ignore)] - public void AsNodumpFlagTest(string? field, NodumpFlag expected) - { - NodumpFlag actual = field.AsEnumValue(); - Assert.Equal(expected, actual); - } - - [Theory] - [InlineData(null, PackingFlag.None)] - [InlineData("none", PackingFlag.None)] - [InlineData("yes", PackingFlag.Zip)] - [InlineData("zip", PackingFlag.Zip)] - [InlineData("no", PackingFlag.Unzip)] - [InlineData("unzip", PackingFlag.Unzip)] - [InlineData("partial", PackingFlag.Partial)] - [InlineData("flat", PackingFlag.Flat)] - [InlineData("fileonly", PackingFlag.FileOnly)] - public void AsPackingFlagTest(string? field, PackingFlag expected) - { - PackingFlag actual = field.AsEnumValue(); - Assert.Equal(expected, actual); - } - [Theory] [InlineData(null, null)] [InlineData("INVALID", null)] diff --git a/SabreTools.Core/Tools/Converters.cs b/SabreTools.Core/Tools/Converters.cs index 525a002d..55cd33ec 100644 --- a/SabreTools.Core/Tools/Converters.cs +++ b/SabreTools.Core/Tools/Converters.cs @@ -22,30 +22,6 @@ namespace SabreTools.Core.Tools }; } - /// - /// Get the enum value for an input string, if possible - /// - /// String value to parse/param> - /// Enum type that is expected - /// Enum value representing the input, default on error - public static T? AsEnumValue(this string? value) where T : notnull - { - // Get the mapping dictionary - var mappings = GenerateToEnum(); - - // Normalize the input value - value = value?.ToLowerInvariant(); - if (value == null) - return default; - - // Try to get the value from the mappings - if (mappings.ContainsKey(value)) - return mappings[value]; - - // Otherwise, return the default value for the enum - return default; - } - /// /// Get a set of mappings from strings to enum values /// diff --git a/SabreTools.DatFiles.Test/ExtensionsTests.cs b/SabreTools.DatFiles.Test/ExtensionsTests.cs new file mode 100644 index 00000000..a063eb05 --- /dev/null +++ b/SabreTools.DatFiles.Test/ExtensionsTests.cs @@ -0,0 +1,59 @@ +using Xunit; + +namespace SabreTools.DatFiles.Test +{ + public class ExtensionsTests + { + #region String to Enum + + [Theory] + [InlineData(null, MergingFlag.None)] + [InlineData("none", MergingFlag.None)] + [InlineData("split", MergingFlag.Split)] + [InlineData("merged", MergingFlag.Merged)] + [InlineData("nonmerged", MergingFlag.NonMerged)] + [InlineData("unmerged", MergingFlag.NonMerged)] + [InlineData("fullmerged", MergingFlag.FullMerged)] + [InlineData("device", MergingFlag.DeviceNonMerged)] + [InlineData("devicenonmerged", MergingFlag.DeviceNonMerged)] + [InlineData("deviceunmerged", MergingFlag.DeviceNonMerged)] + [InlineData("full", MergingFlag.FullNonMerged)] + [InlineData("fullnonmerged", MergingFlag.FullNonMerged)] + [InlineData("fullunmerged", MergingFlag.FullNonMerged)] + public void AsMergingFlagTest(string? field, MergingFlag expected) + { + MergingFlag actual = field.AsMergingFlag(); + Assert.Equal(expected, actual); + } + + [Theory] + [InlineData(null, NodumpFlag.None)] + [InlineData("none", NodumpFlag.None)] + [InlineData("obsolete", NodumpFlag.Obsolete)] + [InlineData("required", NodumpFlag.Required)] + [InlineData("ignore", NodumpFlag.Ignore)] + public void AsNodumpFlagTest(string? field, NodumpFlag expected) + { + NodumpFlag actual = field.AsNodumpFlag(); + Assert.Equal(expected, actual); + } + + [Theory] + [InlineData(null, PackingFlag.None)] + [InlineData("none", PackingFlag.None)] + [InlineData("yes", PackingFlag.Zip)] + [InlineData("zip", PackingFlag.Zip)] + [InlineData("no", PackingFlag.Unzip)] + [InlineData("unzip", PackingFlag.Unzip)] + [InlineData("partial", PackingFlag.Partial)] + [InlineData("flat", PackingFlag.Flat)] + [InlineData("fileonly", PackingFlag.FileOnly)] + public void AsPackingFlagTest(string? field, PackingFlag expected) + { + PackingFlag actual = field.AsPackingFlag(); + Assert.Equal(expected, actual); + } + + #endregion + } +} \ No newline at end of file diff --git a/SabreTools.DatFiles/DatFile.FromMetadata.cs b/SabreTools.DatFiles/DatFile.FromMetadata.cs index 9cec6329..2f008333 100644 --- a/SabreTools.DatFiles/DatFile.FromMetadata.cs +++ b/SabreTools.DatFiles/DatFile.FromMetadata.cs @@ -93,8 +93,8 @@ namespace SabreTools.DatFiles // Selectively set all possible fields -- TODO: Figure out how to make this less manual if (Header.GetStringFieldValue(Models.Metadata.Header.AuthorKey) == null) Header.SetFieldValue(Models.Metadata.Header.AuthorKey, header.GetStringFieldValue(Models.Metadata.Header.AuthorKey)); - if (Header.GetStringFieldValue(Models.Metadata.Header.BiosModeKey).AsEnumValue() == MergingFlag.None) - Header.SetFieldValue(Models.Metadata.Header.BiosModeKey, header.GetStringFieldValue(Models.Metadata.Header.BiosModeKey).AsEnumValue().AsStringValue()); + if (Header.GetStringFieldValue(Models.Metadata.Header.BiosModeKey).AsMergingFlag() == MergingFlag.None) + Header.SetFieldValue(Models.Metadata.Header.BiosModeKey, header.GetStringFieldValue(Models.Metadata.Header.BiosModeKey).AsMergingFlag().AsStringValue()); if (Header.GetStringFieldValue(Models.Metadata.Header.BuildKey) == null) Header.SetFieldValue(Models.Metadata.Header.BuildKey, header.GetStringFieldValue(Models.Metadata.Header.BuildKey)); if (Header.GetStringFieldValue(Models.Metadata.Header.CategoryKey) == null) @@ -113,12 +113,12 @@ namespace SabreTools.DatFiles Header.SetFieldValue(Models.Metadata.Header.EmailKey, header.GetStringFieldValue(Models.Metadata.Header.EmailKey)); if (Header.GetStringFieldValue(Models.Metadata.Header.EmulatorVersionKey) == null) Header.SetFieldValue(Models.Metadata.Header.EmulatorVersionKey, header.GetStringFieldValue(Models.Metadata.Header.EmulatorVersionKey)); - if (Header.GetStringFieldValue(Models.Metadata.Header.ForceMergingKey).AsEnumValue() == MergingFlag.None) - Header.SetFieldValue(Models.Metadata.Header.ForceMergingKey, header.GetStringFieldValue(Models.Metadata.Header.ForceMergingKey).AsEnumValue().AsStringValue()); - if (Header.GetStringFieldValue(Models.Metadata.Header.ForceNodumpKey).AsEnumValue() == NodumpFlag.None) - Header.SetFieldValue(Models.Metadata.Header.ForceNodumpKey, header.GetStringFieldValue(Models.Metadata.Header.ForceNodumpKey).AsEnumValue().AsStringValue()); - if (Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue() == PackingFlag.None) - Header.SetFieldValue(Models.Metadata.Header.ForcePackingKey, header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue().AsStringValue()); + if (Header.GetStringFieldValue(Models.Metadata.Header.ForceMergingKey).AsMergingFlag() == MergingFlag.None) + Header.SetFieldValue(Models.Metadata.Header.ForceMergingKey, header.GetStringFieldValue(Models.Metadata.Header.ForceMergingKey).AsMergingFlag().AsStringValue()); + if (Header.GetStringFieldValue(Models.Metadata.Header.ForceNodumpKey).AsNodumpFlag() == NodumpFlag.None) + Header.SetFieldValue(Models.Metadata.Header.ForceNodumpKey, header.GetStringFieldValue(Models.Metadata.Header.ForceNodumpKey).AsNodumpFlag().AsStringValue()); + if (Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsPackingFlag() == PackingFlag.None) + Header.SetFieldValue(Models.Metadata.Header.ForcePackingKey, header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsPackingFlag().AsStringValue()); if (Header.GetBoolFieldValue(Models.Metadata.Header.ForceZippingKey) == null) Header.SetFieldValue(Models.Metadata.Header.ForceZippingKey, header.GetBoolFieldValue(Models.Metadata.Header.ForceZippingKey)); if (Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey) == null) @@ -145,14 +145,14 @@ namespace SabreTools.DatFiles Header.SetFieldValue(Models.Metadata.Header.PluginKey, header.GetStringFieldValue(Models.Metadata.Header.PluginKey)); if (Header.GetStringFieldValue(Models.Metadata.Header.RefNameKey) == null) Header.SetFieldValue(Models.Metadata.Header.RefNameKey, header.GetStringFieldValue(Models.Metadata.Header.RefNameKey)); - if (Header.GetStringFieldValue(Models.Metadata.Header.RomModeKey).AsEnumValue() == MergingFlag.None) - Header.SetFieldValue(Models.Metadata.Header.RomModeKey, header.GetStringFieldValue(Models.Metadata.Header.RomModeKey).AsEnumValue().AsStringValue()); + if (Header.GetStringFieldValue(Models.Metadata.Header.RomModeKey).AsMergingFlag() == MergingFlag.None) + Header.SetFieldValue(Models.Metadata.Header.RomModeKey, header.GetStringFieldValue(Models.Metadata.Header.RomModeKey).AsMergingFlag().AsStringValue()); if (Header.GetStringFieldValue(Models.Metadata.Header.RomTitleKey) == null) Header.SetFieldValue(Models.Metadata.Header.RomTitleKey, header.GetStringFieldValue(Models.Metadata.Header.RomTitleKey)); if (Header.GetStringFieldValue(Models.Metadata.Header.RootDirKey) == null) Header.SetFieldValue(Models.Metadata.Header.RootDirKey, header.GetStringFieldValue(Models.Metadata.Header.RootDirKey)); - if (Header.GetStringFieldValue(Models.Metadata.Header.SampleModeKey).AsEnumValue() == MergingFlag.None) - Header.SetFieldValue(Models.Metadata.Header.SampleModeKey, header.GetStringFieldValue(Models.Metadata.Header.SampleModeKey).AsEnumValue().AsStringValue()); + if (Header.GetStringFieldValue(Models.Metadata.Header.SampleModeKey).AsMergingFlag() == MergingFlag.None) + Header.SetFieldValue(Models.Metadata.Header.SampleModeKey, header.GetStringFieldValue(Models.Metadata.Header.SampleModeKey).AsMergingFlag().AsStringValue()); if (Header.GetStringFieldValue(Models.Metadata.Header.SchemaLocationKey) == null) Header.SetFieldValue(Models.Metadata.Header.SchemaLocationKey, header.GetStringFieldValue(Models.Metadata.Header.SchemaLocationKey)); if (Header.GetStringFieldValue(Models.Metadata.Header.ScreenshotsHeightKey) == null) diff --git a/SabreTools.DatFiles/DatFile.ToMetadata.cs b/SabreTools.DatFiles/DatFile.ToMetadata.cs index 7c871fc2..d12d7f73 100644 --- a/SabreTools.DatFiles/DatFile.ToMetadata.cs +++ b/SabreTools.DatFiles/DatFile.ToMetadata.cs @@ -923,7 +923,7 @@ namespace SabreTools.DatFiles videoItem[Models.Metadata.Video.AspectYKey] = displayItem.ReadLong(Models.Metadata.Video.AspectYKey).ToString(); videoItem[Models.Metadata.Video.HeightKey] = displayItem.ReadLong(Models.Metadata.Display.HeightKey).ToString(); videoItem[Models.Metadata.Video.RefreshKey] = displayItem.ReadDouble(Models.Metadata.Display.RefreshKey).ToString(); - videoItem[Models.Metadata.Video.ScreenKey] = displayItem.ReadString(Models.Metadata.Display.DisplayTypeKey).AsEnumValue().AsStringValue(); + videoItem[Models.Metadata.Video.ScreenKey] = displayItem.ReadString(Models.Metadata.Display.DisplayTypeKey).AsDisplayType().AsStringValue(); videoItem[Models.Metadata.Video.WidthKey] = displayItem.ReadLong(Models.Metadata.Display.WidthKey).ToString(); switch (displayItem.ReadLong(Models.Metadata.Display.RotateKey)) @@ -959,7 +959,7 @@ namespace SabreTools.DatFiles var romItem = item.GetInternalClone(); // Create a Dump for every Rom that has a subtype - switch (romItem.ReadString(Models.Metadata.Rom.OpenMSXMediaType).AsEnumValue()) + switch (romItem.ReadString(Models.Metadata.Rom.OpenMSXMediaType).AsOpenMSXSubType()) { case OpenMSXSubType.Rom: var dumpRom = new Models.Metadata.Dump(); diff --git a/SabreTools.DatFiles/DatFile.cs b/SabreTools.DatFiles/DatFile.cs index c8b62722..ac0ce347 100644 --- a/SabreTools.DatFiles/DatFile.cs +++ b/SabreTools.DatFiles/DatFile.cs @@ -587,7 +587,7 @@ namespace SabreTools.DatFiles manufacturer = machine?.GetStringFieldValue(Models.Metadata.Machine.ManufacturerKey) ?? string.Empty, publisher = machine?.GetStringFieldValue(Models.Metadata.Machine.PublisherKey) ?? string.Empty, category = machine?.GetStringFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty, - name = item.GetName() ?? type.AsEnumValue().AsStringValue() ?? string.Empty, + name = item.GetName() ?? type.AsItemType().AsStringValue() ?? string.Empty, crc = string.Empty, md2 = string.Empty, md4 = string.Empty, @@ -721,7 +721,7 @@ namespace SabreTools.DatFiles foreach (DatItem datItem in datItems) { - ItemType itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue(); + ItemType itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType(); if (Array.Exists(SupportedTypes, t => t == itemType)) return true; } @@ -780,12 +780,12 @@ namespace SabreTools.DatFiles // Get the last item name, if applicable string lastItemName = lastItem.GetName() - ?? lastItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue() + ?? lastItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue() ?? string.Empty; // Get the current item name, if applicable string datItemName = datItem.GetName() - ?? datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue() + ?? datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue() ?? string.Empty; // If the current item exactly matches the last item, then we don't add it @@ -877,12 +877,12 @@ namespace SabreTools.DatFiles // Get the last item name, if applicable string lastItemName = lastItem.Value.Value.GetName() - ?? lastItem.Value.Value.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue() + ?? lastItem.Value.Value.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue() ?? string.Empty; // Get the current item name, if applicable string datItemName = datItem.Value.GetName() - ?? datItem.Value.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue() + ?? datItem.Value.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue() ?? string.Empty; // Get sources for both items @@ -989,7 +989,7 @@ namespace SabreTools.DatFiles } // If we have an item type not in the list of supported values - ItemType itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue(); + ItemType itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType(); if (!Array.Exists(SupportedTypes, t => t == itemType)) { string itemString = JsonConvert.SerializeObject(datItem, Formatting.None); @@ -1139,7 +1139,7 @@ namespace SabreTools.DatFiles string? xType = x.GetStringFieldValue(Models.Metadata.DatItem.TypeKey); string? yType = y.GetStringFieldValue(Models.Metadata.DatItem.TypeKey); if (xType != yType) - return xType.AsEnumValue() - yType.AsEnumValue(); + return xType.AsItemType() - yType.AsItemType(); // If directory names don't match string? xDirectoryName = Path.GetDirectoryName(TextHelper.RemovePathUnsafeCharacters(x.GetName() ?? string.Empty)); @@ -1194,7 +1194,7 @@ namespace SabreTools.DatFiles string? xType = x.Value.GetStringFieldValue(Models.Metadata.DatItem.TypeKey); string? yType = y.Value.GetStringFieldValue(Models.Metadata.DatItem.TypeKey); if (xType != yType) - return xType.AsEnumValue() - yType.AsEnumValue(); + return xType.AsItemType() - yType.AsItemType(); // If directory names don't match string? xDirectoryName = Path.GetDirectoryName(TextHelper.RemovePathUnsafeCharacters(x.Value.GetName() ?? string.Empty)); diff --git a/SabreTools.DatFiles/DatHeader.cs b/SabreTools.DatFiles/DatHeader.cs index 0aa1038d..e26c7841 100644 --- a/SabreTools.DatFiles/DatHeader.cs +++ b/SabreTools.DatFiles/DatHeader.cs @@ -153,11 +153,11 @@ namespace SabreTools.DatFiles var header = (_internal.Clone() as Models.Metadata.Header)!; // Remove fields with default values - if (header.ReadString(Models.Metadata.Header.ForceMergingKey).AsEnumValue() == MergingFlag.None) + if (header.ReadString(Models.Metadata.Header.ForceMergingKey).AsMergingFlag() == MergingFlag.None) header.Remove(Models.Metadata.Header.ForceMergingKey); - if (header.ReadString(Models.Metadata.Header.ForceNodumpKey).AsEnumValue() == NodumpFlag.None) + if (header.ReadString(Models.Metadata.Header.ForceNodumpKey).AsNodumpFlag() == NodumpFlag.None) header.Remove(Models.Metadata.Header.ForceNodumpKey); - if (header.ReadString(Models.Metadata.Header.ForcePackingKey).AsEnumValue() == PackingFlag.None) + if (header.ReadString(Models.Metadata.Header.ForcePackingKey).AsPackingFlag() == PackingFlag.None) header.Remove(Models.Metadata.Header.ForcePackingKey); // Convert subheader values diff --git a/SabreTools.DatFiles/DatStatistics.cs b/SabreTools.DatFiles/DatStatistics.cs index 6bd132c7..c8870675 100644 --- a/SabreTools.DatFiles/DatStatistics.cs +++ b/SabreTools.DatFiles/DatStatistics.cs @@ -117,7 +117,7 @@ namespace SabreTools.DatFiles RemovedCount++; // Increment the item count for the type - AddItemCount(item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue()); + AddItemCount(item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType()); // Some item types require special processing switch (item) @@ -154,7 +154,7 @@ namespace SabreTools.DatFiles RemovedCount++; // Increment the item count for the type - AddItemCount(item.ReadString(Models.Metadata.DatItem.TypeKey).AsEnumValue()); + AddItemCount(item.ReadString(Models.Metadata.DatItem.TypeKey).AsItemType()); // Some item types require special processing switch (item) @@ -273,7 +273,7 @@ namespace SabreTools.DatFiles RemovedCount--; // Decrement the item count for the type - RemoveItemCount(item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue()); + RemoveItemCount(item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType()); // Some item types require special processing switch (item) @@ -314,7 +314,7 @@ namespace SabreTools.DatFiles RemovedCount--; // Decrement the item count for the type - RemoveItemCount(item.ReadString(Models.Metadata.DatItem.TypeKey).AsEnumValue()); + RemoveItemCount(item.ReadString(Models.Metadata.DatItem.TypeKey).AsItemType()); // Some item types require special processing switch (item) @@ -389,16 +389,16 @@ namespace SabreTools.DatFiles /// Item to add info from private void AddItemStatistics(Disk disk) { - if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() != ItemStatus.Nodump) + if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus() != ItemStatus.Nodump) { AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key)) ? 0 : 1); AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key)) ? 0 : 1); } - AddStatusCount(ItemStatus.BadDump, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Verified ? 1 : 0); + AddStatusCount(ItemStatus.BadDump, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.BadDump ? 1 : 0); + AddStatusCount(ItemStatus.Good, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Good ? 1 : 0); + AddStatusCount(ItemStatus.Nodump, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Nodump ? 1 : 0); + AddStatusCount(ItemStatus.Verified, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Verified ? 1 : 0); } /// @@ -407,16 +407,16 @@ namespace SabreTools.DatFiles /// Item to add info from private void AddItemStatistics(Models.Metadata.Disk disk) { - if (disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() != ItemStatus.Nodump) + if (disk.ReadString(Models.Metadata.Disk.StatusKey).AsItemStatus() != ItemStatus.Nodump) { AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.ReadString(Models.Metadata.Disk.MD5Key)) ? 0 : 1); AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.ReadString(Models.Metadata.Disk.SHA1Key)) ? 0 : 1); } - AddStatusCount(ItemStatus.BadDump, disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Verified ? 1 : 0); + AddStatusCount(ItemStatus.BadDump, disk.ReadString(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.BadDump ? 1 : 0); + AddStatusCount(ItemStatus.Good, disk.ReadString(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Good ? 1 : 0); + AddStatusCount(ItemStatus.Nodump, disk.ReadString(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Nodump ? 1 : 0); + AddStatusCount(ItemStatus.Verified, disk.ReadString(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Verified ? 1 : 0); } /// @@ -462,7 +462,7 @@ namespace SabreTools.DatFiles /// Item to add info from private void AddItemStatistics(Rom rom) { - if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() != ItemStatus.Nodump) + if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() != ItemStatus.Nodump) { TotalSize += rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0; AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); @@ -476,10 +476,10 @@ namespace SabreTools.DatFiles AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); } - AddStatusCount(ItemStatus.BadDump, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Verified ? 1 : 0); + AddStatusCount(ItemStatus.BadDump, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.BadDump ? 1 : 0); + AddStatusCount(ItemStatus.Good, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Good ? 1 : 0); + AddStatusCount(ItemStatus.Nodump, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Nodump ? 1 : 0); + AddStatusCount(ItemStatus.Verified, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Verified ? 1 : 0); } /// @@ -488,7 +488,7 @@ namespace SabreTools.DatFiles /// Item to add info from private void AddItemStatistics(Models.Metadata.Rom rom) { - if (rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() != ItemStatus.Nodump) + if (rom.ReadString(Models.Metadata.Rom.StatusKey).AsItemStatus() != ItemStatus.Nodump) { TotalSize += rom.ReadLong(Models.Metadata.Rom.SizeKey) ?? 0; AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.CRCKey)) ? 0 : 1); @@ -502,10 +502,10 @@ namespace SabreTools.DatFiles AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); } - AddStatusCount(ItemStatus.BadDump, rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Verified ? 1 : 0); + AddStatusCount(ItemStatus.BadDump, rom.ReadString(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.BadDump ? 1 : 0); + AddStatusCount(ItemStatus.Good, rom.ReadString(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Good ? 1 : 0); + AddStatusCount(ItemStatus.Nodump, rom.ReadString(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Nodump ? 1 : 0); + AddStatusCount(ItemStatus.Verified, rom.ReadString(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Verified ? 1 : 0); } /// @@ -568,16 +568,16 @@ namespace SabreTools.DatFiles /// Item to remove info for private void RemoveItemStatistics(Disk disk) { - if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() != ItemStatus.Nodump) + if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus() != ItemStatus.Nodump) { RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key)) ? 0 : 1); RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key)) ? 0 : 1); } - RemoveStatusCount(ItemStatus.BadDump, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Verified ? 1 : 0); + RemoveStatusCount(ItemStatus.BadDump, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.BadDump ? 1 : 0); + RemoveStatusCount(ItemStatus.Good, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Good ? 1 : 0); + RemoveStatusCount(ItemStatus.Nodump, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Nodump ? 1 : 0); + RemoveStatusCount(ItemStatus.Verified, disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Verified ? 1 : 0); } /// @@ -586,16 +586,16 @@ namespace SabreTools.DatFiles /// Item to remove info for private void RemoveItemStatistics(Models.Metadata.Disk disk) { - if (disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() != ItemStatus.Nodump) + if (disk.ReadString(Models.Metadata.Disk.StatusKey).AsItemStatus() != ItemStatus.Nodump) { RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.ReadString(Models.Metadata.Disk.MD5Key)) ? 0 : 1); RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.ReadString(Models.Metadata.Disk.SHA1Key)) ? 0 : 1); } - RemoveStatusCount(ItemStatus.BadDump, disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, disk.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Verified ? 1 : 0); + RemoveStatusCount(ItemStatus.BadDump, disk.ReadString(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.BadDump ? 1 : 0); + RemoveStatusCount(ItemStatus.Good, disk.ReadString(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Good ? 1 : 0); + RemoveStatusCount(ItemStatus.Nodump, disk.ReadString(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Nodump ? 1 : 0); + RemoveStatusCount(ItemStatus.Verified, disk.ReadString(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Verified ? 1 : 0); } /// @@ -641,7 +641,7 @@ namespace SabreTools.DatFiles /// Item to remove info for private void RemoveItemStatistics(Rom rom) { - if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() != ItemStatus.Nodump) + if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() != ItemStatus.Nodump) { TotalSize -= rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0; RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); @@ -655,10 +655,10 @@ namespace SabreTools.DatFiles RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); } - RemoveStatusCount(ItemStatus.BadDump, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Verified ? 1 : 0); + RemoveStatusCount(ItemStatus.BadDump, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.BadDump ? 1 : 0); + RemoveStatusCount(ItemStatus.Good, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Good ? 1 : 0); + RemoveStatusCount(ItemStatus.Nodump, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Nodump ? 1 : 0); + RemoveStatusCount(ItemStatus.Verified, rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Verified ? 1 : 0); } /// @@ -667,7 +667,7 @@ namespace SabreTools.DatFiles /// Item to remove info for private void RemoveItemStatistics(Models.Metadata.Rom rom) { - if (rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() != ItemStatus.Nodump) + if (rom.ReadString(Models.Metadata.Rom.StatusKey).AsItemStatus() != ItemStatus.Nodump) { TotalSize -= rom.ReadLong(Models.Metadata.Rom.SizeKey) ?? 0; RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.CRCKey)) ? 0 : 1); @@ -681,10 +681,10 @@ namespace SabreTools.DatFiles RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.ReadString(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); } - RemoveStatusCount(ItemStatus.BadDump, rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, rom.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Verified ? 1 : 0); + RemoveStatusCount(ItemStatus.BadDump, rom.ReadString(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.BadDump ? 1 : 0); + RemoveStatusCount(ItemStatus.Good, rom.ReadString(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Good ? 1 : 0); + RemoveStatusCount(ItemStatus.Nodump, rom.ReadString(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Nodump ? 1 : 0); + RemoveStatusCount(ItemStatus.Verified, rom.ReadString(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Verified ? 1 : 0); } /// diff --git a/SabreTools.DatFiles/Extensions.cs b/SabreTools.DatFiles/Extensions.cs new file mode 100644 index 00000000..e86f47d0 --- /dev/null +++ b/SabreTools.DatFiles/Extensions.cs @@ -0,0 +1,94 @@ +using System.Collections.Generic; +using SabreTools.Core.Tools; + +namespace SabreTools.DatFiles +{ + public static class Extensions + { + #region Private Maps + + /// + /// Set of enum to string mappings for MergingFlag + /// + private static readonly Dictionary _mergingFlagMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for NodumpFlag + /// + private static readonly Dictionary _nodumpFlagMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for PackingFlag + /// + private static readonly Dictionary _packingFlagMap = Converters.GenerateToEnum(); + + #endregion + + #region String to Enum + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static MergingFlag AsMergingFlag(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_mergingFlagMap.ContainsKey(value)) + return _mergingFlagMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static NodumpFlag AsNodumpFlag(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_nodumpFlagMap.ContainsKey(value)) + return _nodumpFlagMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static PackingFlag AsPackingFlag(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_packingFlagMap.ContainsKey(value)) + return _packingFlagMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + #endregion + } +} \ No newline at end of file diff --git a/SabreTools.DatFiles/Formats/ClrMamePro.cs b/SabreTools.DatFiles/Formats/ClrMamePro.cs index 567127be..de55c376 100644 --- a/SabreTools.DatFiles/Formats/ClrMamePro.cs +++ b/SabreTools.DatFiles/Formats/ClrMamePro.cs @@ -125,14 +125,14 @@ namespace SabreTools.DatFiles.Formats break; case Chip chip: - if (chip.GetStringFieldValue(Models.Metadata.Chip.ChipTypeKey).AsEnumValue() == ChipType.NULL) + if (chip.GetStringFieldValue(Models.Metadata.Chip.ChipTypeKey).AsChipType() == ChipType.NULL) missingFields.Add(Models.Metadata.Chip.ChipTypeKey); if (string.IsNullOrEmpty(chip.GetName())) missingFields.Add(Models.Metadata.Chip.NameKey); break; case Display display: - if (display.GetStringFieldValue(Models.Metadata.Display.DisplayTypeKey).AsEnumValue() == DisplayType.NULL) + if (display.GetStringFieldValue(Models.Metadata.Display.DisplayTypeKey).AsDisplayType() == DisplayType.NULL) missingFields.Add(Models.Metadata.Display.DisplayTypeKey); if (display.GetInt64FieldValue(Models.Metadata.Display.RotateKey) == null) missingFields.Add(Models.Metadata.Display.RotateKey); @@ -156,9 +156,9 @@ namespace SabreTools.DatFiles.Formats break; case Driver driver: - if (driver.GetStringFieldValue(Models.Metadata.Driver.StatusKey).AsEnumValue() == SupportStatus.NULL) + if (driver.GetStringFieldValue(Models.Metadata.Driver.StatusKey).AsSupportStatus() == SupportStatus.NULL) missingFields.Add(Models.Metadata.Driver.StatusKey); - if (driver.GetStringFieldValue(Models.Metadata.Driver.EmulationKey).AsEnumValue() == SupportStatus.NULL) + if (driver.GetStringFieldValue(Models.Metadata.Driver.EmulationKey).AsSupportStatus() == SupportStatus.NULL) missingFields.Add(Models.Metadata.Driver.EmulationKey); break; } diff --git a/SabreTools.DatFiles/Formats/Listxml.cs b/SabreTools.DatFiles/Formats/Listxml.cs index 8f8a3518..3df425a5 100644 --- a/SabreTools.DatFiles/Formats/Listxml.cs +++ b/SabreTools.DatFiles/Formats/Listxml.cs @@ -301,12 +301,12 @@ namespace SabreTools.DatFiles.Formats case Chip chip: if (string.IsNullOrEmpty(chip.GetName())) missingFields.Add(Models.Metadata.Chip.NameKey); - if (chip.GetStringFieldValue(Models.Metadata.Chip.ChipTypeKey).AsEnumValue() == ChipType.NULL) + if (chip.GetStringFieldValue(Models.Metadata.Chip.ChipTypeKey).AsChipType() == ChipType.NULL) missingFields.Add(Models.Metadata.Chip.ChipTypeKey); break; case Display display: - if (display.GetStringFieldValue(Models.Metadata.Display.DisplayTypeKey).AsEnumValue() == DisplayType.NULL) + if (display.GetStringFieldValue(Models.Metadata.Display.DisplayTypeKey).AsDisplayType() == DisplayType.NULL) missingFields.Add(Models.Metadata.Display.DisplayTypeKey); if (display.GetDoubleFieldValue(Models.Metadata.Display.RefreshKey) == null) missingFields.Add(Models.Metadata.Display.RefreshKey); @@ -347,23 +347,23 @@ namespace SabreTools.DatFiles.Formats break; case Driver driver: - if (driver.GetStringFieldValue(Models.Metadata.Driver.StatusKey).AsEnumValue() == SupportStatus.NULL) + if (driver.GetStringFieldValue(Models.Metadata.Driver.StatusKey).AsSupportStatus() == SupportStatus.NULL) missingFields.Add(Models.Metadata.Driver.StatusKey); - if (driver.GetStringFieldValue(Models.Metadata.Driver.EmulationKey).AsEnumValue() == SupportStatus.NULL) + if (driver.GetStringFieldValue(Models.Metadata.Driver.EmulationKey).AsSupportStatus() == SupportStatus.NULL) missingFields.Add(Models.Metadata.Driver.EmulationKey); - if (driver.GetStringFieldValue(Models.Metadata.Driver.CocktailKey).AsEnumValue() == SupportStatus.NULL) + if (driver.GetStringFieldValue(Models.Metadata.Driver.CocktailKey).AsSupportStatus() == SupportStatus.NULL) missingFields.Add(Models.Metadata.Driver.CocktailKey); - if (driver.GetStringFieldValue(Models.Metadata.Driver.SaveStateKey).AsEnumValue() == SupportStatus.NULL) + if (driver.GetStringFieldValue(Models.Metadata.Driver.SaveStateKey).AsSupportStatus() == SupportStatus.NULL) missingFields.Add(Models.Metadata.Driver.SaveStateKey); break; case Feature feature: - if (feature.GetStringFieldValue(Models.Metadata.Feature.FeatureTypeKey).AsEnumValue() == FeatureType.NULL) + if (feature.GetStringFieldValue(Models.Metadata.Feature.FeatureTypeKey).AsFeatureType() == FeatureType.NULL) missingFields.Add(Models.Metadata.Feature.FeatureTypeKey); break; case Device device: - if (device.GetStringFieldValue(Models.Metadata.Device.DeviceTypeKey).AsEnumValue() == DeviceType.NULL) + if (device.GetStringFieldValue(Models.Metadata.Device.DeviceTypeKey).AsDeviceType() == DeviceType.NULL) missingFields.Add(Models.Metadata.Device.DeviceTypeKey); break; @@ -377,7 +377,7 @@ namespace SabreTools.DatFiles.Formats missingFields.Add(Models.Metadata.SoftwareList.TagKey); if (string.IsNullOrEmpty(softwarelist.GetName())) missingFields.Add(Models.Metadata.SoftwareList.NameKey); - if (softwarelist.GetStringFieldValue(Models.Metadata.SoftwareList.StatusKey).AsEnumValue() == SoftwareListStatus.None) + if (softwarelist.GetStringFieldValue(Models.Metadata.SoftwareList.StatusKey).AsSoftwareListStatus() == SoftwareListStatus.None) missingFields.Add(Models.Metadata.SoftwareList.StatusKey); break; diff --git a/SabreTools.DatFiles/Formats/Logiqx.cs b/SabreTools.DatFiles/Formats/Logiqx.cs index e6d5653b..98188eca 100644 --- a/SabreTools.DatFiles/Formats/Logiqx.cs +++ b/SabreTools.DatFiles/Formats/Logiqx.cs @@ -334,13 +334,13 @@ namespace SabreTools.DatFiles.Formats break; case Driver driver: - if (driver.GetStringFieldValue(Models.Metadata.Driver.StatusKey).AsEnumValue() == SupportStatus.NULL) + if (driver.GetStringFieldValue(Models.Metadata.Driver.StatusKey).AsSupportStatus() == SupportStatus.NULL) missingFields.Add(Models.Metadata.Driver.StatusKey); - if (driver.GetStringFieldValue(Models.Metadata.Driver.EmulationKey).AsEnumValue() == SupportStatus.NULL) + if (driver.GetStringFieldValue(Models.Metadata.Driver.EmulationKey).AsSupportStatus() == SupportStatus.NULL) missingFields.Add(Models.Metadata.Driver.EmulationKey); - if (driver.GetStringFieldValue(Models.Metadata.Driver.CocktailKey).AsEnumValue() == SupportStatus.NULL) + if (driver.GetStringFieldValue(Models.Metadata.Driver.CocktailKey).AsSupportStatus() == SupportStatus.NULL) missingFields.Add(Models.Metadata.Driver.CocktailKey); - if (driver.GetStringFieldValue(Models.Metadata.Driver.SaveStateKey).AsEnumValue() == SupportStatus.NULL) + if (driver.GetStringFieldValue(Models.Metadata.Driver.SaveStateKey).AsSupportStatus() == SupportStatus.NULL) missingFields.Add(Models.Metadata.Driver.SaveStateKey); break; @@ -349,7 +349,7 @@ namespace SabreTools.DatFiles.Formats missingFields.Add(Models.Metadata.SoftwareList.TagKey); if (string.IsNullOrEmpty(softwarelist.GetName())) missingFields.Add(Models.Metadata.SoftwareList.NameKey); - if (softwarelist.GetStringFieldValue(Models.Metadata.SoftwareList.StatusKey).AsEnumValue() == SoftwareListStatus.None) + if (softwarelist.GetStringFieldValue(Models.Metadata.SoftwareList.StatusKey).AsSoftwareListStatus() == SoftwareListStatus.None) missingFields.Add(Models.Metadata.SoftwareList.StatusKey); break; } diff --git a/SabreTools.DatFiles/Formats/SabreJSON.cs b/SabreTools.DatFiles/Formats/SabreJSON.cs index 99684289..733d1b0c 100644 --- a/SabreTools.DatFiles/Formats/SabreJSON.cs +++ b/SabreTools.DatFiles/Formats/SabreJSON.cs @@ -249,7 +249,7 @@ namespace SabreTools.DatFiles.Formats if (datItemObj == null) return; - switch (datItemObj.Value("type").AsEnumValue()) + switch (datItemObj.Value("type").AsItemType()) { case ItemType.Adjuster: datItem = datItemObj.ToObject(); diff --git a/SabreTools.DatFiles/ItemDictionary.cs b/SabreTools.DatFiles/ItemDictionary.cs index ad3f40f2..322c3d78 100644 --- a/SabreTools.DatFiles/ItemDictionary.cs +++ b/SabreTools.DatFiles/ItemDictionary.cs @@ -99,7 +99,7 @@ namespace SabreTools.DatFiles if (item is Disk disk) { // If the file has aboslutely no hashes, skip and log - if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() != ItemStatus.Nodump + if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus() != ItemStatus.Nodump && string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key)) && string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))) { @@ -163,14 +163,14 @@ namespace SabreTools.DatFiles } // If the file has no size and it's not the above case, skip and log - else if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() != ItemStatus.Nodump && (size == 0 || size == null)) + else if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() != ItemStatus.Nodump && (size == 0 || size == null)) { //logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.GetName()}' will be output as nodump"); rom.SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.Nodump.AsStringValue()); } // If the file has a size but aboslutely no hashes, skip and log - else if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() != ItemStatus.Nodump + else if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() != ItemStatus.Nodump && size != null && size > 0 && !rom.HasHashes()) { @@ -493,13 +493,13 @@ namespace SabreTools.DatFiles continue; // If it's a nodump, add and skip - if (datItem is Rom rom && rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Nodump) + if (datItem is Rom rom && rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Nodump) { output.Add(datItem); nodumpCount++; continue; } - else if (datItem is Disk disk && disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Nodump) + else if (datItem is Disk disk && disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Nodump) { output.Add(datItem); nodumpCount++; @@ -838,7 +838,7 @@ namespace SabreTools.DatFiles string? xType = x.GetStringFieldValue(Models.Metadata.DatItem.TypeKey); string? yType = y.GetStringFieldValue(Models.Metadata.DatItem.TypeKey); if (xType != yType) - return xType.AsEnumValue() - yType.AsEnumValue(); + return xType.AsItemType() - yType.AsItemType(); // If directory names don't match string? xDirectoryName = Path.GetDirectoryName(TextHelper.RemovePathUnsafeCharacters(x.GetName() ?? string.Empty)); diff --git a/SabreTools.DatFiles/ItemDictionaryDB.cs b/SabreTools.DatFiles/ItemDictionaryDB.cs index ced648ef..780d4025 100644 --- a/SabreTools.DatFiles/ItemDictionaryDB.cs +++ b/SabreTools.DatFiles/ItemDictionaryDB.cs @@ -186,7 +186,7 @@ namespace SabreTools.DatFiles if (item is Disk disk) { // If the file has aboslutely no hashes, skip and log - if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() != ItemStatus.Nodump + if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus() != ItemStatus.Nodump && string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key)) && string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))) { @@ -250,14 +250,14 @@ namespace SabreTools.DatFiles } // If the file has no size and it's not the above case, skip and log - else if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() != ItemStatus.Nodump && (size == 0 || size == null)) + else if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() != ItemStatus.Nodump && (size == 0 || size == null)) { //logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.GetName()}' will be output as nodump"); rom.SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.Nodump.AsStringValue()); } // If the file has a size but aboslutely no hashes, skip and log - else if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() != ItemStatus.Nodump + else if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() != ItemStatus.Nodump && size != null && size > 0 && !rom.HasHashes()) { @@ -869,13 +869,13 @@ namespace SabreTools.DatFiles continue; // If it's a nodump, add and skip - if (datItem is Rom rom && rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Nodump) + if (datItem is Rom rom && rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Nodump) { output.Add(new KeyValuePair(itemIndex, datItem)); nodumpCount++; continue; } - else if (datItem is Disk disk && disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Nodump) + else if (datItem is Disk disk && disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Nodump) { output.Add(new KeyValuePair(itemIndex, datItem)); nodumpCount++; @@ -1173,7 +1173,7 @@ namespace SabreTools.DatFiles string? xType = x.Value.GetStringFieldValue(Models.Metadata.DatItem.TypeKey); string? yType = y.Value.GetStringFieldValue(Models.Metadata.DatItem.TypeKey); if (xType != yType) - return xType.AsEnumValue() - yType.AsEnumValue(); + return xType.AsItemType() - yType.AsItemType(); // If directory names don't match string? xDirectoryName = Path.GetDirectoryName(TextHelper.RemovePathUnsafeCharacters(x.Value.GetName())); diff --git a/SabreTools.DatItems.Test/ConvertersTests.cs b/SabreTools.DatItems.Test/ConvertersTests.cs index 6f873e74..4ed80d6e 100644 --- a/SabreTools.DatItems.Test/ConvertersTests.cs +++ b/SabreTools.DatItems.Test/ConvertersTests.cs @@ -13,7 +13,7 @@ namespace SabreTools.DatItems.Test [InlineData("audio", ChipType.Audio)] public void AsChipTypeTest(string? field, ChipType expected) { - ChipType actual = field.AsEnumValue(); + ChipType actual = field.AsChipType(); Assert.Equal(expected, actual); } @@ -36,7 +36,7 @@ namespace SabreTools.DatItems.Test [InlineData("gambling", ControlType.Gambling)] public void AsControlTypeTest(string? field, ControlType expected) { - ControlType actual = field.AsEnumValue(); + ControlType actual = field.AsControlType(); Assert.Equal(expected, actual); } @@ -65,7 +65,7 @@ namespace SabreTools.DatItems.Test [InlineData("vidfile", DeviceType.VidFile)] public void AsDeviceTypeTest(string? field, DeviceType expected) { - DeviceType actual = field.AsEnumValue(); + DeviceType actual = field.AsDeviceType(); Assert.Equal(expected, actual); } @@ -78,7 +78,7 @@ namespace SabreTools.DatItems.Test [InlineData("unknown", DisplayType.Unknown)] public void AsDisplayTypeTest(string? field, DisplayType expected) { - DisplayType actual = field.AsEnumValue(); + DisplayType actual = field.AsDisplayType(); Assert.Equal(expected, actual); } @@ -88,7 +88,7 @@ namespace SabreTools.DatItems.Test [InlineData("little", Endianness.Little)] public void AsEndiannessTest(string? field, Endianness expected) { - Endianness actual = field.AsEnumValue(); + Endianness actual = field.AsEndianness(); Assert.Equal(expected, actual); } @@ -98,7 +98,7 @@ namespace SabreTools.DatItems.Test [InlineData("imperfect", FeatureStatus.Imperfect)] public void AsFeatureStatusTest(string? field, FeatureStatus expected) { - FeatureStatus actual = field.AsEnumValue(); + FeatureStatus actual = field.AsFeatureStatus(); Assert.Equal(expected, actual); } @@ -120,7 +120,7 @@ namespace SabreTools.DatItems.Test [InlineData("timing", FeatureType.Timing)] public void AsFeatureTypeTest(string? field, FeatureType expected) { - FeatureType actual = field.AsEnumValue(); + FeatureType actual = field.AsFeatureType(); Assert.Equal(expected, actual); } @@ -135,7 +135,7 @@ namespace SabreTools.DatItems.Test [InlineData("verified", ItemStatus.Verified)] public void AsItemStatusTest(string? field, ItemStatus expected) { - ItemStatus actual = field.AsEnumValue(); + ItemStatus actual = field.AsItemStatus(); Assert.Equal(expected, actual); } @@ -196,7 +196,7 @@ namespace SabreTools.DatItems.Test [InlineData("source_details", ItemType.SourceDetails)] public void AsItemTypeTest(string? field, ItemType expected) { - ItemType actual = field.AsEnumValue(); + ItemType actual = field.AsItemType(); Assert.Equal(expected, actual); } @@ -218,7 +218,7 @@ namespace SabreTools.DatItems.Test [InlineData("ignore", LoadFlag.Ignore)] public void AsLoadFlagTest(string? field, LoadFlag expected) { - LoadFlag actual = field.AsEnumValue(); + LoadFlag actual = field.AsLoadFlag(); Assert.Equal(expected, actual); } @@ -232,7 +232,7 @@ namespace SabreTools.DatItems.Test [InlineData("mechanical", MachineType.Mechanical)] public void AsMachineTypeTest(string? field, MachineType expected) { - MachineType actual = field.AsEnumValue(); + MachineType actual = field.AsMachineType(); Assert.Equal(expected, actual); } @@ -243,7 +243,7 @@ namespace SabreTools.DatItems.Test [InlineData("sccpluscart", OpenMSXSubType.SCCPlusCart)] public void AsOpenMSXSubTypeTest(string? field, OpenMSXSubType expected) { - OpenMSXSubType actual = field.AsEnumValue(); + OpenMSXSubType actual = field.AsOpenMSXSubType(); Assert.Equal(expected, actual); } @@ -257,7 +257,7 @@ namespace SabreTools.DatItems.Test [InlineData("ge", Relation.GreaterThanOrEqual)] public void AsRelationTest(string? field, Relation expected) { - Relation actual = field.AsEnumValue(); + Relation actual = field.AsRelation(); Assert.Equal(expected, actual); } @@ -268,7 +268,7 @@ namespace SabreTools.DatItems.Test [InlineData("yes", Runnable.Yes)] public void AsRunnableTest(string? field, Runnable expected) { - Runnable actual = field.AsEnumValue(); + Runnable actual = field.AsRunnable(); Assert.Equal(expected, actual); } @@ -279,7 +279,7 @@ namespace SabreTools.DatItems.Test [InlineData("compatible", SoftwareListStatus.Compatible)] public void AsSoftwareListStatusTest(string? field, SoftwareListStatus expected) { - SoftwareListStatus actual = field.AsEnumValue(); + SoftwareListStatus actual = field.AsSoftwareListStatus(); Assert.Equal(expected, actual); } @@ -292,7 +292,7 @@ namespace SabreTools.DatItems.Test [InlineData("supported", Supported.Yes)] public void AsSupportedTest(string? field, Supported expected) { - Supported actual = field.AsEnumValue(); + Supported actual = field.AsSupported(); Assert.Equal(expected, actual); } @@ -303,7 +303,7 @@ namespace SabreTools.DatItems.Test [InlineData("preliminary", SupportStatus.Preliminary)] public void AsSupportStatusTest(string? field, SupportStatus expected) { - SupportStatus actual = field.AsEnumValue(); + SupportStatus actual = field.AsSupportStatus(); Assert.Equal(expected, actual); } diff --git a/SabreTools.DatItems/DatItem.cs b/SabreTools.DatItems/DatItem.cs index edf21b27..4f40b7da 100644 --- a/SabreTools.DatItems/DatItem.cs +++ b/SabreTools.DatItems/DatItem.cs @@ -223,8 +223,8 @@ namespace SabreTools.DatItems return false; // Get the types for comparison - ItemType selfType = GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue(); - ItemType otherType = other.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue(); + ItemType selfType = GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType(); + ItemType otherType = other.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType(); // If we don't have a matched type, return false if (selfType != otherType) @@ -429,8 +429,8 @@ namespace SabreTools.DatItems return false; // Get the types for comparison - ItemType selfType = GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue(); - ItemType otherType = other.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue(); + ItemType selfType = GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType(); + ItemType otherType = other.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType(); // If we don't have a matched type, return false if (selfType != otherType) diff --git a/SabreTools.DatItems/Extensions.cs b/SabreTools.DatItems/Extensions.cs new file mode 100644 index 00000000..a8bb88b2 --- /dev/null +++ b/SabreTools.DatItems/Extensions.cs @@ -0,0 +1,458 @@ +using System.Collections.Generic; +using SabreTools.Core.Tools; + +namespace SabreTools.DatItems +{ + public static class Extensions + { + #region Private Maps + + /// + /// Set of enum to string mappings for ChipType + /// + private static readonly Dictionary _chipTypeMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for ControlType + /// + private static readonly Dictionary _controlTypeMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for DeviceType + /// + private static readonly Dictionary _deviceTypeMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for DisplayType + /// + private static readonly Dictionary _displayTypeMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for Endianness + /// + private static readonly Dictionary _endiannessMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for FeatureStatus + /// + private static readonly Dictionary _featureStatusMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for FeatureType + /// + private static readonly Dictionary _featureTypeMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for ItemStatus + /// + private static readonly Dictionary _itemStatusMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for ItemType + /// + private static readonly Dictionary _itemTypeMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for LoadFlag + /// + private static readonly Dictionary _loadFlagMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for MachineType + /// + private static readonly Dictionary _machineTypeMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for OpenMSXSubType + /// + private static readonly Dictionary _openMSXSubTypeMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for Relation + /// + private static readonly Dictionary _relationMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for Runnable + /// + private static readonly Dictionary _runnableMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for SoftwareListStatus + /// + private static readonly Dictionary _softwareListStatusMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for Supported + /// + private static readonly Dictionary _supportedMap = Converters.GenerateToEnum(); + + /// + /// Set of enum to string mappings for SupportStatus + /// + private static readonly Dictionary _supportStatusMap = Converters.GenerateToEnum(); + + #endregion + + #region String to Enum + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static ChipType AsChipType(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_chipTypeMap.ContainsKey(value)) + return _chipTypeMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static ControlType AsControlType(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_controlTypeMap.ContainsKey(value)) + return _controlTypeMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static DeviceType AsDeviceType(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_deviceTypeMap.ContainsKey(value)) + return _deviceTypeMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static DisplayType AsDisplayType(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_displayTypeMap.ContainsKey(value)) + return _displayTypeMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static Endianness AsEndianness(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_endiannessMap.ContainsKey(value)) + return _endiannessMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static FeatureStatus AsFeatureStatus(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_featureStatusMap.ContainsKey(value)) + return _featureStatusMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static FeatureType AsFeatureType(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_featureTypeMap.ContainsKey(value)) + return _featureTypeMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static ItemStatus AsItemStatus(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_itemStatusMap.ContainsKey(value)) + return _itemStatusMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static ItemType AsItemType(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_itemTypeMap.ContainsKey(value)) + return _itemTypeMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static LoadFlag AsLoadFlag(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_loadFlagMap.ContainsKey(value)) + return _loadFlagMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static MachineType AsMachineType(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_machineTypeMap.ContainsKey(value)) + return _machineTypeMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static OpenMSXSubType AsOpenMSXSubType(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_openMSXSubTypeMap.ContainsKey(value)) + return _openMSXSubTypeMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static Relation AsRelation(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_relationMap.ContainsKey(value)) + return _relationMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static Runnable AsRunnable(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_runnableMap.ContainsKey(value)) + return _runnableMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static SoftwareListStatus AsSoftwareListStatus(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_softwareListStatusMap.ContainsKey(value)) + return _softwareListStatusMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static Supported AsSupported(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_supportedMap.ContainsKey(value)) + return _supportedMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum type that is expected + /// Enum value representing the input, default on error + public static SupportStatus AsSupportStatus(this string? value) + { + // Normalize the input value + value = value?.ToLowerInvariant(); + if (value == null) + return default; + + // Try to get the value from the mappings + if (_supportStatusMap.ContainsKey(value)) + return _supportStatusMap[value]; + + // Otherwise, return the default value for the enum + return default; + } + + #endregion + } +} \ No newline at end of file diff --git a/SabreTools.DatItems/Formats/Blank.cs b/SabreTools.DatItems/Formats/Blank.cs index e7bb3229..6eba0c5a 100644 --- a/SabreTools.DatItems/Formats/Blank.cs +++ b/SabreTools.DatItems/Formats/Blank.cs @@ -39,7 +39,7 @@ namespace SabreTools.DatItems.Formats blank.SetFieldValue(DatItem.MachineKey, GetMachine()); blank.SetFieldValue(DatItem.RemoveKey, GetBoolFieldValue(DatItem.RemoveKey)); blank.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); - blank.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue()); + blank.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue()); return blank; } diff --git a/SabreTools.DatItems/Formats/Chip.cs b/SabreTools.DatItems/Formats/Chip.cs index ed185849..13f58d3c 100644 --- a/SabreTools.DatItems/Formats/Chip.cs +++ b/SabreTools.DatItems/Formats/Chip.cs @@ -27,7 +27,7 @@ namespace SabreTools.DatItems.Formats if (GetBoolFieldValue(Models.Metadata.Chip.SoundOnlyKey) != null) SetFieldValue(Models.Metadata.Chip.SoundOnlyKey, GetBoolFieldValue(Models.Metadata.Chip.SoundOnlyKey).FromYesNo()); if (GetStringFieldValue(Models.Metadata.Chip.ChipTypeKey) != null) - SetFieldValue(Models.Metadata.Chip.ChipTypeKey, GetStringFieldValue(Models.Metadata.Chip.ChipTypeKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Chip.ChipTypeKey, GetStringFieldValue(Models.Metadata.Chip.ChipTypeKey).AsChipType().AsStringValue()); } #endregion diff --git a/SabreTools.DatItems/Formats/Condition.cs b/SabreTools.DatItems/Formats/Condition.cs index c24ff9a2..4e4a5842 100644 --- a/SabreTools.DatItems/Formats/Condition.cs +++ b/SabreTools.DatItems/Formats/Condition.cs @@ -25,7 +25,7 @@ namespace SabreTools.DatItems.Formats { // Process flag values if (GetStringFieldValue(Models.Metadata.Condition.RelationKey) != null) - SetFieldValue(Models.Metadata.Condition.RelationKey, GetStringFieldValue(Models.Metadata.Condition.RelationKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Condition.RelationKey, GetStringFieldValue(Models.Metadata.Condition.RelationKey).AsRelation().AsStringValue()); } #endregion diff --git a/SabreTools.DatItems/Formats/Control.cs b/SabreTools.DatItems/Formats/Control.cs index 3eec2ba3..3849dea1 100644 --- a/SabreTools.DatItems/Formats/Control.cs +++ b/SabreTools.DatItems/Formats/Control.cs @@ -41,7 +41,7 @@ namespace SabreTools.DatItems.Formats if (GetInt64FieldValue(Models.Metadata.Control.SensitivityKey) != null) SetFieldValue(Models.Metadata.Control.SensitivityKey, GetInt64FieldValue(Models.Metadata.Control.SensitivityKey).ToString()); if (GetStringFieldValue(Models.Metadata.Control.ControlTypeKey) != null) - SetFieldValue(Models.Metadata.Control.ControlTypeKey, GetStringFieldValue(Models.Metadata.Control.ControlTypeKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Control.ControlTypeKey, GetStringFieldValue(Models.Metadata.Control.ControlTypeKey).AsControlType().AsStringValue()); } #endregion diff --git a/SabreTools.DatItems/Formats/DataArea.cs b/SabreTools.DatItems/Formats/DataArea.cs index 2975dcc3..bcf29f8e 100644 --- a/SabreTools.DatItems/Formats/DataArea.cs +++ b/SabreTools.DatItems/Formats/DataArea.cs @@ -26,7 +26,7 @@ namespace SabreTools.DatItems.Formats { // Process flag values if (GetStringFieldValue(Models.Metadata.DataArea.EndiannessKey) != null) - SetFieldValue(Models.Metadata.DataArea.EndiannessKey, GetStringFieldValue(Models.Metadata.DataArea.EndiannessKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.DataArea.EndiannessKey, GetStringFieldValue(Models.Metadata.DataArea.EndiannessKey).AsEndianness().AsStringValue()); if (GetInt64FieldValue(Models.Metadata.DataArea.SizeKey) != null) SetFieldValue(Models.Metadata.DataArea.SizeKey, GetInt64FieldValue(Models.Metadata.DataArea.SizeKey).ToString()); if (GetInt64FieldValue(Models.Metadata.DataArea.WidthKey) != null) diff --git a/SabreTools.DatItems/Formats/Device.cs b/SabreTools.DatItems/Formats/Device.cs index 3ebe54dd..b1da3b03 100644 --- a/SabreTools.DatItems/Formats/Device.cs +++ b/SabreTools.DatItems/Formats/Device.cs @@ -49,7 +49,7 @@ namespace SabreTools.DatItems.Formats if (GetBoolFieldValue(Models.Metadata.Device.MandatoryKey) != null) SetFieldValue(Models.Metadata.Device.MandatoryKey, GetBoolFieldValue(Models.Metadata.Device.MandatoryKey).FromYesNo()); if (GetStringFieldValue(Models.Metadata.Device.DeviceTypeKey) != null) - SetFieldValue(Models.Metadata.Device.DeviceTypeKey, GetStringFieldValue(Models.Metadata.Device.DeviceTypeKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Device.DeviceTypeKey, GetStringFieldValue(Models.Metadata.Device.DeviceTypeKey).AsDeviceType().AsStringValue()); // Handle subitems var instance = item.Read(Models.Metadata.Device.InstanceKey); diff --git a/SabreTools.DatItems/Formats/Disk.cs b/SabreTools.DatItems/Formats/Disk.cs index 0ae5fa53..c94962aa 100644 --- a/SabreTools.DatItems/Formats/Disk.cs +++ b/SabreTools.DatItems/Formats/Disk.cs @@ -70,7 +70,7 @@ namespace SabreTools.DatItems.Formats if (GetBoolFieldValue(Models.Metadata.Disk.OptionalKey) != null) SetFieldValue(Models.Metadata.Disk.OptionalKey, GetBoolFieldValue(Models.Metadata.Disk.OptionalKey).FromYesNo()); if (GetStringFieldValue(Models.Metadata.Disk.StatusKey) != null) - SetFieldValue(Models.Metadata.Disk.StatusKey, GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Disk.StatusKey, GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus().AsStringValue()); if (GetBoolFieldValue(Models.Metadata.Disk.WritableKey) != null) SetFieldValue(Models.Metadata.Disk.WritableKey, GetBoolFieldValue(Models.Metadata.Disk.WritableKey).FromYesNo()); diff --git a/SabreTools.DatItems/Formats/Display.cs b/SabreTools.DatItems/Formats/Display.cs index 3dd11279..9b8e8741 100644 --- a/SabreTools.DatItems/Formats/Display.cs +++ b/SabreTools.DatItems/Formats/Display.cs @@ -41,7 +41,7 @@ namespace SabreTools.DatItems.Formats if (GetInt64FieldValue(Models.Metadata.Display.RotateKey) != null) SetFieldValue(Models.Metadata.Display.RotateKey, GetInt64FieldValue(Models.Metadata.Display.RotateKey).ToString()); if (GetStringFieldValue(Models.Metadata.Display.DisplayTypeKey) != null) - SetFieldValue(Models.Metadata.Display.DisplayTypeKey, GetStringFieldValue(Models.Metadata.Display.DisplayTypeKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Display.DisplayTypeKey, GetStringFieldValue(Models.Metadata.Display.DisplayTypeKey).AsDisplayType().AsStringValue()); if (GetInt64FieldValue(Models.Metadata.Display.VBEndKey) != null) SetFieldValue(Models.Metadata.Display.VBEndKey, GetInt64FieldValue(Models.Metadata.Display.VBEndKey).ToString()); if (GetInt64FieldValue(Models.Metadata.Display.VBStartKey) != null) @@ -56,7 +56,7 @@ namespace SabreTools.DatItems.Formats { SetFieldValue(Models.Metadata.Video.AspectXKey, NumberHelper.ConvertToInt64(item.ReadString(Models.Metadata.Video.AspectXKey))); SetFieldValue(Models.Metadata.Video.AspectYKey, NumberHelper.ConvertToInt64(item.ReadString(Models.Metadata.Video.AspectYKey))); - SetFieldValue(Models.Metadata.Display.DisplayTypeKey, item.ReadString(Models.Metadata.Video.ScreenKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Display.DisplayTypeKey, item.ReadString(Models.Metadata.Video.ScreenKey).AsDisplayType().AsStringValue()); SetFieldValue(Models.Metadata.Display.HeightKey, NumberHelper.ConvertToInt64(item.ReadString(Models.Metadata.Video.HeightKey))); SetFieldValue(Models.Metadata.Display.RefreshKey, NumberHelper.ConvertToDouble(item.ReadString(Models.Metadata.Video.RefreshKey))); SetFieldValue(Models.Metadata.Display.WidthKey, NumberHelper.ConvertToInt64(item.ReadString(Models.Metadata.Video.WidthKey))); @@ -81,7 +81,7 @@ namespace SabreTools.DatItems.Formats if (GetDoubleFieldValue(Models.Metadata.Video.RefreshKey) != null) SetFieldValue(Models.Metadata.Display.RefreshKey, GetDoubleFieldValue(Models.Metadata.Video.RefreshKey).ToString()); if (GetStringFieldValue(Models.Metadata.Video.ScreenKey) != null) - SetFieldValue(Models.Metadata.Display.DisplayTypeKey, GetStringFieldValue(Models.Metadata.Video.ScreenKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Display.DisplayTypeKey, GetStringFieldValue(Models.Metadata.Video.ScreenKey).AsDisplayType().AsStringValue()); if (GetInt64FieldValue(Models.Metadata.Video.WidthKey) != null) SetFieldValue(Models.Metadata.Display.WidthKey, GetInt64FieldValue(Models.Metadata.Video.WidthKey).ToString()); } diff --git a/SabreTools.DatItems/Formats/Driver.cs b/SabreTools.DatItems/Formats/Driver.cs index d5c08193..ffe63ecf 100644 --- a/SabreTools.DatItems/Formats/Driver.cs +++ b/SabreTools.DatItems/Formats/Driver.cs @@ -25,11 +25,11 @@ namespace SabreTools.DatItems.Formats { // Process flag values if (GetStringFieldValue(Models.Metadata.Driver.CocktailKey) != null) - SetFieldValue(Models.Metadata.Driver.CocktailKey, GetStringFieldValue(Models.Metadata.Driver.CocktailKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Driver.CocktailKey, GetStringFieldValue(Models.Metadata.Driver.CocktailKey).AsSupportStatus().AsStringValue()); if (GetStringFieldValue(Models.Metadata.Driver.ColorKey) != null) - SetFieldValue(Models.Metadata.Driver.ColorKey, GetStringFieldValue(Models.Metadata.Driver.ColorKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Driver.ColorKey, GetStringFieldValue(Models.Metadata.Driver.ColorKey).AsSupportStatus().AsStringValue()); if (GetStringFieldValue(Models.Metadata.Driver.EmulationKey) != null) - SetFieldValue(Models.Metadata.Driver.EmulationKey, GetStringFieldValue(Models.Metadata.Driver.EmulationKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Driver.EmulationKey, GetStringFieldValue(Models.Metadata.Driver.EmulationKey).AsSupportStatus().AsStringValue()); if (GetBoolFieldValue(Models.Metadata.Driver.IncompleteKey) != null) SetFieldValue(Models.Metadata.Driver.IncompleteKey, GetBoolFieldValue(Models.Metadata.Driver.IncompleteKey).FromYesNo()); if (GetBoolFieldValue(Models.Metadata.Driver.NoSoundHardwareKey) != null) @@ -39,11 +39,11 @@ namespace SabreTools.DatItems.Formats if (GetBoolFieldValue(Models.Metadata.Driver.RequiresArtworkKey) != null) SetFieldValue(Models.Metadata.Driver.RequiresArtworkKey, GetBoolFieldValue(Models.Metadata.Driver.RequiresArtworkKey).FromYesNo()); if (GetStringFieldValue(Models.Metadata.Driver.SaveStateKey) != null) - SetFieldValue(Models.Metadata.Driver.SaveStateKey, GetStringFieldValue(Models.Metadata.Driver.SaveStateKey).AsEnumValue().AsStringValue(useSecond: true)); + SetFieldValue(Models.Metadata.Driver.SaveStateKey, GetStringFieldValue(Models.Metadata.Driver.SaveStateKey).AsSupported().AsStringValue(useSecond: true)); if (GetStringFieldValue(Models.Metadata.Driver.SoundKey) != null) - SetFieldValue(Models.Metadata.Driver.SoundKey, GetStringFieldValue(Models.Metadata.Driver.SoundKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Driver.SoundKey, GetStringFieldValue(Models.Metadata.Driver.SoundKey).AsSupportStatus().AsStringValue()); if (GetStringFieldValue(Models.Metadata.Driver.StatusKey) != null) - SetFieldValue(Models.Metadata.Driver.StatusKey, GetStringFieldValue(Models.Metadata.Driver.StatusKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Driver.StatusKey, GetStringFieldValue(Models.Metadata.Driver.StatusKey).AsSupportStatus().AsStringValue()); if (GetBoolFieldValue(Models.Metadata.Driver.UnofficialKey) != null) SetFieldValue(Models.Metadata.Driver.UnofficialKey, GetBoolFieldValue(Models.Metadata.Driver.UnofficialKey).FromYesNo()); } diff --git a/SabreTools.DatItems/Formats/Feature.cs b/SabreTools.DatItems/Formats/Feature.cs index 938fb006..5713ecbe 100644 --- a/SabreTools.DatItems/Formats/Feature.cs +++ b/SabreTools.DatItems/Formats/Feature.cs @@ -25,11 +25,11 @@ namespace SabreTools.DatItems.Formats { // Process flag values if (GetStringFieldValue(Models.Metadata.Feature.OverallKey) != null) - SetFieldValue(Models.Metadata.Feature.OverallKey, GetStringFieldValue(Models.Metadata.Feature.OverallKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Feature.OverallKey, GetStringFieldValue(Models.Metadata.Feature.OverallKey).AsFeatureStatus().AsStringValue()); if (GetStringFieldValue(Models.Metadata.Feature.StatusKey) != null) - SetFieldValue(Models.Metadata.Feature.StatusKey, GetStringFieldValue(Models.Metadata.Feature.StatusKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Feature.StatusKey, GetStringFieldValue(Models.Metadata.Feature.StatusKey).AsFeatureStatus().AsStringValue()); if (GetStringFieldValue(Models.Metadata.Feature.FeatureTypeKey) != null) - SetFieldValue(Models.Metadata.Feature.FeatureTypeKey, GetStringFieldValue(Models.Metadata.Feature.FeatureTypeKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Feature.FeatureTypeKey, GetStringFieldValue(Models.Metadata.Feature.FeatureTypeKey).AsFeatureType().AsStringValue()); } #endregion diff --git a/SabreTools.DatItems/Formats/PartFeature.cs b/SabreTools.DatItems/Formats/PartFeature.cs index dd8ce967..3e58090e 100644 --- a/SabreTools.DatItems/Formats/PartFeature.cs +++ b/SabreTools.DatItems/Formats/PartFeature.cs @@ -34,11 +34,11 @@ namespace SabreTools.DatItems.Formats { // Process flag values if (GetStringFieldValue(Models.Metadata.Feature.OverallKey) != null) - SetFieldValue(Models.Metadata.Feature.OverallKey, GetStringFieldValue(Models.Metadata.Feature.OverallKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Feature.OverallKey, GetStringFieldValue(Models.Metadata.Feature.OverallKey).AsFeatureStatus().AsStringValue()); if (GetStringFieldValue(Models.Metadata.Feature.StatusKey) != null) - SetFieldValue(Models.Metadata.Feature.StatusKey, GetStringFieldValue(Models.Metadata.Feature.StatusKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Feature.StatusKey, GetStringFieldValue(Models.Metadata.Feature.StatusKey).AsFeatureStatus().AsStringValue()); if (GetStringFieldValue(Models.Metadata.Feature.FeatureTypeKey) != null) - SetFieldValue(Models.Metadata.Feature.FeatureTypeKey, GetStringFieldValue(Models.Metadata.Feature.FeatureTypeKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Feature.FeatureTypeKey, GetStringFieldValue(Models.Metadata.Feature.FeatureTypeKey).AsFeatureType().AsStringValue()); } #endregion diff --git a/SabreTools.DatItems/Formats/ReleaseDetails.cs b/SabreTools.DatItems/Formats/ReleaseDetails.cs index c9f27179..4bfc5157 100644 --- a/SabreTools.DatItems/Formats/ReleaseDetails.cs +++ b/SabreTools.DatItems/Formats/ReleaseDetails.cs @@ -148,7 +148,7 @@ namespace SabreTools.DatItems.Formats releaseDetails.SetFieldValue(DatItem.MachineKey, GetMachine()); releaseDetails.SetFieldValue(DatItem.RemoveKey, GetBoolFieldValue(DatItem.RemoveKey)); releaseDetails.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); - releaseDetails.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue()); + releaseDetails.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue()); return releaseDetails; } diff --git a/SabreTools.DatItems/Formats/Rom.cs b/SabreTools.DatItems/Formats/Rom.cs index 9b42dd5a..53615eb2 100644 --- a/SabreTools.DatItems/Formats/Rom.cs +++ b/SabreTools.DatItems/Formats/Rom.cs @@ -35,7 +35,7 @@ namespace SabreTools.DatItems.Formats { get { - var status = GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue(); + var status = GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus(); return status != ItemStatus.NULL && status != ItemStatus.None; } } @@ -60,7 +60,7 @@ namespace SabreTools.DatItems.Formats && (!string.IsNullOrEmpty(dataArea.GetName()) || dataArea.GetInt64FieldValue(Models.Metadata.DataArea.SizeKey) != null || dataArea.GetInt64FieldValue(Models.Metadata.DataArea.WidthKey) != null - || dataArea.GetStringFieldValue(Models.Metadata.DataArea.EndiannessKey).AsEnumValue() != Endianness.NULL); + || dataArea.GetStringFieldValue(Models.Metadata.DataArea.EndiannessKey).AsEndianness() != Endianness.NULL); } } @@ -96,9 +96,9 @@ namespace SabreTools.DatItems.Formats if (GetBoolFieldValue(Models.Metadata.Rom.InvertedKey) != null) SetFieldValue(Models.Metadata.Rom.InvertedKey, GetBoolFieldValue(Models.Metadata.Rom.InvertedKey).FromYesNo()); if (GetStringFieldValue(Models.Metadata.Rom.LoadFlagKey) != null) - SetFieldValue(Models.Metadata.Rom.LoadFlagKey, GetStringFieldValue(Models.Metadata.Rom.LoadFlagKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Rom.LoadFlagKey, GetStringFieldValue(Models.Metadata.Rom.LoadFlagKey).AsLoadFlag().AsStringValue()); if (GetStringFieldValue(Models.Metadata.Rom.OpenMSXMediaType) != null) - SetFieldValue(Models.Metadata.Rom.OpenMSXMediaType, GetStringFieldValue(Models.Metadata.Rom.OpenMSXMediaType).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Rom.OpenMSXMediaType, GetStringFieldValue(Models.Metadata.Rom.OpenMSXMediaType).AsOpenMSXSubType().AsStringValue()); if (GetBoolFieldValue(Models.Metadata.Rom.MIAKey) != null) SetFieldValue(Models.Metadata.Rom.MIAKey, GetBoolFieldValue(Models.Metadata.Rom.MIAKey).FromYesNo()); if (GetBoolFieldValue(Models.Metadata.Rom.OptionalKey) != null) @@ -106,7 +106,7 @@ namespace SabreTools.DatItems.Formats if (GetBoolFieldValue(Models.Metadata.Rom.SoundOnlyKey) != null) SetFieldValue(Models.Metadata.Rom.SoundOnlyKey, GetBoolFieldValue(Models.Metadata.Rom.SoundOnlyKey).FromYesNo()); if (GetStringFieldValue(Models.Metadata.Rom.StatusKey) != null) - SetFieldValue(Models.Metadata.Rom.StatusKey, GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Rom.StatusKey, GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus().AsStringValue()); // Process hash values if (GetInt64FieldValue(Models.Metadata.Rom.SizeKey) != null) diff --git a/SabreTools.DatItems/Formats/Serials.cs b/SabreTools.DatItems/Formats/Serials.cs index bd6f1554..3d176706 100644 --- a/SabreTools.DatItems/Formats/Serials.cs +++ b/SabreTools.DatItems/Formats/Serials.cs @@ -140,7 +140,7 @@ namespace SabreTools.DatItems.Formats serials.SetFieldValue(DatItem.MachineKey, GetMachine()); serials.SetFieldValue(DatItem.RemoveKey, GetBoolFieldValue(DatItem.RemoveKey)); serials.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); - serials.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue()); + serials.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue()); return serials; } diff --git a/SabreTools.DatItems/Formats/SoftwareList.cs b/SabreTools.DatItems/Formats/SoftwareList.cs index 2acb331d..2ad28c3c 100644 --- a/SabreTools.DatItems/Formats/SoftwareList.cs +++ b/SabreTools.DatItems/Formats/SoftwareList.cs @@ -25,7 +25,7 @@ namespace SabreTools.DatItems.Formats { // Process flag values if (GetStringFieldValue(Models.Metadata.SoftwareList.StatusKey) != null) - SetFieldValue(Models.Metadata.SoftwareList.StatusKey, GetStringFieldValue(Models.Metadata.SoftwareList.StatusKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.SoftwareList.StatusKey, GetStringFieldValue(Models.Metadata.SoftwareList.StatusKey).AsSoftwareListStatus().AsStringValue()); // Handle subitems // TODO: Handle the Software subitem diff --git a/SabreTools.DatItems/Formats/SourceDetails.cs b/SabreTools.DatItems/Formats/SourceDetails.cs index 32dedbf1..d98309e9 100644 --- a/SabreTools.DatItems/Formats/SourceDetails.cs +++ b/SabreTools.DatItems/Formats/SourceDetails.cs @@ -183,7 +183,7 @@ namespace SabreTools.DatItems.Formats sourceDetails.SetFieldValue(DatItem.MachineKey, GetMachine()); sourceDetails.SetFieldValue(DatItem.RemoveKey, GetBoolFieldValue(DatItem.RemoveKey)); sourceDetails.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); - sourceDetails.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue()); + sourceDetails.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue()); return sourceDetails; } diff --git a/SabreTools.DatItems/Machine.cs b/SabreTools.DatItems/Machine.cs index 54182b42..2c8dbd38 100644 --- a/SabreTools.DatItems/Machine.cs +++ b/SabreTools.DatItems/Machine.cs @@ -47,7 +47,7 @@ namespace SabreTools.DatItems if (GetBoolFieldValue(Models.Metadata.Machine.IsMechanicalKey) != null) SetFieldValue(Models.Metadata.Machine.IsMechanicalKey, GetBoolFieldValue(Models.Metadata.Machine.IsMechanicalKey).FromYesNo()); if (GetStringFieldValue(Models.Metadata.Machine.SupportedKey) != null) - SetFieldValue(Models.Metadata.Machine.SupportedKey, GetStringFieldValue(Models.Metadata.Machine.SupportedKey).AsEnumValue().AsStringValue()); + SetFieldValue(Models.Metadata.Machine.SupportedKey, GetStringFieldValue(Models.Metadata.Machine.SupportedKey).AsSupported().AsStringValue()); // Handle Trurip object, if it exists if (machine.ContainsKey(Models.Metadata.Machine.TruripKey)) diff --git a/SabreTools.DatTools.Test/DatItemToolTests.cs b/SabreTools.DatTools.Test/DatItemToolTests.cs index cf9dddad..19eb0d43 100644 --- a/SabreTools.DatTools.Test/DatItemToolTests.cs +++ b/SabreTools.DatTools.Test/DatItemToolTests.cs @@ -48,7 +48,7 @@ namespace SabreTools.DatTools.Test { var baseFile = CreateBaseFile(fileType); var actual = DatItemTool.CreateDatItem(baseFile, asFile); - Assert.Equal(expected, actual?.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue()); + Assert.Equal(expected, actual?.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType()); } #endregion diff --git a/SabreTools.DatTools/DatFromDir.cs b/SabreTools.DatTools/DatFromDir.cs index e7c7c9eb..243cba99 100644 --- a/SabreTools.DatTools/DatFromDir.cs +++ b/SabreTools.DatTools/DatFromDir.cs @@ -419,7 +419,7 @@ namespace SabreTools.DatTools { // If we didn't get an accepted parsed type somehow, cancel out List parsed = [ItemType.Disk, ItemType.File, ItemType.Media, ItemType.Rom]; - if (!parsed.Contains(datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue())) + if (!parsed.Contains(datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType())) return; try diff --git a/SabreTools.DatTools/MergeSplit.cs b/SabreTools.DatTools/MergeSplit.cs index e7a70dee..01f981ec 100644 --- a/SabreTools.DatTools/MergeSplit.cs +++ b/SabreTools.DatTools/MergeSplit.cs @@ -49,7 +49,7 @@ namespace SabreTools.DatTools { // If we are using tags from the DAT, set the proper input for split type unless overridden if (useTags && SplitType == MergingFlag.None) - SplitType = datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForceMergingKey).AsEnumValue(); + SplitType = datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForceMergingKey).AsMergingFlag(); // Run internal splitting switch (SplitType) diff --git a/SabreTools.DatTools/Rebuilder.cs b/SabreTools.DatTools/Rebuilder.cs index 24730d6e..584795e4 100644 --- a/SabreTools.DatTools/Rebuilder.cs +++ b/SabreTools.DatTools/Rebuilder.cs @@ -63,7 +63,7 @@ namespace SabreTools.DatTools outDir = outDir.Ensure(create: true); // Now we want to get forcepack flag if it's not overridden - PackingFlag forcePacking = datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue(); + PackingFlag forcePacking = datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsPackingFlag(); if (outputFormat == OutputFormat.Folder && forcePacking != PackingFlag.None) outputFormat = GetOutputFormat(forcePacking); @@ -155,11 +155,11 @@ namespace SabreTools.DatTools // Otherwise, we rebuild that file to all locations that we need to bool usedInternally; - if (items[0].GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue() == ItemType.Disk) + if (items[0].GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType() == ItemType.Disk) usedInternally = RebuildIndividualFile(datFile, fileinfo.ConvertToDisk(), foundpath, outDir, date, inverse, outputFormat, isZip: false); - else if (items[0].GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue() == ItemType.File) + else if (items[0].GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType() == ItemType.File) usedInternally = RebuildIndividualFile(datFile, fileinfo.ConvertToFile(), foundpath, outDir, date, inverse, outputFormat, isZip: false); - else if (items[0].GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue() == ItemType.Media) + else if (items[0].GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType() == ItemType.Media) usedInternally = RebuildIndividualFile(datFile, fileinfo.ConvertToMedia(), foundpath, outDir, date, inverse, outputFormat, isZip: false); else usedInternally = RebuildIndividualFile(datFile, fileinfo.ConvertToRom(), foundpath, outDir, date, inverse, outputFormat, isZip: false); @@ -217,7 +217,7 @@ namespace SabreTools.DatTools } // Now we want to get forcepack flag if it's not overridden - PackingFlag forcePacking = datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue(); + PackingFlag forcePacking = datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsPackingFlag(); if (outputFormat == OutputFormat.Folder && forcePacking != PackingFlag.None) outputFormat = GetOutputFormat(forcePacking); @@ -442,12 +442,12 @@ namespace SabreTools.DatTools fileStream.Seek(0, SeekOrigin.Begin); } - _staticLogger.User($"{(inverse ? "No matches" : $"{dupes.Count} Matches")} found for '{Path.GetFileName(datItem.GetName() ?? datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue())}', rebuilding accordingly..."); + _staticLogger.User($"{(inverse ? "No matches" : $"{dupes.Count} Matches")} found for '{Path.GetFileName(datItem.GetName() ?? datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue())}', rebuilding accordingly..."); rebuilt = true; // Special case for partial packing mode bool shouldCheck = false; - if (outputFormat == OutputFormat.Folder && datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsEnumValue() == PackingFlag.Partial) + if (outputFormat == OutputFormat.Folder && datFile.Header.GetStringFieldValue(Models.Metadata.Header.ForcePackingKey).AsPackingFlag() == PackingFlag.Partial) { shouldCheck = true; datFile.BucketBy(ItemKey.Machine, lower: false); @@ -505,7 +505,7 @@ namespace SabreTools.DatTools if (ShouldRebuild(datFile, headerless, transformStream, false, out dupes)) //if (ShouldRebuildDB(datFile, headerless, transformStream, false, out dupes)) { - _staticLogger.User($"Headerless matches found for '{Path.GetFileName(datItem.GetName() ?? datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue())}', rebuilding accordingly..."); + _staticLogger.User($"Headerless matches found for '{Path.GetFileName(datItem.GetName() ?? datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue())}', rebuilding accordingly..."); rebuilt = true; // Now loop through the list and rebuild accordingly @@ -773,7 +773,7 @@ namespace SabreTools.DatTools try { - ItemType itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue(); + ItemType itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType(); (stream, _) = archive.GetEntryStream(datItem.GetName() ?? itemType.AsStringValue() ?? string.Empty); } catch diff --git a/SabreTools.DatTools/Remover.cs b/SabreTools.DatTools/Remover.cs index 11839aaa..acc64216 100644 --- a/SabreTools.DatTools/Remover.cs +++ b/SabreTools.DatTools/Remover.cs @@ -244,7 +244,7 @@ namespace SabreTools.DatTools return; // If there are no field names for this type or generic, return - string? itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue(); + string? itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue(); if (itemType == null || (!ItemFieldNames.ContainsKey(itemType) && !ItemFieldNames.ContainsKey("item"))) return; diff --git a/SabreTools.DatTools/Replacer.cs b/SabreTools.DatTools/Replacer.cs index 0f7ae11b..01f255d6 100644 --- a/SabreTools.DatTools/Replacer.cs +++ b/SabreTools.DatTools/Replacer.cs @@ -328,7 +328,7 @@ namespace SabreTools.DatTools return; // If there are no field names for this type or generic, return - string? itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue(); + string? itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue(); if (itemType == null || (!itemFieldNames.ContainsKey(itemType) && !itemFieldNames.ContainsKey("item"))) return; diff --git a/SabreTools.DatTools/Setter.cs b/SabreTools.DatTools/Setter.cs index 2d8d8f07..4da00e00 100644 --- a/SabreTools.DatTools/Setter.cs +++ b/SabreTools.DatTools/Setter.cs @@ -180,7 +180,7 @@ namespace SabreTools.DatTools return; // If there are no field names for this type or generic, return - string? itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue(); + string? itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue(); if (itemType == null || (!ItemFieldMappings.Keys.Any(kvp => kvp.ItemName == itemType) && !ItemFieldMappings.Keys.Any(kvp => kvp.ItemName == "item"))) return; diff --git a/SabreTools.DatTools/Splitter.cs b/SabreTools.DatTools/Splitter.cs index 6e4b090c..14df2328 100644 --- a/SabreTools.DatTools/Splitter.cs +++ b/SabreTools.DatTools/Splitter.cs @@ -292,7 +292,7 @@ namespace SabreTools.DatTools switch (item) { case Disk disk: - if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Nodump) + if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Nodump) fieldDats[Models.Metadata.Disk.StatusKey].AddItem(item, statsOnly: false); else if (!string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))) fieldDats[Models.Metadata.Disk.SHA1Key].AddItem(item, statsOnly: false); @@ -316,7 +316,7 @@ namespace SabreTools.DatTools break; case Rom rom: - if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Nodump) + if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Nodump) fieldDats[Models.Metadata.Rom.StatusKey].AddItem(item, statsOnly: false); else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key))) fieldDats[Models.Metadata.Rom.SHA512Key].AddItem(item, statsOnly: false); @@ -414,7 +414,7 @@ namespace SabreTools.DatTools switch (item.Value) { case Disk disk: - if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Nodump) + if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Nodump) fieldDats[Models.Metadata.Disk.StatusKey].AddItemDB(item.Value, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false); else if (!string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))) fieldDats[Models.Metadata.Disk.SHA1Key].AddItemDB(item.Value, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false); @@ -438,7 +438,7 @@ namespace SabreTools.DatTools break; case Rom rom: - if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Nodump) + if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Nodump) fieldDats[Models.Metadata.Rom.StatusKey].AddItemDB(item.Value, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false); else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key))) fieldDats[Models.Metadata.Rom.SHA512Key].AddItemDB(item.Value, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false); @@ -951,7 +951,7 @@ namespace SabreTools.DatTools foreach (DatItem item in items) { - if (item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue() == itemType) + if (item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType() == itemType) indexDat.AddItem(item, statsOnly: false); } #if NET40_OR_GREATER || NETCOREAPP @@ -1006,7 +1006,7 @@ namespace SabreTools.DatTools long machineIndex = datFile.GetMachineForItemDB(item.Key).Key; long sourceIndex = datFile.GetSourceForItemDB(item.Key).Key; - if (item.Value.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue() == itemType) + if (item.Value.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsItemType() == itemType) indexDat.AddItemDB(item.Value, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false); #if NET40_OR_GREATER || NETCOREAPP }); diff --git a/SabreTools/Features/BaseFeature.cs b/SabreTools/Features/BaseFeature.cs index d4ef6352..0b3ca3c8 100644 --- a/SabreTools/Features/BaseFeature.cs +++ b/SabreTools/Features/BaseFeature.cs @@ -1374,9 +1374,9 @@ Some special strings that can be used: datHeader.SetFieldValue(Models.Metadata.Header.DescriptionKey, GetString(features, DescriptionStringValue)); datHeader.SetFieldValue(Models.Metadata.Header.EmailKey, GetString(features, EmailStringValue)); datHeader.SetFieldValue(DatHeader.FileNameKey, GetString(features, FilenameStringValue)); - datHeader.SetFieldValue(Models.Metadata.Header.ForceMergingKey, GetString(features, ForceMergingStringValue).AsEnumValue()); - datHeader.SetFieldValue(Models.Metadata.Header.ForceNodumpKey, GetString(features, ForceNodumpStringValue).AsEnumValue()); - datHeader.SetFieldValue(Models.Metadata.Header.ForceNodumpKey, GetString(features, ForcePackingStringValue).AsEnumValue()); + datHeader.SetFieldValue(Models.Metadata.Header.ForceMergingKey, GetString(features, ForceMergingStringValue).AsMergingFlag()); + datHeader.SetFieldValue(Models.Metadata.Header.ForceNodumpKey, GetString(features, ForceNodumpStringValue).AsNodumpFlag()); + datHeader.SetFieldValue(Models.Metadata.Header.ForceNodumpKey, GetString(features, ForcePackingStringValue).AsPackingFlag()); datHeader.SetFieldValue(Models.Metadata.Header.HeaderKey, GetString(features, HeaderStringValue)); datHeader.SetFieldValue(Models.Metadata.Header.HomepageKey, GetString(features, HomepageStringValue)); datHeader.SetFieldValue(Models.Metadata.Header.NameKey, GetString(features, NameStringValue)); diff --git a/SabreTools/Features/Batch.cs b/SabreTools/Features/Batch.cs index 46f38109..79f5c8af 100644 --- a/SabreTools/Features/Batch.cs +++ b/SabreTools/Features/Batch.cs @@ -557,7 +557,7 @@ Reset the internal state: reset();"; } // Read in the individual arguments - MergingFlag mergingFlag = Arguments[0].AsEnumValue(); + MergingFlag mergingFlag = Arguments[0].AsMergingFlag(); // If we had an invalid input, log and continue if (mergingFlag == MergingFlag.None) @@ -573,7 +573,7 @@ Reset the internal state: reset();"; public override void Process(BatchState batchState) { // Read in the individual arguments - MergingFlag mergingFlag = Arguments[0].AsEnumValue(); + MergingFlag mergingFlag = Arguments[0].AsMergingFlag(); // Apply the merging flag MergeSplit splitter = new() { SplitType = mergingFlag };