Split header skipper and header row into separate properties

This commit is contained in:
Matt Nadareski
2026-04-04 17:58:09 -04:00
parent b547792799
commit cd49a64c2b
16 changed files with 45 additions and 20 deletions

View File

@@ -132,6 +132,8 @@ namespace SabreTools.Data.Extensions
cloneHeader.ForceNodump = selfHeader.ForceNodump;
cloneHeader.ForcePacking = selfHeader.ForcePacking;
cloneHeader.ForceZipping = selfHeader.ForceZipping;
cloneHeader.HeaderRow = selfHeader.HeaderRow;
cloneHeader.HeaderSkipper = selfHeader.HeaderSkipper;
cloneHeader.Homepage = selfHeader.Homepage;
cloneHeader.Id = selfHeader.Id;
cloneHeader.LockBiosMode = selfHeader.LockBiosMode;

View File

@@ -44,6 +44,10 @@ namespace SabreTools.Data.Models.Metadata
/// <remarks>(yes|no) "yes"</remarks>
public bool? ForceZipping { get; set; }
public string[]? HeaderRow { get; set; }
public string? HeaderSkipper { get; set; }
public string? Homepage { get; set; }
public string? Id { get; set; }
@@ -100,9 +104,6 @@ namespace SabreTools.Data.Models.Metadata
[NoFilter]
public const string CanOpenKey = "canOpen";
/// <remarks>string, string[]</remarks>
public const string HeaderKey = "header";
/// TODO: This needs an internal model OR mapping to fields
/// <remarks>Search</remarks>
[NoFilter]

View File

@@ -215,7 +215,8 @@ namespace SabreTools.Metadata.DatFiles.Test
ForceNodump = Data.Models.Metadata.NodumpFlag.Required,
ForcePacking = Data.Models.Metadata.PackingFlag.Zip,
ForceZipping = true,
[Data.Models.Metadata.Header.HeaderKey] = "header",
HeaderRow = ["header"],
HeaderSkipper = "header",
Homepage = "homepage",
Id = "id",
[Data.Models.Metadata.Header.ImagesKey] = images,
@@ -1022,7 +1023,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal(Data.Models.Metadata.NodumpFlag.Required, datHeader.ForceNodump);
Assert.Equal(Data.Models.Metadata.PackingFlag.Zip, datHeader.ForcePacking);
Assert.True(datHeader.ForceZipping);
Assert.Equal("header", datHeader.ReadString(Data.Models.Metadata.Header.HeaderKey));
Assert.Equal("header", datHeader.HeaderSkipper);
Assert.Equal("homepage", datHeader.Homepage);
Assert.Equal("id", datHeader.Id);
Assert.NotNull(datHeader.ReadString(Data.Models.Metadata.Header.ImagesKey));

View File

@@ -367,7 +367,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal(Data.Models.Metadata.NodumpFlag.Required, header.ForceNodump);
Assert.Equal(Data.Models.Metadata.PackingFlag.Zip, header.ForcePacking);
Assert.True(header.ForceZipping);
Assert.Equal("header", header.ReadString(Data.Models.Metadata.Header.HeaderKey));
Assert.Equal("header", header.HeaderSkipper);
Assert.Equal("homepage", header.Homepage);
Assert.Equal("id", header.Id);
Assert.NotNull(header.Read<Data.Models.OfflineList.Images>(Data.Models.Metadata.Header.ImagesKey));
@@ -395,6 +395,11 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("type", header.Type);
Assert.Equal("url", header.Url);
Assert.Equal("version", header.Version);
string[]? headerRowTitles = header.HeaderRow;
Assert.NotNull(headerRowTitles);
string? headerRowTitle = Assert.Single(headerRowTitles);
Assert.Equal("header", headerRowTitle);
}
private static void ValidateMetadataMachine(Data.Models.Metadata.Machine machine)

View File

@@ -120,8 +120,8 @@ namespace SabreTools.Metadata.DatFiles
Header.ForcePacking = header.ForcePacking;
if (Header.ForceZipping is null)
Header.ForceZipping = header.ForceZipping;
if (Header.ReadString(Data.Models.Metadata.Header.HeaderKey) is null)
Header.Write<string?>(Data.Models.Metadata.Header.HeaderKey, header.ReadString(Data.Models.Metadata.Header.HeaderKey));
if (Header.HeaderSkipper is null)
Header.HeaderSkipper = header.HeaderSkipper;
if (Header.Homepage is null)
Header.Homepage = header.Homepage;
if (Header.Id is null)

View File

@@ -127,6 +127,18 @@ namespace SabreTools.Metadata.DatFiles
set => _internal.ForceZipping = value;
}
public string[]? HeaderRow
{
get => _internal.HeaderRow;
set => _internal.HeaderRow = value;
}
public string? HeaderSkipper
{
get => _internal.HeaderSkipper;
set => _internal.HeaderSkipper = value;
}
public string? Homepage
{
get => _internal.Homepage;

View File

@@ -813,6 +813,10 @@ namespace SabreTools.Metadata.Filter
case Header item when fieldName == "forcezipping":
checkValue = item.ForceZipping.FromYesNo();
return true;
// Header.HeaderRow is intentionally skipped
case Header item when fieldName == "header" || fieldName == "headerskipper" || fieldName == "skipper":
checkValue = item.HeaderSkipper;
return true;
case Header item when fieldName == "homepage":
checkValue = item.Homepage;
return true;

View File

@@ -204,6 +204,8 @@ namespace SabreTools.Metadata
return false;
if (selfHeader.ForceZipping != otherHeader.ForceZipping)
return false;
if (selfHeader.HeaderSkipper != otherHeader.HeaderSkipper)
return false;
if (selfHeader.Homepage != otherHeader.Homepage)
return false;
if (selfHeader.Id != otherHeader.Id)

View File

@@ -33,7 +33,7 @@ namespace SabreTools.Serialization.CrossModel
{
var metadataFile = new MetadataFile
{
Header = item.ReadStringArray(Data.Models.Metadata.Header.HeaderKey),
Header = item.HeaderRow,
};
return metadataFile;
}

View File

@@ -32,7 +32,7 @@ namespace SabreTools.Serialization.CrossModel
{
var header = new Data.Models.Metadata.Header
{
[Data.Models.Metadata.Header.HeaderKey] = item.Header,
HeaderRow = item.Header,
};
return header;
}

View File

@@ -53,7 +53,7 @@ namespace SabreTools.Serialization.CrossModel
Homepage = item.Homepage,
Url = item.Url,
Comment = item.Comment,
Header = item.ReadString(Data.Models.Metadata.Header.HeaderKey),
Header = item.HeaderSkipper,
Type = item.Type,
ForceMerging = item.ForceMerging,
ForceZipping = item.ForceZipping,

View File

@@ -45,7 +45,7 @@ namespace SabreTools.Serialization.CrossModel
Homepage = item.Homepage,
Url = item.Url,
Comment = item.Comment,
[Data.Models.Metadata.Header.HeaderKey] = item.Header,
HeaderSkipper = item.Header,
Type = item.Type,
ForceMerging = item.ForceMerging,
ForceZipping = item.ForceZipping,

View File

@@ -56,16 +56,14 @@ namespace SabreTools.Serialization.CrossModel
Type = item.Type,
};
string? headerVal = item.ReadString(Data.Models.Metadata.Header.HeaderKey);
if (headerVal is not null
if (item.HeaderSkipper is not null
|| item.ForceMerging is not Data.Models.Metadata.MergingFlag.None
|| item.ForceNodump is not Data.Models.Metadata.NodumpFlag.None
|| item.ForcePacking is not Data.Models.Metadata.PackingFlag.None)
{
header.ClrMamePro = new Data.Models.Logiqx.ClrMamePro();
if (headerVal is not null)
header.ClrMamePro.Header = headerVal;
if (item.HeaderSkipper is not null)
header.ClrMamePro.Header = item.HeaderSkipper;
if (item.ForceMerging is not Data.Models.Metadata.MergingFlag.None)
header.ClrMamePro.ForceMerging = item.ForceMerging;
if (item.ForceNodump is not Data.Models.Metadata.NodumpFlag.None)

View File

@@ -70,7 +70,7 @@ namespace SabreTools.Serialization.CrossModel
if (item.ClrMamePro is not null)
{
header[Data.Models.Metadata.Header.HeaderKey] = item.ClrMamePro.Header;
header.HeaderSkipper = item.ClrMamePro.Header;
header.ForceMerging = item.ClrMamePro.ForceMerging;
header.ForceNodump = item.ClrMamePro.ForceNodump;
header.ForcePacking = item.ClrMamePro.ForcePacking;

View File

@@ -33,7 +33,7 @@ namespace SabreTools.Serialization.CrossModel
{
var metadataFile = new MetadataFile
{
Header = item.ReadStringArray(Data.Models.Metadata.Header.HeaderKey),
Header = item.HeaderRow,
};
return metadataFile;
}

View File

@@ -32,7 +32,7 @@ namespace SabreTools.Serialization.CrossModel
{
var header = new Data.Models.Metadata.Header
{
[Data.Models.Metadata.Header.HeaderKey] = item.Header,
HeaderRow = item.Header,
};
if (item.Row is not null && item.Row.Length > 0)