Finalize property conversion for header

This commit is contained in:
Matt Nadareski
2026-04-04 18:46:35 -04:00
parent ebf67d39cf
commit f9437314cb
13 changed files with 289 additions and 169 deletions

View File

@@ -67,6 +67,8 @@ namespace SabreTools.Data.Extensions
return extension.Clone() as Extension;
else if (self is Feature feature)
return feature.Clone() as Feature;
else if (self is Header header)
return header.Clone() as Header;
else if (self is Info info)
return info.Clone() as Info;
else if (self is Input input)
@@ -114,55 +116,6 @@ namespace SabreTools.Data.Extensions
if (Activator.CreateInstance(self.GetType()) is not DictionaryBase clone)
return null;
// Handle individual type properties
if (self is Header selfHeader && clone is Header cloneHeader)
{
cloneHeader.Author = selfHeader.Author;
cloneHeader.BiosMode = selfHeader.BiosMode;
cloneHeader.Build = selfHeader.Build;
cloneHeader.CanOpen = selfHeader.CanOpen;
cloneHeader.Category = selfHeader.Category;
cloneHeader.Comment = selfHeader.Comment;
cloneHeader.Date = selfHeader.Date;
cloneHeader.DatVersion = selfHeader.DatVersion;
cloneHeader.Debug = selfHeader.Debug;
cloneHeader.Description = selfHeader.Description;
cloneHeader.Email = selfHeader.Email;
cloneHeader.EmulatorVersion = selfHeader.EmulatorVersion;
cloneHeader.ForceMerging = selfHeader.ForceMerging;
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.Images = selfHeader.Images;
cloneHeader.ImFolder = selfHeader.ImFolder;
cloneHeader.Infos = selfHeader.Infos;
cloneHeader.LockBiosMode = selfHeader.LockBiosMode;
cloneHeader.LockRomMode = selfHeader.LockRomMode;
cloneHeader.LockSampleMode = selfHeader.LockSampleMode;
cloneHeader.MameConfig = selfHeader.MameConfig;
cloneHeader.Name = selfHeader.Name;
cloneHeader.NewDat = selfHeader.NewDat;
cloneHeader.Notes = selfHeader.Notes;
cloneHeader.Plugin = selfHeader.Plugin;
cloneHeader.RefName = selfHeader.RefName;
cloneHeader.RomMode = selfHeader.RomMode;
cloneHeader.RomTitle = selfHeader.RomTitle;
cloneHeader.RootDir = selfHeader.RootDir;
cloneHeader.SampleMode = selfHeader.SampleMode;
cloneHeader.ScreenshotsHeight = selfHeader.ScreenshotsHeight;
cloneHeader.ScreenshotsWidth = selfHeader.ScreenshotsWidth;
cloneHeader.Search = selfHeader.Search;
cloneHeader.System = selfHeader.System;
cloneHeader.Timestamp = selfHeader.Timestamp;
cloneHeader.Type = selfHeader.Type;
cloneHeader.Url = selfHeader.Url;
cloneHeader.Version = selfHeader.Version;
}
// Loop through and clone per type
foreach (string key in self.Keys)
{

View File

@@ -1,10 +1,12 @@
using System;
namespace SabreTools.Data.Models.Metadata
{
/// <summary>
/// Format-agnostic representation of metadata header data
/// </summary>
public class Header : DictionaryBase
public class Header : DictionaryBase, ICloneable, IEquatable<Header>
{
#region Properties
@@ -95,6 +97,8 @@ namespace SabreTools.Data.Models.Metadata
/// <remarks>(none|split|merged|nonmerged|fullmerged|device|full) "split"</remarks>
public MergingFlag SampleMode { get; set; }
public string? SchemaLocation { get; set; }
public string? ScreenshotsHeight { get; set; }
public string? ScreenshotsWidth { get; set; }
@@ -114,11 +118,251 @@ namespace SabreTools.Data.Models.Metadata
#endregion
#region Keys
/// <inheritdoc/>
public object Clone()
{
var obj = new Header();
/// <remarks>string</remarks>
public const string SchemaLocationKey = "schemaLocation";
obj.Author = Author;
obj.BiosMode = BiosMode;
obj.Build = Build;
obj.CanOpen = CanOpen;
obj.Category = Category;
obj.Comment = Comment;
obj.Date = Date;
obj.DatVersion = DatVersion;
obj.Debug = Debug;
obj.Description = Description;
obj.Email = Email;
obj.EmulatorVersion = EmulatorVersion;
obj.ForceMerging = ForceMerging;
obj.ForceNodump = ForceNodump;
obj.ForcePacking = ForcePacking;
obj.ForceZipping = ForceZipping;
obj.HeaderRow = HeaderRow;
obj.HeaderSkipper = HeaderSkipper;
obj.Homepage = Homepage;
obj.Id = Id;
obj.Images = Images;
obj.ImFolder = ImFolder;
obj.Infos = Infos;
obj.LockBiosMode = LockBiosMode;
obj.LockRomMode = LockRomMode;
obj.LockSampleMode = LockSampleMode;
obj.MameConfig = MameConfig;
obj.Name = Name;
obj.NewDat = NewDat;
obj.Notes = Notes;
obj.Plugin = Plugin;
obj.RefName = RefName;
obj.RomMode = RomMode;
obj.RomTitle = RomTitle;
obj.RootDir = RootDir;
obj.SampleMode = SampleMode;
obj.SchemaLocation = SchemaLocation;
obj.ScreenshotsHeight = ScreenshotsHeight;
obj.ScreenshotsWidth = ScreenshotsWidth;
obj.Search = Search;
obj.System = System;
obj.Timestamp = Timestamp;
obj.Type = Type;
obj.Url = Url;
obj.Version = Version;
#endregion
return obj;
}
/// <inheritdoc/>
public bool Equals(Header? other)
{
// Null never matches
if (other is null)
return false;
// Properties
if ((Author is null) ^ (other.Author is null))
return false;
else if (Author is not null && !Author.Equals(other.Author, StringComparison.OrdinalIgnoreCase))
return false;
if (BiosMode != other.BiosMode)
return false;
if ((Build is null) ^ (other.Build is null))
return false;
else if (Build is not null && !Build.Equals(other.Build, StringComparison.OrdinalIgnoreCase))
return false;
if ((Category is null) ^ (other.Category is null))
return false;
else if (Category is not null && !Category.Equals(other.Category, StringComparison.OrdinalIgnoreCase))
return false;
if ((Comment is null) ^ (other.Comment is null))
return false;
else if (Comment is not null && !Comment.Equals(other.Comment, StringComparison.OrdinalIgnoreCase))
return false;
if ((Date is null) ^ (other.Date is null))
return false;
else if (Date is not null && !Date.Equals(other.Date, StringComparison.OrdinalIgnoreCase))
return false;
if ((DatVersion is null) ^ (other.DatVersion is null))
return false;
else if (DatVersion is not null && !DatVersion.Equals(other.DatVersion, StringComparison.OrdinalIgnoreCase))
return false;
if (Debug != other.Debug)
return false;
if ((Description is null) ^ (other.Description is null))
return false;
else if (Description is not null && !Description.Equals(other.Description, 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))
return false;
if ((EmulatorVersion is null) ^ (other.EmulatorVersion is null))
return false;
else if (EmulatorVersion is not null && !EmulatorVersion.Equals(other.EmulatorVersion, StringComparison.OrdinalIgnoreCase))
return false;
if (ForceMerging != other.ForceMerging)
return false;
if (ForceNodump != other.ForceNodump)
return false;
if (ForcePacking != other.ForcePacking)
return false;
if (ForceZipping != other.ForceZipping)
return false;
if ((HeaderSkipper is null) ^ (other.HeaderSkipper is null))
return false;
else if (HeaderSkipper is not null && !HeaderSkipper.Equals(other.HeaderSkipper, StringComparison.OrdinalIgnoreCase))
return false;
if ((Homepage is null) ^ (other.Homepage is null))
return false;
else if (Homepage is not null && !Homepage.Equals(other.Homepage, StringComparison.OrdinalIgnoreCase))
return false;
if ((Id is null) ^ (other.Id is null))
return false;
else if (Id is not null && !Id.Equals(other.Id, StringComparison.OrdinalIgnoreCase))
return false;
if ((ImFolder is null) ^ (other.ImFolder is null))
return false;
else if (ImFolder is not null && !ImFolder.Equals(other.ImFolder, StringComparison.OrdinalIgnoreCase))
return false;
if (LockBiosMode != other.ForceZipping)
return false;
if (LockRomMode != other.LockRomMode)
return false;
if (LockSampleMode != other.LockSampleMode)
return false;
if ((MameConfig is null) ^ (other.MameConfig is null))
return false;
else if (MameConfig is not null && !MameConfig.Equals(other.MameConfig, StringComparison.OrdinalIgnoreCase))
return false;
if ((Name is null) ^ (other.Name is null))
return false;
else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase))
return false;
if ((Notes is null) ^ (other.Notes is null))
return false;
else if (Notes is not null && !Notes.Equals(other.Notes, StringComparison.OrdinalIgnoreCase))
return false;
if ((Plugin is null) ^ (other.Plugin is null))
return false;
else if (Plugin is not null && !Plugin.Equals(other.Plugin, StringComparison.OrdinalIgnoreCase))
return false;
if ((RefName is null) ^ (other.RefName is null))
return false;
else if (RefName is not null && !RefName.Equals(other.RefName, StringComparison.OrdinalIgnoreCase))
return false;
if (RomMode != other.RomMode)
return false;
if ((RomTitle is null) ^ (other.RomTitle is null))
return false;
else if (RomTitle is not null && !RomTitle.Equals(other.RomTitle, StringComparison.OrdinalIgnoreCase))
return false;
if ((RootDir is null) ^ (other.RootDir is null))
return false;
else if (RootDir is not null && !RootDir.Equals(other.RootDir, StringComparison.OrdinalIgnoreCase))
return false;
if (SampleMode != other.SampleMode)
return false;
if ((SchemaLocation is null) ^ (other.SchemaLocation is null))
return false;
else if (SchemaLocation is not null && !SchemaLocation.Equals(other.SchemaLocation, StringComparison.OrdinalIgnoreCase))
return false;
if ((ScreenshotsHeight is null) ^ (other.ScreenshotsHeight is null))
return false;
else if (ScreenshotsHeight is not null && !ScreenshotsHeight.Equals(other.ScreenshotsHeight, StringComparison.OrdinalIgnoreCase))
return false;
if ((ScreenshotsWidth is null) ^ (other.ScreenshotsWidth is null))
return false;
else if (ScreenshotsWidth is not null && !ScreenshotsWidth.Equals(other.ScreenshotsWidth, 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))
return false;
if ((Timestamp is null) ^ (other.Timestamp is null))
return false;
else if (Timestamp is not null && !Timestamp.Equals(other.Timestamp, StringComparison.OrdinalIgnoreCase))
return false;
if ((Type is null) ^ (other.Type is null))
return false;
else if (Type is not null && !Type.Equals(other.Type, StringComparison.OrdinalIgnoreCase))
return false;
if ((Url is null) ^ (other.Url is null))
return false;
else if (Url is not null && !Url.Equals(other.Url, StringComparison.OrdinalIgnoreCase))
return false;
if ((Version is null) ^ (other.Version is null))
return false;
else if (Version is not null && !Version.Equals(other.Version, StringComparison.OrdinalIgnoreCase))
return false;
// Sub-items
// Header.CanOpen is intentionally skipped
// Header.Images is intentionally skipped
// Header.Infos is intentionally skipped
// Header.NewDat is intentionally skipped
// Header.Search is intentionally skipped
// TODO: Figure out how to properly check arrays
return true;
}
}
}

View File

@@ -235,7 +235,7 @@ namespace SabreTools.Metadata.DatFiles.Test
RomTitle = "romtitle",
RootDir = "rootdir",
SampleMode = Data.Models.Metadata.MergingFlag.Merged,
[Data.Models.Metadata.Header.SchemaLocationKey] = "schemalocation",
SchemaLocation = "schemalocation",
ScreenshotsHeight = "screenshotsheight",
ScreenshotsWidth = "screenshotsWidth",
Search = search,
@@ -1042,7 +1042,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("romtitle", datHeader.RomTitle);
Assert.Equal("rootdir", datHeader.RootDir);
Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, datHeader.SampleMode);
Assert.Equal("schemalocation", datHeader.ReadString(Data.Models.Metadata.Header.SchemaLocationKey));
Assert.Equal("schemalocation", datHeader.SchemaLocation);
Assert.Equal("screenshotsheight", datHeader.ScreenshotsHeight);
Assert.Equal("screenshotsWidth", datHeader.ScreenshotsWidth);
Assert.NotNull(datHeader.Search);

View File

@@ -383,7 +383,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("romtitle", header.RomTitle);
Assert.Equal("rootdir", header.RootDir);
Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, header.SampleMode);
Assert.Equal("schemalocation", header.ReadString(Data.Models.Metadata.Header.SchemaLocationKey));
Assert.Equal("schemalocation", header.SchemaLocation);
Assert.Equal("screenshotsheight", header.ScreenshotsHeight);
Assert.Equal("screenshotsWidth", header.ScreenshotsWidth);
Assert.NotNull(header.Search);

View File

@@ -61,7 +61,7 @@ namespace SabreTools.Metadata.DatFiles
private void ConvertHeader(Data.Models.Metadata.Header? item, bool keep)
{
// If the header is invalid, we can't do anything
if (item is null || item.Count == 0)
if (item is null)
return;
// Create an internal header
@@ -152,8 +152,8 @@ namespace SabreTools.Metadata.DatFiles
Header.RootDir = header.RootDir;
if (Header.SampleMode == MergingFlag.None)
Header.SampleMode = header.SampleMode;
if (Header.ReadString(Data.Models.Metadata.Header.SchemaLocationKey) is null)
Header.Write<string?>(Data.Models.Metadata.Header.SchemaLocationKey, header.ReadString(Data.Models.Metadata.Header.SchemaLocationKey));
if (Header.SchemaLocation is null)
Header.SchemaLocation = header.SchemaLocation;
if (Header.ScreenshotsHeight is null)
Header.ScreenshotsHeight = header.ScreenshotsHeight;
if (Header.ScreenshotsWidth is null)

View File

@@ -1,7 +1,6 @@
using System;
using System.Xml.Serialization;
using Newtonsoft.Json;
using SabreTools.Data.Extensions;
using SabreTools.Metadata.Filter;
using MergingFlag = SabreTools.Data.Models.Metadata.MergingFlag;
using NodumpFlag = SabreTools.Data.Models.Metadata.NodumpFlag;
@@ -255,6 +254,12 @@ namespace SabreTools.Metadata.DatFiles
set => _internal.SampleMode = value;
}
public string? SchemaLocation
{
get => _internal.SchemaLocation;
set => _internal.SchemaLocation = value;
}
public string? ScreenshotsHeight
{
get => _internal.ScreenshotsHeight;
@@ -347,7 +352,7 @@ namespace SabreTools.Metadata.DatFiles
/// </summary>
public Data.Models.Metadata.Header GetInternalClone()
{
var header = (_internal.DeepClone() as Data.Models.Metadata.Header)!;
var header = (_internal.Clone() as Data.Models.Metadata.Header)!;
// Convert subheader values
if (CanOpenSpecified)

View File

@@ -1,7 +1,6 @@
using System;
using System.Xml.Serialization;
using Newtonsoft.Json;
using SabreTools.Data.Extensions;
using SabreTools.Metadata.Filter;
using SabreTools.Text.Extensions;
@@ -450,7 +449,7 @@ namespace SabreTools.Metadata.DatItems
/// <summary>
/// Get a clone of the current internal model
/// </summary>
public Data.Models.Metadata.Machine GetInternalClone() => (_internal.DeepClone() as Data.Models.Metadata.Machine) ?? [];
public Data.Models.Metadata.Machine GetInternalClone() => (_internal.Clone() as Data.Models.Metadata.Machine) ?? [];
#endregion

View File

@@ -866,6 +866,9 @@ namespace SabreTools.Metadata.Filter
case Header item when fieldName == "samplemode":
checkValue = item.SampleMode.AsStringValue();
return true;
case Header item when fieldName == "schemalocation":
checkValue = item.SchemaLocation;
return true;
case Header item when fieldName == "screenshotsheight":
checkValue = item.ScreenshotsHeight;
return true;

View File

@@ -39,24 +39,25 @@ namespace SabreTools.Metadata
(DipLocation selfDipLocation, DipLocation otherDipLocation) => selfDipLocation.Equals(otherDipLocation),
(DipSwitch selfDipSwitch, DipSwitch otherDipSwitch) => selfDipSwitch.Equals(otherDipSwitch),
(DipValue selfDipValue, DipValue otherDipValue) => selfDipValue.Equals(otherDipValue),
(Disk diskSelf, Disk diskOther) => EqualsImpl(diskSelf, diskOther),
(Disk selfDisk, Disk otherDisk) => EqualsImpl(selfDisk, otherDisk),
(DiskArea selfDiskArea, DiskArea otherDiskArea) => selfDiskArea.Equals(otherDiskArea),
(Display selfDisplay, Display otherDisplay) => selfDisplay.Equals(otherDisplay),
(Driver selfDriver, Driver otherDriver) => selfDriver.Equals(otherDriver),
(Dump selfDump, Dump otherDump) => selfDump.Equals(otherDump),
(Feature selfFeature, Feature otherFeature) => selfFeature.Equals(otherFeature),
(Header selfHeader, Header otherHeader) => selfHeader.Equals(otherHeader),
(Info selfInfo, Info otherInfo) => selfInfo.Equals(otherInfo),
(Input selfInput, Input otherInput) => selfInput.Equals(otherInput),
(Instance selfInstance, Instance otherInstance) => selfInstance.Equals(otherInstance),
(Machine machineSelf, Machine machineOther) => EqualsImpl(machineSelf, machineOther),
(Media mediaSelf, Media mediaOther) => EqualsImpl(mediaSelf, mediaOther),
(Machine selfMachine, Machine otherMachine) => EqualsImpl(selfMachine, otherMachine),
(Media selfMedia, Media otherMedia) => EqualsImpl(selfMedia, otherMedia),
(Original selfOriginal, Original otherOriginal) => selfOriginal.Equals(otherOriginal),
(Part selfPart, Part otherPart) => selfPart.Equals(otherPart),
(Port selfPort, Port otherPort) => selfPort.Equals(otherPort),
(RamOption selfRamOption, RamOption otherRamOption) => selfRamOption.Equals(otherRamOption),
(Release selfRelease, Release otherRelease) => selfRelease.Equals(otherRelease),
(ReleaseDetails selfReleaseDetails, ReleaseDetails otherReleaseDetails) => selfReleaseDetails.Equals(otherReleaseDetails),
(Rom romSelf, Rom romOther) => EqualsImpl(romSelf, romOther),
(Rom selfRom, Rom otherRom) => EqualsImpl(selfRom, otherRom),
(Serials selfSerials, Serials otherSerials) => selfSerials.Equals(otherSerials),
(SharedFeat selfSharedFeat, SharedFeat otherSharedFeat) => selfSharedFeat.Equals(otherSharedFeat),
(Slot selfSlot, Slot otherSlot) => selfSlot.Equals(otherSlot),
@@ -64,7 +65,7 @@ namespace SabreTools.Metadata
(SoftwareList selfSoftwareList, SoftwareList otherSoftwareList) => selfSoftwareList.Equals(otherSoftwareList),
(Sound selfSound, Sound otherSound) => selfSound.Equals(otherSound),
(SourceDetails selfSourceDetails, SourceDetails otherSourceDetails) => selfSourceDetails.Equals(otherSourceDetails),
(Video videoSelf, Video videoOther) => EqualsImpl(videoSelf, videoOther),
(Video selfVideo, Video otherVideo) => EqualsImpl(selfVideo, otherVideo),
_ => self.EqualsImpl(other),
};
#else
@@ -98,8 +99,8 @@ namespace SabreTools.Metadata
return selfDipSwitch.Equals(otherDipSwitch);
else if (self is DipValue selfDipValue && other is DipValue otherDipValue)
return selfDipValue.Equals(otherDipValue);
else if (self is Disk diskSelf && other is Disk diskOther)
return EqualsImpl(diskSelf, diskOther);
else if (self is Disk selfDisk && other is Disk otherDisk)
return EqualsImpl(selfDisk, otherDisk);
else if (self is DiskArea selfDiskArea && other is DiskArea otherDiskArea)
return selfDiskArea.Equals(otherDiskArea);
else if (self is Display selfDisplay && other is Display otherDisplay)
@@ -110,16 +111,18 @@ namespace SabreTools.Metadata
return selfDump.Equals(otherDump);
else if (self is Feature selfFeature && other is Feature otherFeature)
return selfFeature.Equals(otherFeature);
else if (self is Header selfHeader && other is Header otherHeader)
return selfHeader.Equals(otherHeader);
else if (self is Info selfInfo && other is Info otherInfo)
return selfInfo.Equals(otherInfo);
else if (self is Input selfInput && other is Input otherInput)
return selfInput.Equals(otherInput);
else if (self is Instance selfInstance && other is Instance otherInstance)
return selfInstance.Equals(otherInstance);
else if (self is Machine machineSelf && other is Machine machineOther)
return EqualsImpl(machineSelf, machineOther);
else if (self is Media mediaSelf && other is Media mediaOther)
return EqualsImpl(mediaSelf, mediaOther);
else if (self is Machine selfMachine && other is Machine otherMachine)
return EqualsImpl(selfMachine, otherMachine);
else if (self is Media selfMedia && other is Media otherMedia)
return EqualsImpl(selfMedia, otherMedia);
else if (self is Original selfOriginal && other is Original otherOriginal)
return selfOriginal.Equals(otherOriginal);
else if (self is Part selfPart && other is Part otherPart)
@@ -132,8 +135,8 @@ namespace SabreTools.Metadata
return selfRelease.Equals(otherRelease);
else if (self is ReleaseDetails selfReleaseDetails && other is ReleaseDetails otherReleaseDetails)
return selfReleaseDetails.Equals(otherReleaseDetails);
else if (self is Rom romSelf && other is Rom romOther)
return EqualsImpl(romSelf, romOther);
else if (self is Rom selfRom && other is Rom otherRom)
return EqualsImpl(selfRom, otherRom);
else if (self is Serials selfSerials && other is Serials otherSerials)
return selfSerials.Equals(otherSerials);
else if (self is SharedFeat selfSharedFeat && other is SharedFeat otherSharedFeat)
@@ -171,93 +174,6 @@ namespace SabreTools.Metadata
if (!selfKeys.SetEquals(otherKeys))
return false;
// Handle individual type properties
if (self is Header selfHeader && other is Header otherHeader)
{
if (selfHeader.Author != otherHeader.Author)
return false;
if (selfHeader.BiosMode != otherHeader.BiosMode)
return false;
if (selfHeader.Build != otherHeader.Build)
return false;
// Header.CanOpen is intentionally skipped
if (selfHeader.Category != otherHeader.Category)
return false;
if (selfHeader.Comment != otherHeader.Comment)
return false;
if (selfHeader.Date != otherHeader.Date)
return false;
if (selfHeader.DatVersion != otherHeader.DatVersion)
return false;
if (selfHeader.Debug != otherHeader.Debug)
return false;
if (selfHeader.Description != otherHeader.Description)
return false;
if (selfHeader.Email != otherHeader.Email)
return false;
if (selfHeader.EmulatorVersion != otherHeader.EmulatorVersion)
return false;
if (selfHeader.ForceMerging != otherHeader.ForceMerging)
return false;
if (selfHeader.ForceNodump != otherHeader.ForceNodump)
return false;
if (selfHeader.ForcePacking != otherHeader.ForcePacking)
return false;
if (selfHeader.ForceZipping != otherHeader.ForceZipping)
return false;
if (selfHeader.HeaderSkipper != otherHeader.HeaderSkipper)
return false;
// Header.HeaderRow is intentionally skipped
if (selfHeader.Homepage != otherHeader.Homepage)
return false;
if (selfHeader.Id != otherHeader.Id)
return false;
// Header.Images is intentionally skipped
if (selfHeader.ImFolder != otherHeader.ImFolder)
return false;
// Header.Infos is intentionally skipped
if (selfHeader.LockBiosMode != otherHeader.LockBiosMode)
return false;
if (selfHeader.LockRomMode != otherHeader.LockRomMode)
return false;
if (selfHeader.LockSampleMode != otherHeader.LockSampleMode)
return false;
if (selfHeader.MameConfig != otherHeader.MameConfig)
return false;
if (selfHeader.Name != otherHeader.Name)
return false;
// Header.NewDat is intentionally skipped
if (selfHeader.Notes != otherHeader.Notes)
return false;
if (selfHeader.Plugin != otherHeader.Plugin)
return false;
if (selfHeader.RefName != otherHeader.RefName)
return false;
if (selfHeader.RomMode != otherHeader.RomMode)
return false;
if (selfHeader.RomTitle != otherHeader.RomTitle)
return false;
if (selfHeader.RootDir != otherHeader.RootDir)
return false;
if (selfHeader.SampleMode != otherHeader.SampleMode)
return false;
if (selfHeader.ScreenshotsHeight != otherHeader.ScreenshotsHeight)
return false;
if (selfHeader.ScreenshotsWidth != otherHeader.ScreenshotsWidth)
return false;
// Header.Search is intentionally skipped
if (selfHeader.System != otherHeader.System)
return false;
if (selfHeader.Timestamp != otherHeader.Timestamp)
return false;
if (selfHeader.Type != otherHeader.Type)
return false;
if (selfHeader.Url != otherHeader.Url)
return false;
if (selfHeader.Version != otherHeader.Version)
return false;
}
// Check all pairs to see if they're equal
foreach (var kvp in self)
{

View File

@@ -23,7 +23,7 @@ namespace SabreTools.Serialization.CrossModel
{
datafile.Build = header.Build;
datafile.Debug = header.Debug;
datafile.SchemaLocation = header.ReadString(Data.Models.Metadata.Header.SchemaLocationKey);
datafile.SchemaLocation = header.SchemaLocation;
datafile.Header = ConvertHeaderFromInternalModel(header);
}

View File

@@ -41,7 +41,7 @@ namespace SabreTools.Serialization.CrossModel
header.Build = item.Build;
header.Debug = item.Debug;
header[Data.Models.Metadata.Header.SchemaLocationKey] = item.SchemaLocation;
header.SchemaLocation = item.SchemaLocation;
return header;
}

View File

@@ -33,7 +33,7 @@ namespace SabreTools.Serialization.CrossModel
{
var dat = new Dat
{
NoNamespaceSchemaLocation = item.ReadString(Data.Models.Metadata.Header.SchemaLocationKey),
NoNamespaceSchemaLocation = item.SchemaLocation,
};
if (item.Name is not null

View File

@@ -32,12 +32,12 @@ namespace SabreTools.Serialization.CrossModel
{
var header = new Data.Models.Metadata.Header
{
[Data.Models.Metadata.Header.SchemaLocationKey] = item.NoNamespaceSchemaLocation,
SchemaLocation = item.NoNamespaceSchemaLocation,
};
if (item.Configuration is not null)
{
header.Name = item.Configuration.DatName;
header.Name = item.Configuration.DatName;
header.ImFolder = item.Configuration.ImFolder;
header.DatVersion = item.Configuration.DatVersion;
header.System = item.Configuration.System;