Files
SabreTools/SabreTools.Serialization/Internal.AttractMode.cs

149 lines
5.6 KiB
C#
Raw Normal View History

using System.Linq;
2023-08-09 21:00:02 -04:00
using SabreTools.Models.Internal;
2023-08-04 23:21:37 -04:00
namespace SabreTools.Serialization
{
/// <summary>
/// Serializer for AttractMode models to internal structure
/// </summary>
public partial class Internal
{
#region Serialize
2023-08-08 14:38:01 -04:00
/// <summary>
2023-08-09 21:00:02 -04:00
/// Convert from <cref="Models.AttractMode.MetadataFile"/> to <cref="Header"/>
2023-08-08 14:38:01 -04:00
/// </summary>
2023-08-09 21:00:02 -04:00
public static Header ConvertHeaderFromAttractMode(Models.AttractMode.MetadataFile item)
2023-08-08 14:38:01 -04:00
{
2023-08-09 21:00:02 -04:00
var header = new Header
2023-08-08 14:38:01 -04:00
{
2023-08-09 21:00:02 -04:00
[Header.HeaderKey] = item.Header,
2023-08-08 14:38:01 -04:00
};
return header;
}
2023-08-04 23:21:37 -04:00
/// <summary>
2023-08-09 21:00:02 -04:00
/// Convert from <cref="Models.AttractMode.Row"/> to <cref="Machine"/>
2023-08-04 23:21:37 -04:00
/// </summary>
2023-08-09 21:00:02 -04:00
public static Machine ConvertMachineFromAttractMode(Models.AttractMode.Row item)
2023-08-04 23:21:37 -04:00
{
2023-08-09 21:00:02 -04:00
var machine = new Machine
2023-08-04 23:21:37 -04:00
{
2023-08-09 21:00:02 -04:00
[Machine.NameKey] = item.Name,
[Machine.EmulatorKey] = item.Emulator,
[Machine.CloneOfKey] = item.CloneOf,
[Machine.YearKey] = item.Year,
[Machine.ManufacturerKey] = item.Manufacturer,
[Machine.CategoryKey] = item.Category,
[Machine.PlayersKey] = item.Players,
[Machine.RotationKey] = item.Rotation,
[Machine.ControlKey] = item.Control,
[Machine.StatusKey] = item.Status,
[Machine.DisplayCountKey] = item.DisplayCount,
[Machine.DisplayTypeKey] = item.DisplayType,
[Machine.ExtraKey] = item.Extra,
[Machine.ButtonsKey] = item.Buttons,
[Machine.FavoriteKey] = item.Favorite,
[Machine.TagsKey] = item.Tags,
[Machine.PlayedCountKey] = item.PlayedCount,
[Machine.PlayedTimeKey] = item.PlayedTime,
[Machine.PlayedTimeKey] = item.PlayedTime,
[Machine.RomKey] = ConvertFromAttractMode(item),
2023-08-04 23:21:37 -04:00
};
return machine;
}
/// <summary>
2023-08-09 21:00:02 -04:00
/// Convert from <cref="Models.AttractMode.Row"/> to <cref="Rom"/>
/// </summary>
2023-08-09 21:00:02 -04:00
public static Rom ConvertFromAttractMode(Models.AttractMode.Row item)
{
2023-08-09 21:00:02 -04:00
var rom = new Rom
{
2023-08-09 21:00:02 -04:00
[Rom.NameKey] = item.Title,
[Rom.AltRomnameKey] = item.AltRomname,
[Rom.AltTitleKey] = item.AltTitle,
[Rom.FileIsAvailableKey] = item.FileIsAvailable,
};
return rom;
}
#endregion
#region Deserialize
2023-08-09 20:52:10 -04:00
/// <summary>
2023-08-09 21:00:02 -04:00
/// Convert from <cref="Header"/> to <cref="Models.AttractMode.MetadataFile"/>
2023-08-09 20:52:10 -04:00
/// </summary>
2023-08-09 21:00:02 -04:00
public static Models.AttractMode.MetadataFile? ConvertHeaderToAttractMode(Header? item)
2023-08-09 20:52:10 -04:00
{
if (item == null)
return null;
var metadataFile = new Models.AttractMode.MetadataFile
{
2023-08-09 21:00:02 -04:00
Header = item.ReadStringArray(Header.HeaderKey),
2023-08-09 20:52:10 -04:00
};
return metadataFile;
}
2023-08-04 23:21:37 -04:00
/// <summary>
2023-08-09 21:00:02 -04:00
/// Convert from <cref="Machine"/> to an array of <cref="Models.AttractMode.Row"/>
2023-08-04 23:21:37 -04:00
/// </summary>
2023-08-09 21:00:02 -04:00
public static Models.AttractMode.Row?[]? ConvertMachineToAttractMode(Machine? item)
2023-08-04 23:21:37 -04:00
{
if (item == null)
2023-08-04 23:21:37 -04:00
return null;
2023-08-09 21:00:02 -04:00
var roms = item.Read<Rom[]>(Machine.RomKey);
return roms?.Select(rom =>
2023-08-04 23:21:37 -04:00
{
if (rom == null)
return null;
2023-08-04 23:21:37 -04:00
var rowItem = ConvertToAttractMode(rom);
2023-08-09 21:00:02 -04:00
rowItem.Name = item.ReadString(Machine.NameKey);
rowItem.Emulator = item.ReadString(Machine.EmulatorKey);
rowItem.CloneOf = item.ReadString(Machine.CloneOfKey);
rowItem.Year = item.ReadString(Machine.YearKey);
rowItem.Manufacturer = item.ReadString(Machine.ManufacturerKey);
rowItem.Category = item.ReadString(Machine.CategoryKey);
rowItem.Players = item.ReadString(Machine.PlayersKey);
rowItem.Rotation = item.ReadString(Machine.RotationKey);
rowItem.Control = item.ReadString(Machine.ControlKey);
rowItem.Status = item.ReadString(Machine.StatusKey);
rowItem.DisplayCount = item.ReadString(Machine.DisplayCountKey);
rowItem.DisplayType = item.ReadString(Machine.DisplayTypeKey);
rowItem.Extra = item.ReadString(Machine.ExtraKey);
rowItem.Buttons = item.ReadString(Machine.ButtonsKey);
rowItem.Favorite = item.ReadString(Machine.FavoriteKey);
rowItem.Tags = item.ReadString(Machine.TagsKey);
rowItem.PlayedCount = item.ReadString(Machine.PlayedCountKey);
rowItem.PlayedTime = item.ReadString(Machine.PlayedTimeKey);
2023-08-04 23:21:37 -04:00
return rowItem;
})?.ToArray();
2023-08-04 23:21:37 -04:00
}
/// <summary>
2023-08-09 21:00:02 -04:00
/// Convert from <cref="Rom"/> to <cref="Models.AttractMode.Row"/>
/// </summary>
2023-08-09 21:00:02 -04:00
private static Models.AttractMode.Row? ConvertToAttractMode(Rom? item)
{
if (item == null)
return null;
var row = new Models.AttractMode.Row
{
2023-08-09 21:00:02 -04:00
Title = item.ReadString(Rom.NameKey),
AltRomname = item.ReadString(Rom.AltRomnameKey),
AltTitle = item.ReadString(Rom.AltTitleKey),
FileIsAvailable = item.ReadString(Rom.FileIsAvailableKey),
};
return row;
}
#endregion
}
}