Add subset RomVault header extension field

This commit is contained in:
Matt Nadareski
2026-07-23 16:15:27 -04:00
parent 05c86e4c24
commit d0f5ac322d
15 changed files with 42 additions and 0 deletions

View File

@@ -48,6 +48,10 @@ namespace SabreTools.Data.Models.Logiqx
[XmlElement("comment")]
public string? Comment { get; set; }
/// <remarks>RomVault extension</remarks>
[XmlElement("subset")]
public string? Subset { get; set; }
/// <remarks>Trurip extension</remarks>
[XmlElement("type")]
public string? Type { get; set; }

View File

@@ -108,6 +108,8 @@ namespace SabreTools.Data.Models.Metadata
/// TODO: This needs an internal model OR mapping to fields
public OfflineList.Search? Search { get; set; }
public string? Subset { get; set; }
public string? System { get; set; }
public string? Timestamp { get; set; }
@@ -166,6 +168,7 @@ namespace SabreTools.Data.Models.Metadata
obj.ScreenshotsHeight = ScreenshotsHeight;
obj.ScreenshotsWidth = ScreenshotsWidth;
obj.Search = Search;
obj.Subset = Subset;
obj.System = System;
obj.Timestamp = Timestamp;
obj.Type = Type;
@@ -336,6 +339,11 @@ namespace SabreTools.Data.Models.Metadata
else if (ScreenshotsWidth is not null && !ScreenshotsWidth.Equals(other.ScreenshotsWidth, StringComparison.OrdinalIgnoreCase))
return false;
if ((Subset is null) ^ (other.Subset is null))
return false;
else if (Subset is not null && !Subset.Equals(other.Subset, StringComparison.OrdinalIgnoreCase))
return false;
if ((System is null) ^ (other.System is null))
return false;
else if (System is not null && !System.Equals(other.System, StringComparison.OrdinalIgnoreCase))

View File

@@ -243,6 +243,7 @@ namespace SabreTools.Metadata.DatFiles.Test
ScreenshotsHeight = "screenshotsheight",
ScreenshotsWidth = "screenshotsWidth",
Search = search,
Subset = "subset",
System = "system",
Timestamp = "timestamp",
Type = "type",
@@ -1034,6 +1035,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("screenshotsheight", datHeader.ScreenshotsHeight);
Assert.Equal("screenshotsWidth", datHeader.ScreenshotsWidth);
Assert.NotNull(datHeader.Search);
Assert.Equal("subset", datHeader.Subset);
Assert.Equal("system", datHeader.System);
Assert.Equal("timestamp", datHeader.Timestamp);
Assert.Equal("type", datHeader.Type);

View File

@@ -374,6 +374,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("screenshotsheight", header.ScreenshotsHeight);
Assert.Equal("screenshotsWidth", header.ScreenshotsWidth);
Assert.NotNull(header.Search);
Assert.Equal("subset", header.Subset);
Assert.Equal("system", header.System);
Assert.Equal("timestamp", header.Timestamp);
Assert.Equal("type", header.Type);

View File

@@ -156,6 +156,8 @@ namespace SabreTools.Metadata.DatFiles
Header.ScreenshotsWidth = header.ScreenshotsWidth;
if (Header.System is null)
Header.System = header.System;
if (Header.Subset is null)
Header.Subset = header.Subset;
if (Header.Timestamp is null)
Header.Timestamp = header.Timestamp;
if (Header.Type is null)

View File

@@ -282,6 +282,12 @@ namespace SabreTools.Metadata.DatFiles
[JsonIgnore]
public bool SearchSpecified => Search is not null;
public string? Subset
{
get => _internal.Subset;
set => _internal.Subset = value;
}
public string? System
{
get => _internal.System;

View File

@@ -1131,6 +1131,7 @@ namespace SabreTools.Metadata.Filter.Test
[InlineData("header.schemalocation", "schemalocation")]
[InlineData("header.screenshotsheight", "screenshotsheight")]
[InlineData("header.screenshotswidth", "screenshotswidth")]
[InlineData("header.subset", "subset")]
[InlineData("header.system", "system")]
[InlineData("header.timestamp", "timestamp")]
[InlineData("header.type", "type")]
@@ -1176,6 +1177,7 @@ namespace SabreTools.Metadata.Filter.Test
SchemaLocation = "schemalocation",
ScreenshotsHeight = "screenshotsheight",
ScreenshotsWidth = "screenshotswidth",
Subset = "subset",
System = "system",
Timestamp = "timestamp",
Type = "type",

View File

@@ -337,6 +337,7 @@ namespace SabreTools.Metadata.Filter
"screenshotsheight",
"screenshotswidth",
"skipper",
"subset",
"system",
"timestamp",
"type",

View File

@@ -1365,6 +1365,9 @@ namespace SabreTools.Metadata.Filter
checkValue = obj.ScreenshotsWidth;
return true;
// Header.Search is intentionally skipped
case "subset":
checkValue = obj.Subset;
return true;
case "system":
checkValue = obj.System;
return true;

View File

@@ -115,6 +115,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Url = "url",
Comment = "comment",
Type = "type",
Subset = "subset",
RomVault = romvault,
ClrMamePro = clrmamepro,
RomCenter = romcenter,
@@ -315,6 +316,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Assert.Equal("url", header.Url);
Assert.Equal("comment", header.Comment);
Assert.Equal("type", header.Type);
Assert.Equal("subset", header.Subset);
Validate(header.RomVault);
Validate(header.ClrMamePro);
Validate(header.RomCenter);

View File

@@ -54,6 +54,7 @@ namespace SabreTools.Serialization.CrossModel
Url = item.Url,
Comment = item.Comment,
Type = item.Type,
Subset = item.Subset,
};
if (item.HeaderSkipper is not null

View File

@@ -66,6 +66,7 @@ namespace SabreTools.Serialization.CrossModel
Url = item.Url,
Comment = item.Comment,
Type = item.Type,
Subset = item.Subset,
};
if (item.ClrMamePro is not null)

View File

@@ -180,6 +180,7 @@ namespace SabreTools.Serialization.Readers.Test
Url = "url",
Comment = "comment",
Type = "type",
Subset = "subset",
RomVault = romvault,
ClrMamePro = clrmamepro,
RomCenter = romcenter,
@@ -368,6 +369,7 @@ namespace SabreTools.Serialization.Readers.Test
Assert.Equal("url", header.Url);
Assert.Equal("comment", header.Comment);
Assert.Equal("type", header.Type);
Assert.Equal("subset", header.Subset);
Validate(header.RomVault);
Validate(header.ClrMamePro);
Validate(header.RomCenter);

View File

@@ -270,6 +270,12 @@ namespace SabreTools.Serialization.Readers
obj.Type = reader.ReadElementContentAsString();
break;
case "subset":
if (obj.Subset is not null && Debug)
Console.WriteLine($"'{reader.Name}' element already found, overwriting");
obj.Subset = reader.ReadElementContentAsString();
break;
case "romvault":
if (obj.RomVault is not null && Debug)
Console.WriteLine($"'{reader.Name}' element already found, overwriting");

View File

@@ -158,6 +158,7 @@ namespace SabreTools.Serialization.Writers
writer.WriteOptionalElementString("url", obj.Url);
writer.WriteOptionalElementString("comment", obj.Comment);
writer.WriteOptionalElementString("type", obj.Type);
writer.WriteOptionalElementString("subset", obj.Subset);
if (obj.RomVault is not null)
WriteRomVault(obj.RomVault, writer);