mirror of
https://github.com/SabreTools/SabreTools.Serialization.git
synced 2026-09-22 23:05:12 +00:00
Lazily make OfflineList-specific header items properties
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user