diff --git a/SabreTools.DatFiles/DatFile.FromMetadata.cs b/SabreTools.DatFiles/DatFile.FromMetadata.cs index 0265b9eb..bf867c44 100644 --- a/SabreTools.DatFiles/DatFile.FromMetadata.cs +++ b/SabreTools.DatFiles/DatFile.FromMetadata.cs @@ -802,6 +802,13 @@ namespace SabreTools.DatFiles var datItem = new DatItems.Formats.Disk(item); datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); + + // Process hash values + if (datItem.GetStringFieldValue(Models.Metadata.Disk.MD5Key) != null) + datItem.SetFieldValue(Models.Metadata.Disk.MD5Key, TextHelper.NormalizeMD5(datItem.GetStringFieldValue(Models.Metadata.Disk.MD5Key))); + if (datItem.GetStringFieldValue(Models.Metadata.Disk.SHA1Key) != null) + datItem.SetFieldValue(Models.Metadata.Disk.SHA1Key, TextHelper.NormalizeSHA1(datItem.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))); + ParseAddHelper(datItem, statsOnly); } } @@ -917,6 +924,23 @@ namespace SabreTools.DatFiles } item.CopyMachineInformation(machine); + + // Process hash values + if (item.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) != null) + item.SetFieldValue(Models.Metadata.Rom.SizeKey, item.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString()); + if (item.GetStringFieldValue(Models.Metadata.Rom.CRCKey) != null) + item.SetFieldValue(Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(item.GetStringFieldValue(Models.Metadata.Rom.CRCKey))); + if (item.GetStringFieldValue(Models.Metadata.Rom.MD5Key) != null) + item.SetFieldValue(Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(item.GetStringFieldValue(Models.Metadata.Rom.MD5Key))); + if (item.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) != null) + item.SetFieldValue(Models.Metadata.Rom.SHA1Key, TextHelper.NormalizeSHA1(item.GetStringFieldValue(Models.Metadata.Rom.SHA1Key))); + if (item.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) != null) + item.SetFieldValue(Models.Metadata.Rom.SHA256Key, TextHelper.NormalizeSHA256(item.GetStringFieldValue(Models.Metadata.Rom.SHA256Key))); + if (item.GetStringFieldValue(Models.Metadata.Rom.SHA384Key) != null) + item.SetFieldValue(Models.Metadata.Rom.SHA384Key, TextHelper.NormalizeSHA384(item.GetStringFieldValue(Models.Metadata.Rom.SHA384Key))); + if (item.GetStringFieldValue(Models.Metadata.Rom.SHA512Key) != null) + item.SetFieldValue(Models.Metadata.Rom.SHA512Key, TextHelper.NormalizeSHA512(item.GetStringFieldValue(Models.Metadata.Rom.SHA512Key))); + ParseAddHelper(item, statsOnly); } } @@ -1028,6 +1052,15 @@ namespace SabreTools.DatFiles var datItem = new DatItems.Formats.Media(item); datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); + + // Process hash values + if (datItem.GetStringFieldValue(Models.Metadata.Media.MD5Key) != null) + datItem.SetFieldValue(Models.Metadata.Media.MD5Key, TextHelper.NormalizeMD5(datItem.GetStringFieldValue(Models.Metadata.Media.MD5Key))); + if (datItem.GetStringFieldValue(Models.Metadata.Media.SHA1Key) != null) + datItem.SetFieldValue(Models.Metadata.Media.SHA1Key, TextHelper.NormalizeSHA1(datItem.GetStringFieldValue(Models.Metadata.Media.SHA1Key))); + if (datItem.GetStringFieldValue(Models.Metadata.Media.SHA256Key) != null) + datItem.SetFieldValue(Models.Metadata.Media.SHA256Key, TextHelper.NormalizeSHA256(datItem.GetStringFieldValue(Models.Metadata.Media.SHA256Key))); + ParseAddHelper(datItem, statsOnly); } } @@ -1069,6 +1102,23 @@ namespace SabreTools.DatFiles romItem.SetFieldValue(DatItems.Formats.Rom.PartKey, partItem); romItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); romItem.CopyMachineInformation(machine); + + // Process hash values + if (romItem.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) != null) + romItem.SetFieldValue(Models.Metadata.Rom.SizeKey, romItem.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString()); + if (romItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey) != null) + romItem.SetFieldValue(Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(romItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey))); + if (romItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key) != null) + romItem.SetFieldValue(Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(romItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key))); + if (romItem.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) != null) + romItem.SetFieldValue(Models.Metadata.Rom.SHA1Key, TextHelper.NormalizeSHA1(romItem.GetStringFieldValue(Models.Metadata.Rom.SHA1Key))); + if (romItem.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) != null) + romItem.SetFieldValue(Models.Metadata.Rom.SHA256Key, TextHelper.NormalizeSHA256(romItem.GetStringFieldValue(Models.Metadata.Rom.SHA256Key))); + if (romItem.GetStringFieldValue(Models.Metadata.Rom.SHA384Key) != null) + romItem.SetFieldValue(Models.Metadata.Rom.SHA384Key, TextHelper.NormalizeSHA384(romItem.GetStringFieldValue(Models.Metadata.Rom.SHA384Key))); + if (romItem.GetStringFieldValue(Models.Metadata.Rom.SHA512Key) != null) + romItem.SetFieldValue(Models.Metadata.Rom.SHA512Key, TextHelper.NormalizeSHA512(romItem.GetStringFieldValue(Models.Metadata.Rom.SHA512Key))); + ParseAddHelper(romItem, statsOnly); } } @@ -1091,6 +1141,13 @@ namespace SabreTools.DatFiles diskItem.SetFieldValue(DatItems.Formats.Disk.PartKey, partItem); diskItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); diskItem.CopyMachineInformation(machine); + + // Process hash values + if (diskItem.GetStringFieldValue(Models.Metadata.Disk.MD5Key) != null) + diskItem.SetFieldValue(Models.Metadata.Disk.MD5Key, TextHelper.NormalizeMD5(diskItem.GetStringFieldValue(Models.Metadata.Disk.MD5Key))); + if (diskItem.GetStringFieldValue(Models.Metadata.Disk.SHA1Key) != null) + diskItem.SetFieldValue(Models.Metadata.Disk.SHA1Key, TextHelper.NormalizeSHA1(diskItem.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))); + ParseAddHelper(diskItem, statsOnly); } } @@ -1231,6 +1288,23 @@ namespace SabreTools.DatFiles var datItem = new DatItems.Formats.Rom(item); datItem.SetFieldValue(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.CopyMachineInformation(machine); + + // Process hash values + if (datItem.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) != null) + datItem.SetFieldValue(Models.Metadata.Rom.SizeKey, datItem.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString()); + if (datItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey) != null) + datItem.SetFieldValue(Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(datItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey))); + if (datItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key) != null) + datItem.SetFieldValue(Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(datItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key))); + if (datItem.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) != null) + datItem.SetFieldValue(Models.Metadata.Rom.SHA1Key, TextHelper.NormalizeSHA1(datItem.GetStringFieldValue(Models.Metadata.Rom.SHA1Key))); + if (datItem.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) != null) + datItem.SetFieldValue(Models.Metadata.Rom.SHA256Key, TextHelper.NormalizeSHA256(datItem.GetStringFieldValue(Models.Metadata.Rom.SHA256Key))); + if (datItem.GetStringFieldValue(Models.Metadata.Rom.SHA384Key) != null) + datItem.SetFieldValue(Models.Metadata.Rom.SHA384Key, TextHelper.NormalizeSHA384(datItem.GetStringFieldValue(Models.Metadata.Rom.SHA384Key))); + if (datItem.GetStringFieldValue(Models.Metadata.Rom.SHA512Key) != null) + datItem.SetFieldValue(Models.Metadata.Rom.SHA512Key, TextHelper.NormalizeSHA512(datItem.GetStringFieldValue(Models.Metadata.Rom.SHA512Key))); + ParseAddHelper(datItem, statsOnly); } } diff --git a/SabreTools.DatFiles/DatFile.cs b/SabreTools.DatFiles/DatFile.cs index 8611ff35..f8006220 100644 --- a/SabreTools.DatFiles/DatFile.cs +++ b/SabreTools.DatFiles/DatFile.cs @@ -221,12 +221,12 @@ namespace SabreTools.DatFiles if (item is Disk disk) { // If the file has aboslutely no hashes, skip and log - if (disk.GetFieldValue(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump + if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() != ItemStatus.Nodump && string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key)) && string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))) { logger.Verbose($"Incomplete entry for '{disk.GetName()}' will be output as nodump"); - disk.SetFieldValue(Models.Metadata.Disk.StatusKey, ItemStatus.Nodump); + disk.SetFieldValue(Models.Metadata.Disk.StatusKey, ItemStatus.Nodump.AsStringValue()); } item = disk; @@ -271,14 +271,14 @@ namespace SabreTools.DatFiles } // If the file has no size and it's not the above case, skip and log - else if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump && (size == 0 || size == null)) + else if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() != 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); + 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.GetFieldValue(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump + else if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() != ItemStatus.Nodump && size != null && size > 0 && !rom.HasHashes()) { @@ -369,7 +369,7 @@ namespace SabreTools.DatFiles // Initialize strings string fix, game = item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, - name = item.GetName() ?? item.GetFieldValue(Models.Metadata.DatItem.TypeKey).ToString(), + name = item.GetName() ?? item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue() ?? string.Empty, crc = string.Empty, md5 = string.Empty, sha1 = string.Empty, @@ -584,7 +584,7 @@ namespace SabreTools.DatFiles foreach (DatItem datItem in datItems) { - if (GetSupportedTypes().Contains(datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey))) + if (GetSupportedTypes().Contains(datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue())) return true; } @@ -636,7 +636,7 @@ namespace SabreTools.DatFiles } // If we have an item type not in the list of supported values - if (!GetSupportedTypes().Contains(datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey))) + if (!GetSupportedTypes().Contains(datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue())) { string itemString = JsonConvert.SerializeObject(datItem, Formatting.None); logger?.Verbose($"Item '{itemString}' was skipped because it was not supported in {Header?.GetFieldValue(DatHeader.DatFormatKey)}"); diff --git a/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs b/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs index 7e273a4a..750a6c99 100644 --- a/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs +++ b/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Linq; using SabreTools.Core; -using SabreTools.Core.Tools; using SabreTools.DatItems; using SabreTools.DatItems.Formats; @@ -140,8 +138,6 @@ namespace SabreTools.DatFiles.Formats { logger.User($"Writing to '{outfile}'..."); - //var metadataFile = CreateMetadataFile(ignoreblanks); - // Serialize the input file var metadata = ConvertMetadata(ignoreblanks); var metadataFile = new Serialization.CrossModel.ClrMamePro().Deserialize(metadata); @@ -160,426 +156,5 @@ namespace SabreTools.DatFiles.Formats logger.User($"'{outfile}' written!{Environment.NewLine}"); return true; } - - #region Converters - - /// - /// Create a MetadataFile from the current internal information - /// - /// True if blank roms should be skipped on output, false otherwise - private Models.ClrMamePro.MetadataFile CreateMetadataFile(bool ignoreblanks) - { - var metadataFile = new Models.ClrMamePro.MetadataFile - { - ClrMamePro = CreateClrMamePro(), - Game = CreateGames(ignoreblanks) - }; - return metadataFile; - } - - /// - /// Create a ClrMamePro from the current internal information - /// - private Models.ClrMamePro.ClrMamePro? CreateClrMamePro() - { - // If we don't have a header, we can't do anything - if (this.Header == null) - return null; - - var clrMamePro = new Models.ClrMamePro.ClrMamePro - { - Name = Header.GetStringFieldValue(Models.Metadata.Header.NameKey), - Description = Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey), - RootDir = Header.GetStringFieldValue(Models.Metadata.Header.RootDirKey), - Category = Header.GetStringFieldValue(Models.Metadata.Header.CategoryKey), - Version = Header.GetStringFieldValue(Models.Metadata.Header.VersionKey), - Date = Header.GetStringFieldValue(Models.Metadata.Header.DateKey), - Author = Header.GetStringFieldValue(Models.Metadata.Header.AuthorKey), - Homepage = Header.GetStringFieldValue(Models.Metadata.Header.HomepageKey), - Url = Header.GetStringFieldValue(Models.Metadata.Header.UrlKey), - Comment = Header.GetStringFieldValue(Models.Metadata.Header.CommentKey), - Header = Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey), - Type = Header.GetStringFieldValue(Models.Metadata.Header.TypeKey), - }; - - if (Header.GetFieldValue(Models.Metadata.Header.ForceMergingKey) != MergingFlag.None) - clrMamePro.ForceMerging = Header.GetFieldValue(Models.Metadata.Header.ForceMergingKey).AsStringValue(useSecond: false); - if (Header.GetFieldValue(Models.Metadata.Header.ForcePackingKey) != PackingFlag.None) - clrMamePro.ForcePacking = Header.GetFieldValue(Models.Metadata.Header.ForcePackingKey).AsStringValue(useSecond: false); - - return clrMamePro; - } - - /// - /// Create an array of GameBase from the current internal information - /// - /// True if blank roms should be skipped on output, false otherwise - private Models.ClrMamePro.GameBase[]? CreateGames(bool ignoreblanks) - { - // If we don't have items, we can't do anything - if (this.Items == null || !this.Items.Any()) - return null; - - // Create a list of hold the games - var games = new List(); - - // Loop through the sorted items and create games for them - foreach (string key in Items.SortedKeys) - { - var items = Items.FilteredItems(key); - if (items == null || !items.Any()) - continue; - - // Get the first item for game information - var machine = items[0].GetFieldValue(DatItem.MachineKey); - - // We normalize to all "game" - var game = new Models.ClrMamePro.Game - { - Name = machine?.GetStringFieldValue(Models.Metadata.Machine.NameKey), - Description = machine?.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey), - Year = machine?.GetStringFieldValue(Models.Metadata.Machine.YearKey), - Manufacturer = machine?.GetStringFieldValue(Models.Metadata.Machine.ManufacturerKey), - Category = machine?.GetStringFieldValue(Models.Metadata.Machine.CategoryKey), - CloneOf = machine?.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey), - RomOf = machine?.GetStringFieldValue(Models.Metadata.Machine.RomOfKey), - SampleOf = machine?.GetStringFieldValue(Models.Metadata.Machine.SampleOfKey), - }; - - // Create holders for all item types - var releases = new List(); - var biossets = new List(); - var roms = new List(); - var disks = new List(); - var medias = new List(); - var samples = new List(); - var archives = new List(); - var chips = new List(); - var videos = new List(); - var dipswitches = new List(); - - // Loop through and convert the items to respective lists - for (int index = 0; index < items.Count; index++) - { - // Get the item - var item = items[index]; - - // Check for a "null" item - item = ProcessNullifiedItem(item); - - // Skip if we're ignoring the item - if (ShouldIgnore(item, ignoreblanks)) - continue; - - switch (item) - { - case Release release: - releases.Add(CreateRelease(release)); - break; - case BiosSet biosset: - biossets.Add(CreateBiosSet(biosset)); - break; - case Rom rom: - roms.Add(CreateRom(rom)); - break; - case Disk disk: - disks.Add(CreateDisk(disk)); - break; - case Media media: - medias.Add(CreateMedia(media)); - break; - case Sample sample: - samples.Add(CreateSample(sample)); - break; - case Archive archive: - archives.Add(CreateArchive(archive)); - break; - case Chip chip: - chips.Add(CreateChip(chip)); - break; - case Display display: - videos.Add(CreateVideo(display)); - break; - case Sound sound: - game.Sound = CreateSound(sound); - break; - case Input input: - game.Input = CreateInput(input); - break; - case DipSwitch dipswitch: - dipswitches.Add(CreateDipSwitch(dipswitch)); - break; - case Driver driver: - game.Driver = CreateDriver(driver); - break; - } - } - - // Assign the values to the game - game.Release = [.. releases]; - game.BiosSet = [.. biossets]; - game.Rom = [.. roms]; - game.Disk = [.. disks]; - game.Media = [.. medias]; - game.Sample = [.. samples]; - game.Archive = [.. archives]; - game.Chip = [.. chips]; - game.Video = [.. videos]; - game.DipSwitch = [.. dipswitches]; - - // Add the game to the list - games.Add(game); - } - - return [.. games]; - } - - /// - /// Create a Release from the current Release DatItem - /// - private static Models.ClrMamePro.Release CreateRelease(Release item) - { - var release = new Models.ClrMamePro.Release - { - Name = item.GetName(), - Region = item.GetStringFieldValue(Models.Metadata.Release.RegionKey), - Language = item.GetStringFieldValue(Models.Metadata.Release.LanguageKey), - Date = item.GetStringFieldValue(Models.Metadata.Release.DateKey), - Default = item.GetBoolFieldValue(Models.Metadata.Release.DefaultKey).FromYesNo(), - }; - - return release; - } - - /// - /// Create a BiosSet from the current BiosSet DatItem - /// - private static Models.ClrMamePro.BiosSet CreateBiosSet(BiosSet item) - { - var biosset = new Models.ClrMamePro.BiosSet - { - Name = item.GetName(), - Default = item.GetBoolFieldValue(Models.Metadata.BiosSet.DefaultKey).FromYesNo(), - Description = item.GetStringFieldValue(Models.Metadata.BiosSet.DescriptionKey), - }; - - return biosset; - } - - /// - /// Create a Rom from the current Rom DatItem - /// - private static Models.ClrMamePro.Rom CreateRom(Rom item) - { - var rom = new Models.ClrMamePro.Rom - { - Name = item.GetName(), - Size = item.GetStringFieldValue(Models.Metadata.Rom.SizeKey), - CRC = item.GetStringFieldValue(Models.Metadata.Rom.CRCKey), - MD5 = item.GetStringFieldValue(Models.Metadata.Rom.MD5Key), - SHA1 = item.GetStringFieldValue(Models.Metadata.Rom.SHA1Key), - SHA256 = item.GetStringFieldValue(Models.Metadata.Rom.SHA256Key), - SHA384 = item.GetStringFieldValue(Models.Metadata.Rom.SHA384Key), - SHA512 = item.GetStringFieldValue(Models.Metadata.Rom.SHA512Key), - SpamSum = item.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey), - xxHash364 = item.GetStringFieldValue(Models.Metadata.Rom.xxHash364Key), - xxHash3128 = item.GetStringFieldValue(Models.Metadata.Rom.xxHash3128Key), - Merge = item.GetStringFieldValue(Models.Metadata.Rom.MergeKey), - Region = item.GetStringFieldValue(Models.Metadata.Rom.RegionKey), - Flags = item.GetStringFieldValue(Models.Metadata.Rom.FlagsKey), - Date = item.GetStringFieldValue(Models.Metadata.Rom.DateKey), - Offs = item.GetStringFieldValue(Models.Metadata.Rom.OffsetKey), - Serial = item.GetStringFieldValue(Models.Metadata.Rom.SerialKey), - Header = item.GetStringFieldValue(Models.Metadata.Rom.HeaderKey), - Inverted = item.GetBoolFieldValue(Models.Metadata.Rom.InvertedKey).FromYesNo(), - MIA = item.GetBoolFieldValue(Models.Metadata.Rom.MIAKey).FromYesNo(), - }; - - if (item.ItemStatusSpecified) - rom.Status = item.GetFieldValue(Models.Metadata.Rom.StatusKey).AsStringValue(useSecond: false); - - return rom; - } - - /// - /// Create a Disk from the current Disk DatItem - /// - private static Models.ClrMamePro.Disk CreateDisk(Disk item) - { - var disk = new Models.ClrMamePro.Disk - { - Name = item.GetName(), - MD5 = item.GetStringFieldValue(Models.Metadata.Disk.MD5Key), - SHA1 = item.GetStringFieldValue(Models.Metadata.Disk.SHA1Key), - Merge = item.GetStringFieldValue(Models.Metadata.Disk.MergeKey), - Flags = item.GetStringFieldValue(Models.Metadata.Disk.FlagsKey), - }; - - if (item.GetFieldValue(Models.Metadata.Disk.StatusKey) != ItemStatus.NULL) - disk.Status = item.GetFieldValue(Models.Metadata.Disk.StatusKey).AsStringValue(useSecond: false); - - return disk; - } - - /// - /// Create a Media from the current Media DatItem - /// - private static Models.ClrMamePro.Media CreateMedia(Media item) - { - var media = new Models.ClrMamePro.Media - { - Name = item.GetName(), - MD5 = item.GetStringFieldValue(Models.Metadata.Media.MD5Key), - SHA1 = item.GetStringFieldValue(Models.Metadata.Media.SHA1Key), - SHA256 = item.GetStringFieldValue(Models.Metadata.Media.SHA256Key), - SpamSum = item.GetStringFieldValue(Models.Metadata.Media.SpamSumKey), - }; - return media; - } - - /// - /// Create a Sample from the current Sample DatItem - /// - private static Models.ClrMamePro.Sample CreateSample(Sample item) - { - var sample = new Models.ClrMamePro.Sample - { - Name = item.GetName(), - }; - return sample; - } - - /// - /// Create a Archive from the current Archive DatItem - /// - private static Models.ClrMamePro.Archive CreateArchive(Archive item) - { - var archive = new Models.ClrMamePro.Archive - { - Name = item.GetName(), - }; - return archive; - } - - /// - /// Create a Chip from the current Chip DatItem - /// - private static Models.ClrMamePro.Chip CreateChip(Chip item) - { - var chip = new Models.ClrMamePro.Chip - { - Type = item.GetFieldValue(Models.Metadata.Chip.ChipTypeKey).AsStringValue(), - Name = item.GetName(), - Flags = item.GetStringFieldValue(Models.Metadata.Chip.FlagsKey), - Clock = item.GetInt64FieldValue(Models.Metadata.Chip.ClockKey)?.ToString(), - }; - return chip; - } - - /// - /// Create a Video from the current Display DatItem - /// - private static Models.ClrMamePro.Video CreateVideo(Display item) - { - var video = new Models.ClrMamePro.Video - { - Screen = item.GetFieldValue(Models.Metadata.Display.DisplayTypeKey).AsStringValue(), - X = item.GetInt64FieldValue(Models.Metadata.Display.WidthKey)?.ToString(), - Y = item.GetInt64FieldValue(Models.Metadata.Display.HeightKey)?.ToString(), - AspectX = item.GetStringFieldValue("ASPECTX"), - AspectY = item.GetStringFieldValue("ASPECTY"), - Freq = item.GetDoubleFieldValue(Models.Metadata.Display.RefreshKey)?.ToString(), - }; - - switch (item.GetInt64FieldValue(Models.Metadata.Display.RotateKey)) - { - case 0: - case 180: - video.Orientation = "horizontal"; - break; - case 90: - case 270: - video.Orientation = "vertical"; - break; - } - - return video; - } - - /// - /// Create a Sound from the current Sound DatItem - /// - private static Models.ClrMamePro.Sound CreateSound(Sound item) - { - var sound = new Models.ClrMamePro.Sound - { - Channels = item.GetInt64FieldValue(Models.Metadata.Sound.ChannelsKey)?.ToString(), - }; - return sound; - } - - /// - /// Create a Input from the current Input DatItem - /// - private static Models.ClrMamePro.Input CreateInput(Input item) - { - var input = new Models.ClrMamePro.Input - { - Players = item.GetInt64FieldValue(Models.Metadata.Input.PlayersKey)?.ToString(), - //Control = item.GetStringFieldValue(Models.Metadata.Input.ControlKey), - Coins = item.GetInt64FieldValue(Models.Metadata.Input.CoinsKey)?.ToString(), - Tilt = item.GetBoolFieldValue(Models.Metadata.Input.TiltKey).FromYesNo(), - Service = item.GetBoolFieldValue(Models.Metadata.Input.ServiceKey).FromYesNo(), - }; - - if (item.ControlsSpecified) - input.Buttons = item.GetFieldValue(Models.Metadata.Input.ControlKey)![0].GetInt64FieldValue(Models.Metadata.Control.ButtonsKey)?.ToString(); - - return input; - } - - /// - /// Create a DipSwitch from the current DipSwitch DatItem - /// - private static Models.ClrMamePro.DipSwitch CreateDipSwitch(DipSwitch item) - { - var dipswitch = new Models.ClrMamePro.DipSwitch - { - Name = item.GetName(), - }; - - if (item.ValuesSpecified) - { - var entries = new List(); - foreach (var setting in item.GetFieldValue(Models.Metadata.DipSwitch.DipValueKey)!) - { - entries.Add(setting.GetStringFieldValue(Models.Metadata.DipValue.ValueKey)!); - if (setting.GetBoolFieldValue(Models.Metadata.DipValue.DefaultKey) == true) - dipswitch.Default = setting.GetStringFieldValue(Models.Metadata.DipValue.ValueKey); - } - - dipswitch.Entry = [.. entries]; - } - - return dipswitch; - } - - /// - /// Create a Driver from the current Driver DatItem - /// - private static Models.ClrMamePro.Driver CreateDriver(Driver item) - { - var driver = new Models.ClrMamePro.Driver - { - Status = item.GetFieldValue(Models.Metadata.Driver.StatusKey).AsStringValue(), - Color = item.GetFieldValue(Models.Metadata.Driver.ColorKey).AsStringValue(), - Sound = item.GetFieldValue(Models.Metadata.Driver.SoundKey).AsStringValue(), - PaletteSize = item.GetInt64FieldValue(Models.Metadata.Driver.PaletteSizeKey)?.ToString(), - Blit = item.GetStringFieldValue(Models.Metadata.Driver.BlitKey), - }; - return driver; - } - - #endregion } } diff --git a/SabreTools.DatFiles/Formats/Listrom.Writer.cs b/SabreTools.DatFiles/Formats/Listrom.Writer.cs index 8cc6aa07..ca92c38f 100644 --- a/SabreTools.DatFiles/Formats/Listrom.Writer.cs +++ b/SabreTools.DatFiles/Formats/Listrom.Writer.cs @@ -166,7 +166,7 @@ namespace SabreTools.DatFiles.Formats /// private static Models.Listrom.Row? CreateRow(Disk disk) { - if (disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump) + if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Nodump) { return new Models.Listrom.Row { @@ -174,7 +174,7 @@ namespace SabreTools.DatFiles.Formats NoGoodDumpKnown = true, }; } - else if (disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.BadDump) + else if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.BadDump) { var row = new Models.Listrom.Row { @@ -210,7 +210,7 @@ namespace SabreTools.DatFiles.Formats /// private static Models.Listrom.Row? CreateRow(Rom rom) { - if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump) + if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Nodump) { return new Models.Listrom.Row { @@ -219,7 +219,7 @@ namespace SabreTools.DatFiles.Formats NoGoodDumpKnown = true, }; } - else if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.BadDump) + else if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.BadDump) { return new Models.Listrom.Row { diff --git a/SabreTools.DatFiles/Formats/Listxml.Writer.cs b/SabreTools.DatFiles/Formats/Listxml.Writer.cs index 810752c5..960febfc 100644 --- a/SabreTools.DatFiles/Formats/Listxml.Writer.cs +++ b/SabreTools.DatFiles/Formats/Listxml.Writer.cs @@ -376,7 +376,7 @@ namespace SabreTools.DatFiles.Formats { Name = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey), SourceFile = machine.GetStringFieldValue(Models.Metadata.Machine.SourceFileKey), - Runnable = machine.GetFieldValue(Models.Metadata.Machine.RunnableKey).AsStringValue(), + Runnable = machine.GetStringFieldValue(Models.Metadata.Machine.RunnableKey).AsEnumValue().AsStringValue(), CloneOf = machine.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey), RomOf = machine.GetStringFieldValue(Models.Metadata.Machine.RomOfKey), SampleOf = machine.GetStringFieldValue(Models.Metadata.Machine.SampleOfKey), @@ -426,7 +426,7 @@ namespace SabreTools.DatFiles.Formats Merge = item.GetStringFieldValue(Models.Metadata.Rom.MergeKey), Region = item.GetStringFieldValue(Models.Metadata.Rom.RegionKey), Offset = item.GetStringFieldValue(Models.Metadata.Rom.OffsetKey), - Status = item.GetFieldValue(Models.Metadata.Rom.StatusKey).AsStringValue(useSecond: false), + Status = item.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue().AsStringValue(useSecond: false), Optional = item.GetBoolFieldValue(Models.Metadata.Rom.OptionalKey).FromYesNo(), Dispose = item.GetBoolFieldValue(Models.Metadata.Rom.DisposeKey).FromYesNo(), SoundOnly = item.GetBoolFieldValue(Models.Metadata.Rom.SoundOnlyKey).FromYesNo(), @@ -449,7 +449,7 @@ namespace SabreTools.DatFiles.Formats Region = item.GetStringFieldValue(Models.Metadata.Disk.RegionKey), Index = item.GetStringFieldValue(Models.Metadata.Disk.IndexKey), Writable = item.GetBoolFieldValue(Models.Metadata.Disk.WritableKey).FromYesNo(), - Status = item.GetFieldValue(Models.Metadata.Disk.StatusKey).AsStringValue(useSecond: false), + Status = item.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue().AsStringValue(useSecond: false), Optional = item.GetBoolFieldValue(Models.Metadata.Disk.OptionalKey).FromYesNo(), }; @@ -491,7 +491,7 @@ namespace SabreTools.DatFiles.Formats { Name = item.GetName(), Tag = item.GetStringFieldValue(Models.Metadata.Chip.TagKey), - Type = item.GetFieldValue(Models.Metadata.Chip.ChipTypeKey).AsStringValue(), + Type = item.GetStringFieldValue(Models.Metadata.Chip.ChipTypeKey).AsEnumValue().AsStringValue(), SoundOnly = item.GetBoolFieldValue(Models.Metadata.Chip.SoundOnlyKey).FromYesNo(), Clock = item.GetInt64FieldValue(Models.Metadata.Chip.TagKey)?.ToString(), }; @@ -507,7 +507,7 @@ namespace SabreTools.DatFiles.Formats var display = new Models.Listxml.Display { Tag = item.GetStringFieldValue(Models.Metadata.Display.TagKey), - Type = item.GetFieldValue(Models.Metadata.Display.DisplayTypeKey).AsStringValue(), + Type = item.GetStringFieldValue(Models.Metadata.Display.DisplayTypeKey).AsEnumValue().AsStringValue(), Rotate = item.GetInt64FieldValue(Models.Metadata.Display.RotateKey)?.ToString(), FlipX = item.GetBoolFieldValue(Models.Metadata.Display.FlipXKey).FromYesNo(), Width = item.GetStringFieldValue(Models.Metadata.Display.WidthKey)?.ToString(), @@ -573,7 +573,7 @@ namespace SabreTools.DatFiles.Formats { var control = new Models.Listxml.Control { - Type = item.GetFieldValue(Models.Metadata.Control.ControlTypeKey).AsStringValue(), + Type = item.GetStringFieldValue(Models.Metadata.Control.ControlTypeKey).AsEnumValue().AsStringValue(), Player = item.GetInt64FieldValue(Models.Metadata.Control.PlayerKey)?.ToString(), Buttons = item.GetInt64FieldValue(Models.Metadata.Control.ButtonsKey)?.ToString(), ReqButtons = item.GetInt64FieldValue(Models.Metadata.Control.ReqButtonsKey)?.ToString(), diff --git a/SabreTools.DatFiles/Formats/Logiqx.Writer.cs b/SabreTools.DatFiles/Formats/Logiqx.Writer.cs index 01059d46..76ef8ec3 100644 --- a/SabreTools.DatFiles/Formats/Logiqx.Writer.cs +++ b/SabreTools.DatFiles/Formats/Logiqx.Writer.cs @@ -527,7 +527,7 @@ namespace SabreTools.DatFiles.Formats }; if (item.ItemStatusSpecified) - rom.Status = item.GetFieldValue(Models.Metadata.Rom.StatusKey).AsStringValue(useSecond: false); + rom.Status = item.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue().AsStringValue(useSecond: false); return rom; } @@ -546,8 +546,8 @@ namespace SabreTools.DatFiles.Formats Region = item.GetStringFieldValue(Models.Metadata.Disk.RegionKey), }; - if (item.GetFieldValue(Models.Metadata.Disk.StatusKey) != ItemStatus.NULL) - disk.Status = item.GetFieldValue(Models.Metadata.Disk.StatusKey).AsStringValue(useSecond: false); + if (item.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() != ItemStatus.NULL) + disk.Status = item.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue().AsStringValue(useSecond: false); return disk; } diff --git a/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs b/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs index b0be1b0b..7367d152 100644 --- a/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs +++ b/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs @@ -164,7 +164,7 @@ namespace SabreTools.DatFiles.Formats Description = Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey), GameName = disk.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey), GameDescription = disk.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey), - Type = disk.GetFieldValue(Models.Metadata.DatItem.TypeKey).AsStringValue(), + Type = disk.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue(), RomName = string.Empty, DiskName = disk.GetName(), Size = string.Empty, @@ -175,7 +175,7 @@ namespace SabreTools.DatFiles.Formats SHA384 = string.Empty, SHA512 = string.Empty, SpamSum = string.Empty, - Status = disk.GetFieldValue(Models.Metadata.Disk.StatusKey).AsStringValue(useSecond: false), + Status = disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue().AsStringValue(useSecond: false), }; return row; } @@ -192,7 +192,7 @@ namespace SabreTools.DatFiles.Formats Description = Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey), GameName = media.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey), GameDescription = media.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey), - Type = media.GetFieldValue(Models.Metadata.DatItem.TypeKey).AsStringValue(), + Type = media.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue(), RomName = string.Empty, DiskName = media.GetName(), Size = string.Empty, @@ -220,7 +220,7 @@ namespace SabreTools.DatFiles.Formats Description = Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey), GameName = rom.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey), GameDescription = rom.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey), - Type = rom.GetFieldValue(Models.Metadata.DatItem.TypeKey).AsStringValue(), + Type = rom.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue(), RomName = rom.GetName(), DiskName = string.Empty, Size = rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString(), @@ -231,7 +231,7 @@ namespace SabreTools.DatFiles.Formats SHA384 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key), SHA512 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key), SpamSum = rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey), - Status = rom.GetFieldValue(Models.Metadata.Rom.StatusKey).AsStringValue(useSecond: false), + Status = rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue().AsStringValue(useSecond: false), }; return row; } diff --git a/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs b/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs index 1a548260..c26793d7 100644 --- a/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs +++ b/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs @@ -261,7 +261,7 @@ namespace SabreTools.DatFiles.Formats { Name = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey), CloneOf = machine.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey), - Supported = machine.GetFieldValue(Models.Metadata.Machine.SupportedKey).AsStringValue(useSecond: true), + Supported = machine.GetStringFieldValue(Models.Metadata.Machine.SupportedKey).AsEnumValue().AsStringValue(useSecond: true), Description = machine.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey), Year = machine.GetStringFieldValue(Models.Metadata.Machine.YearKey), Publisher = machine.GetStringFieldValue(Models.Metadata.Machine.PublisherKey), @@ -381,7 +381,7 @@ namespace SabreTools.DatFiles.Formats Name = item.GetFieldValue(Rom.DataAreaKey)?.GetName(), Size = item.GetFieldValue(Rom.DataAreaKey)?.GetInt64FieldValue(Models.Metadata.DataArea.SizeKey)?.ToString(), Width = item.GetFieldValue(Rom.DataAreaKey)?.GetInt64FieldValue(Models.Metadata.DataArea.WidthKey)?.ToString(), - Endianness = item.GetFieldValue(Rom.DataAreaKey)?.GetFieldValue(Models.Metadata.DataArea.EndiannessKey).AsStringValue(), + Endianness = item.GetFieldValue(Rom.DataAreaKey)?.GetStringFieldValue(Models.Metadata.DataArea.EndiannessKey).AsEnumValue().AsStringValue(), Rom = CreateRom(item), }; return [dataArea]; @@ -401,8 +401,8 @@ namespace SabreTools.DatFiles.Formats SHA1 = item.GetStringFieldValue(Models.Metadata.Rom.SHA1Key), Offset = item.GetStringFieldValue(Models.Metadata.Rom.OffsetKey), Value = item.GetStringFieldValue(Models.Metadata.Rom.ValueKey), - Status = item.GetFieldValue(Models.Metadata.Rom.StatusKey).AsStringValue(useSecond: false), - LoadFlag = item.GetFieldValue(Models.Metadata.Rom.LoadFlagKey).AsStringValue(), + Status = item.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue().AsStringValue(useSecond: false), + LoadFlag = item.GetStringFieldValue(Models.Metadata.Rom.LoadFlagKey).AsEnumValue().AsStringValue(), }; return [rom]; } @@ -429,7 +429,7 @@ namespace SabreTools.DatFiles.Formats Name = item.GetName(), MD5 = item.GetStringFieldValue(Models.Metadata.Disk.MD5Key), SHA1 = item.GetStringFieldValue(Models.Metadata.Disk.SHA1Key), - Status = item.GetFieldValue(Models.Metadata.Disk.StatusKey).AsStringValue(useSecond: false), + Status = item.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue().AsStringValue(useSecond: false), Writeable = item.GetBoolFieldValue(Models.Metadata.Disk.WritableKey)?.ToString(), }; return [disk]; diff --git a/SabreTools.DatFiles/ItemDictionary.cs b/SabreTools.DatFiles/ItemDictionary.cs index 4dc0620c..c3cc099c 100644 --- a/SabreTools.DatFiles/ItemDictionary.cs +++ b/SabreTools.DatFiles/ItemDictionary.cs @@ -224,22 +224,22 @@ namespace SabreTools.DatFiles RemovedCount++; // Increment the item count for the type - AddItemCount(item.GetFieldValue(Models.Metadata.DatItem.TypeKey)); + AddItemCount(item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue()); // Some item types require special processing switch (item) { case Disk disk: - if (disk.GetFieldValue(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump) + if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() != 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.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Verified ? 1 : 0); + 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); break; case Media media: AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.MD5Key)) ? 0 : 1); @@ -248,7 +248,7 @@ namespace SabreTools.DatFiles AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SpamSumKey)) ? 0 : 1); break; case Rom rom: - if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump) + if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() != ItemStatus.Nodump) { TotalSize += rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0; AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); @@ -260,10 +260,10 @@ namespace SabreTools.DatFiles AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); } - AddStatusCount(ItemStatus.BadDump, rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Verified ? 1 : 0); + 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); break; } } @@ -505,22 +505,22 @@ namespace SabreTools.DatFiles RemovedCount--; // Decrement the item count for the type - RemoveItemCount(item.GetFieldValue(Models.Metadata.DatItem.TypeKey)); + RemoveItemCount(item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue()); // Some item types require special processing switch (item) { case Disk disk: - if (disk.GetFieldValue(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump) + if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() != 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.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Verified ? 1 : 0); + 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); break; case Media media: RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.MD5Key)) ? 0 : 1); @@ -529,7 +529,7 @@ namespace SabreTools.DatFiles RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SpamSumKey)) ? 0 : 1); break; case Rom rom: - if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump) + if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() != ItemStatus.Nodump) { TotalSize -= rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0; RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); @@ -541,10 +541,10 @@ namespace SabreTools.DatFiles RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); } - RemoveStatusCount(ItemStatus.BadDump, rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Verified ? 1 : 0); + 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); break; } } diff --git a/SabreTools.DatFiles/ItemDictionaryDB.cs b/SabreTools.DatFiles/ItemDictionaryDB.cs index e6a67f03..24f291af 100644 --- a/SabreTools.DatFiles/ItemDictionaryDB.cs +++ b/SabreTools.DatFiles/ItemDictionaryDB.cs @@ -341,22 +341,22 @@ namespace SabreTools.DatFiles RemovedCount++; // Increment the item count for the type - AddItemCount(item.GetFieldValue(Models.Metadata.DatItem.TypeKey)); + AddItemCount(item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue()); // Some item types require special processing switch (item) { case Disk disk: - if (disk.GetFieldValue(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump) + if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() != 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.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Verified ? 1 : 0); + 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); break; case Media media: AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.MD5Key)) ? 0 : 1); @@ -365,7 +365,7 @@ namespace SabreTools.DatFiles AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SpamSumKey)) ? 0 : 1); break; case Rom rom: - if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump) + if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() != ItemStatus.Nodump) { TotalSize += rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0; AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); @@ -377,10 +377,10 @@ namespace SabreTools.DatFiles AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); } - AddStatusCount(ItemStatus.BadDump, rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Verified ? 1 : 0); + 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); break; } } @@ -649,22 +649,22 @@ namespace SabreTools.DatFiles RemovedCount--; // Decrement the item count for the type - RemoveItemCount(item.GetFieldValue(Models.Metadata.DatItem.TypeKey)); + RemoveItemCount(item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue()); // Some item types require special processing switch (item) { case Disk disk: - if (disk.GetFieldValue(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump) + if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() != 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.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Verified ? 1 : 0); + 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); break; case Media media: RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.MD5Key)) ? 0 : 1); @@ -673,7 +673,7 @@ namespace SabreTools.DatFiles RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SpamSumKey)) ? 0 : 1); break; case Rom rom: - if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump) + if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() != ItemStatus.Nodump) { TotalSize -= rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0; RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); @@ -685,10 +685,10 @@ namespace SabreTools.DatFiles RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); } - RemoveStatusCount(ItemStatus.BadDump, rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Verified ? 1 : 0); + 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); break; } } diff --git a/SabreTools.DatFiles/Setter.cs b/SabreTools.DatFiles/Setter.cs index bbf885bd..bc01df0d 100644 --- a/SabreTools.DatFiles/Setter.cs +++ b/SabreTools.DatFiles/Setter.cs @@ -190,7 +190,7 @@ namespace SabreTools.DatFiles return; // If there are no field names for this type or generic, return - string? itemType = datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey).AsStringValue(); + string? itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue(); if (itemType == null || (!ItemFieldMappings.Keys.Any(kvp => kvp.Item1 == itemType) && !ItemFieldMappings.Keys.Any(kvp => kvp.Item1 == "item"))) return; diff --git a/SabreTools.DatItems/DatItem.cs b/SabreTools.DatItems/DatItem.cs index cf31d5ea..38162a1b 100644 --- a/SabreTools.DatItems/DatItem.cs +++ b/SabreTools.DatItems/DatItem.cs @@ -326,7 +326,7 @@ namespace SabreTools.DatItems public virtual bool Equals(DatItem? other) { // If we don't have a matched type, return false - if (GetFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetFieldValue(Models.Metadata.DatItem.TypeKey)) + if (GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue() != other?.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue()) return false; // Compare the internal models @@ -528,13 +528,13 @@ namespace SabreTools.DatItems } // If it's a nodump, add and skip - if (item is Rom rom && rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump) + if (item is Rom rom && rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Nodump) { outfiles.Add(item); nodumpCount++; continue; } - else if (item is Disk disk && disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump) + else if (item is Disk disk && disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Nodump) { outfiles.Add(item); nodumpCount++; @@ -643,10 +643,10 @@ namespace SabreTools.DatItems } // Get the last item name, if applicable - string lastItemName = lastItem.GetName() ?? lastItem.GetFieldValue(Models.Metadata.DatItem.TypeKey).ToString(); + string lastItemName = lastItem.GetName() ?? lastItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue() ?? string.Empty; // Get the current item name, if applicable - string datItemName = datItem.GetName() ?? datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey).ToString(); + string datItemName = datItem.GetName() ?? datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue() ?? string.Empty; // If the current item exactly matches the last item, then we don't add it #if NETFRAMEWORK @@ -739,7 +739,7 @@ namespace SabreTools.DatItems if (x.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) == y.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)) { // If item types match, more refinement is needed - if (x.GetFieldValue(Models.Metadata.DatItem.TypeKey) == y.GetFieldValue(Models.Metadata.DatItem.TypeKey)) + if (x.GetStringFieldValue(Models.Metadata.DatItem.TypeKey) == y.GetStringFieldValue(Models.Metadata.DatItem.TypeKey)) { string? xDirectoryName = Path.GetDirectoryName(TextHelper.RemovePathUnsafeCharacters(x.GetName() ?? string.Empty)); string? yDirectoryName = Path.GetDirectoryName(TextHelper.RemovePathUnsafeCharacters(y.GetName() ?? string.Empty)); @@ -763,7 +763,7 @@ namespace SabreTools.DatItems } // Otherwise, just sort based on item type - return x.GetFieldValue(Models.Metadata.DatItem.TypeKey) - y.GetFieldValue(Models.Metadata.DatItem.TypeKey); + return x.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue() - y.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue(); } // Otherwise, just sort based on machine name @@ -891,7 +891,7 @@ namespace SabreTools.DatItems public virtual bool Equals(DatItem? other) { // If we don't have a matched type, return false - if (GetFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetFieldValue(Models.Metadata.DatItem.TypeKey)) + if (GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue() != other?.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue()) return false; // Compare the internal models diff --git a/SabreTools.DatItems/Formats/Blank.cs b/SabreTools.DatItems/Formats/Blank.cs index 54f35519..7ac35a10 100644 --- a/SabreTools.DatItems/Formats/Blank.cs +++ b/SabreTools.DatItems/Formats/Blank.cs @@ -1,6 +1,7 @@ using System.Xml.Serialization; using Newtonsoft.Json; using SabreTools.Core; +using SabreTools.Core.Tools; namespace SabreTools.DatItems.Formats { @@ -38,7 +39,7 @@ namespace SabreTools.DatItems.Formats blank.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)); blank.SetFieldValue(DatItem.RemoveKey, GetBoolFieldValue(DatItem.RemoveKey)); blank.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); - blank.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetFieldValue(Models.Metadata.DatItem.TypeKey)); + blank.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue()); return blank; } @@ -51,7 +52,7 @@ namespace SabreTools.DatItems.Formats public override bool Equals(DatItem? other) { // If we don't have a blank, return false - if (GetFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetFieldValue(Models.Metadata.DatItem.TypeKey)) + if (GetStringFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetStringFieldValue(Models.Metadata.DatItem.TypeKey)) return false; // Otherwise, treat it as a Blank diff --git a/SabreTools.DatItems/Formats/File.cs b/SabreTools.DatItems/Formats/File.cs index 52b1afb9..1b489c1b 100644 --- a/SabreTools.DatItems/Formats/File.cs +++ b/SabreTools.DatItems/Formats/File.cs @@ -192,7 +192,7 @@ namespace SabreTools.DatItems.Formats bool dupefound = false; // If we don't have a file, return false - if (GetFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetFieldValue(Models.Metadata.DatItem.TypeKey)) + if (GetStringFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetStringFieldValue(Models.Metadata.DatItem.TypeKey)) return dupefound; // Otherwise, treat it as a File diff --git a/SabreTools.DatItems/Formats/ReleaseDetails.cs b/SabreTools.DatItems/Formats/ReleaseDetails.cs index 2e02aa91..b5017e01 100644 --- a/SabreTools.DatItems/Formats/ReleaseDetails.cs +++ b/SabreTools.DatItems/Formats/ReleaseDetails.cs @@ -1,6 +1,7 @@ using System.Xml.Serialization; using Newtonsoft.Json; using SabreTools.Core; +using SabreTools.Core.Tools; // TODO: Add item mappings for all fields namespace SabreTools.DatItems.Formats @@ -148,7 +149,7 @@ namespace SabreTools.DatItems.Formats releaseDetails.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)); releaseDetails.SetFieldValue(DatItem.RemoveKey, GetBoolFieldValue(DatItem.RemoveKey)); releaseDetails.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); - releaseDetails.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetFieldValue(Models.Metadata.DatItem.TypeKey)); + releaseDetails.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue()); return releaseDetails; } @@ -161,7 +162,7 @@ namespace SabreTools.DatItems.Formats public override bool Equals(DatItem? other) { // If we don't have a Details, return false - if (GetFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetFieldValue(Models.Metadata.DatItem.TypeKey)) + if (GetStringFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetStringFieldValue(Models.Metadata.DatItem.TypeKey)) return false; // Otherwise, treat it as a Details diff --git a/SabreTools.DatItems/Formats/Rom.cs b/SabreTools.DatItems/Formats/Rom.cs index 567e2efc..68c44622 100644 --- a/SabreTools.DatItems/Formats/Rom.cs +++ b/SabreTools.DatItems/Formats/Rom.cs @@ -39,7 +39,7 @@ namespace SabreTools.DatItems.Formats { get { - var status = GetFieldValue(Models.Metadata.Rom.StatusKey); + var status = GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue(); return status != ItemStatus.NULL && status != ItemStatus.None; } } diff --git a/SabreTools.DatItems/Formats/Serials.cs b/SabreTools.DatItems/Formats/Serials.cs index a57a2622..1183ef89 100644 --- a/SabreTools.DatItems/Formats/Serials.cs +++ b/SabreTools.DatItems/Formats/Serials.cs @@ -1,6 +1,7 @@ using System.Xml.Serialization; using Newtonsoft.Json; using SabreTools.Core; +using SabreTools.Core.Tools; // TODO: Add item mappings for all fields namespace SabreTools.DatItems.Formats @@ -140,7 +141,7 @@ namespace SabreTools.DatItems.Formats serials.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)); serials.SetFieldValue(DatItem.RemoveKey, GetBoolFieldValue(DatItem.RemoveKey)); serials.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); - serials.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetFieldValue(Models.Metadata.DatItem.TypeKey)); + serials.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue()); return serials; } @@ -153,7 +154,7 @@ namespace SabreTools.DatItems.Formats public override bool Equals(DatItem? other) { // If we don't have a Serials, return false - if (GetFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetFieldValue(Models.Metadata.DatItem.TypeKey)) + if (GetStringFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetStringFieldValue(Models.Metadata.DatItem.TypeKey)) return false; // Otherwise, treat it as a Serials diff --git a/SabreTools.DatItems/Formats/SourceDetails.cs b/SabreTools.DatItems/Formats/SourceDetails.cs index f1b6c8d6..cf728827 100644 --- a/SabreTools.DatItems/Formats/SourceDetails.cs +++ b/SabreTools.DatItems/Formats/SourceDetails.cs @@ -1,6 +1,7 @@ using System.Xml.Serialization; using Newtonsoft.Json; using SabreTools.Core; +using SabreTools.Core.Tools; // TODO: Add item mappings for all fields namespace SabreTools.DatItems.Formats @@ -183,7 +184,7 @@ namespace SabreTools.DatItems.Formats sourceDetails.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)); sourceDetails.SetFieldValue(DatItem.RemoveKey, GetBoolFieldValue(DatItem.RemoveKey)); sourceDetails.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); - sourceDetails.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetFieldValue(Models.Metadata.DatItem.TypeKey)); + sourceDetails.SetFieldValue(Models.Metadata.DatItem.TypeKey, GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue()); return sourceDetails; } @@ -196,7 +197,7 @@ namespace SabreTools.DatItems.Formats public override bool Equals(DatItem? other) { // If we don't have a SourceDetails, return false - if (GetFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetFieldValue(Models.Metadata.DatItem.TypeKey)) + if (GetStringFieldValue(Models.Metadata.DatItem.TypeKey) != other?.GetStringFieldValue(Models.Metadata.DatItem.TypeKey)) return false; // Otherwise, treat it as a SourceDetails diff --git a/SabreTools.DatTools/DatFromDir.cs b/SabreTools.DatTools/DatFromDir.cs index b499c47b..ca690614 100644 --- a/SabreTools.DatTools/DatFromDir.cs +++ b/SabreTools.DatTools/DatFromDir.cs @@ -6,6 +6,7 @@ using System.Threading; using System.Threading.Tasks; #endif using SabreTools.Core; +using SabreTools.Core.Tools; using SabreTools.DatFiles; using SabreTools.DatItems; using SabreTools.DatItems.Formats; @@ -416,7 +417,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.GetFieldValue(Models.Metadata.DatItem.TypeKey))) + if (!parsed.Contains(datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue())) return; try diff --git a/SabreTools.DatTools/Rebuilder.cs b/SabreTools.DatTools/Rebuilder.cs index 5abefcdd..3338dca6 100644 --- a/SabreTools.DatTools/Rebuilder.cs +++ b/SabreTools.DatTools/Rebuilder.cs @@ -157,11 +157,11 @@ namespace SabreTools.DatTools // Otherwise, we rebuild that file to all locations that we need to bool usedInternally; - if (items[0].GetFieldValue(Models.Metadata.DatItem.TypeKey) == ItemType.Disk) + if (items[0].GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue() == ItemType.Disk) usedInternally = RebuildIndividualFile(datFile, new Disk(fileinfo), foundpath, outDir, date, inverse, outputFormat, isZip: false); - else if (items[0].GetFieldValue(Models.Metadata.DatItem.TypeKey) == ItemType.File) + else if (items[0].GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue() == ItemType.File) usedInternally = RebuildIndividualFile(datFile, new DatItems.Formats.File(fileinfo), foundpath, outDir, date, inverse, outputFormat, isZip: false); - else if (items[0].GetFieldValue(Models.Metadata.DatItem.TypeKey) == ItemType.Media) + else if (items[0].GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue() == ItemType.Media) usedInternally = RebuildIndividualFile(datFile, new Media(fileinfo), foundpath, outDir, date, inverse, outputFormat, isZip: false); else usedInternally = RebuildIndividualFile(datFile, new Rom(fileinfo), foundpath, outDir, date, inverse, outputFormat, isZip: false); @@ -422,7 +422,7 @@ namespace SabreTools.DatTools if (RebuildTorrentXz(datFile, datItem, file, outDir, outputFormat, isZip)) return true; - logger.User($"{(inverse ? "No matches" : "Matches")} found for '{Path.GetFileName(datItem.GetName() ?? datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey).ToString())}', rebuilding accordingly..."); + logger.User($"{(inverse ? "No matches" : "Matches")} found for '{Path.GetFileName(datItem.GetName() ?? datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue())}', rebuilding accordingly..."); rebuilt = true; // Special case for partial packing mode @@ -478,7 +478,7 @@ namespace SabreTools.DatTools // If we have duplicates and we're not filtering if (ShouldRebuild(datFile, headerless, transformStream, false, out dupes)) { - logger.User($"Headerless matches found for '{Path.GetFileName(datItem.GetName() ?? datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey).ToString())}', rebuilding accordingly..."); + logger.User($"Headerless matches found for '{Path.GetFileName(datItem.GetName() ?? datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue())}', rebuilding accordingly..."); rebuilt = true; // Now loop through the list and rebuild accordingly @@ -678,7 +678,7 @@ namespace SabreTools.DatTools { BaseArchive? archive = BaseArchive.Create(file); if (archive != null) - (stream, _) = archive.CopyToStream(datItem.GetName() ?? datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey).ToString()); + (stream, _) = archive.CopyToStream(datItem.GetName() ?? datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue() ?? string.Empty); } // Otherwise, just open the filestream else diff --git a/SabreTools.DatTools/Splitter.cs b/SabreTools.DatTools/Splitter.cs index da9abb17..fd1bc214 100644 --- a/SabreTools.DatTools/Splitter.cs +++ b/SabreTools.DatTools/Splitter.cs @@ -185,7 +185,7 @@ namespace SabreTools.DatTools switch (item) { case Disk disk: - if (disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump) + if (disk.GetStringFieldValue(Models.Metadata.Disk.StatusKey).AsEnumValue() == ItemStatus.Nodump) fieldDats[Models.Metadata.Disk.StatusKey].Items.Add(key, item); else if (!string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))) fieldDats[Models.Metadata.Disk.SHA1Key].Items.Add(key, item); @@ -209,7 +209,7 @@ namespace SabreTools.DatTools break; case Rom rom: - if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump) + if (rom.GetStringFieldValue(Models.Metadata.Rom.StatusKey).AsEnumValue() == ItemStatus.Nodump) fieldDats[Models.Metadata.Rom.StatusKey].Items.Add(key, item); else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key))) fieldDats[Models.Metadata.Rom.SHA512Key].Items.Add(key, item); @@ -605,7 +605,7 @@ namespace SabreTools.DatTools foreach (DatItem item in items) { - if (item.GetFieldValue(Models.Metadata.DatItem.TypeKey) == itemType) + if (item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue() == itemType) indexDat.Items.Add(key, item); } #if NET40_OR_GREATER || NETCOREAPP diff --git a/SabreTools.Filtering/Remover.cs b/SabreTools.Filtering/Remover.cs index 82241162..2cd4c084 100644 --- a/SabreTools.Filtering/Remover.cs +++ b/SabreTools.Filtering/Remover.cs @@ -227,7 +227,7 @@ namespace SabreTools.Filtering return; // If there are no field names for this type or generic, return - string? itemType = datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey).AsStringValue(); + string? itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue(); if (itemType == null || (!ItemFieldNames.ContainsKey(itemType) && !ItemFieldNames.ContainsKey("item"))) return; diff --git a/SabreTools.Filtering/Replacer.cs b/SabreTools.Filtering/Replacer.cs index 20c71b01..d35605a1 100644 --- a/SabreTools.Filtering/Replacer.cs +++ b/SabreTools.Filtering/Replacer.cs @@ -55,11 +55,11 @@ namespace SabreTools.Filtering #region Common - if (datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey) != repDatItem.GetFieldValue(Models.Metadata.DatItem.TypeKey)) + if (datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey) != repDatItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey)) return; // If there are no field names for this type or generic, return - string? itemType = datItem.GetFieldValue(Models.Metadata.DatItem.TypeKey).AsStringValue(); + string? itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue().AsStringValue(); if (itemType == null || (!itemFieldNames.ContainsKey(itemType) && !itemFieldNames.ContainsKey("item"))) return; diff --git a/SabreTools.Filtering/Splitter.cs b/SabreTools.Filtering/Splitter.cs index 46db706d..9bace243 100644 --- a/SabreTools.Filtering/Splitter.cs +++ b/SabreTools.Filtering/Splitter.cs @@ -336,7 +336,7 @@ namespace SabreTools.Filtering foreach (DatItem item in devItems) { // If the parent machine doesn't already contain this item, add it - if (!datFile.Items[machine]!.Any(i => i.GetFieldValue(Models.Metadata.DatItem.TypeKey) == item.GetFieldValue(Models.Metadata.DatItem.TypeKey) && i.GetName() == item.GetName())) + if (!datFile.Items[machine]!.Any(i => i.GetStringFieldValue(Models.Metadata.DatItem.TypeKey) == item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey) && i.GetName() == item.GetName())) { // Set that we found new items foundnew = true; @@ -388,7 +388,7 @@ namespace SabreTools.Filtering foreach (DatItem item in slotItems) { // If the parent machine doesn't already contain this item, add it - if (!datFile.Items[machine]!.Any(i => i.GetFieldValue(Models.Metadata.DatItem.TypeKey) == item.GetFieldValue(Models.Metadata.DatItem.TypeKey) && i.GetName() == item.GetName())) + if (!datFile.Items[machine]!.Any(i => i.GetStringFieldValue(Models.Metadata.DatItem.TypeKey) == item.GetStringFieldValue(Models.Metadata.DatItem.TypeKey) && i.GetName() == item.GetName())) { // Set that we found new items foundnew = true; diff --git a/SabreTools.Help/Feature.cs b/SabreTools.Help/Feature.cs index ca212b68..c1ce1719 100644 --- a/SabreTools.Help/Feature.cs +++ b/SabreTools.Help/Feature.cs @@ -520,7 +520,7 @@ namespace SabreTools.Help /// /// Get the string value associated with this feature /// - public string? GetStringValue() + public string? GetStringFieldValue() { if (_featureType != ParameterType.String) throw new ArgumentException("Feature is not a string"); diff --git a/SabreTools.Help/TopLevel.cs b/SabreTools.Help/TopLevel.cs index 661ab9c6..737508c8 100644 --- a/SabreTools.Help/TopLevel.cs +++ b/SabreTools.Help/TopLevel.cs @@ -145,7 +145,7 @@ namespace SabreTools.Help if (!features.ContainsKey(key)) return null; - return features[key]!.GetStringValue(); + return features[key]!.GetStringFieldValue(); } #endregion diff --git a/SabreTools.Test/DatItems/DatItemTests.cs b/SabreTools.Test/DatItems/DatItemTests.cs index cdac945d..370580d9 100644 --- a/SabreTools.Test/DatItems/DatItemTests.cs +++ b/SabreTools.Test/DatItems/DatItemTests.cs @@ -1,4 +1,5 @@ using SabreTools.Core; +using SabreTools.Core.Tools; using SabreTools.DatItems; using SabreTools.DatItems.Formats; using SabreTools.FileTypes; @@ -21,7 +22,7 @@ namespace SabreTools.Test.DatItems { var baseFile = CreateBaseFile(fileType); var actual = DatItem.Create(baseFile); - Assert.Equal(expected, actual?.GetFieldValue(Models.Metadata.DatItem.TypeKey)); + Assert.Equal(expected, actual?.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue()); } [Fact]