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

@@ -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;
}