diff --git a/RombaSharp/Features/BaseFeature.cs b/RombaSharp/Features/BaseFeature.cs index 6b8ec09a..8a58ae45 100644 --- a/RombaSharp/Features/BaseFeature.cs +++ b/RombaSharp/Features/BaseFeature.cs @@ -785,7 +785,7 @@ CREATE TABLE IF NOT EXISTS dat ( internal void AddDatToDatabase(Rom dat, SqliteConnection dbc) { // Get the dat full path - string fullpath = Path.Combine(_dats!, (dat.Machine.Name == "dats" ? string.Empty : dat.Machine.Name)!, dat.GetName()!); + string fullpath = Path.Combine(_dats!, (dat.Machine.GetFieldValue(SabreTools.Models.Metadata.Machine.NameKey) == "dats" ? string.Empty : dat.Machine.GetFieldValue(SabreTools.Models.Metadata.Machine.NameKey))!, dat.GetName()!); // Parse the Dat if possible logger.User($"Adding from '{dat.GetName()}'"); diff --git a/SabreTools.DatFiles/DatFile.cs b/SabreTools.DatFiles/DatFile.cs index 04265261..f876dd2b 100644 --- a/SabreTools.DatFiles/DatFile.cs +++ b/SabreTools.DatFiles/DatFile.cs @@ -366,7 +366,7 @@ namespace SabreTools.DatFiles { // Initialize strings string fix, - game = item.Machine.Name ?? string.Empty, + game = item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, name = item.GetName() ?? item.ItemType.ToString(), crc = string.Empty, md5 = string.Empty, @@ -415,9 +415,9 @@ namespace SabreTools.DatFiles .Replace("%game%", game) .Replace("%machine%", game) .Replace("%name%", name) - .Replace("%manufacturer%", item.Machine.Manufacturer ?? string.Empty) - .Replace("%publisher%", item.Machine.Publisher ?? string.Empty) - .Replace("%category%", item.Machine.Category ?? string.Empty) + .Replace("%manufacturer%", item.Machine.GetFieldValue(Models.Metadata.Machine.ManufacturerKey) ?? string.Empty) + .Replace("%publisher%", item.Machine.GetFieldValue(Models.Metadata.Machine.PublisherKey) ?? string.Empty) + .Replace("%category%", item.Machine.GetFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty) .Replace("%crc%", crc) .Replace("%md5%", md5) .Replace("%sha1%", sha1) @@ -447,7 +447,7 @@ namespace SabreTools.DatFiles Header.UseRomName = true; // Get the name to update - string? name = (Header.UseRomName ? item.GetName() : item.Machine.Name) ?? string.Empty; + string? name = (Header.UseRomName ? item.GetName() : item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)) ?? string.Empty; // Create the proper Prefix and Postfix string pre = CreatePrefixPostfix(item, true); @@ -504,14 +504,14 @@ namespace SabreTools.DatFiles name += Header.AddExtension; if (Header.UseRomName && Header.GameName) - name = Path.Combine(item.Machine.Name ?? string.Empty, name); + name = Path.Combine(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty, name); // Now assign back the formatted name name = $"{pre}{name}{post}"; if (Header.UseRomName) item.SetName(name); else if (item.Machine != null) - item.Machine.Name = name; + item.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, name); // Restore all relevant values if (forceRemoveQuotes) @@ -539,7 +539,7 @@ namespace SabreTools.DatFiles // If the Rom has "null" characteristics, ensure all fields if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null && rom.GetFieldValue(Models.Metadata.Rom.CRCKey) == "null") { - logger.Verbose($"Empty folder found: {datItem.Machine.Name}"); + logger.Verbose($"Empty folder found: {datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}"); rom.SetName(rom.GetName() == "null" ? "-" : rom.GetName()); rom.SetFieldValue(Models.Metadata.Rom.SizeKey, Constants.SizeZero); diff --git a/SabreTools.DatFiles/Formats/ArchiveDotOrg.Reader.cs b/SabreTools.DatFiles/Formats/ArchiveDotOrg.Reader.cs index b9940604..f43dcdee 100644 --- a/SabreTools.DatFiles/Formats/ArchiveDotOrg.Reader.cs +++ b/SabreTools.DatFiles/Formats/ArchiveDotOrg.Reader.cs @@ -59,7 +59,9 @@ namespace SabreTools.DatFiles.Formats filename = filename.Substring(machineName.Length + 1); } - var machine = new Machine { Name = machineName }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, machineName); + return (machine, filename); } @@ -97,10 +99,14 @@ namespace SabreTools.DatFiles.Formats return; (var machine, string? name) = DeriveMachine(file.Name); - machine ??= new Machine { Name = Path.GetFileNameWithoutExtension(file.Name) }; + if (machine == null) + { + machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, Path.GetFileNameWithoutExtension(file.Name)); + } - machine.Publisher = file.Publisher; - machine.Comment = file.Comment; + machine.SetFieldValue(Models.Metadata.Machine.CommentKey, file.Comment); + machine.SetFieldValue(Models.Metadata.Machine.PublisherKey, file.Publisher); var rom = new Rom() { diff --git a/SabreTools.DatFiles/Formats/AttractMode.Reader.cs b/SabreTools.DatFiles/Formats/AttractMode.Reader.cs index 414e1974..7f7444bc 100644 --- a/SabreTools.DatFiles/Formats/AttractMode.Reader.cs +++ b/SabreTools.DatFiles/Formats/AttractMode.Reader.cs @@ -65,23 +65,21 @@ namespace SabreTools.DatFiles.Formats if (row == null) return; - var machine = new Machine - { - Name = row.Name, - Description = row.Title, - CloneOf = row.CloneOf, - Year = row.Year, - Manufacturer = row.Manufacturer, - Category = row.Category, - Players = row.Players, - Rotation = row.Rotation, - Control = row.Control, - Status = row.Status, - DisplayCount = row.DisplayCount, - DisplayType = row.DisplayType, - Comment = row.Extra, - Buttons = row.Buttons - }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.ButtonsKey, row.Buttons); + machine.SetFieldValue(Models.Metadata.Machine.CategoryKey, row.Category); + machine.SetFieldValue(Models.Metadata.Machine.CloneOfKey, row.CloneOf); + machine.SetFieldValue(Models.Metadata.Machine.CommentKey, row.Extra); + machine.SetFieldValue(Models.Metadata.Machine.ControlKey, row.Control); + machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, row.Title); + machine.SetFieldValue(Models.Metadata.Machine.DisplayCountKey, row.DisplayCount); + machine.SetFieldValue(Models.Metadata.Machine.DisplayTypeKey, row.DisplayType); + machine.SetFieldValue(Models.Metadata.Machine.ManufacturerKey, row.Manufacturer); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, row.Name); + machine.SetFieldValue(Models.Metadata.Machine.PlayersKey, row.Players); + machine.SetFieldValue(Models.Metadata.Machine.RotationKey, row.Rotation); + machine.SetFieldValue(Models.Metadata.Machine.StatusKey, row.Status); + machine.SetFieldValue(Models.Metadata.Machine.YearKey, row.Year); var rom = new Rom() { diff --git a/SabreTools.DatFiles/Formats/AttractMode.Writer.cs b/SabreTools.DatFiles/Formats/AttractMode.Writer.cs index ce8fd6c5..886cb77c 100644 --- a/SabreTools.DatFiles/Formats/AttractMode.Writer.cs +++ b/SabreTools.DatFiles/Formats/AttractMode.Writer.cs @@ -124,23 +124,23 @@ namespace SabreTools.DatFiles.Formats { var row = new Models.AttractMode.Row { - Name = rom.Machine.Name, - Title = rom.Machine.Description, + Name = rom.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), + Title = rom.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey), Emulator = Header.FileName, - CloneOf = rom.Machine.CloneOf, - Year = rom.Machine.Year, - Manufacturer = rom.Machine.Manufacturer, - Category = rom.Machine.Category, - Players = rom.Machine.Players, - Rotation = rom.Machine.Rotation, - Control = rom.Machine.Control, - Status = rom.Machine.Status, - DisplayCount = rom.Machine.DisplayCount, - DisplayType = rom.Machine.DisplayType, + CloneOf = rom.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey), + Year = rom.Machine.GetFieldValue(Models.Metadata.Machine.YearKey), + Manufacturer = rom.Machine.GetFieldValue(Models.Metadata.Machine.ManufacturerKey), + Category = rom.Machine.GetFieldValue(Models.Metadata.Machine.CategoryKey), + Players = rom.Machine.GetFieldValue(Models.Metadata.Machine.PlayersKey), + Rotation = rom.Machine.GetFieldValue(Models.Metadata.Machine.RotationKey), + Control = rom.Machine.GetFieldValue(Models.Metadata.Machine.ControlKey), + Status = rom.Machine.GetFieldValue(Models.Metadata.Machine.StatusKey), + DisplayCount = rom.Machine.GetFieldValue(Models.Metadata.Machine.DisplayCountKey), + DisplayType = rom.Machine.GetFieldValue(Models.Metadata.Machine.DisplayTypeKey), AltRomname = rom.GetFieldValue(Models.Metadata.Rom.AltRomnameKey), AltTitle = rom.GetFieldValue(Models.Metadata.Rom.AltTitleKey), - Extra = rom.Machine.Comment, - Buttons = rom.Machine.Buttons, + Extra = rom.Machine.GetFieldValue(Models.Metadata.Machine.CommentKey), + Buttons = rom.Machine.GetFieldValue(Models.Metadata.Machine.ButtonsKey), // TODO: Add extended fields }; return row; diff --git a/SabreTools.DatFiles/Formats/ClrMamePro.Reader.cs b/SabreTools.DatFiles/Formats/ClrMamePro.Reader.cs index 4a05e326..9ee956bc 100644 --- a/SabreTools.DatFiles/Formats/ClrMamePro.Reader.cs +++ b/SabreTools.DatFiles/Formats/ClrMamePro.Reader.cs @@ -105,18 +105,17 @@ namespace SabreTools.DatFiles.Formats return; // Create the machine for copying information - var machine = new Machine - { - Name = game.Name, - Description = game.Description, - Year = game.Year, - Manufacturer = game.Manufacturer, - Category = game.Category, - CloneOf = game.CloneOf, - RomOf = game.RomOf, - SampleOf = game.SampleOf, - MachineType = (game is Models.ClrMamePro.Resource ? MachineType.Bios : MachineType.None), - }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.CategoryKey, game.Category); + machine.SetFieldValue(Models.Metadata.Machine.CloneOfKey, game.CloneOf); + machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, game.Description); + machine.SetFieldValue(Models.Metadata.Machine.ManufacturerKey, game.Manufacturer); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, game.Name); + machine.SetFieldValue(Models.Metadata.Machine.RomOfKey, game.RomOf); + machine.SetFieldValue(Models.Metadata.Machine.SampleOfKey, game.SampleOf); + machine.SetFieldValue(Models.Metadata.Machine.YearKey, game.Year); + if (game is Models.ClrMamePro.Resource) + machine.SetFieldValue(Models.Metadata.Machine.IsBiosKey, true); // Check if there are any items bool containsItems = false; diff --git a/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs b/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs index e9a2233f..b0d80c7d 100644 --- a/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs +++ b/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs @@ -232,14 +232,14 @@ namespace SabreTools.DatFiles.Formats // We normalize to all "game" var game = new Models.ClrMamePro.Game { - Name = machine?.Name, - Description = machine?.Description, - Year = machine?.Year, - Manufacturer = machine?.Manufacturer, - Category = machine?.Category, - CloneOf = machine?.CloneOf, - RomOf = machine?.RomOf, - SampleOf = machine?.SampleOf, + 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), }; // Create holders for all item types diff --git a/SabreTools.DatFiles/Formats/DosCenter.Reader.cs b/SabreTools.DatFiles/Formats/DosCenter.Reader.cs index bb8399b6..3ed2e4f7 100644 --- a/SabreTools.DatFiles/Formats/DosCenter.Reader.cs +++ b/SabreTools.DatFiles/Formats/DosCenter.Reader.cs @@ -96,7 +96,8 @@ namespace SabreTools.DatFiles.Formats if (machineName?.EndsWith(".zip") == true) machineName = System.IO.Path.GetFileNameWithoutExtension(machineName); - var machine = new Machine { Name = machineName }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, machineName); // Check if there are any items bool containsItems = false; diff --git a/SabreTools.DatFiles/Formats/DosCenter.Writer.cs b/SabreTools.DatFiles/Formats/DosCenter.Writer.cs index 7db2af33..46f80c85 100644 --- a/SabreTools.DatFiles/Formats/DosCenter.Writer.cs +++ b/SabreTools.DatFiles/Formats/DosCenter.Writer.cs @@ -134,7 +134,7 @@ namespace SabreTools.DatFiles.Formats // We re-add the missing parts of the game name var game = new Models.DosCenter.Game { - Name = $"\"{machine?.Name ?? string.Empty}.zip\"" + Name = $"\"{machine?.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty}.zip\"" }; // Create holders for all item types diff --git a/SabreTools.DatFiles/Formats/EverdriveSMDB.Reader.cs b/SabreTools.DatFiles/Formats/EverdriveSMDB.Reader.cs index fa427c23..b98bf1d0 100644 --- a/SabreTools.DatFiles/Formats/EverdriveSMDB.Reader.cs +++ b/SabreTools.DatFiles/Formats/EverdriveSMDB.Reader.cs @@ -58,7 +58,9 @@ namespace SabreTools.DatFiles.Formats filename = filename.Substring(machineName.Length + 1); } - var machine = new Machine { Name = machineName }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, machineName); + return (machine, filename); } @@ -96,7 +98,11 @@ namespace SabreTools.DatFiles.Formats return; (var machine, string? name) = DeriveMachine(row.Name); - machine ??= new Machine { Name = Path.GetFileNameWithoutExtension(row.Name) }; + if (machine == null) + { + machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, Path.GetFileNameWithoutExtension(row.Name)); + } var rom = new Rom() { diff --git a/SabreTools.DatFiles/Formats/EverdriveSMDB.Writer.cs b/SabreTools.DatFiles/Formats/EverdriveSMDB.Writer.cs index de516642..30d62e6b 100644 --- a/SabreTools.DatFiles/Formats/EverdriveSMDB.Writer.cs +++ b/SabreTools.DatFiles/Formats/EverdriveSMDB.Writer.cs @@ -139,7 +139,7 @@ namespace SabreTools.DatFiles.Formats var row = new Models.EverdriveSMDB.Row { SHA256 = rom.GetFieldValue(Models.Metadata.Rom.SHA256Key), - Name = $"{rom.Machine.Name ?? string.Empty}/{rom.GetName()}", + Name = $"{rom.Machine.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), diff --git a/SabreTools.DatFiles/Formats/Hashfile.Reader.cs b/SabreTools.DatFiles/Formats/Hashfile.Reader.cs index fd0d9b9e..165dc336 100644 --- a/SabreTools.DatFiles/Formats/Hashfile.Reader.cs +++ b/SabreTools.DatFiles/Formats/Hashfile.Reader.cs @@ -80,7 +80,9 @@ namespace SabreTools.DatFiles.Formats filename = filename.Substring(machineName.Length + 1); } - var machine = new Machine { Name = machineName }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, machineName); + return (machine, filename); } diff --git a/SabreTools.DatFiles/Formats/Hashfile.Writer.cs b/SabreTools.DatFiles/Formats/Hashfile.Writer.cs index 07061f7c..bae10f50 100644 --- a/SabreTools.DatFiles/Formats/Hashfile.Writer.cs +++ b/SabreTools.DatFiles/Formats/Hashfile.Writer.cs @@ -244,7 +244,7 @@ namespace SabreTools.DatFiles.Formats string name = string.Empty; if (Header.GameName && item.Machine != null) - name = $"{item.Machine.Name}{Path.DirectorySeparatorChar}"; + name = $"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { @@ -295,7 +295,7 @@ namespace SabreTools.DatFiles.Formats string name = string.Empty; if (Header.GameName && item.Machine != null) - name = $"{item.Machine.Name}{Path.DirectorySeparatorChar}"; + name = $"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { @@ -362,7 +362,7 @@ namespace SabreTools.DatFiles.Formats string name = string.Empty; if (Header.GameName && item.Machine != null) - name = $"{item.Machine.Name}{Path.DirectorySeparatorChar}"; + name = $"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { @@ -429,7 +429,7 @@ namespace SabreTools.DatFiles.Formats string name = string.Empty; if (Header.GameName && item.Machine != null) - name = $"{item.Machine.Name}{Path.DirectorySeparatorChar}"; + name = $"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { @@ -488,7 +488,7 @@ namespace SabreTools.DatFiles.Formats string name = string.Empty; if (Header.GameName && item.Machine != null) - name = $"{item.Machine.Name}{Path.DirectorySeparatorChar}"; + name = $"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { @@ -539,7 +539,7 @@ namespace SabreTools.DatFiles.Formats string name = string.Empty; if (Header.GameName && item.Machine != null) - name = $"{item.Machine.Name}{Path.DirectorySeparatorChar}"; + name = $"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { @@ -590,7 +590,7 @@ namespace SabreTools.DatFiles.Formats string name = string.Empty; if (Header.GameName && item.Machine != null) - name = $"{item.Machine.Name}{Path.DirectorySeparatorChar}"; + name = $"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}{Path.DirectorySeparatorChar}"; switch (item) { diff --git a/SabreTools.DatFiles/Formats/Listrom.Reader.cs b/SabreTools.DatFiles/Formats/Listrom.Reader.cs index f6c51736..fc521cf2 100644 --- a/SabreTools.DatFiles/Formats/Listrom.Reader.cs +++ b/SabreTools.DatFiles/Formats/Listrom.Reader.cs @@ -69,19 +69,14 @@ namespace SabreTools.DatFiles.Formats Machine machine; if (!string.IsNullOrEmpty(set.Device)) { - machine = new Machine - { - Name = set.Device, - MachineType = MachineType.Device, - }; + machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, set.Device); + machine.SetFieldValue(Models.Metadata.Machine.IsDeviceKey, true); } else if (!string.IsNullOrEmpty(set.Driver)) { - machine = new Machine - { - Name = set.Driver, - MachineType = MachineType.None, - }; + machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, set.Driver); } else { diff --git a/SabreTools.DatFiles/Formats/Listrom.Writer.cs b/SabreTools.DatFiles/Formats/Listrom.Writer.cs index 95b5f6a5..c029018f 100644 --- a/SabreTools.DatFiles/Formats/Listrom.Writer.cs +++ b/SabreTools.DatFiles/Formats/Listrom.Writer.cs @@ -116,13 +116,8 @@ namespace SabreTools.DatFiles.Formats var set = new Models.Listrom.Set { -#if NETFRAMEWORK - Driver = (items[0]!.Machine!.MachineType & MachineType.Device) != 0 ? items[0]!.Machine!.Name : null, - Device = (items[0]!.Machine!.MachineType & MachineType.Device) != 0 ? items[0]!.Machine!.Name : null, -#else - Driver = items[0]!.Machine!.MachineType.HasFlag(MachineType.Device) ? items[0]!.Machine!.Name : null, - Device = items[0]!.Machine!.MachineType.HasFlag(MachineType.Device) ? items[0]!.Machine!.Name : null, -#endif + Driver = items[0]!.Machine!.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true ? items[0]!.Machine!.GetFieldValue(Models.Metadata.Machine.NameKey) : null, + Device = items[0]!.Machine!.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true ? items[0]!.Machine!.GetFieldValue(Models.Metadata.Machine.NameKey) : null, }; // Loop through and convert the items to respective lists diff --git a/SabreTools.DatFiles/Formats/Listxml.Reader.cs b/SabreTools.DatFiles/Formats/Listxml.Reader.cs index 6ae1c5eb..81c3ce47 100644 --- a/SabreTools.DatFiles/Formats/Listxml.Reader.cs +++ b/SabreTools.DatFiles/Formats/Listxml.Reader.cs @@ -93,26 +93,20 @@ namespace SabreTools.DatFiles.Formats return; // Create the machine for copying information - var machine = new Machine - { - Name = game.Name, - SourceFile = game.SourceFile, - Runnable = game.Runnable.AsEnumValue(), - CloneOf = game.CloneOf, - RomOf = game.RomOf, - SampleOf = game.SampleOf, - Description = game.Description, - Year = game.Year, - Manufacturer = game.Manufacturer, - History = game.History, - }; - - if (game.IsBios.AsYesNo() == true) - machine.MachineType |= MachineType.Bios; - if (game.IsDevice.AsYesNo() == true) - machine.MachineType |= MachineType.Device; - if (game.IsMechanical.AsYesNo() == true) - machine.MachineType |= MachineType.Mechanical; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.CloneOfKey, game.CloneOf); + machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, game.Description); + machine.SetFieldValue(Models.Metadata.Machine.HistoryKey, game.History); + machine.SetFieldValue(Models.Metadata.Machine.IsBiosKey, game.IsBios.AsYesNo()); + machine.SetFieldValue(Models.Metadata.Machine.IsDeviceKey, game.IsDevice.AsYesNo()); + machine.SetFieldValue(Models.Metadata.Machine.IsMechanicalKey, game.IsMechanical.AsYesNo()); + machine.SetFieldValue(Models.Metadata.Machine.ManufacturerKey, game.Manufacturer); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, game.Name); + machine.SetFieldValue(Models.Metadata.Machine.RunnableKey, game.Runnable.AsEnumValue()); + machine.SetFieldValue(Models.Metadata.Machine.RomOfKey, game.RomOf); + machine.SetFieldValue(Models.Metadata.Machine.SampleOfKey, game.SampleOf); + machine.SetFieldValue(Models.Metadata.Machine.SourceFileKey, game.SourceFile); + machine.SetFieldValue(Models.Metadata.Machine.YearKey, game.Year); // Check if there are any items bool containsItems = false; diff --git a/SabreTools.DatFiles/Formats/Listxml.Writer.cs b/SabreTools.DatFiles/Formats/Listxml.Writer.cs index 496b8a52..3abcba7c 100644 --- a/SabreTools.DatFiles/Formats/Listxml.Writer.cs +++ b/SabreTools.DatFiles/Formats/Listxml.Writer.cs @@ -372,33 +372,24 @@ namespace SabreTools.DatFiles.Formats { var game = new Models.Listxml.Machine { - Name = machine.Name, - SourceFile = machine.SourceFile, - Runnable = machine.Runnable.AsStringValue(), - CloneOf = machine.CloneOf, - RomOf = machine.RomOf, - SampleOf = machine.SampleOf, - Description = machine.Description, - Year = machine.Year, - Manufacturer = machine.Manufacturer, - History = machine.History, + Name = machine.GetFieldValue(Models.Metadata.Machine.NameKey), + SourceFile = machine.GetFieldValue(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), }; -#if NETFRAMEWORK - if ((machine.MachineType & MachineType.Bios) != 0) + if (machine.GetFieldValue(Models.Metadata.Machine.IsBiosKey) == true) game.IsBios = "yes"; - if ((machine.MachineType & MachineType.Device) != 0) + if (machine.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true) game.IsDevice = "yes"; - if ((machine.MachineType & MachineType.Mechanical) != 0) + if (machine.GetFieldValue(Models.Metadata.Machine.IsMechanicalKey) == true) game.IsMechanical = "yes"; -#else - if (machine.MachineType.HasFlag(MachineType.Bios)) - game.IsBios = "yes"; - if (machine.MachineType.HasFlag(MachineType.Device)) - game.IsDevice = "yes"; - if (machine.MachineType.HasFlag(MachineType.Mechanical)) - game.IsMechanical = "yes"; -#endif return game; } diff --git a/SabreTools.DatFiles/Formats/Logiqx.Reader.cs b/SabreTools.DatFiles/Formats/Logiqx.Reader.cs index 4b155d17..1f9df85c 100644 --- a/SabreTools.DatFiles/Formats/Logiqx.Reader.cs +++ b/SabreTools.DatFiles/Formats/Logiqx.Reader.cs @@ -207,45 +207,38 @@ namespace SabreTools.DatFiles.Formats return; // Create the machine for copying information - var machine = new Machine - { - Name = game.Name, - SourceFile = game.SourceFile, - CloneOf = game.CloneOf, - RomOf = game.RomOf, - SampleOf = game.SampleOf, - Board = game.Board, - RebuildTo = game.RebuildTo, - NoIntroId = game.Id, - NoIntroCloneOfId = game.CloneOfId, - Runnable = game.Runnable.AsEnumValue(), - - Description = game.Description, - Year = game.Year, - Manufacturer = game.Manufacturer, - Publisher = game.Publisher, - }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.BoardKey, game.Board); + machine.SetFieldValue(Models.Metadata.Machine.CloneOfKey, game.CloneOf); + machine.SetFieldValue(Models.Metadata.Machine.CloneOfIdKey, game.CloneOfId); + machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, game.Description); + machine.SetFieldValue(Models.Metadata.Machine.IdKey, game.Id); + machine.SetFieldValue(Models.Metadata.Machine.IsBiosKey, game.IsBios.AsYesNo()); + machine.SetFieldValue(Models.Metadata.Machine.IsDeviceKey, game.IsDevice.AsYesNo()); + machine.SetFieldValue(Models.Metadata.Machine.IsMechanicalKey, game.IsMechanical.AsYesNo()); + machine.SetFieldValue(Models.Metadata.Machine.ManufacturerKey, game.Manufacturer); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, game.Name); + machine.SetFieldValue(Models.Metadata.Machine.PublisherKey, game.Publisher); + machine.SetFieldValue(Models.Metadata.Machine.RebuildToKey, game.RebuildTo); + machine.SetFieldValue(Models.Metadata.Machine.RomKey, game.RomOf); + machine.SetFieldValue(Models.Metadata.Machine.RunnableKey, game.Runnable.AsEnumValue()); + machine.SetFieldValue(Models.Metadata.Machine.SampleOfKey, game.SampleOf); + machine.SetFieldValue(Models.Metadata.Machine.SourceFileKey, game.SourceFile); + machine.SetFieldValue(Models.Metadata.Machine.YearKey, game.Year); if (!string.IsNullOrEmpty(dirname)) - machine.Name = $"{dirname}/{machine.Name}"; - - if (game.IsBios.AsYesNo() == true) - machine.MachineType |= MachineType.Bios; - if (game.IsDevice.AsYesNo() == true) - machine.MachineType |= MachineType.Device; - if (game.IsMechanical.AsYesNo() == true) - machine.MachineType |= MachineType.Mechanical; + machine.SetFieldValue(Models.Metadata.Machine.NameKey, $"{dirname}/{machine.GetFieldValue(Models.Metadata.Machine.NameKey)}"); #if NETFRAMEWORK if (game.Comment != null && game.Comment.Any()) - machine.Comment = string.Join(";", game.Comment); + machine.SetFieldValue(Models.Metadata.Machine.CommentKey, string.Join(";", game.Comment)); if (game.Category != null && game.Category.Any()) - machine.Category = string.Join(";", game.Category); + machine.SetFieldValue(Models.Metadata.Machine.CategoryKey, string.Join(";", game.Category)); #else if (game.Comment != null && game.Comment.Any()) - machine.Comment = string.Join(';', game.Comment); + machine.SetFieldValue(Models.Metadata.Machine.CommentKey, string.Join(';', game.Comment)); if (game.Category != null && game.Category.Any()) - machine.Category = string.Join(';', game.Category); + machine.SetFieldValue(Models.Metadata.Machine.CategoryKey, string.Join(';', game.Category)); #endif if (game.Trurip != null) @@ -253,18 +246,18 @@ namespace SabreTools.DatFiles.Formats var trurip = game.Trurip; machine.TitleID = trurip.TitleID; - machine.Publisher = trurip.Publisher; + machine.SetFieldValue(Models.Metadata.Machine.PublisherKey, trurip.Publisher); machine.Developer = trurip.Developer; - machine.Year = trurip.Year; + machine.SetFieldValue(Models.Metadata.Machine.YearKey, value: trurip.Year); machine.Genre = trurip.Genre; machine.Subgenre = trurip.Subgenre; machine.Ratings = trurip.Ratings; machine.Score = trurip.Score; - machine.Players = trurip.Players; + machine.SetFieldValue(Models.Metadata.Machine.PlayersKey, trurip.Players); machine.Enabled = trurip.Enabled; machine.Crc = trurip.CRC.AsYesNo(); - machine.SourceFile = trurip.Source; - machine.CloneOf = trurip.CloneOf; + machine.SetFieldValue(Models.Metadata.Machine.SourceFileKey, trurip.Source); + machine.SetFieldValue(Models.Metadata.Machine.CloneOfKey, trurip.CloneOf); machine.RelatedTo = trurip.RelatedTo; } diff --git a/SabreTools.DatFiles/Formats/Logiqx.Writer.cs b/SabreTools.DatFiles/Formats/Logiqx.Writer.cs index 6a4a3985..4af91db8 100644 --- a/SabreTools.DatFiles/Formats/Logiqx.Writer.cs +++ b/SabreTools.DatFiles/Formats/Logiqx.Writer.cs @@ -389,48 +389,39 @@ namespace SabreTools.DatFiles.Formats { Models.Logiqx.GameBase game = _deprecated ? new Models.Logiqx.Game() : new Models.Logiqx.Machine(); - game.Name = machine.Name; - game.SourceFile = machine.SourceFile; -#if NETFRAMEWORK - if ((machine.MachineType & MachineType.Bios) != 0) + 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.IsBios = "yes"; - if ((machine.MachineType & MachineType.Device) != 0) + if (machine.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true) game.IsDevice = "yes"; - if ((machine.MachineType & MachineType.Mechanical) != 0) + if (machine.GetFieldValue(Models.Metadata.Machine.IsMechanicalKey) == true) game.IsMechanical = "yes"; -#else - if (machine.MachineType.HasFlag(MachineType.Bios)) - game.IsBios = "yes"; - if (machine.MachineType.HasFlag(MachineType.Device)) - game.IsDevice = "yes"; - if (machine.MachineType.HasFlag(MachineType.Mechanical)) - game.IsMechanical = "yes"; -#endif - game.CloneOf = machine.CloneOf; - game.RomOf = machine.RomOf; - game.SampleOf = machine.SampleOf; - game.Board = machine.Board; - game.RebuildTo = machine.RebuildTo; - game.Id = machine.NoIntroId; - game.CloneOfId = machine.NoIntroCloneOfId; - game.Runnable = machine.Runnable.AsStringValue(); - if (machine.Comment != null) + 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.Runnable = machine.GetFieldValue(Models.Metadata.Machine.RunnableKey).AsStringValue(); + if (machine.GetFieldValue(Models.Metadata.Machine.CommentKey) != null) { - if (machine.Comment.Contains(';')) - game.Comment = machine.Comment.Split(';'); + if (machine.GetFieldValue(Models.Metadata.Machine.CommentKey)!.Contains(';')) + game.Comment = machine.GetFieldValue(Models.Metadata.Machine.CommentKey)!.Split(';'); else - game.Comment = [machine.Comment]; + game.Comment = [machine.GetFieldValue(Models.Metadata.Machine.CommentKey)!]; } - game.Description = machine.Description; - game.Year = machine.Year; - game.Manufacturer = machine.Manufacturer; - game.Publisher = machine.Publisher; - if (machine.Category != null) + 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) { - if (machine.Category.Contains(';')) - game.Category = machine.Category.Split(';'); + if (machine.GetFieldValue(Models.Metadata.Machine.CategoryKey)!.Contains(';')) + game.Category = machine.GetFieldValue(Models.Metadata.Machine.CategoryKey)!.Split(';'); else - game.Category = [machine.Category]; + game.Category = [machine.GetFieldValue(Models.Metadata.Machine.CategoryKey)!]; } game.Trurip = CreateTrurip(machine); @@ -459,18 +450,18 @@ namespace SabreTools.DatFiles.Formats var trurip = new Models.Logiqx.Trurip { TitleID = machine.TitleID, - Publisher = machine.Publisher, + Publisher = machine.GetFieldValue(Models.Metadata.Machine.PublisherKey), Developer = machine.Developer, - Year = machine.Year, + Year = machine.GetFieldValue(Models.Metadata.Machine.YearKey), Genre = machine.Genre, Subgenre = machine.Subgenre, Ratings = machine.Ratings, Score = machine.Score, - Players = machine.Players, + Players = machine.GetFieldValue(Models.Metadata.Machine.PlayersKey), Enabled = machine.Enabled, CRC = machine.Crc.FromYesNo(), - Source = machine.SourceFile, - CloneOf = machine.CloneOf, + Source = machine.GetFieldValue(Models.Metadata.Machine.SourceFileKey), + CloneOf = machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey), RelatedTo = machine.RelatedTo, }; diff --git a/SabreTools.DatFiles/Formats/Missfile.Writer.cs b/SabreTools.DatFiles/Formats/Missfile.Writer.cs index b6d2cf13..6c320980 100644 --- a/SabreTools.DatFiles/Formats/Missfile.Writer.cs +++ b/SabreTools.DatFiles/Formats/Missfile.Writer.cs @@ -63,7 +63,7 @@ namespace SabreTools.DatFiles.Formats WriteDatItem(sw, datItem, lastgame); // Set the new data to compare against - lastgame = datItem.Machine.Name; + lastgame = datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey); } } @@ -94,8 +94,8 @@ namespace SabreTools.DatFiles.Formats // Romba mode automatically uses item name if (Header.OutputDepot?.IsActive == true || Header.UseRomName) sw.Write($"{datItem.GetName() ?? string.Empty}\n"); - else if (!Header.UseRomName && datItem.Machine.Name != lastgame) - sw.Write($"{datItem.Machine.Name ?? string.Empty}\n"); + else if (!Header.UseRomName && datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) != lastgame) + sw.Write($"{datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) ?? string.Empty}\n"); sw.Flush(); } diff --git a/SabreTools.DatFiles/Formats/OfflineList.Reader.cs b/SabreTools.DatFiles/Formats/OfflineList.Reader.cs index 9c476622..79f74e1c 100644 --- a/SabreTools.DatFiles/Formats/OfflineList.Reader.cs +++ b/SabreTools.DatFiles/Formats/OfflineList.Reader.cs @@ -301,24 +301,22 @@ namespace SabreTools.DatFiles.Formats if (game == null) return; - var machine = new Machine - { - //ImageNumber = game.ImageNumber, // TODO: Add to internal model - //ReleaseNumber = game.ReleaseNumber, // TODO: Add to internal model - Name = game.Title, - //SaveType = game.SaveType, // TODO: Add to internal model - Publisher = game.Publisher, - //Location = game.Location, // TODO: Add to internal model - //SourceRom = game.SourceRom, // TODO: Add to internal model - //Language = game.Language, // TODO: Add to internal model - //Im1CRC = game.Im1CRC, // TODO: Add to internal model - //Im2CRC = game.Im2CRC, // TODO: Add to internal model - Comment = game.Comment, - }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.CommentKey, game.Comment); + machine.SetFieldValue(Models.Metadata.Machine.Im1CRCKey, game.Im1CRC); + machine.SetFieldValue(Models.Metadata.Machine.Im2CRCKey, game.Im2CRC); + machine.SetFieldValue(Models.Metadata.Machine.ImageNumberKey, game.ImageNumber); + machine.SetFieldValue(Models.Metadata.Machine.LanguageKey, game.Language); + machine.SetFieldValue(Models.Metadata.Machine.LocationKey, game.Location); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, game.Title); + machine.SetFieldValue(Models.Metadata.Machine.PublisherKey, game.Publisher); + machine.SetFieldValue(Models.Metadata.Machine.ReleaseNumberKey, game.ReleaseNumber); + machine.SetFieldValue(Models.Metadata.Machine.SaveTypeKey, game.SaveType); + machine.SetFieldValue(Models.Metadata.Machine.SourceRomKey, game.SourceRom); long? size = NumberHelper.ConvertToInt64(game.RomSize); if (game.DuplicateID != "0") - machine.CloneOf = game.DuplicateID; + machine.SetFieldValue(Models.Metadata.Machine.CloneOfKey, game.DuplicateID); // Check if there are any items bool containsItems = false; @@ -362,7 +360,7 @@ namespace SabreTools.DatFiles.Formats string name = string.Empty; if (!string.IsNullOrEmpty(releaseNumber) && releaseNumber != "0") name += $"{releaseNumber} - "; - name += $"{machine.Name}{crc.Extension}"; + name += $"{machine.GetFieldValue(Models.Metadata.Machine.NameKey)}{crc.Extension}"; var item = new Rom { diff --git a/SabreTools.DatFiles/Formats/OfflineList.Writer.cs b/SabreTools.DatFiles/Formats/OfflineList.Writer.cs index f4944c0c..3a967af5 100644 --- a/SabreTools.DatFiles/Formats/OfflineList.Writer.cs +++ b/SabreTools.DatFiles/Formats/OfflineList.Writer.cs @@ -361,21 +361,20 @@ namespace SabreTools.DatFiles.Formats /// private static Models.OfflineList.Game CreateGame(Machine machine) { - var game = new Models.OfflineList.Game { - //ImageNumber = machine.ImageNumber, // TODO: Add to internal model - //ReleaseNumber = machine.ReleaseNumber, // TODO: Add to internal model - Title = machine.Name, - //SaveType = machine.SaveType, // TODO: Add to internal model - Publisher = machine.Publisher, - //Location = machine.Location, // TODO: Add to internal model - //SourceRom = machine.SourceRom, // TODO: Add to internal model - //Language = machine.Language, // TODO: Add to internal model - //Im1CRC = machine.Im1CRC, // TODO: Add to internal model - //Im2CRC = machine.Im2CRC, // TODO: Add to internal model - Comment = machine.Comment, - DuplicateID = machine.CloneOf, + 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), }; return game; diff --git a/SabreTools.DatFiles/Formats/OpenMSX.Reader.cs b/SabreTools.DatFiles/Formats/OpenMSX.Reader.cs index adf25de6..582e08d0 100644 --- a/SabreTools.DatFiles/Formats/OpenMSX.Reader.cs +++ b/SabreTools.DatFiles/Formats/OpenMSX.Reader.cs @@ -84,15 +84,13 @@ namespace SabreTools.DatFiles.Formats return; // Create the machine for copying information - var machine = new Machine - { - Name = software.Title, - GenMSXID = software.GenMSXID, - System = software.System, - Manufacturer = software.Company, - Year = software.Year, - Country = software.Country, - }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.CountryKey, software.Country); + machine.SetFieldValue(Models.Metadata.Machine.GenMSXIDKey, software.GenMSXID); + machine.SetFieldValue(Models.Metadata.Machine.ManufacturerKey, software.Company); + machine.SetFieldValue(Models.Metadata.Machine.SystemKey, software.System); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, software.Title); + machine.SetFieldValue(Models.Metadata.Machine.YearKey, software.Year); // Check if there are any items bool containsItems = false; @@ -136,7 +134,7 @@ namespace SabreTools.DatFiles.Formats var rom = dump.Rom; - string name = $"{machine.Name}_{index++}{(!string.IsNullOrEmpty(rom.Remark) ? $" {rom.Remark}" : string.Empty)}"; + string name = $"{machine.GetFieldValue(Models.Metadata.Machine.NameKey)}_{index++}{(!string.IsNullOrEmpty(rom.Remark) ? $" {rom.Remark}" : string.Empty)}"; var item = new Rom { Source = new Source { Index = indexId, Name = filename }, diff --git a/SabreTools.DatFiles/Formats/OpenMSX.Writer.cs b/SabreTools.DatFiles/Formats/OpenMSX.Writer.cs index 48fc19f0..901759a3 100644 --- a/SabreTools.DatFiles/Formats/OpenMSX.Writer.cs +++ b/SabreTools.DatFiles/Formats/OpenMSX.Writer.cs @@ -106,12 +106,12 @@ namespace SabreTools.DatFiles.Formats var machine = items[0].Machine; var software = new Models.OpenMSX.Software { - Title = machine?.Name, - GenMSXID = machine?.GenMSXID, - System = machine?.System, - Company = machine?.Manufacturer, - Year = machine?.Year, - Country = machine?.Country, + 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), }; // Create holder for dumps diff --git a/SabreTools.DatFiles/Formats/RomCenter.Reader.cs b/SabreTools.DatFiles/Formats/RomCenter.Reader.cs index 78dee870..ce8ce44a 100644 --- a/SabreTools.DatFiles/Formats/RomCenter.Reader.cs +++ b/SabreTools.DatFiles/Formats/RomCenter.Reader.cs @@ -107,14 +107,12 @@ namespace SabreTools.DatFiles.Formats foreach (var rom in games.Rom) { - var machine = new Machine - { - Name = rom.GameName, - Description = rom.GameDescription, - CloneOf = rom.ParentName, - //CloneOfDescription = rom.ParentDescription, // TODO: Add to internal model or find mapping - RomOf = rom.RomOf, - }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.CloneOfKey, rom.ParentName); + //machine.SetFieldValue(Models.Metadata.Machine.CloneOfDescriptionKey, rom.ParentDescription); // TODO: Add to internal model or find mapping + machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, rom.GameDescription); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, rom.GameName); + machine.SetFieldValue(Models.Metadata.Machine.RomOfKey, rom.RomOf); var item = new Rom { diff --git a/SabreTools.DatFiles/Formats/RomCenter.Writer.cs b/SabreTools.DatFiles/Formats/RomCenter.Writer.cs index 4ce364c5..02c3e1e2 100644 --- a/SabreTools.DatFiles/Formats/RomCenter.Writer.cs +++ b/SabreTools.DatFiles/Formats/RomCenter.Writer.cs @@ -183,14 +183,14 @@ namespace SabreTools.DatFiles.Formats { var rom = new Models.RomCenter.Rom { - ParentName = item.Machine.CloneOf, - //ParentDescription = item.Machine.CloneOfDescription, // TODO: Add to internal model or find mapping - GameName = item.Machine.Name, - GameDescription = item.Machine.Description, + ParentName = item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey), + //ParentDescription = item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfDescription), // TODO: Add to internal model or find mapping + GameName = item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), + GameDescription = item.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey), RomName = item.GetName(), RomCRC = item.GetFieldValue(Models.Metadata.Rom.CRCKey), RomSize = item.GetFieldValue(Models.Metadata.Rom.SizeKey)?.ToString(), - RomOf = item.Machine.RomOf, + RomOf = item.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey), MergeName = item.GetFieldValue(Models.Metadata.Rom.MergeKey), }; return rom; diff --git a/SabreTools.DatFiles/Formats/SabreJSON.cs b/SabreTools.DatFiles/Formats/SabreJSON.cs index dd0fc6b0..bc488b81 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.Machine.Name?.ToLowerInvariant()) + if (lastgame != null && lastgame.ToLowerInvariant() != datItem.Machine.GetFieldValue(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.Machine.Name?.ToLowerInvariant()) + if (lastgame == null || lastgame.ToLowerInvariant() != datItem.Machine.GetFieldValue(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.Machine.Name; + lastgame = datItem.Machine.GetFieldValue(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.Machine.Name)) - datItem.Machine.Name = datItem.Machine.Name!.TrimStart(Path.DirectorySeparatorChar); + if (!string.IsNullOrEmpty(datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey))) + datItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.Machine.GetFieldValue(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 826d0489..02b99b11 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.Machine.Name?.ToLowerInvariant()) + if (lastgame != null && lastgame.ToLowerInvariant() != datItem.Machine.GetFieldValue(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.Machine.Name?.ToLowerInvariant()) + if (lastgame == null || lastgame.ToLowerInvariant() != datItem.Machine.GetFieldValue(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.Machine.Name; + lastgame = datItem.Machine.GetFieldValue(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.Machine!.Name = datItem.Machine.Name?.TrimStart(Path.DirectorySeparatorChar) ?? string.Empty; + datItem.Machine!.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)?.TrimStart(Path.DirectorySeparatorChar) ?? string.Empty); // Write the machine xtw.WriteStartElement("directory"); diff --git a/SabreTools.DatFiles/Formats/SeparatedValue.Reader.cs b/SabreTools.DatFiles/Formats/SeparatedValue.Reader.cs index 71cfaed2..113bf663 100644 --- a/SabreTools.DatFiles/Formats/SeparatedValue.Reader.cs +++ b/SabreTools.DatFiles/Formats/SeparatedValue.Reader.cs @@ -71,11 +71,9 @@ namespace SabreTools.DatFiles.Formats Header.Description ??= row.Description; // Read Machine values - var machine = new Machine - { - Name = row.GameName, - Description = row.GameDescription, - }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, row.GameDescription); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, row.GameName); // Read item values DatItem? item = null; diff --git a/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs b/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs index d935bb1c..931fea5b 100644 --- a/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs +++ b/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs @@ -162,8 +162,8 @@ namespace SabreTools.DatFiles.Formats FileName = Header.FileName, InternalName = Header.Name, Description = Header.Description, - GameName = disk.Machine.Name, - GameDescription = disk.Machine.Description, + GameName = disk.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), + GameDescription = disk.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey), Type = disk.GetFieldValue(Models.Metadata.Disk.TypeKey).AsStringValue(), RomName = string.Empty, DiskName = disk.GetName(), @@ -190,8 +190,8 @@ namespace SabreTools.DatFiles.Formats FileName = Header.FileName, InternalName = Header.Name, Description = Header.Description, - GameName = media.Machine.Name, - GameDescription = media.Machine.Description, + GameName = media.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), + GameDescription = media.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey), Type = media.ItemType.AsStringValue(), RomName = string.Empty, DiskName = media.GetName(), @@ -218,8 +218,8 @@ namespace SabreTools.DatFiles.Formats FileName = Header.FileName, InternalName = Header.Name, Description = Header.Description, - GameName = rom.Machine.Name, - GameDescription = rom.Machine.Description, + GameName = rom.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), + GameDescription = rom.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey), Type = rom.ItemType.AsStringValue(), RomName = rom.GetName(), DiskName = string.Empty, diff --git a/SabreTools.DatFiles/Formats/SoftwareList.Reader.cs b/SabreTools.DatFiles/Formats/SoftwareList.Reader.cs index 16fd5034..e644bb42 100644 --- a/SabreTools.DatFiles/Formats/SoftwareList.Reader.cs +++ b/SabreTools.DatFiles/Formats/SoftwareList.Reader.cs @@ -90,16 +90,14 @@ namespace SabreTools.DatFiles.Formats return; // Create the machine for copying information - var machine = new Machine - { - Name = software.Name, - CloneOf = software.CloneOf, - Supported = software.Supported.AsEnumValue(), - Description = software.Description, - Year = software.Year, - Publisher = software.Publisher, - Comment = software.Notes, - }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.CloneOfKey, software.CloneOf); + machine.SetFieldValue(Models.Metadata.Machine.CommentKey, software.Notes); + machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, software.Description); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, software.Name); + machine.SetFieldValue(Models.Metadata.Machine.PublisherKey, software.Publisher); + machine.SetFieldValue(Models.Metadata.Machine.SupportedKey, software.Supported.AsEnumValue()); + machine.SetFieldValue(Models.Metadata.Machine.YearKey, software.Year); // Add all Info objects foreach (var info in software.Info ?? []) diff --git a/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs b/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs index 2312d6c3..1fb1c739 100644 --- a/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs +++ b/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs @@ -259,13 +259,13 @@ namespace SabreTools.DatFiles.Formats { var software = new Models.SoftwareList.Software { - Name = machine.Name, - CloneOf = machine.CloneOf, - Supported = machine.Supported.AsStringValue(useSecond: true), - Description = machine.Description, - Year = machine.Year, - Publisher = machine.Publisher, - Notes = machine.Comment, + Name = machine.GetFieldValue(Models.Metadata.Machine.NameKey), + CloneOf = machine.GetFieldValue(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), }; return software; diff --git a/SabreTools.DatFiles/ItemDictionary.cs b/SabreTools.DatFiles/ItemDictionary.cs index 8bcb097a..d47c71da 100644 --- a/SabreTools.DatFiles/ItemDictionary.cs +++ b/SabreTools.DatFiles/ItemDictionary.cs @@ -400,7 +400,7 @@ namespace SabreTools.DatFiles // Filter the list return fi.Where(i => i != null) .Where(i => !i.Remove) - .Where(i => i.Machine.Name != null) + .Where(i => i.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) != null) .ToConcurrentList(); } } diff --git a/SabreTools.DatFiles/ItemDictionaryDB.cs b/SabreTools.DatFiles/ItemDictionaryDB.cs index 8cb98f6d..d95c2b69 100644 --- a/SabreTools.DatFiles/ItemDictionaryDB.cs +++ b/SabreTools.DatFiles/ItemDictionaryDB.cs @@ -531,7 +531,7 @@ namespace SabreTools.DatFiles // Filter the list return fi.Where(i => i != null) .Where(i => !i.Remove) - .Where(i => i.Machine.Name != null) + .Where(i => i.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) != null) .ToConcurrentList(); } } diff --git a/SabreTools.DatItems/DatItem.cs b/SabreTools.DatItems/DatItem.cs index ddfbcd39..2e2daf35 100644 --- a/SabreTools.DatItems/DatItem.cs +++ b/SabreTools.DatItems/DatItem.cs @@ -387,7 +387,7 @@ namespace SabreTools.DatItems if (lastItem.DupeType.HasFlag(DupeType.External) || lastItem?.Source?.Index != Source?.Index) #endif { - if (lastItem?.Machine.Name == Machine?.Name && lastItem?.GetName() == GetName()) + if (lastItem?.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) == Machine?.GetFieldValue(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName()) output = DupeType.External | DupeType.All; else output = DupeType.External | DupeType.Hash; @@ -396,7 +396,7 @@ namespace SabreTools.DatItems // Otherwise, it's considered an internal dupe else { - if (lastItem?.Machine.Name == Machine?.Name && lastItem?.GetName() == GetName()) + if (lastItem?.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) == Machine?.GetFieldValue(Models.Metadata.Machine.NameKey) && lastItem?.GetName() == GetName()) output = DupeType.Internal | DupeType.All; else output = DupeType.Internal | DupeType.Hash; @@ -476,9 +476,9 @@ namespace SabreTools.DatItems key = (norename ? string.Empty : Source?.Index.ToString().PadLeft(10, '0') + "-") - + (string.IsNullOrEmpty(Machine?.Name) + + (string.IsNullOrEmpty(Machine?.GetFieldValue(Models.Metadata.Machine.NameKey)) ? "Default" - : Machine!.Name!); + : Machine!.GetFieldValue(Models.Metadata.Machine.NameKey)!); if (lower) key = key.ToLowerInvariant(); @@ -614,7 +614,8 @@ namespace SabreTools.DatItems } // If the current machine is a child of the new machine, use the new machine instead - if (saveditem.Machine.CloneOf == file.Machine.Name || saveditem.Machine.RomOf == file.Machine.Name) + if (saveditem.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey) == file.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) + || saveditem.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey) == file.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)) { saveditem.CopyMachineInformation(file); saveditem.SetName(file.GetName()); @@ -765,7 +766,7 @@ namespace SabreTools.DatItems NaturalComparer nc = new(); // If machine names match, more refinement is needed - if (x.Machine.Name == y.Machine.Name) + if (x.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) == y.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)) { // If item types match, more refinement is needed if (x.ItemType == y.ItemType) @@ -781,7 +782,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.Machine.Name, y.Machine.Name) : (x.Source?.Index - y.Source?.Index) ?? 0); + return (norename ? nc.Compare(x.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), y.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)) : (x.Source?.Index - y.Source?.Index) ?? 0); // Otherwise, just sort based on item names return nc.Compare(xName, yName); @@ -796,7 +797,7 @@ namespace SabreTools.DatItems } // Otherwise, just sort based on machine name - return nc.Compare(x.Machine.Name, y.Machine.Name); + return nc.Compare(x.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), y.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); } catch { diff --git a/SabreTools.DatItems/Formats/Archive.cs b/SabreTools.DatItems/Formats/Archive.cs index 646e2b5b..824eafcc 100644 --- a/SabreTools.DatItems/Formats/Archive.cs +++ b/SabreTools.DatItems/Formats/Archive.cs @@ -103,6 +103,17 @@ namespace SabreTools.DatItems.Formats ItemType = ItemType.Archive; } + /// + /// Create an Archive object from the internal model + /// + public Archive(Models.Metadata.Archive? item) + { + _internal = item ?? []; + Machine = new Machine(); + + ItemType = ItemType.Archive; + } + #endregion #region Cloning Methods diff --git a/SabreTools.DatItems/Formats/Disk.cs b/SabreTools.DatItems/Formats/Disk.cs index 528e3533..1ecf59ba 100644 --- a/SabreTools.DatItems/Formats/Disk.cs +++ b/SabreTools.DatItems/Formats/Disk.cs @@ -120,7 +120,7 @@ namespace SabreTools.DatItems.Formats return new BaseFile() { Filename = this.GetName(), - Parent = this.Machine.Name, + Parent = this.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), MD5 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Disk.MD5Key)), SHA1 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Disk.SHA1Key)), }; diff --git a/SabreTools.DatItems/Formats/File.cs b/SabreTools.DatItems/Formats/File.cs index 94dbbe51..ebe2b28b 100644 --- a/SabreTools.DatItems/Formats/File.cs +++ b/SabreTools.DatItems/Formats/File.cs @@ -91,7 +91,7 @@ namespace SabreTools.DatItems.Formats [JsonProperty("format", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("format")] public string? Format { get; set; } - #endregion // Fields + #endregion #region Constructors @@ -152,7 +152,7 @@ namespace SabreTools.DatItems.Formats { return new BaseFile() { - Parent = this.Machine.Name, + Parent = this.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), CRC = this._crc, MD5 = this._md5, SHA1 = this._sha1, diff --git a/SabreTools.DatItems/Formats/Media.cs b/SabreTools.DatItems/Formats/Media.cs index a1f20a4d..e767248d 100644 --- a/SabreTools.DatItems/Formats/Media.cs +++ b/SabreTools.DatItems/Formats/Media.cs @@ -96,7 +96,7 @@ namespace SabreTools.DatItems.Formats return new BaseFile() { Filename = this.GetName(), - Parent = this.Machine.Name, + Parent = this.Machine.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)), diff --git a/SabreTools.DatItems/Formats/Rom.cs b/SabreTools.DatItems/Formats/Rom.cs index b3723bb1..2fecaea0 100644 --- a/SabreTools.DatItems/Formats/Rom.cs +++ b/SabreTools.DatItems/Formats/Rom.cs @@ -60,7 +60,7 @@ namespace SabreTools.DatItems.Formats } } - #endregion // Fields + #endregion #region Accessors @@ -102,11 +102,9 @@ namespace SabreTools.DatItems.Formats SetFieldValue(Models.Metadata.Rom.SizeKey, null); SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.None); - Machine = new Machine - { - Name = machineName, - Description = machineName, - }; + Machine = new Machine(); + Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, machineName); + Machine.SetFieldValue(Models.Metadata.Machine.NameKey, machineName); } /// @@ -174,7 +172,7 @@ namespace SabreTools.DatItems.Formats return new BaseFile() { Filename = GetName(), - Parent = this.Machine.Name, + Parent = this.Machine.GetFieldValue(Models.Metadata.Machine.NameKey), Date = GetFieldValue(Models.Metadata.Rom.DateKey), Size = GetFieldValue(Models.Metadata.Rom.SizeKey), CRC = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Rom.CRCKey)), diff --git a/SabreTools.DatItems/Machine.cs b/SabreTools.DatItems/Machine.cs index befc2b67..59ec292c 100644 --- a/SabreTools.DatItems/Machine.cs +++ b/SabreTools.DatItems/Machine.cs @@ -1,10 +1,7 @@ using System; -using System.Linq; using System.Xml.Serialization; using Newtonsoft.Json; -using Newtonsoft.Json.Converters; using SabreTools.Core; -using SabreTools.Core.Tools; using SabreTools.Filter; namespace SabreTools.DatItems @@ -17,340 +14,6 @@ namespace SabreTools.DatItems { #region Fields - #region Common - - /// - /// Name of the machine - /// - [JsonProperty("name", DefaultValueHandling = DefaultValueHandling.Include)] - [XmlElement("name")] - public string? Name - { - get => _machine.ReadString(Models.Metadata.Machine.NameKey); - set => _machine[Models.Metadata.Machine.NameKey] = value; - } - - /// - /// Additional notes - /// - /// Known as "Extra" in AttractMode - [JsonProperty("comment", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("comment")] - public string? Comment - { - get => _machine.ReadString(Models.Metadata.Machine.CommentKey); - set => _machine[Models.Metadata.Machine.CommentKey] = value; - } - - /// - /// Extended description - /// - [JsonProperty("description", DefaultValueHandling = DefaultValueHandling.Include)] - [XmlElement("description")] - public string? Description - { - get => _machine.ReadString(Models.Metadata.Machine.DescriptionKey); - set => _machine[Models.Metadata.Machine.DescriptionKey] = value; - } - - /// - /// Year(s) of release/manufacture - /// - [JsonProperty("year", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("year")] - public string? Year - { - get => _machine.ReadString(Models.Metadata.Machine.YearKey); - set => _machine[Models.Metadata.Machine.YearKey] = value; - } - - /// - /// Manufacturer, if available - /// - [JsonProperty("manufacturer", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("manufacturer")] - public string? Manufacturer - { - get => _machine.ReadString(Models.Metadata.Machine.ManufacturerKey); - set => _machine[Models.Metadata.Machine.ManufacturerKey] = value; - } - - /// - /// Publisher, if available - /// - [JsonProperty("publisher", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("publisher")] - public string? Publisher - { - get => _machine.ReadString(Models.Metadata.Machine.PublisherKey); - set => _machine[Models.Metadata.Machine.PublisherKey] = value; - } - - /// - /// Category, if available - /// - [JsonProperty("category", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("category")] - public string? Category - { - get => _machine.ReadString(Models.Metadata.Machine.CategoryKey); - set => _machine[Models.Metadata.Machine.CategoryKey] = value; - } - - /// - /// fomof parent - /// - [JsonProperty("romof", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("romof")] - public string? RomOf - { - get => _machine.ReadString(Models.Metadata.Machine.RomOfKey); - set => _machine[Models.Metadata.Machine.RomOfKey] = value; - } - - /// - /// cloneof parent - /// - [JsonProperty("cloneof", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("cloneof")] - public string? CloneOf - { - get => _machine.ReadString(Models.Metadata.Machine.CloneOfKey); - set => _machine[Models.Metadata.Machine.CloneOfKey] = value; - } - - /// - /// sampleof parent - /// - [JsonProperty("sampleof", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("sampleof")] - public string? SampleOf - { - get => _machine.ReadString(Models.Metadata.Machine.SampleOfKey); - set => _machine[Models.Metadata.Machine.SampleOfKey] = value; - } - - /// - /// Type of the machine - /// - [JsonProperty("type", DefaultValueHandling = DefaultValueHandling.Ignore)] - [JsonConverter(typeof(StringEnumConverter))] - [XmlElement("type")] - public MachineType MachineType - { - get - { - bool? isBios = _machine.ReadBool(Models.Metadata.Machine.IsBiosKey); - bool? isDevice = _machine.ReadBool(Models.Metadata.Machine.IsDeviceKey); - bool? isMechanical = _machine.ReadBool(Models.Metadata.Machine.IsMechanicalKey); - - MachineType machineType = MachineType.None; - if (isBios == true) - machineType |= MachineType.Bios; - if (isDevice == true) - machineType |= MachineType.Device; - if (isMechanical == true) - machineType |= MachineType.Mechanical; - - return machineType; - } - set - { -#if NETFRAMEWORK - if ((value & MachineType.Bios) != 0) - _machine[Models.Metadata.Machine.IsBiosKey] = "yes"; - if ((value & MachineType.Device) != 0) - _machine[Models.Metadata.Machine.IsDeviceKey] = "yes"; - if ((value & MachineType.Mechanical) != 0) - _machine[Models.Metadata.Machine.IsMechanicalKey] = "yes"; -#else - if (value.HasFlag(MachineType.Bios)) - _machine[Models.Metadata.Machine.IsBiosKey] = "yes"; - if (value.HasFlag(MachineType.Device)) - _machine[Models.Metadata.Machine.IsDeviceKey] = "yes"; - if (value.HasFlag(MachineType.Mechanical)) - _machine[Models.Metadata.Machine.IsMechanicalKey] = "yes"; -#endif - } - } - - [JsonIgnore] - public bool MachineTypeSpecified { get { return MachineType != 0x0 && MachineType != MachineType.None; } } - - #endregion - - #region AttractMode - - /// - /// Player count - /// - /// Also in Logiqx EmuArc - [JsonProperty("players", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("players")] - public string? Players - { - get => _machine.ReadString(Models.Metadata.Machine.PlayersKey); - set => _machine[Models.Metadata.Machine.PlayersKey] = value; - } - - /// - /// Screen rotation - /// - [JsonProperty("rotation", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("rotation")] - public string? Rotation - { - get => _machine.ReadString(Models.Metadata.Machine.RotationKey); - set => _machine[Models.Metadata.Machine.RotationKey] = value; - } - - /// - /// Control method - /// - [JsonProperty("control", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("control")] - public string? Control - { - get => _machine.ReadString(Models.Metadata.Machine.ControlKey); - set => _machine[Models.Metadata.Machine.ControlKey] = value; - } - - /// - /// Support status - /// - [JsonProperty("status", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("status")] - public string? Status - { - get => _machine.ReadString(Models.Metadata.Machine.StatusKey); - set => _machine[Models.Metadata.Machine.StatusKey] = value; - } - - /// - /// Display count - /// - [JsonProperty("displaycount", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("displaycount")] - public string? DisplayCount - { - get => _machine.ReadString(Models.Metadata.Machine.DisplayCountKey); - set => _machine[Models.Metadata.Machine.DisplayCountKey] = value; - } - - /// - /// Display type - /// - [JsonProperty("displaytype", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("displaytype")] - public string? DisplayType - { - get => _machine.ReadString(Models.Metadata.Machine.DisplayTypeKey); - set => _machine[Models.Metadata.Machine.DisplayTypeKey] = value; - } - - /// - /// Number of input buttons - /// - [JsonProperty("buttons", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("buttons")] - public string? Buttons - { - get => _machine.ReadString(Models.Metadata.Machine.ButtonsKey); - set => _machine[Models.Metadata.Machine.ButtonsKey] = value; - } - - #endregion - - #region ListXML - - /// - /// History.dat entry for the machine - /// - [JsonProperty("history", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("history")] - public string? History - { - get => _machine.ReadString(Models.Metadata.Machine.HistoryKey); - set => _machine[Models.Metadata.Machine.HistoryKey] = value; - } - - /// - /// Emulator source file related to the machine - /// - /// Also in Logiqx - [JsonProperty("sourcefile", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("sourcefile")] - public string? SourceFile - { - get => _machine.ReadString(Models.Metadata.Machine.SourceFileKey); - set => _machine[Models.Metadata.Machine.SourceFileKey] = value; - } - - /// - /// Machine runnable status - /// - /// Also in Logiqx - [JsonProperty("runnable", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("runnable")] - public Runnable Runnable - { - get => _machine.ReadString(Models.Metadata.Machine.RunnableKey).AsEnumValue(); - set => _machine[Models.Metadata.Machine.RunnableKey] = value.AsStringValue(); - } - - [JsonIgnore] - public bool RunnableSpecified { get { return Runnable != Runnable.NULL; } } - - #endregion - - #region Logiqx - - /// - /// Machine board name - /// - [JsonProperty("board", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("board")] - public string? Board - { - get => _machine.ReadString(Models.Metadata.Machine.BoardKey); - set => _machine[Models.Metadata.Machine.BoardKey] = value; - } - - /// - /// Rebuild location if different than machine name - /// - [JsonProperty("rebuildto", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("rebuildto")] - public string? RebuildTo - { - get => _machine.ReadString(Models.Metadata.Machine.RebuildToKey); - set => _machine[Models.Metadata.Machine.RebuildToKey] = value; - } - - /// - /// No-Intro ID for the game - /// - [JsonProperty("nointroid", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("nointroid")] - public string? NoIntroId - { - get => _machine.ReadString(Models.Metadata.Machine.IdKey); - set => _machine[Models.Metadata.Machine.IdKey] = value; - } - - /// - /// No-Intro ID for the game - /// - [JsonProperty("nointrocloneofid", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("nointrocloneofid")] - public string? NoIntroCloneOfId - { - get => _machine.ReadString(Models.Metadata.Machine.CloneOfIdKey); - set => _machine[Models.Metadata.Machine.CloneOfIdKey] = value; - } - - #endregion - // TODO: Should this be a separate object for TruRip? #region Logiqx EmuArc @@ -422,68 +85,51 @@ namespace SabreTools.DatItems #endregion - #region OpenMSX - - /// - /// Generation MSX ID - /// - [JsonProperty("genmsxid", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("genmsxid")] - public string? GenMSXID - { - get => _machine.ReadString(Models.Metadata.Machine.GenMSXIDKey); - set => _machine[Models.Metadata.Machine.GenMSXIDKey] = value; - } - - /// - /// MSX System - /// - [JsonProperty("system", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("system")] - public string? System - { - get => _machine.ReadString(Models.Metadata.Machine.SystemKey); - set => _machine[Models.Metadata.Machine.SystemKey] = value; - } - - /// - /// Machine country of origin - /// - [JsonProperty("country", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("country")] - public string? Country - { - get => _machine.ReadString(Models.Metadata.Machine.CountryKey); - set => _machine[Models.Metadata.Machine.CountryKey] = value; - } - - #endregion - - #region SoftwareList - - /// - /// Support status - /// - [JsonProperty("supported", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("supported")] - public Supported Supported - { - get => _machine.ReadString(Models.Metadata.Machine.SupportedKey).AsEnumValue(); - set => _machine[Models.Metadata.Machine.SupportedKey] = value.AsStringValue(useSecond: true); - } - - [JsonIgnore] - public bool SupportedSpecified { get { return Supported != Supported.NULL; } } - - #endregion - /// /// Internal Machine model /// [JsonIgnore] private Models.Metadata.Machine _machine = []; - #endregion // Fields + #endregion + + #region Accessors + + /// + /// Get the value from a field based on the type provided + /// + /// Type of the value to get from the internal model + /// Field to retrieve + /// Value from the field, if possible + public T? GetFieldValue(string? fieldName) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName)) + return default; + + // Get the value based on the type + return _machine.Read(fieldName!); + } + + /// + /// Set the value from a field based on the type provided + /// + /// Type of the value to set in the internal model + /// Field to set + /// Value to set + /// True if the value was set, false otherwise + public bool SetFieldValue(string? fieldName, T? value) + { + // Invalid field cannot be processed + if (string.IsNullOrEmpty(fieldName)) + return false; + + // Set the value based on the type + _machine[fieldName!] = value; + return true; + } + + #endregion #region Constructors @@ -521,8 +167,8 @@ namespace SabreTools.DatItems /// Description of the machine public Machine(string name, string description) { - Name = name; - Description = description; + SetFieldValue(Models.Metadata.Machine.NameKey, name); + SetFieldValue(Models.Metadata.Machine.DescriptionKey, description); } #endregion diff --git a/SabreTools.DatTools/DatFileTool.cs b/SabreTools.DatTools/DatFileTool.cs index 76220d2c..96a7c480 100644 --- a/SabreTools.DatTools/DatFileTool.cs +++ b/SabreTools.DatTools/DatFileTool.cs @@ -74,9 +74,9 @@ namespace SabreTools.DatTools } filename = filename.Remove(0, rootpath?.Length ?? 0); - newItem.Machine.Name = Path.GetDirectoryName(filename) + Path.DirectorySeparatorChar + newItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, Path.GetDirectoryName(filename) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(filename) + Path.DirectorySeparatorChar - + newItem.Machine.Name; + + newItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); newItems.Add(newItem); } @@ -430,7 +430,7 @@ namespace SabreTools.DatTools continue; if (item.Source != null) - newrom.Machine.Name += $" ({Path.GetFileNameWithoutExtension(inputs[item.Source.Index].CurrentPath)})"; + newrom.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, newrom.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) + $" ({Path.GetFileNameWithoutExtension(inputs[item.Source.Index].CurrentPath)})"); dupeData.Items.Add(key, newrom); } @@ -622,7 +622,7 @@ namespace SabreTools.DatTools if (item.Clone() is not DatItem newrom || newrom.Source == null) continue; - newrom.Machine.Name += $" ({Path.GetFileNameWithoutExtension(inputs[newrom.Source.Index].CurrentPath)})"; + newrom.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, newrom.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) + $" ({Path.GetFileNameWithoutExtension(inputs[newrom.Source.Index].CurrentPath)})"); outerDiffData.Items.Add(key, newrom); } } diff --git a/SabreTools.DatTools/DatFromDir.cs b/SabreTools.DatTools/DatFromDir.cs index 0de6541e..26889c02 100644 --- a/SabreTools.DatTools/DatFromDir.cs +++ b/SabreTools.DatTools/DatFromDir.cs @@ -493,8 +493,8 @@ namespace SabreTools.DatTools } // Update machine information - datItem.Machine.Name = machineName; - datItem.Machine.Description = machineName; + datItem.Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, machineName); + datItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, machineName); // If we have a Disk, then the ".chd" extension needs to be removed if (datItem.ItemType == ItemType.Disk && itemName!.EndsWith(".chd")) diff --git a/SabreTools.DatTools/Rebuilder.cs b/SabreTools.DatTools/Rebuilder.cs index cc34ddf6..cbd845bb 100644 --- a/SabreTools.DatTools/Rebuilder.cs +++ b/SabreTools.DatTools/Rebuilder.cs @@ -437,11 +437,11 @@ namespace SabreTools.DatTools foreach (DatItem item in dupes) { // If we don't have a proper machine - if (item.Machine?.Name == null || !datFile.Items.ContainsKey(item.Machine.Name)) + if (item.Machine?.GetFieldValue(Models.Metadata.Machine.NameKey) == null || !datFile.Items.ContainsKey(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!)) continue; // If we should check for the items in the machine - var items = datFile.Items[item.Machine.Name]; + var items = datFile.Items[item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!]; if (shouldCheck && items!.Count > 1) outputFormat = OutputFormat.Folder; else if (shouldCheck && items!.Count == 1) @@ -547,14 +547,14 @@ namespace SabreTools.DatTools // Get the item from the current file Rom item = new(BaseFile.GetInfo(stream, keepReadOpen: true)); - item.Machine.Name = Path.GetFileNameWithoutExtension(item.GetName()); - item.Machine.Description = Path.GetFileNameWithoutExtension(item.GetName()); + item.Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, Path.GetFileNameWithoutExtension(item.GetName())); + item.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, Path.GetFileNameWithoutExtension(item.GetName())); // If we are coming from an archive, set the correct machine name if (machinename != null) { - item.Machine.Name = machinename; - item.Machine.Description = machinename; + item.Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, machinename); + item.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, machinename); } dupes.Add(item); diff --git a/SabreTools.DatTools/Splitter.cs b/SabreTools.DatTools/Splitter.cs index 40d88dba..6b7161c4 100644 --- a/SabreTools.DatTools/Splitter.cs +++ b/SabreTools.DatTools/Splitter.cs @@ -295,8 +295,8 @@ namespace SabreTools.DatTools #else continue; #endif - items.ForEach(item => item.Machine.Name = Path.GetFileName(item.Machine.Name)); - items.ForEach(item => item.Machine.Description = Path.GetFileName(item.Machine.Description)); + items.ForEach(item => item.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, Path.GetFileName(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)))); + items.ForEach(item => item.Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, Path.GetFileName(item.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey)))); // Now add the game to the output DAT tempDat.Items.AddRange(key, items); diff --git a/SabreTools.Filtering/Cleaner.cs b/SabreTools.Filtering/Cleaner.cs index 223a10c1..625768d1 100644 --- a/SabreTools.Filtering/Cleaner.cs +++ b/SabreTools.Filtering/Cleaner.cs @@ -195,27 +195,27 @@ namespace SabreTools.Filtering // If we're stripping unicode characters, strip machine name and description if (RemoveUnicode) { - datItem.Machine.Name = TextHelper.RemoveUnicodeCharacters(datItem.Machine.Name); - datItem.Machine.Description = TextHelper.RemoveUnicodeCharacters(datItem.Machine.Description); + datItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, TextHelper.RemoveUnicodeCharacters(datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey))); + datItem.Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, TextHelper.RemoveUnicodeCharacters(datItem.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey))); datItem.SetName(TextHelper.RemoveUnicodeCharacters(datItem.GetName())); } // If we're in cleaning mode, sanitize machine name and description if (Clean) { - datItem.Machine.Name = TextHelper.NormalizeCharacters(datItem.Machine.Name); - datItem.Machine.Description = TextHelper.NormalizeCharacters(datItem.Machine.Description); + datItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, TextHelper.NormalizeCharacters(datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey))); + datItem.Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, TextHelper.NormalizeCharacters(datItem.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey))); } // If we are in single game mode, rename the machine if (Single) - datItem.Machine.Name = "!"; + datItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, "!"); // If we are in NTFS trim mode, trim the item name if (Trim && datItem.GetName() != null) { // Windows max name length is 260 - int usableLength = 260 - datItem.Machine.Name!.Length - (Root?.Length ?? 0); + int usableLength = 260 - datItem.Machine.GetFieldValue(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.Machine.Name!, item.Machine.Description!.Replace('/', '_').Replace("\"", "''").Replace(":", " -")); + mapping.TryAdd(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!, item.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey)!.Replace('/', '_').Replace("\"", "''").Replace(":", " -")); #else - mapping[item.Machine.Name!] = item.Machine.Description!.Replace('/', '_').Replace("\"", "''").Replace(":", " -"); + mapping[item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!] = item.Machine.GetFieldValue(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.Machine.Name) && mapping.ContainsKey(item.Machine.Name!)) - item.Machine.Name = mapping[item.Machine.Name!]; + if (!string.IsNullOrEmpty(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)) && mapping.ContainsKey(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!)) + item.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, mapping[item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!]); // Update cloneof - if (!string.IsNullOrEmpty(item.Machine.CloneOf) && mapping.ContainsKey(item.Machine.CloneOf!)) - item.Machine.CloneOf = mapping[item.Machine.CloneOf!]; + if (!string.IsNullOrEmpty(item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey)) && mapping.ContainsKey(item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!)) + item.Machine.SetFieldValue(Models.Metadata.Machine.CloneOfKey, mapping[item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!]); // Update romof - if (!string.IsNullOrEmpty(item.Machine.RomOf) && mapping.ContainsKey(item.Machine.RomOf!)) - item.Machine.RomOf = mapping[item.Machine.RomOf!]; + if (!string.IsNullOrEmpty(item.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey)) && mapping.ContainsKey(item.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey)!)) + item.Machine.SetFieldValue(Models.Metadata.Machine.RomOfKey, mapping[item.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey)!]); // Update sampleof - if (!string.IsNullOrEmpty(item.Machine.SampleOf) && mapping.ContainsKey(item.Machine.SampleOf!)) - item.Machine.SampleOf = mapping[item.Machine.SampleOf!]; + if (!string.IsNullOrEmpty(item.Machine.GetFieldValue(Models.Metadata.Machine.SampleOfKey)) && mapping.ContainsKey(item.Machine.GetFieldValue(Models.Metadata.Machine.SampleOfKey)!)) + item.Machine.SetFieldValue(Models.Metadata.Machine.SampleOfKey, mapping[item.Machine.GetFieldValue(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.Machine.CloneOf)) + if (!string.IsNullOrEmpty(item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey))) { - if (!parents.ContainsKey(item.Machine.CloneOf!.ToLowerInvariant())) - parents.Add(item.Machine.CloneOf.ToLowerInvariant(), new List()); + if (!parents.ContainsKey(item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant())) + parents.Add(item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant(), []); - parents[item.Machine.CloneOf.ToLowerInvariant()].Add(item.Machine.Name!.ToLowerInvariant()); + parents[item.Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey)!.ToLowerInvariant()].Add(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()); } // Then by RomOf - else if (!string.IsNullOrEmpty(item.Machine.RomOf)) + else if (!string.IsNullOrEmpty(item.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey))) { - if (!parents.ContainsKey(item.Machine.RomOf!.ToLowerInvariant())) - parents.Add(item.Machine.RomOf.ToLowerInvariant(), new List()); + if (!parents.ContainsKey(item.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant())) + parents.Add(item.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant(), []); - parents[item.Machine.RomOf.ToLowerInvariant()].Add(item.Machine.Name!.ToLowerInvariant()); + parents[item.Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey)!.ToLowerInvariant()].Add(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()); } // Otherwise, treat it as a parent else { - if (!parents.ContainsKey(item.Machine.Name!.ToLowerInvariant())) - parents.Add(item.Machine.Name!.ToLowerInvariant(), new List()); + if (!parents.ContainsKey(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant())) + parents.Add(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant(), []); - parents[item.Machine.Name.ToLowerInvariant()].Add(item.Machine.Name.ToLowerInvariant()); + parents[item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()].Add(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!.ToLowerInvariant()); } } @@ -458,9 +458,9 @@ namespace SabreTools.Filtering string[] splitname = datItem.GetName()!.Split('.'); #if NET20 || NET35 - datItem.Machine.Name += $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1).ToArray())}"; + datItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey) + $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1).ToArray())}"); #else - datItem.Machine.Name += $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1))}"; + datItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, datItem.Machine.GetFieldValue(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.Machine.Name!, pattern)) - item.Machine.Name = Regex.Replace(item.Machine.Name!, pattern, "$2"); + if (Regex.IsMatch(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!, pattern)) + item.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, Regex.Replace(item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)!, pattern, "$2")); - if (Regex.IsMatch(item.Machine.Description!, pattern)) - item.Machine.Description = Regex.Replace(item.Machine.Description!, pattern, "$2"); + if (Regex.IsMatch(item.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey)!, pattern)) + item.Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, Regex.Replace(item.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey)!, pattern, "$2")); items[j] = item; } diff --git a/SabreTools.Filtering/Replacer.cs b/SabreTools.Filtering/Replacer.cs index 57bd4e1f..8af21710 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.Name == machine.Description)) - machine.Description = repMachine.Description; + 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)); continue; } diff --git a/SabreTools.Filtering/Splitter.cs b/SabreTools.Filtering/Splitter.cs index c6930dbe..9498ca3c 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].Machine.RomOf)) - parent = items[0].Machine.RomOf; + if (!string.IsNullOrEmpty(items[0].Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey))) + parent = items[0].Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey); // If the parent doesnt exist, we want to continue if (string.IsNullOrEmpty(parent)) @@ -290,11 +290,7 @@ namespace SabreTools.Filtering continue; // If the machine (is/is not) a device, we want to continue -#if NETFRAMEWORK - if (dev ^ ((datFile.Items[machine]![0].Machine.MachineType & MachineType.Device) != 0)) -#else - if (dev ^ (datFile.Items[machine]![0].Machine.MachineType.HasFlag(MachineType.Device))) -#endif + if (dev ^ (datFile.Items[machine]![0].Machine.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true)) continue; // Get all device reference names from the current machine @@ -441,8 +437,8 @@ namespace SabreTools.Filtering // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrEmpty(items[0].Machine.CloneOf)) - parent = items[0].Machine.CloneOf; + if (!string.IsNullOrEmpty(items[0].Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey))) + parent = items[0].Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey); // If the parent doesnt exist, we want to continue if (string.IsNullOrEmpty(parent)) @@ -468,10 +464,10 @@ 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].Machine.RomOf; + string? romof = datFile.Items[parent!]![0].Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey); foreach (DatItem item in items!) { - item.Machine.RomOf = romof; + item.Machine.SetFieldValue(Models.Metadata.Machine.RomOfKey, romof); } } } @@ -494,8 +490,8 @@ namespace SabreTools.Filtering // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrEmpty(items[0].Machine.CloneOf)) - parent = items[0].Machine.CloneOf; + if (!string.IsNullOrEmpty(items[0].Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey))) + parent = items[0].Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey); // If there is no parent, then we continue if (string.IsNullOrEmpty(parent)) @@ -506,8 +502,8 @@ namespace SabreTools.Filtering if (datFile.Items[parent!]!.Count == 0) { copyFrom = new Rom(); - copyFrom.Machine.Name = parent; - copyFrom.Machine.Description = parent; + copyFrom.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, parent); + copyFrom.Machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, parent); } else { @@ -559,7 +555,7 @@ namespace SabreTools.Filtering else if (rom.GetFieldValue(Models.Metadata.Rom.MergeKey) != null && !datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Rom).Select(i => (i as Rom)!.GetName()).Contains(rom.GetFieldValue(Models.Metadata.Rom.MergeKey))) { if (subfolder) - rom.SetName($"{rom.Machine.Name}\\{rom.GetName()}"); + rom.SetName($"{rom.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}\\{rom.GetName()}"); rom.CopyMachineInformation(copyFrom); datFile.Items.Add(parent!, rom); @@ -569,7 +565,7 @@ namespace SabreTools.Filtering else if (!datFile.Items[parent!]!.Contains(item) || skipDedup) { if (subfolder) - rom.SetName($"{item.Machine.Name}\\{rom.GetName()}"); + rom.SetName($"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}\\{rom.GetName()}"); rom.CopyMachineInformation(copyFrom); datFile.Items.Add(parent!, rom); @@ -580,7 +576,7 @@ namespace SabreTools.Filtering else if (!datFile.Items[parent!]!.Contains(item)) { if (subfolder) - item.SetName($"{item.Machine.Name}\\{item.GetName()}"); + item.SetName($"{item.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)}\\{item.GetName()}"); item.CopyMachineInformation(copyFrom); datFile.Items.Add(parent!, item); @@ -606,13 +602,8 @@ namespace SabreTools.Filtering continue; if (items.Count > 0 -#if NETFRAMEWORK - && ((items[0].Machine.MachineType & MachineType.Bios) != 0 - || (items[0].Machine.MachineType & MachineType.Device) != 0)) -#else - && (items[0].Machine.MachineType.HasFlag(MachineType.Bios) - || items[0].Machine.MachineType.HasFlag(MachineType.Device))) -#endif + && ((items[0].Machine.GetFieldValue(Models.Metadata.Machine.IsBiosKey) == true) + || (items[0].Machine.GetFieldValue(Models.Metadata.Machine.IsDeviceKey) == true))) { datFile.Items.Remove(game); } @@ -636,17 +627,13 @@ namespace SabreTools.Filtering continue; // If the game (is/is not) a bios, we want to continue -#if NETFRAMEWORK - if (bios ^ (items[0].Machine.MachineType & MachineType.Bios) != 0) -#else - if (bios ^ items[0].Machine.MachineType.HasFlag(MachineType.Bios)) -#endif + if (bios ^ (items[0].Machine.GetFieldValue(Models.Metadata.Machine.IsBiosKey) == true)) continue; // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrEmpty(items[0].Machine.RomOf)) - parent = items[0].Machine.RomOf; + if (!string.IsNullOrEmpty(items[0].Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey))) + parent = items[0].Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey); // If the parent doesnt exist, we want to continue if (string.IsNullOrEmpty(parent)) @@ -691,8 +678,8 @@ namespace SabreTools.Filtering // Determine if the game has a parent or not string? parent = null; - if (!string.IsNullOrEmpty(items[0].Machine.CloneOf)) - parent = items[0].Machine.CloneOf; + if (!string.IsNullOrEmpty(items[0].Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey))) + parent = items[0].Machine.GetFieldValue(Models.Metadata.Machine.CloneOfKey); // If the parent doesnt exist, we want to continue if (string.IsNullOrEmpty(parent)) @@ -715,10 +702,10 @@ 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].Machine.RomOf; + string? romof = datFile.Items[parent!]![0].Machine.GetFieldValue(Models.Metadata.Machine.RomOfKey); foreach (DatItem item in items!) { - item.Machine.RomOf = romof; + item.Machine.SetFieldValue(Models.Metadata.Machine.RomOfKey, romof); } } } @@ -738,9 +725,9 @@ namespace SabreTools.Filtering foreach (DatItem item in items) { - item.Machine.CloneOf = null; - item.Machine.RomOf = null; - item.Machine.SampleOf = null; + item.Machine.SetFieldValue(Models.Metadata.Machine.CloneOfKey, null); + item.Machine.SetFieldValue(Models.Metadata.Machine.RomOfKey, null); + item.Machine.SetFieldValue(Models.Metadata.Machine.SampleOfKey, null); } } } diff --git a/SabreTools.Test/DatFiles/ItemDictionaryTests.cs b/SabreTools.Test/DatFiles/ItemDictionaryTests.cs index 175f817f..ac8d4652 100644 --- a/SabreTools.Test/DatFiles/ItemDictionaryTests.cs +++ b/SabreTools.Test/DatFiles/ItemDictionaryTests.cs @@ -15,29 +15,39 @@ namespace SabreTools.Test.DatFiles public void BucketByTest(ItemKey itemKey, int expected) { // Setup the items - var rom1 = new Rom { Machine = new Machine { Name = "game-1" } }; + var machine1 = new Machine(); + machine1.SetFieldValue(Models.Metadata.Machine.NameKey, "game-1"); + + var machine2 = new Machine(); + machine2.SetFieldValue(Models.Metadata.Machine.NameKey, "game-2"); + + var rom1 = new Rom(); rom1.SetName("rom-1"); rom1.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); rom1.SetFieldValue(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); rom1.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom1.CopyMachineInformation(machine1); - var rom2 = new Rom { Machine = new Machine { Name = "game-1" } }; + var rom2 = new Rom(); rom2.SetName("rom-2"); rom2.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); rom2.SetFieldValue(Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); rom2.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom1.CopyMachineInformation(machine1); - var rom3 = new Rom { Machine = new Machine { Name = "game-2" } }; + var rom3 = new Rom(); rom3.SetName("rom-3"); rom3.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); rom3.SetFieldValue(Models.Metadata.Rom.SHA1Key, "00000ea4014ce66679e7e17d56ac510f67e39e26"); rom3.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom1.CopyMachineInformation(machine2); - var rom4 = new Rom { Machine = new Machine { Name = "game-2" } }; + var rom4 = new Rom(); rom4.SetName("rom-4"); rom4.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); rom4.SetFieldValue(Models.Metadata.Rom.SHA1Key, "00000151d437442e74e5134023fab8bf694a2487"); rom4.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom1.CopyMachineInformation(machine2); // Setup the dictionary var dict = new ItemDictionary @@ -49,7 +59,7 @@ namespace SabreTools.Test.DatFiles dict.BucketBy(itemKey, DedupeType.None); Assert.Equal(expected, dict.Keys.Count); } - + [Fact] public void ClearEmptyTest() { @@ -69,17 +79,22 @@ namespace SabreTools.Test.DatFiles public void ClearMarkedTest() { // Setup the items - var rom1 = new Rom { Machine = new Machine { Name = "game-1" } }; + var machine1 = new Machine(); + machine1.SetFieldValue(Models.Metadata.Machine.NameKey, "game-1"); + + var rom1 = new Rom(); rom1.SetName("rom-1"); rom1.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); rom1.SetFieldValue(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); rom1.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom1.CopyMachineInformation(machine1); - var rom2 = new Rom { Machine = new Machine { Name = "game-1" }, Remove = true }; + var rom2 = new Rom { Remove = true }; rom2.SetName("rom-2"); rom2.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); rom2.SetFieldValue(Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); rom2.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom1.CopyMachineInformation(machine1); // Setup the dictionary var dict = new ItemDictionary @@ -93,22 +108,27 @@ namespace SabreTools.Test.DatFiles Assert.NotNull(dict[key]); Assert.Single(dict[key]!); } - + [Theory] [InlineData(true, 1)] [InlineData(false, 0)] public void GetDuplicatesTest(bool hasDuplicate, int expected) { // Setup the items - var rom1 = new Rom { Machine = new Machine { Name = "game-1" } }; + var machine1 = new Machine(); + machine1.SetFieldValue(Models.Metadata.Machine.NameKey, "game-1"); + + var rom1 = new Rom(); rom1.SetName("rom-1"); rom1.SetFieldValue(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); rom1.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom1.CopyMachineInformation(machine1); - var rom2 = new Rom { Machine = new Machine { Name = "game-1" } }; + var rom2 = new Rom(); rom2.SetName("rom-2"); rom2.SetFieldValue(Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); rom2.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom1.CopyMachineInformation(machine1); // Setup the dictionary var dict = new ItemDictionary @@ -117,30 +137,36 @@ namespace SabreTools.Test.DatFiles }; // Setup the test item - var rom = new Rom { Machine = new Machine { Name = "game-1" } }; + var rom = new Rom(); rom.SetName("rom-1"); rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); rom.SetFieldValue(Models.Metadata.Rom.SizeKey, hasDuplicate ? 1024 : 2048); + rom1.CopyMachineInformation(machine1); var actual = dict.GetDuplicates(rom); Assert.Equal(expected, actual.Count); } - + [Theory] [InlineData(true)] [InlineData(false)] public void HasDuplicatesTest(bool expected) { // Setup the items - var rom1 = new Rom { Machine = new Machine { Name = "game-1" } }; + var machine1 = new Machine(); + machine1.SetFieldValue(Models.Metadata.Machine.NameKey, "game-1"); + + var rom1 = new Rom(); rom1.SetName("rom-1"); rom1.SetFieldValue(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); rom1.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom1.CopyMachineInformation(machine1); - var rom2 = new Rom { Machine = new Machine { Name = "game-1" } }; + var rom2 = new Rom(); rom2.SetName("rom-2"); rom2.SetFieldValue(Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); rom2.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom1.CopyMachineInformation(machine1); // Setup the dictionary var dict = new ItemDictionary @@ -149,15 +175,16 @@ namespace SabreTools.Test.DatFiles }; // Setup the test item - var rom = new Rom { Machine = new Machine { Name = "game-1" } }; + var rom = new Rom(); rom.SetName("rom-1"); rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); rom.SetFieldValue(Models.Metadata.Rom.SizeKey, expected ? 1024 : 2048); + rom1.CopyMachineInformation(machine1); bool actual = dict.HasDuplicates(rom); Assert.Equal(expected, actual); } - + [Fact] public void ResetStatisticsTest() { diff --git a/SabreTools.Test/DatFiles/SetterTests.cs b/SabreTools.Test/DatFiles/SetterTests.cs index c668ec5d..fbc1d25d 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.Machine); - Assert.Equal("foo", datItem.Machine.Name); + Assert.Equal("foo", datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); } /// @@ -32,15 +32,13 @@ namespace SabreTools.Test.DatFiles /// private static DatItem CreateDatItem() { - var rom = new Rom - { - Machine = new Machine - { - Name = "bar", - Description = "bar", - } - }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, "bar"); + machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, "bar"); + + var rom = new Rom { Machine = machine }; rom.SetName("foo"); + return rom; } } diff --git a/SabreTools.Test/DatItems/DatItemTests.cs b/SabreTools.Test/DatItems/DatItemTests.cs index 18e2c92f..5b61dcad 100644 --- a/SabreTools.Test/DatItems/DatItemTests.cs +++ b/SabreTools.Test/DatItems/DatItemTests.cs @@ -47,21 +47,27 @@ namespace SabreTools.Test.DatItems [Fact] public void DuplicateStatusExternalAllTest() { + var machineA = new Machine(); + machineA.SetFieldValue(Models.Metadata.Machine.NameKey, "name-same"); + + var machineB = new Machine(); + machineB.SetFieldValue(Models.Metadata.Machine.NameKey, "name-same"); + var romA = new Rom { - Machine = new Machine { Name = "name-same" }, Source = new Source { Index = 0 }, }; romA.SetName("same-name"); romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + romA.CopyMachineInformation(machineA); var romB = new Rom { - Machine = new Machine { Name = "name-same" }, Source = new Source { Index = 1 }, }; romB.SetName("same-name"); romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + romB.CopyMachineInformation(machineB); var actual = romA.GetDuplicateStatus(romB); Assert.Equal(DupeType.External | DupeType.All, actual); @@ -70,21 +76,27 @@ namespace SabreTools.Test.DatItems [Fact] public void DuplicateStatusExternalHashTest() { + var machineA = new Machine(); + machineA.SetFieldValue(Models.Metadata.Machine.NameKey, "name-same"); + + var machineB = new Machine(); + machineB.SetFieldValue(Models.Metadata.Machine.NameKey, "not-name-same"); + var romA = new Rom { - Machine = new Machine { Name = "name-same" }, Source = new Source { Index = 0 }, }; romA.SetName("same-name"); romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + romA.CopyMachineInformation(machineA); var romB = new Rom { - Machine = new Machine { Name = "not-name-same" }, Source = new Source { Index = 1 }, }; romB.SetName("same-name"); romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + romB.CopyMachineInformation(machineB); var actual = romA.GetDuplicateStatus(romB); Assert.Equal(DupeType.External | DupeType.Hash, actual); @@ -93,21 +105,27 @@ namespace SabreTools.Test.DatItems [Fact] public void DuplicateStatusInternalAllTest() { + var machineA = new Machine(); + machineA.SetFieldValue(Models.Metadata.Machine.NameKey, "name-same"); + + var machineB = new Machine(); + machineB.SetFieldValue(Models.Metadata.Machine.NameKey, "name-same"); + var romA = new Rom { - Machine = new Machine { Name = "name-same" }, Source = new Source { Index = 0 }, }; romA.SetName("same-name"); romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + romA.CopyMachineInformation(machineA); var romB = new Rom { - Machine = new Machine { Name = "name-same" }, Source = new Source { Index = 0 }, }; romB.SetName("same-name"); romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + romB.CopyMachineInformation(machineB); var actual = romA.GetDuplicateStatus(romB); Assert.Equal(DupeType.Internal | DupeType.All, actual); @@ -116,21 +134,27 @@ namespace SabreTools.Test.DatItems [Fact] public void DuplicateStatusInternalHashTest() { + var machineA = new Machine(); + machineA.SetFieldValue(Models.Metadata.Machine.NameKey, "name-same"); + + var machineB = new Machine(); + machineB.SetFieldValue(Models.Metadata.Machine.NameKey, "not-name-same"); + var romA = new Rom { - Machine = new Machine { Name = "name-same" }, Source = new Source { Index = 0 }, }; romA.SetName("same-name"); romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + romA.CopyMachineInformation(machineA); var romB = new Rom { - Machine = new Machine { Name = "not-name-same" }, Source = new Source { Index = 0 }, }; romB.SetName("same-name"); romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); + romB.CopyMachineInformation(machineB); var actual = romA.GetDuplicateStatus(romB); Assert.Equal(DupeType.Internal | DupeType.Hash, actual); diff --git a/SabreTools.Test/Filter/FilteringTests.cs b/SabreTools.Test/Filter/FilteringTests.cs index 0bb02c67..9f2d2084 100644 --- a/SabreTools.Test/Filter/FilteringTests.cs +++ b/SabreTools.Test/Filter/FilteringTests.cs @@ -68,15 +68,13 @@ namespace SabreTools.Test.Filter /// private static DatItem CreateDatItem() { - var rom = new Rom - { - Machine = new Machine - { - Name = "bar", - Description = "bar", - } - }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, "bar"); + machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, "bar"); + + var rom = new Rom { Machine = machine }; rom.SetName("foo"); + return rom; } } diff --git a/SabreTools.Test/Filtering/CleaningTests.cs b/SabreTools.Test/Filtering/CleaningTests.cs index 3fb67ae2..3fd7e82f 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.Machine.Name); - Assert.Equal("nam-3", datItem.Machine.Description); + Assert.Equal("nam-2", datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("nam-3", datItem.Machine.GetFieldValue(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.Machine.Name); - Assert.Equal("ae-Zh", datItem.Machine.Description); + Assert.Equal("'AB'", datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("ae-Zh", datItem.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey)); } [Fact] @@ -66,8 +66,8 @@ namespace SabreTools.Test.Filtering // Check the fields Assert.Equal("name", datItem.GetName()); - Assert.Equal("!", datItem.Machine.Name); - Assert.Equal("name-3", datItem.Machine.Description); + Assert.Equal("!", datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("name-3", datItem.Machine.GetFieldValue(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.Machine.Name); - Assert.Equal("name-3", datItem.Machine.Description); + Assert.Equal("name-2", datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("name-3", datItem.Machine.GetFieldValue(Models.Metadata.Machine.DescriptionKey)); } [Fact] @@ -107,23 +107,21 @@ namespace SabreTools.Test.Filtering // Check the fields Assert.Equal("name", datItem.GetName()); - Assert.Equal("name-2/name", datItem.Machine.Name); + Assert.Equal("name-2/name", datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); } /// /// Generate a consistent DatItem for testing /// - private static DatItem CreateDatItem(string name, string machine, string desc) + private static DatItem CreateDatItem(string name, string machName, string desc) { - var rom = new Rom - { - Machine = new Machine - { - Name = machine, - Description = desc, - } - }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, machName); + machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, desc); + + var rom = new Rom { Machine = machine }; rom.SetName(name); + return rom; } } diff --git a/SabreTools.Test/Filtering/RemoverTests.cs b/SabreTools.Test/Filtering/RemoverTests.cs index 2ff7cc22..cde684e4 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.Machine.Name); + Assert.Null(datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); } /// @@ -32,15 +32,13 @@ namespace SabreTools.Test.Filtering /// private static DatItem CreateDatItem() { - var rom = new Rom - { - Machine = new Machine - { - Name = "bar", - Description = "bar", - } - }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, "bar"); + machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, "bar"); + + var rom = new Rom { Machine = machine }; rom.SetName("foo"); + return rom; } } diff --git a/SabreTools.Test/Filtering/ReplacerTests.cs b/SabreTools.Test/Filtering/ReplacerTests.cs index cf98b19c..544df6d5 100644 --- a/SabreTools.Test/Filtering/ReplacerTests.cs +++ b/SabreTools.Test/Filtering/ReplacerTests.cs @@ -29,10 +29,10 @@ namespace SabreTools.Test.Filtering { var datItem = CreateDatItem(); var repDatItem = CreateDatItem(); - repDatItem.Machine.Name = "foo"; + repDatItem.Machine.SetFieldValue(Models.Metadata.Machine.NameKey, "foo"); List fields = [Models.Metadata.Machine.NameKey]; Replacer.ReplaceFields(datItem.Machine, repDatItem.Machine, fields, false); - Assert.Equal("foo", datItem.Machine.Name); + Assert.Equal("foo", datItem.Machine.GetFieldValue(Models.Metadata.Machine.NameKey)); } /// @@ -40,15 +40,13 @@ namespace SabreTools.Test.Filtering /// private static DatItem CreateDatItem() { - var rom = new Rom - { - Machine = new Machine - { - Name = "bar", - Description = "bar", - } - }; + var machine = new Machine(); + machine.SetFieldValue(Models.Metadata.Machine.NameKey, "bar"); + machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, "bar"); + + var rom = new Rom { Machine = machine }; rom.SetName("foo"); + return rom; } }