diff --git a/RombaSharp/Features/Archive.cs b/RombaSharp/Features/Archive.cs index 3787dbbd..4efdc052 100644 --- a/RombaSharp/Features/Archive.cs +++ b/RombaSharp/Features/Archive.cs @@ -103,30 +103,30 @@ have a current entry in the DAT index."; if (onlyNeeded && !noDb) { string query = "SELECT * FROM crcsha1 JOIN md5sha1 ON crcsha1.sha1=md5sha1.sha1" - + $" WHERE crcsha1.crc=\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\"" - + $" OR md5sha1.md5=\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\"" - + $" OR md5sha1.sha1=\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\""; + + $" WHERE crcsha1.crc=\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\"" + + $" OR md5sha1.md5=\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\"" + + $" OR md5sha1.sha1=\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\""; SqliteCommand slc = new SqliteCommand(query, dbc); SqliteDataReader sldr = slc.ExecuteReader(); if (sldr.HasRows) { // Add to the queries - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) - crcquery += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\"),"; + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) + crcquery += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\"),"; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key))) - md5query += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\"),"; + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key))) + md5query += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\"),"; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key))) + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key))) { - sha1query += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\", \"{_depots!.Keys.ToList()[0]}\"),"; + sha1query += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\", \"{_depots!.Keys.ToList()[0]}\"),"; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) - crcsha1query += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\", \"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) + crcsha1query += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\", \"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key))) - md5sha1query += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\", \"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key))) + md5sha1query += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\", \"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; } // Add to the Dat @@ -139,21 +139,21 @@ have a current entry in the DAT index."; // Add to the queries if (!noDb) { - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) - crcquery += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\"),"; + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) + crcquery += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\"),"; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key))) - md5query += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\"),"; + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key))) + md5query += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\"),"; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key))) + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key))) { - sha1query += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\", \"{_depots!.Keys.ToList()[0]}\"),"; + sha1query += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\", \"{_depots!.Keys.ToList()[0]}\"),"; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) - crcsha1query += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\", \"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) + crcsha1query += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\", \"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key))) - md5sha1query += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\", \"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key))) + md5sha1query += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\", \"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; } } diff --git a/RombaSharp/Features/BaseFeature.cs b/RombaSharp/Features/BaseFeature.cs index 266c2935..76da9db8 100644 --- a/RombaSharp/Features/BaseFeature.cs +++ b/RombaSharp/Features/BaseFeature.cs @@ -786,9 +786,9 @@ CREATE TABLE IF NOT EXISTS dat ( { // Get the dat full path string fullpath = Path.Combine(_dats!, - (dat.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(SabreTools.Models.Metadata.Machine.NameKey) == "dats" + (dat.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey) == "dats" ? string.Empty - : dat.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(SabreTools.Models.Metadata.Machine.NameKey))! + : dat.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(SabreTools.Models.Metadata.Machine.NameKey))! , dat.GetName()!); // Parse the Dat if possible @@ -815,51 +815,51 @@ CREATE TABLE IF NOT EXISTS dat ( { hasItems = true; - if (!string.IsNullOrWhiteSpace(disk.GetFieldValue(SabreTools.Models.Metadata.Disk.MD5Key))) - md5query += $" (\"{disk.GetFieldValue(SabreTools.Models.Metadata.Disk.MD5Key)}\"),"; + if (!string.IsNullOrWhiteSpace(disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.MD5Key))) + md5query += $" (\"{disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.MD5Key)}\"),"; - if (!string.IsNullOrWhiteSpace(disk.GetFieldValue(SabreTools.Models.Metadata.Disk.SHA1Key))) + if (!string.IsNullOrWhiteSpace(disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.SHA1Key))) { - sha1query += $" (\"{disk.GetFieldValue(SabreTools.Models.Metadata.Disk.SHA1Key)}\"),"; + sha1query += $" (\"{disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.SHA1Key)}\"),"; - if (!string.IsNullOrWhiteSpace(disk.GetFieldValue(SabreTools.Models.Metadata.Disk.MD5Key))) - md5sha1query += $" (\"{disk.GetFieldValue(SabreTools.Models.Metadata.Disk.MD5Key)}\", \"{disk.GetFieldValue(SabreTools.Models.Metadata.Disk.SHA1Key)}\"),"; + if (!string.IsNullOrWhiteSpace(disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.MD5Key))) + md5sha1query += $" (\"{disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.MD5Key)}\", \"{disk.GetStringFieldValue(SabreTools.Models.Metadata.Disk.SHA1Key)}\"),"; } } else if (datItem is Media media) { hasItems = true; - if (!string.IsNullOrWhiteSpace(media.GetFieldValue(SabreTools.Models.Metadata.Media.MD5Key))) - md5query += $" (\"{media.GetFieldValue(SabreTools.Models.Metadata.Media.MD5Key)}\"),"; + if (!string.IsNullOrWhiteSpace(media.GetStringFieldValue(SabreTools.Models.Metadata.Media.MD5Key))) + md5query += $" (\"{media.GetStringFieldValue(SabreTools.Models.Metadata.Media.MD5Key)}\"),"; - if (!string.IsNullOrWhiteSpace(media.GetFieldValue(SabreTools.Models.Metadata.Media.SHA1Key))) + if (!string.IsNullOrWhiteSpace(media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA1Key))) { - sha1query += $" (\"{media.GetFieldValue(SabreTools.Models.Metadata.Media.SHA1Key)}\"),"; + sha1query += $" (\"{media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA1Key)}\"),"; - if (!string.IsNullOrWhiteSpace(media.GetFieldValue(SabreTools.Models.Metadata.Media.MD5Key))) - md5sha1query += $" (\"{media.GetFieldValue(SabreTools.Models.Metadata.Media.MD5Key)}\", \"{media.GetFieldValue(SabreTools.Models.Metadata.Media.SHA1Key)}\"),"; + if (!string.IsNullOrWhiteSpace(media.GetStringFieldValue(SabreTools.Models.Metadata.Media.MD5Key))) + md5sha1query += $" (\"{media.GetStringFieldValue(SabreTools.Models.Metadata.Media.MD5Key)}\", \"{media.GetStringFieldValue(SabreTools.Models.Metadata.Media.SHA1Key)}\"),"; } } else if (datItem is Rom rom) { hasItems = true; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) - crcquery += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\"),"; + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) + crcquery += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\"),"; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key))) - md5query += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\"),"; + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key))) + md5query += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\"),"; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key))) + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key))) { - sha1query += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; + sha1query += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) - crcsha1query += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\", \"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) + crcsha1query += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\", \"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key))) - md5sha1query += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\", \"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key))) + md5sha1query += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\", \"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; } } } @@ -899,7 +899,7 @@ CREATE TABLE IF NOT EXISTS dat ( // Only add the DAT if it's non-empty if (hasItems) { - string datquery = $"INSERT OR IGNORE INTO dat (hash) VALUES (\"{dat.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\")"; + string datquery = $"INSERT OR IGNORE INTO dat (hash) VALUES (\"{dat.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\")"; slc = new SqliteCommand(datquery, dbc); slc.ExecuteNonQuery(); } diff --git a/RombaSharp/Features/RescanDepots.cs b/RombaSharp/Features/RescanDepots.cs index 13a39cb7..c2ec09ba 100644 --- a/RombaSharp/Features/RescanDepots.cs +++ b/RombaSharp/Features/RescanDepots.cs @@ -94,28 +94,28 @@ namespace RombaSharp.Features foreach (Rom rom in roms) { - if (hashes.Contains(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)!)) + if (hashes.Contains(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)!)) { - dupehashes.Add(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)!); - hashes.Remove(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)!); + dupehashes.Add(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)!); + hashes.Remove(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)!); } - else if (!dupehashes.Contains(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)!)) + else if (!dupehashes.Contains(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)!)) { - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) - crcquery += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\"),"; + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) + crcquery += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\"),"; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key))) - md5query += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\"),"; + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key))) + md5query += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\"),"; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key))) + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key))) { - sha1query += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\", \"{depotname}\"),"; + sha1query += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\", \"{depotname}\"),"; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) - crcsha1query += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\", \"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey))) + crcsha1query += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.CRCKey)}\", \"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; - if (!string.IsNullOrWhiteSpace(rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key))) - md5sha1query += $" (\"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\", \"{rom.GetFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; + if (!string.IsNullOrWhiteSpace(rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key))) + md5sha1query += $" (\"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.MD5Key)}\", \"{rom.GetStringFieldValue(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),"; } } } diff --git a/SabreTools.DatFiles/DatFile.FromMetadata.cs b/SabreTools.DatFiles/DatFile.FromMetadata.cs index 4401c290..0265b9eb 100644 --- a/SabreTools.DatFiles/DatFile.FromMetadata.cs +++ b/SabreTools.DatFiles/DatFile.FromMetadata.cs @@ -216,81 +216,81 @@ namespace SabreTools.DatFiles } // Selectively set all possible fields -- TODO: Figure out how to make this less manual - if (Header.GetFieldValue(Models.Metadata.Header.AuthorKey) == null) - Header.SetFieldValue(Models.Metadata.Header.AuthorKey, header.GetFieldValue(Models.Metadata.Header.AuthorKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.AuthorKey) == null) + Header.SetFieldValue(Models.Metadata.Header.AuthorKey, header.GetStringFieldValue(Models.Metadata.Header.AuthorKey)); if (Header.GetFieldValue(Models.Metadata.Header.BiosModeKey) == MergingFlag.None) Header.SetFieldValue(Models.Metadata.Header.BiosModeKey, header.GetFieldValue(Models.Metadata.Header.BiosModeKey)); - if (Header.GetFieldValue(Models.Metadata.Header.BuildKey) == null) - Header.SetFieldValue(Models.Metadata.Header.BuildKey, header.GetFieldValue(Models.Metadata.Header.BuildKey)); - if (Header.GetFieldValue(Models.Metadata.Header.CategoryKey) == null) - Header.SetFieldValue(Models.Metadata.Header.CategoryKey, header.GetFieldValue(Models.Metadata.Header.CategoryKey)); - if (Header.GetFieldValue(Models.Metadata.Header.CommentKey) == null) - Header.SetFieldValue(Models.Metadata.Header.CommentKey, header.GetFieldValue(Models.Metadata.Header.CommentKey)); - if (Header.GetFieldValue(Models.Metadata.Header.DateKey) == null) - Header.SetFieldValue(Models.Metadata.Header.DateKey, header.GetFieldValue(Models.Metadata.Header.DateKey)); - if (Header.GetFieldValue(Models.Metadata.Header.DatVersionKey) == null) - Header.SetFieldValue(Models.Metadata.Header.DatVersionKey, header.GetFieldValue(Models.Metadata.Header.DatVersionKey)); - if (Header.GetFieldValue(Models.Metadata.Header.DebugKey) == null) - Header.SetFieldValue(Models.Metadata.Header.DebugKey, header.GetFieldValue(Models.Metadata.Header.DebugKey)); - if (Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) == null) - Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, header.GetFieldValue(Models.Metadata.Header.DescriptionKey)); - if (Header.GetFieldValue(Models.Metadata.Header.EmailKey) == null) - Header.SetFieldValue(Models.Metadata.Header.EmailKey, header.GetFieldValue(Models.Metadata.Header.EmailKey)); - if (Header.GetFieldValue(Models.Metadata.Header.EmulatorVersionKey) == null) - Header.SetFieldValue(Models.Metadata.Header.EmulatorVersionKey, header.GetFieldValue(Models.Metadata.Header.EmulatorVersionKey)); + 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) + Header.SetFieldValue(Models.Metadata.Header.CategoryKey, header.GetStringFieldValue(Models.Metadata.Header.CategoryKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.CommentKey) == null) + Header.SetFieldValue(Models.Metadata.Header.CommentKey, header.GetStringFieldValue(Models.Metadata.Header.CommentKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.DateKey) == null) + Header.SetFieldValue(Models.Metadata.Header.DateKey, header.GetStringFieldValue(Models.Metadata.Header.DateKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.DatVersionKey) == null) + Header.SetFieldValue(Models.Metadata.Header.DatVersionKey, header.GetStringFieldValue(Models.Metadata.Header.DatVersionKey)); + if (Header.GetBoolFieldValue(Models.Metadata.Header.DebugKey) == null) + Header.SetFieldValue(Models.Metadata.Header.DebugKey, header.GetBoolFieldValue(Models.Metadata.Header.DebugKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) == null) + Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.EmailKey) == null) + 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.GetFieldValue(Models.Metadata.Header.ForceMergingKey) == MergingFlag.None) Header.SetFieldValue(Models.Metadata.Header.ForceMergingKey, header.GetFieldValue(Models.Metadata.Header.ForceMergingKey)); if (Header.GetFieldValue(Models.Metadata.Header.ForceNodumpKey) == NodumpFlag.None) Header.SetFieldValue(Models.Metadata.Header.ForceNodumpKey, header.GetFieldValue(Models.Metadata.Header.ForceNodumpKey)); if (Header.GetFieldValue(Models.Metadata.Header.ForcePackingKey) == PackingFlag.None) Header.SetFieldValue(Models.Metadata.Header.ForcePackingKey, header.GetFieldValue(Models.Metadata.Header.ForcePackingKey)); - if (Header.GetFieldValue(Models.Metadata.Header.HeaderKey) == null) - Header.SetFieldValue(Models.Metadata.Header.HeaderKey, header.GetFieldValue(Models.Metadata.Header.HeaderKey)); - if (Header.GetFieldValue(Models.Metadata.Header.HomepageKey) == null) - Header.SetFieldValue(Models.Metadata.Header.HomepageKey, header.GetFieldValue(Models.Metadata.Header.HomepageKey)); - if (Header.GetFieldValue(Models.Metadata.Header.IdKey) == null) - Header.SetFieldValue(Models.Metadata.Header.IdKey, header.GetFieldValue(Models.Metadata.Header.IdKey)); - if (Header.GetFieldValue(Models.Metadata.Header.ImFolderKey) == null) - Header.SetFieldValue(Models.Metadata.Header.ImFolderKey, header.GetFieldValue(Models.Metadata.Header.ImFolderKey)); - if (Header.GetFieldValue(Models.Metadata.Header.LockBiosModeKey) == null) - Header.SetFieldValue(Models.Metadata.Header.LockBiosModeKey, header.GetFieldValue(Models.Metadata.Header.LockBiosModeKey)); - if (Header.GetFieldValue(Models.Metadata.Header.LockRomModeKey) == null) - Header.SetFieldValue(Models.Metadata.Header.LockRomModeKey, header.GetFieldValue(Models.Metadata.Header.LockRomModeKey)); - if (Header.GetFieldValue(Models.Metadata.Header.LockSampleModeKey) == null) - Header.SetFieldValue(Models.Metadata.Header.LockSampleModeKey, header.GetFieldValue(Models.Metadata.Header.LockSampleModeKey)); - if (Header.GetFieldValue(Models.Metadata.Header.MameConfigKey) == null) - Header.SetFieldValue(Models.Metadata.Header.MameConfigKey, header.GetFieldValue(Models.Metadata.Header.MameConfigKey)); - if (Header.GetFieldValue(Models.Metadata.Header.NameKey) == null) - Header.SetFieldValue(Models.Metadata.Header.NameKey, header.GetFieldValue(Models.Metadata.Header.NameKey)); - if (Header.GetFieldValue(Models.Metadata.Header.PluginKey) == null) - Header.SetFieldValue(Models.Metadata.Header.PluginKey, header.GetFieldValue(Models.Metadata.Header.PluginKey)); - if (Header.GetFieldValue(Models.Metadata.Header.RefNameKey) == null) - Header.SetFieldValue(Models.Metadata.Header.RefNameKey, header.GetFieldValue(Models.Metadata.Header.RefNameKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey) == null) + Header.SetFieldValue(Models.Metadata.Header.HeaderKey, header.GetStringFieldValue(Models.Metadata.Header.HeaderKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.HomepageKey) == null) + Header.SetFieldValue(Models.Metadata.Header.HomepageKey, header.GetStringFieldValue(Models.Metadata.Header.HomepageKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.IdKey) == null) + Header.SetFieldValue(Models.Metadata.Header.IdKey, header.GetStringFieldValue(Models.Metadata.Header.IdKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.ImFolderKey) == null) + Header.SetFieldValue(Models.Metadata.Header.ImFolderKey, header.GetStringFieldValue(Models.Metadata.Header.ImFolderKey)); + if (Header.GetBoolFieldValue(Models.Metadata.Header.LockBiosModeKey) == null) + Header.SetFieldValue(Models.Metadata.Header.LockBiosModeKey, header.GetBoolFieldValue(Models.Metadata.Header.LockBiosModeKey)); + if (Header.GetBoolFieldValue(Models.Metadata.Header.LockRomModeKey) == null) + Header.SetFieldValue(Models.Metadata.Header.LockRomModeKey, header.GetBoolFieldValue(Models.Metadata.Header.LockRomModeKey)); + if (Header.GetBoolFieldValue(Models.Metadata.Header.LockSampleModeKey) == null) + Header.SetFieldValue(Models.Metadata.Header.LockSampleModeKey, header.GetBoolFieldValue(Models.Metadata.Header.LockSampleModeKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.MameConfigKey) == null) + Header.SetFieldValue(Models.Metadata.Header.MameConfigKey, header.GetStringFieldValue(Models.Metadata.Header.MameConfigKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.NameKey) == null) + Header.SetFieldValue(Models.Metadata.Header.NameKey, header.GetStringFieldValue(Models.Metadata.Header.NameKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.PluginKey) == null) + 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.GetFieldValue(Models.Metadata.Header.RomModeKey) == MergingFlag.None) Header.SetFieldValue(Models.Metadata.Header.RomModeKey, header.GetFieldValue(Models.Metadata.Header.RomModeKey)); - if (Header.GetFieldValue(Models.Metadata.Header.RomTitleKey) == null) - Header.SetFieldValue(Models.Metadata.Header.RomTitleKey, header.GetFieldValue(Models.Metadata.Header.RomTitleKey)); - if (Header.GetFieldValue(Models.Metadata.Header.RootDirKey) == null) - Header.SetFieldValue(Models.Metadata.Header.RootDirKey, header.GetFieldValue(Models.Metadata.Header.RootDirKey)); + 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.GetFieldValue(Models.Metadata.Header.SampleModeKey) == MergingFlag.None) Header.SetFieldValue(Models.Metadata.Header.SampleModeKey, header.GetFieldValue(Models.Metadata.Header.SampleModeKey)); - if (Header.GetFieldValue(Models.Metadata.Header.ScreenshotsHeightKey) == null) - Header.SetFieldValue(Models.Metadata.Header.ScreenshotsHeightKey, header.GetFieldValue(Models.Metadata.Header.ScreenshotsHeightKey)); - if (Header.GetFieldValue(Models.Metadata.Header.ScreenshotsWidthKey) == null) - Header.SetFieldValue(Models.Metadata.Header.ScreenshotsWidthKey, header.GetFieldValue(Models.Metadata.Header.ScreenshotsWidthKey)); - if (Header.GetFieldValue(Models.Metadata.Header.SystemKey) == null) - Header.SetFieldValue(Models.Metadata.Header.SystemKey, header.GetFieldValue(Models.Metadata.Header.SystemKey)); - if (Header.GetFieldValue(Models.Metadata.Header.TypeKey) == null) - Header.SetFieldValue(Models.Metadata.Header.TypeKey, header.GetFieldValue(Models.Metadata.Header.TypeKey)); - if (Header.GetFieldValue(Models.Metadata.Header.UrlKey) == null) - Header.SetFieldValue(Models.Metadata.Header.UrlKey, header.GetFieldValue(Models.Metadata.Header.UrlKey)); - if (Header.GetFieldValue(Models.Metadata.Header.VersionKey) == null) - Header.SetFieldValue(Models.Metadata.Header.VersionKey, header.GetFieldValue(Models.Metadata.Header.VersionKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.ScreenshotsHeightKey) == null) + Header.SetFieldValue(Models.Metadata.Header.ScreenshotsHeightKey, header.GetStringFieldValue(Models.Metadata.Header.ScreenshotsHeightKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.ScreenshotsWidthKey) == null) + Header.SetFieldValue(Models.Metadata.Header.ScreenshotsWidthKey, header.GetStringFieldValue(Models.Metadata.Header.ScreenshotsWidthKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.SystemKey) == null) + Header.SetFieldValue(Models.Metadata.Header.SystemKey, header.GetStringFieldValue(Models.Metadata.Header.SystemKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.TypeKey) == null) + Header.SetFieldValue(Models.Metadata.Header.TypeKey, header.GetStringFieldValue(Models.Metadata.Header.TypeKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.UrlKey) == null) + Header.SetFieldValue(Models.Metadata.Header.UrlKey, header.GetStringFieldValue(Models.Metadata.Header.UrlKey)); + if (Header.GetStringFieldValue(Models.Metadata.Header.VersionKey) == null) + Header.SetFieldValue(Models.Metadata.Header.VersionKey, header.GetStringFieldValue(Models.Metadata.Header.VersionKey)); // Handle implied SuperDAT - if (Header.GetFieldValue(Models.Metadata.Header.NameKey)?.Contains(" - SuperDAT") == true && keep) + if (Header.GetStringFieldValue(Models.Metadata.Header.NameKey)?.Contains(" - SuperDAT") == true && keep) { - if (Header.GetFieldValue(Models.Metadata.Header.TypeKey) == null) + if (Header.GetStringFieldValue(Models.Metadata.Header.TypeKey) == null) Header.SetFieldValue(Models.Metadata.Header.TypeKey, "SuperDAT"); } } @@ -895,7 +895,7 @@ namespace SabreTools.DatFiles continue; } - string name = $"{machine.GetFieldValue(Models.Metadata.Machine.NameKey)}_{index++}{(!string.IsNullOrEmpty(rom!.ReadString(Models.Metadata.Rom.RemarkKey)) ? $" {rom.ReadString(Models.Metadata.Rom.RemarkKey)}" : string.Empty)}"; + string name = $"{machine.GetStringFieldValue(Models.Metadata.Machine.NameKey)}_{index++}{(!string.IsNullOrEmpty(rom!.ReadString(Models.Metadata.Rom.RemarkKey)) ? $" {rom.ReadString(Models.Metadata.Rom.RemarkKey)}" : string.Empty)}"; var item = new DatItems.Formats.Rom(); item.SetName(name); diff --git a/SabreTools.DatFiles/DatFile.ToMetadata.cs b/SabreTools.DatFiles/DatFile.ToMetadata.cs index 40976da4..8f5dfcd1 100644 --- a/SabreTools.DatFiles/DatFile.ToMetadata.cs +++ b/SabreTools.DatFiles/DatFile.ToMetadata.cs @@ -179,9 +179,9 @@ namespace SabreTools.DatFiles { var newDat = new Models.OfflineList.NewDat { - DatVersionUrl = Header.GetFieldValue("DATVERSIONURL"), + DatVersionUrl = Header.GetStringFieldValue("DATVERSIONURL"), //DatUrl = Header.GetFieldValue("DATURL"), // TODO: Add to internal model - ImUrl = Header.GetFieldValue("IMURL"), + ImUrl = Header.GetStringFieldValue("IMURL"), }; header[Models.Metadata.Header.NewDatKey] = newDat; } diff --git a/SabreTools.DatFiles/DatFile.cs b/SabreTools.DatFiles/DatFile.cs index 1047978c..8611ff35 100644 --- a/SabreTools.DatFiles/DatFile.cs +++ b/SabreTools.DatFiles/DatFile.cs @@ -128,23 +128,23 @@ namespace SabreTools.DatFiles public void FillHeaderFromPath(string path, bool bare) { // If the description is defined but not the name, set the name from the description - if (string.IsNullOrEmpty(Header.GetFieldValue(Models.Metadata.Header.NameKey)) && !string.IsNullOrEmpty(Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) + if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.NameKey)) && !string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) { - Header.SetFieldValue(Models.Metadata.Header.NameKey, Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)); + Header.SetFieldValue(Models.Metadata.Header.NameKey, Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)); } // If the name is defined but not the description, set the description from the name - else if (!string.IsNullOrEmpty(Header.GetFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) + else if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) { - Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, Header.GetFieldValue(Models.Metadata.Header.NameKey) + (bare ? string.Empty : $" ({Header.GetFieldValue(Models.Metadata.Header.DateKey)})")); + Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + (bare ? string.Empty : $" ({Header.GetStringFieldValue(Models.Metadata.Header.DateKey)})")); } // If neither the name or description are defined, set them from the automatic values - else if (string.IsNullOrEmpty(Header.GetFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) + else if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) { string[] splitpath = path.TrimEnd(Path.DirectorySeparatorChar).Split(Path.DirectorySeparatorChar); Header.SetFieldValue(Models.Metadata.Header.NameKey, splitpath.Last()); - Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, Header.GetFieldValue(Models.Metadata.Header.NameKey) + (bare ? string.Empty : $" ({Header.GetFieldValue(Models.Metadata.Header.DateKey)})")); + Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + (bare ? string.Empty : $" ({Header.GetStringFieldValue(Models.Metadata.Header.DateKey)})")); } } @@ -222,8 +222,8 @@ namespace SabreTools.DatFiles { // If the file has aboslutely no hashes, skip and log if (disk.GetFieldValue(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump - && string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key))) + && 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); @@ -234,10 +234,10 @@ namespace SabreTools.DatFiles if (item is Media media) { // If the file has aboslutely no hashes, skip and log - if (string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.MD5Key)) - && string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA1Key)) - && string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA256Key)) - && string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SpamSumKey))) + if (string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.MD5Key)) + && string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key)) + && string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA256Key)) + && string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SpamSumKey))) { logger.Verbose($"Incomplete entry for '{media.GetName()}' will be output as nodump"); } @@ -246,18 +246,18 @@ namespace SabreTools.DatFiles } else if (item is Rom rom) { - long? size = NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)); + long? size = rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey); // If we have the case where there is SHA-1 and nothing else, we don't fill in any other part of the data if (size == null && !rom.HasHashes()) { // No-op, just catch it so it doesn't go further - logger.Verbose($"{Header.GetFieldValue(DatHeader.FileNameKey)}: Entry with only SHA-1 found - '{rom.GetName()}'"); + logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Entry with only SHA-1 found - '{rom.GetName()}'"); } // If we have a rom and it's missing size AND the hashes match a 0-byte file, fill in the rest of the info else if ((size == 0 || size == null) - && (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) || rom.HasZeroHash())) + && (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) || rom.HasZeroHash())) { // TODO: All instances of Hash.DeepHashes should be made into 0x0 eventually rom.SetFieldValue(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString()); @@ -273,7 +273,7 @@ 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)) { - logger.Verbose($"{Header.GetFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.GetName()}' will be output as nodump"); + logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.GetName()}' will be output as nodump"); rom.SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.Nodump); } @@ -282,7 +282,7 @@ namespace SabreTools.DatFiles && size != null && size > 0 && !rom.HasHashes()) { - logger.Verbose($"{Header.GetFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.GetName()}' will be output as nodump"); + logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.GetName()}' will be output as nodump"); rom.SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.Nodump); } @@ -368,7 +368,7 @@ namespace SabreTools.DatFiles { // Initialize strings string fix, - game = item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, + game = item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, name = item.GetName() ?? item.GetFieldValue(Models.Metadata.DatItem.TypeKey).ToString(), crc = string.Empty, md5 = string.Empty, @@ -381,35 +381,35 @@ namespace SabreTools.DatFiles // If we have a prefix if (prefix) - fix = Header.GetFieldValue(DatHeader.PrefixKey) + (Header.GetFieldValue(DatHeader.QuotesKey) ? "\"" : string.Empty); + fix = Header.GetStringFieldValue(DatHeader.PrefixKey) + (Header.GetBoolFieldValue(DatHeader.QuotesKey) == true ? "\"" : string.Empty); // If we have a postfix else - fix = (Header.GetFieldValue(DatHeader.QuotesKey) ? "\"" : string.Empty) + Header.GetFieldValue(DatHeader.PostfixKey); + fix = (Header.GetBoolFieldValue(DatHeader.QuotesKey) == true ? "\"" : string.Empty) + Header.GetStringFieldValue(DatHeader.PostfixKey); // Ensure we have the proper values for replacement if (item is Disk disk) { - md5 = disk.GetFieldValue(Models.Metadata.Disk.MD5Key) ?? string.Empty; - sha1 = disk.GetFieldValue(Models.Metadata.Disk.SHA1Key) ?? string.Empty; + md5 = disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key) ?? string.Empty; + sha1 = disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key) ?? string.Empty; } else if (item is Media media) { - md5 = media.GetFieldValue(Models.Metadata.Media.MD5Key) ?? string.Empty; - sha1 = media.GetFieldValue(Models.Metadata.Media.SHA1Key) ?? string.Empty; - sha256 = media.GetFieldValue(Models.Metadata.Media.SHA256Key) ?? string.Empty; - spamsum = media.GetFieldValue(Models.Metadata.Media.SpamSumKey) ?? string.Empty; + md5 = media.GetStringFieldValue(Models.Metadata.Media.MD5Key) ?? string.Empty; + sha1 = media.GetStringFieldValue(Models.Metadata.Media.SHA1Key) ?? string.Empty; + sha256 = media.GetStringFieldValue(Models.Metadata.Media.SHA256Key) ?? string.Empty; + spamsum = media.GetStringFieldValue(Models.Metadata.Media.SpamSumKey) ?? string.Empty; } else if (item is Rom rom) { - crc = rom.GetFieldValue(Models.Metadata.Rom.CRCKey) ?? string.Empty; - md5 = rom.GetFieldValue(Models.Metadata.Rom.MD5Key) ?? string.Empty; - sha1 = rom.GetFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty; - sha256 = rom.GetFieldValue(Models.Metadata.Rom.SHA256Key) ?? string.Empty; - sha384 = rom.GetFieldValue(Models.Metadata.Rom.SHA384Key) ?? string.Empty; - sha512 = rom.GetFieldValue(Models.Metadata.Rom.SHA512Key) ?? string.Empty; - size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey) ?? string.Empty; - spamsum = rom.GetFieldValue(Models.Metadata.Rom.SpamSumKey) ?? string.Empty; + crc = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) ?? string.Empty; + md5 = rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) ?? string.Empty; + sha1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty; + sha256 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) ?? string.Empty; + sha384 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key) ?? string.Empty; + sha512 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key) ?? string.Empty; + size = rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString() ?? string.Empty; + spamsum = rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey) ?? string.Empty; } // Now do bulk replacement where possible @@ -417,9 +417,9 @@ namespace SabreTools.DatFiles .Replace("%game%", game) .Replace("%machine%", game) .Replace("%name%", name) - .Replace("%manufacturer%", item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.ManufacturerKey) ?? string.Empty) - .Replace("%publisher%", item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.PublisherKey) ?? string.Empty) - .Replace("%category%", item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty) + .Replace("%manufacturer%", item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.ManufacturerKey) ?? string.Empty) + .Replace("%publisher%", item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.PublisherKey) ?? string.Empty) + .Replace("%category%", item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty) .Replace("%crc%", crc) .Replace("%md5%", md5) .Replace("%sha1%", sha1) @@ -441,17 +441,17 @@ namespace SabreTools.DatFiles protected void ProcessItemName(DatItem item, bool forceRemoveQuotes, bool forceRomName = true) { // Backup relevant values and set new ones accordingly - bool quotesBackup = Header.GetFieldValue(DatHeader.QuotesKey); - bool useRomNameBackup = Header.GetFieldValue(DatHeader.UseRomNameKey); + bool? quotesBackup = Header.GetBoolFieldValue(DatHeader.QuotesKey); + bool? useRomNameBackup = Header.GetBoolFieldValue(DatHeader.UseRomNameKey); if (forceRemoveQuotes) Header.SetFieldValue(DatHeader.QuotesKey, false); if (forceRomName) Header.SetFieldValue(DatHeader.UseRomNameKey, true); // Get the name to update - string? name = (Header.GetFieldValue(DatHeader.UseRomNameKey) + string? name = (Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true ? item.GetName() - : item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)) ?? string.Empty; + : item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)) ?? string.Empty; // Create the proper Prefix and Postfix string pre = CreatePrefixPostfix(item, true); @@ -463,27 +463,27 @@ namespace SabreTools.DatFiles if (item is Disk disk) { // We can only write out if there's a SHA-1 - if (!string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key))) + if (!string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))) { - name = Utilities.GetDepotPath(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key), Header.GetFieldValue(DatHeader.OutputDepotKey)!.Depth)?.Replace('\\', '/'); + name = Utilities.GetDepotPath(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key), Header.GetFieldValue(DatHeader.OutputDepotKey)!.Depth)?.Replace('\\', '/'); item.SetName($"{pre}{name}{post}"); } } else if (item is Media media) { // We can only write out if there's a SHA-1 - if (!string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA1Key))) + if (!string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key))) { - name = Utilities.GetDepotPath(media.GetFieldValue(Models.Metadata.Media.SHA1Key), Header.GetFieldValue(DatHeader.OutputDepotKey)!.Depth)?.Replace('\\', '/'); + name = Utilities.GetDepotPath(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key), Header.GetFieldValue(DatHeader.OutputDepotKey)!.Depth)?.Replace('\\', '/'); item.SetName($"{pre}{name}{post}"); } } else if (item is Rom rom) { // We can only write out if there's a SHA-1 - if (!string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key))) + if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key))) { - name = Utilities.GetDepotPath(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key), Header.GetFieldValue(DatHeader.OutputDepotKey)!.Depth)?.Replace('\\', '/'); + name = Utilities.GetDepotPath(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key), Header.GetFieldValue(DatHeader.OutputDepotKey)!.Depth)?.Replace('\\', '/'); item.SetName($"{pre}{name}{post}"); } } @@ -491,38 +491,38 @@ namespace SabreTools.DatFiles return; } - if (!string.IsNullOrEmpty(Header.GetFieldValue(DatHeader.ReplaceExtensionKey)) || Header.GetFieldValue(DatHeader.RemoveExtensionKey)) + if (!string.IsNullOrEmpty(Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey)) || Header.GetBoolFieldValue(DatHeader.RemoveExtensionKey) == true) { - if (Header.GetFieldValue(DatHeader.RemoveExtensionKey)) + if (Header.GetBoolFieldValue(DatHeader.RemoveExtensionKey) == true) Header.SetFieldValue(DatHeader.ReplaceExtensionKey, string.Empty); string? dir = Path.GetDirectoryName(name); if (dir != null) { dir = dir.TrimStart(Path.DirectorySeparatorChar); - name = Path.Combine(dir, Path.GetFileNameWithoutExtension(name) + Header.GetFieldValue(DatHeader.ReplaceExtensionKey)); + name = Path.Combine(dir, Path.GetFileNameWithoutExtension(name) + Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey)); } } - if (!string.IsNullOrEmpty(Header.GetFieldValue(DatHeader.AddExtensionKey))) - name += Header.GetFieldValue(DatHeader.AddExtensionKey); + if (!string.IsNullOrEmpty(Header.GetStringFieldValue(DatHeader.AddExtensionKey))) + name += Header.GetStringFieldValue(DatHeader.AddExtensionKey); - if (Header.GetFieldValue(DatHeader.UseRomNameKey) && Header.GetFieldValue(DatHeader.GameNameKey)) - name = Path.Combine(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, name); + if (Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true && Header.GetBoolFieldValue(DatHeader.GameNameKey) == true) + name = Path.Combine(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, name); // Now assign back the formatted name name = $"{pre}{name}{post}"; - if (Header.GetFieldValue(DatHeader.UseRomNameKey)) + if (Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true) item.SetName(name); else if (item.GetFieldValue(DatItem.MachineKey) != null) item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, name); // Restore all relevant values if (forceRemoveQuotes) - Header.SetFieldValue(DatHeader.QuotesKey, quotesBackup); + Header.SetFieldValue(DatHeader.QuotesKey, quotesBackup); if (forceRomName) - Header.SetFieldValue(DatHeader.UseRomNameKey, useRomNameBackup); + Header.SetFieldValue(DatHeader.UseRomNameKey, useRomNameBackup); } /// @@ -537,19 +537,19 @@ namespace SabreTools.DatFiles return datItem; // If the Rom has "null" characteristics, ensure all fields - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null && rom.GetFieldValue(Models.Metadata.Rom.CRCKey) == "null") + if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null && rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null") { - logger.Verbose($"Empty folder found: {datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}"); + logger.Verbose($"Empty folder found: {datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)}"); rom.SetName(rom.GetName() == "null" ? "-" : rom.GetName()); rom.SetFieldValue(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString()); - rom.SetFieldValue(Models.Metadata.Rom.CRCKey, rom.GetFieldValue(Models.Metadata.Rom.CRCKey) == "null" ? Constants.CRCZero : null); - rom.SetFieldValue(Models.Metadata.Rom.MD5Key, rom.GetFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? Constants.MD5Zero : null); - rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, rom.GetFieldValue(Models.Metadata.Rom.SHA1Key) == "null" ? Constants.SHA1Zero : null); - rom.SetFieldValue(Models.Metadata.Rom.SHA256Key, rom.GetFieldValue(Models.Metadata.Rom.SHA256Key) == "null" ? Constants.SHA256Zero : null); - rom.SetFieldValue(Models.Metadata.Rom.SHA384Key, rom.GetFieldValue(Models.Metadata.Rom.SHA384Key) == "null" ? Constants.SHA384Zero : null); - rom.SetFieldValue(Models.Metadata.Rom.SHA512Key, rom.GetFieldValue(Models.Metadata.Rom.SHA512Key) == "null" ? Constants.SHA512Zero : null); - rom.SetFieldValue(Models.Metadata.Rom.SpamSumKey, rom.GetFieldValue(Models.Metadata.Rom.SpamSumKey) == "null" ? Constants.SpamSumZero : null); + rom.SetFieldValue(Models.Metadata.Rom.CRCKey, rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null" ? Constants.CRCZero : null); + rom.SetFieldValue(Models.Metadata.Rom.MD5Key, rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? Constants.MD5Zero : null); + rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) == "null" ? Constants.SHA1Zero : null); + rom.SetFieldValue(Models.Metadata.Rom.SHA256Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) == "null" ? Constants.SHA256Zero : null); + rom.SetFieldValue(Models.Metadata.Rom.SHA384Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key) == "null" ? Constants.SHA384Zero : null); + rom.SetFieldValue(Models.Metadata.Rom.SHA512Key, rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key) == "null" ? Constants.SHA512Zero : null); + rom.SetFieldValue(Models.Metadata.Rom.SpamSumKey, rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey) == "null" ? Constants.SpamSumZero : null); } return rom; @@ -607,7 +607,7 @@ namespace SabreTools.DatFiles } // If the item is supposed to be removed, we ignore - if (datItem.GetFieldValue(DatItem.RemoveKey) == true) + if (datItem.GetBoolFieldValue(DatItem.RemoveKey) == true) { string itemString = JsonConvert.SerializeObject(datItem, Formatting.None); logger?.Verbose($"Item '{itemString}' was skipped because it was marked for removal"); @@ -626,7 +626,7 @@ namespace SabreTools.DatFiles if (ignoreBlanks && datItem is Rom rom) { // If we have a 0-size or blank rom, then we ignore - long? size = NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)); + long? size = rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey); if (size == 0 || size == null) { string itemString = JsonConvert.SerializeObject(datItem, Formatting.None); diff --git a/SabreTools.DatFiles/DatHeader.cs b/SabreTools.DatFiles/DatHeader.cs index 01aec6e6..da4c9a28 100644 --- a/SabreTools.DatFiles/DatHeader.cs +++ b/SabreTools.DatFiles/DatHeader.cs @@ -7,6 +7,7 @@ using SabreTools.Core; using SabreTools.Core.Tools; using SabreTools.DatFiles.Formats; using SabreTools.Filter; +using SabreTools.Serialization; namespace SabreTools.DatFiles { @@ -107,9 +108,9 @@ namespace SabreTools.DatFiles { get { - return GetFieldValue("DATVERSIONURL") != null + return GetStringFieldValue("DATVERSIONURL") != null //&& GetFieldValue("DATURL") != null // TODO: Add to internal model - && GetFieldValue("IMURL") != null; + && GetStringFieldValue("IMURL") != null; } } @@ -156,13 +157,88 @@ namespace SabreTools.DatFiles public T? GetFieldValue(string? fieldName) { // Invalid field cannot be processed - if (string.IsNullOrEmpty(fieldName)) + if (string.IsNullOrEmpty(fieldName) || !_header.ContainsKey(fieldName!)) return default; // Get the value based on the type return _header.Read(fieldName!); } + /// + /// Get the value from a field based on the type provided + /// + /// Field to retrieve + /// Value from the field, if possible + public bool? GetBoolFieldValue(string? fieldName) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName) || !_header.ContainsKey(fieldName!)) + return default; + + // Get the value based on the type + return _header.ReadBool(fieldName!); + } + + /// + /// Get the value from a field based on the type provided + /// + /// Field to retrieve + /// Value from the field, if possible + public double? GetDoubleFieldValue(string? fieldName) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName) || !_header.ContainsKey(fieldName!)) + return default; + + // Get the value based on the type + return _header.ReadDouble(fieldName!); + } + + /// + /// Get the value from a field based on the type provided + /// + /// Field to retrieve + /// Value from the field, if possible + public long? GetInt64FieldValue(string? fieldName) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName) || !_header.ContainsKey(fieldName!)) + return default; + + // Get the value based on the type + return _header.ReadLong(fieldName!); + } + + /// + /// Get the value from a field based on the type provided + /// + /// Field to retrieve + /// Value from the field, if possible + public string? GetStringFieldValue(string? fieldName) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName) || !_header.ContainsKey(fieldName!)) + return default; + + // Get the value based on the type + return _header.ReadString(fieldName!); + } + + /// + /// Get the value from a field based on the type provided + /// + /// Field to retrieve + /// Value from the field, if possible + public string[]? GetStringArrayFieldValue(string? fieldName) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName) || !_header.ContainsKey(fieldName!)) + return default; + + // Get the value based on the type + return _header.ReadStringArray(fieldName!); + } + /// /// Set the value from a field based on the type provided /// @@ -196,51 +272,51 @@ namespace SabreTools.DatFiles public object Clone() { var header = new DatHeader(); - header.SetFieldValue(DatHeader.AddExtensionKey, GetFieldValue(DatHeader.AddExtensionKey)); - header.SetFieldValue(Models.Metadata.Header.AuthorKey, GetFieldValue(Models.Metadata.Header.AuthorKey)); + header.SetFieldValue(DatHeader.AddExtensionKey, GetStringFieldValue(DatHeader.AddExtensionKey)); + header.SetFieldValue(Models.Metadata.Header.AuthorKey, GetStringFieldValue(Models.Metadata.Header.AuthorKey)); header.SetFieldValue(Models.Metadata.Header.BiosModeKey, GetFieldValue(Models.Metadata.Header.BiosModeKey)); - header.SetFieldValue(Models.Metadata.Header.BuildKey, GetFieldValue(Models.Metadata.Header.BuildKey)); - header.SetFieldValue(Models.Metadata.Header.CanOpenKey, GetFieldValue(Models.Metadata.Header.CanOpenKey)); // TODO: Perform a deep clone - header.SetFieldValue(Models.Metadata.Header.CategoryKey, GetFieldValue(Models.Metadata.Header.CategoryKey)); - header.SetFieldValue(Models.Metadata.Header.CommentKey, GetFieldValue(Models.Metadata.Header.CommentKey)); - header.SetFieldValue(Models.Metadata.Header.DateKey, GetFieldValue(Models.Metadata.Header.DateKey)); + header.SetFieldValue(Models.Metadata.Header.BuildKey, GetStringFieldValue(Models.Metadata.Header.BuildKey)); + header.SetFieldValue(Models.Metadata.Header.CanOpenKey, GetStringArrayFieldValue(Models.Metadata.Header.CanOpenKey)); // TODO: Perform a deep clone + header.SetFieldValue(Models.Metadata.Header.CategoryKey, GetStringFieldValue(Models.Metadata.Header.CategoryKey)); + header.SetFieldValue(Models.Metadata.Header.CommentKey, GetStringFieldValue(Models.Metadata.Header.CommentKey)); + header.SetFieldValue(Models.Metadata.Header.DateKey, GetStringFieldValue(Models.Metadata.Header.DateKey)); header.SetFieldValue(DatHeader.DatFormatKey, GetFieldValue(DatHeader.DatFormatKey)); - header.SetFieldValue(Models.Metadata.Header.DatVersionKey, GetFieldValue(Models.Metadata.Header.DatVersionKey)); - header.SetFieldValue(Models.Metadata.Header.DebugKey, GetFieldValue(Models.Metadata.Header.DebugKey)); - header.SetFieldValue(Models.Metadata.Header.DescriptionKey, GetFieldValue(Models.Metadata.Header.DescriptionKey)); - header.SetFieldValue(Models.Metadata.Header.EmailKey, GetFieldValue(Models.Metadata.Header.EmailKey)); - header.SetFieldValue(DatHeader.FileNameKey, GetFieldValue(DatHeader.FileNameKey)); + header.SetFieldValue(Models.Metadata.Header.DatVersionKey, GetStringFieldValue(Models.Metadata.Header.DatVersionKey)); + header.SetFieldValue(Models.Metadata.Header.DebugKey, GetBoolFieldValue(Models.Metadata.Header.DebugKey)); + header.SetFieldValue(Models.Metadata.Header.DescriptionKey, GetStringFieldValue(Models.Metadata.Header.DescriptionKey)); + header.SetFieldValue(Models.Metadata.Header.EmailKey, GetStringFieldValue(Models.Metadata.Header.EmailKey)); + header.SetFieldValue(DatHeader.FileNameKey, GetStringFieldValue(DatHeader.FileNameKey)); header.SetFieldValue(Models.Metadata.Header.ForceMergingKey, GetFieldValue(Models.Metadata.Header.ForceMergingKey)); header.SetFieldValue(Models.Metadata.Header.ForceNodumpKey, GetFieldValue(Models.Metadata.Header.ForceNodumpKey)); header.SetFieldValue(Models.Metadata.Header.ForcePackingKey, GetFieldValue(Models.Metadata.Header.ForcePackingKey)); - header.SetFieldValue(DatHeader.GameNameKey, GetFieldValue(DatHeader.GameNameKey)); - header.SetFieldValue(Models.Metadata.Header.HeaderKey, GetFieldValue(Models.Metadata.Header.HeaderKey)); - header.SetFieldValue(Models.Metadata.Header.HomepageKey, GetFieldValue(Models.Metadata.Header.HomepageKey)); - header.SetFieldValue(Models.Metadata.Header.IdKey, GetFieldValue(Models.Metadata.Header.IdKey)); + header.SetFieldValue(DatHeader.GameNameKey, GetBoolFieldValue(DatHeader.GameNameKey)); + header.SetFieldValue(Models.Metadata.Header.HeaderKey, GetStringFieldValue(Models.Metadata.Header.HeaderKey)); + header.SetFieldValue(Models.Metadata.Header.HomepageKey, GetStringFieldValue(Models.Metadata.Header.HomepageKey)); + header.SetFieldValue(Models.Metadata.Header.IdKey, GetStringFieldValue(Models.Metadata.Header.IdKey)); header.SetFieldValue(Models.Metadata.Header.InfosKey, GetFieldValue(Models.Metadata.Header.InfosKey)); // TODO: Perform a deep clone header.SetFieldValue(DatHeader.InputDepotKey, GetFieldValue(DatHeader.InputDepotKey)?.Clone() as DepotInformation); header.SetFieldValue(DatHeader.OutputDepotKey, GetFieldValue(DatHeader.OutputDepotKey)?.Clone() as DepotInformation); - header.SetFieldValue(Models.Metadata.Header.LockBiosModeKey, GetFieldValue(Models.Metadata.Header.LockBiosModeKey)); - header.SetFieldValue(Models.Metadata.Header.LockRomModeKey, GetFieldValue(Models.Metadata.Header.LockRomModeKey)); - header.SetFieldValue(Models.Metadata.Header.LockSampleModeKey, GetFieldValue(Models.Metadata.Header.LockSampleModeKey)); - header.SetFieldValue(Models.Metadata.Header.MameConfigKey, GetFieldValue(Models.Metadata.Header.MameConfigKey)); - header.SetFieldValue(Models.Metadata.Header.NameKey, GetFieldValue(Models.Metadata.Header.NameKey)); - header.SetFieldValue(DatHeader.PostfixKey, GetFieldValue(DatHeader.PostfixKey)); - header.SetFieldValue(DatHeader.PrefixKey, GetFieldValue(DatHeader.PrefixKey)); - header.SetFieldValue(DatHeader.QuotesKey, GetFieldValue(DatHeader.QuotesKey)); - header.SetFieldValue(DatHeader.RemoveExtensionKey, GetFieldValue(DatHeader.RemoveExtensionKey)); - header.SetFieldValue(DatHeader.ReplaceExtensionKey, GetFieldValue(DatHeader.ReplaceExtensionKey)); - header.SetFieldValue(Models.Metadata.Header.RomTitleKey, GetFieldValue(Models.Metadata.Header.RomTitleKey)); + header.SetFieldValue(Models.Metadata.Header.LockBiosModeKey, GetBoolFieldValue(Models.Metadata.Header.LockBiosModeKey)); + header.SetFieldValue(Models.Metadata.Header.LockRomModeKey, GetBoolFieldValue(Models.Metadata.Header.LockRomModeKey)); + header.SetFieldValue(Models.Metadata.Header.LockSampleModeKey, GetBoolFieldValue(Models.Metadata.Header.LockSampleModeKey)); + header.SetFieldValue(Models.Metadata.Header.MameConfigKey, GetStringFieldValue(Models.Metadata.Header.MameConfigKey)); + header.SetFieldValue(Models.Metadata.Header.NameKey, GetStringFieldValue(Models.Metadata.Header.NameKey)); + header.SetFieldValue(DatHeader.PostfixKey, GetStringFieldValue(DatHeader.PostfixKey)); + header.SetFieldValue(DatHeader.PrefixKey, GetStringFieldValue(DatHeader.PrefixKey)); + header.SetFieldValue(DatHeader.QuotesKey, GetBoolFieldValue(DatHeader.QuotesKey)); + header.SetFieldValue(DatHeader.RemoveExtensionKey, GetBoolFieldValue(DatHeader.RemoveExtensionKey)); + header.SetFieldValue(DatHeader.ReplaceExtensionKey, GetStringFieldValue(DatHeader.ReplaceExtensionKey)); + header.SetFieldValue(Models.Metadata.Header.RomTitleKey, GetStringFieldValue(Models.Metadata.Header.RomTitleKey)); header.SetFieldValue(Models.Metadata.Header.RomModeKey, GetFieldValue(Models.Metadata.Header.RomModeKey)); - header.SetFieldValue(Models.Metadata.Header.RootDirKey, GetFieldValue(Models.Metadata.Header.RootDirKey)); + header.SetFieldValue(Models.Metadata.Header.RootDirKey, GetStringFieldValue(Models.Metadata.Header.RootDirKey)); header.SetFieldValue(Models.Metadata.Header.SampleModeKey, GetFieldValue(Models.Metadata.Header.SampleModeKey)); - header.SetFieldValue(Models.Metadata.Header.ScreenshotsHeightKey, GetFieldValue(Models.Metadata.Header.ScreenshotsHeightKey)); - header.SetFieldValue(Models.Metadata.Header.ScreenshotsWidthKey, GetFieldValue(Models.Metadata.Header.ScreenshotsWidthKey)); - header.SetFieldValue(Models.Metadata.Header.SystemKey, GetFieldValue(Models.Metadata.Header.SystemKey)); - header.SetFieldValue(Models.Metadata.Header.TypeKey, GetFieldValue(Models.Metadata.Header.TypeKey)); - header.SetFieldValue(Models.Metadata.Header.UrlKey, GetFieldValue(Models.Metadata.Header.UrlKey)); - header.SetFieldValue(DatHeader.UseRomNameKey, GetFieldValue(DatHeader.UseRomNameKey)); - header.SetFieldValue(Models.Metadata.Header.VersionKey, GetFieldValue(Models.Metadata.Header.VersionKey)); + header.SetFieldValue(Models.Metadata.Header.ScreenshotsHeightKey, GetStringFieldValue(Models.Metadata.Header.ScreenshotsHeightKey)); + header.SetFieldValue(Models.Metadata.Header.ScreenshotsWidthKey, GetStringFieldValue(Models.Metadata.Header.ScreenshotsWidthKey)); + header.SetFieldValue(Models.Metadata.Header.SystemKey, GetStringFieldValue(Models.Metadata.Header.SystemKey)); + header.SetFieldValue(Models.Metadata.Header.TypeKey, GetStringFieldValue(Models.Metadata.Header.TypeKey)); + header.SetFieldValue(Models.Metadata.Header.UrlKey, GetStringFieldValue(Models.Metadata.Header.UrlKey)); + header.SetFieldValue(DatHeader.UseRomNameKey, GetBoolFieldValue(DatHeader.UseRomNameKey)); + header.SetFieldValue(Models.Metadata.Header.VersionKey, GetStringFieldValue(Models.Metadata.Header.VersionKey)); return header; } @@ -251,24 +327,24 @@ namespace SabreTools.DatFiles public DatHeader CloneStandard() { var header = new DatHeader(); - header.SetFieldValue(Models.Metadata.Header.AuthorKey, GetFieldValue(Models.Metadata.Header.AuthorKey)); - header.SetFieldValue(Models.Metadata.Header.CategoryKey, GetFieldValue(Models.Metadata.Header.CategoryKey)); - header.SetFieldValue(Models.Metadata.Header.CommentKey, GetFieldValue(Models.Metadata.Header.CommentKey)); - header.SetFieldValue(Models.Metadata.Header.DateKey, GetFieldValue(Models.Metadata.Header.DateKey)); + header.SetFieldValue(Models.Metadata.Header.AuthorKey, GetStringFieldValue(Models.Metadata.Header.AuthorKey)); + header.SetFieldValue(Models.Metadata.Header.CategoryKey, GetStringFieldValue(Models.Metadata.Header.CategoryKey)); + header.SetFieldValue(Models.Metadata.Header.CommentKey, GetStringFieldValue(Models.Metadata.Header.CommentKey)); + header.SetFieldValue(Models.Metadata.Header.DateKey, GetStringFieldValue(Models.Metadata.Header.DateKey)); header.SetFieldValue(DatHeader.DatFormatKey, GetFieldValue(DatHeader.DatFormatKey)); - header.SetFieldValue(Models.Metadata.Header.DescriptionKey, GetFieldValue(Models.Metadata.Header.DescriptionKey)); - header.SetFieldValue(Models.Metadata.Header.EmailKey, GetFieldValue(Models.Metadata.Header.EmailKey)); - header.SetFieldValue(DatHeader.FileNameKey, GetFieldValue(DatHeader.FileNameKey)); + header.SetFieldValue(Models.Metadata.Header.DescriptionKey, GetStringFieldValue(Models.Metadata.Header.DescriptionKey)); + header.SetFieldValue(Models.Metadata.Header.EmailKey, GetStringFieldValue(Models.Metadata.Header.EmailKey)); + header.SetFieldValue(DatHeader.FileNameKey, GetStringFieldValue(DatHeader.FileNameKey)); header.SetFieldValue(Models.Metadata.Header.ForceMergingKey, GetFieldValue(Models.Metadata.Header.ForceMergingKey)); header.SetFieldValue(Models.Metadata.Header.ForceNodumpKey, GetFieldValue(Models.Metadata.Header.ForceNodumpKey)); header.SetFieldValue(Models.Metadata.Header.ForcePackingKey, GetFieldValue(Models.Metadata.Header.ForcePackingKey)); - header.SetFieldValue(Models.Metadata.Header.HeaderKey, GetFieldValue(Models.Metadata.Header.HeaderKey)); - header.SetFieldValue(Models.Metadata.Header.HomepageKey, GetFieldValue(Models.Metadata.Header.HomepageKey)); - header.SetFieldValue(Models.Metadata.Header.NameKey, GetFieldValue(Models.Metadata.Header.NameKey)); - header.SetFieldValue(Models.Metadata.Header.RootDirKey, GetFieldValue(Models.Metadata.Header.RootDirKey)); - header.SetFieldValue(Models.Metadata.Header.TypeKey, GetFieldValue(Models.Metadata.Header.TypeKey)); - header.SetFieldValue(Models.Metadata.Header.UrlKey, GetFieldValue(Models.Metadata.Header.UrlKey)); - header.SetFieldValue(Models.Metadata.Header.VersionKey, GetFieldValue(Models.Metadata.Header.VersionKey)); + header.SetFieldValue(Models.Metadata.Header.HeaderKey, GetStringFieldValue(Models.Metadata.Header.HeaderKey)); + header.SetFieldValue(Models.Metadata.Header.HomepageKey, GetStringFieldValue(Models.Metadata.Header.HomepageKey)); + header.SetFieldValue(Models.Metadata.Header.NameKey, GetStringFieldValue(Models.Metadata.Header.NameKey)); + header.SetFieldValue(Models.Metadata.Header.RootDirKey, GetStringFieldValue(Models.Metadata.Header.RootDirKey)); + header.SetFieldValue(Models.Metadata.Header.TypeKey, GetStringFieldValue(Models.Metadata.Header.TypeKey)); + header.SetFieldValue(Models.Metadata.Header.UrlKey, GetStringFieldValue(Models.Metadata.Header.UrlKey)); + header.SetFieldValue(Models.Metadata.Header.VersionKey, GetStringFieldValue(Models.Metadata.Header.VersionKey)); return header; } @@ -279,17 +355,17 @@ namespace SabreTools.DatFiles public DatHeader CloneFiltering() { var header = new DatHeader(); - header.SetFieldValue(DatHeader.AddExtensionKey, GetFieldValue(DatHeader.AddExtensionKey)); + header.SetFieldValue(DatHeader.AddExtensionKey, GetStringFieldValue(DatHeader.AddExtensionKey)); header.SetFieldValue(DatHeader.DatFormatKey, GetFieldValue(DatHeader.DatFormatKey)); - header.SetFieldValue(DatHeader.GameNameKey, GetFieldValue(DatHeader.GameNameKey)); + header.SetFieldValue(DatHeader.GameNameKey, GetBoolFieldValue(DatHeader.GameNameKey)); header.SetFieldValue(DatHeader.InputDepotKey, GetFieldValue(DatHeader.InputDepotKey)?.Clone() as DepotInformation); header.SetFieldValue(DatHeader.OutputDepotKey, GetFieldValue(DatHeader.OutputDepotKey)?.Clone() as DepotInformation); - header.SetFieldValue(DatHeader.PostfixKey, GetFieldValue(DatHeader.PostfixKey)); - header.SetFieldValue(DatHeader.PrefixKey, GetFieldValue(DatHeader.PrefixKey)); - header.SetFieldValue(DatHeader.RemoveExtensionKey, GetFieldValue(DatHeader.RemoveExtensionKey)); - header.SetFieldValue(DatHeader.ReplaceExtensionKey, GetFieldValue(DatHeader.ReplaceExtensionKey)); - header.SetFieldValue(DatHeader.QuotesKey, GetFieldValue(DatHeader.QuotesKey)); - header.SetFieldValue(DatHeader.UseRomNameKey, GetFieldValue(DatHeader.UseRomNameKey)); + header.SetFieldValue(DatHeader.PostfixKey, GetStringFieldValue(DatHeader.PostfixKey)); + header.SetFieldValue(DatHeader.PrefixKey, GetStringFieldValue(DatHeader.PrefixKey)); + header.SetFieldValue(DatHeader.RemoveExtensionKey, GetBoolFieldValue(DatHeader.RemoveExtensionKey)); + header.SetFieldValue(DatHeader.ReplaceExtensionKey, GetStringFieldValue(DatHeader.ReplaceExtensionKey)); + header.SetFieldValue(DatHeader.QuotesKey, GetBoolFieldValue(DatHeader.QuotesKey)); + header.SetFieldValue(DatHeader.UseRomNameKey, GetBoolFieldValue(DatHeader.UseRomNameKey)); return header; } @@ -303,47 +379,47 @@ namespace SabreTools.DatFiles if (datHeader == null) return; - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(DatHeader.FileNameKey))) - SetFieldValue(DatHeader.FileNameKey, datHeader.GetFieldValue(DatHeader.FileNameKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(DatHeader.FileNameKey))) + SetFieldValue(DatHeader.FileNameKey, datHeader.GetStringFieldValue(DatHeader.FileNameKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(Models.Metadata.Header.NameKey))) - SetFieldValue(Models.Metadata.Header.NameKey, datHeader.GetFieldValue(Models.Metadata.Header.NameKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.NameKey))) + SetFieldValue(Models.Metadata.Header.NameKey, datHeader.GetStringFieldValue(Models.Metadata.Header.NameKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(Models.Metadata.Header.DescriptionKey))) - SetFieldValue(Models.Metadata.Header.DescriptionKey, datHeader.GetFieldValue(Models.Metadata.Header.DescriptionKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) + SetFieldValue(Models.Metadata.Header.DescriptionKey, datHeader.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(Models.Metadata.Header.RootDirKey))) - SetFieldValue(Models.Metadata.Header.RootDirKey, datHeader.GetFieldValue(Models.Metadata.Header.RootDirKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.RootDirKey))) + SetFieldValue(Models.Metadata.Header.RootDirKey, datHeader.GetStringFieldValue(Models.Metadata.Header.RootDirKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(Models.Metadata.Header.CategoryKey))) - SetFieldValue(Models.Metadata.Header.CategoryKey, datHeader.GetFieldValue(Models.Metadata.Header.CategoryKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.CategoryKey))) + SetFieldValue(Models.Metadata.Header.CategoryKey, datHeader.GetStringFieldValue(Models.Metadata.Header.CategoryKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(Models.Metadata.Header.VersionKey))) - SetFieldValue(Models.Metadata.Header.VersionKey, datHeader.GetFieldValue(Models.Metadata.Header.VersionKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.VersionKey))) + SetFieldValue(Models.Metadata.Header.VersionKey, datHeader.GetStringFieldValue(Models.Metadata.Header.VersionKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(Models.Metadata.Header.DateKey))) - SetFieldValue(Models.Metadata.Header.DateKey, datHeader.GetFieldValue(Models.Metadata.Header.DateKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.DateKey))) + SetFieldValue(Models.Metadata.Header.DateKey, datHeader.GetStringFieldValue(Models.Metadata.Header.DateKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(Models.Metadata.Header.AuthorKey))) - SetFieldValue(Models.Metadata.Header.AuthorKey, datHeader.GetFieldValue(Models.Metadata.Header.AuthorKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.AuthorKey))) + SetFieldValue(Models.Metadata.Header.AuthorKey, datHeader.GetStringFieldValue(Models.Metadata.Header.AuthorKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(Models.Metadata.Header.EmailKey))) - SetFieldValue(Models.Metadata.Header.EmailKey, datHeader.GetFieldValue(Models.Metadata.Header.EmailKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.EmailKey))) + SetFieldValue(Models.Metadata.Header.EmailKey, datHeader.GetStringFieldValue(Models.Metadata.Header.EmailKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(Models.Metadata.Header.HomepageKey))) - SetFieldValue(Models.Metadata.Header.HomepageKey, datHeader.GetFieldValue(Models.Metadata.Header.HomepageKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.HomepageKey))) + SetFieldValue(Models.Metadata.Header.HomepageKey, datHeader.GetStringFieldValue(Models.Metadata.Header.HomepageKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(Models.Metadata.Header.UrlKey))) - SetFieldValue(Models.Metadata.Header.UrlKey, datHeader.GetFieldValue(Models.Metadata.Header.UrlKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.UrlKey))) + SetFieldValue(Models.Metadata.Header.UrlKey, datHeader.GetStringFieldValue(Models.Metadata.Header.UrlKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(Models.Metadata.Header.CommentKey))) - SetFieldValue(Models.Metadata.Header.CommentKey, datHeader.GetFieldValue(Models.Metadata.Header.CommentKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.CommentKey))) + SetFieldValue(Models.Metadata.Header.CommentKey, datHeader.GetStringFieldValue(Models.Metadata.Header.CommentKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(Models.Metadata.Header.HeaderKey))) - SetFieldValue(Models.Metadata.Header.HeaderKey, datHeader.GetFieldValue(Models.Metadata.Header.HeaderKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.HeaderKey))) + SetFieldValue(Models.Metadata.Header.HeaderKey, datHeader.GetStringFieldValue(Models.Metadata.Header.HeaderKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(Models.Metadata.Header.TypeKey))) - SetFieldValue(Models.Metadata.Header.TypeKey, datHeader.GetFieldValue(Models.Metadata.Header.TypeKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(Models.Metadata.Header.TypeKey))) + SetFieldValue(Models.Metadata.Header.TypeKey, datHeader.GetStringFieldValue(Models.Metadata.Header.TypeKey)); if (datHeader.GetFieldValue(Models.Metadata.Header.ForceMergingKey) != MergingFlag.None) SetFieldValue(Models.Metadata.Header.ForceMergingKey, datHeader.GetFieldValue(Models.Metadata.Header.ForceMergingKey)); @@ -357,24 +433,24 @@ namespace SabreTools.DatFiles if (datHeader.GetFieldValue(DatHeader.DatFormatKey) != 0x00) SetFieldValue(DatHeader.DatFormatKey, datHeader.GetFieldValue(DatHeader.DatFormatKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(DatHeader.PrefixKey))) - SetFieldValue(DatHeader.PrefixKey, datHeader.GetFieldValue(DatHeader.PrefixKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(DatHeader.PrefixKey))) + SetFieldValue(DatHeader.PrefixKey, datHeader.GetStringFieldValue(DatHeader.PrefixKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(DatHeader.PostfixKey))) - SetFieldValue(DatHeader.PostfixKey, datHeader.GetFieldValue(DatHeader.PostfixKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(DatHeader.PostfixKey))) + SetFieldValue(DatHeader.PostfixKey, datHeader.GetStringFieldValue(DatHeader.PostfixKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(DatHeader.AddExtensionKey))) - SetFieldValue(DatHeader.AddExtensionKey, datHeader.GetFieldValue(DatHeader.AddExtensionKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(DatHeader.AddExtensionKey))) + SetFieldValue(DatHeader.AddExtensionKey, datHeader.GetStringFieldValue(DatHeader.AddExtensionKey)); - if (!string.IsNullOrEmpty(datHeader.GetFieldValue(DatHeader.ReplaceExtensionKey))) - SetFieldValue(DatHeader.ReplaceExtensionKey, datHeader.GetFieldValue(DatHeader.ReplaceExtensionKey)); + if (!string.IsNullOrEmpty(datHeader.GetStringFieldValue(DatHeader.ReplaceExtensionKey))) + SetFieldValue(DatHeader.ReplaceExtensionKey, datHeader.GetStringFieldValue(DatHeader.ReplaceExtensionKey)); SetFieldValue(DatHeader.InputDepotKey, datHeader.GetFieldValue(DatHeader.InputDepotKey)?.Clone() as DepotInformation); SetFieldValue(DatHeader.OutputDepotKey, datHeader.GetFieldValue(DatHeader.OutputDepotKey)?.Clone() as DepotInformation); - SetFieldValue(DatHeader.GameNameKey, datHeader.GetFieldValue(DatHeader.GameNameKey)); - SetFieldValue(DatHeader.QuotesKey, datHeader.GetFieldValue(DatHeader.QuotesKey)); - SetFieldValue(DatHeader.RemoveExtensionKey, datHeader.GetFieldValue(DatHeader.RemoveExtensionKey)); - SetFieldValue(DatHeader.UseRomNameKey, datHeader.GetFieldValue(DatHeader.UseRomNameKey)); + SetFieldValue(DatHeader.GameNameKey, datHeader.GetBoolFieldValue(DatHeader.GameNameKey)); + SetFieldValue(DatHeader.QuotesKey, datHeader.GetBoolFieldValue(DatHeader.QuotesKey)); + SetFieldValue(DatHeader.RemoveExtensionKey, datHeader.GetBoolFieldValue(DatHeader.RemoveExtensionKey)); + SetFieldValue(DatHeader.UseRomNameKey, datHeader.GetBoolFieldValue(DatHeader.UseRomNameKey)); } #endregion @@ -879,9 +955,9 @@ namespace SabreTools.DatFiles /// String containing the new filename private string CreateOutFileNamesHelper(string outDir, string extension, bool overwrite) { - string? filename = string.IsNullOrEmpty(GetFieldValue(DatHeader.FileNameKey)) - ? GetFieldValue(Models.Metadata.Header.DescriptionKey) - : GetFieldValue(DatHeader.FileNameKey); + string? filename = string.IsNullOrEmpty(GetStringFieldValue(DatHeader.FileNameKey)) + ? GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + : GetStringFieldValue(DatHeader.FileNameKey); // Strip off the extension if it's a holdover from the DAT if (Utilities.HasValidDatExtension(filename)) diff --git a/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs b/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs index 23e05890..7e273a4a 100644 --- a/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs +++ b/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs @@ -43,29 +43,29 @@ namespace SabreTools.DatFiles.Formats case Release release: if (string.IsNullOrEmpty(release.GetName())) missingFields.Add(Models.Metadata.Release.NameKey); - if (string.IsNullOrEmpty(release.GetFieldValue(Models.Metadata.Release.RegionKey))) + if (string.IsNullOrEmpty(release.GetStringFieldValue(Models.Metadata.Release.RegionKey))) missingFields.Add(Models.Metadata.Release.RegionKey); break; case BiosSet biosset: if (string.IsNullOrEmpty(biosset.GetName())) missingFields.Add(Models.Metadata.BiosSet.NameKey); - if (string.IsNullOrEmpty(biosset.GetFieldValue(Models.Metadata.BiosSet.DescriptionKey))) + if (string.IsNullOrEmpty(biosset.GetStringFieldValue(Models.Metadata.BiosSet.DescriptionKey))) missingFields.Add(Models.Metadata.BiosSet.DescriptionKey); break; case Rom rom: if (string.IsNullOrEmpty(rom.GetName())) missingFields.Add(Models.Metadata.Rom.NameKey); - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < 0) + if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null || rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) < 0) missingFields.Add(Models.Metadata.Rom.SizeKey); - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA256Key)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA384Key)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA512Key)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SpamSumKey))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey))) { missingFields.Add(Models.Metadata.Rom.SHA1Key); } @@ -74,8 +74,8 @@ namespace SabreTools.DatFiles.Formats case Disk disk: if (string.IsNullOrEmpty(disk.GetName())) missingFields.Add(Models.Metadata.Disk.NameKey); - if (string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key))) + if (string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key)) + && string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))) { missingFields.Add(Models.Metadata.Disk.SHA1Key); } @@ -101,17 +101,17 @@ namespace SabreTools.DatFiles.Formats case Display display: if (display.GetFieldValue(Models.Metadata.Display.DisplayTypeKey) == DisplayType.NULL) missingFields.Add(Models.Metadata.Display.DisplayTypeKey); - if (display.GetFieldValue(Models.Metadata.Display.RotateKey) == null) + if (display.GetInt64FieldValue(Models.Metadata.Display.RotateKey) == null) missingFields.Add(Models.Metadata.Display.RotateKey); break; case Sound sound: - if (sound.GetFieldValue(Models.Metadata.Sound.ChannelsKey) == null) + if (sound.GetInt64FieldValue(Models.Metadata.Sound.ChannelsKey) == null) missingFields.Add(Models.Metadata.Sound.ChannelsKey); break; case Input input: - if (input.GetFieldValue(Models.Metadata.Input.PlayersKey) == null) + if (input.GetInt64FieldValue(Models.Metadata.Input.PlayersKey) == null) missingFields.Add(Models.Metadata.Input.PlayersKey); if (!input.ControlsSpecified) missingFields.Add(Models.Metadata.Input.ControlKey); @@ -188,18 +188,18 @@ namespace SabreTools.DatFiles.Formats var clrMamePro = new Models.ClrMamePro.ClrMamePro { - Name = Header.GetFieldValue(Models.Metadata.Header.NameKey), - Description = Header.GetFieldValue(Models.Metadata.Header.DescriptionKey), - RootDir = Header.GetFieldValue(Models.Metadata.Header.RootDirKey), - Category = Header.GetFieldValue(Models.Metadata.Header.CategoryKey), - Version = Header.GetFieldValue(Models.Metadata.Header.VersionKey), - Date = Header.GetFieldValue(Models.Metadata.Header.DateKey), - Author = Header.GetFieldValue(Models.Metadata.Header.AuthorKey), - Homepage = Header.GetFieldValue(Models.Metadata.Header.HomepageKey), - Url = Header.GetFieldValue(Models.Metadata.Header.UrlKey), - Comment = Header.GetFieldValue(Models.Metadata.Header.CommentKey), - Header = Header.GetFieldValue(Models.Metadata.Header.HeaderKey), - Type = Header.GetFieldValue(Models.Metadata.Header.TypeKey), + 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) @@ -236,14 +236,14 @@ namespace SabreTools.DatFiles.Formats // We normalize to all "game" var game = new Models.ClrMamePro.Game { - Name = machine?.GetFieldValue(Models.Metadata.Machine.NameKey), - Description = machine?.GetFieldValue(Models.Metadata.Machine.DescriptionKey), - Year = machine?.GetFieldValue(Models.Metadata.Machine.YearKey), - Manufacturer = machine?.GetFieldValue(Models.Metadata.Machine.ManufacturerKey), - Category = machine?.GetFieldValue(Models.Metadata.Machine.CategoryKey), - CloneOf = machine?.GetFieldValue(Models.Metadata.Machine.CloneOfKey), - RomOf = machine?.GetFieldValue(Models.Metadata.Machine.RomOfKey), - SampleOf = machine?.GetFieldValue(Models.Metadata.Machine.SampleOfKey), + 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 @@ -342,10 +342,10 @@ namespace SabreTools.DatFiles.Formats var release = new Models.ClrMamePro.Release { Name = item.GetName(), - Region = item.GetFieldValue(Models.Metadata.Release.RegionKey), - Language = item.GetFieldValue(Models.Metadata.Release.LanguageKey), - Date = item.GetFieldValue(Models.Metadata.Release.DateKey), - Default = item.GetFieldValue(Models.Metadata.Release.DefaultKey).FromYesNo(), + 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; @@ -359,8 +359,8 @@ namespace SabreTools.DatFiles.Formats var biosset = new Models.ClrMamePro.BiosSet { Name = item.GetName(), - Default = item.GetFieldValue(Models.Metadata.BiosSet.DefaultKey).FromYesNo(), - Description = item.GetFieldValue(Models.Metadata.BiosSet.DescriptionKey), + Default = item.GetBoolFieldValue(Models.Metadata.BiosSet.DefaultKey).FromYesNo(), + Description = item.GetStringFieldValue(Models.Metadata.BiosSet.DescriptionKey), }; return biosset; @@ -374,25 +374,25 @@ namespace SabreTools.DatFiles.Formats var rom = new Models.ClrMamePro.Rom { Name = item.GetName(), - Size = item.GetFieldValue(Models.Metadata.Rom.SizeKey), - CRC = item.GetFieldValue(Models.Metadata.Rom.CRCKey), - MD5 = item.GetFieldValue(Models.Metadata.Rom.MD5Key), - SHA1 = item.GetFieldValue(Models.Metadata.Rom.SHA1Key), - SHA256 = item.GetFieldValue(Models.Metadata.Rom.SHA256Key), - SHA384 = item.GetFieldValue(Models.Metadata.Rom.SHA384Key), - SHA512 = item.GetFieldValue(Models.Metadata.Rom.SHA512Key), - SpamSum = item.GetFieldValue(Models.Metadata.Rom.SpamSumKey), - xxHash364 = item.GetFieldValue(Models.Metadata.Rom.xxHash364Key), - xxHash3128 = item.GetFieldValue(Models.Metadata.Rom.xxHash3128Key), - Merge = item.GetFieldValue(Models.Metadata.Rom.MergeKey), - Region = item.GetFieldValue(Models.Metadata.Rom.RegionKey), - Flags = item.GetFieldValue(Models.Metadata.Rom.FlagsKey), - Date = item.GetFieldValue(Models.Metadata.Rom.DateKey), - Offs = item.GetFieldValue(Models.Metadata.Rom.OffsetKey), - Serial = item.GetFieldValue(Models.Metadata.Rom.SerialKey), - Header = item.GetFieldValue(Models.Metadata.Rom.HeaderKey), - Inverted = item.GetFieldValue(Models.Metadata.Rom.InvertedKey).FromYesNo(), - MIA = item.GetFieldValue(Models.Metadata.Rom.MIAKey).FromYesNo(), + 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) @@ -409,10 +409,10 @@ namespace SabreTools.DatFiles.Formats var disk = new Models.ClrMamePro.Disk { Name = item.GetName(), - MD5 = item.GetFieldValue(Models.Metadata.Disk.MD5Key), - SHA1 = item.GetFieldValue(Models.Metadata.Disk.SHA1Key), - Merge = item.GetFieldValue(Models.Metadata.Disk.MergeKey), - Flags = item.GetFieldValue(Models.Metadata.Disk.FlagsKey), + 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) @@ -429,10 +429,10 @@ namespace SabreTools.DatFiles.Formats var media = new Models.ClrMamePro.Media { Name = item.GetName(), - MD5 = item.GetFieldValue(Models.Metadata.Media.MD5Key), - SHA1 = item.GetFieldValue(Models.Metadata.Media.SHA1Key), - SHA256 = item.GetFieldValue(Models.Metadata.Media.SHA256Key), - SpamSum = item.GetFieldValue(Models.Metadata.Media.SpamSumKey), + 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; } @@ -470,8 +470,8 @@ namespace SabreTools.DatFiles.Formats { Type = item.GetFieldValue(Models.Metadata.Chip.ChipTypeKey).AsStringValue(), Name = item.GetName(), - Flags = item.GetFieldValue(Models.Metadata.Chip.FlagsKey), - Clock = item.GetFieldValue(Models.Metadata.Chip.ClockKey)?.ToString(), + Flags = item.GetStringFieldValue(Models.Metadata.Chip.FlagsKey), + Clock = item.GetInt64FieldValue(Models.Metadata.Chip.ClockKey)?.ToString(), }; return chip; } @@ -484,14 +484,14 @@ namespace SabreTools.DatFiles.Formats var video = new Models.ClrMamePro.Video { Screen = item.GetFieldValue(Models.Metadata.Display.DisplayTypeKey).AsStringValue(), - X = item.GetFieldValue(Models.Metadata.Display.WidthKey)?.ToString(), - Y = item.GetFieldValue(Models.Metadata.Display.HeightKey)?.ToString(), - AspectX = item.GetFieldValue("ASPECTX"), - AspectY = item.GetFieldValue("ASPECTY"), - Freq = item.GetFieldValue(Models.Metadata.Display.RefreshKey)?.ToString(), + 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.GetFieldValue(Models.Metadata.Display.RotateKey)) + switch (item.GetInt64FieldValue(Models.Metadata.Display.RotateKey)) { case 0: case 180: @@ -513,7 +513,7 @@ namespace SabreTools.DatFiles.Formats { var sound = new Models.ClrMamePro.Sound { - Channels = item.GetFieldValue(Models.Metadata.Sound.ChannelsKey)?.ToString(), + Channels = item.GetInt64FieldValue(Models.Metadata.Sound.ChannelsKey)?.ToString(), }; return sound; } @@ -525,15 +525,15 @@ namespace SabreTools.DatFiles.Formats { var input = new Models.ClrMamePro.Input { - Players = item.GetFieldValue(Models.Metadata.Input.PlayersKey)?.ToString(), - //Control = item.GetFieldValue(Models.Metadata.Input.ControlKey), - Coins = item.GetFieldValue(Models.Metadata.Input.CoinsKey)?.ToString(), - Tilt = item.GetFieldValue(Models.Metadata.Input.TiltKey).FromYesNo(), - Service = item.GetFieldValue(Models.Metadata.Input.ServiceKey).FromYesNo(), + 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].GetFieldValue(Models.Metadata.Control.ButtonsKey)?.ToString(); + input.Buttons = item.GetFieldValue(Models.Metadata.Input.ControlKey)![0].GetInt64FieldValue(Models.Metadata.Control.ButtonsKey)?.ToString(); return input; } @@ -553,9 +553,9 @@ namespace SabreTools.DatFiles.Formats var entries = new List(); foreach (var setting in item.GetFieldValue(Models.Metadata.DipSwitch.DipValueKey)!) { - entries.Add(setting.GetFieldValue(Models.Metadata.DipValue.ValueKey)!); - if (setting.GetFieldValue(Models.Metadata.DipValue.DefaultKey) == true) - dipswitch.Default = setting.GetFieldValue(Models.Metadata.DipValue.ValueKey); + 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]; @@ -574,8 +574,8 @@ namespace SabreTools.DatFiles.Formats 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.GetFieldValue(Models.Metadata.Driver.PaletteSizeKey)?.ToString(), - Blit = item.GetFieldValue(Models.Metadata.Driver.BlitKey), + PaletteSize = item.GetInt64FieldValue(Models.Metadata.Driver.PaletteSizeKey)?.ToString(), + Blit = item.GetStringFieldValue(Models.Metadata.Driver.BlitKey), }; return driver; } diff --git a/SabreTools.DatFiles/Formats/DosCenter.Writer.cs b/SabreTools.DatFiles/Formats/DosCenter.Writer.cs index 8de2be84..eb7cab99 100644 --- a/SabreTools.DatFiles/Formats/DosCenter.Writer.cs +++ b/SabreTools.DatFiles/Formats/DosCenter.Writer.cs @@ -34,11 +34,11 @@ namespace SabreTools.DatFiles.Formats switch (datItem) { case Rom rom: - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < 0) + if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null || rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) < 0) missingFields.Add(Models.Metadata.Rom.SizeKey); // if (string.IsNullOrEmpty(rom.Date)) // missingFields.Add(Models.Metadata.Rom.DateKey); - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey))) missingFields.Add(Models.Metadata.Rom.CRCKey); break; } @@ -97,13 +97,13 @@ namespace SabreTools.DatFiles.Formats var clrMamePro = new Models.DosCenter.DosCenter { - Name = Header.GetFieldValue(Models.Metadata.Header.NameKey), - Description = Header.GetFieldValue(Models.Metadata.Header.DescriptionKey), - Version = Header.GetFieldValue(Models.Metadata.Header.VersionKey), - Date = Header.GetFieldValue(Models.Metadata.Header.DateKey), - Author = Header.GetFieldValue(Models.Metadata.Header.AuthorKey), - Homepage = Header.GetFieldValue(Models.Metadata.Header.HomepageKey), - Comment = Header.GetFieldValue(Models.Metadata.Header.CommentKey), + Name = Header.GetStringFieldValue(Models.Metadata.Header.NameKey), + Description = Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey), + 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), + Comment = Header.GetStringFieldValue(Models.Metadata.Header.CommentKey), }; return clrMamePro; @@ -135,7 +135,7 @@ namespace SabreTools.DatFiles.Formats // We re-add the missing parts of the game name var game = new Models.DosCenter.Game { - Name = $"\"{machine?.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty}.zip\"" + Name = $"\"{machine?.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty}.zip\"" }; // Create holders for all item types @@ -180,9 +180,9 @@ namespace SabreTools.DatFiles.Formats var rom = new Models.DosCenter.File { Name = item.GetName(), - Size = item.GetFieldValue(Models.Metadata.Rom.SizeKey), - CRC = item.GetFieldValue(Models.Metadata.Rom.CRCKey), - Date = item.GetFieldValue(Models.Metadata.Rom.DateKey), + Size = item.GetStringFieldValue(Models.Metadata.Rom.SizeKey), + CRC = item.GetStringFieldValue(Models.Metadata.Rom.CRCKey), + Date = item.GetStringFieldValue(Models.Metadata.Rom.DateKey), }; return rom; } diff --git a/SabreTools.DatFiles/Formats/EverdriveSMDB.Writer.cs b/SabreTools.DatFiles/Formats/EverdriveSMDB.Writer.cs index 9697a3d1..40697136 100644 --- a/SabreTools.DatFiles/Formats/EverdriveSMDB.Writer.cs +++ b/SabreTools.DatFiles/Formats/EverdriveSMDB.Writer.cs @@ -33,13 +33,13 @@ namespace SabreTools.DatFiles.Formats switch (datItem) { case Rom rom: - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA256Key))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key))) missingFields.Add(Models.Metadata.Rom.SHA256Key); - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key))) missingFields.Add(Models.Metadata.Rom.SHA1Key); - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key))) missingFields.Add(Models.Metadata.Rom.MD5Key); - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey))) missingFields.Add(Models.Metadata.Rom.CRCKey); break; } @@ -138,12 +138,12 @@ namespace SabreTools.DatFiles.Formats { var row = new Models.EverdriveSMDB.Row { - SHA256 = rom.GetFieldValue(Models.Metadata.Rom.SHA256Key), - Name = $"{rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty}/{rom.GetName()}", - SHA1 = rom.GetFieldValue(Models.Metadata.Rom.SHA1Key), - MD5 = rom.GetFieldValue(Models.Metadata.Rom.MD5Key), - CRC32 = rom.GetFieldValue(Models.Metadata.Rom.CRCKey), - Size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey), + SHA256 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key), + Name = $"{rom.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty}/{rom.GetName()}", + SHA1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key), + MD5 = rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key), + CRC32 = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey), + Size = rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString(), }; return row; } diff --git a/SabreTools.DatFiles/Formats/Hashfile.Writer.cs b/SabreTools.DatFiles/Formats/Hashfile.Writer.cs index 1519a9d1..c3461478 100644 --- a/SabreTools.DatFiles/Formats/Hashfile.Writer.cs +++ b/SabreTools.DatFiles/Formats/Hashfile.Writer.cs @@ -40,7 +40,7 @@ namespace SabreTools.DatFiles.Formats switch (datItem) { case Rom rom: - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey))) missingFields.Add(Models.Metadata.Rom.CRCKey); break; default: @@ -52,15 +52,15 @@ namespace SabreTools.DatFiles.Formats switch (datItem) { case Disk disk: - if (string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key))) + if (string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key))) missingFields.Add(Models.Metadata.Disk.MD5Key); break; case Media medium: - if (string.IsNullOrEmpty(medium.GetFieldValue(Models.Metadata.Media.MD5Key))) + if (string.IsNullOrEmpty(medium.GetStringFieldValue(Models.Metadata.Media.MD5Key))) missingFields.Add(Models.Metadata.Media.MD5Key); break; case Rom rom: - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key))) missingFields.Add(Models.Metadata.Rom.MD5Key); break; default: @@ -72,15 +72,15 @@ namespace SabreTools.DatFiles.Formats switch (datItem) { case Disk disk: - if (string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key))) + if (string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))) missingFields.Add(Models.Metadata.Disk.SHA1Key); break; case Media medium: - if (string.IsNullOrEmpty(medium.GetFieldValue(Models.Metadata.Media.SHA1Key))) + if (string.IsNullOrEmpty(medium.GetStringFieldValue(Models.Metadata.Media.SHA1Key))) missingFields.Add(Models.Metadata.Media.SHA1Key); break; case Rom rom: - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key))) missingFields.Add(Models.Metadata.Rom.SHA1Key); break; default: @@ -92,11 +92,11 @@ namespace SabreTools.DatFiles.Formats switch (datItem) { case Media medium: - if (string.IsNullOrEmpty(medium.GetFieldValue(Models.Metadata.Media.SHA256Key))) + if (string.IsNullOrEmpty(medium.GetStringFieldValue(Models.Metadata.Media.SHA256Key))) missingFields.Add(Models.Metadata.Media.SHA256Key); break; case Rom rom: - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA256Key))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key))) missingFields.Add(Models.Metadata.Rom.SHA256Key); break; default: @@ -108,7 +108,7 @@ namespace SabreTools.DatFiles.Formats switch (datItem) { case Rom rom: - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA384Key))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key))) missingFields.Add(Models.Metadata.Rom.SHA384Key); break; default: @@ -120,7 +120,7 @@ namespace SabreTools.DatFiles.Formats switch (datItem) { case Rom rom: - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA512Key))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key))) missingFields.Add(Models.Metadata.Rom.SHA512Key); break; default: @@ -132,11 +132,11 @@ namespace SabreTools.DatFiles.Formats switch (datItem) { case Media medium: - if (string.IsNullOrEmpty(medium.GetFieldValue(Models.Metadata.Media.SpamSumKey))) + if (string.IsNullOrEmpty(medium.GetStringFieldValue(Models.Metadata.Media.SpamSumKey))) missingFields.Add(Models.Metadata.Media.SpamSumKey); break; case Rom rom: - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SpamSumKey))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey))) missingFields.Add(Models.Metadata.Rom.SpamSumKey); break; default: @@ -243,8 +243,8 @@ namespace SabreTools.DatFiles.Formats continue; string name = string.Empty; - if (Header.GetFieldValue(DatHeader.GameNameKey) && item.GetFieldValue(DatItem.MachineKey) != null) - name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; + if (Header.GetBoolFieldValue(DatHeader.GameNameKey) == true && item.GetFieldValue(DatItem.MachineKey) != null) + name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { @@ -252,7 +252,7 @@ namespace SabreTools.DatFiles.Formats sfvs.Add(new Models.Hashfile.SFV { File = name + rom.GetName(), - Hash = rom.GetFieldValue(Models.Metadata.Rom.CRCKey), + Hash = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey), }); break; } @@ -294,15 +294,15 @@ namespace SabreTools.DatFiles.Formats continue; string name = string.Empty; - if (Header.GetFieldValue(DatHeader.GameNameKey) && item.GetFieldValue(DatItem.MachineKey) != null) - name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; + if (Header.GetBoolFieldValue(DatHeader.GameNameKey) == true && item.GetFieldValue(DatItem.MachineKey) != null) + name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { case Disk disk: md5s.Add(new Models.Hashfile.MD5 { - Hash = disk.GetFieldValue(Models.Metadata.Disk.MD5Key), + Hash = disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key), File = name + disk.GetName(), }); break; @@ -310,7 +310,7 @@ namespace SabreTools.DatFiles.Formats case Media media: md5s.Add(new Models.Hashfile.MD5 { - Hash = media.GetFieldValue(Models.Metadata.Media.MD5Key), + Hash = media.GetStringFieldValue(Models.Metadata.Media.MD5Key), File = name + media.GetName(), }); break; @@ -318,7 +318,7 @@ namespace SabreTools.DatFiles.Formats case Rom rom: md5s.Add(new Models.Hashfile.MD5 { - Hash = rom.GetFieldValue(Models.Metadata.Rom.MD5Key), + Hash = rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key), File = name + rom.GetName(), }); break; @@ -361,15 +361,15 @@ namespace SabreTools.DatFiles.Formats continue; string name = string.Empty; - if (Header.GetFieldValue(DatHeader.GameNameKey) && item.GetFieldValue(DatItem.MachineKey) != null) - name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; + if (Header.GetBoolFieldValue(DatHeader.GameNameKey) == true && item.GetFieldValue(DatItem.MachineKey) != null) + name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { case Disk disk: sha1s.Add(new Models.Hashfile.SHA1 { - Hash = disk.GetFieldValue(Models.Metadata.Disk.SHA1Key), + Hash = disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key), File = name + disk.GetName(), }); break; @@ -377,7 +377,7 @@ namespace SabreTools.DatFiles.Formats case Media media: sha1s.Add(new Models.Hashfile.SHA1 { - Hash = media.GetFieldValue(Models.Metadata.Media.SHA1Key), + Hash = media.GetStringFieldValue(Models.Metadata.Media.SHA1Key), File = name + media.GetName(), }); break; @@ -385,7 +385,7 @@ namespace SabreTools.DatFiles.Formats case Rom rom: sha1s.Add(new Models.Hashfile.SHA1 { - Hash = rom.GetFieldValue(Models.Metadata.Rom.SHA1Key), + Hash = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key), File = name + rom.GetName(), }); break; @@ -428,15 +428,15 @@ namespace SabreTools.DatFiles.Formats continue; string name = string.Empty; - if (Header.GetFieldValue(DatHeader.GameNameKey) && item.GetFieldValue(DatItem.MachineKey) != null) - name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; + if (Header.GetBoolFieldValue(DatHeader.GameNameKey) == true && item.GetFieldValue(DatItem.MachineKey) != null) + name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { case Media media: sha256s.Add(new Models.Hashfile.SHA256 { - Hash = media.GetFieldValue(Models.Metadata.Media.SHA256Key), + Hash = media.GetStringFieldValue(Models.Metadata.Media.SHA256Key), File = name + media.GetName(), }); break; @@ -444,7 +444,7 @@ namespace SabreTools.DatFiles.Formats case Rom rom: sha256s.Add(new Models.Hashfile.SHA256 { - Hash = rom.GetFieldValue(Models.Metadata.Rom.SHA256Key), + Hash = rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key), File = name + rom.GetName(), }); break; @@ -487,15 +487,15 @@ namespace SabreTools.DatFiles.Formats continue; string name = string.Empty; - if (Header.GetFieldValue(DatHeader.GameNameKey) && item.GetFieldValue(DatItem.MachineKey) != null) - name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; + if (Header.GetBoolFieldValue(DatHeader.GameNameKey) == true && item.GetFieldValue(DatItem.MachineKey) != null) + name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { case Rom rom: sha384s.Add(new Models.Hashfile.SHA384 { - Hash = rom.GetFieldValue(Models.Metadata.Rom.SHA384Key), + Hash = rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key), File = name + rom.GetName(), }); break; @@ -538,15 +538,15 @@ namespace SabreTools.DatFiles.Formats continue; string name = string.Empty; - if (Header.GetFieldValue(DatHeader.GameNameKey) && item.GetFieldValue(DatItem.MachineKey) != null) - name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; + if (Header.GetBoolFieldValue(DatHeader.GameNameKey) == true && item.GetFieldValue(DatItem.MachineKey) != null) + name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { case Rom rom: sha512s.Add(new Models.Hashfile.SHA512 { - Hash = rom.GetFieldValue(Models.Metadata.Rom.SHA512Key), + Hash = rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key), File = name + rom.GetName(), }); break; @@ -589,15 +589,15 @@ namespace SabreTools.DatFiles.Formats continue; string name = string.Empty; - if (Header.GetFieldValue(DatHeader.GameNameKey) && item.GetFieldValue(DatItem.MachineKey) != null) - name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; + if (Header.GetBoolFieldValue(DatHeader.GameNameKey) == true && item.GetFieldValue(DatItem.MachineKey) != null) + name = $"{item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { case Media media: spamsums.Add(new Models.Hashfile.SpamSum { - Hash = media.GetFieldValue(Models.Metadata.Media.SpamSumKey), + Hash = media.GetStringFieldValue(Models.Metadata.Media.SpamSumKey), File = name + media.GetName(), }); break; @@ -605,7 +605,7 @@ namespace SabreTools.DatFiles.Formats case Rom rom: spamsums.Add(new Models.Hashfile.SpamSum { - Hash = rom.GetFieldValue(Models.Metadata.Rom.SpamSumKey), + Hash = rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey), File = name + rom.GetName(), }); break; diff --git a/SabreTools.DatFiles/Formats/Listrom.Writer.cs b/SabreTools.DatFiles/Formats/Listrom.Writer.cs index 87bcd5f3..8cc6aa07 100644 --- a/SabreTools.DatFiles/Formats/Listrom.Writer.cs +++ b/SabreTools.DatFiles/Formats/Listrom.Writer.cs @@ -35,19 +35,19 @@ namespace SabreTools.DatFiles.Formats switch (datItem) { case Disk disk: - if (string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key))) + if (string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key)) + && string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))) { missingFields.Add(Models.Metadata.Disk.SHA1Key); } break; case Rom rom: - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < 0) + if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null || rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) < 0) missingFields.Add(Models.Metadata.Rom.SizeKey); - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey))) missingFields.Add(Models.Metadata.Rom.CRCKey); - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key))) missingFields.Add(Models.Metadata.Rom.SHA1Key); break; } @@ -117,11 +117,11 @@ namespace SabreTools.DatFiles.Formats var set = new Models.Listrom.Set { - Driver = items[0]!.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true - ? items[0]!.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) + Driver = items[0]!.GetFieldValue(DatItem.MachineKey)!.GetBoolFieldValue(Models.Metadata.Machine.IsDeviceKey) == true + ? items[0]!.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) : null, - Device = items[0]!.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true - ? items[0]!.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) + Device = items[0]!.GetFieldValue(DatItem.MachineKey)!.GetBoolFieldValue(Models.Metadata.Machine.IsDeviceKey) == true + ? items[0]!.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) : null, }; @@ -182,10 +182,10 @@ namespace SabreTools.DatFiles.Formats Bad = true, }; - if (!string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key))) - row.MD5 = disk.GetFieldValue(Models.Metadata.Disk.MD5Key); + if (!string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key))) + row.MD5 = disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key); else - row.SHA1 = disk.GetFieldValue(Models.Metadata.Disk.SHA1Key); + row.SHA1 = disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key); return row; } @@ -196,10 +196,10 @@ namespace SabreTools.DatFiles.Formats Name = disk.GetName(), }; - if (!string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key))) - row.MD5 = disk.GetFieldValue(Models.Metadata.Disk.MD5Key); + if (!string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key))) + row.MD5 = disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key); else - row.SHA1 = disk.GetFieldValue(Models.Metadata.Disk.SHA1Key); + row.SHA1 = disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key); return row; } @@ -215,7 +215,7 @@ namespace SabreTools.DatFiles.Formats return new Models.Listrom.Row { Name = rom.GetName(), - Size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey), + Size = rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString(), NoGoodDumpKnown = true, }; } @@ -224,10 +224,10 @@ namespace SabreTools.DatFiles.Formats return new Models.Listrom.Row { Name = rom.GetName(), - Size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey), + Size = rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString(), Bad = true, - CRC = rom.GetFieldValue(Models.Metadata.Rom.CRCKey), - SHA1 = rom.GetFieldValue(Models.Metadata.Rom.SHA1Key), + CRC = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey), + SHA1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key), }; } else @@ -235,9 +235,9 @@ namespace SabreTools.DatFiles.Formats return new Models.Listrom.Row { Name = rom.GetName(), - Size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey), - CRC = rom.GetFieldValue(Models.Metadata.Rom.CRCKey), - SHA1 = rom.GetFieldValue(Models.Metadata.Rom.SHA1Key), + Size = rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString(), + CRC = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey), + SHA1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key), }; } } diff --git a/SabreTools.DatFiles/Formats/Listxml.Writer.cs b/SabreTools.DatFiles/Formats/Listxml.Writer.cs index b31dc15d..810752c5 100644 --- a/SabreTools.DatFiles/Formats/Listxml.Writer.cs +++ b/SabreTools.DatFiles/Formats/Listxml.Writer.cs @@ -50,17 +50,17 @@ namespace SabreTools.DatFiles.Formats case BiosSet biosset: if (string.IsNullOrEmpty(biosset.GetName())) missingFields.Add(Models.Metadata.BiosSet.NameKey); - if (string.IsNullOrEmpty(biosset.GetFieldValue(Models.Metadata.BiosSet.DescriptionKey))) + if (string.IsNullOrEmpty(biosset.GetStringFieldValue(Models.Metadata.BiosSet.DescriptionKey))) missingFields.Add(Models.Metadata.BiosSet.DescriptionKey); break; case Rom rom: if (string.IsNullOrEmpty(rom.GetName())) missingFields.Add(Models.Metadata.Rom.NameKey); - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < 0) + if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null || rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) < 0) missingFields.Add(Models.Metadata.Rom.SizeKey); - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key))) { missingFields.Add(Models.Metadata.Rom.SHA1Key); } @@ -69,8 +69,8 @@ namespace SabreTools.DatFiles.Formats case Disk disk: if (string.IsNullOrEmpty(disk.GetName())) missingFields.Add(Models.Metadata.Disk.NameKey); - if (string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key))) + if (string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key)) + && string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))) { missingFields.Add(Models.Metadata.Disk.SHA1Key); } @@ -96,36 +96,36 @@ namespace SabreTools.DatFiles.Formats case Display display: if (display.GetFieldValue(Models.Metadata.Display.DisplayTypeKey) == DisplayType.NULL) missingFields.Add(Models.Metadata.Display.DisplayTypeKey); - if (display.GetFieldValue(Models.Metadata.Display.RefreshKey) == null) + if (display.GetDoubleFieldValue(Models.Metadata.Display.RefreshKey) == null) missingFields.Add(Models.Metadata.Display.RefreshKey); break; case Sound sound: - if (sound.GetFieldValue(Models.Metadata.Sound.ChannelsKey) == null) + if (sound.GetInt64FieldValue(Models.Metadata.Sound.ChannelsKey) == null) missingFields.Add(Models.Metadata.Sound.ChannelsKey); break; case Input input: - if (input.GetFieldValue(Models.Metadata.Input.PlayersKey) == null) + if (input.GetInt64FieldValue(Models.Metadata.Input.PlayersKey) == null) missingFields.Add(Models.Metadata.Input.PlayersKey); break; case DipSwitch dipswitch: if (string.IsNullOrEmpty(dipswitch.GetName())) missingFields.Add(Models.Metadata.DipSwitch.NameKey); - if (string.IsNullOrEmpty(dipswitch.GetFieldValue(Models.Metadata.DipSwitch.TagKey))) + if (string.IsNullOrEmpty(dipswitch.GetStringFieldValue(Models.Metadata.DipSwitch.TagKey))) missingFields.Add(Models.Metadata.DipSwitch.TagKey); break; case Configuration configuration: if (string.IsNullOrEmpty(configuration.GetName())) missingFields.Add(Models.Metadata.Configuration.NameKey); - if (string.IsNullOrEmpty(configuration.GetFieldValue(Models.Metadata.Configuration.TagKey))) + if (string.IsNullOrEmpty(configuration.GetStringFieldValue(Models.Metadata.Configuration.TagKey))) missingFields.Add(Models.Metadata.Configuration.TagKey); break; case Port port: - if (string.IsNullOrEmpty(port.GetFieldValue(Models.Metadata.Port.TagKey))) + if (string.IsNullOrEmpty(port.GetStringFieldValue(Models.Metadata.Port.TagKey))) missingFields.Add(Models.Metadata.Port.TagKey); break; @@ -161,7 +161,7 @@ namespace SabreTools.DatFiles.Formats break; case DatItems.Formats.SoftwareList softwarelist: - if (string.IsNullOrEmpty(softwarelist.GetFieldValue(Models.Metadata.SoftwareList.TagKey))) + if (string.IsNullOrEmpty(softwarelist.GetStringFieldValue(Models.Metadata.SoftwareList.TagKey))) missingFields.Add(Models.Metadata.SoftwareList.TagKey); if (string.IsNullOrEmpty(softwarelist.GetName())) missingFields.Add(Models.Metadata.SoftwareList.NameKey); @@ -212,11 +212,11 @@ namespace SabreTools.DatFiles.Formats { var datafile = new Models.Listxml.Mame { - Build = Header.GetFieldValue(Models.Metadata.Header.NameKey) - ?? Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) - ?? Header.GetFieldValue(Models.Metadata.Header.BuildKey), - Debug = Header.GetFieldValue(Models.Metadata.Header.DebugKey).FromYesNo(), - MameConfig = Header.GetFieldValue(Models.Metadata.Header.MameConfigKey), + Build = Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + ?? Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + ?? Header.GetStringFieldValue(Models.Metadata.Header.BuildKey), + Debug = Header.GetBoolFieldValue(Models.Metadata.Header.DebugKey).FromYesNo(), + MameConfig = Header.GetStringFieldValue(Models.Metadata.Header.MameConfigKey), Game = CreateGames(ignoreblanks) }; @@ -374,23 +374,23 @@ namespace SabreTools.DatFiles.Formats { var game = new Models.Listxml.Machine { - Name = machine.GetFieldValue(Models.Metadata.Machine.NameKey), - SourceFile = machine.GetFieldValue(Models.Metadata.Machine.SourceFileKey), + Name = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey), + SourceFile = machine.GetStringFieldValue(Models.Metadata.Machine.SourceFileKey), Runnable = machine.GetFieldValue(Models.Metadata.Machine.RunnableKey).AsStringValue(), - CloneOf = machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey), - RomOf = machine.GetFieldValue(Models.Metadata.Machine.RomOfKey), - SampleOf = machine.GetFieldValue(Models.Metadata.Machine.SampleOfKey), - Description = machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey), - Year = machine.GetFieldValue(Models.Metadata.Machine.YearKey), - Manufacturer = machine.GetFieldValue(Models.Metadata.Machine.ManufacturerKey), - History = machine.GetFieldValue(Models.Metadata.Machine.HistoryKey), + CloneOf = machine.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey), + RomOf = machine.GetStringFieldValue(Models.Metadata.Machine.RomOfKey), + SampleOf = machine.GetStringFieldValue(Models.Metadata.Machine.SampleOfKey), + Description = machine.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey), + Year = machine.GetStringFieldValue(Models.Metadata.Machine.YearKey), + Manufacturer = machine.GetStringFieldValue(Models.Metadata.Machine.ManufacturerKey), + History = machine.GetStringFieldValue(Models.Metadata.Machine.HistoryKey), }; - if (machine.GetFieldValue(Models.Metadata.Machine.IsBiosKey) == true) + if (machine.GetBoolFieldValue(Models.Metadata.Machine.IsBiosKey) == true) game.IsBios = "yes"; - if (machine.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true) + if (machine.GetBoolFieldValue(Models.Metadata.Machine.IsDeviceKey) == true) game.IsDevice = "yes"; - if (machine.GetFieldValue(Models.Metadata.Machine.IsMechanicalKey) == true) + if (machine.GetBoolFieldValue(Models.Metadata.Machine.IsMechanicalKey) == true) game.IsMechanical = "yes"; return game; @@ -404,8 +404,8 @@ namespace SabreTools.DatFiles.Formats var biosset = new Models.Listxml.BiosSet { Name = item.GetName(), - Default = item.GetFieldValue(Models.Metadata.BiosSet.DefaultKey).FromYesNo(), - Description = item.GetFieldValue(Models.Metadata.BiosSet.DescriptionKey), + Default = item.GetBoolFieldValue(Models.Metadata.BiosSet.DefaultKey).FromYesNo(), + Description = item.GetStringFieldValue(Models.Metadata.BiosSet.DescriptionKey), }; return biosset; @@ -419,17 +419,17 @@ namespace SabreTools.DatFiles.Formats var rom = new Models.Listxml.Rom { Name = item.GetName(), - Bios = item.GetFieldValue(Models.Metadata.Rom.BiosKey), - Size = item.GetFieldValue(Models.Metadata.Rom.SizeKey), - CRC = item.GetFieldValue(Models.Metadata.Rom.CRCKey), - SHA1 = item.GetFieldValue(Models.Metadata.Rom.SHA1Key), - Merge = item.GetFieldValue(Models.Metadata.Rom.MergeKey), - Region = item.GetFieldValue(Models.Metadata.Rom.RegionKey), - Offset = item.GetFieldValue(Models.Metadata.Rom.OffsetKey), + Bios = item.GetStringFieldValue(Models.Metadata.Rom.BiosKey), + Size = item.GetStringFieldValue(Models.Metadata.Rom.SizeKey), + CRC = item.GetStringFieldValue(Models.Metadata.Rom.CRCKey), + SHA1 = item.GetStringFieldValue(Models.Metadata.Rom.SHA1Key), + 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), - Optional = item.GetFieldValue(Models.Metadata.Rom.OptionalKey).FromYesNo(), - Dispose = item.GetFieldValue(Models.Metadata.Rom.DisposeKey).FromYesNo(), - SoundOnly = item.GetFieldValue(Models.Metadata.Rom.SoundOnlyKey).FromYesNo(), + Optional = item.GetBoolFieldValue(Models.Metadata.Rom.OptionalKey).FromYesNo(), + Dispose = item.GetBoolFieldValue(Models.Metadata.Rom.DisposeKey).FromYesNo(), + SoundOnly = item.GetBoolFieldValue(Models.Metadata.Rom.SoundOnlyKey).FromYesNo(), }; return rom; @@ -443,14 +443,14 @@ namespace SabreTools.DatFiles.Formats var disk = new Models.Listxml.Disk { Name = item.GetName(), - MD5 = item.GetFieldValue(Models.Metadata.Disk.MD5Key), - SHA1 = item.GetFieldValue(Models.Metadata.Disk.SHA1Key), - Merge = item.GetFieldValue(Models.Metadata.Disk.MergeKey), - Region = item.GetFieldValue(Models.Metadata.Disk.RegionKey), - Index = item.GetFieldValue(Models.Metadata.Disk.IndexKey), - Writable = item.GetFieldValue(Models.Metadata.Disk.WritableKey).FromYesNo(), + MD5 = item.GetStringFieldValue(Models.Metadata.Disk.MD5Key), + SHA1 = item.GetStringFieldValue(Models.Metadata.Disk.SHA1Key), + Merge = item.GetStringFieldValue(Models.Metadata.Disk.MergeKey), + 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), - Optional = item.GetFieldValue(Models.Metadata.Disk.OptionalKey).FromYesNo(), + Optional = item.GetBoolFieldValue(Models.Metadata.Disk.OptionalKey).FromYesNo(), }; return disk; @@ -490,10 +490,10 @@ namespace SabreTools.DatFiles.Formats var chip = new Models.Listxml.Chip { Name = item.GetName(), - Tag = item.GetFieldValue(Models.Metadata.Chip.TagKey), + Tag = item.GetStringFieldValue(Models.Metadata.Chip.TagKey), Type = item.GetFieldValue(Models.Metadata.Chip.ChipTypeKey).AsStringValue(), - SoundOnly = item.GetFieldValue(Models.Metadata.Chip.SoundOnlyKey).FromYesNo(), - Clock = item.GetFieldValue(Models.Metadata.Chip.TagKey)?.ToString(), + SoundOnly = item.GetBoolFieldValue(Models.Metadata.Chip.SoundOnlyKey).FromYesNo(), + Clock = item.GetInt64FieldValue(Models.Metadata.Chip.TagKey)?.ToString(), }; return chip; @@ -506,20 +506,20 @@ namespace SabreTools.DatFiles.Formats { var display = new Models.Listxml.Display { - Tag = item.GetFieldValue(Models.Metadata.Display.TagKey), + Tag = item.GetStringFieldValue(Models.Metadata.Display.TagKey), Type = item.GetFieldValue(Models.Metadata.Display.DisplayTypeKey).AsStringValue(), - Rotate = item.GetFieldValue(Models.Metadata.Display.RotateKey)?.ToString(), - FlipX = item.GetFieldValue(Models.Metadata.Display.FlipXKey).FromYesNo(), - Width = item.GetFieldValue(Models.Metadata.Display.WidthKey)?.ToString(), - Height = item.GetFieldValue(Models.Metadata.Display.HeightKey)?.ToString(), - Refresh = item.GetFieldValue(Models.Metadata.Display.RefreshKey)?.ToString(), - PixClock = item.GetFieldValue(Models.Metadata.Display.PixClockKey)?.ToString(), - HTotal = item.GetFieldValue(Models.Metadata.Display.HTotalKey)?.ToString(), - HBEnd = item.GetFieldValue(Models.Metadata.Display.HBEndKey)?.ToString(), - HBStart = item.GetFieldValue(Models.Metadata.Display.HBStartKey)?.ToString(), - VTotal = item.GetFieldValue(Models.Metadata.Display.VTotalKey)?.ToString(), - VBEnd = item.GetFieldValue(Models.Metadata.Display.VBEndKey)?.ToString(), - VBStart = item.GetFieldValue(Models.Metadata.Display.VBStartKey)?.ToString(), + Rotate = item.GetInt64FieldValue(Models.Metadata.Display.RotateKey)?.ToString(), + FlipX = item.GetBoolFieldValue(Models.Metadata.Display.FlipXKey).FromYesNo(), + Width = item.GetStringFieldValue(Models.Metadata.Display.WidthKey)?.ToString(), + Height = item.GetStringFieldValue(Models.Metadata.Display.HeightKey)?.ToString(), + Refresh = item.GetDoubleFieldValue(Models.Metadata.Display.RefreshKey)?.ToString(), + PixClock = item.GetStringFieldValue(Models.Metadata.Display.PixClockKey)?.ToString(), + HTotal = item.GetStringFieldValue(Models.Metadata.Display.HTotalKey)?.ToString(), + HBEnd = item.GetStringFieldValue(Models.Metadata.Display.HBEndKey)?.ToString(), + HBStart = item.GetStringFieldValue(Models.Metadata.Display.HBStartKey)?.ToString(), + VTotal = item.GetStringFieldValue(Models.Metadata.Display.VTotalKey)?.ToString(), + VBEnd = item.GetStringFieldValue(Models.Metadata.Display.VBEndKey)?.ToString(), + VBStart = item.GetStringFieldValue(Models.Metadata.Display.VBStartKey)?.ToString(), }; return display; @@ -532,7 +532,7 @@ namespace SabreTools.DatFiles.Formats { var sound = new Models.Listxml.Sound { - Channels = item.GetFieldValue(Models.Metadata.Sound.ChannelsKey)?.ToString(), + Channels = item.GetInt64FieldValue(Models.Metadata.Sound.ChannelsKey)?.ToString(), }; return sound; @@ -545,12 +545,12 @@ namespace SabreTools.DatFiles.Formats { var input = new Models.Listxml.Input { - Service = item.GetFieldValue(Models.Metadata.Input.ServiceKey).FromYesNo(), - Tilt = item.GetFieldValue(Models.Metadata.Input.TiltKey).FromYesNo(), - Players = item.GetFieldValue(Models.Metadata.Input.PlayersKey)?.ToString(), - //ControlAttr = item.GetFieldValue(Models.Metadata.Input.ControlKey), - Buttons = item.GetFieldValue(Models.Metadata.Input.ButtonsKey)?.ToString(), - Coins = item.GetFieldValue(Models.Metadata.Input.CoinsKey)?.ToString(), + Service = item.GetBoolFieldValue(Models.Metadata.Input.ServiceKey).FromYesNo(), + Tilt = item.GetBoolFieldValue(Models.Metadata.Input.TiltKey).FromYesNo(), + Players = item.GetInt64FieldValue(Models.Metadata.Input.PlayersKey)?.ToString(), + //ControlAttr = item.GetStringFieldValue(Models.Metadata.Input.ControlKey), + Buttons = item.GetInt64FieldValue(Models.Metadata.Input.ButtonsKey)?.ToString(), + Coins = item.GetInt64FieldValue(Models.Metadata.Input.CoinsKey)?.ToString(), }; var controls = new List(); @@ -574,17 +574,17 @@ namespace SabreTools.DatFiles.Formats var control = new Models.Listxml.Control { Type = item.GetFieldValue(Models.Metadata.Control.ControlTypeKey).AsStringValue(), - Player = item.GetFieldValue(Models.Metadata.Control.PlayerKey)?.ToString(), - Buttons = item.GetFieldValue(Models.Metadata.Control.ButtonsKey)?.ToString(), - ReqButtons = item.GetFieldValue(Models.Metadata.Control.ReqButtonsKey)?.ToString(), - Minimum = item.GetFieldValue(Models.Metadata.Control.MinimumKey)?.ToString(), - Maximum = item.GetFieldValue(Models.Metadata.Control.MaximumKey)?.ToString(), - Sensitivity = item.GetFieldValue(Models.Metadata.Control.SensitivityKey)?.ToString(), - KeyDelta = item.GetFieldValue(Models.Metadata.Control.KeyDeltaKey)?.ToString(), - Reverse = item.GetFieldValue(Models.Metadata.Control.ReverseKey).FromYesNo(), - Ways = item.GetFieldValue(Models.Metadata.Control.WaysKey), - Ways2 = item.GetFieldValue(Models.Metadata.Control.Ways2Key), - Ways3 = item.GetFieldValue(Models.Metadata.Control.Ways3Key), + Player = item.GetInt64FieldValue(Models.Metadata.Control.PlayerKey)?.ToString(), + Buttons = item.GetInt64FieldValue(Models.Metadata.Control.ButtonsKey)?.ToString(), + ReqButtons = item.GetInt64FieldValue(Models.Metadata.Control.ReqButtonsKey)?.ToString(), + Minimum = item.GetInt64FieldValue(Models.Metadata.Control.MinimumKey)?.ToString(), + Maximum = item.GetInt64FieldValue(Models.Metadata.Control.MaximumKey)?.ToString(), + Sensitivity = item.GetInt64FieldValue(Models.Metadata.Control.SensitivityKey)?.ToString(), + KeyDelta = item.GetInt64FieldValue(Models.Metadata.Control.KeyDeltaKey)?.ToString(), + Reverse = item.GetBoolFieldValue(Models.Metadata.Control.ReverseKey).FromYesNo(), + Ways = item.GetStringFieldValue(Models.Metadata.Control.WaysKey), + Ways2 = item.GetStringFieldValue(Models.Metadata.Control.Ways2Key), + Ways3 = item.GetStringFieldValue(Models.Metadata.Control.Ways3Key), }; return control; @@ -598,8 +598,8 @@ namespace SabreTools.DatFiles.Formats var dipswitch = new Models.Listxml.DipSwitch { Name = item.GetName(), - Tag = item.GetFieldValue(Models.Metadata.DipSwitch.TagKey), - Mask = item.GetFieldValue(Models.Metadata.DipSwitch.MaskKey), + Tag = item.GetStringFieldValue(Models.Metadata.DipSwitch.TagKey), + Mask = item.GetStringFieldValue(Models.Metadata.DipSwitch.MaskKey), }; if (item.ConditionsSpecified) @@ -607,10 +607,10 @@ namespace SabreTools.DatFiles.Formats var conditionItem = item.GetFieldValue(Models.Metadata.DipSwitch.ConditionKey)?.FirstOrDefault(); var condition = new Models.Listxml.Condition { - Tag = conditionItem?.GetFieldValue(Models.Metadata.Condition.TagKey), - Mask = conditionItem?.GetFieldValue(Models.Metadata.Condition.MaskKey), + Tag = conditionItem?.GetStringFieldValue(Models.Metadata.Condition.TagKey), + Mask = conditionItem?.GetStringFieldValue(Models.Metadata.Condition.MaskKey), Relation = conditionItem?.GetFieldValue(Models.Metadata.Condition.RelationKey).AsStringValue(), - Value = conditionItem?.GetFieldValue(Models.Metadata.Condition.ValueKey), + Value = conditionItem?.GetStringFieldValue(Models.Metadata.Condition.ValueKey), }; dipswitch.Condition = condition; } @@ -646,8 +646,8 @@ namespace SabreTools.DatFiles.Formats var diplocation = new Models.Listxml.DipLocation { Name = item.GetName(), - Number = item.GetFieldValue(Models.Metadata.DipLocation.NumberKey)?.ToString(), - Inverted = item.GetFieldValue(Models.Metadata.DipLocation.InvertedKey).FromYesNo(), + Number = item.GetInt64FieldValue(Models.Metadata.DipLocation.NumberKey)?.ToString(), + Inverted = item.GetBoolFieldValue(Models.Metadata.DipLocation.InvertedKey).FromYesNo(), }; return diplocation; @@ -661,8 +661,8 @@ namespace SabreTools.DatFiles.Formats var dipvalue = new Models.Listxml.DipValue { Name = item.GetName(), - Value = item.GetFieldValue(Models.Metadata.DipValue.ValueKey), - Default = item.GetFieldValue(Models.Metadata.DipValue.DefaultKey).FromYesNo(), + Value = item.GetStringFieldValue(Models.Metadata.DipValue.ValueKey), + Default = item.GetBoolFieldValue(Models.Metadata.DipValue.DefaultKey).FromYesNo(), }; if (item.ConditionsSpecified) @@ -670,10 +670,10 @@ namespace SabreTools.DatFiles.Formats var conditionItem = item.GetFieldValue(Models.Metadata.DipValue.ConditionKey)?.FirstOrDefault(); var condition = new Models.Listxml.Condition { - Tag = conditionItem?.GetFieldValue(Models.Metadata.Condition.TagKey), - Mask = conditionItem?.GetFieldValue(Models.Metadata.Condition.MaskKey), + Tag = conditionItem?.GetStringFieldValue(Models.Metadata.Condition.TagKey), + Mask = conditionItem?.GetStringFieldValue(Models.Metadata.Condition.MaskKey), Relation = conditionItem?.GetFieldValue(Models.Metadata.Condition.RelationKey).AsStringValue(), - Value = conditionItem?.GetFieldValue(Models.Metadata.Condition.ValueKey), + Value = conditionItem?.GetStringFieldValue(Models.Metadata.Condition.ValueKey), }; dipvalue.Condition = condition; } @@ -689,8 +689,8 @@ namespace SabreTools.DatFiles.Formats var configuration = new Models.Listxml.Configuration { Name = item.GetName(), - Tag = item.GetFieldValue(Models.Metadata.Configuration.TagKey), - Mask = item.GetFieldValue(Models.Metadata.Configuration.MaskKey), + Tag = item.GetStringFieldValue(Models.Metadata.Configuration.TagKey), + Mask = item.GetStringFieldValue(Models.Metadata.Configuration.MaskKey), }; if (item.ConditionsSpecified) @@ -698,10 +698,10 @@ namespace SabreTools.DatFiles.Formats var conditionItem = item.GetFieldValue(Models.Metadata.Configuration.ConditionKey)?.FirstOrDefault(); var condition = new Models.Listxml.Condition { - Tag = conditionItem?.GetFieldValue(Models.Metadata.Condition.TagKey), - Mask = conditionItem?.GetFieldValue(Models.Metadata.Condition.MaskKey), + Tag = conditionItem?.GetStringFieldValue(Models.Metadata.Condition.TagKey), + Mask = conditionItem?.GetStringFieldValue(Models.Metadata.Condition.MaskKey), Relation = conditionItem?.GetFieldValue(Models.Metadata.Condition.RelationKey).AsStringValue(), - Value = conditionItem?.GetFieldValue(Models.Metadata.Condition.ValueKey), + Value = conditionItem?.GetStringFieldValue(Models.Metadata.Condition.ValueKey), }; configuration.Condition = condition; } @@ -737,8 +737,8 @@ namespace SabreTools.DatFiles.Formats var conflocation = new Models.Listxml.ConfLocation { Name = item.GetName(), - Number = item.GetFieldValue(Models.Metadata.ConfLocation.NumberKey)?.ToString(), - Inverted = item.GetFieldValue(Models.Metadata.ConfLocation.InvertedKey).FromYesNo(), + Number = item.GetInt64FieldValue(Models.Metadata.ConfLocation.NumberKey)?.ToString(), + Inverted = item.GetBoolFieldValue(Models.Metadata.ConfLocation.InvertedKey).FromYesNo(), }; return conflocation; @@ -752,8 +752,8 @@ namespace SabreTools.DatFiles.Formats var confsetting = new Models.Listxml.ConfSetting { Name = item.GetName(), - Value = item.GetFieldValue(Models.Metadata.ConfSetting.ValueKey), - Default = item.GetFieldValue(Models.Metadata.ConfSetting.DefaultKey).FromYesNo(), + Value = item.GetStringFieldValue(Models.Metadata.ConfSetting.ValueKey), + Default = item.GetBoolFieldValue(Models.Metadata.ConfSetting.DefaultKey).FromYesNo(), }; if (item.ConditionsSpecified) @@ -761,10 +761,10 @@ namespace SabreTools.DatFiles.Formats var conditionItem = item.GetFieldValue(Models.Metadata.ConfSetting.ConditionKey)?.FirstOrDefault(); var condition = new Models.Listxml.Condition { - Tag = conditionItem?.GetFieldValue(Models.Metadata.Condition.TagKey), - Mask = conditionItem?.GetFieldValue(Models.Metadata.Condition.MaskKey), + Tag = conditionItem?.GetStringFieldValue(Models.Metadata.Condition.TagKey), + Mask = conditionItem?.GetStringFieldValue(Models.Metadata.Condition.MaskKey), Relation = conditionItem?.GetFieldValue(Models.Metadata.Condition.RelationKey).AsStringValue(), - Value = conditionItem?.GetFieldValue(Models.Metadata.Condition.ValueKey), + Value = conditionItem?.GetStringFieldValue(Models.Metadata.Condition.ValueKey), }; confsetting.Condition = condition; } @@ -779,7 +779,7 @@ namespace SabreTools.DatFiles.Formats { var port = new Models.Listxml.Port { - Tag = item.GetFieldValue(Models.Metadata.Port.TagKey), + Tag = item.GetStringFieldValue(Models.Metadata.Port.TagKey), }; return port; @@ -793,7 +793,7 @@ namespace SabreTools.DatFiles.Formats var adjuster = new Models.Listxml.Adjuster { Name = item.GetName(), - Default = item.GetFieldValue(Models.Metadata.Adjuster.DefaultKey).FromYesNo(), + Default = item.GetBoolFieldValue(Models.Metadata.Adjuster.DefaultKey).FromYesNo(), }; if (item.ConditionsSpecified) @@ -801,10 +801,10 @@ namespace SabreTools.DatFiles.Formats var conditionItem = item.GetFieldValue(Models.Metadata.Adjuster.ConditionKey)?.FirstOrDefault(); var condition = new Models.Listxml.Condition { - Tag = conditionItem?.GetFieldValue(Models.Metadata.Condition.TagKey), - Mask = conditionItem?.GetFieldValue(Models.Metadata.Condition.MaskKey), + Tag = conditionItem?.GetStringFieldValue(Models.Metadata.Condition.TagKey), + Mask = conditionItem?.GetStringFieldValue(Models.Metadata.Condition.MaskKey), Relation = conditionItem?.GetFieldValue(Models.Metadata.Condition.RelationKey).AsStringValue(), - Value = conditionItem?.GetFieldValue(Models.Metadata.Condition.ValueKey), + Value = conditionItem?.GetStringFieldValue(Models.Metadata.Condition.ValueKey), }; adjuster.Condition = condition; } @@ -822,14 +822,14 @@ namespace SabreTools.DatFiles.Formats 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.GetFieldValue(Models.Metadata.Driver.PaletteSizeKey)?.ToString(), + PaletteSize = item.GetInt64FieldValue(Models.Metadata.Driver.PaletteSizeKey)?.ToString(), Emulation = item.GetFieldValue(Models.Metadata.Driver.EmulationKey).AsStringValue(), Cocktail = item.GetFieldValue(Models.Metadata.Driver.CocktailKey).AsStringValue(), SaveState = item.GetFieldValue(Models.Metadata.Driver.SaveStateKey).AsStringValue(useSecond: true), - RequiresArtwork = item.GetFieldValue(Models.Metadata.Driver.RequiresArtworkKey).FromYesNo(), - Unofficial = item.GetFieldValue(Models.Metadata.Driver.UnofficialKey).FromYesNo(), - NoSoundHardware = item.GetFieldValue(Models.Metadata.Driver.NoSoundHardwareKey).FromYesNo(), - Incomplete = item.GetFieldValue(Models.Metadata.Driver.IncompleteKey).FromYesNo(), + RequiresArtwork = item.GetBoolFieldValue(Models.Metadata.Driver.RequiresArtworkKey).FromYesNo(), + Unofficial = item.GetBoolFieldValue(Models.Metadata.Driver.UnofficialKey).FromYesNo(), + NoSoundHardware = item.GetBoolFieldValue(Models.Metadata.Driver.NoSoundHardwareKey).FromYesNo(), + Incomplete = item.GetBoolFieldValue(Models.Metadata.Driver.IncompleteKey).FromYesNo(), }; return driver; @@ -858,10 +858,10 @@ namespace SabreTools.DatFiles.Formats var device = new Models.Listxml.Device { Type = item.GetFieldValue(Models.Metadata.Device.DeviceTypeKey).AsStringValue(), - Tag = item.GetFieldValue(Models.Metadata.Device.TagKey), - FixedImage = item.GetFieldValue(Models.Metadata.Device.FixedImageKey), - Mandatory = item.GetFieldValue(Models.Metadata.Device.MandatoryKey)?.ToString(), - Interface = item.GetFieldValue(Models.Metadata.Device.InterfaceKey), + Tag = item.GetStringFieldValue(Models.Metadata.Device.TagKey), + FixedImage = item.GetStringFieldValue(Models.Metadata.Device.FixedImageKey), + Mandatory = item.GetInt64FieldValue(Models.Metadata.Device.MandatoryKey)?.ToString(), + Interface = item.GetStringFieldValue(Models.Metadata.Device.InterfaceKey), }; if (item.InstancesSpecified) @@ -870,7 +870,7 @@ namespace SabreTools.DatFiles.Formats var instance = new Models.Listxml.Instance { Name = instanceItem?.GetName(), - BriefName = instanceItem?.GetFieldValue(Models.Metadata.Instance.BriefNameKey), + BriefName = instanceItem?.GetStringFieldValue(Models.Metadata.Instance.BriefNameKey), }; device.Instance = instance; } @@ -907,8 +907,8 @@ namespace SabreTools.DatFiles.Formats var slotoption = new Models.Listxml.SlotOption { Name = slotoptionItem.GetName(), - DevName = slotoptionItem.GetFieldValue(Models.Metadata.SlotOption.DevNameKey), - Default = slotoptionItem.GetFieldValue(Models.Metadata.SlotOption.DefaultKey).FromYesNo(), + DevName = slotoptionItem.GetStringFieldValue(Models.Metadata.SlotOption.DevNameKey), + Default = slotoptionItem.GetBoolFieldValue(Models.Metadata.SlotOption.DefaultKey).FromYesNo(), }; slotoptions.Add(slotoption); } @@ -926,10 +926,10 @@ namespace SabreTools.DatFiles.Formats { var softwarelist = new Models.Listxml.SoftwareList { - Tag = item.GetFieldValue(Models.Metadata.SoftwareList.TagKey), + Tag = item.GetStringFieldValue(Models.Metadata.SoftwareList.TagKey), Name = item.GetName(), Status = item.GetFieldValue(Models.Metadata.SoftwareList.StatusKey).AsStringValue(), - Filter = item.GetFieldValue(Models.Metadata.SoftwareList.FilterKey), + Filter = item.GetStringFieldValue(Models.Metadata.SoftwareList.FilterKey), }; return softwarelist; @@ -943,8 +943,8 @@ namespace SabreTools.DatFiles.Formats var softwarelist = new Models.Listxml.RamOption { Name = item.GetName(), - Default = item.GetFieldValue(Models.Metadata.RamOption.DefaultKey).FromYesNo(), - Content = item.GetFieldValue(Models.Metadata.RamOption.ContentKey), + Default = item.GetBoolFieldValue(Models.Metadata.RamOption.DefaultKey).FromYesNo(), + Content = item.GetStringFieldValue(Models.Metadata.RamOption.ContentKey), }; return softwarelist; diff --git a/SabreTools.DatFiles/Formats/Logiqx.Writer.cs b/SabreTools.DatFiles/Formats/Logiqx.Writer.cs index e68ef7db..01059d46 100644 --- a/SabreTools.DatFiles/Formats/Logiqx.Writer.cs +++ b/SabreTools.DatFiles/Formats/Logiqx.Writer.cs @@ -37,29 +37,29 @@ namespace SabreTools.DatFiles.Formats case Release release: if (string.IsNullOrEmpty(release.GetName())) missingFields.Add(Models.Metadata.Release.NameKey); - if (string.IsNullOrEmpty(release.GetFieldValue(Models.Metadata.Release.RegionKey))) + if (string.IsNullOrEmpty(release.GetStringFieldValue(Models.Metadata.Release.RegionKey))) missingFields.Add(Models.Metadata.Release.RegionKey); break; case BiosSet biosset: if (string.IsNullOrEmpty(biosset.GetName())) missingFields.Add(Models.Metadata.BiosSet.NameKey); - if (string.IsNullOrEmpty(biosset.GetFieldValue(Models.Metadata.BiosSet.DescriptionKey))) + if (string.IsNullOrEmpty(biosset.GetStringFieldValue(Models.Metadata.BiosSet.DescriptionKey))) missingFields.Add(Models.Metadata.BiosSet.DescriptionKey); break; case Rom rom: if (string.IsNullOrEmpty(rom.GetName())) missingFields.Add(Models.Metadata.Rom.NameKey); - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < 0) + if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null || rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) < 0) missingFields.Add(Models.Metadata.Rom.SizeKey); - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA256Key)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA384Key)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA512Key)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SpamSumKey))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey))) { missingFields.Add(Models.Metadata.Rom.SHA1Key); } @@ -68,8 +68,8 @@ namespace SabreTools.DatFiles.Formats case Disk disk: if (string.IsNullOrEmpty(disk.GetName())) missingFields.Add(Models.Metadata.Disk.NameKey); - if (string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key))) + if (string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key)) + && string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))) { missingFields.Add(Models.Metadata.Disk.SHA1Key); } @@ -78,10 +78,10 @@ namespace SabreTools.DatFiles.Formats case Media media: if (string.IsNullOrEmpty(media.GetName())) missingFields.Add(Models.Metadata.Media.NameKey); - if (string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.MD5Key)) - && string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA1Key)) - && string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA256Key)) - && string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SpamSumKey))) + if (string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.MD5Key)) + && string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key)) + && string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA256Key)) + && string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SpamSumKey))) { missingFields.Add(Models.Metadata.Media.SHA1Key); } @@ -114,7 +114,7 @@ namespace SabreTools.DatFiles.Formats break; case DatItems.Formats.SoftwareList softwarelist: - if (string.IsNullOrEmpty(softwarelist.GetFieldValue(Models.Metadata.SoftwareList.TagKey))) + if (string.IsNullOrEmpty(softwarelist.GetStringFieldValue(Models.Metadata.SoftwareList.TagKey))) missingFields.Add(Models.Metadata.SoftwareList.TagKey); if (string.IsNullOrEmpty(softwarelist.GetName())) missingFields.Add(Models.Metadata.SoftwareList.NameKey); @@ -137,7 +137,7 @@ namespace SabreTools.DatFiles.Formats // Only write the doctype if we don't have No-Intro data bool success; - if (string.IsNullOrEmpty(Header.GetFieldValue(Models.Metadata.Header.IdKey))) + if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.IdKey))) success = new Serialization.Files.Logiqx().SerializeToFileWithDocType(datafile, outfile); else success = new Serialization.Files.Logiqx().Serialize(datafile, outfile); @@ -168,14 +168,14 @@ namespace SabreTools.DatFiles.Formats { var datafile = new Models.Logiqx.Datafile { - Build = Header.GetFieldValue(Models.Metadata.Header.BuildKey), - Debug = Header.GetFieldValue(Models.Metadata.Header.DebugKey).FromYesNo(), + Build = Header.GetStringFieldValue(Models.Metadata.Header.BuildKey), + Debug = Header.GetBoolFieldValue(Models.Metadata.Header.DebugKey).FromYesNo(), Header = CreateHeader(), Game = CreateGames(ignoreblanks) }; - if (!string.IsNullOrEmpty(Header.GetFieldValue(Models.Metadata.Header.IdKey))) + if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.IdKey))) datafile.SchemaLocation = "https://datomatic.no-intro.org/stuff https://datomatic.no-intro.org/stuff/schema_nointro_datfile_v3.xsd"; return datafile; @@ -192,19 +192,19 @@ namespace SabreTools.DatFiles.Formats var header = new Models.Logiqx.Header { - Id = Header.GetFieldValue(Models.Metadata.Header.IdKey), - Name = Header.GetFieldValue(Models.Metadata.Header.NameKey), - Description = Header.GetFieldValue(Models.Metadata.Header.DescriptionKey), - RootDir = Header.GetFieldValue(Models.Metadata.Header.RootDirKey), - Category = Header.GetFieldValue(Models.Metadata.Header.CategoryKey), - Version = Header.GetFieldValue(Models.Metadata.Header.VersionKey), - Date = Header.GetFieldValue(Models.Metadata.Header.DateKey), - Author = Header.GetFieldValue(Models.Metadata.Header.AuthorKey), - Email = Header.GetFieldValue(Models.Metadata.Header.EmailKey), - Homepage = Header.GetFieldValue(Models.Metadata.Header.HomepageKey), - Url = Header.GetFieldValue(Models.Metadata.Header.UrlKey), - Comment = Header.GetFieldValue(Models.Metadata.Header.CommentKey), - Type = Header.GetFieldValue(Models.Metadata.Header.TypeKey), + Id = Header.GetStringFieldValue(Models.Metadata.Header.IdKey), + 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), + Email = Header.GetStringFieldValue(Models.Metadata.Header.EmailKey), + Homepage = Header.GetStringFieldValue(Models.Metadata.Header.HomepageKey), + Url = Header.GetStringFieldValue(Models.Metadata.Header.UrlKey), + Comment = Header.GetStringFieldValue(Models.Metadata.Header.CommentKey), + Type = Header.GetStringFieldValue(Models.Metadata.Header.TypeKey), ClrMamePro = CreateClrMamePro(), RomCenter = CreateRomCenter(), @@ -222,14 +222,14 @@ namespace SabreTools.DatFiles.Formats if (Header.GetFieldValue(Models.Metadata.Header.ForceMergingKey) == MergingFlag.None && Header.GetFieldValue(Models.Metadata.Header.ForceNodumpKey) == NodumpFlag.None && Header.GetFieldValue(Models.Metadata.Header.ForcePackingKey) == PackingFlag.None - && string.IsNullOrEmpty(Header.GetFieldValue(Models.Metadata.Header.HeaderKey))) + && string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey))) { return null; } var subheader = new Models.Logiqx.ClrMamePro { - Header = Header.GetFieldValue(Models.Metadata.Header.HeaderKey), + Header = Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey), }; if (Header.GetFieldValue(Models.Metadata.Header.ForceMergingKey) != MergingFlag.None) @@ -248,11 +248,11 @@ namespace SabreTools.DatFiles.Formats private Models.Logiqx.RomCenter? CreateRomCenter() { // If we don't have subheader values, we can't do anything - if (string.IsNullOrEmpty(Header.GetFieldValue(Models.Metadata.Header.SystemKey)) + if (string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.SystemKey)) && Header.GetFieldValue(Models.Metadata.Header.BiosModeKey) == MergingFlag.None - && Header.GetFieldValue(Models.Metadata.Header.LockBiosModeKey) == null - && Header.GetFieldValue(Models.Metadata.Header.LockRomModeKey) == null - && Header.GetFieldValue(Models.Metadata.Header.LockSampleModeKey) == null + && Header.GetBoolFieldValue(Models.Metadata.Header.LockBiosModeKey) == null + && Header.GetBoolFieldValue(Models.Metadata.Header.LockRomModeKey) == null + && Header.GetBoolFieldValue(Models.Metadata.Header.LockSampleModeKey) == null && Header.GetFieldValue(Models.Metadata.Header.RomModeKey) == MergingFlag.None && Header.GetFieldValue(Models.Metadata.Header.SampleModeKey) == MergingFlag.None) { @@ -261,7 +261,7 @@ namespace SabreTools.DatFiles.Formats var subheader = new Models.Logiqx.RomCenter { - Plugin = Header.GetFieldValue(Models.Metadata.Header.PluginKey), + Plugin = Header.GetStringFieldValue(Models.Metadata.Header.PluginKey), }; if (Header.GetFieldValue(Models.Metadata.Header.RomModeKey) != MergingFlag.None) @@ -271,12 +271,12 @@ namespace SabreTools.DatFiles.Formats if (Header.GetFieldValue(Models.Metadata.Header.SampleModeKey) != MergingFlag.None) subheader.SampleMode = Header.GetFieldValue(Models.Metadata.Header.SampleModeKey).AsStringValue(useSecond: true); - if (Header.GetFieldValue(Models.Metadata.Header.LockRomModeKey) != null) - subheader.LockRomMode = Header.GetFieldValue(Models.Metadata.Header.LockRomModeKey).FromYesNo(); - if (Header.GetFieldValue(Models.Metadata.Header.LockBiosModeKey) != null) - subheader.LockBiosMode = Header.GetFieldValue(Models.Metadata.Header.LockBiosModeKey).FromYesNo(); - if (Header.GetFieldValue(Models.Metadata.Header.LockSampleModeKey) != null) - subheader.LockSampleMode = Header.GetFieldValue(Models.Metadata.Header.LockSampleModeKey).FromYesNo(); + if (Header.GetBoolFieldValue(Models.Metadata.Header.LockRomModeKey) != null) + subheader.LockRomMode = Header.GetBoolFieldValue(Models.Metadata.Header.LockRomModeKey).FromYesNo(); + if (Header.GetBoolFieldValue(Models.Metadata.Header.LockBiosModeKey) != null) + subheader.LockBiosMode = Header.GetBoolFieldValue(Models.Metadata.Header.LockBiosModeKey).FromYesNo(); + if (Header.GetBoolFieldValue(Models.Metadata.Header.LockSampleModeKey) != null) + subheader.LockSampleMode = Header.GetBoolFieldValue(Models.Metadata.Header.LockSampleModeKey).FromYesNo(); return subheader; } @@ -389,39 +389,39 @@ namespace SabreTools.DatFiles.Formats { Models.Logiqx.GameBase game = _deprecated ? new Models.Logiqx.Game() : new Models.Logiqx.Machine(); - game.Name = machine.GetFieldValue(Models.Metadata.Machine.NameKey); - game.SourceFile = machine.GetFieldValue(Models.Metadata.Machine.SourceFileKey); - if (machine.GetFieldValue(Models.Metadata.Machine.IsBiosKey) == true) + game.Name = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey); + game.SourceFile = machine.GetStringFieldValue(Models.Metadata.Machine.SourceFileKey); + if (machine.GetBoolFieldValue(Models.Metadata.Machine.IsBiosKey) == true) game.IsBios = "yes"; - if (machine.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true) + if (machine.GetBoolFieldValue(Models.Metadata.Machine.IsDeviceKey) == true) game.IsDevice = "yes"; - if (machine.GetFieldValue(Models.Metadata.Machine.IsMechanicalKey) == true) + if (machine.GetBoolFieldValue(Models.Metadata.Machine.IsMechanicalKey) == true) game.IsMechanical = "yes"; - game.CloneOf = machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey); - game.RomOf = machine.GetFieldValue(Models.Metadata.Machine.RomOfKey); - game.SampleOf = machine.GetFieldValue(Models.Metadata.Machine.SampleOfKey); - game.Board = machine.GetFieldValue(Models.Metadata.Machine.BoardKey); - game.RebuildTo = machine.GetFieldValue(Models.Metadata.Machine.RebuildToKey); - game.Id = machine.GetFieldValue(Models.Metadata.Machine.IdKey); - game.CloneOfId = machine.GetFieldValue(Models.Metadata.Machine.CloneOfIdKey); + game.CloneOf = machine.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey); + game.RomOf = machine.GetStringFieldValue(Models.Metadata.Machine.RomOfKey); + game.SampleOf = machine.GetStringFieldValue(Models.Metadata.Machine.SampleOfKey); + game.Board = machine.GetStringFieldValue(Models.Metadata.Machine.BoardKey); + game.RebuildTo = machine.GetStringFieldValue(Models.Metadata.Machine.RebuildToKey); + game.Id = machine.GetStringFieldValue(Models.Metadata.Machine.IdKey); + game.CloneOfId = machine.GetStringFieldValue(Models.Metadata.Machine.CloneOfIdKey); game.Runnable = machine.GetFieldValue(Models.Metadata.Machine.RunnableKey).AsStringValue(); - if (machine.GetFieldValue(Models.Metadata.Machine.CommentKey) != null) + if (machine.GetStringFieldValue(Models.Metadata.Machine.CommentKey) != null) { - if (machine.GetFieldValue(Models.Metadata.Machine.CommentKey)!.Contains(';')) - game.Comment = machine.GetFieldValue(Models.Metadata.Machine.CommentKey)!.Split(';'); + if (machine.GetStringFieldValue(Models.Metadata.Machine.CommentKey)!.Contains(';')) + game.Comment = machine.GetStringFieldValue(Models.Metadata.Machine.CommentKey)!.Split(';'); else - game.Comment = [machine.GetFieldValue(Models.Metadata.Machine.CommentKey)!]; + game.Comment = [machine.GetStringFieldValue(Models.Metadata.Machine.CommentKey)!]; } - game.Description = machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey); - game.Year = machine.GetFieldValue(Models.Metadata.Machine.YearKey); - game.Manufacturer = machine.GetFieldValue(Models.Metadata.Machine.ManufacturerKey); - game.Publisher = machine.GetFieldValue(Models.Metadata.Machine.PublisherKey); - if (machine.GetFieldValue(Models.Metadata.Machine.CategoryKey) != null) + game.Description = machine.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey); + game.Year = machine.GetStringFieldValue(Models.Metadata.Machine.YearKey); + game.Manufacturer = machine.GetStringFieldValue(Models.Metadata.Machine.ManufacturerKey); + game.Publisher = machine.GetStringFieldValue(Models.Metadata.Machine.PublisherKey); + if (machine.GetStringFieldValue(Models.Metadata.Machine.CategoryKey) != null) { - if (machine.GetFieldValue(Models.Metadata.Machine.CategoryKey)!.Contains(';')) - game.Category = machine.GetFieldValue(Models.Metadata.Machine.CategoryKey)!.Split(';'); + if (machine.GetStringFieldValue(Models.Metadata.Machine.CategoryKey)!.Contains(';')) + game.Category = machine.GetStringFieldValue(Models.Metadata.Machine.CategoryKey)!.Split(';'); else - game.Category = [machine.GetFieldValue(Models.Metadata.Machine.CategoryKey)!]; + game.Category = [machine.GetStringFieldValue(Models.Metadata.Machine.CategoryKey)!]; } game.Trurip = CreateTrurip(machine); @@ -450,18 +450,18 @@ namespace SabreTools.DatFiles.Formats var trurip = new Models.Logiqx.Trurip { TitleID = machine.TitleID, - Publisher = machine.GetFieldValue(Models.Metadata.Machine.PublisherKey), + Publisher = machine.GetStringFieldValue(Models.Metadata.Machine.PublisherKey), Developer = machine.Developer, - Year = machine.GetFieldValue(Models.Metadata.Machine.YearKey), + Year = machine.GetStringFieldValue(Models.Metadata.Machine.YearKey), Genre = machine.Genre, Subgenre = machine.Subgenre, Ratings = machine.Ratings, Score = machine.Score, - Players = machine.GetFieldValue(Models.Metadata.Machine.PlayersKey), + Players = machine.GetStringFieldValue(Models.Metadata.Machine.PlayersKey), Enabled = machine.Enabled, CRC = machine.Crc.FromYesNo(), - Source = machine.GetFieldValue(Models.Metadata.Machine.SourceFileKey), - CloneOf = machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey), + Source = machine.GetStringFieldValue(Models.Metadata.Machine.SourceFileKey), + CloneOf = machine.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey), RelatedTo = machine.RelatedTo, }; @@ -476,10 +476,10 @@ namespace SabreTools.DatFiles.Formats var release = new Models.Logiqx.Release { Name = item.GetName(), - Region = item.GetFieldValue(Models.Metadata.Release.RegionKey), - Language = item.GetFieldValue(Models.Metadata.Release.LanguageKey), - Date = item.GetFieldValue(Models.Metadata.Release.DateKey), - Default = item.GetFieldValue(Models.Metadata.Release.DefaultKey).FromYesNo(), + 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; @@ -493,8 +493,8 @@ namespace SabreTools.DatFiles.Formats var biosset = new Models.Logiqx.BiosSet { Name = item.GetName(), - Default = item.GetFieldValue(Models.Metadata.BiosSet.DefaultKey).FromYesNo(), - Description = item.GetFieldValue(Models.Metadata.BiosSet.DescriptionKey), + Default = item.GetBoolFieldValue(Models.Metadata.BiosSet.DefaultKey).FromYesNo(), + Description = item.GetStringFieldValue(Models.Metadata.BiosSet.DescriptionKey), }; return biosset; @@ -508,22 +508,22 @@ namespace SabreTools.DatFiles.Formats var rom = new Models.Logiqx.Rom { Name = item.GetName(), - Size = item.GetFieldValue(Models.Metadata.Rom.SizeKey), - CRC = item.GetFieldValue(Models.Metadata.Rom.CRCKey), - MD5 = item.GetFieldValue(Models.Metadata.Rom.MD5Key), - SHA1 = item.GetFieldValue(Models.Metadata.Rom.SHA1Key), - SHA256 = item.GetFieldValue(Models.Metadata.Rom.SHA256Key), - SHA384 = item.GetFieldValue(Models.Metadata.Rom.SHA384Key), - SHA512 = item.GetFieldValue(Models.Metadata.Rom.SHA512Key), - SpamSum = item.GetFieldValue(Models.Metadata.Rom.SpamSumKey), - xxHash364 = item.GetFieldValue(Models.Metadata.Rom.xxHash364Key), - xxHash3128 = item.GetFieldValue(Models.Metadata.Rom.xxHash3128Key), - Merge = item.GetFieldValue(Models.Metadata.Rom.MergeKey), - Serial = item.GetFieldValue(Models.Metadata.Rom.SerialKey), - Header = item.GetFieldValue(Models.Metadata.Rom.HeaderKey), - Date = item.GetFieldValue(Models.Metadata.Rom.DateKey), - Inverted = item.GetFieldValue(Models.Metadata.Rom.InvertedKey).FromYesNo(), - MIA = item.GetFieldValue(Models.Metadata.Rom.MIAKey).FromYesNo(), + 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), + Serial = item.GetStringFieldValue(Models.Metadata.Rom.SerialKey), + Header = item.GetStringFieldValue(Models.Metadata.Rom.HeaderKey), + Date = item.GetStringFieldValue(Models.Metadata.Rom.DateKey), + Inverted = item.GetBoolFieldValue(Models.Metadata.Rom.InvertedKey).FromYesNo(), + MIA = item.GetBoolFieldValue(Models.Metadata.Rom.MIAKey).FromYesNo(), }; if (item.ItemStatusSpecified) @@ -540,10 +540,10 @@ namespace SabreTools.DatFiles.Formats var disk = new Models.Logiqx.Disk { Name = item.GetName(), - MD5 = item.GetFieldValue(Models.Metadata.Disk.MD5Key), - SHA1 = item.GetFieldValue(Models.Metadata.Disk.SHA1Key), - Merge = item.GetFieldValue(Models.Metadata.Disk.MergeKey), - Region = item.GetFieldValue(Models.Metadata.Disk.RegionKey), + MD5 = item.GetStringFieldValue(Models.Metadata.Disk.MD5Key), + SHA1 = item.GetStringFieldValue(Models.Metadata.Disk.SHA1Key), + Merge = item.GetStringFieldValue(Models.Metadata.Disk.MergeKey), + Region = item.GetStringFieldValue(Models.Metadata.Disk.RegionKey), }; if (item.GetFieldValue(Models.Metadata.Disk.StatusKey) != ItemStatus.NULL) @@ -560,10 +560,10 @@ namespace SabreTools.DatFiles.Formats var media = new Models.Logiqx.Media { Name = item.GetName(), - MD5 = item.GetFieldValue(Models.Metadata.Media.MD5Key), - SHA1 = item.GetFieldValue(Models.Metadata.Media.SHA1Key), - SHA256 = item.GetFieldValue(Models.Metadata.Media.SHA256Key), - SpamSum = item.GetFieldValue(Models.Metadata.Media.SpamSumKey), + 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; } @@ -615,10 +615,10 @@ namespace SabreTools.DatFiles.Formats Emulation = item.GetFieldValue(Models.Metadata.Driver.EmulationKey).AsStringValue(), Cocktail = item.GetFieldValue(Models.Metadata.Driver.CocktailKey).AsStringValue(), SaveState = item.GetFieldValue(Models.Metadata.Driver.SaveStateKey).AsStringValue(useSecond: true), - RequiresArtwork = item.GetFieldValue(Models.Metadata.Driver.RequiresArtworkKey).FromYesNo(), - Unofficial = item.GetFieldValue(Models.Metadata.Driver.UnofficialKey).FromYesNo(), - NoSoundHardware = item.GetFieldValue(Models.Metadata.Driver.NoSoundHardwareKey).FromYesNo(), - Incomplete = item.GetFieldValue(Models.Metadata.Driver.IncompleteKey).FromYesNo(), + RequiresArtwork = item.GetBoolFieldValue(Models.Metadata.Driver.RequiresArtworkKey).FromYesNo(), + Unofficial = item.GetBoolFieldValue(Models.Metadata.Driver.UnofficialKey).FromYesNo(), + NoSoundHardware = item.GetBoolFieldValue(Models.Metadata.Driver.NoSoundHardwareKey).FromYesNo(), + Incomplete = item.GetBoolFieldValue(Models.Metadata.Driver.IncompleteKey).FromYesNo(), }; return driver; @@ -631,9 +631,9 @@ namespace SabreTools.DatFiles.Formats { var softwarelist = new Models.Logiqx.SoftwareList { - Tag = item.GetFieldValue(Models.Metadata.SoftwareList.TagKey), + Tag = item.GetStringFieldValue(Models.Metadata.SoftwareList.TagKey), Name = item.GetName(), - Filter = item.GetFieldValue(Models.Metadata.SoftwareList.FilterKey), + Filter = item.GetStringFieldValue(Models.Metadata.SoftwareList.FilterKey), }; if (item.GetFieldValue(Models.Metadata.SoftwareList.StatusKey) != SoftwareListStatus.None) diff --git a/SabreTools.DatFiles/Formats/Missfile.Writer.cs b/SabreTools.DatFiles/Formats/Missfile.Writer.cs index 3a5c6df9..bddf0fac 100644 --- a/SabreTools.DatFiles/Formats/Missfile.Writer.cs +++ b/SabreTools.DatFiles/Formats/Missfile.Writer.cs @@ -59,11 +59,11 @@ namespace SabreTools.DatFiles.Formats datItem = ProcessNullifiedItem(datItem); // Write out the item if we're using machine names or we're not ignoring - if (!Header.GetFieldValue(DatHeader.UseRomNameKey) || !ShouldIgnore(datItem, ignoreblanks)) + if (!Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true || !ShouldIgnore(datItem, ignoreblanks)) WriteDatItem(sw, datItem, lastgame); // Set the new data to compare against - lastgame = datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey); + lastgame = datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey); } } @@ -92,10 +92,10 @@ namespace SabreTools.DatFiles.Formats ProcessItemName(datItem, false, forceRomName: false); // Romba mode automatically uses item name - if (Header.GetFieldValue(DatHeader.OutputDepotKey)?.IsActive == true || Header.GetFieldValue(DatHeader.UseRomNameKey)) + if (Header.GetFieldValue(DatHeader.OutputDepotKey)?.IsActive == true || Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true) sw.Write($"{datItem.GetName() ?? string.Empty}\n"); - else if (!Header.GetFieldValue(DatHeader.UseRomNameKey) && datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) != lastgame) - sw.Write($"{datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty}\n"); + else if (!Header.GetBoolFieldValue(DatHeader.UseRomNameKey) == true && datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) != lastgame) + sw.Write($"{datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty}\n"); sw.Flush(); } diff --git a/SabreTools.DatFiles/Formats/OfflineList.Writer.cs b/SabreTools.DatFiles/Formats/OfflineList.Writer.cs index 8ddbd4ed..62b2f0ca 100644 --- a/SabreTools.DatFiles/Formats/OfflineList.Writer.cs +++ b/SabreTools.DatFiles/Formats/OfflineList.Writer.cs @@ -34,9 +34,9 @@ namespace SabreTools.DatFiles.Formats switch (datItem) { case Rom rom: - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < 0) + if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null || rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) < 0) missingFields.Add(Models.Metadata.Rom.SizeKey); - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey))) missingFields.Add(Models.Metadata.Rom.CRCKey); break; } @@ -98,17 +98,17 @@ namespace SabreTools.DatFiles.Formats var configuration = new Models.OfflineList.Configuration { - DatName = Header.GetFieldValue(Models.Metadata.Header.NameKey), - ImFolder = Header.GetFieldValue(Models.Metadata.Header.ImFolderKey), - DatVersion = Header.GetFieldValue(Models.Metadata.Header.DatVersionKey), - System = Header.GetFieldValue(Models.Metadata.Header.SystemKey), - ScreenshotsWidth = Header.GetFieldValue(Models.Metadata.Header.ScreenshotsWidthKey), - ScreenshotsHeight = Header.GetFieldValue(Models.Metadata.Header.ScreenshotsHeightKey), + DatName = Header.GetStringFieldValue(Models.Metadata.Header.NameKey), + ImFolder = Header.GetStringFieldValue(Models.Metadata.Header.ImFolderKey), + DatVersion = Header.GetStringFieldValue(Models.Metadata.Header.DatVersionKey), + System = Header.GetStringFieldValue(Models.Metadata.Header.SystemKey), + ScreenshotsWidth = Header.GetStringFieldValue(Models.Metadata.Header.ScreenshotsWidthKey), + ScreenshotsHeight = Header.GetStringFieldValue(Models.Metadata.Header.ScreenshotsHeightKey), Infos = CreateInfos(), CanOpen = CreateCanOpen(), NewDat = CreateNewDat(), Search = CreateSearch(), - RomTitle = Header.GetFieldValue(Models.Metadata.Header.RomTitleKey), + RomTitle = Header.GetStringFieldValue(Models.Metadata.Header.RomTitleKey), }; return configuration; @@ -256,12 +256,12 @@ namespace SabreTools.DatFiles.Formats private Models.OfflineList.CanOpen? CreateCanOpen() { // If we don't have a canopen, we can't do anything - if (!Header.CanOpenSpecified || Header.GetFieldValue(Models.Metadata.Header.CanOpenKey) == null) + if (!Header.CanOpenSpecified || Header.GetStringArrayFieldValue(Models.Metadata.Header.CanOpenKey) == null) return null; var canOpen = new Models.OfflineList.CanOpen { - Extension = [.. Header.GetFieldValue(Models.Metadata.Header.CanOpenKey)], + Extension = [.. Header.GetStringArrayFieldValue(Models.Metadata.Header.CanOpenKey)], }; return canOpen; @@ -278,9 +278,9 @@ namespace SabreTools.DatFiles.Formats var newDat = new Models.OfflineList.NewDat { - DatVersionUrl = Header.GetFieldValue("DATVERSIONURL"), + DatVersionUrl = Header.GetStringFieldValue("DATVERSIONURL"), //DatUrl = Header.GetFieldValue("DATURL"); // TODO: Add to internal model - ImUrl = Header.GetFieldValue("IMURL"), + ImUrl = Header.GetStringFieldValue("IMURL"), }; return newDat; @@ -364,18 +364,18 @@ namespace SabreTools.DatFiles.Formats { var game = new Models.OfflineList.Game { - ImageNumber = machine.GetFieldValue(Models.Metadata.Machine.ImageNumberKey), - ReleaseNumber = machine.GetFieldValue(Models.Metadata.Machine.ReleaseNumberKey), - Title = machine.GetFieldValue(Models.Metadata.Machine.NameKey), - SaveType = machine.GetFieldValue(Models.Metadata.Machine.SaveTypeKey), - Publisher = machine.GetFieldValue(Models.Metadata.Machine.PublisherKey), - Location = machine.GetFieldValue(Models.Metadata.Machine.LocationKey), - SourceRom = machine.GetFieldValue(Models.Metadata.Machine.SourceRomKey), - Language = machine.GetFieldValue(Models.Metadata.Machine.LanguageKey), - Im1CRC = machine.GetFieldValue(Models.Metadata.Machine.Im1CRCKey), - Im2CRC = machine.GetFieldValue(Models.Metadata.Machine.Im2CRCKey), - Comment = machine.GetFieldValue(Models.Metadata.Machine.CommentKey), - DuplicateID = machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey), + ImageNumber = machine.GetStringFieldValue(Models.Metadata.Machine.ImageNumberKey), + ReleaseNumber = machine.GetStringFieldValue(Models.Metadata.Machine.ReleaseNumberKey), + Title = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey), + SaveType = machine.GetStringFieldValue(Models.Metadata.Machine.SaveTypeKey), + Publisher = machine.GetStringFieldValue(Models.Metadata.Machine.PublisherKey), + Location = machine.GetStringFieldValue(Models.Metadata.Machine.LocationKey), + SourceRom = machine.GetStringFieldValue(Models.Metadata.Machine.SourceRomKey), + Language = machine.GetStringFieldValue(Models.Metadata.Machine.LanguageKey), + Im1CRC = machine.GetStringFieldValue(Models.Metadata.Machine.Im1CRCKey), + Im2CRC = machine.GetStringFieldValue(Models.Metadata.Machine.Im2CRCKey), + Comment = machine.GetStringFieldValue(Models.Metadata.Machine.CommentKey), + DuplicateID = machine.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey), }; return game; @@ -388,7 +388,7 @@ namespace SabreTools.DatFiles.Formats { var romCRC = new Models.OfflineList.FileRomCRC { - Content = item.GetFieldValue(Models.Metadata.Rom.CRCKey), + Content = item.GetStringFieldValue(Models.Metadata.Rom.CRCKey), }; return romCRC; diff --git a/SabreTools.DatFiles/Formats/OpenMSX.Writer.cs b/SabreTools.DatFiles/Formats/OpenMSX.Writer.cs index dff46707..4ba11837 100644 --- a/SabreTools.DatFiles/Formats/OpenMSX.Writer.cs +++ b/SabreTools.DatFiles/Formats/OpenMSX.Writer.cs @@ -33,7 +33,7 @@ namespace SabreTools.DatFiles.Formats switch (datItem) { case Rom rom: - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key))) missingFields.Add(Models.Metadata.Rom.SHA1Key); break; } @@ -76,7 +76,7 @@ namespace SabreTools.DatFiles.Formats { var softwaredb = new Models.OpenMSX.SoftwareDb { - Timestamp = Header.GetFieldValue(Models.Metadata.Header.DateKey), + Timestamp = Header.GetStringFieldValue(Models.Metadata.Header.DateKey), Software = CreateSoftwares(ignoreblanks) }; return softwaredb; @@ -106,12 +106,12 @@ namespace SabreTools.DatFiles.Formats var machine = items[0].GetFieldValue(DatItem.MachineKey); var software = new Models.OpenMSX.Software { - Title = machine?.GetFieldValue(Models.Metadata.Machine.NameKey), - GenMSXID = machine?.GetFieldValue(Models.Metadata.Machine.GenMSXIDKey), - System = machine?.GetFieldValue(Models.Metadata.Machine.SystemKey), - Company = machine?.GetFieldValue(Models.Metadata.Machine.ManufacturerKey), - Year = machine?.GetFieldValue(Models.Metadata.Machine.YearKey), - Country = machine?.GetFieldValue(Models.Metadata.Machine.CountryKey), + Title = machine?.GetStringFieldValue(Models.Metadata.Machine.NameKey), + GenMSXID = machine?.GetStringFieldValue(Models.Metadata.Machine.GenMSXIDKey), + System = machine?.GetStringFieldValue(Models.Metadata.Machine.SystemKey), + Company = machine?.GetStringFieldValue(Models.Metadata.Machine.ManufacturerKey), + Year = machine?.GetStringFieldValue(Models.Metadata.Machine.YearKey), + Country = machine?.GetStringFieldValue(Models.Metadata.Machine.CountryKey), }; // Create holder for dumps @@ -165,10 +165,10 @@ namespace SabreTools.DatFiles.Formats _ => new Models.OpenMSX.Rom(), }; - rom.Start = item.GetFieldValue(Models.Metadata.Rom.OffsetKey); - rom.Type = item.GetFieldValue(Models.Metadata.Rom.OpenMSXType); - rom.Hash = item.GetFieldValue(Models.Metadata.Rom.SHA1Key); - rom.Remark = item.GetFieldValue(Models.Metadata.Rom.RemarkKey); + rom.Start = item.GetStringFieldValue(Models.Metadata.Rom.OffsetKey); + rom.Type = item.GetStringFieldValue(Models.Metadata.Rom.OpenMSXType); + rom.Hash = item.GetStringFieldValue(Models.Metadata.Rom.SHA1Key); + rom.Remark = item.GetStringFieldValue(Models.Metadata.Rom.RemarkKey); var dump = new Models.OpenMSX.Dump { diff --git a/SabreTools.DatFiles/Formats/RomCenter.Writer.cs b/SabreTools.DatFiles/Formats/RomCenter.Writer.cs index 7f7becb5..51d414fd 100644 --- a/SabreTools.DatFiles/Formats/RomCenter.Writer.cs +++ b/SabreTools.DatFiles/Formats/RomCenter.Writer.cs @@ -34,9 +34,9 @@ namespace SabreTools.DatFiles.Formats switch (datItem) { case Rom rom: - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey))) missingFields.Add(Models.Metadata.Rom.CRCKey); - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < 0) + if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null || rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) < 0) missingFields.Add(Models.Metadata.Rom.SizeKey); break; } @@ -93,13 +93,13 @@ namespace SabreTools.DatFiles.Formats { var credits = new Models.RomCenter.Credits { - Author = Header.GetFieldValue(Models.Metadata.Header.AuthorKey), - Version = Header.GetFieldValue(Models.Metadata.Header.VersionKey), - Email = Header.GetFieldValue(Models.Metadata.Header.EmailKey), - Homepage = Header.GetFieldValue(Models.Metadata.Header.HomepageKey), - Url = Header.GetFieldValue(Models.Metadata.Header.UrlKey), - Date = Header.GetFieldValue(Models.Metadata.Header.DateKey), - Comment = Header.GetFieldValue(Models.Metadata.Header.CommentKey), + Author = Header.GetStringFieldValue(Models.Metadata.Header.AuthorKey), + Version = Header.GetStringFieldValue(Models.Metadata.Header.VersionKey), + Email = Header.GetStringFieldValue(Models.Metadata.Header.EmailKey), + Homepage = Header.GetStringFieldValue(Models.Metadata.Header.HomepageKey), + Url = Header.GetStringFieldValue(Models.Metadata.Header.UrlKey), + Date = Header.GetStringFieldValue(Models.Metadata.Header.DateKey), + Comment = Header.GetStringFieldValue(Models.Metadata.Header.CommentKey), }; return credits; } @@ -111,8 +111,8 @@ namespace SabreTools.DatFiles.Formats { var dat = new Models.RomCenter.Dat { - Version = Header.GetFieldValue(Models.Metadata.Header.DatVersionKey), - Plugin = Header.GetFieldValue(Models.Metadata.Header.SystemKey), + Version = Header.GetStringFieldValue(Models.Metadata.Header.DatVersionKey), + Plugin = Header.GetStringFieldValue(Models.Metadata.Header.SystemKey), Split = (Header.GetFieldValue(Models.Metadata.Header.ForceMergingKey) == MergingFlag.Split ? "1" : "0"), Merge = (Header.GetFieldValue(Models.Metadata.Header.ForceMergingKey) == MergingFlag.Merged || Header.GetFieldValue(Models.Metadata.Header.ForceMergingKey) == MergingFlag.FullMerged ? "1" : "0"), }; @@ -126,8 +126,8 @@ namespace SabreTools.DatFiles.Formats { var emulator = new Models.RomCenter.Emulator { - RefName = Header.GetFieldValue(Models.Metadata.Header.NameKey), - Version = Header.GetFieldValue(Models.Metadata.Header.DescriptionKey), + RefName = Header.GetStringFieldValue(Models.Metadata.Header.NameKey), + Version = Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey), }; return emulator; } @@ -184,15 +184,15 @@ namespace SabreTools.DatFiles.Formats { var rom = new Models.RomCenter.Rom { - ParentName = item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey), - //ParentDescription = item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfDescription), // TODO: Add to internal model or find mapping - GameName = item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), - GameDescription = item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey), + ParentName = item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey), + //ParentDescription = item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfDescription), // TODO: Add to internal model or find mapping + GameName = item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey), + GameDescription = item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey), RomName = item.GetName(), - RomCRC = item.GetFieldValue(Models.Metadata.Rom.CRCKey), - RomSize = item.GetFieldValue(Models.Metadata.Rom.SizeKey), - RomOf = item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey), - MergeName = item.GetFieldValue(Models.Metadata.Rom.MergeKey), + RomCRC = item.GetStringFieldValue(Models.Metadata.Rom.CRCKey), + RomSize = item.GetStringFieldValue(Models.Metadata.Rom.SizeKey), + RomOf = item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey), + MergeName = item.GetStringFieldValue(Models.Metadata.Rom.MergeKey), }; return rom; } diff --git a/SabreTools.DatFiles/Formats/SabreJSON.cs b/SabreTools.DatFiles/Formats/SabreJSON.cs index 174f325d..0e6dbd70 100644 --- a/SabreTools.DatFiles/Formats/SabreJSON.cs +++ b/SabreTools.DatFiles/Formats/SabreJSON.cs @@ -395,11 +395,11 @@ namespace SabreTools.DatFiles.Formats DatItem datItem = datItems[index]; // If we have a different game and we're not at the start of the list, output the end of last item - if (lastgame != null && lastgame.ToLowerInvariant() != datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant()) + if (lastgame != null && lastgame.ToLowerInvariant() != datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant()) SabreJSON.WriteEndGame(jtw); // If we have a new game, output the beginning of the new item - if (lastgame == null || lastgame.ToLowerInvariant() != datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant()) + if (lastgame == null || lastgame.ToLowerInvariant() != datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant()) SabreJSON.WriteStartGame(jtw, datItem); // Check for a "null" item @@ -410,7 +410,7 @@ namespace SabreTools.DatFiles.Formats WriteDatItem(jtw, datItem); // Set the new data to compare against - lastgame = datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey); + lastgame = datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey); } } @@ -457,8 +457,8 @@ namespace SabreTools.DatFiles.Formats private static void WriteStartGame(JsonTextWriter jtw, DatItem datItem) { // No game should start with a path separator - if (!string.IsNullOrEmpty(datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey))) - datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!.TrimStart(Path.DirectorySeparatorChar)); + if (!string.IsNullOrEmpty(datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey))) + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.TrimStart(Path.DirectorySeparatorChar)); // Build the state jtw.WriteStartObject(); diff --git a/SabreTools.DatFiles/Formats/SabreXML.cs b/SabreTools.DatFiles/Formats/SabreXML.cs index 018dbd45..ae5ff5ba 100644 --- a/SabreTools.DatFiles/Formats/SabreXML.cs +++ b/SabreTools.DatFiles/Formats/SabreXML.cs @@ -227,11 +227,11 @@ namespace SabreTools.DatFiles.Formats DatItem datItem = datItems[index]; // If we have a different game and we're not at the start of the list, output the end of last item - if (lastgame != null && lastgame.ToLowerInvariant() != datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant()) + if (lastgame != null && lastgame.ToLowerInvariant() != datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant()) WriteEndGame(xtw); // If we have a new game, output the beginning of the new item - if (lastgame == null || lastgame.ToLowerInvariant() != datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant()) + if (lastgame == null || lastgame.ToLowerInvariant() != datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)?.ToLowerInvariant()) WriteStartGame(xtw, datItem); // Check for a "null" item @@ -242,7 +242,7 @@ namespace SabreTools.DatFiles.Formats WriteDatItem(xtw, datItem); // Set the new data to compare against - lastgame = datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey); + lastgame = datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey); } } @@ -292,7 +292,7 @@ namespace SabreTools.DatFiles.Formats private static void WriteStartGame(XmlTextWriter xtw, DatItem datItem) { // No game should start with a path separator - datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)?.TrimStart(Path.DirectorySeparatorChar) ?? string.Empty); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)?.TrimStart(Path.DirectorySeparatorChar) ?? string.Empty); // Write the machine xtw.WriteStartElement("directory"); diff --git a/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs b/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs index 71065be7..b0be1b0b 100644 --- a/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs +++ b/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs @@ -36,23 +36,23 @@ namespace SabreTools.DatFiles.Formats switch (datItem) { case Disk disk: - if (string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key))) + if (string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key)) + && string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))) { missingFields.Add(Models.Metadata.Disk.SHA1Key); } break; case Rom rom: - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < 0) + if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null || rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) < 0) missingFields.Add(Models.Metadata.Rom.SizeKey); - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA256Key)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA384Key)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA512Key)) - && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SpamSumKey))) + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key)) + && string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey))) { missingFields.Add(Models.Metadata.Rom.SHA1Key); } @@ -159,18 +159,18 @@ namespace SabreTools.DatFiles.Formats { var row = new Models.SeparatedValue.Row { - FileName = Header.GetFieldValue(DatHeader.FileNameKey), - InternalName = Header.GetFieldValue(Models.Metadata.Header.NameKey), - Description = Header.GetFieldValue(Models.Metadata.Header.DescriptionKey), - GameName = disk.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), - GameDescription = disk.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey), + FileName = Header.GetStringFieldValue(DatHeader.FileNameKey), + InternalName = Header.GetStringFieldValue(Models.Metadata.Header.NameKey), + 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(), RomName = string.Empty, DiskName = disk.GetName(), Size = string.Empty, CRC = string.Empty, - MD5 = disk.GetFieldValue(Models.Metadata.Disk.MD5Key), - SHA1 = disk.GetFieldValue(Models.Metadata.Disk.SHA1Key), + MD5 = disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key), + SHA1 = disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key), SHA256 = string.Empty, SHA384 = string.Empty, SHA512 = string.Empty, @@ -187,22 +187,22 @@ namespace SabreTools.DatFiles.Formats { var row = new Models.SeparatedValue.Row { - FileName = Header.GetFieldValue(DatHeader.FileNameKey), - InternalName = Header.GetFieldValue(Models.Metadata.Header.NameKey), - Description = Header.GetFieldValue(Models.Metadata.Header.DescriptionKey), - GameName = media.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), - GameDescription = media.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey), + FileName = Header.GetStringFieldValue(DatHeader.FileNameKey), + InternalName = Header.GetStringFieldValue(Models.Metadata.Header.NameKey), + 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(), RomName = string.Empty, DiskName = media.GetName(), Size = string.Empty, CRC = string.Empty, - MD5 = media.GetFieldValue(Models.Metadata.Media.MD5Key), - SHA1 = media.GetFieldValue(Models.Metadata.Media.SHA1Key), - SHA256 = media.GetFieldValue(Models.Metadata.Media.SHA256Key), + MD5 = media.GetStringFieldValue(Models.Metadata.Media.MD5Key), + SHA1 = media.GetStringFieldValue(Models.Metadata.Media.SHA1Key), + SHA256 = media.GetStringFieldValue(Models.Metadata.Media.SHA256Key), SHA384 = string.Empty, SHA512 = string.Empty, - SpamSum = media.GetFieldValue(Models.Metadata.Media.SpamSumKey), + SpamSum = media.GetStringFieldValue(Models.Metadata.Media.SpamSumKey), Status = string.Empty, }; return row; @@ -215,22 +215,22 @@ namespace SabreTools.DatFiles.Formats { var row = new Models.SeparatedValue.Row { - FileName = Header.GetFieldValue(DatHeader.FileNameKey), - InternalName = Header.GetFieldValue(Models.Metadata.Header.NameKey), - Description = Header.GetFieldValue(Models.Metadata.Header.DescriptionKey), - GameName = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), - GameDescription = rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey), + FileName = Header.GetStringFieldValue(DatHeader.FileNameKey), + InternalName = Header.GetStringFieldValue(Models.Metadata.Header.NameKey), + 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(), RomName = rom.GetName(), DiskName = string.Empty, - Size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey), - CRC = rom.GetFieldValue(Models.Metadata.Rom.CRCKey), - MD5 = rom.GetFieldValue(Models.Metadata.Rom.MD5Key), - SHA1 = rom.GetFieldValue(Models.Metadata.Rom.SHA1Key), - SHA256 = rom.GetFieldValue(Models.Metadata.Rom.SHA256Key), - SHA384 = rom.GetFieldValue(Models.Metadata.Rom.SHA384Key), - SHA512 = rom.GetFieldValue(Models.Metadata.Rom.SHA512Key), - SpamSum = rom.GetFieldValue(Models.Metadata.Rom.SpamSumKey), + Size = rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString(), + CRC = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey), + MD5 = rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key), + SHA1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key), + SHA256 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key), + 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), }; return row; diff --git a/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs b/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs index 7f74b018..1a548260 100644 --- a/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs +++ b/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs @@ -43,20 +43,20 @@ namespace SabreTools.DatFiles.Formats { if (string.IsNullOrEmpty(dipSwitch.GetFieldValue(DipSwitch.PartKey)!.GetName())) missingFields.Add(Models.Metadata.Part.NameKey); - if (string.IsNullOrEmpty(dipSwitch.GetFieldValue(DipSwitch.PartKey)!.GetFieldValue(Models.Metadata.Part.InterfaceKey))) + if (string.IsNullOrEmpty(dipSwitch.GetFieldValue(DipSwitch.PartKey)!.GetStringFieldValue(Models.Metadata.Part.InterfaceKey))) missingFields.Add(Models.Metadata.Part.InterfaceKey); } if (string.IsNullOrEmpty(dipSwitch.GetName())) missingFields.Add(Models.Metadata.DipSwitch.NameKey); - if (string.IsNullOrEmpty(dipSwitch.GetFieldValue(Models.Metadata.DipSwitch.TagKey))) + if (string.IsNullOrEmpty(dipSwitch.GetStringFieldValue(Models.Metadata.DipSwitch.TagKey))) missingFields.Add(Models.Metadata.DipSwitch.TagKey); - if (string.IsNullOrEmpty(dipSwitch.GetFieldValue(Models.Metadata.DipSwitch.MaskKey))) + if (string.IsNullOrEmpty(dipSwitch.GetStringFieldValue(Models.Metadata.DipSwitch.MaskKey))) missingFields.Add(Models.Metadata.DipSwitch.MaskKey); if (dipSwitch.ValuesSpecified) { if (dipSwitch.GetFieldValue(Models.Metadata.DipSwitch.DipValueKey)!.Any(dv => string.IsNullOrEmpty(dv.GetName()))) missingFields.Add(Models.Metadata.DipValue.NameKey); - if (dipSwitch.GetFieldValue(Models.Metadata.DipSwitch.DipValueKey)!.Any(dv => string.IsNullOrEmpty(dv.GetFieldValue(Models.Metadata.DipValue.ValueKey)))) + if (dipSwitch.GetFieldValue(Models.Metadata.DipSwitch.DipValueKey)!.Any(dv => string.IsNullOrEmpty(dv.GetStringFieldValue(Models.Metadata.DipValue.ValueKey)))) missingFields.Add(Models.Metadata.DipValue.ValueKey); } @@ -72,7 +72,7 @@ namespace SabreTools.DatFiles.Formats { if (string.IsNullOrEmpty(disk.GetFieldValue(Disk.PartKey)!.GetName())) missingFields.Add(Models.Metadata.Part.NameKey); - if (string.IsNullOrEmpty(disk.GetFieldValue(Disk.PartKey)!.GetFieldValue(Models.Metadata.Part.InterfaceKey))) + if (string.IsNullOrEmpty(disk.GetFieldValue(Disk.PartKey)!.GetStringFieldValue(Models.Metadata.Part.InterfaceKey))) missingFields.Add(Models.Metadata.Part.InterfaceKey); } if (!disk.DiskAreaSpecified) @@ -103,7 +103,7 @@ namespace SabreTools.DatFiles.Formats { if (string.IsNullOrEmpty(rom.GetFieldValue(Rom.PartKey)!.GetName())) missingFields.Add(Models.Metadata.Part.NameKey); - if (string.IsNullOrEmpty(rom.GetFieldValue(Rom.PartKey)!.GetFieldValue(Models.Metadata.Part.InterfaceKey))) + if (string.IsNullOrEmpty(rom.GetFieldValue(Rom.PartKey)!.GetStringFieldValue(Models.Metadata.Part.InterfaceKey))) missingFields.Add(Models.Metadata.Part.InterfaceKey); } if (!rom.DataAreaSpecified) @@ -115,7 +115,7 @@ namespace SabreTools.DatFiles.Formats { if (string.IsNullOrEmpty(rom.GetFieldValue(Rom.DataAreaKey)!.GetName())) missingFields.Add(Models.Metadata.DataArea.NameKey); - if (rom.GetFieldValue(Rom.DataAreaKey)!.GetFieldValue(Models.Metadata.DataArea.SizeKey) == null) + if (rom.GetFieldValue(Rom.DataAreaKey)!.GetInt64FieldValue(Models.Metadata.DataArea.SizeKey) == null) missingFields.Add(Models.Metadata.DataArea.SizeKey); } break; @@ -166,9 +166,9 @@ namespace SabreTools.DatFiles.Formats { var softwarelist = new Models.SoftwareList.SoftwareList { - Name = Header.GetFieldValue(Models.Metadata.Header.NameKey), - Description = Header.GetFieldValue(Models.Metadata.Header.DescriptionKey), - Notes = Header.GetFieldValue(Models.Metadata.Header.CommentKey), + Name = Header.GetStringFieldValue(Models.Metadata.Header.NameKey), + Description = Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey), + Notes = Header.GetStringFieldValue(Models.Metadata.Header.CommentKey), Software = CreateSoftware(ignoreblanks), }; @@ -259,13 +259,13 @@ namespace SabreTools.DatFiles.Formats { var software = new Models.SoftwareList.Software { - Name = machine.GetFieldValue(Models.Metadata.Machine.NameKey), - CloneOf = machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey), + Name = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey), + CloneOf = machine.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey), Supported = machine.GetFieldValue(Models.Metadata.Machine.SupportedKey).AsStringValue(useSecond: true), - Description = machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey), - Year = machine.GetFieldValue(Models.Metadata.Machine.YearKey), - Publisher = machine.GetFieldValue(Models.Metadata.Machine.PublisherKey), - Notes = machine.GetFieldValue(Models.Metadata.Machine.CommentKey), + Description = machine.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey), + Year = machine.GetStringFieldValue(Models.Metadata.Machine.YearKey), + Publisher = machine.GetStringFieldValue(Models.Metadata.Machine.PublisherKey), + Notes = machine.GetStringFieldValue(Models.Metadata.Machine.CommentKey), }; return software; @@ -279,7 +279,7 @@ namespace SabreTools.DatFiles.Formats var info = new Models.SoftwareList.Info { Name = item.GetName(), - Value = item.GetFieldValue(Models.Metadata.Info.ValueKey), + Value = item.GetStringFieldValue(Models.Metadata.Info.ValueKey), }; return info; } @@ -292,7 +292,7 @@ namespace SabreTools.DatFiles.Formats var sharedfeat = new Models.SoftwareList.SharedFeat { Name = item.GetName(), - Value = item.GetFieldValue(Models.Metadata.SharedFeat.ValueKey), + Value = item.GetStringFieldValue(Models.Metadata.SharedFeat.ValueKey), }; return sharedfeat; } @@ -305,7 +305,7 @@ namespace SabreTools.DatFiles.Formats var part = new Models.SoftwareList.Part { Name = item.GetFieldValue(Rom.PartKey)?.GetName(), - Interface = item.GetFieldValue(Rom.PartKey)?.GetFieldValue(Models.Metadata.Part.InterfaceKey), + Interface = item.GetFieldValue(Rom.PartKey)?.GetStringFieldValue(Models.Metadata.Part.InterfaceKey), Feature = CreateFeatures(item.GetFieldValue(Rom.PartKey)?.GetFieldValue(Models.Metadata.Part.FeatureKey)), DataArea = CreateDataAreas(item), DiskArea = null, @@ -322,7 +322,7 @@ namespace SabreTools.DatFiles.Formats var part = new Models.SoftwareList.Part { Name = item.GetFieldValue(Disk.PartKey)?.GetName(), - Interface = item.GetFieldValue(Disk.PartKey)?.GetFieldValue(Models.Metadata.Part.InterfaceKey), + Interface = item.GetFieldValue(Disk.PartKey)?.GetStringFieldValue(Models.Metadata.Part.InterfaceKey), Feature = CreateFeatures(item.GetFieldValue(Disk.PartKey)?.GetFieldValue(Models.Metadata.Part.FeatureKey)), DataArea = null, DiskArea = CreateDiskAreas(item), @@ -339,7 +339,7 @@ namespace SabreTools.DatFiles.Formats var part = new Models.SoftwareList.Part { Name = item.GetFieldValue(DipSwitch.PartKey)?.GetName(), - Interface = item.GetFieldValue(DipSwitch.PartKey)?.GetFieldValue(Models.Metadata.Part.InterfaceKey), + Interface = item.GetFieldValue(DipSwitch.PartKey)?.GetStringFieldValue(Models.Metadata.Part.InterfaceKey), Feature = CreateFeatures(item.GetFieldValue(DipSwitch.PartKey)?.GetFieldValue(Models.Metadata.Part.FeatureKey)), DataArea = null, DiskArea = null, @@ -363,7 +363,7 @@ namespace SabreTools.DatFiles.Formats var feature = new Models.SoftwareList.Feature { Name = item.GetName(), - Value = item.GetFieldValue(Models.Metadata.Feature.ValueKey), + Value = item.GetStringFieldValue(Models.Metadata.Feature.ValueKey), }; features.Add(feature); } @@ -379,8 +379,8 @@ namespace SabreTools.DatFiles.Formats var dataArea = new Models.SoftwareList.DataArea { Name = item.GetFieldValue(Rom.DataAreaKey)?.GetName(), - Size = item.GetFieldValue(Rom.DataAreaKey)?.GetFieldValue(Models.Metadata.DataArea.SizeKey)?.ToString(), - Width = item.GetFieldValue(Rom.DataAreaKey)?.GetFieldValue(Models.Metadata.DataArea.WidthKey)?.ToString(), + 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(), Rom = CreateRom(item), }; @@ -395,12 +395,12 @@ namespace SabreTools.DatFiles.Formats var rom = new Models.SoftwareList.Rom { Name = item.GetName(), - Size = item.GetFieldValue(Models.Metadata.Rom.SizeKey), + Size = item.GetStringFieldValue(Models.Metadata.Rom.SizeKey), Length = null, - CRC = item.GetFieldValue(Models.Metadata.Rom.CRCKey), - SHA1 = item.GetFieldValue(Models.Metadata.Rom.SHA1Key), - Offset = item.GetFieldValue(Models.Metadata.Rom.OffsetKey), - Value = item.GetFieldValue(Models.Metadata.Rom.ValueKey), + CRC = item.GetStringFieldValue(Models.Metadata.Rom.CRCKey), + 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(), }; @@ -427,10 +427,10 @@ namespace SabreTools.DatFiles.Formats var disk = new Models.SoftwareList.Disk { Name = item.GetName(), - MD5 = item.GetFieldValue(Models.Metadata.Disk.MD5Key), - SHA1 = item.GetFieldValue(Models.Metadata.Disk.SHA1Key), + MD5 = item.GetStringFieldValue(Models.Metadata.Disk.MD5Key), + SHA1 = item.GetStringFieldValue(Models.Metadata.Disk.SHA1Key), Status = item.GetFieldValue(Models.Metadata.Disk.StatusKey).AsStringValue(useSecond: false), - Writeable = item.GetFieldValue(Models.Metadata.Disk.WritableKey)?.ToString(), + Writeable = item.GetBoolFieldValue(Models.Metadata.Disk.WritableKey)?.ToString(), }; return [disk]; } @@ -446,8 +446,8 @@ namespace SabreTools.DatFiles.Formats var dipValue = new Models.SoftwareList.DipValue { Name = setting.GetName(), - Value = setting.GetFieldValue(Models.Metadata.DipValue.ValueKey), - Default = setting.GetFieldValue(Models.Metadata.DipValue.DefaultKey).FromYesNo(), + Value = setting.GetStringFieldValue(Models.Metadata.DipValue.ValueKey), + Default = setting.GetBoolFieldValue(Models.Metadata.DipValue.DefaultKey).FromYesNo(), }; dipValues.Add(dipValue); diff --git a/SabreTools.DatFiles/ItemDictionary.cs b/SabreTools.DatFiles/ItemDictionary.cs index 3ee78a9f..4dc0620c 100644 --- a/SabreTools.DatFiles/ItemDictionary.cs +++ b/SabreTools.DatFiles/ItemDictionary.cs @@ -220,7 +220,7 @@ namespace SabreTools.DatFiles TotalCount++; // Increment removal count - if (item.GetFieldValue(DatItem.RemoveKey) == true) + if (item.GetBoolFieldValue(DatItem.RemoveKey) == true) RemovedCount++; // Increment the item count for the type @@ -232,8 +232,8 @@ namespace SabreTools.DatFiles case Disk disk: if (disk.GetFieldValue(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump) { - AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key)) ? 0 : 1); - AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key)) ? 0 : 1); + 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); @@ -242,22 +242,22 @@ namespace SabreTools.DatFiles AddStatusCount(ItemStatus.Verified, disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Verified ? 1 : 0); break; case Media media: - AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.MD5Key)) ? 0 : 1); - AddHashCount(HashType.SHA1, string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA1Key)) ? 0 : 1); - AddHashCount(HashType.SHA256, string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA256Key)) ? 0 : 1); - AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SpamSumKey)) ? 0 : 1); + AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.MD5Key)) ? 0 : 1); + AddHashCount(HashType.SHA1, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key)) ? 0 : 1); + AddHashCount(HashType.SHA256, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA256Key)) ? 0 : 1); + 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) { - TotalSize += NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) ?? 0; - AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); - AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1); - AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1); - AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA256Key)) ? 0 : 1); - AddHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA384Key)) ? 0 : 1); - AddHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA512Key)) ? 0 : 1); - AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); + TotalSize += rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0; + AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); + AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1); + AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1); + AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)) ? 0 : 1); + AddHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key)) ? 0 : 1); + AddHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key)) ? 0 : 1); + 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); @@ -400,7 +400,7 @@ namespace SabreTools.DatFiles // Filter the list return fi.Where(i => i != null) - .Where(i => i.GetFieldValue(DatItem.RemoveKey) != true) + .Where(i => i.GetBoolFieldValue(DatItem.RemoveKey) != true) .Where(i => i.GetFieldValue(DatItem.MachineKey) != null) .ToConcurrentList(); } @@ -501,7 +501,7 @@ namespace SabreTools.DatFiles TotalCount--; // Decrement removal count - if (item.GetFieldValue(DatItem.RemoveKey) == true) + if (item.GetBoolFieldValue(DatItem.RemoveKey) == true) RemovedCount--; // Decrement the item count for the type @@ -513,8 +513,8 @@ namespace SabreTools.DatFiles case Disk disk: if (disk.GetFieldValue(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump) { - RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key)) ? 0 : 1); + 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); @@ -523,22 +523,22 @@ namespace SabreTools.DatFiles RemoveStatusCount(ItemStatus.Verified, disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Verified ? 1 : 0); break; case Media media: - RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.MD5Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA1Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA256Key)) ? 0 : 1); - RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SpamSumKey)) ? 0 : 1); + RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.MD5Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA256Key)) ? 0 : 1); + 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) { - TotalSize -= NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) ?? 0; - RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); - RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA256Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA384Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA512Key)) ? 0 : 1); - RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); + TotalSize -= rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0; + RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); + RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key)) ? 0 : 1); + 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); @@ -908,7 +908,7 @@ namespace SabreTools.DatFiles foreach (string key in keys) { ConcurrentList? oldItemList = items[key]; - ConcurrentList? newItemList = oldItemList?.Where(i => i.GetFieldValue(DatItem.RemoveKey) != true)?.ToConcurrentList(); + ConcurrentList? newItemList = oldItemList?.Where(i => i.GetBoolFieldValue(DatItem.RemoveKey) != true)?.ToConcurrentList(); Remove(key); AddRange(key, newItemList); @@ -945,7 +945,7 @@ namespace SabreTools.DatFiles for (int i = 0; i < roms.Count; i++) { DatItem other = roms[i]; - if (other.GetFieldValue(DatItem.RemoveKey) == true) + if (other.GetBoolFieldValue(DatItem.RemoveKey) == true) continue; if (datItem.Equals(other)) diff --git a/SabreTools.DatFiles/ItemDictionaryDB.cs b/SabreTools.DatFiles/ItemDictionaryDB.cs index 5ef7ca51..e6a67f03 100644 --- a/SabreTools.DatFiles/ItemDictionaryDB.cs +++ b/SabreTools.DatFiles/ItemDictionaryDB.cs @@ -337,7 +337,7 @@ namespace SabreTools.DatFiles TotalCount++; // Increment removal count - if (item.GetFieldValue(DatItem.RemoveKey) == true) + if (item.GetBoolFieldValue(DatItem.RemoveKey) == true) RemovedCount++; // Increment the item count for the type @@ -349,8 +349,8 @@ namespace SabreTools.DatFiles case Disk disk: if (disk.GetFieldValue(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump) { - AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key)) ? 0 : 1); - AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key)) ? 0 : 1); + 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); @@ -359,22 +359,22 @@ namespace SabreTools.DatFiles AddStatusCount(ItemStatus.Verified, disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Verified ? 1 : 0); break; case Media media: - AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.MD5Key)) ? 0 : 1); - AddHashCount(HashType.SHA1, string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA1Key)) ? 0 : 1); - AddHashCount(HashType.SHA256, string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA256Key)) ? 0 : 1); - AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SpamSumKey)) ? 0 : 1); + AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.MD5Key)) ? 0 : 1); + AddHashCount(HashType.SHA1, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key)) ? 0 : 1); + AddHashCount(HashType.SHA256, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA256Key)) ? 0 : 1); + 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) { - TotalSize += NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) ?? 0; - AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); - AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1); - AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1); - AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA256Key)) ? 0 : 1); - AddHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA384Key)) ? 0 : 1); - AddHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA512Key)) ? 0 : 1); - AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); + TotalSize += rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0; + AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); + AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1); + AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1); + AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)) ? 0 : 1); + AddHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key)) ? 0 : 1); + AddHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key)) ? 0 : 1); + 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); @@ -531,8 +531,8 @@ namespace SabreTools.DatFiles // Filter the list return fi.Where(i => i != null) - .Where(i => i.GetFieldValue(DatItem.RemoveKey) != true) - .Where(i => i.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) != null) + .Where(i => i.GetBoolFieldValue(DatItem.RemoveKey) != true) + .Where(i => i.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) != null) .ToConcurrentList(); } } @@ -645,7 +645,7 @@ namespace SabreTools.DatFiles TotalCount--; // Decrement removal count - if (item.GetFieldValue(DatItem.RemoveKey) == true) + if (item.GetBoolFieldValue(DatItem.RemoveKey) == true) RemovedCount--; // Decrement the item count for the type @@ -657,8 +657,8 @@ namespace SabreTools.DatFiles case Disk disk: if (disk.GetFieldValue(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump) { - RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key)) ? 0 : 1); + 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); @@ -667,22 +667,22 @@ namespace SabreTools.DatFiles RemoveStatusCount(ItemStatus.Verified, disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Verified ? 1 : 0); break; case Media media: - RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.MD5Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA1Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA256Key)) ? 0 : 1); - RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SpamSumKey)) ? 0 : 1); + RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.MD5Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA256Key)) ? 0 : 1); + 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) { - TotalSize -= NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) ?? 0; - RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); - RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA256Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA384Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA512Key)) ? 0 : 1); - RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); + TotalSize -= rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0; + RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); + RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key)) ? 0 : 1); + RemoveHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key)) ? 0 : 1); + 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); @@ -1080,7 +1080,7 @@ CREATE TABLE IF NOT EXISTS groups ( foreach (string key in keys) { ConcurrentList? oldItemList = this[key]; - ConcurrentList? newItemList = oldItemList?.Where(i => i.GetFieldValue(DatItem.RemoveKey) != true)?.ToConcurrentList(); + ConcurrentList? newItemList = oldItemList?.Where(i => i.GetBoolFieldValue(DatItem.RemoveKey) != true)?.ToConcurrentList(); Remove(key); AddRange(key, newItemList); @@ -1114,7 +1114,7 @@ CREATE TABLE IF NOT EXISTS groups ( for (int i = 0; i < roms.Count; i++) { DatItem other = roms[i]; - if (other.GetFieldValue(DatItem.RemoveKey) == true) + if (other.GetBoolFieldValue(DatItem.RemoveKey) == true) continue; if (datItem.Equals(other)) diff --git a/SabreTools.DatItems/DatItem.cs b/SabreTools.DatItems/DatItem.cs index 42557f57..cf31d5ea 100644 --- a/SabreTools.DatItems/DatItem.cs +++ b/SabreTools.DatItems/DatItem.cs @@ -127,6 +127,81 @@ namespace SabreTools.DatItems return _internal.Read(fieldName!); } + /// + /// Get the value from a field based on the type provided + /// + /// Field to retrieve + /// Value from the field, if possible + public bool? GetBoolFieldValue(string? fieldName) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName) || !_internal.ContainsKey(fieldName!)) + return default; + + // Get the value based on the type + return _internal.ReadBool(fieldName!); + } + + /// + /// Get the value from a field based on the type provided + /// + /// Field to retrieve + /// Value from the field, if possible + public double? GetDoubleFieldValue(string? fieldName) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName) || !_internal.ContainsKey(fieldName!)) + return default; + + // Get the value based on the type + return _internal.ReadDouble(fieldName!); + } + + /// + /// Get the value from a field based on the type provided + /// + /// Field to retrieve + /// Value from the field, if possible + public long? GetInt64FieldValue(string? fieldName) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName) || !_internal.ContainsKey(fieldName!)) + return default; + + // Get the value based on the type + return _internal.ReadLong(fieldName!); + } + + /// + /// Get the value from a field based on the type provided + /// + /// Field to retrieve + /// Value from the field, if possible + public string? GetStringFieldValue(string? fieldName) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName) || !_internal.ContainsKey(fieldName!)) + return default; + + // Get the value based on the type + return _internal.ReadString(fieldName!); + } + + /// + /// Get the value from a field based on the type provided + /// + /// Field to retrieve + /// Value from the field, if possible + public string[]? GetStringArrayFieldValue(string? fieldName) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName) || !_internal.ContainsKey(fieldName!)) + return default; + + // Get the value based on the type + return _internal.ReadStringArray(fieldName!); + } + /// /// Set the value from a field based on the type provided /// @@ -282,7 +357,7 @@ namespace SabreTools.DatItems { var currentMachine = GetFieldValue(DatItem.MachineKey); var lastMachine = lastItem?.GetFieldValue(DatItem.MachineKey); - if (lastMachine?.GetFieldValue(Models.Metadata.Machine.NameKey) == currentMachine?.GetFieldValue(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName()) + if (lastMachine?.GetStringFieldValue(Models.Metadata.Machine.NameKey) == currentMachine?.GetStringFieldValue(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName()) output = DupeType.External | DupeType.All; else output = DupeType.External | DupeType.Hash; @@ -293,7 +368,7 @@ namespace SabreTools.DatItems { var currentMachine = GetFieldValue(DatItem.MachineKey); var lastMachine = lastItem?.GetFieldValue(DatItem.MachineKey); - if (lastMachine?.GetFieldValue(Models.Metadata.Machine.NameKey) == currentMachine?.GetFieldValue(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName()) + if (lastMachine?.GetStringFieldValue(Models.Metadata.Machine.NameKey) == currentMachine?.GetStringFieldValue(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName()) output = DupeType.Internal | DupeType.All; else output = DupeType.Internal | DupeType.Hash; @@ -373,9 +448,9 @@ namespace SabreTools.DatItems key = (norename ? string.Empty : GetFieldValue(DatItem.SourceKey)?.Index.ToString().PadLeft(10, '0') + "-") - + (string.IsNullOrEmpty(GetFieldValue(DatItem.MachineKey)?.GetFieldValue(Models.Metadata.Machine.NameKey)) + + (string.IsNullOrEmpty(GetFieldValue(DatItem.MachineKey)?.GetStringFieldValue(Models.Metadata.Machine.NameKey)) ? "Default" - : GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!); + : GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!); if (lower) key = key.ToLowerInvariant(); @@ -510,8 +585,8 @@ namespace SabreTools.DatItems } // If the current machine is a child of the new machine, use the new machine instead - if (saveditem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey) == item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) - || saveditem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey) == item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)) + if (saveditem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey) == item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) + || saveditem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey) == item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)) { saveditem.CopyMachineInformation(item); saveditem.SetName(item.GetName()); @@ -661,7 +736,7 @@ namespace SabreTools.DatItems NaturalComparer nc = new(); // If machine names match, more refinement is needed - if (x.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) == y.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)) + 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)) @@ -677,7 +752,7 @@ namespace SabreTools.DatItems // If item names match, then compare on machine or source, depending on the flag if (xName == yName) - return (norename ? nc.Compare(x.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), y.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)) : (x.GetFieldValue(DatItem.SourceKey)?.Index - y.GetFieldValue(DatItem.SourceKey)?.Index) ?? 0); + return (norename ? nc.Compare(x.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey), y.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)) : (x.GetFieldValue(DatItem.SourceKey)?.Index - y.GetFieldValue(DatItem.SourceKey)?.Index) ?? 0); // Otherwise, just sort based on item names return nc.Compare(xName, yName); @@ -692,7 +767,7 @@ namespace SabreTools.DatItems } // Otherwise, just sort based on machine name - return nc.Compare(x.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), y.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); + return nc.Compare(x.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey), y.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)); } catch { @@ -756,7 +831,7 @@ namespace SabreTools.DatItems public override string? GetName() { if (NameKey != null) - return GetFieldValue(NameKey); + return GetStringFieldValue(NameKey); return null; } diff --git a/SabreTools.DatItems/Formats/Blank.cs b/SabreTools.DatItems/Formats/Blank.cs index b4570106..54f35519 100644 --- a/SabreTools.DatItems/Formats/Blank.cs +++ b/SabreTools.DatItems/Formats/Blank.cs @@ -36,7 +36,7 @@ namespace SabreTools.DatItems.Formats { var blank = new Blank(); blank.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)); - blank.SetFieldValue(DatItem.RemoveKey, GetFieldValue(DatItem.RemoveKey)); + 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)); diff --git a/SabreTools.DatItems/Formats/DipSwitch.cs b/SabreTools.DatItems/Formats/DipSwitch.cs index e8cf00e7..965fc8ef 100644 --- a/SabreTools.DatItems/Formats/DipSwitch.cs +++ b/SabreTools.DatItems/Formats/DipSwitch.cs @@ -65,7 +65,7 @@ namespace SabreTools.DatItems.Formats var part = GetFieldValue(DipSwitch.PartKey); return part != null && (!string.IsNullOrEmpty(part.GetName()) - || !string.IsNullOrEmpty(part.GetFieldValue(Models.Metadata.Part.InterfaceKey))); + || !string.IsNullOrEmpty(part.GetStringFieldValue(Models.Metadata.Part.InterfaceKey))); } } diff --git a/SabreTools.DatItems/Formats/Disk.cs b/SabreTools.DatItems/Formats/Disk.cs index 029c1b22..f6f2bacc 100644 --- a/SabreTools.DatItems/Formats/Disk.cs +++ b/SabreTools.DatItems/Formats/Disk.cs @@ -52,7 +52,7 @@ namespace SabreTools.DatItems.Formats var part = GetFieldValue(Disk.PartKey); return part != null && (!string.IsNullOrEmpty(part.GetName()) - || !string.IsNullOrEmpty(part.GetFieldValue(Models.Metadata.Part.InterfaceKey))); + || !string.IsNullOrEmpty(part.GetStringFieldValue(Models.Metadata.Part.InterfaceKey))); } } @@ -94,9 +94,9 @@ namespace SabreTools.DatItems.Formats return new BaseFile() { Filename = this.GetName(), - Parent = GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), - MD5 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Disk.MD5Key)), - SHA1 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Disk.SHA1Key)), + Parent = GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey), + MD5 = TextHelper.StringToByteArray(GetStringFieldValue(Models.Metadata.Disk.MD5Key)), + SHA1 = TextHelper.StringToByteArray(GetStringFieldValue(Models.Metadata.Disk.SHA1Key)), }; } @@ -110,7 +110,7 @@ namespace SabreTools.DatItems.Formats rom.GetFieldValue(Rom.DataAreaKey)?.SetName(this.GetFieldValue(Disk.DiskAreaKey)?.GetName()); rom.SetFieldValue(DatItem.DupeTypeKey, GetFieldValue(DatItem.DupeTypeKey)); rom.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)!.Clone() as Machine ?? new Machine()); - rom.SetFieldValue(DatItem.RemoveKey, GetFieldValue(DatItem.RemoveKey)); + rom.SetFieldValue(DatItem.RemoveKey, GetBoolFieldValue(DatItem.RemoveKey)); rom.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); return rom; @@ -146,11 +146,11 @@ namespace SabreTools.DatItems.Formats switch (bucketedBy) { case ItemKey.MD5: - key = GetFieldValue(Models.Metadata.Disk.MD5Key); + key = GetStringFieldValue(Models.Metadata.Disk.MD5Key); break; case ItemKey.SHA1: - key = GetFieldValue(Models.Metadata.Disk.SHA1Key); + key = GetStringFieldValue(Models.Metadata.Disk.SHA1Key); break; // Let the base handle generic stuff diff --git a/SabreTools.DatItems/Formats/File.cs b/SabreTools.DatItems/Formats/File.cs index a612be36..52b1afb9 100644 --- a/SabreTools.DatItems/Formats/File.cs +++ b/SabreTools.DatItems/Formats/File.cs @@ -141,7 +141,7 @@ namespace SabreTools.DatItems.Formats }; file.SetFieldValue(DatItem.DupeTypeKey, GetFieldValue(DatItem.DupeTypeKey)); file.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)!.Clone() as Machine ?? new Machine()); - file.SetFieldValue(DatItem.RemoveKey, GetFieldValue(DatItem.RemoveKey)); + file.SetFieldValue(DatItem.RemoveKey, GetBoolFieldValue(DatItem.RemoveKey)); file.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); return file; @@ -154,7 +154,7 @@ namespace SabreTools.DatItems.Formats { return new BaseFile() { - Parent = GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), + Parent = GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey), CRC = this._crc, MD5 = this._md5, SHA1 = this._sha1, @@ -174,7 +174,7 @@ namespace SabreTools.DatItems.Formats rom.SetFieldValue(DatItem.DupeTypeKey, GetFieldValue(DatItem.DupeTypeKey)); rom.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)!.Clone() as Machine ?? new Machine()); rom.SetFieldValue(Models.Metadata.Rom.MD5Key, MD5); - rom.SetFieldValue(DatItem.RemoveKey, GetFieldValue(DatItem.RemoveKey)); + rom.SetFieldValue(DatItem.RemoveKey, GetBoolFieldValue(DatItem.RemoveKey)); rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, SHA1); rom.SetFieldValue(Models.Metadata.Rom.SHA256Key, SHA256); rom.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); diff --git a/SabreTools.DatItems/Formats/Media.cs b/SabreTools.DatItems/Formats/Media.cs index 1be42c50..27cf4b5e 100644 --- a/SabreTools.DatItems/Formats/Media.cs +++ b/SabreTools.DatItems/Formats/Media.cs @@ -57,11 +57,11 @@ namespace SabreTools.DatItems.Formats return new BaseFile() { Filename = this.GetName(), - Parent = GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), - MD5 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Media.MD5Key)), - SHA1 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Media.SHA1Key)), - SHA256 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Media.SHA256Key)), - SpamSum = System.Text.Encoding.UTF8.GetBytes(GetFieldValue(Models.Metadata.Media.SpamSumKey) ?? string.Empty), + Parent = GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey), + MD5 = TextHelper.StringToByteArray(GetStringFieldValue(Models.Metadata.Media.MD5Key)), + SHA1 = TextHelper.StringToByteArray(GetStringFieldValue(Models.Metadata.Media.SHA1Key)), + SHA256 = TextHelper.StringToByteArray(GetStringFieldValue(Models.Metadata.Media.SHA256Key)), + SpamSum = System.Text.Encoding.UTF8.GetBytes(GetStringFieldValue(Models.Metadata.Media.SpamSumKey) ?? string.Empty), }; } @@ -74,7 +74,7 @@ namespace SabreTools.DatItems.Formats var rom = new Rom(_internal.ConvertToRom()!); rom.SetFieldValue(DatItem.DupeTypeKey, GetFieldValue(DatItem.DupeTypeKey)); rom.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)); - rom.SetFieldValue(DatItem.RemoveKey, GetFieldValue(DatItem.RemoveKey)); + rom.SetFieldValue(DatItem.RemoveKey, GetBoolFieldValue(DatItem.RemoveKey)); rom.SetFieldValue(DatItem.SourceKey, GetFieldValue(DatItem.SourceKey)); return rom; @@ -110,19 +110,19 @@ namespace SabreTools.DatItems.Formats switch (bucketedBy) { case ItemKey.MD5: - key = GetFieldValue(Models.Metadata.Media.MD5Key); + key = GetStringFieldValue(Models.Metadata.Media.MD5Key); break; case ItemKey.SHA1: - key = GetFieldValue(Models.Metadata.Media.SHA1Key); + key = GetStringFieldValue(Models.Metadata.Media.SHA1Key); break; case ItemKey.SHA256: - key = GetFieldValue(Models.Metadata.Media.SHA256Key); + key = GetStringFieldValue(Models.Metadata.Media.SHA256Key); break; case ItemKey.SpamSum: - key = GetFieldValue(Models.Metadata.Media.SpamSumKey); + key = GetStringFieldValue(Models.Metadata.Media.SpamSumKey); break; // Let the base handle generic stuff diff --git a/SabreTools.DatItems/Formats/ReleaseDetails.cs b/SabreTools.DatItems/Formats/ReleaseDetails.cs index bfdf76e2..2e02aa91 100644 --- a/SabreTools.DatItems/Formats/ReleaseDetails.cs +++ b/SabreTools.DatItems/Formats/ReleaseDetails.cs @@ -146,7 +146,7 @@ namespace SabreTools.DatItems.Formats }; releaseDetails.SetFieldValue(DatItem.DupeTypeKey, GetFieldValue(DatItem.DupeTypeKey)); releaseDetails.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)); - releaseDetails.SetFieldValue(DatItem.RemoveKey, GetFieldValue(DatItem.RemoveKey)); + 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)); diff --git a/SabreTools.DatItems/Formats/Rom.cs b/SabreTools.DatItems/Formats/Rom.cs index 6a3311b8..567e2efc 100644 --- a/SabreTools.DatItems/Formats/Rom.cs +++ b/SabreTools.DatItems/Formats/Rom.cs @@ -62,8 +62,8 @@ namespace SabreTools.DatItems.Formats var dataArea = GetFieldValue(Rom.DataAreaKey); return dataArea != null && (!string.IsNullOrEmpty(dataArea.GetName()) - || dataArea.GetFieldValue(Models.Metadata.DataArea.SizeKey) != null - || dataArea.GetFieldValue(Models.Metadata.DataArea.WidthKey) != null + || dataArea.GetInt64FieldValue(Models.Metadata.DataArea.SizeKey) != null + || dataArea.GetInt64FieldValue(Models.Metadata.DataArea.WidthKey) != null || dataArea.GetFieldValue(Models.Metadata.DataArea.EndiannessKey) != Endianness.NULL); } } @@ -76,7 +76,7 @@ namespace SabreTools.DatItems.Formats var part = GetFieldValue(Rom.PartKey); return part != null && (!string.IsNullOrEmpty(part.GetName()) - || !string.IsNullOrEmpty(part.GetFieldValue(Models.Metadata.Part.InterfaceKey))); + || !string.IsNullOrEmpty(part.GetStringFieldValue(Models.Metadata.Part.InterfaceKey))); } } @@ -125,16 +125,16 @@ namespace SabreTools.DatItems.Formats return new BaseFile() { Filename = GetName(), - Parent = GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), - Date = GetFieldValue(Models.Metadata.Rom.DateKey), - Size = NumberHelper.ConvertToInt64(GetFieldValue(Models.Metadata.Rom.SizeKey)), - CRC = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Rom.CRCKey)), - MD5 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Rom.MD5Key)), - SHA1 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Rom.SHA1Key)), - SHA256 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Rom.SHA256Key)), - SHA384 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Rom.SHA384Key)), - SHA512 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Rom.SHA512Key)), - SpamSum = System.Text.Encoding.UTF8.GetBytes(GetFieldValue(Models.Metadata.Rom.SpamSumKey) ?? string.Empty), + Parent = GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey), + Date = GetStringFieldValue(Models.Metadata.Rom.DateKey), + Size = NumberHelper.ConvertToInt64(GetStringFieldValue(Models.Metadata.Rom.SizeKey)), + CRC = TextHelper.StringToByteArray(GetStringFieldValue(Models.Metadata.Rom.CRCKey)), + MD5 = TextHelper.StringToByteArray(GetStringFieldValue(Models.Metadata.Rom.MD5Key)), + SHA1 = TextHelper.StringToByteArray(GetStringFieldValue(Models.Metadata.Rom.SHA1Key)), + SHA256 = TextHelper.StringToByteArray(GetStringFieldValue(Models.Metadata.Rom.SHA256Key)), + SHA384 = TextHelper.StringToByteArray(GetStringFieldValue(Models.Metadata.Rom.SHA384Key)), + SHA512 = TextHelper.StringToByteArray(GetStringFieldValue(Models.Metadata.Rom.SHA512Key)), + SpamSum = System.Text.Encoding.UTF8.GetBytes(GetStringFieldValue(Models.Metadata.Rom.SpamSumKey) ?? string.Empty), }; } @@ -180,31 +180,31 @@ namespace SabreTools.DatItems.Formats switch (bucketedBy) { case ItemKey.CRC: - key = GetFieldValue(Models.Metadata.Rom.CRCKey); + key = GetStringFieldValue(Models.Metadata.Rom.CRCKey); break; case ItemKey.MD5: - key = GetFieldValue(Models.Metadata.Rom.MD5Key); + key = GetStringFieldValue(Models.Metadata.Rom.MD5Key); break; case ItemKey.SHA1: - key = GetFieldValue(Models.Metadata.Rom.SHA1Key); + key = GetStringFieldValue(Models.Metadata.Rom.SHA1Key); break; case ItemKey.SHA256: - key = GetFieldValue(Models.Metadata.Rom.SHA256Key); + key = GetStringFieldValue(Models.Metadata.Rom.SHA256Key); break; case ItemKey.SHA384: - key = GetFieldValue(Models.Metadata.Rom.SHA384Key); + key = GetStringFieldValue(Models.Metadata.Rom.SHA384Key); break; case ItemKey.SHA512: - key = GetFieldValue(Models.Metadata.Rom.SHA512Key); + key = GetStringFieldValue(Models.Metadata.Rom.SHA512Key); break; case ItemKey.SpamSum: - key = GetFieldValue(Models.Metadata.Rom.SpamSumKey); + key = GetStringFieldValue(Models.Metadata.Rom.SpamSumKey); break; // Let the base handle generic stuff diff --git a/SabreTools.DatItems/Formats/Serials.cs b/SabreTools.DatItems/Formats/Serials.cs index 230f4a4a..a57a2622 100644 --- a/SabreTools.DatItems/Formats/Serials.cs +++ b/SabreTools.DatItems/Formats/Serials.cs @@ -138,7 +138,7 @@ namespace SabreTools.DatItems.Formats }; serials.SetFieldValue(DatItem.DupeTypeKey, GetFieldValue(DatItem.DupeTypeKey)); serials.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)); - serials.SetFieldValue(DatItem.RemoveKey, GetFieldValue(DatItem.RemoveKey)); + 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)); diff --git a/SabreTools.DatItems/Formats/SourceDetails.cs b/SabreTools.DatItems/Formats/SourceDetails.cs index 519161f4..f1b6c8d6 100644 --- a/SabreTools.DatItems/Formats/SourceDetails.cs +++ b/SabreTools.DatItems/Formats/SourceDetails.cs @@ -181,7 +181,7 @@ namespace SabreTools.DatItems.Formats }; sourceDetails.SetFieldValue(DatItem.DupeTypeKey, GetFieldValue(DatItem.DupeTypeKey)); sourceDetails.SetFieldValue(DatItem.MachineKey, GetFieldValue(DatItem.MachineKey)); - sourceDetails.SetFieldValue(DatItem.RemoveKey, GetFieldValue(DatItem.RemoveKey)); + 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)); diff --git a/SabreTools.DatItems/Machine.cs b/SabreTools.DatItems/Machine.cs index d2c9af7e..cc1ac1c4 100644 --- a/SabreTools.DatItems/Machine.cs +++ b/SabreTools.DatItems/Machine.cs @@ -130,6 +130,81 @@ namespace SabreTools.DatItems return _machine.Read(fieldName!); } + /// + /// Get the value from a field based on the type provided + /// + /// Field to retrieve + /// Value from the field, if possible + public bool? GetBoolFieldValue(string? fieldName) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName) || !_machine.ContainsKey(fieldName!)) + return default; + + // Get the value based on the type + return _machine.ReadBool(fieldName!); + } + + /// + /// Get the value from a field based on the type provided + /// + /// Field to retrieve + /// Value from the field, if possible + public double? GetDoubleFieldValue(string? fieldName) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName) || !_machine.ContainsKey(fieldName!)) + return default; + + // Get the value based on the type + return _machine.ReadDouble(fieldName!); + } + + /// + /// Get the value from a field based on the type provided + /// + /// Field to retrieve + /// Value from the field, if possible + public long? GetInt64FieldValue(string? fieldName) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName) || !_machine.ContainsKey(fieldName!)) + return default; + + // Get the value based on the type + return _machine.ReadLong(fieldName!); + } + + /// + /// Get the value from a field based on the type provided + /// + /// Field to retrieve + /// Value from the field, if possible + public string? GetStringFieldValue(string? fieldName) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName) || !_machine.ContainsKey(fieldName!)) + return default; + + // Get the value based on the type + return _machine.ReadString(fieldName!); + } + + /// + /// Get the value from a field based on the type provided + /// + /// Field to retrieve + /// Value from the field, if possible + public string[]? GetStringArrayFieldValue(string? fieldName) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName) || !_machine.ContainsKey(fieldName!)) + return default; + + // Get the value based on the type + return _machine.ReadStringArray(fieldName!); + } + /// /// Set the value from a field based on the type provided /// diff --git a/SabreTools.DatTools/DatFileTool.cs b/SabreTools.DatTools/DatFileTool.cs index c7a2570b..b09b4adf 100644 --- a/SabreTools.DatTools/DatFileTool.cs +++ b/SabreTools.DatTools/DatFileTool.cs @@ -76,7 +76,7 @@ namespace SabreTools.DatTools filename = filename.Remove(0, rootpath?.Length ?? 0); newItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, Path.GetDirectoryName(filename) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(filename) + Path.DirectorySeparatorChar - + newItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); + + newItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)); newItems.Add(newItem); } @@ -105,7 +105,7 @@ namespace SabreTools.DatTools Dictionary> itemFieldNames, bool onlySame) { - InternalStopwatch watch = new($"Replacing items in '{intDat.Header.GetFieldValue(DatHeader.FileNameKey)}' from the base DAT"); + InternalStopwatch watch = new($"Replacing items in '{intDat.Header.GetStringFieldValue(DatHeader.FileNameKey)}' from the base DAT"); // If we are matching based on DatItem fields of any sort if (itemFieldNames.Any()) @@ -221,7 +221,7 @@ namespace SabreTools.DatTools else datFile.Items.BucketBy(ItemKey.CRC, DedupeType.None); - InternalStopwatch watch = new($"Comparing '{intDat.Header.GetFieldValue(DatHeader.FileNameKey)}' to base DAT"); + InternalStopwatch watch = new($"Comparing '{intDat.Header.GetStringFieldValue(DatHeader.FileNameKey)}' to base DAT"); // For comparison's sake, we want to a the base bucketing if (useGames) @@ -378,20 +378,20 @@ namespace SabreTools.DatTools InternalStopwatch watch = new("Initializing duplicate DAT"); // Fill in any information not in the base DAT - if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(DatHeader.FileNameKey))) + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(DatHeader.FileNameKey))) datFile.Header.SetFieldValue(DatHeader.FileNameKey, "All DATs"); - if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey))) + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey))) datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, "datFile.All DATs"); - if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, "datFile.All DATs"); string post = " (Duplicates)"; DatFile dupeData = DatFile.Create(datFile.Header); - dupeData.Header.SetFieldValue(DatHeader.FileNameKey, dupeData.Header.GetFieldValue(DatHeader.FileNameKey) + post); - dupeData.Header.SetFieldValue(Models.Metadata.Header.NameKey, dupeData.Header.GetFieldValue(Models.Metadata.Header.NameKey) + post); - dupeData.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, dupeData.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + post); + dupeData.Header.SetFieldValue(DatHeader.FileNameKey, dupeData.Header.GetStringFieldValue(DatHeader.FileNameKey) + post); + dupeData.Header.SetFieldValue(Models.Metadata.Header.NameKey, dupeData.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + post); + dupeData.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, dupeData.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + post); dupeData.Items = []; watch.Stop(); @@ -430,7 +430,7 @@ namespace SabreTools.DatTools continue; if (item.GetFieldValue(DatItem.SourceKey) != null) - newrom.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, newrom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) + $" ({Path.GetFileNameWithoutExtension(inputs[item.GetFieldValue(DatItem.SourceKey)!.Index].CurrentPath)})"); + newrom.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, newrom.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) + $" ({Path.GetFileNameWithoutExtension(inputs[item.GetFieldValue(DatItem.SourceKey)!.Index].CurrentPath)})"); dupeData.Items.Add(key, newrom); } @@ -467,13 +467,13 @@ namespace SabreTools.DatTools InternalStopwatch watch = new("Initializing all individual DATs"); // Fill in any information not in the base DAT - if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(DatHeader.FileNameKey))) + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(DatHeader.FileNameKey))) datFile.Header.SetFieldValue(DatHeader.FileNameKey, "All DATs"); - if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey))) + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey))) datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, "All DATs"); - if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, "All DATs"); // Loop through each of the inputs and get or create a new DatData object @@ -489,9 +489,9 @@ namespace SabreTools.DatTools { string innerpost = $" ({j} - {inputs[j].GetNormalizedFileName(true)} Only)"; DatFile diffData = DatFile.Create(datFile.Header); - diffData.Header.SetFieldValue(DatHeader.FileNameKey, diffData.Header.GetFieldValue(DatHeader.FileNameKey) + innerpost); - diffData.Header.SetFieldValue(Models.Metadata.Header.NameKey, diffData.Header.GetFieldValue(Models.Metadata.Header.NameKey) + innerpost); - diffData.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, diffData.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + innerpost); + diffData.Header.SetFieldValue(DatHeader.FileNameKey, diffData.Header.GetStringFieldValue(DatHeader.FileNameKey) + innerpost); + diffData.Header.SetFieldValue(Models.Metadata.Header.NameKey, diffData.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + innerpost); + diffData.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, diffData.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + innerpost); diffData.Items = []; outDatsArray[j] = diffData; #if NET40_OR_GREATER || NETCOREAPP @@ -571,20 +571,20 @@ namespace SabreTools.DatTools InternalStopwatch watch = new("Initializing no duplicate DAT"); // Fill in any information not in the base DAT - if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(DatHeader.FileNameKey))) + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(DatHeader.FileNameKey))) datFile.Header.SetFieldValue(DatHeader.FileNameKey, "All DATs"); - if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey))) + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey))) datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, "All DATs"); - if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, "All DATs"); string post = " (No Duplicates)"; DatFile outerDiffData = DatFile.Create(datFile.Header); - outerDiffData.Header.SetFieldValue(DatHeader.FileNameKey, outerDiffData.Header.GetFieldValue(DatHeader.FileNameKey) + post); - outerDiffData.Header.SetFieldValue(Models.Metadata.Header.NameKey, outerDiffData.Header.GetFieldValue(Models.Metadata.Header.NameKey) + post); - outerDiffData.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, outerDiffData.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + post); + outerDiffData.Header.SetFieldValue(DatHeader.FileNameKey, outerDiffData.Header.GetStringFieldValue(DatHeader.FileNameKey) + post); + outerDiffData.Header.SetFieldValue(Models.Metadata.Header.NameKey, outerDiffData.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + post); + outerDiffData.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, outerDiffData.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + post); outerDiffData.Items = []; watch.Stop(); @@ -622,7 +622,7 @@ namespace SabreTools.DatTools if (item.Clone() is not DatItem newrom || newrom.GetFieldValue(DatItem.SourceKey) == null) continue; - newrom.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, newrom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) + $" ({Path.GetFileNameWithoutExtension(inputs[newrom.GetFieldValue(DatItem.SourceKey)!.Index].CurrentPath)})"); + newrom.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, newrom.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) + $" ({Path.GetFileNameWithoutExtension(inputs[newrom.GetFieldValue(DatItem.SourceKey)!.Index].CurrentPath)})"); outerDiffData.Items.Add(key, newrom); } } diff --git a/SabreTools.DatTools/DatFromDir.cs b/SabreTools.DatTools/DatFromDir.cs index ad438274..b499c47b 100644 --- a/SabreTools.DatTools/DatFromDir.cs +++ b/SabreTools.DatTools/DatFromDir.cs @@ -341,7 +341,7 @@ namespace SabreTools.DatTools string romname = string.Empty; // If we have a SuperDAT, we want anything that's not the base path as the game, and the file as the rom - if (datFile.Header.GetFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT") + if (datFile.Header.GetStringFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT") { if (basePath != null) gamename = fulldir.Remove(0, basePath.Length + 1); @@ -398,7 +398,7 @@ namespace SabreTools.DatTools private static void ProcessFile(DatFile datFile, string item, string? basePath, HashType[] hashes, TreatAsFile asFiles) { logger.Verbose($"'{Path.GetFileName(item)}' treated like a file"); - BaseFile? baseFile = BaseFile.GetInfo(item, header: datFile.Header.GetFieldValue(Models.Metadata.Header.HeaderKey), hashes: hashes, asFiles: asFiles); + BaseFile? baseFile = BaseFile.GetInfo(item, header: datFile.Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey), hashes: hashes, asFiles: asFiles); DatItem? datItem = DatItem.Create(baseFile); if (datItem != null) ProcessFileHelper(datFile, item, datItem, basePath, string.Empty); @@ -461,7 +461,7 @@ namespace SabreTools.DatTools if (string.IsNullOrEmpty(parent)) { // If we have a SuperDAT, we want anything that's not the base path as the game, and the file as the rom - if (datFile.Header.GetFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT") + if (datFile.Header.GetStringFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT") { machineName = Path.GetDirectoryName(item.Remove(0, basepath?.Length ?? 0)); itemName = Path.GetFileName(item); @@ -482,7 +482,7 @@ namespace SabreTools.DatTools else { // If we have a SuperDAT, we want the archive name as the game, and the file as everything else (?) - if (datFile.Header.GetFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT") + if (datFile.Header.GetStringFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT") { machineName = parent; itemName = datItem.GetName(); diff --git a/SabreTools.DatTools/Parser.cs b/SabreTools.DatTools/Parser.cs index 0f464bf4..da17bb9b 100644 --- a/SabreTools.DatTools/Parser.cs +++ b/SabreTools.DatTools/Parser.cs @@ -94,11 +94,11 @@ namespace SabreTools.DatTools return; // If the output filename isn't set already, get the internal filename - datFile.Header.SetFieldValue(DatHeader.FileNameKey, string.IsNullOrEmpty(datFile.Header.GetFieldValue(DatHeader.FileNameKey)) + datFile.Header.SetFieldValue(DatHeader.FileNameKey, string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(DatHeader.FileNameKey)) ? (keepext ? Path.GetFileName(currentPath) : Path.GetFileNameWithoutExtension(currentPath)) - : datFile.Header.GetFieldValue(DatHeader.FileNameKey)); + : datFile.Header.GetStringFieldValue(DatHeader.FileNameKey)); // If the output type isn't set already, get the internal output type DatFormat currentPathFormat = GetDatFormat(currentPath); diff --git a/SabreTools.DatTools/Rebuilder.cs b/SabreTools.DatTools/Rebuilder.cs index 885ecd0c..5abefcdd 100644 --- a/SabreTools.DatTools/Rebuilder.cs +++ b/SabreTools.DatTools/Rebuilder.cs @@ -405,7 +405,7 @@ namespace SabreTools.DatTools datItem = media.ConvertToRom(); // Prepopluate a key string - string crc = (datItem as Rom)!.GetFieldValue(Models.Metadata.Rom.CRCKey) ?? string.Empty; + string crc = (datItem as Rom)!.GetStringFieldValue(Models.Metadata.Rom.CRCKey) ?? string.Empty; // Try to get the stream for the file if (!GetFileStream(datItem, file, isZip, out Stream? fileStream)) @@ -437,11 +437,11 @@ namespace SabreTools.DatTools foreach (DatItem item in dupes) { // If we don't have a proper machine - if (item.GetFieldValue(DatItem.MachineKey)!?.GetFieldValue(Models.Metadata.Machine.NameKey) == null || !datFile.Items.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!)) + if (item.GetFieldValue(DatItem.MachineKey)!?.GetStringFieldValue(Models.Metadata.Machine.NameKey) == null || !datFile.Items.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!)) continue; // If we should check for the items in the machine - var items = datFile.Items[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!]; + var items = datFile.Items[item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!]; if (shouldCheck && items!.Count > 1) outputFormat = OutputFormat.Folder; else if (shouldCheck && items!.Count == 1) @@ -459,11 +459,11 @@ namespace SabreTools.DatTools } // Now we want to take care of headers, if applicable - if (datFile.Header.GetFieldValue(Models.Metadata.Header.HeaderKey) != null) + if (datFile.Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey) != null) { // Check to see if we have a matching header first SkipperMatch.Init(); - Rule rule = SkipperMatch.GetMatchingRule(fileStream, Path.GetFileNameWithoutExtension(datFile.Header.GetFieldValue(Models.Metadata.Header.HeaderKey)!)); + Rule rule = SkipperMatch.GetMatchingRule(fileStream, Path.GetFileNameWithoutExtension(datFile.Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey)!)); // If there's a match, create the new file to write if (rule.Tests != null && rule.Tests.Length != 0) @@ -588,7 +588,7 @@ namespace SabreTools.DatTools logger.User($"Matches found for '{Path.GetFileName(datItem.GetName() ?? string.Empty)}', rebuilding accordingly..."); // Get the proper output path - string sha1 = (datItem as Rom)!.GetFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty; + string sha1 = (datItem as Rom)!.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty; if (outputFormat == OutputFormat.TorrentGzipRomba) outDir = Path.Combine(outDir, Utilities.GetDepotPath(sha1, datFile.Header.GetFieldValue(DatHeader.OutputDepotKey)?.Depth ?? 0) ?? string.Empty); else @@ -634,7 +634,7 @@ namespace SabreTools.DatTools logger.User($"Matches found for '{Path.GetFileName(datItem.GetName() ?? string.Empty)}', rebuilding accordingly..."); // Get the proper output path - string sha1 = (datItem as Rom)!.GetFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty; + string sha1 = (datItem as Rom)!.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty; if (outputFormat == OutputFormat.TorrentXZRomba) outDir = Path.Combine(outDir, Utilities.GetDepotPath(sha1, datFile.Header.GetFieldValue(DatHeader.OutputDepotKey)?.Depth ?? 0) ?? string.Empty).Replace(".gz", ".xz"); else diff --git a/SabreTools.DatTools/Splitter.cs b/SabreTools.DatTools/Splitter.cs index b3d51a1e..da9abb17 100644 --- a/SabreTools.DatTools/Splitter.cs +++ b/SabreTools.DatTools/Splitter.cs @@ -56,14 +56,14 @@ namespace SabreTools.DatTools // Set all of the appropriate outputs for each of the subsets DatFile extADat = DatFile.Create(datFile.Header.CloneStandard()); - extADat.Header.SetFieldValue(DatHeader.FileNameKey, extADat.Header.GetFieldValue(DatHeader.FileNameKey) + $" ({newExtAString})"); - extADat.Header.SetFieldValue(Models.Metadata.Header.NameKey, extADat.Header.GetFieldValue(Models.Metadata.Header.NameKey) + $" ({newExtAString})"); - extADat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, extADat.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + $" ({newExtAString})"); + extADat.Header.SetFieldValue(DatHeader.FileNameKey, extADat.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" ({newExtAString})"); + extADat.Header.SetFieldValue(Models.Metadata.Header.NameKey, extADat.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" ({newExtAString})"); + extADat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, extADat.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" ({newExtAString})"); DatFile extBDat = DatFile.Create(datFile.Header.CloneStandard()); - extBDat.Header.SetFieldValue(DatHeader.FileNameKey, extBDat.Header.GetFieldValue(DatHeader.FileNameKey) + $" ({newExtBString})"); - extBDat.Header.SetFieldValue(Models.Metadata.Header.NameKey, extBDat.Header.GetFieldValue(Models.Metadata.Header.NameKey) + $" ({newExtBString})"); - extBDat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, extBDat.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + $" ({newExtBString})"); + extBDat.Header.SetFieldValue(DatHeader.FileNameKey, extBDat.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" ({newExtBString})"); + extBDat.Header.SetFieldValue(Models.Metadata.Header.NameKey, extBDat.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" ({newExtBString})"); + extBDat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, extBDat.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" ({newExtBString})"); // Now separate the roms accordingly #if NET452_OR_GREATER || NETCOREAPP @@ -124,44 +124,44 @@ namespace SabreTools.DatTools // TODO: Can this be made into a loop? fieldDats[Models.Metadata.Rom.StatusKey] = DatFile.Create(datFile.Header.CloneStandard()); - fieldDats[Models.Metadata.Rom.StatusKey].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.StatusKey].Header.GetFieldValue(DatHeader.FileNameKey) + " (Nodump)"); - fieldDats[Models.Metadata.Rom.StatusKey].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.StatusKey].Header.GetFieldValue(Models.Metadata.Header.NameKey) + " (Nodump)"); - fieldDats[Models.Metadata.Rom.StatusKey].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.StatusKey].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + " (Nodump)"); + fieldDats[Models.Metadata.Rom.StatusKey].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.StatusKey].Header.GetStringFieldValue(DatHeader.FileNameKey) + " (Nodump)"); + fieldDats[Models.Metadata.Rom.StatusKey].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.StatusKey].Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + " (Nodump)"); + fieldDats[Models.Metadata.Rom.StatusKey].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.StatusKey].Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + " (Nodump)"); fieldDats[Models.Metadata.Rom.SHA512Key] = DatFile.Create(datFile.Header.CloneStandard()); - fieldDats[Models.Metadata.Rom.SHA512Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.SHA512Key].Header.GetFieldValue(DatHeader.FileNameKey) + " (SHA-512)"); - fieldDats[Models.Metadata.Rom.SHA512Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.SHA512Key].Header.GetFieldValue(Models.Metadata.Header.NameKey) + " (SHA-512)"); - fieldDats[Models.Metadata.Rom.SHA512Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.SHA512Key].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + " (SHA-512)"); + fieldDats[Models.Metadata.Rom.SHA512Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.SHA512Key].Header.GetStringFieldValue(DatHeader.FileNameKey) + " (SHA-512)"); + fieldDats[Models.Metadata.Rom.SHA512Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.SHA512Key].Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + " (SHA-512)"); + fieldDats[Models.Metadata.Rom.SHA512Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.SHA512Key].Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + " (SHA-512)"); fieldDats[Models.Metadata.Rom.SHA384Key] = DatFile.Create(datFile.Header.CloneStandard()); - fieldDats[Models.Metadata.Rom.SHA384Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.SHA384Key].Header.GetFieldValue(DatHeader.FileNameKey) + " (SHA-384)"); - fieldDats[Models.Metadata.Rom.SHA384Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.SHA384Key].Header.GetFieldValue(Models.Metadata.Header.NameKey) + " (SHA-384)"); - fieldDats[Models.Metadata.Rom.SHA384Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.SHA384Key].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + " (SHA-384)"); + fieldDats[Models.Metadata.Rom.SHA384Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.SHA384Key].Header.GetStringFieldValue(DatHeader.FileNameKey) + " (SHA-384)"); + fieldDats[Models.Metadata.Rom.SHA384Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.SHA384Key].Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + " (SHA-384)"); + fieldDats[Models.Metadata.Rom.SHA384Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.SHA384Key].Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + " (SHA-384)"); fieldDats[Models.Metadata.Rom.SHA256Key] = DatFile.Create(datFile.Header.CloneStandard()); - fieldDats[Models.Metadata.Rom.SHA256Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.SHA256Key].Header.GetFieldValue(DatHeader.FileNameKey) + " (SHA-256)"); - fieldDats[Models.Metadata.Rom.SHA256Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.SHA256Key].Header.GetFieldValue(Models.Metadata.Header.NameKey) + " (SHA-256)"); - fieldDats[Models.Metadata.Rom.SHA256Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.SHA256Key].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + " (SHA-256)"); + fieldDats[Models.Metadata.Rom.SHA256Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.SHA256Key].Header.GetStringFieldValue(DatHeader.FileNameKey) + " (SHA-256)"); + fieldDats[Models.Metadata.Rom.SHA256Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.SHA256Key].Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + " (SHA-256)"); + fieldDats[Models.Metadata.Rom.SHA256Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.SHA256Key].Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + " (SHA-256)"); fieldDats[Models.Metadata.Rom.SHA1Key] = DatFile.Create(datFile.Header.CloneStandard()); - fieldDats[Models.Metadata.Rom.SHA1Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.SHA1Key].Header.GetFieldValue(DatHeader.FileNameKey) + " (SHA-1)"); - fieldDats[Models.Metadata.Rom.SHA1Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.SHA1Key].Header.GetFieldValue(Models.Metadata.Header.NameKey) + " (SHA-1)"); - fieldDats[Models.Metadata.Rom.SHA1Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.SHA1Key].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + " (SHA-1)"); + fieldDats[Models.Metadata.Rom.SHA1Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.SHA1Key].Header.GetStringFieldValue(DatHeader.FileNameKey) + " (SHA-1)"); + fieldDats[Models.Metadata.Rom.SHA1Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.SHA1Key].Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + " (SHA-1)"); + fieldDats[Models.Metadata.Rom.SHA1Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.SHA1Key].Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + " (SHA-1)"); fieldDats[Models.Metadata.Rom.MD5Key] = DatFile.Create(datFile.Header.CloneStandard()); - fieldDats[Models.Metadata.Rom.MD5Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.MD5Key].Header.GetFieldValue(DatHeader.FileNameKey) + " (MD5)"); - fieldDats[Models.Metadata.Rom.MD5Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.MD5Key].Header.GetFieldValue(Models.Metadata.Header.NameKey) + " (MD5)"); - fieldDats[Models.Metadata.Rom.MD5Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.MD5Key].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + " (MD5)"); + fieldDats[Models.Metadata.Rom.MD5Key].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.MD5Key].Header.GetStringFieldValue(DatHeader.FileNameKey) + " (MD5)"); + fieldDats[Models.Metadata.Rom.MD5Key].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.MD5Key].Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + " (MD5)"); + fieldDats[Models.Metadata.Rom.MD5Key].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.MD5Key].Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + " (MD5)"); fieldDats[Models.Metadata.Rom.CRCKey] = DatFile.Create(datFile.Header.CloneStandard()); - fieldDats[Models.Metadata.Rom.CRCKey].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.CRCKey].Header.GetFieldValue(DatHeader.FileNameKey) + " (CRC)"); - fieldDats[Models.Metadata.Rom.CRCKey].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.CRCKey].Header.GetFieldValue(Models.Metadata.Header.NameKey) + " (CRC)"); - fieldDats[Models.Metadata.Rom.CRCKey].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.CRCKey].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + " (CRC)"); + fieldDats[Models.Metadata.Rom.CRCKey].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats[Models.Metadata.Rom.CRCKey].Header.GetStringFieldValue(DatHeader.FileNameKey) + " (CRC)"); + fieldDats[Models.Metadata.Rom.CRCKey].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats[Models.Metadata.Rom.CRCKey].Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + " (CRC)"); + fieldDats[Models.Metadata.Rom.CRCKey].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats[Models.Metadata.Rom.CRCKey].Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + " (CRC)"); fieldDats["null"] = DatFile.Create(datFile.Header.CloneStandard()); - fieldDats["null"].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats["null"].Header.GetFieldValue(DatHeader.FileNameKey) + " (Other)"); - fieldDats["null"].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats["null"].Header.GetFieldValue(Models.Metadata.Header.NameKey) + " (Other)"); - fieldDats["null"].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats["null"].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + " (Other)"); + fieldDats["null"].Header.SetFieldValue(DatHeader.FileNameKey, fieldDats["null"].Header.GetStringFieldValue(DatHeader.FileNameKey) + " (Other)"); + fieldDats["null"].Header.SetFieldValue(Models.Metadata.Header.NameKey, fieldDats["null"].Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + " (Other)"); + fieldDats["null"].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, fieldDats["null"].Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + " (Other)"); // Now populate each of the DAT objects in turn #if NET452_OR_GREATER || NETCOREAPP @@ -187,22 +187,22 @@ namespace SabreTools.DatTools case Disk disk: if (disk.GetFieldValue(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump) fieldDats[Models.Metadata.Disk.StatusKey].Items.Add(key, item); - else if (!string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key))) + else if (!string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))) fieldDats[Models.Metadata.Disk.SHA1Key].Items.Add(key, item); - else if (!string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key))) + else if (!string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key))) fieldDats[Models.Metadata.Disk.MD5Key].Items.Add(key, item); - else if (!string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key))) + else if (!string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key))) fieldDats[Models.Metadata.Disk.MD5Key].Items.Add(key, item); else fieldDats["null"].Items.Add(key, item); break; case Media media: - if (!string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA256Key))) + if (!string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA256Key))) fieldDats[Models.Metadata.Media.SHA256Key].Items.Add(key, item); - else if (!string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA1Key))) + else if (!string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key))) fieldDats[Models.Metadata.Media.SHA1Key].Items.Add(key, item); - else if (!string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.MD5Key))) + else if (!string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.MD5Key))) fieldDats[Models.Metadata.Media.MD5Key].Items.Add(key, item); else fieldDats["null"].Items.Add(key, item); @@ -211,17 +211,17 @@ namespace SabreTools.DatTools case Rom rom: if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump) fieldDats[Models.Metadata.Rom.StatusKey].Items.Add(key, item); - else if (!string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA512Key))) + else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key))) fieldDats[Models.Metadata.Rom.SHA512Key].Items.Add(key, item); - else if (!string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA384Key))) + else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key))) fieldDats[Models.Metadata.Rom.SHA384Key].Items.Add(key, item); - else if (!string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA256Key))) + else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key))) fieldDats[Models.Metadata.Rom.SHA256Key].Items.Add(key, item); - else if (!string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key))) + else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key))) fieldDats[Models.Metadata.Rom.SHA1Key].Items.Add(key, item); - else if (!string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key))) + else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key))) fieldDats[Models.Metadata.Rom.MD5Key].Items.Add(key, item); - else if (!string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey))) + else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey))) fieldDats[Models.Metadata.Rom.CRCKey].Items.Add(key, item); else fieldDats["null"].Items.Add(key, item); @@ -274,7 +274,7 @@ namespace SabreTools.DatTools #endif { // Here, the key is the name of the game to be used for comparison - if (tempDat.Header.GetFieldValue(Models.Metadata.Header.NameKey) != null && tempDat.Header.GetFieldValue(Models.Metadata.Header.NameKey) != Path.GetDirectoryName(key)) + if (tempDat.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) != null && tempDat.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) != Path.GetDirectoryName(key)) { // Reset the DAT for the next items tempDat = DatFile.Create(datFile.Header); @@ -289,8 +289,8 @@ namespace SabreTools.DatTools #else continue; #endif - items.ForEach(item => item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, Path.GetFileName(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)))); - items.ForEach(item => item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, Path.GetFileName(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)))); + items.ForEach(item => item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, Path.GetFileName(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)))); + items.ForEach(item => item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, Path.GetFileName(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)))); // Now add the game to the output DAT tempDat.Items.AddRange(key, items); @@ -336,20 +336,20 @@ namespace SabreTools.DatTools private static void SplitByLevelHelper(DatFile datFile, DatFile newDatFile, string outDir, bool shortname, bool restore) { // Get the name from the DAT to use separately - string? name = newDatFile.Header.GetFieldValue(Models.Metadata.Header.NameKey); + string? name = newDatFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey); string? expName = name?.Replace("/", " - ")?.Replace("\\", " - "); // Now set the new output values #if NET20 || NET35 newDatFile.Header.SetFieldValue(DatHeader.FileNameKey, string.IsNullOrEmpty(name) - ? datFile.Header.GetFieldValue(DatHeader.FileNameKey) + ? datFile.Header.GetStringFieldValue(DatHeader.FileNameKey) : (shortname ? Path.GetFileName(name) : expName )); #else newDatFile.Header.SetFieldValue(DatHeader.FileNameKey, WebUtility.HtmlDecode(string.IsNullOrEmpty(name) - ? datFile.Header.GetFieldValue(DatHeader.FileNameKey) + ? datFile.Header.GetStringFieldValue(DatHeader.FileNameKey) : (shortname ? Path.GetFileName(name) : expName @@ -357,12 +357,12 @@ namespace SabreTools.DatTools )); #endif newDatFile.Header.SetFieldValue(DatHeader.FileNameKey, restore - ? $"{datFile.Header.GetFieldValue(DatHeader.FileNameKey)} ({newDatFile.Header.GetFieldValue(DatHeader.FileNameKey)})" - : newDatFile.Header.GetFieldValue(DatHeader.FileNameKey)); - newDatFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, $"{datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)} ({expName})"); - newDatFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)) - ? newDatFile.Header.GetFieldValue(Models.Metadata.Header.NameKey) - : $"{datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)} ({expName})"); + ? $"{datFile.Header.GetStringFieldValue(DatHeader.FileNameKey)} ({newDatFile.Header.GetStringFieldValue(DatHeader.FileNameKey)})" + : newDatFile.Header.GetStringFieldValue(DatHeader.FileNameKey)); + newDatFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, $"{datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey)} ({expName})"); + newDatFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)) + ? newDatFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + : $"{datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)} ({expName})"); newDatFile.Header.SetFieldValue(Models.Metadata.Header.TypeKey, null); // Write out the temporary DAT to the proper directory @@ -381,14 +381,14 @@ namespace SabreTools.DatTools InternalStopwatch watch = new($"Splitting DAT by size"); DatFile lessThan = DatFile.Create(datFile.Header.CloneStandard()); - lessThan.Header.SetFieldValue(DatHeader.FileNameKey, lessThan.Header.GetFieldValue(DatHeader.FileNameKey) + $" (less than {radix})"); - lessThan.Header.SetFieldValue(Models.Metadata.Header.NameKey, lessThan.Header.GetFieldValue(Models.Metadata.Header.NameKey) + $" (less than {radix})"); - lessThan.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, lessThan.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + $" (less than {radix})"); + lessThan.Header.SetFieldValue(DatHeader.FileNameKey, lessThan.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" (less than {radix})"); + lessThan.Header.SetFieldValue(Models.Metadata.Header.NameKey, lessThan.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" (less than {radix})"); + lessThan.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, lessThan.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" (less than {radix})"); DatFile greaterThan = DatFile.Create(datFile.Header.CloneStandard()); - greaterThan.Header.SetFieldValue(DatHeader.FileNameKey, greaterThan.Header.GetFieldValue(DatHeader.FileNameKey) + $" (equal-greater than {radix})"); - greaterThan.Header.SetFieldValue(Models.Metadata.Header.NameKey, greaterThan.Header.GetFieldValue(Models.Metadata.Header.NameKey) + $" (equal-greater than {radix})"); - greaterThan.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, greaterThan.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + $" (equal-greater than {radix})"); + greaterThan.Header.SetFieldValue(DatHeader.FileNameKey, greaterThan.Header.GetStringFieldValue(DatHeader.FileNameKey) + $" (equal-greater than {radix})"); + greaterThan.Header.SetFieldValue(Models.Metadata.Header.NameKey, greaterThan.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" (equal-greater than {radix})"); + greaterThan.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, greaterThan.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" (equal-greater than {radix})"); // Now populate each of the DAT objects in turn #if NET452_OR_GREATER || NETCOREAPP @@ -413,15 +413,15 @@ namespace SabreTools.DatTools lessThan.Items.Add(key, item); // If the file is a Rom and has no size, put it in the "lesser" dat - else if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null) + else if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null) lessThan.Items.Add(key, item); // If the file is a Rom and less than the radix, put it in the "lesser" dat - else if (NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < radix) + else if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) < radix) lessThan.Items.Add(key, item); // If the file is a Rom and greater than or equal to the radix, put it in the "greater" dat - else if (NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) >= radix) + else if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) >= radix) greaterThan.Items.Add(key, item); } #if NET40_OR_GREATER || NETCOREAPP @@ -463,9 +463,9 @@ namespace SabreTools.DatTools long currentSize = 0; long currentIndex = 0; DatFile currentDat = DatFile.Create(datFile.Header.CloneStandard()); - currentDat.Header.SetFieldValue(DatHeader.FileNameKey, currentDat.Header.GetFieldValue(DatHeader.FileNameKey) + $"_{currentIndex}"); - currentDat.Header.SetFieldValue(Models.Metadata.Header.NameKey, currentDat.Header.GetFieldValue(Models.Metadata.Header.NameKey) + $"_{currentIndex}"); - currentDat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, currentDat.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + $"_{currentIndex}"); + currentDat.Header.SetFieldValue(DatHeader.FileNameKey, currentDat.Header.GetStringFieldValue(DatHeader.FileNameKey) + $"_{currentIndex}"); + currentDat.Header.SetFieldValue(Models.Metadata.Header.NameKey, currentDat.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $"_{currentIndex}"); + currentDat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, currentDat.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $"_{currentIndex}"); // Loop through each machine foreach (string machine in keys) @@ -485,8 +485,8 @@ namespace SabreTools.DatTools if (item is Rom rom) { // TODO: Should there be more than just a log if a single item is larger than the chunksize? - machineSize += NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) ?? 0; - if ((NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) ?? 0) > chunkSize) + machineSize += rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0; + if ((rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0) > chunkSize) logger.Error($"{rom.GetName() ?? string.Empty} in {machine} is larger than {chunkSize}"); } } @@ -506,9 +506,9 @@ namespace SabreTools.DatTools currentSize = 0; currentIndex++; currentDat = DatFile.Create(datFile.Header.CloneStandard()); - currentDat.Header.SetFieldValue(DatHeader.FileNameKey, currentDat.Header.GetFieldValue(DatHeader.FileNameKey) + $"_{currentIndex}"); - currentDat.Header.SetFieldValue(Models.Metadata.Header.NameKey, currentDat.Header.GetFieldValue(Models.Metadata.Header.NameKey) + $"_{currentIndex}"); - currentDat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, currentDat.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + $"_{currentIndex}"); + currentDat.Header.SetFieldValue(DatHeader.FileNameKey, currentDat.Header.GetStringFieldValue(DatHeader.FileNameKey) + $"_{currentIndex}"); + currentDat.Header.SetFieldValue(Models.Metadata.Header.NameKey, currentDat.Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $"_{currentIndex}"); + currentDat.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, currentDat.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $"_{currentIndex}"); } // Add the current machine to the current DatFile @@ -550,9 +550,9 @@ namespace SabreTools.DatTools foreach (ItemType itemType in outputTypes) { typeDats[itemType] = DatFile.Create(datFile.Header.CloneStandard()); - typeDats[itemType].Header.SetFieldValue(DatHeader.FileNameKey, typeDats[itemType].Header.GetFieldValue(DatHeader.FileNameKey) + $" ({itemType})"); - typeDats[itemType].Header.SetFieldValue(Models.Metadata.Header.NameKey, typeDats[itemType].Header.GetFieldValue(Models.Metadata.Header.NameKey) + $" ({itemType})"); - typeDats[itemType].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, typeDats[itemType].Header.GetFieldValue(Models.Metadata.Header.DescriptionKey) + $" ({itemType})"); + typeDats[itemType].Header.SetFieldValue(DatHeader.FileNameKey, typeDats[itemType].Header.GetStringFieldValue(DatHeader.FileNameKey) + $" ({itemType})"); + typeDats[itemType].Header.SetFieldValue(Models.Metadata.Header.NameKey, typeDats[itemType].Header.GetStringFieldValue(Models.Metadata.Header.NameKey) + $" ({itemType})"); + typeDats[itemType].Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, typeDats[itemType].Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + $" ({itemType})"); } // Now populate each of the DAT objects in turn diff --git a/SabreTools.DatTools/Statistics.cs b/SabreTools.DatTools/Statistics.cs index 71d098b3..07dcf407 100644 --- a/SabreTools.DatTools/Statistics.cs +++ b/SabreTools.DatTools/Statistics.cs @@ -100,7 +100,7 @@ namespace SabreTools.DatTools DatStatistics individualStats = new() { Statistics = datdata.Items, - DisplayName = datdata.Header.GetFieldValue(DatHeader.FileNameKey), + DisplayName = datdata.Header.GetStringFieldValue(DatHeader.FileNameKey), MachineCount = datdata.Items.Keys.Count, IsDirectory = false, }; diff --git a/SabreTools.DatTools/Verification.cs b/SabreTools.DatTools/Verification.cs index 1215e6eb..9fa0762f 100644 --- a/SabreTools.DatTools/Verification.cs +++ b/SabreTools.DatTools/Verification.cs @@ -104,9 +104,9 @@ namespace SabreTools.DatTools watch.Stop(); // Set fixdat headers in case of writing out - datFile.Header.SetFieldValue(DatHeader.FileNameKey, $"fixDAT_{datFile.Header.GetFieldValue(DatHeader.FileNameKey)}"); - datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, $"fixDAT_{datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)}"); - datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, $"fixDAT_{datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)}"); + datFile.Header.SetFieldValue(DatHeader.FileNameKey, $"fixDAT_{datFile.Header.GetStringFieldValue(DatHeader.FileNameKey)}"); + datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, $"fixDAT_{datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey)}"); + datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, $"fixDAT_{datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)}"); datFile.Items.ClearMarked(); return success; @@ -153,9 +153,9 @@ namespace SabreTools.DatTools watch.Stop(); // Set fixdat headers in case of writing out - datFile.Header.SetFieldValue(DatHeader.FileNameKey, $"fixDAT_{datFile.Header.GetFieldValue(DatHeader.FileNameKey)}"); - datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, $"fixDAT_{datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)}"); - datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, $"fixDAT_{datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)}"); + datFile.Header.SetFieldValue(DatHeader.FileNameKey, $"fixDAT_{datFile.Header.GetStringFieldValue(DatHeader.FileNameKey)}"); + datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, $"fixDAT_{datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey)}"); + datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, $"fixDAT_{datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)}"); datFile.Items.ClearMarked(); return success; diff --git a/SabreTools.DatTools/Writer.cs b/SabreTools.DatTools/Writer.cs index 883261e2..77c2214a 100644 --- a/SabreTools.DatTools/Writer.cs +++ b/SabreTools.DatTools/Writer.cs @@ -71,7 +71,7 @@ namespace SabreTools.DatTools datFile.Items.BucketBy(ItemKey.Machine, DedupeType.None); // Output the number of items we're going to be writing - logger.User($"A total of {datFile.Items.TotalCount - datFile.Items.RemovedCount} items will be written out to '{datFile.Header.GetFieldValue(DatHeader.FileNameKey)}'"); + logger.User($"A total of {datFile.Items.TotalCount - datFile.Items.RemovedCount} items will be written out to '{datFile.Header.GetStringFieldValue(DatHeader.FileNameKey)}'"); // Get the outfile names Dictionary outfiles = datFile.Header.CreateOutFileNames(outDir!, overwrite); @@ -135,7 +135,7 @@ namespace SabreTools.DatTools new() { Statistics = datFile.Items, - DisplayName = datFile.Header.GetFieldValue(DatHeader.FileNameKey), + DisplayName = datFile.Header.GetStringFieldValue(DatHeader.FileNameKey), MachineCount = datFile.Items.Keys.Count, IsDirectory = false, }, @@ -151,50 +151,50 @@ namespace SabreTools.DatTools private static void EnsureHeaderFields(DatFile datFile) { // Empty FileName - if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(DatHeader.FileNameKey))) + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(DatHeader.FileNameKey))) { - if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) { datFile.Header.SetFieldValue(DatHeader.FileNameKey,"Default"); datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, "Default"); datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, "Default"); } - else if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)) && !string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) + else if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey)) && !string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) { - datFile.Header.SetFieldValue(DatHeader.FileNameKey,datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)); - datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)); + datFile.Header.SetFieldValue(DatHeader.FileNameKey,datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)); + datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)); } - else if (!string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) + else if (!string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) { - datFile.Header.SetFieldValue(DatHeader.FileNameKey, datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)); - datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)); + datFile.Header.SetFieldValue(DatHeader.FileNameKey, datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey)); + datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey)); } - else if (!string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)) && !string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) + else if (!string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey)) && !string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) { - datFile.Header.SetFieldValue(DatHeader.FileNameKey, datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)); + datFile.Header.SetFieldValue(DatHeader.FileNameKey, datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)); } } // Filled FileName else { - if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) + if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) { - datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, datFile.Header.GetFieldValue(DatHeader.FileNameKey)); - datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, datFile.Header.GetFieldValue(DatHeader.FileNameKey)); + datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, datFile.Header.GetStringFieldValue(DatHeader.FileNameKey)); + datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, datFile.Header.GetStringFieldValue(DatHeader.FileNameKey)); } - else if (string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)) && !string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) + else if (string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey)) && !string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) { - datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)); + datFile.Header.SetFieldValue(Models.Metadata.Header.NameKey, datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)); } - else if (!string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(datFile.Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) + else if (!string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey)) && string.IsNullOrEmpty(datFile.Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) { - datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, datFile.Header.GetFieldValue(Models.Metadata.Header.NameKey)); + datFile.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, datFile.Header.GetStringFieldValue(Models.Metadata.Header.NameKey)); } } } diff --git a/SabreTools.Filtering/Cleaner.cs b/SabreTools.Filtering/Cleaner.cs index 6d058277..b059394e 100644 --- a/SabreTools.Filtering/Cleaner.cs +++ b/SabreTools.Filtering/Cleaner.cs @@ -195,16 +195,16 @@ namespace SabreTools.Filtering // If we're stripping unicode characters, strip machine name and description if (RemoveUnicode) { - datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, TextHelper.RemoveUnicodeCharacters(datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey))); - datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, TextHelper.RemoveUnicodeCharacters(datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey))); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, TextHelper.RemoveUnicodeCharacters(datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey))); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, TextHelper.RemoveUnicodeCharacters(datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey))); datItem.SetName(TextHelper.RemoveUnicodeCharacters(datItem.GetName())); } // If we're in cleaning mode, sanitize machine name and description if (Clean) { - datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, TextHelper.NormalizeCharacters(datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey))); - datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, TextHelper.NormalizeCharacters(datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey))); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, TextHelper.NormalizeCharacters(datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey))); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, TextHelper.NormalizeCharacters(datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey))); } // If we are in single game mode, rename the machine @@ -215,7 +215,7 @@ namespace SabreTools.Filtering if (Trim && datItem.GetName() != null) { // Windows max name length is 260 - int usableLength = 260 - datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!.Length - (Root?.Length ?? 0); + int usableLength = 260 - datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.Length - (Root?.Length ?? 0); if (datItem.GetName()!.Length > usableLength) { string ext = Path.GetExtension(datItem.GetName()!); @@ -261,9 +261,9 @@ namespace SabreTools.Filtering { // If the key mapping doesn't exist, add it #if NET40_OR_GREATER || NETCOREAPP - mapping.TryAdd(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!, item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)!.Replace('/', '_').Replace("\"", "''").Replace(":", " -")); + mapping.TryAdd(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!, item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)!.Replace('/', '_').Replace("\"", "''").Replace(":", " -")); #else - mapping[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!] = item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)!.Replace('/', '_').Replace("\"", "''").Replace(":", " -"); + mapping[item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!] = item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)!.Replace('/', '_').Replace("\"", "''").Replace(":", " -"); #endif } #if NET40_OR_GREATER || NETCOREAPP @@ -293,20 +293,20 @@ namespace SabreTools.Filtering foreach (DatItem item in items) { // Update machine name - if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)) && mapping.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!)) - item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, mapping[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!]); + if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)) && mapping.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!)) + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, mapping[item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!]); // Update cloneof - if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey)) && mapping.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!)) - item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.CloneOfKey, mapping[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!]); + if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)) && mapping.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)!)) + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.CloneOfKey, mapping[item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)!]); // Update romof - if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey)) && mapping.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey)!)) - item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.RomOfKey, mapping[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey)!]); + if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)) && mapping.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)!)) + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.RomOfKey, mapping[item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)!]); // Update sampleof - if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.SampleOfKey)) && mapping.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.SampleOfKey)!)) - item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.SampleOfKey, mapping[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.SampleOfKey)!]); + if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.SampleOfKey)) && mapping.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.SampleOfKey)!)) + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.SampleOfKey, mapping[item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.SampleOfKey)!]); // Add the new item to the output list newItems.Add(item); @@ -356,30 +356,30 @@ namespace SabreTools.Filtering DatItem item = datFile.Items[key]![0]; // Match on CloneOf first - if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey))) + if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey))) { - if (!parents.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant())) - parents.Add(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant(), []); + if (!parents.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant())) + parents.Add(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant(), []); - parents[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant()].Add(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()); + parents[item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant()].Add(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()); } // Then by RomOf - else if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey))) + else if (!string.IsNullOrEmpty(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey))) { - if (!parents.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant())) - parents.Add(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant(), []); + if (!parents.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant())) + parents.Add(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant(), []); - parents[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant()].Add(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()); + parents[item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant()].Add(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()); } // Otherwise, treat it as a parent else { - if (!parents.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant())) - parents.Add(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant(), []); + if (!parents.ContainsKey(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant())) + parents.Add(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant(), []); - parents[item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()].Add(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()); + parents[item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()].Add(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()); } } @@ -458,9 +458,9 @@ namespace SabreTools.Filtering string[] splitname = datItem.GetName()!.Split('.'); #if NET20 || NET35 - datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) + $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1).ToArray())}"); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) + $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1).ToArray())}"); #else - datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey) + $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1))}"); + datItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey) + $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1))}"); #endif datItem.SetName(Path.GetFileName(datItem.GetName())); } @@ -497,11 +497,11 @@ namespace SabreTools.Filtering for (int j = 0; j < items.Count; j++) { DatItem item = items[j]; - if (Regex.IsMatch(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!, pattern)) - item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, Regex.Replace(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)!, pattern, "$2")); + if (Regex.IsMatch(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!, pattern)) + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, Regex.Replace(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)!, pattern, "$2")); - if (Regex.IsMatch(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)!, pattern)) - item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, Regex.Replace(item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)!, pattern, "$2")); + if (Regex.IsMatch(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)!, pattern)) + item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.DescriptionKey, Regex.Replace(item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)!, pattern, "$2")); items[j] = item; } diff --git a/SabreTools.Filtering/Replacer.cs b/SabreTools.Filtering/Replacer.cs index cd0c4fc3..20c71b01 100644 --- a/SabreTools.Filtering/Replacer.cs +++ b/SabreTools.Filtering/Replacer.cs @@ -31,8 +31,8 @@ namespace SabreTools.Filtering // Special case for description if (machineFieldNames.Contains(Models.Metadata.Machine.DescriptionKey)) { - if (!onlySame || (onlySame && machine.GetFieldValue(Models.Metadata.Machine.NameKey) == machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey))) - machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, repMachine.GetFieldValue(Models.Metadata.Machine.DescriptionKey)); + if (!onlySame || (onlySame && machine.GetStringFieldValue(Models.Metadata.Machine.NameKey) == machine.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey))) + machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, repMachine.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)); continue; } @@ -107,14 +107,14 @@ namespace SabreTools.Filtering { if (datItemFields.Contains(Models.Metadata.Disk.MD5Key)) { - if (string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.MD5Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue(Models.Metadata.Disk.MD5Key))) - disk.SetFieldValue(Models.Metadata.Disk.MD5Key, newItem.GetFieldValue(Models.Metadata.Disk.MD5Key)); + if (string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Disk.MD5Key))) + disk.SetFieldValue(Models.Metadata.Disk.MD5Key, newItem.GetStringFieldValue(Models.Metadata.Disk.MD5Key)); } if (datItemFields.Contains(Models.Metadata.Disk.SHA1Key)) { - if (string.IsNullOrEmpty(disk.GetFieldValue(Models.Metadata.Disk.SHA1Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue(Models.Metadata.Disk.SHA1Key))) - disk.SetFieldValue(Models.Metadata.Disk.SHA1Key, newItem.GetFieldValue(Models.Metadata.Disk.SHA1Key)); + if (string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Disk.SHA1Key))) + disk.SetFieldValue(Models.Metadata.Disk.SHA1Key, newItem.GetStringFieldValue(Models.Metadata.Disk.SHA1Key)); } } @@ -128,26 +128,26 @@ namespace SabreTools.Filtering { if (datItemFields.Contains(Models.Metadata.Media.MD5Key)) { - if (string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.MD5Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue(Models.Metadata.Media.MD5Key))) - media.SetFieldValue(Models.Metadata.Media.MD5Key, newItem.GetFieldValue(Models.Metadata.Media.MD5Key)); + if (string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.MD5Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Media.MD5Key))) + media.SetFieldValue(Models.Metadata.Media.MD5Key, newItem.GetStringFieldValue(Models.Metadata.Media.MD5Key)); } if (datItemFields.Contains(Models.Metadata.Media.SHA1Key)) { - if (string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA1Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue(Models.Metadata.Media.SHA1Key))) - media.SetFieldValue(Models.Metadata.Media.SHA1Key, newItem.GetFieldValue(Models.Metadata.Media.SHA1Key)); + if (string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Media.SHA1Key))) + media.SetFieldValue(Models.Metadata.Media.SHA1Key, newItem.GetStringFieldValue(Models.Metadata.Media.SHA1Key)); } if (datItemFields.Contains(Models.Metadata.Media.SHA256Key)) { - if (string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SHA256Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue(Models.Metadata.Media.SHA256Key))) - media.SetFieldValue(Models.Metadata.Media.SHA256Key, newItem.GetFieldValue(Models.Metadata.Media.SHA256Key)); + if (string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA256Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Media.SHA256Key))) + media.SetFieldValue(Models.Metadata.Media.SHA256Key, newItem.GetStringFieldValue(Models.Metadata.Media.SHA256Key)); } if (datItemFields.Contains(Models.Metadata.Media.SpamSumKey)) { - if (string.IsNullOrEmpty(media.GetFieldValue(Models.Metadata.Media.SpamSumKey)) && !string.IsNullOrEmpty(newItem.GetFieldValue(Models.Metadata.Media.SpamSumKey))) - media.SetFieldValue(Models.Metadata.Media.SpamSumKey, newItem.GetFieldValue(Models.Metadata.Media.SpamSumKey)); + if (string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SpamSumKey)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Media.SpamSumKey))) + media.SetFieldValue(Models.Metadata.Media.SpamSumKey, newItem.GetStringFieldValue(Models.Metadata.Media.SpamSumKey)); } } @@ -161,44 +161,44 @@ namespace SabreTools.Filtering { if (datItemFields.Contains(Models.Metadata.Rom.CRCKey)) { - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) && !string.IsNullOrEmpty(newItem.GetFieldValue(Models.Metadata.Rom.CRCKey))) - rom.SetFieldValue(Models.Metadata.Rom.CRCKey, newItem.GetFieldValue(Models.Metadata.Rom.CRCKey)); + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey))) + rom.SetFieldValue(Models.Metadata.Rom.CRCKey, newItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey)); } if (datItemFields.Contains(Models.Metadata.Rom.MD5Key)) { - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue(Models.Metadata.Rom.MD5Key))) - rom.SetFieldValue(Models.Metadata.Rom.MD5Key, newItem.GetFieldValue(Models.Metadata.Rom.MD5Key)); + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key))) + rom.SetFieldValue(Models.Metadata.Rom.MD5Key, newItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key)); } if (datItemFields.Contains(Models.Metadata.Rom.SHA1Key)) { - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue(Models.Metadata.Rom.SHA1Key))) - rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, newItem.GetFieldValue(Models.Metadata.Rom.SHA1Key)); + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Rom.SHA1Key))) + rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, newItem.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)); } if (datItemFields.Contains(Models.Metadata.Rom.SHA256Key)) { - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA256Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue(Models.Metadata.Rom.SHA256Key))) - rom.SetFieldValue(Models.Metadata.Rom.SHA256Key, newItem.GetFieldValue(Models.Metadata.Rom.SHA256Key)); + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Rom.SHA256Key))) + rom.SetFieldValue(Models.Metadata.Rom.SHA256Key, newItem.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)); } if (datItemFields.Contains(Models.Metadata.Rom.SHA384Key)) { - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA384Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue(Models.Metadata.Rom.SHA384Key))) - rom.SetFieldValue(Models.Metadata.Rom.SHA384Key, newItem.GetFieldValue(Models.Metadata.Rom.SHA384Key)); + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Rom.SHA384Key))) + rom.SetFieldValue(Models.Metadata.Rom.SHA384Key, newItem.GetStringFieldValue(Models.Metadata.Rom.SHA384Key)); } if (datItemFields.Contains(Models.Metadata.Rom.SHA512Key)) { - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA512Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue(Models.Metadata.Rom.SHA512Key))) - rom.SetFieldValue(Models.Metadata.Rom.SHA512Key, newItem.GetFieldValue(Models.Metadata.Rom.SHA512Key)); + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Rom.SHA512Key))) + rom.SetFieldValue(Models.Metadata.Rom.SHA512Key, newItem.GetStringFieldValue(Models.Metadata.Rom.SHA512Key)); } if (datItemFields.Contains(Models.Metadata.Rom.SpamSumKey)) { - if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SpamSumKey)) && !string.IsNullOrEmpty(newItem.GetFieldValue(Models.Metadata.Rom.SpamSumKey))) - rom.SetFieldValue(Models.Metadata.Rom.SpamSumKey, newItem.GetFieldValue(Models.Metadata.Rom.SpamSumKey)); + if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey))) + rom.SetFieldValue(Models.Metadata.Rom.SpamSumKey, newItem.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey)); } } } diff --git a/SabreTools.Filtering/Splitter.cs b/SabreTools.Filtering/Splitter.cs index 81b3887b..46db706d 100644 --- a/SabreTools.Filtering/Splitter.cs +++ b/SabreTools.Filtering/Splitter.cs @@ -246,8 +246,8 @@ namespace SabreTools.Filtering // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrEmpty(items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey))) - parent = items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey); + if (!string.IsNullOrEmpty(items[0].GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey))) + parent = items[0].GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey); // If the parent doesnt exist, we want to continue if (string.IsNullOrEmpty(parent)) @@ -290,7 +290,7 @@ namespace SabreTools.Filtering continue; // If the machine (is/is not) a device, we want to continue - if (dev ^ (datFile.Items[machine]![0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true)) + if (dev ^ (datFile.Items[machine]![0].GetFieldValue(DatItem.MachineKey)!.GetBoolFieldValue(Models.Metadata.Machine.IsDeviceKey) == true)) continue; // Get all device reference names from the current machine @@ -307,7 +307,7 @@ namespace SabreTools.Filtering .Select(i => i as Slot) .Where(s => s!.SlotOptionsSpecified) .SelectMany(s => s!.GetFieldValue(Models.Metadata.Slot.SlotOptionKey)!) - .Select(so => so.GetFieldValue(Models.Metadata.SlotOption.DevNameKey)) + .Select(so => so.GetStringFieldValue(Models.Metadata.SlotOption.DevNameKey)) .Distinct() .ToList(); @@ -381,7 +381,7 @@ namespace SabreTools.Filtering .Where(i => i is Slot) .Where(s => (s as Slot)!.SlotOptionsSpecified) .SelectMany(s => (s as Slot)!.GetFieldValue(Models.Metadata.Slot.SlotOptionKey)!) - .Select(o => o.GetFieldValue(Models.Metadata.SlotOption.DevNameKey)!)); + .Select(o => o.GetStringFieldValue(Models.Metadata.SlotOption.DevNameKey)!)); // Set new machine information and add to the current machine DatItem copyFrom = datFile.Items[machine]![0]; @@ -437,8 +437,8 @@ namespace SabreTools.Filtering // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrEmpty(items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey))) - parent = items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey); + if (!string.IsNullOrEmpty(items[0].GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey))) + parent = items[0].GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey); // If the parent doesnt exist, we want to continue if (string.IsNullOrEmpty(parent)) @@ -464,7 +464,7 @@ namespace SabreTools.Filtering // Now we want to get the parent romof tag and put it in each of the items items = datFile.Items[game]; - string? romof = datFile.Items[parent!]![0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey); + string? romof = datFile.Items[parent!]![0].GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey); foreach (DatItem item in items!) { item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.RomOfKey, romof); @@ -490,8 +490,8 @@ namespace SabreTools.Filtering // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrEmpty(items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey))) - parent = items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey); + if (!string.IsNullOrEmpty(items[0].GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey))) + parent = items[0].GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey); // If there is no parent, then we continue if (string.IsNullOrEmpty(parent)) @@ -516,7 +516,7 @@ namespace SabreTools.Filtering // Special disk handling if (item is Disk disk) { - string? mergeTag = disk.GetFieldValue(Models.Metadata.Disk.MergeKey); + string? mergeTag = disk.GetStringFieldValue(Models.Metadata.Disk.MergeKey); // If the merge tag exists and the parent already contains it, skip if (mergeTag != null && datFile.Items[parent!]! @@ -547,20 +547,20 @@ namespace SabreTools.Filtering else if (item is Rom rom) { // If the merge tag exists and the parent already contains it, skip - if (rom.GetFieldValue(Models.Metadata.Rom.MergeKey) != null && datFile.Items[parent!]! + if (rom.GetStringFieldValue(Models.Metadata.Rom.MergeKey) != null && datFile.Items[parent!]! .Where(i => i is Rom).Select(i => (i as Rom)!.GetName()) - .Contains(rom.GetFieldValue(Models.Metadata.Rom.MergeKey))) + .Contains(rom.GetStringFieldValue(Models.Metadata.Rom.MergeKey))) { continue; } // If the merge tag exists but the parent doesn't contain it, add to subfolder of parent - else if (rom.GetFieldValue(Models.Metadata.Rom.MergeKey) != null && !datFile.Items[parent!]! + else if (rom.GetStringFieldValue(Models.Metadata.Rom.MergeKey) != null && !datFile.Items[parent!]! .Where(i => i is Rom).Select(i => (i as Rom)!.GetName()) - .Contains(rom.GetFieldValue(Models.Metadata.Rom.MergeKey))) + .Contains(rom.GetStringFieldValue(Models.Metadata.Rom.MergeKey))) { if (subfolder) - rom.SetName($"{rom.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}\\{rom.GetName()}"); + rom.SetName($"{rom.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)}\\{rom.GetName()}"); rom.CopyMachineInformation(copyFrom); datFile.Items.Add(parent!, rom); @@ -570,7 +570,7 @@ namespace SabreTools.Filtering else if (!datFile.Items[parent!]!.Contains(item) || skipDedup) { if (subfolder) - rom.SetName($"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}\\{rom.GetName()}"); + rom.SetName($"{item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)}\\{rom.GetName()}"); rom.CopyMachineInformation(copyFrom); datFile.Items.Add(parent!, rom); @@ -581,7 +581,7 @@ namespace SabreTools.Filtering else if (!datFile.Items[parent!]!.Contains(item)) { if (subfolder) - item.SetName($"{item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}\\{item.GetName()}"); + item.SetName($"{item.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)}\\{item.GetName()}"); item.CopyMachineInformation(copyFrom); datFile.Items.Add(parent!, item); @@ -607,8 +607,8 @@ namespace SabreTools.Filtering continue; if (items.Count > 0 - && ((items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.IsBiosKey) == true) - || (items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true))) + && ((items[0].GetFieldValue(DatItem.MachineKey)!.GetBoolFieldValue(Models.Metadata.Machine.IsBiosKey) == true) + || (items[0].GetFieldValue(DatItem.MachineKey)!.GetBoolFieldValue(Models.Metadata.Machine.IsDeviceKey) == true))) { datFile.Items.Remove(game); } @@ -632,13 +632,13 @@ namespace SabreTools.Filtering continue; // If the game (is/is not) a bios, we want to continue - if (bios ^ (items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.IsBiosKey) == true)) + if (bios ^ (items[0].GetFieldValue(DatItem.MachineKey)!.GetBoolFieldValue(Models.Metadata.Machine.IsBiosKey) == true)) continue; // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrEmpty(items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey))) - parent = items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey); + if (!string.IsNullOrEmpty(items[0].GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey))) + parent = items[0].GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey); // If the parent doesnt exist, we want to continue if (string.IsNullOrEmpty(parent)) @@ -683,8 +683,8 @@ namespace SabreTools.Filtering // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrEmpty(items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey))) - parent = items[0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.CloneOfKey); + if (!string.IsNullOrEmpty(items[0].GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey))) + parent = items[0].GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.CloneOfKey); // If the parent doesnt exist, we want to continue if (string.IsNullOrEmpty(parent)) @@ -707,7 +707,7 @@ namespace SabreTools.Filtering // Now we want to get the parent romof tag and put it in each of the remaining items items = datFile.Items[game]; - string? romof = datFile.Items[parent!]![0].GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey); + string? romof = datFile.Items[parent!]![0].GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.RomOfKey); foreach (DatItem item in items!) { item.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.RomOfKey, romof); diff --git a/SabreTools.Test/DatFiles/SetterTests.cs b/SabreTools.Test/DatFiles/SetterTests.cs index 24e8a38b..429c5fa3 100644 --- a/SabreTools.Test/DatFiles/SetterTests.cs +++ b/SabreTools.Test/DatFiles/SetterTests.cs @@ -24,7 +24,7 @@ namespace SabreTools.Test.DatFiles var setter = new Setter(); setter.PopulateSetters("machine.name", "foo"); setter.SetFields(datItem.GetFieldValue(DatItem.MachineKey)); - Assert.Equal("foo", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("foo", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)); } /// diff --git a/SabreTools.Test/Filtering/CleaningTests.cs b/SabreTools.Test/Filtering/CleaningTests.cs index a1bd79df..6cb66af4 100644 --- a/SabreTools.Test/Filtering/CleaningTests.cs +++ b/SabreTools.Test/Filtering/CleaningTests.cs @@ -24,8 +24,8 @@ namespace SabreTools.Test.Filtering // Check the fields Assert.Equal("nam", datItem.GetName()); - Assert.Equal("nam-2", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); - Assert.Equal("nam-3", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)); + Assert.Equal("nam-2", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("nam-3", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)); } [Fact] @@ -45,8 +45,8 @@ namespace SabreTools.Test.Filtering // Check the fields Assert.Equal("name", datItem.GetName()); - Assert.Equal("'AB'", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); - Assert.Equal("ae-Zh", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)); + Assert.Equal("'AB'", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("ae-Zh", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)); } [Fact] @@ -66,8 +66,8 @@ namespace SabreTools.Test.Filtering // Check the fields Assert.Equal("name", datItem.GetName()); - Assert.Equal("!", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); - Assert.Equal("name-3", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)); + Assert.Equal("!", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("name-3", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)); } [Theory] @@ -92,8 +92,8 @@ namespace SabreTools.Test.Filtering // Check the fields Assert.Equal(expected, datItem.GetName()); - Assert.Equal("name-2", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); - Assert.Equal("name-3", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey)); + Assert.Equal("name-2", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("name-3", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)); } [Fact] @@ -107,7 +107,7 @@ namespace SabreTools.Test.Filtering // Check the fields Assert.Equal("name", datItem.GetName()); - Assert.Equal("name-2/name", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("name-2/name", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)); } /// diff --git a/SabreTools.Test/Filtering/RemoverTests.cs b/SabreTools.Test/Filtering/RemoverTests.cs index af562036..faaed8c7 100644 --- a/SabreTools.Test/Filtering/RemoverTests.cs +++ b/SabreTools.Test/Filtering/RemoverTests.cs @@ -24,7 +24,7 @@ namespace SabreTools.Test.Filtering var remover = new Remover(); remover.PopulateExclusions("Machine.Name"); remover.RemoveFields(datItem); - Assert.Null(datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Null(datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)); } /// diff --git a/SabreTools.Test/Filtering/ReplacerTests.cs b/SabreTools.Test/Filtering/ReplacerTests.cs index b9d6eb54..64af34de 100644 --- a/SabreTools.Test/Filtering/ReplacerTests.cs +++ b/SabreTools.Test/Filtering/ReplacerTests.cs @@ -32,7 +32,7 @@ namespace SabreTools.Test.Filtering repDatItem.GetFieldValue(DatItem.MachineKey)!.SetFieldValue(Models.Metadata.Machine.NameKey, "foo"); List fields = [Models.Metadata.Machine.NameKey]; Replacer.ReplaceFields(datItem.GetFieldValue(DatItem.MachineKey)!, repDatItem.GetFieldValue(DatItem.MachineKey)!, fields, false); - Assert.Equal("foo", datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("foo", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)); } /// diff --git a/SabreTools/Features/Sort.cs b/SabreTools/Features/Sort.cs index 2617b1b9..4b36b646 100644 --- a/SabreTools/Features/Sort.cs +++ b/SabreTools/Features/Sort.cs @@ -102,22 +102,22 @@ namespace SabreTools.Features datdata.Header.SetFieldValue(DatHeader.OutputDepotKey, Header.GetFieldValue(DatHeader.OutputDepotKey)?.Clone() as DepotInformation); // If we have overridden the header skipper, set it now - if (!string.IsNullOrEmpty(Header.GetFieldValue(Models.Metadata.Header.HeaderKey))) - datdata.Header.SetFieldValue(Models.Metadata.Header.HeaderKey, Header.GetFieldValue(Models.Metadata.Header.HeaderKey)); + if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey))) + datdata.Header.SetFieldValue(Models.Metadata.Header.HeaderKey, Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey)); // If we have the depot flag, respect it bool success; if (Header.GetFieldValue(DatHeader.InputDepotKey)?.IsActive ?? false) - success = Rebuilder.RebuildDepot(datdata, Inputs, Path.Combine(OutputDir!, datdata.Header.GetFieldValue(DatHeader.FileNameKey)!), date, delete, inverse, outputFormat); + success = Rebuilder.RebuildDepot(datdata, Inputs, Path.Combine(OutputDir!, datdata.Header.GetStringFieldValue(DatHeader.FileNameKey)!), date, delete, inverse, outputFormat); else - success = Rebuilder.RebuildGeneric(datdata, Inputs, Path.Combine(OutputDir!, datdata.Header.GetFieldValue(DatHeader.FileNameKey)!), quickScan, date, delete, inverse, outputFormat, asFiles); + success = Rebuilder.RebuildGeneric(datdata, Inputs, Path.Combine(OutputDir!, datdata.Header.GetStringFieldValue(DatHeader.FileNameKey)!), quickScan, date, delete, inverse, outputFormat, asFiles); // If we have a success and we're updating the DAT, write it out if (success && updateDat) { - datdata.Header.SetFieldValue(DatHeader.FileNameKey, $"fixDAT_{Header.GetFieldValue(DatHeader.FileNameKey)}"); - datdata.Header.SetFieldValue(Models.Metadata.Header.NameKey, $"fixDAT_{Header.GetFieldValue(Models.Metadata.Header.NameKey)}"); - datdata.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, $"fixDAT_{Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)}"); + datdata.Header.SetFieldValue(DatHeader.FileNameKey, $"fixDAT_{Header.GetStringFieldValue(DatHeader.FileNameKey)}"); + datdata.Header.SetFieldValue(Models.Metadata.Header.NameKey, $"fixDAT_{Header.GetStringFieldValue(Models.Metadata.Header.NameKey)}"); + datdata.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, $"fixDAT_{Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)}"); datdata.Items.ClearMarked(); Writer.Write(datdata, OutputDir); } @@ -141,8 +141,8 @@ namespace SabreTools.Features datdata.Header.SetFieldValue(DatHeader.OutputDepotKey, Header.GetFieldValue(DatHeader.OutputDepotKey)?.Clone() as DepotInformation); // If we have overridden the header skipper, set it now - if (!string.IsNullOrEmpty(Header.GetFieldValue(Models.Metadata.Header.HeaderKey))) - datdata.Header.SetFieldValue(Models.Metadata.Header.HeaderKey, Header.GetFieldValue(Models.Metadata.Header.HeaderKey)); + if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey))) + datdata.Header.SetFieldValue(Models.Metadata.Header.HeaderKey, Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey)); watch.Stop(); @@ -156,9 +156,9 @@ namespace SabreTools.Features // If we have a success and we're updating the DAT, write it out if (success && updateDat) { - datdata.Header.SetFieldValue(DatHeader.FileNameKey, $"fixDAT_{Header.GetFieldValue(DatHeader.FileNameKey)}"); - datdata.Header.SetFieldValue(Models.Metadata.Header.NameKey, $"fixDAT_{Header.GetFieldValue(Models.Metadata.Header.NameKey)}"); - datdata.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, $"fixDAT_{Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)}"); + datdata.Header.SetFieldValue(DatHeader.FileNameKey, $"fixDAT_{Header.GetStringFieldValue(DatHeader.FileNameKey)}"); + datdata.Header.SetFieldValue(Models.Metadata.Header.NameKey, $"fixDAT_{Header.GetStringFieldValue(Models.Metadata.Header.NameKey)}"); + datdata.Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, $"fixDAT_{Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)}"); datdata.Items.ClearMarked(); Writer.Write(datdata, OutputDir); } diff --git a/SabreTools/Features/Stats.cs b/SabreTools/Features/Stats.cs index 24dffdf5..595560b8 100644 --- a/SabreTools/Features/Stats.cs +++ b/SabreTools/Features/Stats.cs @@ -49,7 +49,7 @@ The stats that are outputted are as follows: if (!base.ProcessFeatures(features)) return false; - string filename = Header!.GetFieldValue(DatFiles.DatHeader.FileNameKey)!; + string filename = Header!.GetStringFieldValue(DatFiles.DatHeader.FileNameKey)!; if (Path.GetFileName(filename) != filename) { if (string.IsNullOrWhiteSpace(OutputDir)) diff --git a/SabreTools/Features/Update.cs b/SabreTools/Features/Update.cs index d696ae41..eaaba488 100644 --- a/SabreTools/Features/Update.cs +++ b/SabreTools/Features/Update.cs @@ -95,45 +95,45 @@ namespace SabreTools.Features var updateMode = GetUpdateMode(features); // Normalize the extensions - Header!.SetFieldValue(DatHeader.AddExtensionKey, (string.IsNullOrWhiteSpace(Header.GetFieldValue(DatHeader.AddExtensionKey)) || Header.GetFieldValue(DatHeader.AddExtensionKey)!.StartsWith(".") - ? Header.GetFieldValue(DatHeader.AddExtensionKey) - : $".{Header.GetFieldValue(DatHeader.AddExtensionKey)}")); - Header.SetFieldValue(DatHeader.ReplaceExtensionKey, (string.IsNullOrWhiteSpace(Header.GetFieldValue(DatHeader.ReplaceExtensionKey)) || Header.GetFieldValue(DatHeader.ReplaceExtensionKey)!.StartsWith(".") - ? Header.GetFieldValue(DatHeader.ReplaceExtensionKey) - : $".{Header.GetFieldValue(DatHeader.ReplaceExtensionKey)}")); + Header!.SetFieldValue(DatHeader.AddExtensionKey, (string.IsNullOrWhiteSpace(Header.GetStringFieldValue(DatHeader.AddExtensionKey)) || Header.GetStringFieldValue(DatHeader.AddExtensionKey)!.StartsWith(".") + ? Header.GetStringFieldValue(DatHeader.AddExtensionKey) + : $".{Header.GetStringFieldValue(DatHeader.AddExtensionKey)}")); + Header.SetFieldValue(DatHeader.ReplaceExtensionKey, (string.IsNullOrWhiteSpace(Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey)) || Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey)!.StartsWith(".") + ? Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey) + : $".{Header.GetStringFieldValue(DatHeader.ReplaceExtensionKey)}")); // If we're in a non-replacement special update mode and the names aren't set, set defaults if (updateMode != 0 && !(updateMode.HasFlag(UpdateMode.DiffAgainst) || updateMode.HasFlag(UpdateMode.BaseReplace))) { // Get the values that will be used - if (string.IsNullOrWhiteSpace(Header.GetFieldValue(Models.Metadata.Header.DateKey))) + if (string.IsNullOrWhiteSpace(Header.GetStringFieldValue(Models.Metadata.Header.DateKey))) Header.SetFieldValue(Models.Metadata.Header.DateKey, DateTime.Now.ToString("yyyy-MM-dd")); - if (string.IsNullOrWhiteSpace(Header.GetFieldValue(Models.Metadata.Header.NameKey))) + if (string.IsNullOrWhiteSpace(Header.GetStringFieldValue(Models.Metadata.Header.NameKey))) { Header.SetFieldValue(Models.Metadata.Header.NameKey, (updateMode != 0 ? "DiffDAT" : "MergeDAT") - + (Header.GetFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT" ? "-SuperDAT" : string.Empty) + + (Header.GetStringFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT" ? "-SuperDAT" : string.Empty) + (Cleaner!.DedupeRoms != DedupeType.None ? "-deduped" : string.Empty)); } - if (string.IsNullOrWhiteSpace(Header.GetFieldValue(Models.Metadata.Header.DescriptionKey))) + if (string.IsNullOrWhiteSpace(Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey))) { Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, (updateMode != 0 ? "DiffDAT" : "MergeDAT") - + (Header.GetFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT" ? "-SuperDAT" : string.Empty) + + (Header.GetStringFieldValue(Models.Metadata.Header.TypeKey) == "SuperDAT" ? "-SuperDAT" : string.Empty) + (Cleaner!.DedupeRoms != DedupeType.None ? " - deduped" : string.Empty)); if (!GetBoolean(features, NoAutomaticDateValue)) - Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, $"{Header.GetFieldValue(Models.Metadata.Header.DescriptionKey)} ({Header.GetFieldValue(Models.Metadata.Header.DateKey)})"); + Header.SetFieldValue(Models.Metadata.Header.DescriptionKey, $"{Header.GetStringFieldValue(Models.Metadata.Header.DescriptionKey)} ({Header.GetStringFieldValue(Models.Metadata.Header.DateKey)})"); } - if (string.IsNullOrWhiteSpace(Header.GetFieldValue(Models.Metadata.Header.CategoryKey)) && updateMode != 0) + if (string.IsNullOrWhiteSpace(Header.GetStringFieldValue(Models.Metadata.Header.CategoryKey)) && updateMode != 0) Header.SetFieldValue(Models.Metadata.Header.CategoryKey, "DiffDAT"); - if (string.IsNullOrWhiteSpace(Header.GetFieldValue(Models.Metadata.Header.AuthorKey))) + if (string.IsNullOrWhiteSpace(Header.GetStringFieldValue(Models.Metadata.Header.AuthorKey))) Header.SetFieldValue(Models.Metadata.Header.AuthorKey, $"SabreTools {Prepare.Version}"); - if (string.IsNullOrWhiteSpace(Header.GetFieldValue(Models.Metadata.Header.CommentKey))) + if (string.IsNullOrWhiteSpace(Header.GetStringFieldValue(Models.Metadata.Header.CommentKey))) Header.SetFieldValue(Models.Metadata.Header.CommentKey, $"Generated by SabreTools {Prepare.Version}"); } @@ -289,9 +289,9 @@ namespace SabreTools.Features string innerpost = $" ({j} - {inputPaths[j].GetNormalizedFileName(true)} Only)"; datHeaders[j] = userInputDat.Header; - datHeaders[j].SetFieldValue(DatHeader.FileNameKey, datHeaders[j].GetFieldValue(DatHeader.FileNameKey) + innerpost); - datHeaders[j].SetFieldValue(Models.Metadata.Header.NameKey, datHeaders[j].GetFieldValue(Models.Metadata.Header.NameKey) + innerpost); - datHeaders[j].SetFieldValue(Models.Metadata.Header.DescriptionKey, datHeaders[j].GetFieldValue(Models.Metadata.Header.DescriptionKey) + innerpost); + datHeaders[j].SetFieldValue(DatHeader.FileNameKey, datHeaders[j].GetStringFieldValue(DatHeader.FileNameKey) + innerpost); + datHeaders[j].SetFieldValue(Models.Metadata.Header.NameKey, datHeaders[j].GetStringFieldValue(Models.Metadata.Header.NameKey) + innerpost); + datHeaders[j].SetFieldValue(Models.Metadata.Header.DescriptionKey, datHeaders[j].GetStringFieldValue(Models.Metadata.Header.DescriptionKey) + innerpost); } #if NET40_OR_GREATER || NETCOREAPP }); @@ -409,7 +409,7 @@ namespace SabreTools.Features if (updateMode.HasFlag(UpdateMode.Merge)) { // If we're in SuperDAT mode, prefix all games with their respective DATs - if (string.Equals(userInputDat.Header.GetFieldValue(Models.Metadata.Header.TypeKey), "SuperDAT", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(userInputDat.Header.GetStringFieldValue(Models.Metadata.Header.TypeKey), "SuperDAT", StringComparison.OrdinalIgnoreCase)) DatFileTool.ApplySuperDAT(userInputDat, inputPaths); Writer.Write(userInputDat, OutputDir); diff --git a/SabreTools/Features/Verify.cs b/SabreTools/Features/Verify.cs index 65f5e4ba..c24c1770 100644 --- a/SabreTools/Features/Verify.cs +++ b/SabreTools/Features/Verify.cs @@ -75,8 +75,8 @@ namespace SabreTools.Features datdata.Header.SetFieldValue(DatHeader.InputDepotKey, Header!.GetFieldValue(DatHeader.InputDepotKey)?.Clone() as DepotInformation); // If we have overridden the header skipper, set it now - if (!string.IsNullOrEmpty(Header.GetFieldValue(Models.Metadata.Header.HeaderKey))) - datdata.Header.SetFieldValue(Models.Metadata.Header.HeaderKey, Header.GetFieldValue(Models.Metadata.Header.HeaderKey)); + if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey))) + datdata.Header.SetFieldValue(Models.Metadata.Header.HeaderKey, Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey)); // If we have the depot flag, respect it if (Header.GetFieldValue(DatHeader.InputDepotKey)?.IsActive ?? false) @@ -123,8 +123,8 @@ namespace SabreTools.Features datdata.Header.SetFieldValue(DatHeader.InputDepotKey, Header!.GetFieldValue(DatHeader.InputDepotKey)?.Clone() as DepotInformation); // If we have overridden the header skipper, set it now - if (!string.IsNullOrEmpty(Header.GetFieldValue(Models.Metadata.Header.HeaderKey))) - datdata.Header.SetFieldValue(Models.Metadata.Header.HeaderKey, Header.GetFieldValue(Models.Metadata.Header.HeaderKey)); + if (!string.IsNullOrEmpty(Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey))) + datdata.Header.SetFieldValue(Models.Metadata.Header.HeaderKey, Header.GetStringFieldValue(Models.Metadata.Header.HeaderKey)); watch.Stop();