mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Split ClrMamePro deserialization a bit
This commit is contained in:
@@ -70,7 +70,6 @@ namespace SabreTools.Serialization
|
|||||||
var additional = new List<string>();
|
var additional = new List<string>();
|
||||||
var headerAdditional = new List<string>();
|
var headerAdditional = new List<string>();
|
||||||
var gameAdditional = new List<string>();
|
var gameAdditional = new List<string>();
|
||||||
var itemAdditional = new List<string>();
|
|
||||||
while (!reader.EndOfStream)
|
while (!reader.EndOfStream)
|
||||||
{
|
{
|
||||||
// If we have no next line
|
// If we have no next line
|
||||||
@@ -87,14 +86,14 @@ namespace SabreTools.Serialization
|
|||||||
switch (lastTopLevel)
|
switch (lastTopLevel)
|
||||||
{
|
{
|
||||||
case "doscenter":
|
case "doscenter":
|
||||||
dat.ClrMamePro.ADDITIONAL_ELEMENTS = headerAdditional.ToArray();
|
dat.ClrMamePro!.ADDITIONAL_ELEMENTS = headerAdditional.ToArray();
|
||||||
headerAdditional.Clear();
|
headerAdditional.Clear();
|
||||||
break;
|
break;
|
||||||
case "game":
|
case "game":
|
||||||
case "machine":
|
case "machine":
|
||||||
case "resource":
|
case "resource":
|
||||||
case "set":
|
case "set":
|
||||||
game.Release = releases.ToArray();
|
game!.Release = releases.ToArray();
|
||||||
game.BiosSet = biosSets.ToArray();
|
game.BiosSet = biosSets.ToArray();
|
||||||
game.Rom = roms.ToArray();
|
game.Rom = roms.ToArray();
|
||||||
game.Disk = disks.ToArray();
|
game.Disk = disks.ToArray();
|
||||||
@@ -227,7 +226,7 @@ namespace SabreTools.Serialization
|
|||||||
"machine" => new Machine(),
|
"machine" => new Machine(),
|
||||||
"resource" => new Resource(),
|
"resource" => new Resource(),
|
||||||
"set" => new Set(),
|
"set" => new Set(),
|
||||||
_ => null,
|
_ => throw new FormatException($"Unknown top-level block: {reader.TopLevel}"),
|
||||||
};
|
};
|
||||||
|
|
||||||
switch (reader.Standalone?.Key?.ToLowerInvariant())
|
switch (reader.Standalone?.Key?.ToLowerInvariant())
|
||||||
@@ -257,9 +256,11 @@ namespace SabreTools.Serialization
|
|||||||
game.SampleOf = reader.Standalone?.Value;
|
game.SampleOf = reader.Standalone?.Value;
|
||||||
break;
|
break;
|
||||||
case "sample":
|
case "sample":
|
||||||
var sample = new Sample();
|
var sample = new Sample
|
||||||
sample.Name = reader.Standalone?.Value;
|
{
|
||||||
sample.ADDITIONAL_ELEMENTS = Array.Empty<string>();
|
Name = reader.Standalone?.Value ?? string.Empty,
|
||||||
|
ADDITIONAL_ELEMENTS = Array.Empty<string>()
|
||||||
|
};
|
||||||
samples.Add(sample);
|
samples.Add(sample);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -273,12 +274,83 @@ namespace SabreTools.Serialization
|
|||||||
|| reader.TopLevel == "machine"
|
|| reader.TopLevel == "machine"
|
||||||
|| reader.TopLevel == "resource"
|
|| reader.TopLevel == "resource"
|
||||||
|| reader.TopLevel == "set")
|
|| reader.TopLevel == "set")
|
||||||
|
&& game != null
|
||||||
&& reader.RowType == CmpRowType.Internal)
|
&& reader.RowType == CmpRowType.Internal)
|
||||||
{
|
{
|
||||||
// Create the block
|
// Create the block
|
||||||
switch (reader.InternalName)
|
switch (reader.InternalName)
|
||||||
{
|
{
|
||||||
case "release":
|
case "release":
|
||||||
|
releases.Add(CreateRelease(reader));
|
||||||
|
break;
|
||||||
|
case "biosset":
|
||||||
|
biosSets.Add(CreateBiosSet(reader));
|
||||||
|
break;
|
||||||
|
case "rom":
|
||||||
|
roms.Add(CreateRom(reader));
|
||||||
|
break;
|
||||||
|
case "disk":
|
||||||
|
disks.Add(CreateDisk(reader));
|
||||||
|
break;
|
||||||
|
case "media":
|
||||||
|
medias.Add(CreateMedia(reader));
|
||||||
|
break;
|
||||||
|
case "sample":
|
||||||
|
samples.Add(CreateSample(reader));
|
||||||
|
break;
|
||||||
|
case "archive":
|
||||||
|
archives.Add(CreateArchive(reader));
|
||||||
|
break;
|
||||||
|
case "chip":
|
||||||
|
chips.Add(CreateChip(reader));
|
||||||
|
break;
|
||||||
|
case "video":
|
||||||
|
game.Video = CreateVideo(reader);
|
||||||
|
break;
|
||||||
|
case "sound":
|
||||||
|
game.Sound = CreateSound(reader);
|
||||||
|
break;
|
||||||
|
case "input":
|
||||||
|
game.Input = CreateInput(reader);
|
||||||
|
break;
|
||||||
|
case "dipswitch":
|
||||||
|
dipSwitches.Add(CreateDipSwitch(reader));
|
||||||
|
break;
|
||||||
|
case "driver":
|
||||||
|
game.Driver = CreateDriver(reader);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
gameAdditional.Add(reader.CurrentLine);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
additional.Add(reader.CurrentLine);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add extra pieces and return
|
||||||
|
dat.Game = games.ToArray();
|
||||||
|
dat.ADDITIONAL_ELEMENTS = additional.ToArray();
|
||||||
|
return dat;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// TODO: Handle logging the exception
|
||||||
|
return default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create a Release object from the current reader context
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||||
|
/// <returns>Release object created from the reader context</returns>
|
||||||
|
private static Release CreateRelease(ClrMameProReader reader)
|
||||||
|
{
|
||||||
|
var itemAdditional = new List<string>();
|
||||||
var release = new Release();
|
var release = new Release();
|
||||||
foreach (var kvp in reader.Internal)
|
foreach (var kvp in reader.Internal)
|
||||||
{
|
{
|
||||||
@@ -305,13 +377,18 @@ namespace SabreTools.Serialization
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the release to the list
|
|
||||||
release.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
release.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||||
releases.Add(release);
|
return release;
|
||||||
itemAdditional.Clear();
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case "biosset":
|
/// <summary>
|
||||||
|
/// Create a BiosSet object from the current reader context
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||||
|
/// <returns>BiosSet object created from the reader context</returns>
|
||||||
|
private static BiosSet CreateBiosSet(ClrMameProReader reader)
|
||||||
|
{
|
||||||
|
var itemAdditional = new List<string>();
|
||||||
var biosset = new BiosSet();
|
var biosset = new BiosSet();
|
||||||
foreach (var kvp in reader.Internal)
|
foreach (var kvp in reader.Internal)
|
||||||
{
|
{
|
||||||
@@ -332,13 +409,18 @@ namespace SabreTools.Serialization
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the biosset to the list
|
|
||||||
biosset.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
biosset.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||||
biosSets.Add(biosset);
|
return biosset;
|
||||||
itemAdditional.Clear();
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case "rom":
|
/// <summary>
|
||||||
|
/// Create a Rom object from the current reader context
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||||
|
/// <returns>Rom object created from the reader context</returns>
|
||||||
|
private static Rom CreateRom(ClrMameProReader reader)
|
||||||
|
{
|
||||||
|
var itemAdditional = new List<string>();
|
||||||
var rom = new Rom();
|
var rom = new Rom();
|
||||||
foreach (var kvp in reader.Internal)
|
foreach (var kvp in reader.Internal)
|
||||||
{
|
{
|
||||||
@@ -413,13 +495,18 @@ namespace SabreTools.Serialization
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the rom to the list
|
|
||||||
rom.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
rom.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||||
roms.Add(rom);
|
return rom;
|
||||||
itemAdditional.Clear();
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case "disk":
|
/// <summary>
|
||||||
|
/// Create a Disk object from the current reader context
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||||
|
/// <returns>Disk object created from the reader context</returns>
|
||||||
|
private static Disk CreateDisk(ClrMameProReader reader)
|
||||||
|
{
|
||||||
|
var itemAdditional = new List<string>();
|
||||||
var disk = new Disk();
|
var disk = new Disk();
|
||||||
foreach (var kvp in reader.Internal)
|
foreach (var kvp in reader.Internal)
|
||||||
{
|
{
|
||||||
@@ -449,13 +536,18 @@ namespace SabreTools.Serialization
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the disk to the list
|
|
||||||
disk.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
disk.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||||
disks.Add(disk);
|
return disk;
|
||||||
itemAdditional.Clear();
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case "media":
|
/// <summary>
|
||||||
|
/// Create a Media object from the current reader context
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||||
|
/// <returns>Media object created from the reader context</returns>
|
||||||
|
private static Media CreateMedia(ClrMameProReader reader)
|
||||||
|
{
|
||||||
|
var itemAdditional = new List<string>();
|
||||||
var media = new Media();
|
var media = new Media();
|
||||||
foreach (var kvp in reader.Internal)
|
foreach (var kvp in reader.Internal)
|
||||||
{
|
{
|
||||||
@@ -482,13 +574,18 @@ namespace SabreTools.Serialization
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the media to the list
|
|
||||||
media.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
media.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||||
medias.Add(media);
|
return media;
|
||||||
itemAdditional.Clear();
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case "sample":
|
/// <summary>
|
||||||
|
/// Create a Sample object from the current reader context
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||||
|
/// <returns>Sample object created from the reader context</returns>
|
||||||
|
private static Sample CreateSample(ClrMameProReader reader)
|
||||||
|
{
|
||||||
|
var itemAdditional = new List<string>();
|
||||||
var sample = new Sample();
|
var sample = new Sample();
|
||||||
foreach (var kvp in reader.Internal)
|
foreach (var kvp in reader.Internal)
|
||||||
{
|
{
|
||||||
@@ -503,13 +600,18 @@ namespace SabreTools.Serialization
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the sample to the list
|
|
||||||
sample.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
sample.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||||
samples.Add(sample);
|
return sample;
|
||||||
itemAdditional.Clear();
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case "archive":
|
/// <summary>
|
||||||
|
/// Create a Archive object from the current reader context
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||||
|
/// <returns>Archive object created from the reader context</returns>
|
||||||
|
private static Archive CreateArchive(ClrMameProReader reader)
|
||||||
|
{
|
||||||
|
var itemAdditional = new List<string>();
|
||||||
var archive = new Archive();
|
var archive = new Archive();
|
||||||
foreach (var kvp in reader.Internal)
|
foreach (var kvp in reader.Internal)
|
||||||
{
|
{
|
||||||
@@ -524,13 +626,18 @@ namespace SabreTools.Serialization
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the archive to the list
|
|
||||||
archive.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
archive.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||||
archives.Add(archive);
|
return archive;
|
||||||
itemAdditional.Clear();
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case "chip":
|
/// <summary>
|
||||||
|
/// Create a Chip object from the current reader context
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||||
|
/// <returns>Chip object created from the reader context</returns>
|
||||||
|
private static Chip CreateChip(ClrMameProReader reader)
|
||||||
|
{
|
||||||
|
var itemAdditional = new List<string>();
|
||||||
var chip = new Chip();
|
var chip = new Chip();
|
||||||
foreach (var kvp in reader.Internal)
|
foreach (var kvp in reader.Internal)
|
||||||
{
|
{
|
||||||
@@ -554,13 +661,18 @@ namespace SabreTools.Serialization
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the chip to the list
|
|
||||||
chip.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
chip.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||||
chips.Add(chip);
|
return chip;
|
||||||
itemAdditional.Clear();
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case "video":
|
/// <summary>
|
||||||
|
/// Create a Video object from the current reader context
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||||
|
/// <returns>Video object created from the reader context</returns>
|
||||||
|
private static Video CreateVideo(ClrMameProReader reader)
|
||||||
|
{
|
||||||
|
var itemAdditional = new List<string>();
|
||||||
var video = new Video();
|
var video = new Video();
|
||||||
foreach (var kvp in reader.Internal)
|
foreach (var kvp in reader.Internal)
|
||||||
{
|
{
|
||||||
@@ -593,13 +705,18 @@ namespace SabreTools.Serialization
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the video to the game
|
|
||||||
video.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
video.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||||
game.Video = video;
|
return video;
|
||||||
itemAdditional.Clear();
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case "sound":
|
/// <summary>
|
||||||
|
/// Create a Sound object from the current reader context
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||||
|
/// <returns>Sound object created from the reader context</returns>
|
||||||
|
private static Sound CreateSound(ClrMameProReader reader)
|
||||||
|
{
|
||||||
|
var itemAdditional = new List<string>();
|
||||||
var sound = new Sound();
|
var sound = new Sound();
|
||||||
foreach (var kvp in reader.Internal)
|
foreach (var kvp in reader.Internal)
|
||||||
{
|
{
|
||||||
@@ -614,13 +731,18 @@ namespace SabreTools.Serialization
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the sound to the game
|
|
||||||
sound.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
sound.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||||
game.Sound = sound;
|
return sound;
|
||||||
itemAdditional.Clear();
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case "input":
|
/// <summary>
|
||||||
|
/// Create a Input object from the current reader context
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||||
|
/// <returns>Input object created from the reader context</returns>
|
||||||
|
private static Input CreateInput(ClrMameProReader reader)
|
||||||
|
{
|
||||||
|
var itemAdditional = new List<string>();
|
||||||
var input = new Input();
|
var input = new Input();
|
||||||
foreach (var kvp in reader.Internal)
|
foreach (var kvp in reader.Internal)
|
||||||
{
|
{
|
||||||
@@ -650,13 +772,18 @@ namespace SabreTools.Serialization
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the input to the game
|
|
||||||
input.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
input.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||||
game.Input = input;
|
return input;
|
||||||
itemAdditional.Clear();
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case "dipswitch":
|
/// <summary>
|
||||||
|
/// Create a DipSwitch object from the current reader context
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||||
|
/// <returns>DipSwitch object created from the reader context</returns>
|
||||||
|
private static DipSwitch CreateDipSwitch(ClrMameProReader reader)
|
||||||
|
{
|
||||||
|
var itemAdditional = new List<string>();
|
||||||
var dipswitch = new DipSwitch();
|
var dipswitch = new DipSwitch();
|
||||||
var entries = new List<string>();
|
var entries = new List<string>();
|
||||||
foreach (var kvp in reader.Internal)
|
foreach (var kvp in reader.Internal)
|
||||||
@@ -678,14 +805,19 @@ namespace SabreTools.Serialization
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the dipswitch to the list
|
|
||||||
dipswitch.Entry = entries.ToArray();
|
dipswitch.Entry = entries.ToArray();
|
||||||
dipswitch.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
dipswitch.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||||
dipSwitches.Add(dipswitch);
|
return dipswitch;
|
||||||
itemAdditional.Clear();
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case "driver":
|
/// <summary>
|
||||||
|
/// Create a Driver object from the current reader context
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reader">ClrMameProReader representing the metadata file</param>
|
||||||
|
/// <returns>Driver object created from the reader context</returns>
|
||||||
|
private static Driver CreateDriver(ClrMameProReader reader)
|
||||||
|
{
|
||||||
|
var itemAdditional = new List<string>();
|
||||||
var driver = new Driver();
|
var driver = new Driver();
|
||||||
foreach (var kvp in reader.Internal)
|
foreach (var kvp in reader.Internal)
|
||||||
{
|
{
|
||||||
@@ -712,34 +844,8 @@ namespace SabreTools.Serialization
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the driver to the game
|
|
||||||
driver.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
driver.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||||
game.Driver = driver;
|
return driver;
|
||||||
itemAdditional.Clear();
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
gameAdditional.Add(reader.CurrentLine);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
additional.Add(reader.CurrentLine);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add extra pieces and return
|
|
||||||
dat.Game = games.ToArray();
|
|
||||||
dat.ADDITIONAL_ELEMENTS = additional.ToArray();
|
|
||||||
return dat;
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
// TODO: Handle logging the exception
|
|
||||||
return default;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
Reference in New Issue
Block a user