Add RomVault subheader

This commit is contained in:
Matt Nadareski
2026-04-06 18:51:09 -04:00
parent f3d6adbe1d
commit 2d6e9d7875
7 changed files with 129 additions and 0 deletions

View File

@@ -52,6 +52,9 @@ namespace SabreTools.Data.Models.Logiqx
[XmlElement("type")]
public string? Type { get; set; }
[XmlElement("romvault")]
public RomVault? RomVault { get; set; }
[XmlElement("clrmamepro")]
public ClrMamePro? ClrMamePro { get; set; }

View File

@@ -0,0 +1,25 @@
using System.Xml;
using System.Xml.Serialization;
using SabreTools.Data.Models.Metadata;
namespace SabreTools.Data.Models.Logiqx
{
[XmlRoot("romvault")]
public class RomVault
{
[XmlAttribute("header")]
public string? Header { get; set; }
/// <remarks>(none|split|merged|nonmerged|fullmerged|device|full) "split"</remarks>
[XmlAttribute("forcemerging")]
public MergingFlag ForceMerging { get; set; }
/// <remarks>(obsolete|required|ignore) "obsolete"</remarks>
[XmlAttribute("forcenodump")]
public NodumpFlag ForceNodump { get; set; }
/// <remarks>(zip|unzip) "zip"</remarks>
[XmlAttribute("forcepacking")]
public PackingFlag ForcePacking { get; set; }
}
}

View File

@@ -73,6 +73,14 @@ namespace SabreTools.Serialization.CrossModel.Test
/// </summary>
private static Data.Models.Logiqx.Datafile Build(bool game)
{
var romvault = new Data.Models.Logiqx.RomVault
{
Header = "XXXXXX",
ForceMerging = Data.Models.Metadata.MergingFlag.Merged,
ForceNodump = Data.Models.Metadata.NodumpFlag.Required,
ForcePacking = Data.Models.Metadata.PackingFlag.Zip,
};
var clrmamepro = new Data.Models.Logiqx.ClrMamePro
{
Header = "XXXXXX",
@@ -107,6 +115,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Url = "XXXXXX",
Comment = "XXXXXX",
Type = "XXXXXX",
RomVault = romvault,
ClrMamePro = clrmamepro,
RomCenter = romcenter,
};
@@ -303,10 +312,23 @@ namespace SabreTools.Serialization.CrossModel.Test
Assert.Equal("XXXXXX", header.Url);
Assert.Equal("XXXXXX", header.Comment);
Assert.Equal("XXXXXX", header.Type);
Validate(header.RomVault);
Validate(header.ClrMamePro);
Validate(header.RomCenter);
}
/// <summary>
/// Validate a RomVault
/// </summary>
private static void Validate(Data.Models.Logiqx.RomVault? rv)
{
Assert.NotNull(rv);
Assert.Equal("XXXXXX", rv.Header);
Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, rv.ForceMerging);
Assert.Equal(Data.Models.Metadata.NodumpFlag.Required, rv.ForceNodump);
Assert.Equal(Data.Models.Metadata.PackingFlag.Zip, rv.ForcePacking);
}
/// <summary>
/// Validate a ClrMamePro
/// </summary>

View File

@@ -61,6 +61,16 @@ namespace SabreTools.Serialization.CrossModel
|| item.ForceNodump is not Data.Models.Metadata.NodumpFlag.None
|| item.ForcePacking is not Data.Models.Metadata.PackingFlag.None)
{
header.RomVault = new RomVault();
if (item.HeaderSkipper is not null)
header.RomVault.Header = item.HeaderSkipper;
if (item.ForceMerging is not Data.Models.Metadata.MergingFlag.None)
header.RomVault.ForceMerging = item.ForceMerging;
if (item.ForceNodump is not Data.Models.Metadata.NodumpFlag.None)
header.RomVault.ForceNodump = item.ForceNodump;
if (item.ForcePacking is not Data.Models.Metadata.PackingFlag.None)
header.RomVault.ForcePacking = item.ForcePacking;
header.ClrMamePro = new Data.Models.Logiqx.ClrMamePro();
if (item.HeaderSkipper is not null)
header.ClrMamePro.Header = item.HeaderSkipper;

View File

@@ -138,6 +138,14 @@ namespace SabreTools.Serialization.Readers.Test
/// </summary>
private static Data.Models.Logiqx.Datafile Build(bool game)
{
var romvault = new Data.Models.Logiqx.RomVault
{
Header = "XXXXXX",
ForceMerging = Data.Models.Metadata.MergingFlag.Merged,
ForceNodump = Data.Models.Metadata.NodumpFlag.Required,
ForcePacking = Data.Models.Metadata.PackingFlag.Zip,
};
var clrmamepro = new Data.Models.Logiqx.ClrMamePro
{
Header = "XXXXXX",
@@ -172,6 +180,7 @@ namespace SabreTools.Serialization.Readers.Test
Url = "XXXXXX",
Comment = "XXXXXX",
Type = "XXXXXX",
RomVault = romvault,
ClrMamePro = clrmamepro,
RomCenter = romcenter,
};
@@ -356,10 +365,23 @@ namespace SabreTools.Serialization.Readers.Test
Assert.Equal("XXXXXX", header.Url);
Assert.Equal("XXXXXX", header.Comment);
Assert.Equal("XXXXXX", header.Type);
Validate(header.RomVault);
Validate(header.ClrMamePro);
Validate(header.RomCenter);
}
/// <summary>
/// Validate a RomVault
/// </summary>
private static void Validate(Data.Models.Logiqx.RomVault? rv)
{
Assert.NotNull(rv);
Assert.Equal("XXXXXX", rv.Header);
Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, rv.ForceMerging);
Assert.Equal(Data.Models.Metadata.NodumpFlag.Required, rv.ForceNodump);
Assert.Equal(Data.Models.Metadata.PackingFlag.Zip, rv.ForcePacking);
}
/// <summary>
/// Validate a ClrMamePro
/// </summary>

View File

@@ -244,6 +244,13 @@ namespace SabreTools.Serialization.Readers
obj.Type = reader.ReadElementContentAsString();
break;
case "romvault":
if (obj.RomVault is not null && Debug)
Console.WriteLine($"'{reader.Name}' element already found, overwriting");
obj.RomVault = ParseRomVault(reader);
reader.Skip();
break;
case "clrmamepro":
if (obj.ClrMamePro is not null && Debug)
Console.WriteLine($"'{reader.Name}' element already found, overwriting");
@@ -289,6 +296,23 @@ namespace SabreTools.Serialization.Readers
return obj;
}
/// <summary>
/// Parse from an XmlTextReader into a RomVault
/// </summary>
/// <param name="reader">XmlTextReader to read from</param>
/// <returns>Filled RomVault on success, null on error</returns>
public RomVault ParseRomVault(XmlTextReader reader)
{
var obj = new RomVault();
obj.Header = reader.GetAttribute("header");
obj.ForceMerging = reader.GetAttribute("forcemerging").AsMergingFlag();
obj.ForceNodump = reader.GetAttribute("forcenodump").AsNodumpFlag();
obj.ForcePacking = reader.GetAttribute("forcepacking").AsPackingFlag();
return obj;
}
#endregion
#region Items

View File

@@ -159,6 +159,9 @@ namespace SabreTools.Serialization.Writers
writer.WriteOptionalElementString("comment", obj.Comment);
writer.WriteOptionalElementString("type", obj.Type);
if (obj.RomVault is not null)
WriteRomVault(obj.RomVault, writer);
if (obj.ClrMamePro is not null)
WriteClrMamePro(obj.ClrMamePro, writer);
@@ -192,6 +195,26 @@ namespace SabreTools.Serialization.Writers
writer.WriteEndElement();
}
/// <summary>
/// Write a RomVault to an XmlTextWriter
/// </summary>
/// <param name="obj">RomVault to write</param>
/// <param name="writer">XmlTextReader to write to</param>
private static void WriteRomVault(RomVault obj, XmlTextWriter writer)
{
writer.WriteStartElement("romvault");
writer.WriteOptionalAttributeString("header", obj.Header);
if (obj.ForceMerging != Data.Models.Metadata.MergingFlag.None)
writer.WriteOptionalAttributeString("forcemerging", obj.ForceMerging.AsStringValue());
if (obj.ForceNodump != Data.Models.Metadata.NodumpFlag.None)
writer.WriteOptionalAttributeString("forcenodump", obj.ForceNodump.AsStringValue());
if (obj.ForcePacking != Data.Models.Metadata.PackingFlag.None)
writer.WriteOptionalAttributeString("forcepacking", obj.ForcePacking.AsStringValue());
writer.WriteEndElement();
}
#endregion
#region Items