mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Add full-file deserialization across the board
This commit is contained in:
@@ -8,13 +8,29 @@ namespace SabreTools.Serialization
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class ArchiveDotOrg : XmlSerializer<Files>
|
public partial class ArchiveDotOrg : XmlSerializer<Files>
|
||||||
{
|
{
|
||||||
// TODO: Add deserialization of entire Files
|
|
||||||
#region Internal
|
#region Internal
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert from <cref="Models.Internal.MetadataFile"/> to an array of <cref="Models.ArchiveDotOrg.Files"/>
|
||||||
|
/// </summary>
|
||||||
|
public static Files? ConvertFromInternalModel(Models.Internal.MetadataFile? item)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var files = new Files();
|
||||||
|
|
||||||
|
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||||
|
if (machines != null && machines.Any())
|
||||||
|
files.File = machines.SelectMany(ConvertFromInternalModel).ToArray();
|
||||||
|
|
||||||
|
return files;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Machine"/> to an array of <cref="Models.ArchiveDotOrg.File"/>
|
/// Convert from <cref="Models.Internal.Machine"/> to an array of <cref="Models.ArchiveDotOrg.File"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static File[]? ConvertFromInternalModel(Models.Internal.Machine? item)
|
private static File[]? ConvertFromInternalModel(Models.Internal.Machine? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -121,13 +121,30 @@ namespace SabreTools.Serialization
|
|||||||
return dat;
|
return dat;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Add deserialization of entire MetadataFile
|
|
||||||
#region Internal
|
#region Internal
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert from <cref="Models.Internal.MetadataFile"/> to <cref="Models.AttractMode.MetadataFile"/>
|
||||||
|
/// </summary>
|
||||||
|
public static MetadataFile? ConvertFromInternalModel(Models.Internal.MetadataFile? item)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var header = item.Read<Models.Internal.Header>(Models.Internal.MetadataFile.HeaderKey);
|
||||||
|
var metadataFile = header != null ? ConvertHeaderFromInternalModel(header) : new MetadataFile();
|
||||||
|
|
||||||
|
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||||
|
if (machines != null && machines.Any())
|
||||||
|
metadataFile.Row = machines.SelectMany(ConvertMachineFromInternalModel).ToArray();
|
||||||
|
|
||||||
|
return metadataFile;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.AttractMode.MetadataFile"/>
|
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.AttractMode.MetadataFile"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static MetadataFile? ConvertHeaderToInternalModel(Models.Internal.Header? item)
|
private static MetadataFile? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
@@ -142,7 +159,7 @@ namespace SabreTools.Serialization
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Machine"/> to an array of <cref="Models.AttractMode.Row"/>
|
/// Convert from <cref="Models.Internal.Machine"/> to an array of <cref="Models.AttractMode.Row"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Row?[]? ConvertMachineToInternalModel(Models.Internal.Machine? item)
|
private static Row?[]? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
@@ -153,7 +170,7 @@ namespace SabreTools.Serialization
|
|||||||
if (rom == null)
|
if (rom == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
var rowItem = ConvertToInternalModel(rom);
|
var rowItem = ConvertFromInternalModel(rom);
|
||||||
|
|
||||||
rowItem.Name = item.ReadString(Models.Internal.Machine.NameKey);
|
rowItem.Name = item.ReadString(Models.Internal.Machine.NameKey);
|
||||||
rowItem.Emulator = item.ReadString(Models.Internal.Machine.EmulatorKey);
|
rowItem.Emulator = item.ReadString(Models.Internal.Machine.EmulatorKey);
|
||||||
@@ -181,7 +198,7 @@ namespace SabreTools.Serialization
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.AttractMode.Row"/>
|
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.AttractMode.Row"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static Row? ConvertToInternalModel(Models.Internal.Rom? item)
|
private static Row? ConvertFromInternalModel(Models.Internal.Rom? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -830,13 +830,33 @@ namespace SabreTools.Serialization
|
|||||||
return driver;
|
return driver;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Add deserialization of entire MetadataFile
|
|
||||||
#region Internal
|
#region Internal
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert from <cref="Models.Internal.MetadataFile"/> to <cref="Models.ClrMamePro.MetadataFile"/>
|
||||||
|
/// </summary>
|
||||||
|
public static MetadataFile? ConvertFromInternalModel(Models.Internal.MetadataFile? item, bool game = false)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var metadataFile = new MetadataFile();
|
||||||
|
|
||||||
|
var header = item.Read<Models.Internal.Header>(Models.Internal.MetadataFile.HeaderKey);
|
||||||
|
if (header != null)
|
||||||
|
metadataFile.ClrMamePro = ConvertHeaderFromInternalModel(header);
|
||||||
|
|
||||||
|
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();
|
||||||
|
|
||||||
|
return metadataFile;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.ClrMamePro.ClrMamePro"/>
|
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.ClrMamePro.ClrMamePro"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Models.ClrMamePro.ClrMamePro? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
private static Models.ClrMamePro.ClrMamePro? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
@@ -865,7 +885,7 @@ namespace SabreTools.Serialization
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Archive"/> to <cref="Models.ClrMamePro.Machine"/>
|
/// Convert from <cref="Models.Internal.Archive"/> to <cref="Models.ClrMamePro.Machine"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static GameBase? ConvertMachineFromInternalModel(Models.Internal.Machine? item, bool game = false)
|
private static GameBase? ConvertMachineFromInternalModel(Models.Internal.Machine? item, bool game = false)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -19,16 +19,8 @@ namespace SabreTools.Serialization
|
|||||||
/// <returns>Deserialized data on success, null on failure</returns>
|
/// <returns>Deserialized data on success, null on failure</returns>
|
||||||
public static MetadataFile? Deserialize(string path)
|
public static MetadataFile? Deserialize(string path)
|
||||||
{
|
{
|
||||||
try
|
using var stream = PathProcessor.OpenStream(path);
|
||||||
{
|
return Deserialize(stream);
|
||||||
using var stream = PathProcessor.OpenStream(path);
|
|
||||||
return Deserialize(stream);
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
// TODO: Handle logging the exception
|
|
||||||
return default;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -38,163 +30,155 @@ namespace SabreTools.Serialization
|
|||||||
/// <returns>Deserialized data on success, null on failure</returns>
|
/// <returns>Deserialized data on success, null on failure</returns>
|
||||||
public static MetadataFile? Deserialize(Stream? stream)
|
public static MetadataFile? Deserialize(Stream? stream)
|
||||||
{
|
{
|
||||||
try
|
// If the stream is null
|
||||||
|
if (stream == null)
|
||||||
|
return default;
|
||||||
|
|
||||||
|
// Setup the reader and output
|
||||||
|
var reader = new ClrMameProReader(stream, Encoding.UTF8) { DosCenter = true };
|
||||||
|
var dat = new MetadataFile();
|
||||||
|
|
||||||
|
// Loop through and parse out the values
|
||||||
|
string lastTopLevel = reader.TopLevel;
|
||||||
|
|
||||||
|
Game? game = null;
|
||||||
|
var games = new List<Game?>();
|
||||||
|
var files = new List<Models.DosCenter.File?>();
|
||||||
|
|
||||||
|
var additional = new List<string>();
|
||||||
|
var headerAdditional = new List<string>();
|
||||||
|
var gameAdditional = new List<string>();
|
||||||
|
var fileAdditional = new List<string>();
|
||||||
|
while (!reader.EndOfStream)
|
||||||
{
|
{
|
||||||
// If the stream is null
|
// If we have no next line
|
||||||
if (stream == null)
|
if (!reader.ReadNextLine())
|
||||||
return default;
|
break;
|
||||||
|
|
||||||
// Setup the reader and output
|
// Ignore certain row types
|
||||||
var reader = new ClrMameProReader(stream, Encoding.UTF8) { DosCenter = true };
|
switch (reader.RowType)
|
||||||
var dat = new MetadataFile();
|
|
||||||
|
|
||||||
// Loop through and parse out the values
|
|
||||||
string lastTopLevel = reader.TopLevel;
|
|
||||||
|
|
||||||
Game? game = null;
|
|
||||||
var games = new List<Game?>();
|
|
||||||
var files = new List<Models.DosCenter.File?>();
|
|
||||||
|
|
||||||
var additional = new List<string>();
|
|
||||||
var headerAdditional = new List<string>();
|
|
||||||
var gameAdditional = new List<string>();
|
|
||||||
var fileAdditional = new List<string>();
|
|
||||||
while (!reader.EndOfStream)
|
|
||||||
{
|
{
|
||||||
// If we have no next line
|
case CmpRowType.None:
|
||||||
if (!reader.ReadNextLine())
|
case CmpRowType.Comment:
|
||||||
break;
|
continue;
|
||||||
|
case CmpRowType.EndTopLevel:
|
||||||
// Ignore certain row types
|
switch (lastTopLevel)
|
||||||
switch (reader.RowType)
|
|
||||||
{
|
|
||||||
case CmpRowType.None:
|
|
||||||
case CmpRowType.Comment:
|
|
||||||
continue;
|
|
||||||
case CmpRowType.EndTopLevel:
|
|
||||||
switch (lastTopLevel)
|
|
||||||
{
|
|
||||||
case "doscenter":
|
|
||||||
dat.DosCenter.ADDITIONAL_ELEMENTS = headerAdditional.ToArray();
|
|
||||||
headerAdditional.Clear();
|
|
||||||
break;
|
|
||||||
case "game":
|
|
||||||
game.File = files.ToArray();
|
|
||||||
game.ADDITIONAL_ELEMENTS = gameAdditional.ToArray();
|
|
||||||
games.Add(game);
|
|
||||||
|
|
||||||
game = null;
|
|
||||||
files.Clear();
|
|
||||||
gameAdditional.Clear();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// No-op
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we're at the root
|
|
||||||
if (reader.RowType == CmpRowType.TopLevel)
|
|
||||||
{
|
|
||||||
lastTopLevel = reader.TopLevel;
|
|
||||||
switch (reader.TopLevel)
|
|
||||||
{
|
{
|
||||||
case "doscenter":
|
case "doscenter":
|
||||||
dat.DosCenter = new Models.DosCenter.DosCenter();
|
dat.DosCenter.ADDITIONAL_ELEMENTS = headerAdditional.ToArray();
|
||||||
|
headerAdditional.Clear();
|
||||||
break;
|
break;
|
||||||
case "game":
|
case "game":
|
||||||
game = new Game();
|
game.File = files.ToArray();
|
||||||
|
game.ADDITIONAL_ELEMENTS = gameAdditional.ToArray();
|
||||||
|
games.Add(game);
|
||||||
|
|
||||||
|
game = null;
|
||||||
|
files.Clear();
|
||||||
|
gameAdditional.Clear();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
additional.Add(reader.CurrentLine);
|
// No-op
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// If we're in the doscenter block
|
// If we're at the root
|
||||||
else if (reader.TopLevel == "doscenter" && reader.RowType == CmpRowType.Standalone)
|
if (reader.RowType == CmpRowType.TopLevel)
|
||||||
|
{
|
||||||
|
lastTopLevel = reader.TopLevel;
|
||||||
|
switch (reader.TopLevel)
|
||||||
{
|
{
|
||||||
// Create the block if we haven't already
|
case "doscenter":
|
||||||
dat.DosCenter ??= new Models.DosCenter.DosCenter();
|
dat.DosCenter = new Models.DosCenter.DosCenter();
|
||||||
|
break;
|
||||||
switch (reader.Standalone?.Key?.ToLowerInvariant())
|
case "game":
|
||||||
{
|
game = new Game();
|
||||||
case "name:":
|
break;
|
||||||
dat.DosCenter.Name = reader.Standalone?.Value;
|
default:
|
||||||
break;
|
additional.Add(reader.CurrentLine);
|
||||||
case "description:":
|
break;
|
||||||
dat.DosCenter.Description = reader.Standalone?.Value;
|
|
||||||
break;
|
|
||||||
case "version:":
|
|
||||||
dat.DosCenter.Version = reader.Standalone?.Value;
|
|
||||||
break;
|
|
||||||
case "date:":
|
|
||||||
dat.DosCenter.Date = reader.Standalone?.Value;
|
|
||||||
break;
|
|
||||||
case "author:":
|
|
||||||
dat.DosCenter.Author = reader.Standalone?.Value;
|
|
||||||
break;
|
|
||||||
case "homepage:":
|
|
||||||
dat.DosCenter.Homepage = reader.Standalone?.Value;
|
|
||||||
break;
|
|
||||||
case "comment:":
|
|
||||||
dat.DosCenter.Comment = reader.Standalone?.Value;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
headerAdditional.Add(item: reader.CurrentLine);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we're in a game block
|
|
||||||
else if (reader.TopLevel == "game" && reader.RowType == CmpRowType.Standalone)
|
|
||||||
{
|
|
||||||
// Create the block if we haven't already
|
|
||||||
game ??= new Game();
|
|
||||||
|
|
||||||
switch (reader.Standalone?.Key?.ToLowerInvariant())
|
|
||||||
{
|
|
||||||
case "name":
|
|
||||||
game.Name = reader.Standalone?.Value;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
gameAdditional.Add(item: reader.CurrentLine);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we're in a file block
|
|
||||||
else if (reader.TopLevel == "game" && reader.RowType == CmpRowType.Internal)
|
|
||||||
{
|
|
||||||
// If we have an unknown type, log it
|
|
||||||
if (reader.InternalName != "file")
|
|
||||||
{
|
|
||||||
gameAdditional.Add(reader.CurrentLine);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create the file and add to the list
|
|
||||||
var file = CreateFile(reader);
|
|
||||||
files.Add(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
additional.Add(item: reader.CurrentLine);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add extra pieces and return
|
// If we're in the doscenter block
|
||||||
dat.Game = games.ToArray();
|
else if (reader.TopLevel == "doscenter" && reader.RowType == CmpRowType.Standalone)
|
||||||
dat.ADDITIONAL_ELEMENTS = additional.ToArray();
|
{
|
||||||
return dat;
|
// Create the block if we haven't already
|
||||||
}
|
dat.DosCenter ??= new Models.DosCenter.DosCenter();
|
||||||
catch
|
|
||||||
{
|
switch (reader.Standalone?.Key?.ToLowerInvariant())
|
||||||
// TODO: Handle logging the exception
|
{
|
||||||
return default;
|
case "name:":
|
||||||
|
dat.DosCenter.Name = reader.Standalone?.Value;
|
||||||
|
break;
|
||||||
|
case "description:":
|
||||||
|
dat.DosCenter.Description = reader.Standalone?.Value;
|
||||||
|
break;
|
||||||
|
case "version:":
|
||||||
|
dat.DosCenter.Version = reader.Standalone?.Value;
|
||||||
|
break;
|
||||||
|
case "date:":
|
||||||
|
dat.DosCenter.Date = reader.Standalone?.Value;
|
||||||
|
break;
|
||||||
|
case "author:":
|
||||||
|
dat.DosCenter.Author = reader.Standalone?.Value;
|
||||||
|
break;
|
||||||
|
case "homepage:":
|
||||||
|
dat.DosCenter.Homepage = reader.Standalone?.Value;
|
||||||
|
break;
|
||||||
|
case "comment:":
|
||||||
|
dat.DosCenter.Comment = reader.Standalone?.Value;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
headerAdditional.Add(item: reader.CurrentLine);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we're in a game block
|
||||||
|
else if (reader.TopLevel == "game" && reader.RowType == CmpRowType.Standalone)
|
||||||
|
{
|
||||||
|
// Create the block if we haven't already
|
||||||
|
game ??= new Game();
|
||||||
|
|
||||||
|
switch (reader.Standalone?.Key?.ToLowerInvariant())
|
||||||
|
{
|
||||||
|
case "name":
|
||||||
|
game.Name = reader.Standalone?.Value;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
gameAdditional.Add(item: reader.CurrentLine);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we're in a file block
|
||||||
|
else if (reader.TopLevel == "game" && reader.RowType == CmpRowType.Internal)
|
||||||
|
{
|
||||||
|
// If we have an unknown type, log it
|
||||||
|
if (reader.InternalName != "file")
|
||||||
|
{
|
||||||
|
gameAdditional.Add(reader.CurrentLine);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the file and add to the list
|
||||||
|
var file = CreateFile(reader);
|
||||||
|
files.Add(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
additional.Add(item: reader.CurrentLine);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add extra pieces and return
|
||||||
|
dat.Game = games.ToArray();
|
||||||
|
dat.ADDITIONAL_ELEMENTS = additional.ToArray();
|
||||||
|
return dat;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -231,14 +215,34 @@ namespace SabreTools.Serialization
|
|||||||
file.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
file.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Add deserialization of entire MetadataFile
|
|
||||||
#region Internal
|
#region Internal
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert from <cref="Models.Internal.MetadataFile"/> to <cref="Models.DosCenter.MetadataFile"/>
|
||||||
|
/// </summary>
|
||||||
|
public static MetadataFile? ConvertFromInternalModel(Models.Internal.MetadataFile? item)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var metadataFile = new MetadataFile();
|
||||||
|
|
||||||
|
var header = item.Read<Models.Internal.Header>(Models.Internal.MetadataFile.HeaderKey);
|
||||||
|
if (header != null)
|
||||||
|
metadataFile.DosCenter = ConvertHeaderFromInternalModel(header);
|
||||||
|
|
||||||
|
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||||
|
if (machines != null && machines.Any())
|
||||||
|
metadataFile.Game = machines.Select(ConvertMachineFromInternalModel).ToArray();
|
||||||
|
|
||||||
|
return metadataFile;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.DosCenter.DosCenter"/>
|
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.DosCenter.DosCenter"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Models.DosCenter.DosCenter? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
private static Models.DosCenter.DosCenter? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
@@ -259,7 +263,7 @@ namespace SabreTools.Serialization
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.DosCenter.Game"/>
|
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.DosCenter.Game"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Game? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
private static Game? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -77,25 +77,41 @@ namespace SabreTools.Serialization
|
|||||||
return dat;
|
return dat;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Add deserialization of entire MetadataFile
|
|
||||||
#region Internal
|
#region Internal
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert from <cref="Models.Internal.MetadataFile"/> to <cref="Models.EverdriveSMDB.MetadataFile"/>
|
||||||
|
/// </summary>
|
||||||
|
public static MetadataFile? ConvertFromInternalModel(Models.Internal.MetadataFile? item)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var metadataFile = new MetadataFile();
|
||||||
|
|
||||||
|
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||||
|
if (machines != null && machines.Any())
|
||||||
|
metadataFile.Row = machines.SelectMany(ConvertMachineFromInternalModel).ToArray();
|
||||||
|
|
||||||
|
return metadataFile;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Machine"/> to an array of <cref="Models.EverdriveSMDB.Row"/>
|
/// Convert from <cref="Models.Internal.Machine"/> to an array of <cref="Models.EverdriveSMDB.Row"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Row[]? ConvertMachineToEverdriveSMDB(Models.Internal.Machine item)
|
private static Row[]? ConvertMachineFromInternalModel(Models.Internal.Machine item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
||||||
return roms?.Select(ConvertToEverdriveSMDB)?.ToArray();
|
return roms?.Select(ConvertFromInternalModel)?.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.EverdriveSMDB.Row"/>
|
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.EverdriveSMDB.Row"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static Row? ConvertToEverdriveSMDB(Models.Internal.Rom? item)
|
private static Row? ConvertFromInternalModel(Models.Internal.Rom? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -142,13 +142,27 @@ namespace SabreTools.Serialization
|
|||||||
return dat;
|
return dat;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Add deserialization of entire Hashfile
|
|
||||||
#region Internal
|
#region Internal
|
||||||
|
|
||||||
|
/// <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)
|
||||||
|
{
|
||||||
|
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 null;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.Hashfile.Hashfile"/>
|
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.Hashfile.Hashfile"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Models.Hashfile.Hashfile? ConvertMachineToInternalModel(Models.Internal.Machine? item, Hash hash)
|
private static Models.Hashfile.Hashfile? ConvertMachineFromInternalModel(Models.Internal.Machine? item, Hash hash)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -188,13 +188,29 @@ namespace SabreTools.Serialization
|
|||||||
return dat;
|
return dat;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Add deserialization of entire MetadataFile
|
|
||||||
#region Internal
|
#region Internal
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert from <cref="Models.Internal.MetadataFile"/> to <cref="Models.Listrom.MetadataFile"/>
|
||||||
|
/// </summary>
|
||||||
|
public static MetadataFile? ConvertFromInternalModel(Models.Internal.MetadataFile? item)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var metadataFile = new MetadataFile();
|
||||||
|
|
||||||
|
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||||
|
if (machines != null && machines.Any())
|
||||||
|
metadataFile.Set = machines.Select(ConvertMachineFromInternalModel).ToArray();
|
||||||
|
|
||||||
|
return metadataFile;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.Listrom.Set"/>
|
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.Listrom.Set"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Set? ConvertMachineToListrom(Models.Internal.Machine? item)
|
private static Set? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
@@ -209,11 +225,11 @@ namespace SabreTools.Serialization
|
|||||||
|
|
||||||
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
var roms = item.Read<Models.Internal.Rom[]>(Models.Internal.Machine.RomKey);
|
||||||
if (roms != null)
|
if (roms != null)
|
||||||
rowItems.AddRange(roms.Select(ConvertToListrom));
|
rowItems.AddRange(roms.Select(ConvertFromInternalModel));
|
||||||
|
|
||||||
var disks = item.Read<Models.Internal.Disk[]>(Models.Internal.Machine.DiskKey);
|
var disks = item.Read<Models.Internal.Disk[]>(Models.Internal.Machine.DiskKey);
|
||||||
if (disks != null)
|
if (disks != null)
|
||||||
rowItems.AddRange(disks.Select(ConvertToListrom));
|
rowItems.AddRange(disks.Select(ConvertFromInternalModel));
|
||||||
|
|
||||||
set.Row = rowItems.ToArray();
|
set.Row = rowItems.ToArray();
|
||||||
return set;
|
return set;
|
||||||
@@ -222,7 +238,7 @@ namespace SabreTools.Serialization
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Disk"/> to <cref="Models.Listrom.Row"/>
|
/// Convert from <cref="Models.Internal.Disk"/> to <cref="Models.Listrom.Row"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static Row? ConvertToListrom(Models.Internal.Disk? item)
|
private static Row? ConvertFromInternalModel(Models.Internal.Disk? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
@@ -245,7 +261,7 @@ namespace SabreTools.Serialization
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.Listrom.Row"/>
|
/// Convert from <cref="Models.Internal.Rom"/> to <cref="Models.Listrom.Row"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static Row? ConvertToListrom(Models.Internal.Rom? item)
|
private static Row? ConvertFromInternalModel(Models.Internal.Rom? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -10,10 +10,46 @@ namespace SabreTools.Serialization
|
|||||||
{
|
{
|
||||||
#region Internal
|
#region Internal
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert from <cref="Models.Internal.MetadataFile"/> to <cref="Models.Listxml.M1"/>
|
||||||
|
/// </summary>
|
||||||
|
public static M1? ConvertM1FromInternalModel(Models.Internal.MetadataFile? item)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var header = item.Read<Models.Internal.Header>(Models.Internal.MetadataFile.HeaderKey);
|
||||||
|
var m1 = header != null ? ConvertM1FromInternalModel(header) : new M1();
|
||||||
|
|
||||||
|
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||||
|
if (machines != null && machines.Any())
|
||||||
|
m1.Game = machines.Select(ConvertMachineFromInternalModel).ToArray();
|
||||||
|
|
||||||
|
return m1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert from <cref="Models.Internal.MetadataFile"/> to <cref="Models.Listxml.Mame"/>
|
||||||
|
/// </summary>
|
||||||
|
public static Mame? ConvertMameFromInternalModel(Models.Internal.MetadataFile? item)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var header = item.Read<Models.Internal.Header>(Models.Internal.MetadataFile.HeaderKey);
|
||||||
|
var mame = header != null ? ConvertMameFromInternalModel(header) : new Mame();
|
||||||
|
|
||||||
|
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||||
|
if (machines != null && machines.Any())
|
||||||
|
mame.Game = machines.Select(ConvertMachineFromInternalModel).ToArray();
|
||||||
|
|
||||||
|
return mame;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.Listxml.M1"/>
|
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.Listxml.M1"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static M1? ConvertM1FromInternalModel(Models.Internal.Header? item)
|
private static M1? ConvertM1FromInternalModel(Models.Internal.Header? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
@@ -28,7 +64,7 @@ namespace SabreTools.Serialization
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.Listxml.Mame"/>
|
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.Listxml.Mame"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Mame? ConvertMameFromInternalModel(Models.Internal.Header? item)
|
private static Mame? ConvertMameFromInternalModel(Models.Internal.Header? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
@@ -39,13 +75,14 @@ namespace SabreTools.Serialization
|
|||||||
Debug = item.ReadString(Models.Internal.Header.DebugKey),
|
Debug = item.ReadString(Models.Internal.Header.DebugKey),
|
||||||
MameConfig = item.ReadString(Models.Internal.Header.MameConfigKey),
|
MameConfig = item.ReadString(Models.Internal.Header.MameConfigKey),
|
||||||
};
|
};
|
||||||
|
|
||||||
return mame;
|
return mame;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.Listxml.GameBase"/>
|
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.Listxml.GameBase"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static GameBase? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
private static GameBase? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -8,13 +8,39 @@ namespace SabreTools.Serialization
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class Logiqx : XmlSerializer<Datafile>
|
public partial class Logiqx : XmlSerializer<Datafile>
|
||||||
{
|
{
|
||||||
// TODO: Add deserialization of entire Datafile
|
|
||||||
#region Internal
|
#region Internal
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert from <cref="Models.Internal.MetadataFile"/> to <cref="Models.Logiqx.Datafile"/>
|
||||||
|
/// </summary>
|
||||||
|
public static Datafile? ConvertFromInternalModel(Models.Internal.MetadataFile? item, bool game = false)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var datafile = new Datafile
|
||||||
|
{
|
||||||
|
Build = item.ReadString(Models.Internal.Header.BuildKey),
|
||||||
|
Debug = item.ReadString(Models.Internal.Header.DebugKey),
|
||||||
|
SchemaLocation = item.ReadString(Models.Internal.Header.SchemaLocationKey),
|
||||||
|
};
|
||||||
|
|
||||||
|
var header = item.Read<Models.Internal.Header>(Models.Internal.MetadataFile.HeaderKey);
|
||||||
|
if (header != null)
|
||||||
|
datafile.Header = ConvertHeaderFromInternalModel(header);
|
||||||
|
|
||||||
|
// TODO: Handle Dir items
|
||||||
|
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();
|
||||||
|
|
||||||
|
return datafile;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.Logiqx.Header"/>
|
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.Logiqx.Header"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Header? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
private static Header ConvertHeaderFromInternalModel(Models.Internal.Header item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
@@ -76,7 +102,7 @@ namespace SabreTools.Serialization
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.Logiqx.GameBase"/>
|
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.Logiqx.GameBase"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static GameBase? ConvertMachineFromInternalModel(Models.Internal.Machine? item, bool game = false)
|
private static GameBase? ConvertMachineFromInternalModel(Models.Internal.Machine? item, bool game = false)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -8,13 +8,30 @@ namespace SabreTools.Serialization
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class OfflineList : XmlSerializer<Dat>
|
public partial class OfflineList : XmlSerializer<Dat>
|
||||||
{
|
{
|
||||||
// TODO: Add deserialization of entire Dat
|
|
||||||
#region Internal
|
#region Internal
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert from <cref="Models.Internal.MetadataFile"/> to <cref="Models.OfflineList.Dat"/>
|
||||||
|
/// </summary>
|
||||||
|
public static Dat? ConvertFromInternalModel(Models.Internal.MetadataFile? item)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var header = item.Read<Models.Internal.Header>(Models.Internal.MetadataFile.HeaderKey);
|
||||||
|
var dat = header != null ? ConvertHeaderFromInternalModel(header) : new Dat();
|
||||||
|
|
||||||
|
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() };
|
||||||
|
|
||||||
|
return dat;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.OfflineList.Dat"/>
|
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.OfflineList.Dat"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Dat? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
private static Dat? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
@@ -66,7 +83,7 @@ namespace SabreTools.Serialization
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.OfflineList.Game"/>
|
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.OfflineList.Game"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Game? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
private static Game? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -8,13 +8,30 @@ namespace SabreTools.Serialization
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class OpenMSX : XmlSerializer<SoftwareDb>
|
public partial class OpenMSX : XmlSerializer<SoftwareDb>
|
||||||
{
|
{
|
||||||
// TODO: Add deserialization of entire SoftwareDb
|
|
||||||
#region Internal
|
#region Internal
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert from <cref="Models.Internal.MetadataFile"/> to <cref="Models.OpenMSX.SoftwareDb"/>
|
||||||
|
/// </summary>
|
||||||
|
public static SoftwareDb? ConvertFromInternalModel(Models.Internal.MetadataFile? item)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var header = item.Read<Models.Internal.Header>(Models.Internal.MetadataFile.HeaderKey);
|
||||||
|
var softwareDb = header != null ? ConvertHeaderFromInternalModel(header) : new SoftwareDb();
|
||||||
|
|
||||||
|
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||||
|
if (machines != null && machines.Any())
|
||||||
|
softwareDb.Software = machines.Select(ConvertMachineFromInternalModel).ToArray();
|
||||||
|
|
||||||
|
return softwareDb;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.OpenMSX.SoftwareDb"/>
|
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.OpenMSX.SoftwareDb"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static SoftwareDb? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
private static SoftwareDb? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
@@ -29,7 +46,7 @@ namespace SabreTools.Serialization
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.OpenMSX.Software"/>
|
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.OpenMSX.Software"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Software? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
private static Software? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -221,13 +221,30 @@ namespace SabreTools.Serialization
|
|||||||
return dat;
|
return dat;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Add deserialization of entire MetadataFile
|
|
||||||
#region Internal
|
#region Internal
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert from <cref="Models.Internal.MetadataFile"/> to <cref="Models.RomCenter.MetadataFile"/>
|
||||||
|
/// </summary>
|
||||||
|
public static MetadataFile? ConvertFromInternalModel(Models.Internal.MetadataFile? item)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var header = item.Read<Models.Internal.Header>(Models.Internal.MetadataFile.HeaderKey);
|
||||||
|
var metadataFile = header != null ? ConvertHeaderFromInternalModel(header) : new MetadataFile();
|
||||||
|
|
||||||
|
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() };
|
||||||
|
|
||||||
|
return metadataFile;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.RomCenter.MetadataFile"/>
|
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.RomCenter.MetadataFile"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static MetadataFile? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
private static MetadataFile? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
@@ -283,7 +300,7 @@ namespace SabreTools.Serialization
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Machine"/> to an array of <cref="Models.RomCenter.Rom"/>
|
/// Convert from <cref="Models.Internal.Machine"/> to an array of <cref="Models.RomCenter.Rom"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Rom?[]? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
private static Rom?[]? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -120,13 +120,30 @@ namespace SabreTools.Serialization
|
|||||||
return dat;
|
return dat;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Add deserialization of entire MetadataFile
|
|
||||||
#region Internal
|
#region Internal
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert from <cref="Models.Internal.MetadataFile"/> to <cref="Models.SeparatedValue.MetadataFile"/>
|
||||||
|
/// </summary>
|
||||||
|
public static MetadataFile? ConvertFromInternalModel(Models.Internal.MetadataFile? item)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var header = item.Read<Models.Internal.Header>(Models.Internal.MetadataFile.HeaderKey);
|
||||||
|
var metadataFile = header != null ? ConvertHeaderFromInternalModel(header) : new MetadataFile();
|
||||||
|
|
||||||
|
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||||
|
if (machines != null && machines.Any())
|
||||||
|
metadataFile.Row = machines.SelectMany(ConvertMachineFromInternalModel).ToArray();
|
||||||
|
|
||||||
|
return metadataFile;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.SeparatedValue.MetadataFile"/>
|
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.SeparatedValue.MetadataFile"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static MetadataFile? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
private static MetadataFile? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
@@ -141,7 +158,7 @@ namespace SabreTools.Serialization
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Machine"/> to an array of <cref="Models.SeparatedValue.Row"/>
|
/// Convert from <cref="Models.Internal.Machine"/> to an array of <cref="Models.SeparatedValue.Row"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Row[]? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
private static Row[]? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -8,13 +8,30 @@ namespace SabreTools.Serialization
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class SoftawreList : XmlSerializer<SoftwareList>
|
public partial class SoftawreList : XmlSerializer<SoftwareList>
|
||||||
{
|
{
|
||||||
// TODO: Add deserialization of entire SoftwareList
|
#region Internal
|
||||||
#region Deserialize
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert from <cref="Models.Internal.MetadataFile"/> to <cref="Models.SoftawreList.SoftwareList"/>
|
||||||
|
/// </summary>
|
||||||
|
public static SoftwareList? ConvertFromInternalModel(Models.Internal.MetadataFile? item)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var header = item.Read<Models.Internal.Header>(Models.Internal.MetadataFile.HeaderKey);
|
||||||
|
var metadataFile = header != null ? ConvertHeaderFromInternalModel(header) : new SoftwareList();
|
||||||
|
|
||||||
|
var machines = item.Read<Models.Internal.Machine[]>(Models.Internal.MetadataFile.MachineKey);
|
||||||
|
if (machines != null && machines.Any())
|
||||||
|
metadataFile.Software = machines.Select(ConvertMachineFromInternalModel).ToArray();
|
||||||
|
|
||||||
|
return metadataFile;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.SoftwareList.SoftwareList"/>
|
/// Convert from <cref="Models.Internal.Header"/> to <cref="Models.SoftwareList.SoftwareList"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static SoftwareList? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
private static SoftwareList? ConvertHeaderFromInternalModel(Models.Internal.Header? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
@@ -31,7 +48,7 @@ namespace SabreTools.Serialization
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.SoftwareList.Software"/>
|
/// Convert from <cref="Models.Internal.Machine"/> to <cref="Models.SoftwareList.Software"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Software? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
private static Software? ConvertMachineFromInternalModel(Models.Internal.Machine? item)
|
||||||
{
|
{
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
Reference in New Issue
Block a user