mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Reduce implicit null checks
This commit is contained in:
@@ -273,7 +273,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
ConvertDeviceRefs(game.DeviceRef, machine, filename, indexId, statsOnly, ref containsItems);
|
||||
ConvertSamples(game.Sample, machine, filename, indexId, statsOnly, ref containsItems);
|
||||
ConvertArchives(game.Archive, machine, filename, indexId, statsOnly, ref containsItems);
|
||||
ConvertDrivers(game.Driver, machine, filename, indexId, statsOnly, ref containsItems);
|
||||
ConvertDriver(game.Driver, machine, filename, indexId, statsOnly, ref containsItems);
|
||||
ConvertSoftwareLists(game.SoftwareList, machine, filename, indexId, statsOnly, ref containsItems);
|
||||
|
||||
// If we had no items, create a Blank placeholder
|
||||
@@ -599,42 +599,39 @@ namespace SabreTools.DatFiles.Formats
|
||||
/// <summary>
|
||||
/// Convert Driver information
|
||||
/// </summary>
|
||||
/// <param name="drivers">Array of deserialized models to convert</param>
|
||||
/// <param name="driver">Deserialized model to convert</param>
|
||||
/// <param name="machine">Prefilled machine to use</param>
|
||||
/// <param name="filename">Name of the file to be parsed</param>
|
||||
/// <param name="indexId">Index ID for the DAT</param>
|
||||
/// <param name="statsOnly">True to only add item statistics while parsing, false otherwise</param>
|
||||
/// <param name="containsItems">True if there were any items in the array, false otherwise</param>
|
||||
private void ConvertDrivers(Models.Logiqx.Driver[]? drivers, Machine machine, string filename, int indexId, bool statsOnly, ref bool containsItems)
|
||||
private void ConvertDriver(Models.Logiqx.Driver? driver, Machine machine, string filename, int indexId, bool statsOnly, ref bool containsItems)
|
||||
{
|
||||
// If the drivers array is missing, we can't do anything
|
||||
if (drivers == null || !drivers.Any())
|
||||
// If the driver is missing, we can't do anything
|
||||
if (driver == null)
|
||||
return;
|
||||
|
||||
containsItems = true;
|
||||
foreach (var driver in drivers)
|
||||
var item = new Driver
|
||||
{
|
||||
var item = new Driver
|
||||
Status = driver.Status?.AsSupportStatus() ?? SupportStatus.NULL,
|
||||
Emulation = driver.Emulation?.AsSupportStatus() ?? SupportStatus.NULL,
|
||||
Cocktail = driver.Cocktail?.AsSupportStatus() ?? SupportStatus.NULL,
|
||||
SaveState = driver.SaveState?.AsSupported() ?? Supported.NULL,
|
||||
RequiresArtwork = driver.RequiresArtwork?.AsYesNo(),
|
||||
Unofficial = driver.Unofficial?.AsYesNo(),
|
||||
NoSoundHardware = driver.NoSoundHardware?.AsYesNo(),
|
||||
Incomplete = driver.Incomplete?.AsYesNo(),
|
||||
|
||||
Source = new Source
|
||||
{
|
||||
Status = driver.Status?.AsSupportStatus() ?? SupportStatus.NULL,
|
||||
Emulation = driver.Emulation?.AsSupportStatus() ?? SupportStatus.NULL,
|
||||
Cocktail = driver.Cocktail?.AsSupportStatus() ?? SupportStatus.NULL,
|
||||
SaveState = driver.SaveState?.AsSupported() ?? Supported.NULL,
|
||||
RequiresArtwork = driver.RequiresArtwork?.AsYesNo(),
|
||||
Unofficial = driver.Unofficial?.AsYesNo(),
|
||||
NoSoundHardware = driver.NoSoundHardware?.AsYesNo(),
|
||||
Incomplete = driver.Incomplete?.AsYesNo(),
|
||||
Index = indexId,
|
||||
Name = filename,
|
||||
},
|
||||
};
|
||||
|
||||
Source = new Source
|
||||
{
|
||||
Index = indexId,
|
||||
Name = filename,
|
||||
},
|
||||
};
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
}
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -314,7 +314,6 @@ namespace SabreTools.DatFiles.Formats
|
||||
var samples = new List<Models.Logiqx.Sample>();
|
||||
var archives = new List<Models.Logiqx.Archive>();
|
||||
var devicerefs = new List<Models.Logiqx.DeviceRef>();
|
||||
var drivers = new List<Models.Logiqx.Driver>();
|
||||
var softwarelists = new List<Models.Logiqx.SoftwareList>();
|
||||
|
||||
// Loop through and convert the items to respective lists
|
||||
@@ -357,7 +356,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
devicerefs.Add(CreateDeviceRef(deviceref));
|
||||
break;
|
||||
case Driver driver:
|
||||
drivers.Add(CreateDriver(driver));
|
||||
game.Driver = CreateDriver(driver);
|
||||
break;
|
||||
case DatItems.Formats.SoftwareList softwarelist:
|
||||
softwarelists.Add(CreateSoftwareList(softwarelist));
|
||||
@@ -374,7 +373,6 @@ namespace SabreTools.DatFiles.Formats
|
||||
game.Sample = samples.ToArray();
|
||||
game.Archive = archives.ToArray();
|
||||
game.DeviceRef = devicerefs.ToArray();
|
||||
game.Driver = drivers.ToArray();
|
||||
game.SoftwareList = softwarelists.ToArray();
|
||||
|
||||
// Add the game to the list
|
||||
|
||||
@@ -60,7 +60,7 @@ namespace SabreTools.Models.ClrMamePro
|
||||
public Chip[]? Chip { get; set; }
|
||||
|
||||
/// <remarks>video, Appears after Chip</remarks>
|
||||
public Video? Video { get; set; }
|
||||
public Video[]? Video { get; set; }
|
||||
|
||||
/// <remarks>sound, Appears after Video</remarks>
|
||||
public Sound? Sound { get; set; }
|
||||
|
||||
@@ -61,6 +61,9 @@ namespace SabreTools.Models.Internal
|
||||
/// <remarks>DipSwitch[]</remarks>
|
||||
public const string DipSwitchKey = "dipswitch";
|
||||
|
||||
/// <remarks>string</remarks>
|
||||
public const string DirNameKey = "dirName";
|
||||
|
||||
/// <remarks>Disk[]</remarks>
|
||||
public const string DiskKey = "disk";
|
||||
|
||||
@@ -73,7 +76,7 @@ namespace SabreTools.Models.Internal
|
||||
/// <remarks>string</remarks>
|
||||
public const string DisplayTypeKey = "displaytype";
|
||||
|
||||
/// <remarks>Driver, Driver[]</remarks>
|
||||
/// <remarks>Driver</remarks>
|
||||
public const string DriverKey = "driver";
|
||||
|
||||
/// <remarks>Dump[]</remarks>
|
||||
@@ -230,7 +233,7 @@ namespace SabreTools.Models.Internal
|
||||
/// <remarks>Trurip</remarks>
|
||||
public const string TruripKey = "trurip";
|
||||
|
||||
/// <remarks>Video, Video[]</remarks>
|
||||
/// <remarks>Video[]</remarks>
|
||||
public const string VideoKey = "video";
|
||||
|
||||
/// <remarks>string</remarks>
|
||||
|
||||
@@ -102,10 +102,9 @@ namespace SabreTools.Models.Logiqx
|
||||
[XmlElement("archive")]
|
||||
public Archive[]? Archive { get; set; }
|
||||
|
||||
/// TODO: Validate multiple can exist
|
||||
/// <remarks>MAME extension</remarks>
|
||||
[XmlElement("driver")]
|
||||
public Driver[]? Driver { get; set; }
|
||||
public Driver? Driver { get; set; }
|
||||
|
||||
/// <remarks>MAME extension</remarks>
|
||||
[XmlElement("softwarelist")]
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using SabreTools.Models.ArchiveDotOrg;
|
||||
|
||||
@@ -22,7 +23,12 @@ namespace SabreTools.Serialization
|
||||
|
||||
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||
if (machines != null && machines.Any())
|
||||
files.File = machines.SelectMany(ConvertFromInternalModel).ToArray();
|
||||
{
|
||||
files.File = machines
|
||||
.Where(m => m != null)
|
||||
.SelectMany(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return files;
|
||||
}
|
||||
@@ -30,23 +36,22 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Machine"/> to an array of <cref="Models.ArchiveDotOrg.File"/>
|
||||
/// </summary>
|
||||
private static File[]? ConvertFromInternalModel(Models.Internal.Machine? item)
|
||||
private static File[] ConvertFromInternalModel(Models.Internal.Machine item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
||||
return roms?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (roms == null)
|
||||
return Array.Empty<File>();
|
||||
|
||||
return roms
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertFromInternalModel).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.ArchiveDotOrg.File"/>
|
||||
/// </summary>
|
||||
private static File? ConvertFromInternalModel(Models.Internal.Rom? item)
|
||||
private static File ConvertFromInternalModel(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var file = new File
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Rom.NameKey),
|
||||
|
||||
@@ -13,15 +13,23 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.ArchiveDotOrg.Files"/> to <cref="Models.Internal.MetadataFile"/>
|
||||
/// </summary>
|
||||
public static Models.Internal.MetadataFile ConvertToInternalModel(Files item)
|
||||
public static Models.Internal.MetadataFile? ConvertToInternalModel(Files? item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new Models.Internal.MetadataFile
|
||||
{
|
||||
[Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item),
|
||||
};
|
||||
|
||||
if (item?.File != null && item.File.Any())
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.File.Select(ConvertMachineToInternalModel).ToArray();
|
||||
{
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.File
|
||||
.Where(f => f != null)
|
||||
.Select(ConvertMachineToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
@@ -136,7 +137,12 @@ namespace SabreTools.Serialization
|
||||
|
||||
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||
if (machines != null && machines.Any())
|
||||
metadataFile.Row = machines.SelectMany(ConvertMachineFromInternalModel).ToArray();
|
||||
{
|
||||
metadataFile.Row = machines
|
||||
.Where(m => m != null)
|
||||
.SelectMany(ConvertMachineFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
@@ -144,11 +150,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.AttractMode.MetadataFile"/>
|
||||
/// </summary>
|
||||
private static MetadataFile? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
||||
private static MetadataFile ConvertHeaderFromInternalModel(Models.Internal.Header item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new MetadataFile
|
||||
{
|
||||
Header = item.ReadStringArray(Models.Internal.Header.HeaderKey),
|
||||
@@ -159,55 +162,46 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Machine"/> to an array of <cref="Models.AttractMode.Row"/>
|
||||
/// </summary>
|
||||
private static Row?[]? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||
private static Row[] ConvertMachineFromInternalModel(Models.Internal.Machine item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
||||
return roms?.Select(rom =>
|
||||
{
|
||||
if (rom == null)
|
||||
return null;
|
||||
if (roms == null || !roms.Any())
|
||||
return Array.Empty<Row>();
|
||||
|
||||
var rowItem = ConvertFromInternalModel(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);
|
||||
|
||||
return rowItem;
|
||||
})?.ToArray();
|
||||
return roms
|
||||
.Where(r => r != null)
|
||||
.Select(rom => ConvertFromInternalModel(rom, item))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.AttractMode.Row"/>
|
||||
/// </summary>
|
||||
private static Row? ConvertFromInternalModel(Models.Internal.Rom? item)
|
||||
private static Row ConvertFromInternalModel(Models.Internal.Rom item, Models.Internal.Machine parent)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var row = new Row
|
||||
{
|
||||
Name = parent.ReadString(Models.Internal.Machine.NameKey),
|
||||
Title = item.ReadString(Models.Internal.Rom.NameKey),
|
||||
Emulator = parent.ReadString(Models.Internal.Machine.EmulatorKey),
|
||||
CloneOf = parent.ReadString(Models.Internal.Machine.CloneOfKey),
|
||||
Year = parent.ReadString(Models.Internal.Machine.YearKey),
|
||||
Manufacturer = parent.ReadString(Models.Internal.Machine.ManufacturerKey),
|
||||
Category = parent.ReadString(Models.Internal.Machine.CategoryKey),
|
||||
Players = parent.ReadString(Models.Internal.Machine.PlayersKey),
|
||||
Rotation = parent.ReadString(Models.Internal.Machine.RotationKey),
|
||||
Control = parent.ReadString(Models.Internal.Machine.ControlKey),
|
||||
Status = parent.ReadString(Models.Internal.Machine.StatusKey),
|
||||
DisplayCount = parent.ReadString(Models.Internal.Machine.DisplayCountKey),
|
||||
DisplayType = parent.ReadString(Models.Internal.Machine.DisplayTypeKey),
|
||||
AltRomname = item.ReadString(Models.Internal.Rom.AltRomnameKey),
|
||||
AltTitle = item.ReadString(Models.Internal.Rom.AltTitleKey),
|
||||
Extra = parent.ReadString(Models.Internal.Machine.ExtraKey),
|
||||
Buttons = parent.ReadString(Models.Internal.Machine.ButtonsKey),
|
||||
Favorite = parent.ReadString(Models.Internal.Machine.FavoriteKey),
|
||||
Tags = parent.ReadString(Models.Internal.Machine.TagsKey),
|
||||
PlayedCount = parent.ReadString(Models.Internal.Machine.PlayedCountKey),
|
||||
PlayedTime = parent.ReadString(Models.Internal.Machine.PlayedTimeKey),
|
||||
FileIsAvailable = item.ReadString(Models.Internal.Rom.FileIsAvailableKey),
|
||||
};
|
||||
return row;
|
||||
|
||||
@@ -105,15 +105,23 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.AttractMode.MetadataFile"/> to <cref="Models.Internal.MetadataFile"/>
|
||||
/// </summary>
|
||||
public static Models.Internal.MetadataFile ConvertToInternalModel(MetadataFile item)
|
||||
public static Models.Internal.MetadataFile? ConvertToInternalModel(MetadataFile? item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new Models.Internal.MetadataFile
|
||||
{
|
||||
[Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item),
|
||||
};
|
||||
|
||||
if (item?.Row != null && item.Row.Any())
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Row.Select(ConvertMachineToInternalModel).ToArray();
|
||||
{
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Row
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertMachineToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ namespace SabreTools.Serialization
|
||||
var samples = new List<Sample>();
|
||||
var archives = new List<Archive>();
|
||||
var chips = new List<Chip>();
|
||||
var videos = new List<Video>();
|
||||
var dipSwitches = new List<DipSwitch>();
|
||||
|
||||
var additional = new List<string>();
|
||||
@@ -89,6 +90,7 @@ namespace SabreTools.Serialization
|
||||
game.Sample = samples.ToArray();
|
||||
game.Archive = archives.ToArray();
|
||||
game.Chip = chips.ToArray();
|
||||
game.Video = videos.ToArray();
|
||||
game.DipSwitch = dipSwitches.ToArray();
|
||||
game.ADDITIONAL_ELEMENTS = gameAdditional.ToArray();
|
||||
|
||||
@@ -103,6 +105,7 @@ namespace SabreTools.Serialization
|
||||
samples.Clear();
|
||||
archives.Clear();
|
||||
chips.Clear();
|
||||
videos.Clear();
|
||||
dipSwitches.Clear();
|
||||
gameAdditional.Clear();
|
||||
break;
|
||||
@@ -293,7 +296,7 @@ namespace SabreTools.Serialization
|
||||
chips.Add(CreateChip(reader));
|
||||
break;
|
||||
case "video":
|
||||
game.Video = CreateVideo(reader);
|
||||
videos.Add(CreateVideo(reader));
|
||||
break;
|
||||
case "sound":
|
||||
game.Sound = CreateSound(reader);
|
||||
@@ -848,7 +851,12 @@ namespace SabreTools.Serialization
|
||||
|
||||
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||
if (machines != null && machines.Any())
|
||||
metadataFile.Game = machines.Select(machine => ConvertMachineFromInternalModel(machine, game)).ToArray();
|
||||
{
|
||||
metadataFile.Game = machines
|
||||
.Where(m => m != null)
|
||||
.Select(machine => ConvertMachineFromInternalModel(machine, game))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
@@ -856,11 +864,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.ClrMamePro.ClrMamePro"/>
|
||||
/// </summary>
|
||||
private static Models.ClrMamePro.ClrMamePro? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
||||
private static Models.ClrMamePro.ClrMamePro ConvertHeaderFromInternalModel(Models.Internal.Header item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var clrMamePro = new Models.ClrMamePro.ClrMamePro
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Header.NameKey),
|
||||
@@ -885,11 +890,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Archive"/> to <cref="Models.ClrMamePro.Machine"/>
|
||||
/// </summary>
|
||||
private static GameBase? ConvertMachineFromInternalModel(Models.Internal.Machine? item, bool game = false)
|
||||
private static GameBase ConvertMachineFromInternalModel(Models.Internal.Machine item, bool game = false)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
GameBase gameBase = game ? new Models.ClrMamePro.Game() : new Models.ClrMamePro.Machine();
|
||||
|
||||
gameBase.Name = item.ReadString(Models.Internal.Machine.NameKey);
|
||||
@@ -902,43 +904,106 @@ namespace SabreTools.Serialization
|
||||
gameBase.SampleOf = item.ReadString(Models.Internal.Machine.SampleOfKey);
|
||||
|
||||
var releases = item.Read<Models.Internal.Release[]>(Models.Internal.Machine.ReleaseKey);
|
||||
gameBase.Release = releases?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (releases != null && releases.Any())
|
||||
{
|
||||
gameBase.Release = releases
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var biosSets = item.Read<Models.Internal.BiosSet[]>(Models.Internal.Machine.BiosSetKey);
|
||||
gameBase.BiosSet = biosSets?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (biosSets != null && biosSets.Any())
|
||||
{
|
||||
gameBase.BiosSet = biosSets
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
||||
gameBase.Rom = roms?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (roms != null && roms.Any())
|
||||
{
|
||||
gameBase.Rom = roms
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var disks = item.Read<Models.Internal.Disk[]>(Models.Internal.Machine.DiskKey);
|
||||
gameBase.Disk = disks?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (disks != null && disks.Any())
|
||||
{
|
||||
gameBase.Disk = disks
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var medias = item.Read<Models.Internal.Media[]>(Models.Internal.Machine.MediaKey);
|
||||
gameBase.Media = medias?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (medias != null && medias.Any())
|
||||
{
|
||||
gameBase.Media = medias
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var samples = item.Read<Models.Internal.Sample[]>(Models.Internal.Machine.SampleKey);
|
||||
gameBase.Sample = samples?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (samples != null && samples.Any())
|
||||
{
|
||||
gameBase.Sample = samples
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var archives = item.Read<Models.Internal.Archive[]>(Models.Internal.Machine.ArchiveKey);
|
||||
gameBase.Archive = archives?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (archives != null && archives.Any())
|
||||
{
|
||||
gameBase.Archive = archives
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var chips = item.Read<Models.Internal.Chip[]>(Models.Internal.Machine.ChipKey);
|
||||
gameBase.Chip = chips?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (chips != null && chips.Any())
|
||||
{
|
||||
gameBase.Chip = chips
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var video = item.Read<Models.Internal.Video>(Models.Internal.Machine.VideoKey);
|
||||
gameBase.Video = ConvertFromInternalModel(video);
|
||||
var videos = item.Read<Models.Internal.Video[]>(Models.Internal.Machine.VideoKey);
|
||||
if (videos != null && videos.Any())
|
||||
{
|
||||
gameBase.Video = videos
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var sound = item.Read<Models.Internal.Sound>(Models.Internal.Machine.SoundKey);
|
||||
gameBase.Sound = ConvertFromInternalModel(sound);
|
||||
if (sound != null)
|
||||
gameBase.Sound = ConvertFromInternalModel(sound);
|
||||
|
||||
var input = item.Read<Models.Internal.Input>(Models.Internal.Machine.InputKey);
|
||||
gameBase.Input = ConvertFromInternalModel(input);
|
||||
if (input != null)
|
||||
gameBase.Input = ConvertFromInternalModel(input);
|
||||
|
||||
var dipSwitches = item.Read<Models.Internal.DipSwitch[]>(Models.Internal.Machine.DipSwitchKey);
|
||||
gameBase.DipSwitch = dipSwitches?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (dipSwitches != null && dipSwitches.Any())
|
||||
{
|
||||
gameBase.DipSwitch = dipSwitches
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var driver = item.Read<Models.Internal.Driver>(Models.Internal.Machine.DriverKey);
|
||||
gameBase.Driver = ConvertFromInternalModel(driver);
|
||||
if (driver != null)
|
||||
gameBase.Driver = ConvertFromInternalModel(driver);
|
||||
|
||||
return gameBase;
|
||||
}
|
||||
@@ -946,11 +1011,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Archive"/> to <cref="Models.ClrMamePro.Archive"/>
|
||||
/// </summary>
|
||||
private static Archive? ConvertFromInternalModel(Models.Internal.Archive? item)
|
||||
private static Archive ConvertFromInternalModel(Models.Internal.Archive item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var archive = new Archive
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Archive.NameKey),
|
||||
@@ -961,11 +1023,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.BiosSet"/> to <cref="Models.ClrMamePro.BiosSet"/>
|
||||
/// </summary>
|
||||
private static BiosSet? ConvertFromInternalModel(Models.Internal.BiosSet? item)
|
||||
private static BiosSet ConvertFromInternalModel(Models.Internal.BiosSet item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var biosset = new BiosSet
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.BiosSet.NameKey),
|
||||
@@ -978,11 +1037,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Chip"/> to <cref="Models.ClrMamePro.Chip"/>
|
||||
/// </summary>
|
||||
private static Chip? ConvertFromInternalModel(Models.Internal.Chip? item)
|
||||
private static Chip ConvertFromInternalModel(Models.Internal.Chip item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var chip = new Chip
|
||||
{
|
||||
Type = item.ReadString(Models.Internal.Chip.ChipTypeKey),
|
||||
@@ -996,11 +1052,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.DipSwitch"/> to <cref="Models.ClrMamePro.DipSwitch"/>
|
||||
/// </summary>
|
||||
private static DipSwitch? ConvertFromInternalModel(Models.Internal.DipSwitch? item)
|
||||
private static DipSwitch ConvertFromInternalModel(Models.Internal.DipSwitch item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var dipswitch = new DipSwitch
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.DipSwitch.NameKey),
|
||||
@@ -1013,11 +1066,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Disk"/> to <cref="Models.ClrMamePro.Disk"/>
|
||||
/// </summary>
|
||||
private static Disk? ConvertFromInternalModel(Models.Internal.Disk? item)
|
||||
private static Disk ConvertFromInternalModel(Models.Internal.Disk item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var disk = new Disk
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Disk.NameKey),
|
||||
@@ -1033,11 +1083,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Driver"/> to <cref="Models.ClrMamePro.Driver"/>
|
||||
/// </summary>
|
||||
private static Driver? ConvertFromInternalModel(Models.Internal.Driver? item)
|
||||
private static Driver ConvertFromInternalModel(Models.Internal.Driver item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var driver = new Driver
|
||||
{
|
||||
Status = item.ReadString(Models.Internal.Driver.StatusKey),
|
||||
@@ -1052,11 +1099,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Input"/> to <cref="Models.ClrMamePro.Input"/>
|
||||
/// </summary>
|
||||
private static Input? ConvertFromInternalModel(Models.Internal.Input? item)
|
||||
private static Input ConvertFromInternalModel(Models.Internal.Input item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var input = new Input
|
||||
{
|
||||
Players = item.ReadString(Models.Internal.Input.PlayersKey),
|
||||
@@ -1072,11 +1116,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Media"/> to <cref="Models.ClrMamePro.Media"/>
|
||||
/// </summary>
|
||||
private static Media? ConvertFromInternalModel(Models.Internal.Media? item)
|
||||
private static Media ConvertFromInternalModel(Models.Internal.Media item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var media = new Media
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Media.NameKey),
|
||||
@@ -1091,11 +1132,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Release"/> to <cref="Models.ClrMamePro.Release"/>
|
||||
/// </summary>
|
||||
private static Release? ConvertFromInternalModel(Models.Internal.Release? item)
|
||||
private static Release ConvertFromInternalModel(Models.Internal.Release item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var release = new Release
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Release.NameKey),
|
||||
@@ -1110,11 +1148,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.ClrMamePro.Rom"/>
|
||||
/// </summary>
|
||||
private static Rom? ConvertFromInternalModel(Models.Internal.Rom? item)
|
||||
private static Rom ConvertFromInternalModel(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var rom = new Rom
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Rom.NameKey),
|
||||
@@ -1145,11 +1180,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Sample"/> to <cref="Models.ClrMamePro.Sample"/>
|
||||
/// </summary>
|
||||
private static Sample? ConvertFromInternalModel(Models.Internal.Sample? item)
|
||||
private static Sample ConvertFromInternalModel(Models.Internal.Sample item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var sample = new Sample
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Sample.NameKey),
|
||||
@@ -1160,11 +1192,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Sound"/> to <cref="Models.ClrMamePro.Sound"/>
|
||||
/// </summary>
|
||||
private static Sound? ConvertFromInternalModel(Models.Internal.Sound? item)
|
||||
private static Sound ConvertFromInternalModel(Models.Internal.Sound item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var sound = new Sound
|
||||
{
|
||||
Channels = item.ReadString(Models.Internal.Sound.ChannelsKey),
|
||||
@@ -1175,11 +1204,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Video"/> to <cref="Models.ClrMamePro.Video"/>
|
||||
/// </summary>
|
||||
private static Video? ConvertFromInternalModel(Models.Internal.Video? item)
|
||||
private static Video ConvertFromInternalModel(Models.Internal.Video item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var video = new Video
|
||||
{
|
||||
Screen = item.ReadString(Models.Internal.Video.ScreenKey),
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using SabreTools.IO.Writers;
|
||||
using SabreTools.Models.ClrMamePro;
|
||||
|
||||
namespace SabreTools.Serialization
|
||||
{
|
||||
/// <summary>
|
||||
@@ -154,7 +155,7 @@ namespace SabreTools.Serialization
|
||||
WriteSamples(game.Sample, writer);
|
||||
WriteArchives(game.Archive, writer);
|
||||
WriteChips(game.Chip, writer);
|
||||
WriteVideo(game.Video, writer);
|
||||
WriteVideos(game.Video, writer);
|
||||
WriteSound(game.Sound, writer);
|
||||
WriteInput(game.Input, writer);
|
||||
WriteDipSwitches(game.DipSwitch, writer);
|
||||
@@ -356,23 +357,26 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Write video information to the current writer
|
||||
/// </summary>
|
||||
/// <param name="video">Video object to write</param>
|
||||
/// <param name="videos">Array of Video objects to write</param>
|
||||
/// <param name="writer">ClrMameProWriter representing the output</param>
|
||||
private static void WriteVideo(Video? video, ClrMameProWriter writer)
|
||||
private static void WriteVideos(Video[]? videos, ClrMameProWriter writer)
|
||||
{
|
||||
// If the item is missing, we can't do anything
|
||||
if (video == null)
|
||||
if (videos == null)
|
||||
return;
|
||||
|
||||
writer.WriteStartElement("video");
|
||||
writer.WriteRequiredAttributeString("screen", video.Screen, throwOnError: true);
|
||||
writer.WriteRequiredAttributeString("orientation", video.Orientation, throwOnError: true);
|
||||
writer.WriteOptionalAttributeString("x", video.X);
|
||||
writer.WriteOptionalAttributeString("y", video.Y);
|
||||
writer.WriteOptionalAttributeString("aspectx", video.AspectX);
|
||||
writer.WriteOptionalAttributeString("aspecty", video.AspectY);
|
||||
writer.WriteOptionalAttributeString("freq", video.Freq);
|
||||
writer.WriteEndElement(); // video
|
||||
foreach (var video in videos)
|
||||
{
|
||||
writer.WriteStartElement("video");
|
||||
writer.WriteRequiredAttributeString("screen", video.Screen, throwOnError: true);
|
||||
writer.WriteRequiredAttributeString("orientation", video.Orientation, throwOnError: true);
|
||||
writer.WriteOptionalAttributeString("x", video.X);
|
||||
writer.WriteOptionalAttributeString("y", video.Y);
|
||||
writer.WriteOptionalAttributeString("aspectx", video.AspectX);
|
||||
writer.WriteOptionalAttributeString("aspecty", video.AspectY);
|
||||
writer.WriteOptionalAttributeString("freq", video.Freq);
|
||||
writer.WriteEndElement(); // video
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -461,15 +465,23 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.ClrMamePro.MetadataFile"/> to <cref="Models.Internal.MetadataFile"/>
|
||||
/// </summary>
|
||||
public static Models.Internal.MetadataFile ConvertToInternalModel(MetadataFile item)
|
||||
public static Models.Internal.MetadataFile? ConvertToInternalModel(MetadataFile? item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new Models.Internal.MetadataFile();
|
||||
|
||||
if (item?.ClrMamePro != null)
|
||||
metadataFile[Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item.ClrMamePro);
|
||||
|
||||
if (item?.Game != null && item.Game.Any())
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Game.Select(ConvertMachineToInternalModel).ToArray();
|
||||
{
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Game
|
||||
.Where(g => g != null)
|
||||
.Select(ConvertMachineToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
@@ -518,31 +530,76 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
if (item.Release != null && item.Release.Any())
|
||||
machine[Models.Internal.Machine.ReleaseKey] = item.Release?.Select(ConvertToInternalModel)?.ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.ReleaseKey] = item.Release
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.BiosSet != null && item.BiosSet.Any())
|
||||
machine[Models.Internal.Machine.BiosSetKey] = item.BiosSet?.Select(ConvertToInternalModel)?.ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.BiosSetKey] = item.BiosSet
|
||||
.Where(b => b != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Rom != null && item.Rom.Any())
|
||||
machine[Models.Internal.Machine.RomKey] = item.Rom?.Select(ConvertToInternalModel)?.ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.RomKey] = item.Rom
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Disk != null && item.Disk.Any())
|
||||
machine[Models.Internal.Machine.DiskKey] = item.Disk?.Select(ConvertToInternalModel)?.ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.DiskKey] = item.Disk
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Media != null && item.Media.Any())
|
||||
machine[Models.Internal.Machine.MediaKey] = item.Media?.Select(ConvertToInternalModel)?.ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.MediaKey] = item.Media
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Sample != null && item.Sample.Any())
|
||||
machine[Models.Internal.Machine.SampleKey] = item.Sample?.Select(ConvertToInternalModel)?.ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.SampleKey] = item.Sample
|
||||
.Where(s => s != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Archive != null && item.Archive.Any())
|
||||
machine[Models.Internal.Machine.ArchiveKey] = item.Archive?.Select(ConvertToInternalModel)?.ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.ArchiveKey] = item.Archive
|
||||
.Where(a => a != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Chip != null && item.Chip.Any())
|
||||
machine[Models.Internal.Machine.ChipKey] = item.Chip?.Select(ConvertToInternalModel)?.ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.ChipKey] = item.Chip
|
||||
.Where(c => c != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Video != null)
|
||||
machine[Models.Internal.Machine.VideoKey] = ConvertToInternalModel(item.Video);
|
||||
{
|
||||
machine[Models.Internal.Machine.VideoKey] = item.Video
|
||||
.Where(v => v != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Sound != null)
|
||||
machine[Models.Internal.Machine.SoundKey] = ConvertToInternalModel(item.Sound);
|
||||
@@ -551,7 +608,12 @@ namespace SabreTools.Serialization
|
||||
machine[Models.Internal.Machine.InputKey] = ConvertToInternalModel(item.Input);
|
||||
|
||||
if (item.DipSwitch != null && item.DipSwitch.Any())
|
||||
machine[Models.Internal.Machine.DipSwitchKey] = item.DipSwitch?.Select(ConvertToInternalModel)?.ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.DipSwitchKey] = item.DipSwitch
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Driver != null)
|
||||
machine[Models.Internal.Machine.DriverKey] = ConvertToInternalModel(item.Driver);
|
||||
|
||||
@@ -234,7 +234,12 @@ namespace SabreTools.Serialization
|
||||
|
||||
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||
if (machines != null && machines.Any())
|
||||
metadataFile.Game = machines.Select(ConvertMachineFromInternalModel).ToArray();
|
||||
{
|
||||
metadataFile.Game = machines
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertMachineFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
@@ -242,11 +247,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.DosCenter.DosCenter"/>
|
||||
/// </summary>
|
||||
private static Models.DosCenter.DosCenter? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
||||
private static Models.DosCenter.DosCenter ConvertHeaderFromInternalModel(Models.Internal.Header item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var dosCenter = new Models.DosCenter.DosCenter
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Header.NameKey),
|
||||
@@ -263,18 +265,21 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.DosCenter.Game"/>
|
||||
/// </summary>
|
||||
private static Game? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||
private static Game ConvertMachineFromInternalModel(Models.Internal.Machine item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var game = new Game
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Machine.NameKey),
|
||||
};
|
||||
|
||||
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
||||
game.File = roms?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (roms != null && roms.Any())
|
||||
{
|
||||
game.File = roms
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return game;
|
||||
}
|
||||
@@ -282,11 +287,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.DosCenter.File"/>
|
||||
/// </summary>
|
||||
private static Models.DosCenter.File? ConvertFromInternalModel(Models.Internal.Rom? item)
|
||||
private static Models.DosCenter.File ConvertFromInternalModel(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var file = new Models.DosCenter.File
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Rom.NameKey),
|
||||
|
||||
@@ -151,15 +151,23 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.DosCenter.MetadataFile"/> to <cref="Models.Internal.MetadataFile"/>
|
||||
/// </summary>
|
||||
public static Models.Internal.MetadataFile ConvertToInternalModel(MetadataFile item)
|
||||
public static Models.Internal.MetadataFile? ConvertToInternalModel(MetadataFile? item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new Models.Internal.MetadataFile();
|
||||
|
||||
if (item?.DosCenter != null)
|
||||
metadataFile[Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item.DosCenter);
|
||||
|
||||
if (item?.Game != null && item.Game.Any())
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Game.Select(ConvertMachineToInternalModel).ToArray();
|
||||
{
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Game
|
||||
.Where(g => g != null)
|
||||
.Select(ConvertMachineToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
@@ -193,7 +201,12 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
if (item.File != null && item.File.Any())
|
||||
machine[Models.Internal.Machine.RomKey] = item.File.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.RomKey] = item.File
|
||||
.Where(f => f != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return machine;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
@@ -91,7 +92,12 @@ namespace SabreTools.Serialization
|
||||
|
||||
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||
if (machines != null && machines.Any())
|
||||
metadataFile.Row = machines.SelectMany(ConvertMachineFromInternalModel).ToArray();
|
||||
{
|
||||
metadataFile.Row = machines
|
||||
.Where(m => m != null)
|
||||
.SelectMany(ConvertMachineFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
@@ -99,23 +105,23 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Machine"/> to an array of <cref="Models.EverdriveSMDB.Row"/>
|
||||
/// </summary>
|
||||
private static Row[]? ConvertMachineFromInternalModel(Models.Internal.Machine item)
|
||||
private static Row[] ConvertMachineFromInternalModel(Models.Internal.Machine item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
||||
return roms?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (roms == null || !roms.Any())
|
||||
return Array.Empty<Row>();
|
||||
|
||||
return roms
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.EverdriveSMDB.Row"/>
|
||||
/// </summary>
|
||||
private static Row? ConvertFromInternalModel(Models.Internal.Rom? item)
|
||||
private static Row ConvertFromInternalModel(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var row = new Row
|
||||
{
|
||||
SHA256 = item.ReadString(Models.Internal.Rom.SHA256Key),
|
||||
|
||||
@@ -88,15 +88,23 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.EverdriveSMDB.MetadataFile"/> to <cref="Models.Internal.MetadataFile"/>
|
||||
/// </summary>
|
||||
public static Models.Internal.MetadataFile ConvertToInternalModel(MetadataFile item)
|
||||
public static Models.Internal.MetadataFile? ConvertToInternalModel(MetadataFile? item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new Models.Internal.MetadataFile
|
||||
{
|
||||
[Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item),
|
||||
};
|
||||
|
||||
if (item?.Row != null && item.Row.Any())
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Row.Select(ConvertMachineToInternalModel).ToArray();
|
||||
{
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Row
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertMachineToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
|
||||
@@ -147,14 +147,82 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.MetadataFile"/> to an array of <cref="Models.Hashfile.Hashfile"/>
|
||||
/// </summary>
|
||||
public static Models.Hashfile.Hashfile[]? ConvertFromInternalModel(Models.Internal.MetadataFile? item, Hash hash)
|
||||
/// <remarks>TODO: Add machine name prefixes to all items</remarks>
|
||||
public static Models.Hashfile.Hashfile? ConvertFromInternalModel(Models.Internal.MetadataFile? item, Hash hash)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||
if (machines == null || !machines.Any())
|
||||
return null;
|
||||
|
||||
var hashfiles = machines
|
||||
.Where(m => m != null)
|
||||
.Select(machine => ConvertMachineFromInternalModel(machine, hash));
|
||||
|
||||
var sfvs = new List<SFV>();
|
||||
var md5s = new List<MD5>();
|
||||
var sha1s = new List<SHA1>();
|
||||
var sha256s = new List<SHA256>();
|
||||
var sha384s = new List<SHA384>();
|
||||
var sha512s = new List<SHA512>();
|
||||
var spamsums = new List<SpamSum>();
|
||||
|
||||
foreach (var hashfile in hashfiles)
|
||||
{
|
||||
if (hashfile.SFV != null && hashfile.SFV.Any())
|
||||
sfvs.AddRange(hashfile.SFV);
|
||||
if (hashfile.MD5 != null && hashfile.MD5.Any())
|
||||
md5s.AddRange(hashfile.MD5);
|
||||
if (hashfile.SHA1 != null && hashfile.SHA1.Any())
|
||||
sha1s.AddRange(hashfile.SHA1);
|
||||
if (hashfile.SHA256 != null && hashfile.SHA256.Any())
|
||||
sha256s.AddRange(hashfile.SHA256);
|
||||
if (hashfile.SHA384 != null && hashfile.SHA384.Any())
|
||||
sha384s.AddRange(hashfile.SHA384);
|
||||
if (hashfile.SHA512 != null && hashfile.SHA512.Any())
|
||||
sha512s.AddRange(hashfile.SHA512);
|
||||
if (hashfile.SpamSum != null && hashfile.SpamSum.Any())
|
||||
spamsums.AddRange(hashfile.SpamSum);
|
||||
}
|
||||
|
||||
var hashfileItem = new Models.Hashfile.Hashfile();
|
||||
|
||||
if (sfvs.Any())
|
||||
hashfileItem.SFV = sfvs.ToArray();
|
||||
if (md5s.Any())
|
||||
hashfileItem.MD5 = md5s.ToArray();
|
||||
if (sha1s.Any())
|
||||
hashfileItem.SHA1 = sha1s.ToArray();
|
||||
if (sha256s.Any())
|
||||
hashfileItem.SHA256 = sha256s.ToArray();
|
||||
if (sha384s.Any())
|
||||
hashfileItem.SHA384 = sha384s.ToArray();
|
||||
if (sha512s.Any())
|
||||
hashfileItem.SHA512 = sha512s.ToArray();
|
||||
if (spamsums.Any())
|
||||
hashfileItem.SpamSum = spamsums.ToArray();
|
||||
|
||||
return hashfileItem;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.MetadataFile"/> to an array of <cref="Models.Hashfile.Hashfile"/>
|
||||
/// </summary>
|
||||
public static Models.Hashfile.Hashfile[]? ConvertArrayFromInternalModel(Models.Internal.MetadataFile? item, Hash hash)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||
if (machines != null && machines.Any())
|
||||
return machines.Select(machine => ConvertMachineFromInternalModel(machine, hash)).ToArray();
|
||||
{
|
||||
return machines
|
||||
.Where(m => m != null)
|
||||
.Select(machine => ConvertMachineFromInternalModel(machine, hash))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
@@ -162,32 +230,64 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.Hashfile.Hashfile"/>
|
||||
/// </summary>
|
||||
private static Models.Hashfile.Hashfile? ConvertMachineFromInternalModel(Models.Internal.Machine? item, Hash hash)
|
||||
private static Models.Hashfile.Hashfile ConvertMachineFromInternalModel(Models.Internal.Machine item, Hash hash)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
||||
if (roms == null)
|
||||
return new Models.Hashfile.Hashfile();
|
||||
|
||||
return new Models.Hashfile.Hashfile
|
||||
{
|
||||
SFV = hash == Hash.CRC ? roms?.Select(ConvertToSFV)?.ToArray() : null,
|
||||
MD5 = hash == Hash.MD5 ? roms?.Select(ConvertToMD5)?.ToArray() : null,
|
||||
SHA1 = hash == Hash.SHA1 ? roms?.Select(ConvertToSHA1)?.ToArray() : null,
|
||||
SHA256 = hash == Hash.SHA256 ? roms?.Select(ConvertToSHA256)?.ToArray() : null,
|
||||
SHA384 = hash == Hash.SHA384 ? roms?.Select(ConvertToSHA384)?.ToArray() : null,
|
||||
SHA512 = hash == Hash.SHA512 ? roms?.Select(ConvertToSHA512)?.ToArray() : null,
|
||||
SpamSum = hash == Hash.SpamSum ? roms?.Select(ConvertToSpamSum)?.ToArray() : null,
|
||||
SFV = hash == Hash.CRC
|
||||
? roms
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertToSFV)
|
||||
.ToArray()
|
||||
: null,
|
||||
MD5 = hash == Hash.MD5
|
||||
? roms
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertToMD5)
|
||||
.ToArray()
|
||||
: null,
|
||||
SHA1 = hash == Hash.SHA1
|
||||
? roms
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertToSHA1)
|
||||
.ToArray()
|
||||
: null,
|
||||
SHA256 = hash == Hash.SHA256
|
||||
? roms
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertToSHA256)
|
||||
.ToArray()
|
||||
: null,
|
||||
SHA384 = hash == Hash.SHA384
|
||||
? roms
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertToSHA384)
|
||||
.ToArray()
|
||||
: null,
|
||||
SHA512 = hash == Hash.SHA512
|
||||
? roms
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertToSHA512)
|
||||
.ToArray()
|
||||
: null,
|
||||
SpamSum = hash == Hash.SpamSum
|
||||
? roms
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertToSpamSum)
|
||||
.ToArray()
|
||||
: null,
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.Hashfile.MD5"/>
|
||||
/// </summary>
|
||||
private static MD5? ConvertToMD5(Models.Internal.Rom? item)
|
||||
private static MD5 ConvertToMD5(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var md5 = new MD5
|
||||
{
|
||||
Hash = item.ReadString(Models.Internal.Rom.MD5Key),
|
||||
@@ -199,11 +299,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.Hashfile.SFV"/>
|
||||
/// </summary>
|
||||
private static SFV? ConvertToSFV(Models.Internal.Rom? item)
|
||||
private static SFV ConvertToSFV(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var sfv = new SFV
|
||||
{
|
||||
File = item.ReadString(Models.Internal.Rom.NameKey),
|
||||
@@ -215,11 +312,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.Hashfile.SHA1"/>
|
||||
/// </summary>
|
||||
private static SHA1? ConvertToSHA1(Models.Internal.Rom? item)
|
||||
private static SHA1 ConvertToSHA1(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var sha1 = new SHA1
|
||||
{
|
||||
Hash = item.ReadString(Models.Internal.Rom.SHA1Key),
|
||||
@@ -231,11 +325,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.Hashfile.SHA256"/>
|
||||
/// </summary>
|
||||
private static SHA256? ConvertToSHA256(Models.Internal.Rom? item)
|
||||
private static SHA256 ConvertToSHA256(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var sha256 = new SHA256
|
||||
{
|
||||
Hash = item.ReadString(Models.Internal.Rom.SHA256Key),
|
||||
@@ -247,11 +338,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.Hashfile.SHA384"/>
|
||||
/// </summary>
|
||||
private static SHA384? ConvertToSHA384(Models.Internal.Rom? item)
|
||||
private static SHA384 ConvertToSHA384(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var sha384 = new SHA384
|
||||
{
|
||||
Hash = item.ReadString(Models.Internal.Rom.SHA384Key),
|
||||
@@ -263,11 +351,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.Hashfile.SHA512"/>
|
||||
/// </summary>
|
||||
private static SHA512? ConvertToSHA512(Models.Internal.Rom? item)
|
||||
private static SHA512 ConvertToSHA512(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var sha512 = new SHA512
|
||||
{
|
||||
Hash = item.ReadString(Models.Internal.Rom.SHA512Key),
|
||||
@@ -279,11 +364,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.Hashfile.SpamSum"/>
|
||||
/// </summary>
|
||||
private static SpamSum? ConvertToSpamSum(Models.Internal.Rom? item)
|
||||
private static SpamSum ConvertToSpamSum(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var spamsum = new SpamSum
|
||||
{
|
||||
Hash = item.ReadString(Models.Internal.Rom.SpamSumKey),
|
||||
|
||||
@@ -223,8 +223,11 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Hashfile.Hashfile"/> to <cref="Models.Internal.MetadataFile"/>
|
||||
/// </summary>
|
||||
public static Models.Internal.MetadataFile ConvertToInternalModel(Models.Hashfile.Hashfile item)
|
||||
public static Models.Internal.MetadataFile? ConvertToInternalModel(Models.Hashfile.Hashfile? item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new Models.Internal.MetadataFile
|
||||
{
|
||||
[Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item),
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using SabreTools.Models.Internal;
|
||||
@@ -6,6 +7,31 @@ namespace SabreTools.Serialization
|
||||
{
|
||||
public class Internal
|
||||
{
|
||||
/// <summary>
|
||||
/// Extract nested items from a Dump
|
||||
/// </summary>
|
||||
public static DatItem[]? ExtractItems(Dump? item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var datItems = new List<DatItem>();
|
||||
|
||||
var rom = item.Read<Rom>(Dump.RomKey);
|
||||
if (rom != null)
|
||||
datItems.Add(rom);
|
||||
|
||||
var megaRom = item.Read<Rom>(Dump.MegaRomKey);
|
||||
if (megaRom != null)
|
||||
datItems.Add(megaRom);
|
||||
|
||||
var sccPlusCart = item.Read<Rom>(Dump.SCCPlusCartKey);
|
||||
if (sccPlusCart != null)
|
||||
datItems.Add(sccPlusCart);
|
||||
|
||||
return datItems.ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Extract nested items from a Part
|
||||
/// </summary>
|
||||
@@ -22,15 +48,26 @@ namespace SabreTools.Serialization
|
||||
|
||||
var dataAreas = item.Read<DataArea[]>(Part.DataAreaKey);
|
||||
if (dataAreas != null && dataAreas.Any())
|
||||
datItems.AddRange(dataAreas.SelectMany(ExtractItems));
|
||||
{
|
||||
datItems.AddRange(dataAreas
|
||||
.Where(d => d != null)
|
||||
.SelectMany(ExtractItems));
|
||||
}
|
||||
|
||||
var diskAreas = item.Read<DiskArea[]>(Part.DiskAreaKey);
|
||||
if (diskAreas != null && diskAreas.Any())
|
||||
datItems.AddRange(diskAreas.SelectMany(ExtractItems));
|
||||
{
|
||||
datItems.AddRange(diskAreas
|
||||
.Where(d => d != null)
|
||||
.SelectMany(ExtractItems));
|
||||
}
|
||||
|
||||
var dipSwitches = item.Read<DipSwitch[]>(Part.DipSwitchKey);
|
||||
if (dipSwitches != null && dipSwitches.Any())
|
||||
datItems.AddRange(dipSwitches);
|
||||
{
|
||||
datItems.AddRange(dipSwitches
|
||||
.Where(d => d != null));
|
||||
}
|
||||
|
||||
return datItems.ToArray();
|
||||
}
|
||||
@@ -38,23 +75,25 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Extract nested items from a DataArea
|
||||
/// </summary>
|
||||
private static Rom[]? ExtractItems(DataArea? item)
|
||||
private static Rom[] ExtractItems(DataArea item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
var roms = item.Read<Rom[]>(DataArea.RomKey);
|
||||
if (roms == null || !roms.Any())
|
||||
return Array.Empty<Rom>();
|
||||
|
||||
return item.Read<Rom[]>(DataArea.RomKey);
|
||||
return roms.ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Extract nested items from a DiskArea
|
||||
/// </summary>
|
||||
private static Disk[]? ExtractItems(DiskArea? item)
|
||||
private static Disk[] ExtractItems(DiskArea item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
var roms = item.Read<Disk[]>(DiskArea.DiskKey);
|
||||
if (roms == null || !roms.Any())
|
||||
return Array.Empty<Disk>();
|
||||
|
||||
return item.Read<Disk[]>(DiskArea.DiskKey);
|
||||
return roms.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -202,7 +202,12 @@ namespace SabreTools.Serialization
|
||||
|
||||
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||
if (machines != null && machines.Any())
|
||||
metadataFile.Set = machines.Select(ConvertMachineFromInternalModel).ToArray();
|
||||
{
|
||||
metadataFile.Set = machines
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertMachineFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
@@ -210,11 +215,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.Listrom.Set"/>
|
||||
/// </summary>
|
||||
private static Set? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||
private static Set ConvertMachineFromInternalModel(Models.Internal.Machine item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var set = new Set();
|
||||
if (item.ReadString(Models.Internal.Machine.IsDeviceKey) == "yes")
|
||||
set.Device = item.ReadString(Models.Internal.Machine.NameKey);
|
||||
@@ -225,11 +227,13 @@ namespace SabreTools.Serialization
|
||||
|
||||
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
||||
if (roms != null)
|
||||
rowItems.AddRange(roms.Select(ConvertFromInternalModel));
|
||||
{
|
||||
rowItems.AddRange(roms.Where(r => r != null).Select(ConvertFromInternalModel));
|
||||
}
|
||||
|
||||
var disks = item.Read<Models.Internal.Disk[]>(Models.Internal.Machine.DiskKey);
|
||||
if (disks != null)
|
||||
rowItems.AddRange(disks.Select(ConvertFromInternalModel));
|
||||
rowItems.AddRange(disks.Where(d => d != null).Select(ConvertFromInternalModel));
|
||||
|
||||
set.Row = rowItems.ToArray();
|
||||
return set;
|
||||
@@ -238,11 +242,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Disk"/> to <cref="Models.Listrom.Row"/>
|
||||
/// </summary>
|
||||
private static Row? ConvertFromInternalModel(Models.Internal.Disk? item)
|
||||
private static Row ConvertFromInternalModel(Models.Internal.Disk item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var row = new Row
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Disk.NameKey),
|
||||
@@ -261,11 +262,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.Listrom.Row"/>
|
||||
/// </summary>
|
||||
private static Row? ConvertFromInternalModel(Models.Internal.Rom? item)
|
||||
private static Row ConvertFromInternalModel(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var row = new Row
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Rom.NameKey),
|
||||
|
||||
@@ -182,15 +182,23 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Listrom.MetadataFile"/> to <cref="Models.Internal.MetadataFile"/>
|
||||
/// </summary>
|
||||
public static Models.Internal.MetadataFile ConvertToInternalModel(MetadataFile item)
|
||||
public static Models.Internal.MetadataFile? ConvertToInternalModel(MetadataFile? item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new Models.Internal.MetadataFile
|
||||
{
|
||||
[Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item),
|
||||
};
|
||||
|
||||
if (item?.Set != null && item.Set.Any())
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Set.Select(ConvertMachineToInternalModel).ToArray();
|
||||
{
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Set
|
||||
.Where(s => s != null)
|
||||
.Select(ConvertMachineToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ namespace SabreTools.Serialization
|
||||
#region Internal
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.MetadataFile"/> to <cref="Models.Listxml.M1"/>
|
||||
/// Convert from <cref="Models.Internal.Models.Internal.MetadataFile"/> to <cref="Models.Listxml.M1"/>
|
||||
/// </summary>
|
||||
public static M1? ConvertM1FromInternalModel(Models.Internal.MetadataFile? item)
|
||||
{
|
||||
@@ -23,13 +23,18 @@ namespace SabreTools.Serialization
|
||||
|
||||
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||
if (machines != null && machines.Any())
|
||||
m1.Game = machines.Select(ConvertMachineFromInternalModel).ToArray();
|
||||
{
|
||||
m1.Game = machines
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertMachineFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return m1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.MetadataFile"/> to <cref="Models.Listxml.Mame"/>
|
||||
/// Convert from <cref="Models.Internal.Models.Internal.MetadataFile"/> to <cref="Models.Listxml.Mame"/>
|
||||
/// </summary>
|
||||
public static Mame? ConvertMameFromInternalModel(Models.Internal.MetadataFile? item)
|
||||
{
|
||||
@@ -41,19 +46,21 @@ namespace SabreTools.Serialization
|
||||
|
||||
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||
if (machines != null && machines.Any())
|
||||
mame.Game = machines.Select(ConvertMachineFromInternalModel).ToArray();
|
||||
{
|
||||
mame.Game = machines
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertMachineFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return mame;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.Listxml.M1"/>
|
||||
/// Convert from <cref="Models.Internal.Models.Internal.Header"/> to <cref="Models.Listxml.M1"/>
|
||||
/// </summary>
|
||||
private static M1? ConvertM1FromInternalModel(Models.Internal.Header? item)
|
||||
private static M1 ConvertM1FromInternalModel(Models.Internal.Header item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var m1 = new M1
|
||||
{
|
||||
Version = item.ReadString(Models.Internal.Header.VersionKey),
|
||||
@@ -62,13 +69,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.Listxml.Mame"/>
|
||||
/// Convert from <cref="Models.Internal.Models.Internal.Header"/> to <cref="Models.Listxml.Mame"/>
|
||||
/// </summary>
|
||||
private static Mame? ConvertMameFromInternalModel(Models.Internal.Header? item)
|
||||
private static Mame ConvertMameFromInternalModel(Models.Internal.Header item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var mame = new Mame
|
||||
{
|
||||
Build = item.ReadString(Models.Internal.Header.BuildKey),
|
||||
@@ -80,13 +84,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.Listxml.GameBase"/>
|
||||
/// Convert from <cref="Models.Internal.Models.Internal.Machine"/> to <cref="Models.Listxml.GameBase"/>
|
||||
/// </summary>
|
||||
private static GameBase? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||
private static GameBase ConvertMachineFromInternalModel(Models.Internal.Machine item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var machine = new Machine
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Machine.NameKey),
|
||||
@@ -105,76 +106,178 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
var biosSets = item.Read<Models.Internal.BiosSet[]>(Models.Internal.Machine.BiosSetKey);
|
||||
machine.BiosSet = biosSets?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (biosSets != null && biosSets.Any())
|
||||
{
|
||||
machine.BiosSet = biosSets
|
||||
.Where(b => b != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
||||
machine.Rom = roms?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (roms != null && roms.Any())
|
||||
{
|
||||
machine.Rom = roms
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var disks = item.Read<Models.Internal.Disk[]>(Models.Internal.Machine.DiskKey);
|
||||
machine.Disk = disks?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (disks != null && disks.Any())
|
||||
{
|
||||
machine.Disk = disks
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var deviceRefs = item.Read<Models.Internal.DeviceRef[]>(Models.Internal.Machine.DeviceRefKey);
|
||||
machine.DeviceRef = deviceRefs?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (deviceRefs != null && deviceRefs.Any())
|
||||
{
|
||||
machine.DeviceRef = deviceRefs
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var samples = item.Read<Models.Internal.Sample[]>(Models.Internal.Machine.SampleKey);
|
||||
machine.Sample = samples?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (samples != null && samples.Any())
|
||||
{
|
||||
machine.Sample = samples
|
||||
.Where(s => s != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var chips = item.Read<Models.Internal.Chip[]>(Models.Internal.Machine.ChipKey);
|
||||
machine.Chip = chips?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (chips != null && chips.Any())
|
||||
{
|
||||
machine.Chip = chips
|
||||
.Where(c => c != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var displays = item.Read<Models.Internal.Display[]>(Models.Internal.Machine.DisplayKey);
|
||||
machine.Display = displays?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (displays != null && displays.Any())
|
||||
{
|
||||
machine.Display = displays
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var videos = item.Read<Models.Internal.Video[]>(Models.Internal.Machine.VideoKey);
|
||||
machine.Video = videos?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (videos != null && videos.Any())
|
||||
{
|
||||
machine.Video = videos
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var sound = item.Read<Models.Internal.Sound>(Models.Internal.Machine.SoundKey);
|
||||
machine.Sound = ConvertFromInternalModel(sound);
|
||||
if (sound != null)
|
||||
machine.Sound = ConvertFromInternalModel(sound);
|
||||
|
||||
var input = item.Read<Models.Internal.Input>(Models.Internal.Machine.InputKey);
|
||||
machine.Input = ConvertFromInternalModel(input);
|
||||
if (input != null)
|
||||
machine.Input = ConvertFromInternalModel(input);
|
||||
|
||||
var dipSwitches = item.Read<Models.Internal.DipSwitch[]>(Models.Internal.Machine.DipSwitchKey);
|
||||
machine.DipSwitch = dipSwitches?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (dipSwitches != null && dipSwitches.Any())
|
||||
{
|
||||
machine.DipSwitch = dipSwitches
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var configurations = item.Read<Models.Internal.Configuration[]>(Models.Internal.Machine.ConfigurationKey);
|
||||
machine.Configuration = configurations?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (configurations != null && configurations.Any())
|
||||
{
|
||||
machine.Configuration = configurations
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var ports = item.Read<Models.Internal.Port[]>(Models.Internal.Machine.PortKey);
|
||||
machine.Port = ports?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (ports != null && ports.Any())
|
||||
{
|
||||
machine.Port = ports
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var adjusters = item.Read<Models.Internal.Adjuster[]>(Models.Internal.Machine.AdjusterKey);
|
||||
machine.Adjuster = adjusters?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (adjusters != null && adjusters.Any())
|
||||
{
|
||||
machine.Adjuster = adjusters
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var driver = item.Read<Models.Internal.Driver>(Models.Internal.Machine.DriverKey);
|
||||
machine.Driver = ConvertFromInternalModel(driver);
|
||||
if (driver != null)
|
||||
machine.Driver = ConvertFromInternalModel(driver);
|
||||
|
||||
var features = item.Read<Models.Internal.Feature[]>(Models.Internal.Machine.FeatureKey);
|
||||
machine.Feature = features?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (features != null && features.Any())
|
||||
{
|
||||
machine.Feature = features
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var devices = item.Read<Models.Internal.Device[]>(Models.Internal.Machine.DeviceKey);
|
||||
machine.Device = devices?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (devices != null && devices.Any())
|
||||
{
|
||||
machine.Device = devices
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var slots = item.Read<Models.Internal.Slot[]>(Models.Internal.Machine.SlotKey);
|
||||
machine.Slot = slots?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (slots != null && slots.Any())
|
||||
{
|
||||
machine.Slot = slots
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var softwareLists = item.Read<Models.Internal.SoftwareList[]>(Models.Internal.Machine.SoftwareListKey);
|
||||
machine.SoftwareList = softwareLists?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (softwareLists != null && softwareLists.Any())
|
||||
{
|
||||
machine.SoftwareList = softwareLists
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var ramOptions = item.Read<Models.Internal.RamOption[]>(Models.Internal.Machine.RamOptionKey);
|
||||
machine.RamOption = ramOptions?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (ramOptions != null && ramOptions.Any())
|
||||
{
|
||||
machine.RamOption = ramOptions
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return machine;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Adjuster"/> to <cref="Models.Listxml.Adjuster"/>
|
||||
/// Convert from <cref="Models.Internal.Models.Internal.Adjuster"/> to <cref="Models.Listxml.Adjuster"/>
|
||||
/// </summary>
|
||||
private static Adjuster? ConvertFromInternalModel(Models.Internal.Adjuster? item)
|
||||
private static Adjuster ConvertFromInternalModel(Models.Internal.Adjuster item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var adjuster = new Adjuster
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Adjuster.NameKey),
|
||||
@@ -182,19 +285,17 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
var condition = item.Read<Models.Internal.Condition>(Models.Internal.Adjuster.ConditionKey);
|
||||
adjuster.Condition = ConvertFromInternalModel(condition);
|
||||
if (condition != null)
|
||||
adjuster.Condition = ConvertFromInternalModel(condition);
|
||||
|
||||
return adjuster;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Analog"/> to <cref="Models.Listxml.Analog"/>
|
||||
/// Convert from <cref="Models.Internal.Models.Internal.Analog"/> to <cref="Models.Listxml.Analog"/>
|
||||
/// </summary>
|
||||
private static Analog? ConvertFromInternalModel(Models.Internal.Analog? item)
|
||||
private static Analog ConvertFromInternalModel(Models.Internal.Analog item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var analog = new Analog
|
||||
{
|
||||
Mask = item.ReadString(Models.Internal.Analog.MaskKey),
|
||||
@@ -203,13 +304,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.BiosSet"/> to <cref="Models.Listxml.BiosSet"/>
|
||||
/// Convert from <cref="Models.Internal.Models.Internal.BiosSet"/> to <cref="Models.Listxml.BiosSet"/>
|
||||
/// </summary>
|
||||
private static BiosSet? ConvertFromInternalModel(Models.Internal.BiosSet? item)
|
||||
private static BiosSet ConvertFromInternalModel(Models.Internal.BiosSet item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var biosset = new BiosSet
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.BiosSet.NameKey),
|
||||
@@ -220,13 +318,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Chip"/> to <cref="Models.Listxml.Chip"/>
|
||||
/// Convert from <cref="Models.Internal.Models.Internal.Chip"/> to <cref="Models.Listxml.Chip"/>
|
||||
/// </summary>
|
||||
private static Chip? ConvertFromInternalModel(Models.Internal.Chip? item)
|
||||
private static Chip ConvertFromInternalModel(Models.Internal.Chip item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var chip = new Chip
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Chip.NameKey),
|
||||
@@ -239,13 +334,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Condition"/> to <cref="Models.Listxml.Condition"/>
|
||||
/// Convert from <cref="Models.Internal.Models.Internal.Condition"/> to <cref="Models.Listxml.Condition"/>
|
||||
/// </summary>
|
||||
private static Condition? ConvertFromInternalModel(Models.Internal.Condition? item)
|
||||
private static Condition ConvertFromInternalModel(Models.Internal.Condition item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var condition = new Condition
|
||||
{
|
||||
Tag = item.ReadString(Models.Internal.Condition.TagKey),
|
||||
@@ -257,13 +349,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Configuration"/> to <cref="Models.Listxml.Configuration"/>
|
||||
/// Convert from <cref="Models.Internal.Models.Internal.Configuration"/> to <cref="Models.Listxml.Configuration"/>
|
||||
/// </summary>
|
||||
private static Configuration? ConvertFromInternalModel(Models.Internal.Configuration? item)
|
||||
private static Configuration ConvertFromInternalModel(Models.Internal.Configuration item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var configuration = new Configuration
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Configuration.NameKey),
|
||||
@@ -272,25 +361,35 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
var condition = item.Read<Models.Internal.Condition>(Models.Internal.Configuration.ConditionKey);
|
||||
configuration.Condition = ConvertFromInternalModel(condition);
|
||||
if (condition != null)
|
||||
configuration.Condition = ConvertFromInternalModel(condition);
|
||||
|
||||
var confLocations = item.Read<Models.Internal.ConfLocation[]>(Models.Internal.Configuration.ConfLocationKey);
|
||||
configuration.ConfLocation = confLocations?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (confLocations != null && confLocations.Any())
|
||||
{
|
||||
configuration.ConfLocation = confLocations
|
||||
.Where(c => c != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var confSettings = item.Read<Models.Internal.ConfSetting[]>(Models.Internal.Configuration.ConfSettingKey);
|
||||
configuration.ConfSetting = confSettings?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (confSettings != null && confSettings.Any())
|
||||
{
|
||||
configuration.ConfSetting = confSettings
|
||||
.Where(c => c != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return configuration;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.ConfLocation"/> to <cref="Models.Listxml.ConfLocation"/>
|
||||
/// Convert from <cref="Models.Internal.Models.Internal.ConfLocation"/> to <cref="Models.Listxml.ConfLocation"/>
|
||||
/// </summary>
|
||||
private static ConfLocation? ConvertFromInternalModel(Models.Internal.ConfLocation? item)
|
||||
private static ConfLocation ConvertFromInternalModel(Models.Internal.ConfLocation item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var confLocation = new ConfLocation
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.ConfLocation.NameKey),
|
||||
@@ -301,13 +400,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.ConfSetting"/> to <cref="Models.Listxml.ConfSetting"/>
|
||||
/// Convert from <cref="Models.Internal.Models.Internal.ConfSetting"/> to <cref="Models.Listxml.ConfSetting"/>
|
||||
/// </summary>
|
||||
private static ConfSetting? ConvertFromInternalModel(Models.Internal.ConfSetting? item)
|
||||
private static ConfSetting ConvertFromInternalModel(Models.Internal.ConfSetting item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var confSetting = new ConfSetting
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.ConfSetting.NameKey),
|
||||
@@ -316,19 +412,17 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
var condition = item.Read<Models.Internal.Condition>(Models.Internal.ConfSetting.ConditionKey);
|
||||
confSetting.Condition = ConvertFromInternalModel(condition);
|
||||
if (condition != null)
|
||||
confSetting.Condition = ConvertFromInternalModel(condition);
|
||||
|
||||
return confSetting;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Control"/> to <cref="Models.Listxml.Control"/>
|
||||
/// Convert from <cref="Models.Internal.Models.Internal.Control"/> to <cref="Models.Listxml.Control"/>
|
||||
/// </summary>
|
||||
private static Control? ConvertFromInternalModel(Models.Internal.Control? item)
|
||||
private static Control ConvertFromInternalModel(Models.Internal.Control item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var control = new Control
|
||||
{
|
||||
Type = item.ReadString(Models.Internal.Control.TypeKey),
|
||||
@@ -348,13 +442,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Device"/> to <cref="Models.Listxml.Device"/>
|
||||
/// Convert from <cref="Models.Internal.Models.Internal.Device"/> to <cref="Models.Listxml.Device"/>
|
||||
/// </summary>
|
||||
private static Device? ConvertFromInternalModel(Models.Internal.Device? item)
|
||||
private static Device ConvertFromInternalModel(Models.Internal.Device item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var device = new Device
|
||||
{
|
||||
Type = item.ReadString(Models.Internal.Device.TypeKey),
|
||||
@@ -365,22 +456,26 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
var instance = item.Read<Models.Internal.Instance>(Models.Internal.Device.InstanceKey);
|
||||
device.Instance = ConvertFromInternalModel(instance);
|
||||
if (instance != null)
|
||||
device.Instance = ConvertFromInternalModel(instance);
|
||||
|
||||
var extensions = item.Read<Models.Internal.Extension[]>(Models.Internal.Device.ExtensionKey);
|
||||
device.Extension = extensions?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (extensions != null && extensions.Any())
|
||||
{
|
||||
device.Extension = extensions
|
||||
.Where(e => e != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return device;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="DeviceRef"/> to <cref="Models.Listxml.DeviceRef"/>
|
||||
/// Convert from <cref="Models.Internal.DeviceRef"/> to <cref="Models.Listxml.DeviceRef"/>
|
||||
/// </summary>
|
||||
private static DeviceRef? ConvertFromInternalModel(Models.Internal.DeviceRef? item)
|
||||
private static DeviceRef ConvertFromInternalModel(Models.Internal.DeviceRef item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var deviceRef = new DeviceRef
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.DeviceRef.NameKey),
|
||||
@@ -389,13 +484,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="DipLocation"/> to <cref="Models.Listxml.DipLocation"/>
|
||||
/// Convert from <cref="Models.Internal.DipLocation"/> to <cref="Models.Listxml.DipLocation"/>
|
||||
/// </summary>
|
||||
private static DipLocation? ConvertFromInternalModel(Models.Internal.DipLocation? item)
|
||||
private static DipLocation ConvertFromInternalModel(Models.Internal.DipLocation item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var dipLocation = new DipLocation
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.DipLocation.NameKey),
|
||||
@@ -406,13 +498,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="DipSwitch"/> to <cref="Models.Listxml.DipSwitch"/>
|
||||
/// Convert from <cref="Models.Internal.DipSwitch"/> to <cref="Models.Listxml.DipSwitch"/>
|
||||
/// </summary>
|
||||
private static DipSwitch? ConvertFromInternalModel(Models.Internal.DipSwitch? item)
|
||||
private static DipSwitch ConvertFromInternalModel(Models.Internal.DipSwitch item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var dipSwitch = new DipSwitch
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.DipSwitch.NameKey),
|
||||
@@ -421,25 +510,35 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
var condition = item.Read<Models.Internal.Condition>(Models.Internal.DipSwitch.ConditionKey);
|
||||
dipSwitch.Condition = ConvertFromInternalModel(condition);
|
||||
if (condition != null)
|
||||
dipSwitch.Condition = ConvertFromInternalModel(condition);
|
||||
|
||||
var dipLocations = item.Read<Models.Internal.DipLocation[]>(Models.Internal.DipSwitch.DipLocationKey);
|
||||
dipSwitch.DipLocation = dipLocations?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (dipLocations != null && dipLocations.Any())
|
||||
{
|
||||
dipSwitch.DipLocation = dipLocations
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var dipValues = item.Read<Models.Internal.DipValue[]>(Models.Internal.DipSwitch.DipValueKey);
|
||||
dipSwitch.DipValue = dipValues?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (dipValues != null && dipValues.Any())
|
||||
{
|
||||
dipSwitch.DipValue = dipValues
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return dipSwitch;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="DipValue"/> to <cref="Models.Listxml.DipValue"/>
|
||||
/// Convert from <cref="Models.Internal.DipValue"/> to <cref="Models.Listxml.DipValue"/>
|
||||
/// </summary>
|
||||
private static DipValue? ConvertFromInternalModel(Models.Internal.DipValue? item)
|
||||
private static DipValue ConvertFromInternalModel(Models.Internal.DipValue item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var dipValue = new DipValue
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.DipValue.NameKey),
|
||||
@@ -448,19 +547,17 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
var condition = item.Read<Models.Internal.Condition>(Models.Internal.DipValue.ConditionKey);
|
||||
dipValue.Condition = ConvertFromInternalModel(condition);
|
||||
if (condition != null)
|
||||
dipValue.Condition = ConvertFromInternalModel(condition);
|
||||
|
||||
return dipValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Disk"/> to <cref="Models.Listxml.Disk"/>
|
||||
/// Convert from <cref="Models.Internal.Disk"/> to <cref="Models.Listxml.Disk"/>
|
||||
/// </summary>
|
||||
private static Disk? ConvertFromInternalModel(Models.Internal.Disk? item)
|
||||
private static Disk ConvertFromInternalModel(Models.Internal.Disk item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var disk = new Disk
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Disk.NameKey),
|
||||
@@ -477,13 +574,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Display"/> to <cref="Models.Listxml.Display"/>
|
||||
/// Convert from <cref="Models.Internal.Display"/> to <cref="Models.Listxml.Display"/>
|
||||
/// </summary>
|
||||
private static Display? ConvertFromInternalModel(Models.Internal.Display? item)
|
||||
private static Display ConvertFromInternalModel(Models.Internal.Display item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var display = new Display
|
||||
{
|
||||
Tag = item.ReadString(Models.Internal.Display.TagKey),
|
||||
@@ -505,13 +599,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Driver"/> to <cref="Models.Listxml.Driver"/>
|
||||
/// Convert from <cref="Models.Internal.Driver"/> to <cref="Models.Listxml.Driver"/>
|
||||
/// </summary>
|
||||
private static Driver? ConvertFromInternalModel(Models.Internal.Driver? item)
|
||||
private static Driver ConvertFromInternalModel(Models.Internal.Driver item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var driver = new Driver
|
||||
{
|
||||
Status = item.ReadString(Models.Internal.Driver.StatusKey),
|
||||
@@ -530,13 +621,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Extension"/> to <cref="Models.Listxml.Extension"/>
|
||||
/// Convert from <cref="Models.Internal.Extension"/> to <cref="Models.Listxml.Extension"/>
|
||||
/// </summary>
|
||||
private static Extension? ConvertFromInternalModel(Models.Internal.Extension? item)
|
||||
private static Extension ConvertFromInternalModel(Models.Internal.Extension item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var extension = new Extension
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Extension.NameKey),
|
||||
@@ -545,13 +633,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Feature"/> to <cref="Models.Listxml.Feature"/>
|
||||
/// Convert from <cref="Models.Internal.Feature"/> to <cref="Models.Listxml.Feature"/>
|
||||
/// </summary>
|
||||
private static Feature? ConvertFromInternalModel(Models.Internal.Feature? item)
|
||||
private static Feature ConvertFromInternalModel(Models.Internal.Feature item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var feature = new Feature
|
||||
{
|
||||
Type = item.ReadString(Models.Internal.Feature.TypeKey),
|
||||
@@ -562,13 +647,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Input"/> to <cref="Models.Listxml.Input"/>
|
||||
/// Convert from <cref="Models.Internal.Input"/> to <cref="Models.Listxml.Input"/>
|
||||
/// </summary>
|
||||
private static Input? ConvertFromInternalModel(Models.Internal.Input? item)
|
||||
private static Input ConvertFromInternalModel(Models.Internal.Input item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var input = new Input
|
||||
{
|
||||
Service = item.ReadString(Models.Internal.Input.ServiceKey),
|
||||
@@ -580,19 +662,22 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
var controls = item.Read<Models.Internal.Control[]>(Models.Internal.Input.ControlKey);
|
||||
input.Control = controls?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (controls != null && controls.Any())
|
||||
{
|
||||
input.Control = controls
|
||||
.Where(c => c != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return input;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Instance"/> to <cref="Models.Listxml.Instance"/>
|
||||
/// Convert from <cref="Models.Internal.Instance"/> to <cref="Models.Listxml.Instance"/>
|
||||
/// </summary>
|
||||
private static Instance? ConvertFromInternalModel(Models.Internal.Instance? item)
|
||||
private static Instance ConvertFromInternalModel(Models.Internal.Instance item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var instance = new Instance
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Instance.NameKey),
|
||||
@@ -602,32 +687,32 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Port"/> to <cref="Models.Listxml.Port"/>
|
||||
/// Convert from <cref="Models.Internal.Port"/> to <cref="Models.Listxml.Port"/>
|
||||
/// </summary>
|
||||
private static Port? ConvertFromInternalModel(Models.Internal.Port? item)
|
||||
private static Port ConvertFromInternalModel(Models.Internal.Port item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var port = new Port
|
||||
{
|
||||
Tag = item.ReadString(Models.Internal.Port.TagKey),
|
||||
};
|
||||
|
||||
var analogs = item.Read<Models.Internal.Analog[]>(Models.Internal.Port.AnalogKey);
|
||||
port.Analog = analogs?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (analogs != null && analogs.Any())
|
||||
{
|
||||
port.Analog = analogs
|
||||
.Where(a => a != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return port;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="RamOption"/> to <cref="Models.Listxml.RamOption"/>
|
||||
/// Convert from <cref="Models.Internal.RamOption"/> to <cref="Models.Listxml.RamOption"/>
|
||||
/// </summary>
|
||||
private static RamOption? ConvertFromInternalModel(Models.Internal.RamOption? item)
|
||||
private static RamOption ConvertFromInternalModel(Models.Internal.RamOption item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var ramOption = new RamOption
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.RamOption.NameKey),
|
||||
@@ -637,13 +722,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Rom"/> to <cref="Models.Listxml.Rom"/>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.Listxml.Rom"/>
|
||||
/// </summary>
|
||||
private static Rom? ConvertFromInternalModel(Models.Internal.Rom? item)
|
||||
private static Rom ConvertFromInternalModel(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var rom = new Rom
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Rom.NameKey),
|
||||
@@ -663,13 +745,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Sample"/> to <cref="Models.Listxml.Sample"/>
|
||||
/// Convert from <cref="Models.Internal.Sample"/> to <cref="Models.Listxml.Sample"/>
|
||||
/// </summary>
|
||||
private static Sample? ConvertFromInternalModel(Models.Internal.Sample? item)
|
||||
private static Sample ConvertFromInternalModel(Models.Internal.Sample item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var sample = new Sample
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Sample.NameKey),
|
||||
@@ -678,32 +757,32 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Slot"/> to <cref="Models.Listxml.Slot"/>
|
||||
/// Convert from <cref="Models.Internal.Slot"/> to <cref="Models.Listxml.Slot"/>
|
||||
/// </summary>
|
||||
private static Slot? ConvertFromInternalModel(Models.Internal.Slot? item)
|
||||
private static Slot ConvertFromInternalModel(Models.Internal.Slot item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var slot = new Slot
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Slot.NameKey),
|
||||
};
|
||||
|
||||
var slotOptions = item.Read<Models.Internal.SlotOption[]>(Models.Internal.Slot.SlotOptionKey);
|
||||
slot.SlotOption = slotOptions?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (slotOptions != null && slotOptions.Any())
|
||||
{
|
||||
slot.SlotOption = slotOptions
|
||||
.Where(s => s != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return slot;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="SlotOption"/> to <cref="Models.Listxml.SlotOption"/>
|
||||
/// Convert from <cref="Models.Internal.SlotOption"/> to <cref="Models.Listxml.SlotOption"/>
|
||||
/// </summary>
|
||||
private static SlotOption? ConvertFromInternalModel(Models.Internal.SlotOption? item)
|
||||
private static SlotOption ConvertFromInternalModel(Models.Internal.SlotOption item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var slotOption = new SlotOption
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.SlotOption.NameKey),
|
||||
@@ -714,13 +793,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="SoftwareList"/> to <cref="Models.Listxml.SoftwareList"/>
|
||||
/// Convert from <cref="Models.Internal.SoftwareList"/> to <cref="Models.Listxml.SoftwareList"/>
|
||||
/// </summary>
|
||||
private static SoftwareList? ConvertFromInternalModel(Models.Internal.SoftwareList? item)
|
||||
private static SoftwareList ConvertFromInternalModel(Models.Internal.SoftwareList item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var softwareList = new SoftwareList
|
||||
{
|
||||
Tag = item.ReadString(Models.Internal.SoftwareList.TagKey),
|
||||
@@ -732,13 +808,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Sound"/> to <cref="Models.Listxml.Sound"/>
|
||||
/// Convert from <cref="Models.Internal.Sound"/> to <cref="Models.Listxml.Sound"/>
|
||||
/// </summary>
|
||||
private static Sound? ConvertFromInternalModel(Models.Internal.Sound? item)
|
||||
private static Sound ConvertFromInternalModel(Models.Internal.Sound item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var sound = new Sound
|
||||
{
|
||||
Channels = item.ReadString(Models.Internal.Sound.ChannelsKey),
|
||||
@@ -747,13 +820,10 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Video"/> to <cref="Models.Listxml.Video"/>
|
||||
/// Convert from <cref="Models.Internal.Video"/> to <cref="Models.Listxml.Video"/>
|
||||
/// </summary>
|
||||
private static Video? ConvertFromInternalModel(Models.Internal.Video? item)
|
||||
private static Video ConvertFromInternalModel(Models.Internal.Video item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var video = new Video
|
||||
{
|
||||
Screen = item.ReadString(Models.Internal.Video.ScreenKey),
|
||||
|
||||
@@ -13,15 +13,23 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Listxml.M1"/> to <cref="Models.Internal.MetadataFile"/>
|
||||
/// </summary>
|
||||
public static Models.Internal.MetadataFile ConvertToInternalModel(M1 item)
|
||||
public static Models.Internal.MetadataFile? ConvertToInternalModel(M1? item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new Models.Internal.MetadataFile
|
||||
{
|
||||
[Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item),
|
||||
};
|
||||
|
||||
if (item?.Game != null && item.Game.Any())
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Game.Select(ConvertMachineToInternalModel).ToArray();
|
||||
{
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Game
|
||||
.Where(g => g != null)
|
||||
.Select(ConvertMachineToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
@@ -29,15 +37,23 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Listxml.Mame"/> to <cref="Models.Internal.MetadataFile"/>
|
||||
/// </summary>
|
||||
public static Models.Internal.MetadataFile ConvertToInternalModel(Mame item)
|
||||
public static Models.Internal.MetadataFile? ConvertToInternalModel(Mame? item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new Models.Internal.MetadataFile
|
||||
{
|
||||
[Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item),
|
||||
};
|
||||
|
||||
if (item?.Game != null && item.Game.Any())
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Game.Select(ConvertMachineToInternalModel).ToArray();
|
||||
{
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Game
|
||||
.Where(g => g != null)
|
||||
.Select(ConvertMachineToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
@@ -91,28 +107,68 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
if (item.BiosSet != null && item.BiosSet.Any())
|
||||
machine[Models.Internal.Machine.BiosSetKey] = item.BiosSet.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.BiosSetKey] = item.BiosSet
|
||||
.Where(b => b != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Rom != null && item.Rom.Any())
|
||||
machine[Models.Internal.Machine.RomKey] = item.Rom.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.RomKey] = item.Rom
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Disk != null && item.Disk.Any())
|
||||
machine[Models.Internal.Machine.DiskKey] = item.Disk.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.DiskKey] = item.Disk
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.DeviceRef != null && item.DeviceRef.Any())
|
||||
machine[Models.Internal.Machine.DeviceRefKey] = item.DeviceRef.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.DeviceRefKey] = item.DeviceRef
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Sample != null && item.Sample.Any())
|
||||
machine[Models.Internal.Machine.SampleKey] = item.Sample.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.SampleKey] = item.Sample
|
||||
.Where(s => s != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Chip != null && item.Chip.Any())
|
||||
machine[Models.Internal.Machine.ChipKey] = item.Chip.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.ChipKey] = item.Chip
|
||||
.Where(c => c != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Display != null && item.Display.Any())
|
||||
machine[Models.Internal.Machine.DisplayKey] = item.Display.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.DisplayKey] = item.Display
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Video != null && item.Video.Any())
|
||||
machine[Models.Internal.Machine.VideoKey] = item.Video.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.VideoKey] = item.Video
|
||||
.Where(v => v != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Sound != null)
|
||||
machine[Models.Internal.Machine.SoundKey] = ConvertToInternalModel(item.Sound);
|
||||
@@ -121,34 +177,79 @@ namespace SabreTools.Serialization
|
||||
machine[Models.Internal.Machine.InputKey] = ConvertToInternalModel(item.Input);
|
||||
|
||||
if (item.DipSwitch != null && item.DipSwitch.Any())
|
||||
machine[Models.Internal.Machine.DipSwitchKey] = item.DipSwitch.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.DipSwitchKey] = item.DipSwitch
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Configuration != null && item.Configuration.Any())
|
||||
machine[Models.Internal.Machine.ConfigurationKey] = item.Configuration.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.ConfigurationKey] = item.Configuration
|
||||
.Where(c => c != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Port != null && item.Port.Any())
|
||||
machine[Models.Internal.Machine.PortKey] = item.Port.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.PortKey] = item.Port
|
||||
.Where(p => p != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Adjuster != null && item.Adjuster.Any())
|
||||
machine[Models.Internal.Machine.AdjusterKey] = item.Adjuster.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.AdjusterKey] = item.Adjuster
|
||||
.Where(a => a != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Driver != null)
|
||||
machine[Models.Internal.Machine.DriverKey] = ConvertToInternalModel(item.Driver);
|
||||
|
||||
if (item.Feature != null && item.Feature.Any())
|
||||
machine[Models.Internal.Machine.FeatureKey] = item.Feature.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.FeatureKey] = item.Feature
|
||||
.Where(f => f != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Device != null && item.Device.Any())
|
||||
machine[Models.Internal.Machine.DeviceKey] = item.Device.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.DeviceKey] = item.Device
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.Slot != null && item.Slot.Any())
|
||||
machine[Models.Internal.Machine.SlotKey] = item.Slot.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.SlotKey] = item.Slot
|
||||
.Where(s => s != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.SoftwareList != null && item.SoftwareList.Any())
|
||||
machine[Models.Internal.Machine.SoftwareListKey] = item.SoftwareList.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.SoftwareListKey] = item.SoftwareList
|
||||
.Where(s => s != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.RamOption != null && item.RamOption.Any())
|
||||
machine[Models.Internal.Machine.RamOptionKey] = item.RamOption.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.RamOptionKey] = item.RamOption
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return machine;
|
||||
}
|
||||
@@ -243,10 +344,20 @@ namespace SabreTools.Serialization
|
||||
configuration[Models.Internal.Configuration.ConditionKey] = ConvertToInternalModel(item.Condition);
|
||||
|
||||
if (item.ConfLocation != null && item.ConfLocation.Any())
|
||||
configuration[Models.Internal.Configuration.ConfLocationKey] = item.ConfLocation.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
configuration[Models.Internal.Configuration.ConfLocationKey] = item.ConfLocation
|
||||
.Where(c => c != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.ConfSetting != null && item.ConfSetting.Any())
|
||||
configuration[Models.Internal.Configuration.ConfSettingKey] = item.ConfSetting.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
configuration[Models.Internal.Configuration.ConfSettingKey] = item.ConfSetting
|
||||
.Where(c => c != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return configuration;
|
||||
}
|
||||
@@ -324,7 +435,12 @@ namespace SabreTools.Serialization
|
||||
device[Models.Internal.Device.InstanceKey] = ConvertToInternalModel(item.Instance);
|
||||
|
||||
if (item.Extension != null && item.Extension.Any())
|
||||
device[Models.Internal.Device.ExtensionKey] = item.Extension.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
device[Models.Internal.Device.ExtensionKey] = item.Extension
|
||||
.Where(e => e != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return device;
|
||||
}
|
||||
@@ -371,10 +487,20 @@ namespace SabreTools.Serialization
|
||||
dipSwitch[Models.Internal.DipSwitch.ConditionKey] = ConvertToInternalModel(item.Condition);
|
||||
|
||||
if (item.DipLocation != null && item.DipLocation.Any())
|
||||
dipSwitch[Models.Internal.DipSwitch.DipLocationKey] = item.DipLocation.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
dipSwitch[Models.Internal.DipSwitch.DipLocationKey] = item.DipLocation
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
if (item.DipValue != null && item.DipValue.Any())
|
||||
dipSwitch[Models.Internal.DipSwitch.DipValueKey] = item.DipValue.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
dipSwitch[Models.Internal.DipSwitch.DipValueKey] = item.DipValue
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return dipSwitch;
|
||||
}
|
||||
@@ -506,7 +632,12 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
if (item.Control != null && item.Control.Any())
|
||||
input[Models.Internal.Input.ControlKey] = item.Control.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
input[Models.Internal.Input.ControlKey] = item.Control
|
||||
.Where(c => c != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return input;
|
||||
}
|
||||
@@ -535,7 +666,12 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
if (item.Analog != null && item.Analog.Any())
|
||||
port[Models.Internal.Port.AnalogKey] = item.Analog.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
port[Models.Internal.Port.AnalogKey] = item.Analog
|
||||
.Where(a => a != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return port;
|
||||
}
|
||||
@@ -599,7 +735,12 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
if (item.SlotOption != null && item.SlotOption.Any())
|
||||
slot[Models.Internal.Slot.SlotOptionKey] = item.SlotOption.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
slot[Models.Internal.Slot.SlotOptionKey] = item.SlotOption
|
||||
.Where(s => s != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return slot;
|
||||
}
|
||||
|
||||
@@ -29,10 +29,15 @@ namespace SabreTools.Serialization
|
||||
if (header != null)
|
||||
datafile.Header = ConvertHeaderFromInternalModel(header);
|
||||
|
||||
// TODO: Handle Dir items
|
||||
// TODO: Handle Dir items - Currently need to be generated from the machines
|
||||
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||
if (machines != null && machines.Any())
|
||||
datafile.Game = machines.Select(machine => ConvertMachineFromInternalModel(machine, game)).ToArray();
|
||||
{
|
||||
datafile.Game = machines
|
||||
.Where(m => m != null)
|
||||
.Select(machine => ConvertMachineFromInternalModel(machine, game))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return datafile;
|
||||
}
|
||||
@@ -102,11 +107,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.Logiqx.GameBase"/>
|
||||
/// </summary>
|
||||
private static GameBase? ConvertMachineFromInternalModel(Models.Internal.Machine? item, bool game = false)
|
||||
private static GameBase ConvertMachineFromInternalModel(Models.Internal.Machine item, bool game = false)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
GameBase gameBase = game ? new Game() : new Machine();
|
||||
|
||||
gameBase.Name = item.ReadString(Models.Internal.Machine.NameKey);
|
||||
@@ -130,37 +132,93 @@ namespace SabreTools.Serialization
|
||||
gameBase.Category = item.ReadStringArray(Models.Internal.Machine.CategoryKey);
|
||||
|
||||
var trurip = item.Read<Trurip>(Models.Internal.Machine.TruripKey);
|
||||
gameBase.Trurip = trurip;
|
||||
if (trurip != null)
|
||||
gameBase.Trurip = trurip;
|
||||
|
||||
var releases = item.Read<Models.Internal.Release[]>(Models.Internal.Machine.ReleaseKey);
|
||||
gameBase.Release = releases?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (releases != null && releases.Any())
|
||||
{
|
||||
gameBase.Release = releases
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var biosSets = item.Read<Models.Internal.BiosSet[]>(Models.Internal.Machine.BiosSetKey);
|
||||
gameBase.BiosSet = biosSets?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (biosSets != null && biosSets.Any())
|
||||
{
|
||||
gameBase.BiosSet = biosSets
|
||||
.Where(b => b != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
||||
gameBase.Rom = roms?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (roms != null && roms.Any())
|
||||
{
|
||||
gameBase.Rom = roms
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var disks = item.Read<Models.Internal.Disk[]>(Models.Internal.Machine.DiskKey);
|
||||
gameBase.Disk = disks?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (disks != null && disks.Any())
|
||||
{
|
||||
gameBase.Disk = disks
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var medias = item.Read<Models.Internal.Media[]>(Models.Internal.Machine.MediaKey);
|
||||
gameBase.Media = medias?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (medias != null && medias.Any())
|
||||
{
|
||||
gameBase.Media = medias
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var deviceRefs = item.Read<Models.Internal.DeviceRef[]>(Models.Internal.Machine.DeviceRefKey);
|
||||
gameBase.DeviceRef = deviceRefs?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (deviceRefs != null && deviceRefs.Any())
|
||||
{
|
||||
gameBase.DeviceRef = deviceRefs
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var samples = item.Read<Models.Internal.Sample[]>(Models.Internal.Machine.SampleKey);
|
||||
gameBase.Sample = samples?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (samples != null && samples.Any())
|
||||
{
|
||||
gameBase.Sample = samples
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var archives = item.Read<Models.Internal.Archive[]>(Models.Internal.Machine.ArchiveKey);
|
||||
gameBase.Archive = archives?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (archives != null && archives.Any())
|
||||
{
|
||||
gameBase.Archive = archives
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var drivers = item.Read<Models.Internal.Driver[]>(Models.Internal.Machine.DriverKey);
|
||||
gameBase.Driver = drivers?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
var driver = item.Read<Models.Internal.Driver>(Models.Internal.Machine.DriverKey);
|
||||
if (driver != null)
|
||||
gameBase.Driver = ConvertFromInternalModel(driver);
|
||||
|
||||
var softwareLists = item.Read<Models.Internal.SoftwareList[]>(Models.Internal.Machine.SoftwareListKey);
|
||||
gameBase.SoftwareList = softwareLists?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (softwareLists != null && softwareLists.Any())
|
||||
{
|
||||
gameBase.SoftwareList = softwareLists
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return gameBase;
|
||||
}
|
||||
@@ -168,11 +226,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Archive"/> to <cref="Models.Logiqx.Archive"/>
|
||||
/// </summary>
|
||||
private static Archive? ConvertFromInternalModel(Models.Internal.Archive? item)
|
||||
private static Archive ConvertFromInternalModel(Models.Internal.Archive item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var archive = new Archive
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Archive.NameKey),
|
||||
@@ -183,11 +238,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.BiosSet"/> to <cref="Models.Logiqx.BiosSet"/>
|
||||
/// </summary>
|
||||
private static BiosSet? ConvertFromInternalModel(Models.Internal.BiosSet? item)
|
||||
private static BiosSet ConvertFromInternalModel(Models.Internal.BiosSet item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var biosset = new BiosSet
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.BiosSet.NameKey),
|
||||
@@ -200,11 +252,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.DeviceRef"/> to <cref="Models.Logiqx.DeviceRef"/>
|
||||
/// </summary>
|
||||
private static DeviceRef? ConvertFromInternalModel(Models.Internal.DeviceRef? item)
|
||||
private static DeviceRef ConvertFromInternalModel(Models.Internal.DeviceRef item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var deviceRef = new DeviceRef
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.DipSwitch.NameKey),
|
||||
@@ -215,11 +264,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Disk"/> to <cref="Models.Logiqx.Disk"/>
|
||||
/// </summary>
|
||||
private static Disk? ConvertFromInternalModel(Models.Internal.Disk? item)
|
||||
private static Disk ConvertFromInternalModel(Models.Internal.Disk item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var disk = new Disk
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Disk.NameKey),
|
||||
@@ -235,11 +281,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Driver"/> to <cref="Models.Logiqx.Driver"/>
|
||||
/// </summary>
|
||||
private static Driver? ConvertFromInternalModel(Models.Internal.Driver? item)
|
||||
private static Driver ConvertFromInternalModel(Models.Internal.Driver item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var driver = new Driver
|
||||
{
|
||||
Status = item.ReadString(Models.Internal.Driver.StatusKey),
|
||||
@@ -257,11 +300,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Media"/> to <cref="Models.Logiqx.Media"/>
|
||||
/// </summary>
|
||||
private static Media? ConvertFromInternalModel(Models.Internal.Media? item)
|
||||
private static Media ConvertFromInternalModel(Models.Internal.Media item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var media = new Media
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Media.NameKey),
|
||||
@@ -276,11 +316,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Release"/> to <cref="Models.Logiqx.Release"/>
|
||||
/// </summary>
|
||||
private static Release? ConvertFromInternalModel(Models.Internal.Release? item)
|
||||
private static Release ConvertFromInternalModel(Models.Internal.Release item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var release = new Release
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Release.NameKey),
|
||||
@@ -295,7 +332,7 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.Logiqx.Rom"/>
|
||||
/// </summary>
|
||||
private static Rom? ConvertFromInternalModel(Models.Internal.Rom? item)
|
||||
private static Rom ConvertFromInternalModel(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
@@ -327,11 +364,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Sample"/> to <cref="Models.Logiqx.Sample"/>
|
||||
/// </summary>
|
||||
private static Sample? ConvertFromInternalModel(Models.Internal.Sample? item)
|
||||
private static Sample ConvertFromInternalModel(Models.Internal.Sample item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var sample = new Sample
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Sample.NameKey),
|
||||
@@ -342,11 +376,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.SoftwareList"/> to <cref="Models.Logiqx.SoftwareList"/>
|
||||
/// </summary>
|
||||
private static SoftwareList? ConvertFromInternalModel(Models.Internal.SoftwareList? item)
|
||||
private static SoftwareList ConvertFromInternalModel(Models.Internal.SoftwareList item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var softwareList = new SoftwareList
|
||||
{
|
||||
Tag = item.ReadString(Models.Internal.SoftwareList.TagKey),
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Models.Logiqx;
|
||||
@@ -22,16 +24,34 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Logiqx.Datafile"/> to <cref="Models.Internal.MetadataFile"/>
|
||||
/// </summary>
|
||||
public static Models.Internal.MetadataFile ConvertToInternalModel(Datafile item)
|
||||
public static Models.Internal.MetadataFile? ConvertToInternalModel(Datafile? item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new Models.Internal.MetadataFile
|
||||
{
|
||||
[Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item),
|
||||
};
|
||||
|
||||
// TODO: Handle Dir items
|
||||
if (item?.Game != null && item.Game.Any())
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Game.Select(ConvertMachineToInternalModel).ToArray();
|
||||
var machines = new List<Models.Internal.Machine>();
|
||||
|
||||
if (item.Game != null && item.Game.Any())
|
||||
{
|
||||
machines.AddRange(item.Game
|
||||
.Where(g => g != null)
|
||||
.Select(ConvertMachineToInternalModel));
|
||||
}
|
||||
|
||||
if (item.Dir != null && item.Dir.Any())
|
||||
{
|
||||
machines.AddRange(item.Dir
|
||||
.Where(d => d != null)
|
||||
.SelectMany(ConvertDirToInternalModel));
|
||||
}
|
||||
|
||||
if (machines.Any())
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = machines.ToArray();
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
@@ -41,7 +61,7 @@ namespace SabreTools.Serialization
|
||||
/// </summary>
|
||||
private static Models.Internal.Header ConvertHeaderToInternalModel(Datafile item)
|
||||
{
|
||||
var header = ConvertHeaderToInternalModel(item.Header);
|
||||
var header = item.Header != null ? ConvertHeaderToInternalModel(item.Header) : new Models.Internal.Header();
|
||||
|
||||
header[Models.Internal.Header.BuildKey] = item.Build;
|
||||
header[Models.Internal.Header.DebugKey] = item.Debug;
|
||||
@@ -94,6 +114,25 @@ namespace SabreTools.Serialization
|
||||
return header;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Logiqx.Dir"/> to an array of <cref="Models.Internal.Machine"/>
|
||||
/// </summary>
|
||||
private static Models.Internal.Machine[] ConvertDirToInternalModel(Dir item)
|
||||
{
|
||||
if (item.Game == null || !item.Game.Any())
|
||||
return Array.Empty<Models.Internal.Machine>();
|
||||
|
||||
return item.Game
|
||||
.Where(g => g != null)
|
||||
.Select(game =>
|
||||
{
|
||||
var machine = ConvertMachineToInternalModel(game);
|
||||
machine[Models.Internal.Machine.DirNameKey] = item.Name;
|
||||
return machine;
|
||||
})
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Logiqx.GameBase"/> to <cref="Models.Internal.Machine"/>
|
||||
/// </summary>
|
||||
@@ -147,8 +186,8 @@ namespace SabreTools.Serialization
|
||||
if (item.Archive != null && item.Archive.Any())
|
||||
machine[Models.Internal.Machine.ArchiveKey] = item.Archive.Select(ConvertToInternalModel).ToArray();
|
||||
|
||||
if (item.Driver != null && item.Driver.Any())
|
||||
machine[Models.Internal.Machine.DriverKey] = item.Driver.Select(ConvertToInternalModel).ToArray();
|
||||
if (item.Driver != null)
|
||||
machine[Models.Internal.Machine.DriverKey] = ConvertToInternalModel(item.Driver);
|
||||
|
||||
if (item.SoftwareList != null && item.SoftwareList.Any())
|
||||
machine[Models.Internal.Machine.SoftwareListKey] = item.SoftwareList.Select(ConvertToInternalModel).ToArray();
|
||||
|
||||
@@ -23,7 +23,15 @@ namespace SabreTools.Serialization
|
||||
|
||||
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||
if (machines != null && machines.Any())
|
||||
dat.Games = new Games { Game = machines.Select(ConvertMachineFromInternalModel).ToArray() };
|
||||
{
|
||||
dat.Games = new Games
|
||||
{
|
||||
Game = machines
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertMachineFromInternalModel)
|
||||
.ToArray()
|
||||
};
|
||||
}
|
||||
|
||||
return dat;
|
||||
}
|
||||
@@ -31,11 +39,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.OfflineList.Dat"/>
|
||||
/// </summary>
|
||||
private static Dat? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
||||
private static Dat ConvertHeaderFromInternalModel(Models.Internal.Header item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var dat = new Dat
|
||||
{
|
||||
NoNamespaceSchemaLocation = item.ReadString(Models.Internal.Header.SchemaLocationKey),
|
||||
@@ -83,11 +88,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.OfflineList.Game"/>
|
||||
/// </summary>
|
||||
private static Game? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||
private static Game ConvertMachineFromInternalModel(Models.Internal.Machine item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var game = new Game
|
||||
{
|
||||
ImageNumber = item.ReadString(Models.Internal.Machine.ImageNumberKey),
|
||||
@@ -105,11 +107,19 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
||||
game.RomSize = roms?
|
||||
.Select(rom => rom.ReadString(Models.Internal.Rom.SizeKey))?
|
||||
.FirstOrDefault(s => s != null);
|
||||
var romCRCs = roms?.Select(ConvertFromInternalModel).ToArray();
|
||||
game.Files = new Files { RomCRC = romCRCs };
|
||||
if (roms != null && roms.Any())
|
||||
{
|
||||
game.RomSize = roms
|
||||
.Select(rom => rom.ReadString(Models.Internal.Rom.SizeKey))
|
||||
.FirstOrDefault(s => s != null);
|
||||
|
||||
var romCRCs = roms
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
|
||||
game.Files = new Files { RomCRC = romCRCs };
|
||||
}
|
||||
|
||||
return game;
|
||||
}
|
||||
@@ -117,11 +127,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.OfflineList.FileRomCRC"/>
|
||||
/// </summary>
|
||||
private static FileRomCRC? ConvertFromInternalModel(Models.Internal.Rom? item)
|
||||
private static FileRomCRC ConvertFromInternalModel(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var fileRomCRC = new FileRomCRC
|
||||
{
|
||||
Extension = item.ReadString(Models.Internal.Rom.ExtensionKey),
|
||||
|
||||
@@ -13,15 +13,23 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.OfflineList.Dat"/> to <cref="Models.Internal.MetadataFile"/>
|
||||
/// </summary>
|
||||
public static Models.Internal.MetadataFile ConvertToInternalModel(Dat item)
|
||||
public static Models.Internal.MetadataFile? ConvertToInternalModel(Dat? item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new Models.Internal.MetadataFile
|
||||
{
|
||||
[Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item),
|
||||
};
|
||||
|
||||
if (item?.Games?.Game != null && item.Games.Game.Any())
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Games.Game.Select(ConvertMachineToInternalModel).ToArray();
|
||||
{
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Games.Game
|
||||
.Where(g => g != null)
|
||||
.Select(ConvertMachineToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
@@ -82,12 +90,15 @@ namespace SabreTools.Serialization
|
||||
|
||||
if (item.Files?.RomCRC != null && item.Files.RomCRC.Any())
|
||||
{
|
||||
machine[Models.Internal.Machine.RomKey] = item.Files.RomCRC.Select(romCRC =>
|
||||
{
|
||||
var rom = ConvertToInternalModel(romCRC);
|
||||
rom[Models.Internal.Rom.SizeKey] = item.RomSize;
|
||||
return rom;
|
||||
}).ToArray();
|
||||
machine[Models.Internal.Machine.RomKey] = item.Files.RomCRC
|
||||
.Where(r => r != null)
|
||||
.Select(romCRC =>
|
||||
{
|
||||
var rom = ConvertToInternalModel(romCRC);
|
||||
rom[Models.Internal.Rom.SizeKey] = item.RomSize;
|
||||
return rom;
|
||||
})
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return machine;
|
||||
|
||||
@@ -23,7 +23,12 @@ namespace SabreTools.Serialization
|
||||
|
||||
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||
if (machines != null && machines.Any())
|
||||
softwareDb.Software = machines.Select(ConvertMachineFromInternalModel).ToArray();
|
||||
{
|
||||
softwareDb.Software = machines
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertMachineFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return softwareDb;
|
||||
}
|
||||
@@ -31,11 +36,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.OpenMSX.SoftwareDb"/>
|
||||
/// </summary>
|
||||
private static SoftwareDb? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
||||
private static SoftwareDb ConvertHeaderFromInternalModel(Models.Internal.Header item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var softwareDb = new SoftwareDb
|
||||
{
|
||||
Timestamp = item.ReadString(Models.Internal.Header.TimestampKey),
|
||||
@@ -46,11 +48,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.OpenMSX.Software"/>
|
||||
/// </summary>
|
||||
private static Software? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||
private static Software ConvertMachineFromInternalModel(Models.Internal.Machine item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var game = new Software
|
||||
{
|
||||
Title = item.ReadString(Models.Internal.Machine.NameKey),
|
||||
@@ -62,7 +61,13 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
var dumps = item.Read<Models.Internal.Dump[]>(Models.Internal.Machine.DumpKey);
|
||||
game.Dump = dumps?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (dumps != null && dumps.Any())
|
||||
{
|
||||
game.Dump = dumps
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return game;
|
||||
}
|
||||
@@ -70,24 +75,25 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Dump"/> to <cref="Models.OpenMSX.Dump"/>
|
||||
/// </summary>
|
||||
private static Dump? ConvertFromInternalModel(Models.Internal.Dump? item)
|
||||
private static Dump ConvertFromInternalModel(Models.Internal.Dump item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var dump = new Dump();
|
||||
|
||||
var original = item.Read<Models.Internal.Original>(Models.Internal.Dump.OriginalKey);
|
||||
dump.Original = ConvertFromInternalModel(original);
|
||||
if (original != null)
|
||||
dump.Original = ConvertFromInternalModel(original);
|
||||
|
||||
var rom = item.Read<Models.Internal.Rom>(Models.Internal.Dump.RomKey);
|
||||
dump.Rom = ConvertRomFromInternalModel(rom);
|
||||
if (rom != null)
|
||||
dump.Rom = ConvertRomFromInternalModel(rom);
|
||||
|
||||
var megaRom = item.Read<Models.Internal.Rom>(Models.Internal.Dump.MegaRomKey);
|
||||
dump.Rom = ConvertMegaRomFromInternalModel(megaRom);
|
||||
if (megaRom != null)
|
||||
dump.Rom = ConvertMegaRomFromInternalModel(megaRom);
|
||||
|
||||
var sccPlusCart = item.Read<Models.Internal.Rom>(Models.Internal.Dump.SCCPlusCartKey);
|
||||
dump.Rom = ConvertSCCPlusCartFromInternalModel(sccPlusCart);
|
||||
if (sccPlusCart != null)
|
||||
dump.Rom = ConvertSCCPlusCartFromInternalModel(sccPlusCart);
|
||||
|
||||
return dump;
|
||||
}
|
||||
@@ -95,11 +101,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.OpenMSX.MegaRom"/>
|
||||
/// </summary>
|
||||
private static MegaRom? ConvertMegaRomFromInternalModel(Models.Internal.Rom? item)
|
||||
private static MegaRom ConvertMegaRomFromInternalModel(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var megaRom = new MegaRom
|
||||
{
|
||||
Start = item.ReadString(Models.Internal.Rom.StartKey),
|
||||
@@ -113,11 +116,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Original"/> to <cref="Models.OpenMSX.Original"/>
|
||||
/// </summary>
|
||||
private static Original? ConvertFromInternalModel(Models.Internal.Original? item)
|
||||
private static Original ConvertFromInternalModel(Models.Internal.Original item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var original = new Original
|
||||
{
|
||||
Value = item.ReadString(Models.Internal.Original.ValueKey),
|
||||
@@ -129,11 +129,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.OpenMSX.Rom"/>
|
||||
/// </summary>
|
||||
private static Rom? ConvertRomFromInternalModel(Models.Internal.Rom? item)
|
||||
private static Rom ConvertRomFromInternalModel(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var rom = new Rom
|
||||
{
|
||||
Start = item.ReadString(Models.Internal.Rom.StartKey),
|
||||
@@ -147,11 +144,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.OpenMSX.SCCPlusCart"/>
|
||||
/// </summary>
|
||||
private static SCCPlusCart? ConvertSCCPlusCartFromInternalModel(Models.Internal.Rom? item)
|
||||
private static SCCPlusCart ConvertSCCPlusCartFromInternalModel(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var sccPlusCart = new SCCPlusCart
|
||||
{
|
||||
Start = item.ReadString(Models.Internal.Rom.StartKey),
|
||||
|
||||
@@ -22,15 +22,23 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.OpenMSX.SoftwareDb"/> to <cref="Models.Internal.MetadataFile"/>
|
||||
/// </summary>
|
||||
public static Models.Internal.MetadataFile ConvertToInternalModel(SoftwareDb item)
|
||||
public static Models.Internal.MetadataFile? ConvertToInternalModel(SoftwareDb? item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new Models.Internal.MetadataFile
|
||||
{
|
||||
[Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item),
|
||||
};
|
||||
|
||||
if (item?.Software != null && item.Software.Any())
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Software.Select(ConvertMachineToInternalModel).ToArray();
|
||||
{
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Software
|
||||
.Where(s => s != null)
|
||||
.Select(ConvertMachineToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
@@ -63,7 +71,12 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
if (item.Dump != null && item.Dump.Any())
|
||||
machine[Models.Internal.Machine.DumpKey] = item.Dump.Select(ConvertToInternalModel).ToArray();
|
||||
{
|
||||
machine[Models.Internal.Machine.DumpKey] = item.Dump
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return machine;
|
||||
}
|
||||
@@ -78,19 +91,22 @@ namespace SabreTools.Serialization
|
||||
if (item.Original != null)
|
||||
dump[Models.Internal.Dump.OriginalKey] = ConvertToInternalModel(item.Original);
|
||||
|
||||
switch (item.Rom)
|
||||
if (item.Rom != null)
|
||||
{
|
||||
case Rom rom:
|
||||
dump[Models.Internal.Dump.RomKey] = ConvertToInternalModel(rom);
|
||||
break;
|
||||
switch (item.Rom)
|
||||
{
|
||||
case Rom rom:
|
||||
dump[Models.Internal.Dump.RomKey] = ConvertToInternalModel(rom);
|
||||
break;
|
||||
|
||||
case MegaRom megaRom:
|
||||
dump[Models.Internal.Dump.MegaRomKey] = ConvertToInternalModel(megaRom);
|
||||
break;
|
||||
case MegaRom megaRom:
|
||||
dump[Models.Internal.Dump.MegaRomKey] = ConvertToInternalModel(megaRom);
|
||||
break;
|
||||
|
||||
case SCCPlusCart sccPlusCart:
|
||||
dump[Models.Internal.Dump.SCCPlusCartKey] = ConvertToInternalModel(sccPlusCart);
|
||||
break;
|
||||
case SCCPlusCart sccPlusCart:
|
||||
dump[Models.Internal.Dump.SCCPlusCartKey] = ConvertToInternalModel(sccPlusCart);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return dump;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
@@ -236,7 +237,15 @@ namespace SabreTools.Serialization
|
||||
|
||||
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||
if (machines != null && machines.Any())
|
||||
metadataFile.Games = new Games { Rom = machines.SelectMany(ConvertMachineFromInternalModel).ToArray() };
|
||||
{
|
||||
metadataFile.Games = new Games
|
||||
{
|
||||
Rom = machines
|
||||
.Where(m => m != null)
|
||||
.SelectMany(ConvertMachineFromInternalModel)
|
||||
.ToArray()
|
||||
};
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
@@ -244,11 +253,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.RomCenter.MetadataFile"/>
|
||||
/// </summary>
|
||||
private static MetadataFile? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
||||
private static MetadataFile ConvertHeaderFromInternalModel(Models.Internal.Header item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new MetadataFile();
|
||||
|
||||
if (item.ContainsKey(Models.Internal.Header.AuthorKey)
|
||||
@@ -300,23 +306,23 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Machine"/> to an array of <cref="Models.RomCenter.Rom"/>
|
||||
/// </summary>
|
||||
private static Rom?[]? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||
private static Rom[] ConvertMachineFromInternalModel(Models.Internal.Machine item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
||||
return roms?.Select(rom => ConvertFromInternalModel(rom, item))?.ToArray();
|
||||
if (roms == null)
|
||||
return Array.Empty<Rom>();
|
||||
|
||||
return roms
|
||||
.Where(r => r != null)
|
||||
.Select(rom => ConvertFromInternalModel(rom, item))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.RomCenter.Rom"/>
|
||||
/// </summary>
|
||||
private static Rom? ConvertFromInternalModel(Models.Internal.Rom? item, Models.Internal.Machine? parent)
|
||||
private static Rom ConvertFromInternalModel(Models.Internal.Rom item, Models.Internal.Machine parent)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var row = new Rom
|
||||
{
|
||||
RomName = item.ReadString(Models.Internal.Rom.NameKey),
|
||||
@@ -324,10 +330,10 @@ namespace SabreTools.Serialization
|
||||
RomSize = item.ReadString(Models.Internal.Rom.SizeKey),
|
||||
MergeName = item.ReadString(Models.Internal.Rom.MergeKey),
|
||||
|
||||
ParentName = parent?.ReadString(Models.Internal.Machine.RomOfKey),
|
||||
//ParentDescription = parent?.ReadString(Models.Internal.Machine.ParentDescriptionKey), // This is unmappable
|
||||
GameName = parent?.ReadString(Models.Internal.Machine.NameKey),
|
||||
GameDescription = parent?.ReadString(Models.Internal.Machine.DescriptionKey),
|
||||
ParentName = parent.ReadString(Models.Internal.Machine.RomOfKey),
|
||||
//ParentDescription = parent.ReadString(Models.Internal.Machine.ParentDescriptionKey), // This is unmappable
|
||||
GameName = parent.ReadString(Models.Internal.Machine.NameKey),
|
||||
GameDescription = parent.ReadString(Models.Internal.Machine.DescriptionKey),
|
||||
};
|
||||
return row;
|
||||
}
|
||||
|
||||
@@ -178,15 +178,22 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.RomCenter.MetadataFile"/> to <cref="Models.Internal.MetadataFile"/>
|
||||
/// </summary>
|
||||
public static Models.Internal.MetadataFile ConvertToInternalModel(MetadataFile item)
|
||||
public static Models.Internal.MetadataFile? ConvertToInternalModel(MetadataFile? item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new Models.Internal.MetadataFile
|
||||
{
|
||||
[Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item),
|
||||
};
|
||||
|
||||
if (item?.Games?.Rom != null && item.Games.Rom.Any())
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Games.Rom.Select(ConvertMachineToInternalModel).ToArray();
|
||||
{
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Games.Rom
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertMachineToInternalModel).ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
|
||||
@@ -135,7 +135,12 @@ namespace SabreTools.Serialization
|
||||
|
||||
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||
if (machines != null && machines.Any())
|
||||
metadataFile.Row = machines.SelectMany(ConvertMachineFromInternalModel).ToArray();
|
||||
{
|
||||
metadataFile.Row = machines
|
||||
.Where(m => m != null)
|
||||
.SelectMany(ConvertMachineFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
@@ -143,11 +148,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.SeparatedValue.MetadataFile"/>
|
||||
/// </summary>
|
||||
private static MetadataFile? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
||||
private static MetadataFile ConvertHeaderFromInternalModel(Models.Internal.Header item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new MetadataFile
|
||||
{
|
||||
Header = item.ReadStringArray(Models.Internal.Header.HeaderKey),
|
||||
@@ -158,24 +160,33 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Machine"/> to an array of <cref="Models.SeparatedValue.Row"/>
|
||||
/// </summary>
|
||||
private static Row[]? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||
private static Row[] ConvertMachineFromInternalModel(Models.Internal.Machine item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var rowItems = new List<Row>();
|
||||
|
||||
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
||||
if (roms != null && roms.Any())
|
||||
{
|
||||
rowItems.AddRange(roms
|
||||
.Where(r => r != null)
|
||||
.Select(rom => ConvertFromInternalModel(rom, item)));
|
||||
}
|
||||
|
||||
var disks = item.Read<Models.Internal.Disk[]>(Models.Internal.Machine.DiskKey);
|
||||
if (disks != null)
|
||||
rowItems.AddRange(disks.Select(disk => ConvertFromInternalModel(disk, item)));
|
||||
if (disks != null && disks.Any())
|
||||
{
|
||||
rowItems.AddRange(disks
|
||||
.Where(d => d != null)
|
||||
.Select(disk => ConvertFromInternalModel(disk, item)));
|
||||
}
|
||||
|
||||
var media = item.Read<Models.Internal.Media[]>(Models.Internal.Machine.MediaKey);
|
||||
if (media != null)
|
||||
rowItems.AddRange(media.Select(medium => ConvertFromInternalModel(medium, item)));
|
||||
|
||||
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
||||
if (roms != null)
|
||||
rowItems.AddRange(roms.Select(rom => ConvertFromInternalModel(rom, item)));
|
||||
if (media != null && media.Any())
|
||||
{
|
||||
rowItems.AddRange(media
|
||||
.Where(m => m != null)
|
||||
.Select(medium => ConvertFromInternalModel(medium, item)));
|
||||
}
|
||||
|
||||
return rowItems.ToArray();
|
||||
}
|
||||
@@ -183,15 +194,12 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Disk"/> to <cref="Models.SeparatedValue.Row"/>
|
||||
/// </summary>
|
||||
private static Row? ConvertFromInternalModel(Models.Internal.Disk? item, Models.Internal.Machine? parent)
|
||||
private static Row ConvertFromInternalModel(Models.Internal.Disk item, Models.Internal.Machine parent)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var row = new Row
|
||||
{
|
||||
GameName = parent?.ReadString(Models.Internal.Machine.NameKey),
|
||||
Description = parent?.ReadString(Models.Internal.Machine.DescriptionKey),
|
||||
GameName = parent.ReadString(Models.Internal.Machine.NameKey),
|
||||
Description = parent.ReadString(Models.Internal.Machine.DescriptionKey),
|
||||
Type = "disk",
|
||||
DiskName = item.ReadString(Models.Internal.Disk.NameKey),
|
||||
MD5 = item.ReadString(Models.Internal.Disk.MD5Key),
|
||||
@@ -204,15 +212,12 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Media"/> to <cref="Models.SeparatedValue.Row"/>
|
||||
/// </summary>
|
||||
private static Row? ConvertFromInternalModel(Models.Internal.Media? item, Models.Internal.Machine? parent)
|
||||
private static Row ConvertFromInternalModel(Models.Internal.Media item, Models.Internal.Machine parent)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var row = new Row
|
||||
{
|
||||
GameName = parent?.ReadString(Models.Internal.Machine.NameKey),
|
||||
Description = parent?.ReadString(Models.Internal.Machine.DescriptionKey),
|
||||
GameName = parent.ReadString(Models.Internal.Machine.NameKey),
|
||||
Description = parent.ReadString(Models.Internal.Machine.DescriptionKey),
|
||||
Type = "media",
|
||||
DiskName = item.ReadString(Models.Internal.Media.NameKey),
|
||||
MD5 = item.ReadString(Models.Internal.Media.MD5Key),
|
||||
@@ -226,11 +231,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.SeparatedValue.Row"/>
|
||||
/// </summary>
|
||||
private static Row? ConvertFromInternalModel(Models.Internal.Rom? item, Models.Internal.Machine? parent)
|
||||
private static Row ConvertFromInternalModel(Models.Internal.Rom item, Models.Internal.Machine parent)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var row = new Row
|
||||
{
|
||||
GameName = parent?.ReadString(Models.Internal.Machine.NameKey),
|
||||
|
||||
@@ -133,8 +133,11 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.SeparatedValue.MetadataFile"/> to <cref="Models.Internal.MetadataFile"/>
|
||||
/// </summary>
|
||||
public static Models.Internal.MetadataFile ConvertToInternalModel(MetadataFile item)
|
||||
public static Models.Internal.MetadataFile? ConvertToInternalModel(MetadataFile? item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new Models.Internal.MetadataFile
|
||||
{
|
||||
[Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item),
|
||||
|
||||
@@ -23,7 +23,12 @@ namespace SabreTools.Serialization
|
||||
|
||||
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||
if (machines != null && machines.Any())
|
||||
metadataFile.Software = machines.Select(ConvertMachineFromInternalModel).ToArray();
|
||||
{
|
||||
metadataFile.Software = machines
|
||||
.Where(m => m != null)
|
||||
.Select(ConvertMachineFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
@@ -31,11 +36,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.SoftwareList.SoftwareList"/>
|
||||
/// </summary>
|
||||
private static SoftwareList? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
||||
private static SoftwareList ConvertHeaderFromInternalModel(Models.Internal.Header item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var softwareList = new SoftwareList
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Header.NameKey),
|
||||
@@ -48,11 +50,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.SoftwareList.Software"/>
|
||||
/// </summary>
|
||||
private static Software? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||
private static Software ConvertMachineFromInternalModel(Models.Internal.Machine item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var software = new Software
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Machine.NameKey),
|
||||
@@ -65,13 +64,31 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
var infos = item.Read<Models.Internal.Info[]>(Models.Internal.Machine.InfoKey);
|
||||
software.Info = infos?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (infos != null && infos.Any())
|
||||
{
|
||||
software.Info = infos
|
||||
.Where(i => i != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var sharedFeats = item.Read<Models.Internal.SharedFeat[]>(Models.Internal.Machine.SharedFeatKey);
|
||||
software.SharedFeat = sharedFeats?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (sharedFeats != null && sharedFeats.Any())
|
||||
{
|
||||
software.SharedFeat = sharedFeats
|
||||
.Where(s => s != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var parts = item.Read<Models.Internal.Part[]>(Models.Internal.Machine.PartKey);
|
||||
software.Part = parts?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (parts != null && parts.Any())
|
||||
{
|
||||
software.Part = parts
|
||||
.Where(p => p != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return software;
|
||||
}
|
||||
@@ -79,11 +96,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.DataArea"/> to <cref="Models.SoftwareList.DataArea"/>
|
||||
/// </summary>
|
||||
private static DataArea? ConvertFromInternalModel(Models.Internal.DataArea? item)
|
||||
private static DataArea ConvertFromInternalModel(Models.Internal.DataArea item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var dataArea = new DataArea
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.DataArea.NameKey),
|
||||
@@ -93,7 +107,13 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.DataArea.RomKey);
|
||||
dataArea.Rom = roms?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (roms != null && roms.Any())
|
||||
{
|
||||
dataArea.Rom = roms
|
||||
.Where(r => r != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return dataArea;
|
||||
}
|
||||
@@ -101,11 +121,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.DipSwitch"/> to <cref="Models.SoftwareList.DipSwitch"/>
|
||||
/// </summary>
|
||||
private static DipSwitch? ConvertFromInternalModel(Models.Internal.DipSwitch? item)
|
||||
private static DipSwitch ConvertFromInternalModel(Models.Internal.DipSwitch item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var dipSwitch = new DipSwitch
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.DipSwitch.NameKey),
|
||||
@@ -114,7 +131,13 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
var dipValues = item.Read<Models.Internal.DipValue[]>(Models.Internal.DipSwitch.DipValueKey);
|
||||
dipSwitch.DipValue = dipValues?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (dipValues != null && dipValues.Any())
|
||||
{
|
||||
dipSwitch.DipValue = dipValues
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return dipSwitch;
|
||||
}
|
||||
@@ -122,11 +145,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.DipValue"/> to <cref="Models.SoftwareList.DipValue"/>
|
||||
/// </summary>
|
||||
private static DipValue? ConvertFromInternalModel(Models.Internal.DipValue? item)
|
||||
private static DipValue ConvertFromInternalModel(Models.Internal.DipValue item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var dipValue = new DipValue
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.DipValue.NameKey),
|
||||
@@ -139,11 +159,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Disk"/> to <cref="Models.SoftwareList.Disk"/>
|
||||
/// </summary>
|
||||
private static Disk? ConvertFromInternalModel(Models.Internal.Disk? item)
|
||||
private static Disk ConvertFromInternalModel(Models.Internal.Disk item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var disk = new Disk
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Disk.NameKey),
|
||||
@@ -158,18 +175,21 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.DiskArea"/> to <cref="Models.SoftwareList.DiskArea"/>
|
||||
/// </summary>
|
||||
private static DiskArea? ConvertFromInternalModel(Models.Internal.DiskArea? item)
|
||||
private static DiskArea ConvertFromInternalModel(Models.Internal.DiskArea item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var diskArea = new DiskArea
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.DiskArea.NameKey),
|
||||
};
|
||||
|
||||
var disks = item.Read<Models.Internal.Disk[]>(Models.Internal.DiskArea.DiskKey);
|
||||
diskArea.Disk = disks?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (disks != null && disks.Any())
|
||||
{
|
||||
diskArea.Disk = disks
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return diskArea;
|
||||
}
|
||||
@@ -177,11 +197,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Feature"/> to <cref="Models.SoftwareList.Feature"/>
|
||||
/// </summary>
|
||||
private static Feature? ConvertFromInternalModel(Models.Internal.Feature? item)
|
||||
private static Feature ConvertFromInternalModel(Models.Internal.Feature item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var feature = new Feature
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Feature.NameKey),
|
||||
@@ -193,11 +210,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Info"/> to <cref="Models.SoftwareList.Info"/>
|
||||
/// </summary>
|
||||
private static Info? ConvertFromInternalModel(Models.Internal.Info? item)
|
||||
private static Info ConvertFromInternalModel(Models.Internal.Info item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var info = new Info
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Info.NameKey),
|
||||
@@ -209,11 +223,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Part"/> to <cref="Models.SoftwareList.Part"/>
|
||||
/// </summary>
|
||||
private static Part? ConvertFromInternalModel(Models.Internal.Part? item)
|
||||
private static Part ConvertFromInternalModel(Models.Internal.Part item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var part = new Part
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Part.NameKey),
|
||||
@@ -221,16 +232,40 @@ namespace SabreTools.Serialization
|
||||
};
|
||||
|
||||
var features = item.Read<Models.Internal.Feature[]>(Models.Internal.Part.FeatureKey);
|
||||
part.Feature = features?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (features != null && features.Any())
|
||||
{
|
||||
part.Feature = features
|
||||
.Where(f => f != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var dataAreas = item.Read<Models.Internal.DataArea[]>(Models.Internal.Part.DataAreaKey);
|
||||
part.DataArea = dataAreas?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (dataAreas != null && dataAreas.Any())
|
||||
{
|
||||
part.DataArea = dataAreas
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var diskAreas = item.Read<Models.Internal.DiskArea[]>(Models.Internal.Part.DiskAreaKey);
|
||||
part.DiskArea = diskAreas?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (diskAreas != null && diskAreas.Any())
|
||||
{
|
||||
part.DiskArea = diskAreas
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var dipSwitches = item.Read<Models.Internal.DipSwitch[]>(Models.Internal.Part.DipSwitchKey);
|
||||
part.DipSwitch = dipSwitches?.Select(ConvertFromInternalModel)?.ToArray();
|
||||
if (dipSwitches != null && dipSwitches.Any())
|
||||
{
|
||||
part.DipSwitch = dipSwitches
|
||||
.Where(d => d != null)
|
||||
.Select(ConvertFromInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return part;
|
||||
}
|
||||
@@ -238,11 +273,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.SoftwareList.Rom"/>
|
||||
/// </summary>
|
||||
private static Rom? ConvertFromInternalModel(Models.Internal.Rom? item)
|
||||
private static Rom ConvertFromInternalModel(Models.Internal.Rom item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var rom = new Rom
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.Rom.NameKey),
|
||||
@@ -261,11 +293,8 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.Internal.SharedFeat"/> to <cref="Models.SoftwareList.SharedFeat"/>
|
||||
/// </summary>
|
||||
private static SharedFeat? ConvertFromInternalModel(Models.Internal.SharedFeat? item)
|
||||
private static SharedFeat ConvertFromInternalModel(Models.Internal.SharedFeat item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var sharedFeat = new SharedFeat
|
||||
{
|
||||
Name = item.ReadString(Models.Internal.SharedFeat.NameKey),
|
||||
|
||||
@@ -22,15 +22,23 @@ namespace SabreTools.Serialization
|
||||
/// <summary>
|
||||
/// Convert from <cref="Models.SoftwareList.SoftwareList"/> to <cref="Models.Internal.MetadataFile"/>
|
||||
/// </summary>
|
||||
public static Models.Internal.MetadataFile ConvertToInternalModel(SoftwareList item)
|
||||
public static Models.Internal.MetadataFile? ConvertToInternalModel(SoftwareList? item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
|
||||
var metadataFile = new Models.Internal.MetadataFile
|
||||
{
|
||||
[Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item),
|
||||
};
|
||||
|
||||
if (item?.Software != null && item.Software.Any())
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Software.Select(ConvertMachineToInternalModel).ToArray();
|
||||
{
|
||||
metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Software
|
||||
.Where(s => s != null)
|
||||
.Select(ConvertMachineToInternalModel)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
return metadataFile;
|
||||
}
|
||||
|
||||
@@ -589,10 +589,10 @@ namespace SabreTools.Test.Parser
|
||||
Assert.Null(item.ADDITIONAL_ELEMENTS);
|
||||
}
|
||||
|
||||
foreach (var item in game.Driver ?? Array.Empty<Models.Logiqx.Driver>())
|
||||
if (game.Driver != null)
|
||||
{
|
||||
Assert.Null(item.ADDITIONAL_ATTRIBUTES);
|
||||
Assert.Null(item.ADDITIONAL_ELEMENTS);
|
||||
Assert.Null(game.Driver.ADDITIONAL_ATTRIBUTES);
|
||||
Assert.Null(game.Driver.ADDITIONAL_ELEMENTS);
|
||||
}
|
||||
|
||||
foreach (var item in game.SoftwareList ?? Array.Empty<Models.Logiqx.SoftwareList>())
|
||||
@@ -664,10 +664,10 @@ namespace SabreTools.Test.Parser
|
||||
Assert.Null(item.ADDITIONAL_ELEMENTS);
|
||||
}
|
||||
|
||||
foreach (var item in game.Driver ?? Array.Empty<Models.Logiqx.Driver>())
|
||||
if (game.Driver != null)
|
||||
{
|
||||
Assert.Null(item.ADDITIONAL_ATTRIBUTES);
|
||||
Assert.Null(item.ADDITIONAL_ELEMENTS);
|
||||
Assert.Null(game.Driver.ADDITIONAL_ATTRIBUTES);
|
||||
Assert.Null(game.Driver.ADDITIONAL_ELEMENTS);
|
||||
}
|
||||
|
||||
foreach (var item in game.SoftwareList ?? Array.Empty<Models.Logiqx.SoftwareList>())
|
||||
|
||||
Reference in New Issue
Block a user