diff --git a/SabreTools.Models/Internal/Machine.cs b/SabreTools.Models/Internal/Machine.cs index 5458757b..8de9eb7e 100644 --- a/SabreTools.Models/Internal/Machine.cs +++ b/SabreTools.Models/Internal/Machine.cs @@ -81,6 +81,9 @@ namespace SabreTools.Models.Internal /// string public const string DuplicateIDKey = "duplicateID"; + /// string + public const string EmulatorKey = "emulator"; + /// string public const string ExtraKey = "extra"; @@ -132,6 +135,9 @@ namespace SabreTools.Models.Internal /// Media[] public const string MediaKey = "media"; + /// string + public const string NameKey = "name"; + /// string public const string NotesKey = "notes"; diff --git a/SabreTools.Serialization/Internal.AttractMode.cs b/SabreTools.Serialization/Internal.AttractMode.cs index 96a368b0..bc6527cd 100644 --- a/SabreTools.Serialization/Internal.AttractMode.cs +++ b/SabreTools.Serialization/Internal.AttractMode.cs @@ -1,3 +1,5 @@ +using System.Collections.Generic; + namespace SabreTools.Serialization { /// @@ -7,6 +9,37 @@ namespace SabreTools.Serialization { #region Serialize + /// + /// Convert from to + /// + public static Models.Internal.Machine ConvertMachineFromAttractMode(Models.AttractMode.Row item) + { + var machine = new Models.Internal.Machine + { + [Models.Internal.Machine.NameKey] = item.Name, + [Models.Internal.Machine.EmulatorKey] = item.Emulator, + [Models.Internal.Machine.CloneOfKey] = item.CloneOf, + [Models.Internal.Machine.YearKey] = item.Year, + [Models.Internal.Machine.ManufacturerKey] = item.Manufacturer, + [Models.Internal.Machine.CategoryKey] = item.Category, + [Models.Internal.Machine.PlayersKey] = item.Players, + [Models.Internal.Machine.RotationKey] = item.Rotation, + [Models.Internal.Machine.ControlKey] = item.Control, + [Models.Internal.Machine.StatusKey] = item.Status, + [Models.Internal.Machine.DisplayCountKey] = item.DisplayCount, + [Models.Internal.Machine.DisplayTypeKey] = item.DisplayType, + [Models.Internal.Machine.ExtraKey] = item.Extra, + [Models.Internal.Machine.ButtonsKey] = item.Buttons, + [Models.Internal.Machine.FavoriteKey] = item.Favorite, + [Models.Internal.Machine.TagsKey] = item.Tags, + [Models.Internal.Machine.PlayedCountKey] = item.PlayedCount, + [Models.Internal.Machine.PlayedTimeKey] = item.PlayedTime, + [Models.Internal.Machine.PlayedTimeKey] = item.PlayedTime, + [Models.Internal.Machine.RomKey] = ConvertFromAttractMode(item), + }; + return machine; + } + /// /// Convert from to /// @@ -26,6 +59,43 @@ namespace SabreTools.Serialization #region Deserialize + /// + /// Convert from to an array of + /// + public static Models.AttractMode.Row[]? ConvertMachineToAttractMode(Models.Internal.Machine item) + { + if (!item.ContainsKey(Models.Internal.Machine.RomKey) || item[Models.Internal.Machine.RomKey] is not Models.Internal.Rom[] roms) + return null; + + var rowItems = new List(); + foreach (var rom in roms) + { + var rowItem = ConvertToAttractMode(rom); + + rowItem.Name = item.ReadString(Models.Internal.Machine.NameKey); + rowItem.Emulator = item.ReadString(Models.Internal.Machine.EmulatorKey); + rowItem.CloneOf = item.ReadString(Models.Internal.Machine.CloneOfKey); + rowItem.Year = item.ReadString(Models.Internal.Machine.YearKey); + rowItem.Manufacturer = item.ReadString(Models.Internal.Machine.ManufacturerKey); + rowItem.Category = item.ReadString(Models.Internal.Machine.CategoryKey); + rowItem.Players = item.ReadString(Models.Internal.Machine.PlayersKey); + rowItem.Rotation = item.ReadString(Models.Internal.Machine.RotationKey); + rowItem.Control = item.ReadString(Models.Internal.Machine.ControlKey); + rowItem.Status = item.ReadString(Models.Internal.Machine.StatusKey); + rowItem.DisplayCount = item.ReadString(Models.Internal.Machine.DisplayCountKey); + rowItem.DisplayType = item.ReadString(Models.Internal.Machine.DisplayTypeKey); + rowItem.Extra = item.ReadString(Models.Internal.Machine.ExtraKey); + rowItem.Buttons = item.ReadString(Models.Internal.Machine.ButtonsKey); + rowItem.Favorite = item.ReadString(Models.Internal.Machine.FavoriteKey); + rowItem.Tags = item.ReadString(Models.Internal.Machine.TagsKey); + rowItem.PlayedCount = item.ReadString(Models.Internal.Machine.PlayedCountKey); + rowItem.PlayedTime = item.ReadString(Models.Internal.Machine.PlayedTimeKey); + + rowItems.Add(rowItem); + } + return rowItems.ToArray(); + } + /// /// Convert from to ///