Lazily make OfflineList-specific header items properties

This commit is contained in:
Matt Nadareski
2026-04-04 18:24:58 -04:00
parent ca2a289a3f
commit ebf67d39cf
11 changed files with 135 additions and 237 deletions

View File

@@ -120,6 +120,7 @@ namespace SabreTools.Data.Extensions
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;
@@ -136,11 +137,15 @@ namespace SabreTools.Data.Extensions
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;
@@ -150,6 +155,7 @@ namespace SabreTools.Data.Extensions
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;

View File

@@ -15,6 +15,9 @@ namespace SabreTools.Data.Models.Metadata
public string? Build { get; set; }
/// TODO: This needs an internal model OR mapping to fields
public OfflineList.CanOpen? CanOpen { get; set; }
public string? Category { get; set; }
public string? Comment { get; set; }
@@ -52,6 +55,14 @@ namespace SabreTools.Data.Models.Metadata
public string? Id { get; set; }
/// TODO: This needs an internal model OR mapping to fields
public OfflineList.Images? Images { get; set; }
public string? ImFolder { get; set; }
/// TODO: This needs an internal model OR mapping to fields
public OfflineList.Infos? Infos { get; set; }
/// <remarks>(yes|no) "no"</remarks>
public bool? LockBiosMode { get; set; }
@@ -65,6 +76,9 @@ namespace SabreTools.Data.Models.Metadata
public string? Name { get; set; }
/// TODO: This needs an internal model OR mapping to fields
public OfflineList.NewDat? NewDat { get; set; }
public string? Notes { get; set; }
public string? Plugin { get; set; }
@@ -85,6 +99,9 @@ namespace SabreTools.Data.Models.Metadata
public string? ScreenshotsWidth { get; set; }
/// TODO: This needs an internal model OR mapping to fields
public OfflineList.Search? Search { get; set; }
public string? System { get; set; }
public string? Timestamp { get; set; }
@@ -99,37 +116,9 @@ namespace SabreTools.Data.Models.Metadata
#region Keys
/// TODO: This needs an internal model OR mapping to fields
/// <remarks>CanOpen</remarks>
[NoFilter]
public const string CanOpenKey = "canOpen";
/// TODO: This needs an internal model OR mapping to fields
/// <remarks>Images</remarks>
[NoFilter]
public const string ImagesKey = "images";
/// <remarks>string</remarks>
public const string ImFolderKey = "imFolder";
/// TODO: This needs an internal model OR mapping to fields
/// <remarks>Infos</remarks>
[NoFilter]
public const string InfosKey = "infos";
/// TODO: This needs an internal model OR mapping to fields
/// <remarks>NewDat</remarks>
[NoFilter]
public const string NewDatKey = "newDat";
/// <remarks>string</remarks>
public const string SchemaLocationKey = "schemaLocation";
/// TODO: This needs an internal model OR mapping to fields
/// <remarks>Search</remarks>
[NoFilter]
public const string SearchKey = "search";
#endregion
}
}

View File

@@ -202,7 +202,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Author = "author",
BiosMode = Data.Models.Metadata.MergingFlag.Merged,
Build = "build",
[Data.Models.Metadata.Header.CanOpenKey] = canOpen,
CanOpen = canOpen,
Category = "category",
Comment = "comment",
Date = "date",
@@ -219,15 +219,15 @@ namespace SabreTools.Metadata.DatFiles.Test
HeaderSkipper = "header",
Homepage = "homepage",
Id = "id",
[Data.Models.Metadata.Header.ImagesKey] = images,
[Data.Models.Metadata.Header.ImFolderKey] = "imfolder",
[Data.Models.Metadata.Header.InfosKey] = infos,
Images = images,
ImFolder = "imfolder",
Infos = infos,
LockBiosMode = true,
LockRomMode = true,
LockSampleMode = true,
MameConfig = "mameconfig",
Name = "name",
[Data.Models.Metadata.Header.NewDatKey] = newDat,
NewDat = newDat,
Notes = "notes",
Plugin = "plugin",
RefName = "refname",
@@ -238,7 +238,7 @@ namespace SabreTools.Metadata.DatFiles.Test
[Data.Models.Metadata.Header.SchemaLocationKey] = "schemalocation",
ScreenshotsHeight = "screenshotsheight",
ScreenshotsWidth = "screenshotsWidth",
[Data.Models.Metadata.Header.SearchKey] = search,
Search = search,
System = "system",
Timestamp = "timestamp",
Type = "type",
@@ -1010,7 +1010,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("author", datHeader.Author);
Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, datHeader.BiosMode);
Assert.Equal("build", datHeader.Build);
Assert.Equal("ext", datHeader.ReadString(Data.Models.Metadata.Header.CanOpenKey));
Assert.NotNull(datHeader.CanOpen);
Assert.Equal("category", datHeader.Category);
Assert.Equal("comment", datHeader.Comment);
Assert.Equal("date", datHeader.Date);
@@ -1026,15 +1026,15 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("header", datHeader.HeaderSkipper);
Assert.Equal("homepage", datHeader.Homepage);
Assert.Equal("id", datHeader.Id);
Assert.NotNull(datHeader.ReadString(Data.Models.Metadata.Header.ImagesKey));
Assert.Equal("imfolder", datHeader.ReadString(Data.Models.Metadata.Header.ImFolderKey));
Assert.NotNull(datHeader.ReadString(Data.Models.Metadata.Header.InfosKey));
Assert.NotNull(datHeader.Images);
Assert.Equal("imfolder", datHeader.ImFolder);
Assert.NotNull(datHeader.Infos);
Assert.True(datHeader.LockBiosMode);
Assert.True(datHeader.LockRomMode);
Assert.True(datHeader.LockSampleMode);
Assert.Equal("mameconfig", datHeader.MameConfig);
Assert.Equal("name", datHeader.Name);
Assert.NotNull(datHeader.ReadString(Data.Models.Metadata.Header.NewDatKey));
Assert.NotNull(datHeader.NewDat);
Assert.Equal("notes", datHeader.Notes);
Assert.Equal("plugin", datHeader.Plugin);
Assert.Equal("refname", datHeader.RefName);
@@ -1045,7 +1045,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("schemalocation", datHeader.ReadString(Data.Models.Metadata.Header.SchemaLocationKey));
Assert.Equal("screenshotsheight", datHeader.ScreenshotsHeight);
Assert.Equal("screenshotsWidth", datHeader.ScreenshotsWidth);
Assert.NotNull(datHeader.ReadString(Data.Models.Metadata.Header.SearchKey));
Assert.NotNull(datHeader.Search);
Assert.Equal("system", datHeader.System);
Assert.Equal("timestamp", datHeader.Timestamp);
Assert.Equal("type", datHeader.Type);

View File

@@ -92,17 +92,14 @@ namespace SabreTools.Metadata.DatFiles.Test
private static DatHeader CreateHeader()
{
DatHeader item = new DatHeader(CreateMetadataHeader());
item.Write<string[]>(Data.Models.Metadata.Header.CanOpenKey, ["ext"]);
item.Write(Data.Models.Metadata.Header.ImagesKey,
new Data.Models.OfflineList.Images() { Height = "height" });
item.Write(Data.Models.Metadata.Header.InfosKey,
new Data.Models.OfflineList.Infos() { Comment = new Data.Models.OfflineList.Comment() });
item.Write(Data.Models.Metadata.Header.NewDatKey,
new Data.Models.OfflineList.NewDat() { DatUrl = new Data.Models.OfflineList.DatUrl() });
item.Write(Data.Models.Metadata.Header.SearchKey,
new Data.Models.OfflineList.Search() { To = [] });
DatHeader item = new DatHeader(CreateMetadataHeader())
{
CanOpen = new Data.Models.OfflineList.CanOpen { Extension = ["ext"] },
Images = new Data.Models.OfflineList.Images() { Height = "height" },
Infos = new Data.Models.OfflineList.Infos() { Comment = new Data.Models.OfflineList.Comment() },
NewDat = new Data.Models.OfflineList.NewDat() { DatUrl = new Data.Models.OfflineList.DatUrl() },
Search = new Data.Models.OfflineList.Search() { To = [] },
};
return item;
}
@@ -354,7 +351,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("author", header.Author);
Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, header.BiosMode);
Assert.Equal("build", header.Build);
Assert.NotNull(header.Read<Data.Models.OfflineList.CanOpen>(Data.Models.Metadata.Header.CanOpenKey));
Assert.NotNull(header.CanOpen);
Assert.Equal("category", header.Category);
Assert.Equal("comment", header.Comment);
Assert.Equal("date", header.Date);
@@ -370,15 +367,15 @@ namespace SabreTools.Metadata.DatFiles.Test
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));
Assert.Equal("imfolder", header.ReadString(Data.Models.Metadata.Header.ImFolderKey));
Assert.NotNull(header.Read<Data.Models.OfflineList.Infos>(Data.Models.Metadata.Header.InfosKey));
Assert.NotNull(header.Images);
Assert.Equal("imfolder", header.ImFolder);
Assert.NotNull(header.Infos);
Assert.True(header.LockBiosMode);
Assert.True(header.LockRomMode);
Assert.True(header.LockSampleMode);
Assert.Equal("mameconfig", header.MameConfig);
Assert.Equal("name", header.Name);
Assert.NotNull(header.Read<Data.Models.OfflineList.NewDat>(Data.Models.Metadata.Header.NewDatKey));
Assert.NotNull(header.NewDat);
Assert.Equal("notes", header.Notes);
Assert.Equal("plugin", header.Plugin);
Assert.Equal("refname", header.RefName);
@@ -389,7 +386,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("schemalocation", header.ReadString(Data.Models.Metadata.Header.SchemaLocationKey));
Assert.Equal("screenshotsheight", header.ScreenshotsHeight);
Assert.Equal("screenshotsWidth", header.ScreenshotsWidth);
Assert.NotNull(header.Read<Data.Models.OfflineList.Search>(Data.Models.Metadata.Header.SearchKey));
Assert.NotNull(header.Search);
Assert.Equal("system", header.System);
Assert.Equal("timestamp", header.Timestamp);
Assert.Equal("type", header.Type);

View File

@@ -4,114 +4,6 @@ namespace SabreTools.Metadata.DatFiles.Test
{
public class DatHeaderTests
{
#region CanOpenSpecified
[Fact]
public void CanOpenSpecified_Missing()
{
DatHeader header = new DatHeader();
header.Write<string[]>(Data.Models.Metadata.Header.CanOpenKey, null);
Assert.False(header.CanOpenSpecified);
}
[Fact]
public void CanOpenSpecified_Empty()
{
DatHeader header = new DatHeader();
header.Write<string[]>(Data.Models.Metadata.Header.CanOpenKey, []);
Assert.False(header.CanOpenSpecified);
}
[Fact]
public void CanOpenSpecified_Exists()
{
DatHeader header = new DatHeader();
header.Write<string[]>(Data.Models.Metadata.Header.CanOpenKey, ["value"]);
Assert.True(header.CanOpenSpecified);
}
#endregion
#region ImagesSpecified
[Fact]
public void ImagesSpecified_Missing()
{
DatHeader header = new DatHeader();
header.Write<Data.Models.OfflineList.Images>(Data.Models.Metadata.Header.ImagesKey, null);
Assert.False(header.ImagesSpecified);
}
[Fact]
public void ImagesSpecified_Exists()
{
DatHeader header = new DatHeader();
header.Write<Data.Models.OfflineList.Images>(Data.Models.Metadata.Header.ImagesKey, new());
Assert.True(header.ImagesSpecified);
}
#endregion
#region InfosSpecified
[Fact]
public void InfosSpecified_Missing()
{
DatHeader header = new DatHeader();
header.Write<Data.Models.OfflineList.Infos>(Data.Models.Metadata.Header.InfosKey, null);
Assert.False(header.InfosSpecified);
}
[Fact]
public void InfosSpecified_Exists()
{
DatHeader header = new DatHeader();
header.Write<Data.Models.OfflineList.Infos>(Data.Models.Metadata.Header.InfosKey, new());
Assert.True(header.InfosSpecified);
}
#endregion
#region NewDatSpecified
[Fact]
public void NewDatSpecified_Missing()
{
DatHeader header = new DatHeader();
header.Write<Data.Models.OfflineList.NewDat>(Data.Models.Metadata.Header.NewDatKey, null);
Assert.False(header.NewDatSpecified);
}
[Fact]
public void NewDatSpecified_Exists()
{
DatHeader header = new DatHeader();
header.Write<Data.Models.OfflineList.NewDat>(Data.Models.Metadata.Header.NewDatKey, new());
Assert.True(header.NewDatSpecified);
}
#endregion
#region SearchSpecified
[Fact]
public void SearchSpecified_Missing()
{
DatHeader header = new DatHeader();
header.Write<Data.Models.OfflineList.Search>(Data.Models.Metadata.Header.SearchKey, null);
Assert.False(header.SearchSpecified);
}
[Fact]
public void SearchSpecified_Exists()
{
DatHeader header = new DatHeader();
header.Write<Data.Models.OfflineList.Search>(Data.Models.Metadata.Header.SearchKey, new());
Assert.True(header.SearchSpecified);
}
#endregion
#region Clone
[Fact]

View File

@@ -69,25 +69,25 @@ namespace SabreTools.Metadata.DatFiles
Header.Name = header.Name;
// Convert subheader values
var canOpen = item.Read<Data.Models.OfflineList.CanOpen>(Data.Models.Metadata.Header.CanOpenKey);
var canOpen = item.CanOpen;
if (canOpen?.Extension is not null)
Header.Write<string[]?>(Data.Models.Metadata.Header.CanOpenKey, canOpen.Extension);
Header.CanOpen = canOpen;
var images = item.Read<Data.Models.OfflineList.Images>(Data.Models.Metadata.Header.ImagesKey);
var images = item.Images;
if (images is not null)
Header.Write<Data.Models.OfflineList.Images?>(Data.Models.Metadata.Header.ImagesKey, images);
Header.Images = images;
var infos = item.Read<Data.Models.OfflineList.Infos>(Data.Models.Metadata.Header.InfosKey);
var infos = item.Infos;
if (infos is not null)
Header.Write<Data.Models.OfflineList.Infos?>(Data.Models.Metadata.Header.InfosKey, infos);
Header.Infos = infos;
var newDat = item.Read<Data.Models.OfflineList.NewDat>(Data.Models.Metadata.Header.NewDatKey);
var newDat = item.NewDat;
if (newDat is not null)
Header.Write<Data.Models.OfflineList.NewDat?>(Data.Models.Metadata.Header.NewDatKey, newDat);
Header.NewDat = newDat;
var search = item.Read<Data.Models.OfflineList.Search>(Data.Models.Metadata.Header.SearchKey);
var search = item.Search;
if (search is not null)
Header.Write<Data.Models.OfflineList.Search?>(Data.Models.Metadata.Header.SearchKey, search);
Header.Search = search;
// Selectively set all possible fields -- TODO: Figure out how to make this less manual
if (Header.Author is null)
@@ -126,8 +126,8 @@ namespace SabreTools.Metadata.DatFiles
Header.Homepage = header.Homepage;
if (Header.Id is null)
Header.Id = header.Id;
if (Header.ReadString(Data.Models.Metadata.Header.ImFolderKey) is null)
Header.Write<string?>(Data.Models.Metadata.Header.ImFolderKey, header.ReadString(Data.Models.Metadata.Header.ImFolderKey));
if (Header.ImFolder is null)
Header.ImFolder = header.ImFolder;
if (Header.LockBiosMode is null)
Header.LockBiosMode = header.LockBiosMode;
if (Header.LockRomMode is null)

View File

@@ -35,16 +35,15 @@ namespace SabreTools.Metadata.DatFiles
set => _internal.Build = value;
}
[JsonIgnore]
public bool CanOpenSpecified
public Data.Models.OfflineList.CanOpen? CanOpen
{
get
{
var canOpen = ReadStringArray(Data.Models.Metadata.Header.CanOpenKey);
return canOpen is not null && canOpen.Length > 0;
}
get => _internal.CanOpen;
set => _internal.CanOpen = value;
}
[JsonIgnore]
public bool CanOpenSpecified => CanOpen is not null;
public string? Category
{
get => _internal.Category;
@@ -151,24 +150,30 @@ namespace SabreTools.Metadata.DatFiles
set => _internal.Id = value;
}
[JsonIgnore]
public bool ImagesSpecified
public Data.Models.OfflineList.Images? Images
{
get
{
return Read<Data.Models.OfflineList.Images?>(Data.Models.Metadata.Header.ImagesKey) is not null;
}
get => _internal.Images;
set => _internal.Images = value;
}
[JsonIgnore]
public bool InfosSpecified
public bool ImagesSpecified => Images is not null;
public string? ImFolder
{
get
{
return Read<Data.Models.OfflineList.Infos?>(Data.Models.Metadata.Header.InfosKey) is not null;
}
get => _internal.ImFolder;
set => _internal.ImFolder = value;
}
public Data.Models.OfflineList.Infos? Infos
{
get => _internal.Infos;
set => _internal.Infos = value;
}
[JsonIgnore]
public bool InfosSpecified => Infos is not null;
public bool? LockBiosMode
{
get => _internal.LockBiosMode;
@@ -199,15 +204,15 @@ namespace SabreTools.Metadata.DatFiles
set => _internal.Name = value;
}
[JsonIgnore]
public bool NewDatSpecified
public Data.Models.OfflineList.NewDat? NewDat
{
get
{
return Read<Data.Models.OfflineList.NewDat?>(Data.Models.Metadata.Header.NewDatKey) is not null;
}
get => _internal.NewDat;
set => _internal.NewDat = value;
}
[JsonIgnore]
public bool NewDatSpecified => NewDat is not null;
public string? Notes
{
get => _internal.Notes;
@@ -262,15 +267,15 @@ namespace SabreTools.Metadata.DatFiles
set => _internal.ScreenshotsWidth = value;
}
[JsonIgnore]
public bool SearchSpecified
public Data.Models.OfflineList.Search? Search
{
get
{
return Read<Data.Models.OfflineList.Search?>(Data.Models.Metadata.Header.SearchKey) is not null;
}
get => _internal.Search;
set => _internal.Search = value;
}
[JsonIgnore]
public bool SearchSpecified => Search is not null;
public string? System
{
get => _internal.System;
@@ -346,15 +351,15 @@ namespace SabreTools.Metadata.DatFiles
// Convert subheader values
if (CanOpenSpecified)
header[Data.Models.Metadata.Header.CanOpenKey] = new Data.Models.OfflineList.CanOpen { Extension = ReadStringArray(Data.Models.Metadata.Header.CanOpenKey) };
header.CanOpen = CanOpen;
if (ImagesSpecified)
header[Data.Models.Metadata.Header.ImagesKey] = Read<Data.Models.OfflineList.Images>(Data.Models.Metadata.Header.ImagesKey);
header.Images = Images;
if (InfosSpecified)
header[Data.Models.Metadata.Header.InfosKey] = Read<Data.Models.OfflineList.Infos>(Data.Models.Metadata.Header.InfosKey);
header.Infos = Infos;
if (NewDatSpecified)
header[Data.Models.Metadata.Header.NewDatKey] = Read<Data.Models.OfflineList.NewDat>(Data.Models.Metadata.Header.NewDatKey);
header.NewDat = NewDat;
if (SearchSpecified)
header[Data.Models.Metadata.Header.SearchKey] = Read<Data.Models.OfflineList.Search>(Data.Models.Metadata.Header.SearchKey);
header.Search = Search;
return header;
}

View File

@@ -777,6 +777,7 @@ namespace SabreTools.Metadata.Filter
case Header item when fieldName == "build":
checkValue = item.Build;
return true;
// Header.CanOpen is intentionally skipped
case Header item when fieldName == "category":
checkValue = item.Category;
return true;
@@ -823,6 +824,11 @@ namespace SabreTools.Metadata.Filter
case Header item when fieldName == "id":
checkValue = item.Id;
return true;
// Header.Images is intentionally skipped
case Header item when fieldName == "imfolder":
checkValue = item.ImFolder;
return true;
// Header.Infos is intentionally skipped
case Header item when fieldName == "lockbiosmode":
checkValue = item.LockBiosMode.FromYesNo();
return true;
@@ -838,6 +844,7 @@ namespace SabreTools.Metadata.Filter
case Header item when fieldName == "name":
checkValue = item.Name;
return true;
// Header.NewDat is intentionally skipped
case Header item when fieldName == "notes":
checkValue = item.Notes;
return true;
@@ -865,6 +872,7 @@ namespace SabreTools.Metadata.Filter
case Header item when fieldName == "screenshotswidth":
checkValue = item.ScreenshotsWidth;
return true;
// Header.Search is intentionally skipped
case Header item when fieldName == "system":
checkValue = item.System;
return true;

View File

@@ -180,6 +180,7 @@ namespace SabreTools.Metadata
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)
@@ -206,10 +207,15 @@ namespace SabreTools.Metadata
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)
@@ -220,6 +226,7 @@ namespace SabreTools.Metadata
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)
@@ -238,6 +245,7 @@ namespace SabreTools.Metadata
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)

View File

@@ -37,40 +37,35 @@ namespace SabreTools.Serialization.CrossModel
};
if (item.Name is not null
|| item.ContainsKey(Data.Models.Metadata.Header.ImFolderKey)
|| item.ImFolder is not null
|| item.DatVersion is not null
|| item.System is not null
|| item.ScreenshotsHeight is not null
|| item.ScreenshotsWidth is not null
|| item.ContainsKey(Data.Models.Metadata.Header.InfosKey)
|| item.ContainsKey(Data.Models.Metadata.Header.CanOpenKey)
|| item.ContainsKey(Data.Models.Metadata.Header.NewDatKey)
|| item.ContainsKey(Data.Models.Metadata.Header.SearchKey)
|| item.Infos is not null
|| item.CanOpen is not null
|| item.NewDat is not null
|| item.Search is not null
|| item.RomTitle is not null)
{
dat.Configuration = new Configuration
{
DatName = item.Name,
ImFolder = item.ReadString(Data.Models.Metadata.Header.ImFolderKey),
ImFolder = item.ImFolder,
DatVersion = item.DatVersion,
System = item.System,
ScreenshotsWidth = item.ScreenshotsHeight,
ScreenshotsHeight = item.ScreenshotsWidth,
Infos = item.Read<Infos>(Data.Models.Metadata.Header.InfosKey),
CanOpen = item.Read<CanOpen>(Data.Models.Metadata.Header.CanOpenKey),
NewDat = item.Read<NewDat>(Data.Models.Metadata.Header.NewDatKey),
Search = item.Read<Search>(Data.Models.Metadata.Header.SearchKey),
Infos = item.Infos,
CanOpen = item.CanOpen,
NewDat = item.NewDat,
Search = item.Search,
RomTitle = item.RomTitle,
};
}
if (item.ContainsKey(Data.Models.Metadata.Header.ImagesKey))
{
dat.GUI = new GUI
{
Images = item.Read<Images>(Data.Models.Metadata.Header.ImagesKey),
};
}
if (item.Images is not null)
dat.GUI = new GUI { Images = item.Images };
return dat;
}

View File

@@ -38,22 +38,20 @@ namespace SabreTools.Serialization.CrossModel
if (item.Configuration is not null)
{
header.Name = item.Configuration.DatName;
header[Data.Models.Metadata.Header.ImFolderKey] = item.Configuration.ImFolder;
header.ImFolder = item.Configuration.ImFolder;
header.DatVersion = item.Configuration.DatVersion;
header.System = item.Configuration.System;
header.ScreenshotsHeight = item.Configuration.ScreenshotsWidth;
header.ScreenshotsWidth = item.Configuration.ScreenshotsHeight;
header[Data.Models.Metadata.Header.InfosKey] = item.Configuration.Infos;
header[Data.Models.Metadata.Header.CanOpenKey] = item.Configuration.CanOpen;
header[Data.Models.Metadata.Header.NewDatKey] = item.Configuration.NewDat;
header[Data.Models.Metadata.Header.SearchKey] = item.Configuration.Search;
header.Infos = item.Configuration.Infos;
header.CanOpen = item.Configuration.CanOpen;
header.NewDat = item.Configuration.NewDat;
header.Search = item.Configuration.Search;
header.RomTitle = item.Configuration.RomTitle;
}
if (item.GUI is not null)
{
header[Data.Models.Metadata.Header.ImagesKey] = item.GUI.Images;
}
header.Images = item.GUI.Images;
return header;
}