Add dir RomVault header extension field

This commit is contained in:
Matt Nadareski
2026-07-23 16:45:12 -04:00
parent d0f5ac322d
commit 32d9e8a09d
15 changed files with 49 additions and 0 deletions

View File

@@ -21,5 +21,10 @@ namespace SabreTools.Data.Models.Logiqx
/// <remarks>(zip|unzip) "zip"</remarks>
[XmlAttribute("forcepacking")]
public PackingFlag ForcePacking { get; set; }
/// <remarks>(noautodir|nogame)</remarks>
/// TODO: Turn this into an enum like the other flags
[XmlAttribute("dir")]
public string? Dir { get; set; }
}
}

View File

@@ -33,6 +33,8 @@ namespace SabreTools.Data.Models.Metadata
public string? Description { get; set; }
public string? DirHandling { get; set; }
public string? Email { get; set; }
public string? EmulatorVersion { get; set; }
@@ -137,6 +139,7 @@ namespace SabreTools.Data.Models.Metadata
obj.DatVersion = DatVersion;
obj.Debug = Debug;
obj.Description = Description;
obj.DirHandling = DirHandling;
obj.Email = Email;
obj.EmulatorVersion = EmulatorVersion;
obj.FileName = FileName;
@@ -227,6 +230,11 @@ namespace SabreTools.Data.Models.Metadata
else if (Description is not null && !Description.Equals(other.Description, StringComparison.OrdinalIgnoreCase))
return false;
if ((DirHandling is null) ^ (other.DirHandling is null))
return false;
else if (DirHandling is not null && !DirHandling.Equals(other.DirHandling, StringComparison.OrdinalIgnoreCase))
return false;
if ((Email is null) ^ (other.Email is null))
return false;
else if (Email is not null && !Email.Equals(other.Email, StringComparison.OrdinalIgnoreCase))

View File

@@ -212,6 +212,7 @@ namespace SabreTools.Metadata.DatFiles.Test
DatVersion = "datversion",
Debug = true,
Description = "description",
DirHandling = "noautodir",
Email = "email",
EmulatorVersion = "emulatorversion",
FileName = "filename",
@@ -1006,6 +1007,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("datversion", datHeader.DatVersion);
Assert.True(datHeader.Debug);
Assert.Equal("description", datHeader.Description);
Assert.Equal("noautodir", datHeader.DirHandling);
Assert.Equal("email", datHeader.Email);
Assert.Equal("emulatorversion", datHeader.EmulatorVersion);
Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, datHeader.ForceMerging);

View File

@@ -344,6 +344,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("datversion", header.DatVersion);
Assert.True(header.Debug);
Assert.Equal("description", header.Description);
Assert.Equal("noautodir", header.DirHandling);
Assert.Equal("email", header.Email);
Assert.Equal("emulatorversion", header.EmulatorVersion);
Assert.Equal("filename", header.FileName);

View File

@@ -104,6 +104,8 @@ namespace SabreTools.Metadata.DatFiles
Header.Debug = header.Debug;
if (Header.Description is null)
Header.Description = header.Description;
if (Header.DirHandling is null)
Header.DirHandling = header.DirHandling;
if (Header.Email is null)
Header.Email = header.Email;
if (Header.EmulatorVersion is null)

View File

@@ -84,6 +84,12 @@ namespace SabreTools.Metadata.DatFiles
set => _internal.Description = value;
}
public string? DirHandling
{
get => _internal.DirHandling;
set => _internal.DirHandling = value;
}
public string? Email
{
get => _internal.Email;

View File

@@ -1103,6 +1103,7 @@ namespace SabreTools.Metadata.Filter.Test
[InlineData("header.datversion", "datversion")]
[InlineData("header.debug", "yes")]
[InlineData("header.description", "description")]
[InlineData("header.dir", "noautodir")]
[InlineData("header.email", "email")]
[InlineData("header.emulatorversion", "emulatorversion")]
[InlineData("header.filename", "filename")]
@@ -1151,6 +1152,7 @@ namespace SabreTools.Metadata.Filter.Test
DatVersion = "datversion",
Debug = true,
Description = "description",
DirHandling = "noautodir",
Email = "email",
EmulatorVersion = "emulatorversion",
FileName = "filename",

View File

@@ -309,6 +309,8 @@ namespace SabreTools.Metadata.Filter
"datversion",
"debug",
"description",
"dir",
"dirhandling",
"email",
"emulatorversion",
"filename",

View File

@@ -1280,6 +1280,10 @@ namespace SabreTools.Metadata.Filter
case "description":
checkValue = obj.Description;
return true;
case "dir":
case "dirhandling":
checkValue = obj.DirHandling;
return true;
case "email":
checkValue = obj.Email;
return true;

View File

@@ -79,6 +79,7 @@ namespace SabreTools.Serialization.CrossModel.Test
ForceMerging = Data.Models.Metadata.MergingFlag.Merged,
ForceNodump = Data.Models.Metadata.NodumpFlag.Required,
ForcePacking = Data.Models.Metadata.PackingFlag.Zip,
Dir = "noautodir",
};
var clrmamepro = new Data.Models.Logiqx.ClrMamePro
@@ -332,6 +333,7 @@ namespace SabreTools.Serialization.CrossModel.Test
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);
Assert.Equal("noautodir", rv.Dir);
}
/// <summary>

View File

@@ -71,6 +71,8 @@ namespace SabreTools.Serialization.CrossModel
header.RomVault.ForceNodump = item.ForceNodump;
if (item.ForcePacking is not Data.Models.Metadata.PackingFlag.None)
header.RomVault.ForcePacking = item.ForcePacking;
if (item.DirHandling is not null)
header.RomVault.Dir = item.DirHandling;
header.ClrMamePro = new Data.Models.Logiqx.ClrMamePro();
if (item.HeaderSkipper is not null)

View File

@@ -69,6 +69,15 @@ namespace SabreTools.Serialization.CrossModel
Subset = item.Subset,
};
if (item.RomVault is not null)
{
header.HeaderSkipper = item.RomVault.Header;
header.ForceMerging = item.RomVault.ForceMerging;
header.ForceNodump = item.RomVault.ForceNodump;
header.ForcePacking = item.RomVault.ForcePacking;
header.DirHandling = item.RomVault.Dir;
}
if (item.ClrMamePro is not null)
{
header.HeaderSkipper = item.ClrMamePro.Header;

View File

@@ -144,6 +144,7 @@ namespace SabreTools.Serialization.Readers.Test
ForceMerging = Data.Models.Metadata.MergingFlag.Merged,
ForceNodump = Data.Models.Metadata.NodumpFlag.Required,
ForcePacking = Data.Models.Metadata.PackingFlag.Zip,
Dir = "noautodir",
};
var clrmamepro = new Data.Models.Logiqx.ClrMamePro
@@ -385,6 +386,7 @@ namespace SabreTools.Serialization.Readers.Test
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);
Assert.Equal("noautodir", rv.Dir);
}
/// <summary>

View File

@@ -341,6 +341,7 @@ namespace SabreTools.Serialization.Readers
obj.ForceMerging = reader.GetAttribute("forcemerging").AsMergingFlag();
obj.ForceNodump = reader.GetAttribute("forcenodump").AsNodumpFlag();
obj.ForcePacking = reader.GetAttribute("forcepacking").AsPackingFlag();
obj.Dir = reader.GetAttribute("dir");
return obj;
}

View File

@@ -212,6 +212,7 @@ namespace SabreTools.Serialization.Writers
writer.WriteOptionalAttributeString("forcenodump", obj.ForceNodump.AsStringValue());
if (obj.ForcePacking != Data.Models.Metadata.PackingFlag.None)
writer.WriteOptionalAttributeString("forcepacking", obj.ForcePacking.AsStringValue());
writer.WriteOptionalAttributeString("dir", obj.Dir);
writer.WriteEndElement();
}