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 headerAdditional = new List<string>();
|
||||
var gameAdditional = new List<string>();
|
||||
var itemAdditional = new List<string>();
|
||||
while (!reader.EndOfStream)
|
||||
{
|
||||
// If we have no next line
|
||||
@@ -87,14 +86,14 @@ namespace SabreTools.Serialization
|
||||
switch (lastTopLevel)
|
||||
{
|
||||
case "doscenter":
|
||||
dat.ClrMamePro.ADDITIONAL_ELEMENTS = headerAdditional.ToArray();
|
||||
dat.ClrMamePro!.ADDITIONAL_ELEMENTS = headerAdditional.ToArray();
|
||||
headerAdditional.Clear();
|
||||
break;
|
||||
case "game":
|
||||
case "machine":
|
||||
case "resource":
|
||||
case "set":
|
||||
game.Release = releases.ToArray();
|
||||
game!.Release = releases.ToArray();
|
||||
game.BiosSet = biosSets.ToArray();
|
||||
game.Rom = roms.ToArray();
|
||||
game.Disk = disks.ToArray();
|
||||
@@ -227,7 +226,7 @@ namespace SabreTools.Serialization
|
||||
"machine" => new Machine(),
|
||||
"resource" => new Resource(),
|
||||
"set" => new Set(),
|
||||
_ => null,
|
||||
_ => throw new FormatException($"Unknown top-level block: {reader.TopLevel}"),
|
||||
};
|
||||
|
||||
switch (reader.Standalone?.Key?.ToLowerInvariant())
|
||||
@@ -257,9 +256,11 @@ namespace SabreTools.Serialization
|
||||
game.SampleOf = reader.Standalone?.Value;
|
||||
break;
|
||||
case "sample":
|
||||
var sample = new Sample();
|
||||
sample.Name = reader.Standalone?.Value;
|
||||
sample.ADDITIONAL_ELEMENTS = Array.Empty<string>();
|
||||
var sample = new Sample
|
||||
{
|
||||
Name = reader.Standalone?.Value ?? string.Empty,
|
||||
ADDITIONAL_ELEMENTS = Array.Empty<string>()
|
||||
};
|
||||
samples.Add(sample);
|
||||
break;
|
||||
default:
|
||||
@@ -273,12 +274,83 @@ namespace SabreTools.Serialization
|
||||
|| reader.TopLevel == "machine"
|
||||
|| reader.TopLevel == "resource"
|
||||
|| reader.TopLevel == "set")
|
||||
&& game != null
|
||||
&& reader.RowType == CmpRowType.Internal)
|
||||
{
|
||||
// Create the block
|
||||
switch (reader.InternalName)
|
||||
{
|
||||
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();
|
||||
foreach (var kvp in reader.Internal)
|
||||
{
|
||||
@@ -305,13 +377,18 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
}
|
||||
|
||||
// Add the release to the list
|
||||
release.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||
releases.Add(release);
|
||||
itemAdditional.Clear();
|
||||
break;
|
||||
return release;
|
||||
}
|
||||
|
||||
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();
|
||||
foreach (var kvp in reader.Internal)
|
||||
{
|
||||
@@ -332,13 +409,18 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
}
|
||||
|
||||
// Add the biosset to the list
|
||||
biosset.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||
biosSets.Add(biosset);
|
||||
itemAdditional.Clear();
|
||||
break;
|
||||
return biosset;
|
||||
}
|
||||
|
||||
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();
|
||||
foreach (var kvp in reader.Internal)
|
||||
{
|
||||
@@ -413,13 +495,18 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
}
|
||||
|
||||
// Add the rom to the list
|
||||
rom.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||
roms.Add(rom);
|
||||
itemAdditional.Clear();
|
||||
break;
|
||||
return rom;
|
||||
}
|
||||
|
||||
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();
|
||||
foreach (var kvp in reader.Internal)
|
||||
{
|
||||
@@ -449,13 +536,18 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
}
|
||||
|
||||
// Add the disk to the list
|
||||
disk.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||
disks.Add(disk);
|
||||
itemAdditional.Clear();
|
||||
break;
|
||||
return disk;
|
||||
}
|
||||
|
||||
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();
|
||||
foreach (var kvp in reader.Internal)
|
||||
{
|
||||
@@ -482,13 +574,18 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
}
|
||||
|
||||
// Add the media to the list
|
||||
media.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||
medias.Add(media);
|
||||
itemAdditional.Clear();
|
||||
break;
|
||||
return media;
|
||||
}
|
||||
|
||||
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();
|
||||
foreach (var kvp in reader.Internal)
|
||||
{
|
||||
@@ -503,13 +600,18 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
}
|
||||
|
||||
// Add the sample to the list
|
||||
sample.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||
samples.Add(sample);
|
||||
itemAdditional.Clear();
|
||||
break;
|
||||
return sample;
|
||||
}
|
||||
|
||||
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();
|
||||
foreach (var kvp in reader.Internal)
|
||||
{
|
||||
@@ -524,13 +626,18 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
}
|
||||
|
||||
// Add the archive to the list
|
||||
archive.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||
archives.Add(archive);
|
||||
itemAdditional.Clear();
|
||||
break;
|
||||
return archive;
|
||||
}
|
||||
|
||||
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();
|
||||
foreach (var kvp in reader.Internal)
|
||||
{
|
||||
@@ -554,13 +661,18 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
}
|
||||
|
||||
// Add the chip to the list
|
||||
chip.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||
chips.Add(chip);
|
||||
itemAdditional.Clear();
|
||||
break;
|
||||
return chip;
|
||||
}
|
||||
|
||||
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();
|
||||
foreach (var kvp in reader.Internal)
|
||||
{
|
||||
@@ -593,13 +705,18 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
}
|
||||
|
||||
// Add the video to the game
|
||||
video.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||
game.Video = video;
|
||||
itemAdditional.Clear();
|
||||
break;
|
||||
return video;
|
||||
}
|
||||
|
||||
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();
|
||||
foreach (var kvp in reader.Internal)
|
||||
{
|
||||
@@ -614,13 +731,18 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
}
|
||||
|
||||
// Add the sound to the game
|
||||
sound.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||
game.Sound = sound;
|
||||
itemAdditional.Clear();
|
||||
break;
|
||||
return sound;
|
||||
}
|
||||
|
||||
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();
|
||||
foreach (var kvp in reader.Internal)
|
||||
{
|
||||
@@ -650,13 +772,18 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
}
|
||||
|
||||
// Add the input to the game
|
||||
input.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||
game.Input = input;
|
||||
itemAdditional.Clear();
|
||||
break;
|
||||
return input;
|
||||
}
|
||||
|
||||
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 entries = new List<string>();
|
||||
foreach (var kvp in reader.Internal)
|
||||
@@ -678,14 +805,19 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
}
|
||||
|
||||
// Add the dipswitch to the list
|
||||
dipswitch.Entry = entries.ToArray();
|
||||
dipswitch.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||
dipSwitches.Add(dipswitch);
|
||||
itemAdditional.Clear();
|
||||
break;
|
||||
return dipswitch;
|
||||
}
|
||||
|
||||
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();
|
||||
foreach (var kvp in reader.Internal)
|
||||
{
|
||||
@@ -712,34 +844,8 @@ namespace SabreTools.Serialization
|
||||
}
|
||||
}
|
||||
|
||||
// Add the driver to the game
|
||||
driver.ADDITIONAL_ELEMENTS = itemAdditional.ToArray();
|
||||
game.Driver = 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;
|
||||
}
|
||||
return driver;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
Reference in New Issue
Block a user