mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Remove nearly all explict fields
This commit is contained in:
@@ -103,30 +103,30 @@ have a current entry in the DAT index.";
|
||||
if (onlyNeeded && !noDb)
|
||||
{
|
||||
string query = "SELECT * FROM crcsha1 JOIN md5sha1 ON crcsha1.sha1=md5sha1.sha1"
|
||||
+ $" WHERE crcsha1.crc=\"{rom.CRC}\""
|
||||
+ $" OR md5sha1.md5=\"{rom.MD5}\""
|
||||
+ $" OR md5sha1.sha1=\"{rom.SHA1}\"";
|
||||
+ $" WHERE crcsha1.crc=\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)}\""
|
||||
+ $" OR md5sha1.md5=\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)}\""
|
||||
+ $" OR md5sha1.sha1=\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)}\"";
|
||||
SqliteCommand slc = new SqliteCommand(query, dbc);
|
||||
SqliteDataReader sldr = slc.ExecuteReader();
|
||||
|
||||
if (sldr.HasRows)
|
||||
{
|
||||
// Add to the queries
|
||||
if (!string.IsNullOrWhiteSpace(rom.CRC))
|
||||
crcquery += $" (\"{rom.CRC}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)))
|
||||
crcquery += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.MD5))
|
||||
md5query += $" (\"{rom.MD5}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)))
|
||||
md5query += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.SHA1))
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)))
|
||||
{
|
||||
sha1query += $" (\"{rom.SHA1}\", \"{_depots!.Keys.ToList()[0]}\"),";
|
||||
sha1query += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)}\", \"{_depots!.Keys.ToList()[0]}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.CRC))
|
||||
crcsha1query += $" (\"{rom.CRC}\", \"{rom.SHA1}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)))
|
||||
crcsha1query += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)}\", \"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.MD5))
|
||||
md5sha1query += $" (\"{rom.MD5}\", \"{rom.SHA1}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)))
|
||||
md5sha1query += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)}\", \"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),";
|
||||
}
|
||||
|
||||
// Add to the Dat
|
||||
@@ -139,21 +139,21 @@ have a current entry in the DAT index.";
|
||||
// Add to the queries
|
||||
if (!noDb)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(rom.CRC))
|
||||
crcquery += $" (\"{rom.CRC}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)))
|
||||
crcquery += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.MD5))
|
||||
md5query += $" (\"{rom.MD5}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)))
|
||||
md5query += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.SHA1))
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)))
|
||||
{
|
||||
sha1query += $" (\"{rom.SHA1}\", \"{_depots!.Keys.ToList()[0]}\"),";
|
||||
sha1query += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)}\", \"{_depots!.Keys.ToList()[0]}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.CRC))
|
||||
crcsha1query += $" (\"{rom.CRC}\", \"{rom.SHA1}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)))
|
||||
crcsha1query += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)}\", \"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.MD5))
|
||||
md5sha1query += $" (\"{rom.MD5}\", \"{rom.SHA1}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)))
|
||||
md5sha1query += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)}\", \"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -812,15 +812,15 @@ CREATE TABLE IF NOT EXISTS dat (
|
||||
Disk disk = (Disk)datItem;
|
||||
hasItems = true;
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(disk.MD5))
|
||||
md5query += $" (\"{disk.MD5}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(disk.GetFieldValue<string?>(SabreTools.Models.Metadata.Disk.MD5Key)))
|
||||
md5query += $" (\"{disk.GetFieldValue<string?>(SabreTools.Models.Metadata.Disk.MD5Key)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(disk.SHA1))
|
||||
if (!string.IsNullOrWhiteSpace(disk.GetFieldValue<string?>(SabreTools.Models.Metadata.Disk.SHA1Key)))
|
||||
{
|
||||
sha1query += $" (\"{disk.SHA1}\"),";
|
||||
sha1query += $" (\"{disk.GetFieldValue<string?>(SabreTools.Models.Metadata.Disk.SHA1Key)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(disk.MD5))
|
||||
md5sha1query += $" (\"{disk.MD5}\", \"{disk.SHA1}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(disk.GetFieldValue<string?>(SabreTools.Models.Metadata.Disk.MD5Key)))
|
||||
md5sha1query += $" (\"{disk.GetFieldValue<string?>(SabreTools.Models.Metadata.Disk.MD5Key)}\", \"{disk.GetFieldValue<string?>(SabreTools.Models.Metadata.Disk.SHA1Key)}\"),";
|
||||
}
|
||||
}
|
||||
else if (datItem.ItemType == ItemType.Media)
|
||||
@@ -828,15 +828,15 @@ CREATE TABLE IF NOT EXISTS dat (
|
||||
Media media = (Media)datItem;
|
||||
hasItems = true;
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(media.MD5))
|
||||
md5query += $" (\"{media.MD5}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(media.GetFieldValue<string?>(SabreTools.Models.Metadata.Media.MD5Key)))
|
||||
md5query += $" (\"{media.GetFieldValue<string?>(SabreTools.Models.Metadata.Media.MD5Key)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(media.SHA1))
|
||||
if (!string.IsNullOrWhiteSpace(media.GetFieldValue<string?>(SabreTools.Models.Metadata.Media.SHA1Key)))
|
||||
{
|
||||
sha1query += $" (\"{media.SHA1}\"),";
|
||||
sha1query += $" (\"{media.GetFieldValue<string?>(SabreTools.Models.Metadata.Media.SHA1Key)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(media.MD5))
|
||||
md5sha1query += $" (\"{media.MD5}\", \"{media.SHA1}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(media.GetFieldValue<string?>(SabreTools.Models.Metadata.Media.MD5Key)))
|
||||
md5sha1query += $" (\"{media.GetFieldValue<string?>(SabreTools.Models.Metadata.Media.MD5Key)}\", \"{media.GetFieldValue<string?>(SabreTools.Models.Metadata.Media.SHA1Key)}\"),";
|
||||
}
|
||||
}
|
||||
else if (datItem.ItemType == ItemType.Rom)
|
||||
@@ -844,21 +844,21 @@ CREATE TABLE IF NOT EXISTS dat (
|
||||
Rom rom = (Rom)datItem;
|
||||
hasItems = true;
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.CRC))
|
||||
crcquery += $" (\"{rom.CRC}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)))
|
||||
crcquery += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.MD5))
|
||||
md5query += $" (\"{rom.MD5}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)))
|
||||
md5query += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.SHA1))
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)))
|
||||
{
|
||||
sha1query += $" (\"{rom.SHA1}\"),";
|
||||
sha1query += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.CRC))
|
||||
crcsha1query += $" (\"{rom.CRC}\", \"{rom.SHA1}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)))
|
||||
crcsha1query += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)}\", \"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.MD5))
|
||||
md5sha1query += $" (\"{rom.MD5}\", \"{rom.SHA1}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)))
|
||||
md5sha1query += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)}\", \"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -898,7 +898,7 @@ CREATE TABLE IF NOT EXISTS dat (
|
||||
// Only add the DAT if it's non-empty
|
||||
if (hasItems)
|
||||
{
|
||||
string datquery = $"INSERT OR IGNORE INTO dat (hash) VALUES (\"{dat.SHA1}\")";
|
||||
string datquery = $"INSERT OR IGNORE INTO dat (hash) VALUES (\"{dat.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)}\")";
|
||||
slc = new SqliteCommand(datquery, dbc);
|
||||
slc.ExecuteNonQuery();
|
||||
}
|
||||
|
||||
@@ -94,28 +94,28 @@ namespace RombaSharp.Features
|
||||
|
||||
foreach (Rom rom in roms)
|
||||
{
|
||||
if (hashes.Contains(rom.SHA1!))
|
||||
if (hashes.Contains(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)!))
|
||||
{
|
||||
dupehashes.Add(rom.SHA1!);
|
||||
hashes.Remove(rom.SHA1!);
|
||||
dupehashes.Add(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)!);
|
||||
hashes.Remove(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)!);
|
||||
}
|
||||
else if (!dupehashes.Contains(rom.SHA1!))
|
||||
else if (!dupehashes.Contains(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)!))
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(rom.CRC))
|
||||
crcquery += $" (\"{rom.CRC}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)))
|
||||
crcquery += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.MD5))
|
||||
md5query += $" (\"{rom.MD5}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)))
|
||||
md5query += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.SHA1))
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)))
|
||||
{
|
||||
sha1query += $" (\"{rom.SHA1}\", \"{depotname}\"),";
|
||||
sha1query += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)}\", \"{depotname}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.CRC))
|
||||
crcsha1query += $" (\"{rom.CRC}\", \"{rom.SHA1}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)))
|
||||
crcsha1query += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.CRCKey)}\", \"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(rom.MD5))
|
||||
md5sha1query += $" (\"{rom.MD5}\", \"{rom.SHA1}\"),";
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)))
|
||||
md5sha1query += $" (\"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.MD5Key)}\", \"{rom.GetFieldValue<string?>(SabreTools.Models.Metadata.Rom.SHA1Key)}\"),";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -221,12 +221,12 @@ namespace SabreTools.DatFiles
|
||||
if (item.ItemType == ItemType.Disk && item is Disk disk)
|
||||
{
|
||||
// If the file has aboslutely no hashes, skip and log
|
||||
if (disk.ItemStatus != ItemStatus.Nodump
|
||||
&& string.IsNullOrEmpty(disk.MD5)
|
||||
&& string.IsNullOrEmpty(disk.SHA1))
|
||||
if (disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump
|
||||
&& string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key))
|
||||
&& string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
{
|
||||
logger.Verbose($"Incomplete entry for '{disk.GetName()}' will be output as nodump");
|
||||
disk.ItemStatus = ItemStatus.Nodump;
|
||||
disk.SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, ItemStatus.Nodump);
|
||||
}
|
||||
|
||||
item = disk;
|
||||
@@ -234,10 +234,10 @@ namespace SabreTools.DatFiles
|
||||
if (item.ItemType == ItemType.Media && item is Media media)
|
||||
{
|
||||
// If the file has aboslutely no hashes, skip and log
|
||||
if (string.IsNullOrEmpty(media.MD5)
|
||||
&& string.IsNullOrEmpty(media.SHA1)
|
||||
&& string.IsNullOrEmpty(media.SHA256)
|
||||
&& string.IsNullOrEmpty(media.SpamSum))
|
||||
if (string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key))
|
||||
&& string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key))
|
||||
&& string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key))
|
||||
&& string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey)))
|
||||
{
|
||||
logger.Verbose($"Incomplete entry for '{media.GetName()}' will be output as nodump");
|
||||
}
|
||||
@@ -247,41 +247,41 @@ namespace SabreTools.DatFiles
|
||||
else if (item.ItemType == ItemType.Rom && item is Rom rom)
|
||||
{
|
||||
// If we have the case where there is SHA-1 and nothing else, we don't fill in any other part of the data
|
||||
if (rom.Size == null && !rom.HasHashes())
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null && !rom.HasHashes())
|
||||
{
|
||||
// No-op, just catch it so it doesn't go further
|
||||
logger.Verbose($"{Header.FileName}: Entry with only SHA-1 found - '{rom.GetName()}'");
|
||||
}
|
||||
|
||||
// If we have a rom and it's missing size AND the hashes match a 0-byte file, fill in the rest of the info
|
||||
else if ((rom.Size == 0 || rom.Size == null)
|
||||
&& (string.IsNullOrEmpty(rom.CRC) || rom.HasZeroHash()))
|
||||
else if ((rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == 0 || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null)
|
||||
&& (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)) || rom.HasZeroHash()))
|
||||
{
|
||||
// TODO: All instances of Hash.DeepHashes should be made into 0x0 eventually
|
||||
rom.Size = Constants.SizeZero;
|
||||
rom.CRC = Constants.CRCZero;
|
||||
rom.MD5 = Constants.MD5Zero;
|
||||
rom.SHA1 = Constants.SHA1Zero;
|
||||
rom.SHA256 = null; // Constants.SHA256Zero;
|
||||
rom.SHA384 = null; // Constants.SHA384Zero;
|
||||
rom.SHA512 = null; // Constants.SHA512Zero;
|
||||
rom.SpamSum = null; // Constants.SpamSumZero;
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, Constants.CRCZero);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, Constants.MD5Zero);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, Constants.SHA1Zero);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, null); // Constants.SHA256Zero;
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, null); // Constants.SHA384Zero;
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, null); // Constants.SHA512Zero;
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, null); // Constants.SpamSumZero;
|
||||
}
|
||||
|
||||
// If the file has no size and it's not the above case, skip and log
|
||||
else if (rom.ItemStatus != ItemStatus.Nodump && (rom.Size == 0 || rom.Size == null))
|
||||
else if (rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump && (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == 0 || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null))
|
||||
{
|
||||
logger.Verbose($"{Header.FileName}: Incomplete entry for '{rom.GetName()}' will be output as nodump");
|
||||
rom.ItemStatus = ItemStatus.Nodump;
|
||||
rom.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.Nodump);
|
||||
}
|
||||
|
||||
// If the file has a size but aboslutely no hashes, skip and log
|
||||
else if (rom.ItemStatus != ItemStatus.Nodump
|
||||
&& rom.Size != null && rom.Size > 0
|
||||
else if (rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump
|
||||
&& rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) != null && rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) > 0
|
||||
&& !rom.HasHashes())
|
||||
{
|
||||
logger.Verbose($"{Header.FileName}: Incomplete entry for '{rom.GetName()}' will be output as nodump");
|
||||
rom.ItemStatus = ItemStatus.Nodump;
|
||||
rom.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.Nodump);
|
||||
}
|
||||
|
||||
item = rom;
|
||||
@@ -388,26 +388,26 @@ namespace SabreTools.DatFiles
|
||||
// Ensure we have the proper values for replacement
|
||||
if (item.ItemType == ItemType.Disk && item is Disk disk)
|
||||
{
|
||||
md5 = disk.MD5 ?? string.Empty;
|
||||
sha1 = disk.SHA1 ?? string.Empty;
|
||||
md5 = disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key) ?? string.Empty;
|
||||
sha1 = disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key) ?? string.Empty;
|
||||
}
|
||||
else if (item.ItemType == ItemType.Media && item is Media media)
|
||||
{
|
||||
md5 = media.MD5 ?? string.Empty;
|
||||
sha1 = media.SHA1 ?? string.Empty;
|
||||
sha256 = media.SHA256 ?? string.Empty;
|
||||
spamsum = media.SpamSum ?? string.Empty;
|
||||
md5 = media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key) ?? string.Empty;
|
||||
sha1 = media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key) ?? string.Empty;
|
||||
sha256 = media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key) ?? string.Empty;
|
||||
spamsum = media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey) ?? string.Empty;
|
||||
}
|
||||
else if (item.ItemType == ItemType.Rom && item is Rom rom)
|
||||
{
|
||||
crc = rom.CRC ?? string.Empty;
|
||||
md5 = rom.MD5 ?? string.Empty;
|
||||
sha1 = rom.SHA1 ?? string.Empty;
|
||||
sha256 = rom.SHA256 ?? string.Empty;
|
||||
sha384 = rom.SHA384 ?? string.Empty;
|
||||
sha512 = rom.SHA512 ?? string.Empty;
|
||||
size = rom.Size?.ToString() ?? string.Empty;
|
||||
spamsum = rom.SpamSum ?? string.Empty;
|
||||
crc = rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey) ?? string.Empty;
|
||||
md5 = rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key) ?? string.Empty;
|
||||
sha1 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key) ?? string.Empty;
|
||||
sha256 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key) ?? string.Empty;
|
||||
sha384 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key) ?? string.Empty;
|
||||
sha512 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key) ?? string.Empty;
|
||||
size = rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString() ?? string.Empty;
|
||||
spamsum = rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey) ?? string.Empty;
|
||||
}
|
||||
|
||||
// Now do bulk replacement where possible
|
||||
@@ -459,27 +459,27 @@ namespace SabreTools.DatFiles
|
||||
if (item.ItemType == ItemType.Disk && item is Disk disk)
|
||||
{
|
||||
// We can only write out if there's a SHA-1
|
||||
if (!string.IsNullOrEmpty(disk.SHA1))
|
||||
if (!string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
{
|
||||
name = Utilities.GetDepotPath(disk.SHA1, Header.OutputDepot.Depth)?.Replace('\\', '/');
|
||||
name = Utilities.GetDepotPath(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key), Header.OutputDepot.Depth)?.Replace('\\', '/');
|
||||
item.SetName($"{pre}{name}{post}");
|
||||
}
|
||||
}
|
||||
else if (item.ItemType == ItemType.Media && item is Media media)
|
||||
{
|
||||
// We can only write out if there's a SHA-1
|
||||
if (!string.IsNullOrEmpty(media.SHA1))
|
||||
if (!string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key)))
|
||||
{
|
||||
name = Utilities.GetDepotPath(media.SHA1, Header.OutputDepot.Depth)?.Replace('\\', '/');
|
||||
name = Utilities.GetDepotPath(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key), Header.OutputDepot.Depth)?.Replace('\\', '/');
|
||||
item.SetName($"{pre}{name}{post}");
|
||||
}
|
||||
}
|
||||
else if (item.ItemType == ItemType.Rom && item is Rom rom)
|
||||
{
|
||||
// We can only write out if there's a SHA-1
|
||||
if (!string.IsNullOrEmpty(rom.SHA1))
|
||||
if (!string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)))
|
||||
{
|
||||
name = Utilities.GetDepotPath(rom.SHA1, Header.OutputDepot.Depth)?.Replace('\\', '/');
|
||||
name = Utilities.GetDepotPath(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key), Header.OutputDepot.Depth)?.Replace('\\', '/');
|
||||
item.SetName($"{pre}{name}{post}");
|
||||
}
|
||||
}
|
||||
@@ -537,19 +537,19 @@ namespace SabreTools.DatFiles
|
||||
return datItem;
|
||||
|
||||
// If the Rom has "null" characteristics, ensure all fields
|
||||
if (rom.Size == null && rom.CRC == "null")
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null && rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey) == "null")
|
||||
{
|
||||
logger.Verbose($"Empty folder found: {datItem.Machine.Name}");
|
||||
|
||||
rom.SetName(rom.GetName() == "null" ? "-" : rom.GetName());
|
||||
rom.Size = Constants.SizeZero;
|
||||
rom.CRC = rom.CRC == "null" ? Constants.CRCZero : null;
|
||||
rom.MD5 = rom.MD5 == "null" ? Constants.MD5Zero : null;
|
||||
rom.SHA1 = rom.SHA1 == "null" ? Constants.SHA1Zero : null;
|
||||
rom.SHA256 = rom.SHA256 == "null" ? Constants.SHA256Zero : null;
|
||||
rom.SHA384 = rom.SHA384 == "null" ? Constants.SHA384Zero : null;
|
||||
rom.SHA512 = rom.SHA512 == "null" ? Constants.SHA512Zero : null;
|
||||
rom.SpamSum = rom.SpamSum == "null" ? Constants.SpamSumZero : null;
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey) == "null" ? Constants.CRCZero : null);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key) == "null" ? Constants.MD5Zero : null);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key) == "null" ? Constants.SHA1Zero : null);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key) == "null" ? Constants.SHA256Zero : null);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key) == "null" ? Constants.SHA384Zero : null);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key) == "null" ? Constants.SHA512Zero : null);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey) == "null" ? Constants.SpamSumZero : null);
|
||||
}
|
||||
|
||||
return rom;
|
||||
@@ -626,7 +626,7 @@ namespace SabreTools.DatFiles
|
||||
if (ignoreBlanks && datItem.ItemType == ItemType.Rom && datItem is Rom rom)
|
||||
{
|
||||
// If we have a 0-size or blank rom, then we ignore
|
||||
if (rom.Size == 0 || rom.Size == null)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == 0 || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null)
|
||||
{
|
||||
string itemString = JsonConvert.SerializeObject(datItem, Formatting.None);
|
||||
logger?.Verbose($"Item '{itemString}' was skipped because it had an invalid size");
|
||||
|
||||
@@ -20,6 +20,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
// Deserialize the input file
|
||||
var files = new Serialization.Files.ArchiveDotOrg().Deserialize(filename);
|
||||
var metadata = new Serialization.CrossModel.ArchiveDotOrg().Serialize(files);
|
||||
|
||||
// Convert the files data to the internal format
|
||||
ConvertFiles(files?.File, filename, indexId, statsOnly);
|
||||
@@ -103,75 +104,67 @@ namespace SabreTools.DatFiles.Formats
|
||||
|
||||
var rom = new Rom()
|
||||
{
|
||||
ArchiveDotOrgSource = file.Source,
|
||||
//BitTorrentMagnetHash = file.BitTorrentMagnetHash, // TODO: Add to internal model
|
||||
Date = file.LastModifiedTime?.ToString(),
|
||||
Size = NumberHelper.ConvertToInt64(file.Size),
|
||||
MD5 = file.MD5,
|
||||
CRC = file.CRC32,
|
||||
SHA1 = file.SHA1,
|
||||
//FileCount = file.FileCount, // TODO: Add to internal model
|
||||
ArchiveDotOrgFormat = file.Format,
|
||||
OriginalFilename = file.Original,
|
||||
Summation = file.Summation,
|
||||
//MatrixNumber = file.MatrixNumber, // TODO: Add to internal model
|
||||
//CollectionCatalogNumber = file.CollectionCatalogNumber, // TODO: Add to internal model
|
||||
|
||||
// ASR-Related
|
||||
//ASRDetectedLang = file.ASRDetectedLang, // TODO: Add to internal model
|
||||
//ASRDetectedLangConf = file.ASRDetectedLangConf, // TODO: Add to internal model
|
||||
//ASRTranscribedLang = file.ASRTranscribedLang, // TODO: Add to internal model
|
||||
//WhisperASRModuleVersion = file.WhisperASRModuleVersion, // TODO: Add to internal model
|
||||
//WhisperModelHash = file.WhisperModelHash, // TODO: Add to internal model
|
||||
//WhisperModelName = file.WhisperModelName, // TODO: Add to internal model
|
||||
//WhisperVersion = file.WhisperVersion, // TODO: Add to internal model
|
||||
|
||||
// OCR-Related
|
||||
//ClothCoverDetectionModuleVersion = file.ClothCoverDetectionModuleVersions, // TODO: Add to internal model
|
||||
//hOCRCharToWordhOCRVersion = file.hOCRCharToWordhOCRVersion, // TODO: Add to internal model
|
||||
//hOCRCharToWordModuleVersion = file.hOCRCharToWordModuleVersion, // TODO: Add to internal model
|
||||
//hOCRFtsTexthOCRVersion = file.hOCRFtsTexthOCRVersion, // TODO: Add to internal model
|
||||
//hOCRFtsTextModuleVersion = file.hOCRFtsTextModuleVersion, // TODO: Add to internal model
|
||||
//hOCRPageIndexhOCRVersion = file.hOCRPageIndexhOCRVersion, // TODO: Add to internal model
|
||||
//hOCRPageIndexModuleVersion = file.hOCRPageIndexModuleVersion, // TODO: Add to internal model
|
||||
//TesseractOCR = file.TesseractOCR, // TODO: Add to internal model
|
||||
//TesseractOCRConverted = file.TesseractOCRConverted, // TODO: Add to internal model
|
||||
//TesseractOCRDetectedLang = file.TesseractOCRDetectedLang, // TODO: Add to internal model
|
||||
//TesseractOCRDetectedLangConf = file.TesseractOCRDetectedLangConf, // TODO: Add to internal model
|
||||
//TesseractOCRDetectedScript = file.TesseractOCRDetectedScript, // TODO: Add to internal model
|
||||
//TesseractOCRDetectedScriptConf = file.TesseractOCRDetectedScriptConf, // TODO: Add to internal model
|
||||
//TesseractOCRParameters = file.TesseractOCRParameters, // TODO: Add to internal model
|
||||
//TesseractOCRModuleVersion = file.TesseractOCRModuleVersion, // TODO: Add to internal model
|
||||
//PDFModuleVersion = file.PDFModuleVersion, // TODO: Add to internal model
|
||||
//WordConfidenceInterval0To10 = file.WordConfidenceInterval0To10, // TODO: Add to internal model
|
||||
//WordConfidenceInterval11To20 = file.WordConfidenceInterval11To20, // TODO: Add to internal model
|
||||
//WordConfidenceInterval21To30 = file.WordConfidenceInterval21To30, // TODO: Add to internal model
|
||||
//WordConfidenceInterval31To40 = file.WordConfidenceInterval31To40, // TODO: Add to internal model
|
||||
//WordConfidenceInterval41To50 = file.WordConfidenceInterval41To50, // TODO: Add to internal model
|
||||
//WordConfidenceInterval51To60 = file.WordConfidenceInterval51To60, // TODO: Add to internal model
|
||||
//WordConfidenceInterval61To70 = file.WordConfidenceInterval61To70, // TODO: Add to internal model
|
||||
//WordConfidenceInterval71To80 = file.WordConfidenceInterval71To80, // TODO: Add to internal model
|
||||
//WordConfidenceInterval81To90 = file.WordConfidenceInterval81To90, // TODO: Add to internal model
|
||||
//WordConfidenceInterval91To100 = file.WordConfidenceInterval91To100, // TODO: Add to internal model
|
||||
|
||||
// Media-Related
|
||||
//Album = file.Album, // TODO: Add to internal model
|
||||
//Artist = file.Artist, // TODO: Add to internal model
|
||||
//Bitrate = file.Bitrate, // TODO: Add to internal model
|
||||
//Creator = file.Creator, // TODO: Add to internal model
|
||||
//Height = file.Height, // TODO: Add to internal model
|
||||
//Length = file.Length, // TODO: Add to internal model
|
||||
//PreviewImage = file.PreviewImage, // TODO: Add to internal model
|
||||
//Rotation = file.Rotation, // TODO: Add to internal model
|
||||
//Title = file.Title, // TODO: Add to internal model
|
||||
//Track = file.Track, // TODO: Add to internal model
|
||||
//Width = file.Width, // TODO: Add to internal model
|
||||
|
||||
ItemStatus = ItemStatus.None,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(name);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.AlbumKey, file.Album);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.ArtistKey, file.Artist);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.ASRDetectedLangKey, file.ASRDetectedLang);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.ASRDetectedLangConfKey, file.ASRDetectedLangConf);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.ASRTranscribedLangKey, file.ASRTranscribedLang);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.BitrateKey, file.Bitrate);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.BitTorrentMagnetHashKey, file.BitTorrentMagnetHash);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.ClothCoverDetectionModuleVersionKey, file.ClothCoverDetectionModuleVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CollectionCatalogNumberKey, file.CollectionCatalogNumber);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, file.CRC32);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CreatorKey, file.Creator);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.DateKey, file.LastModifiedTime?.ToString());
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.FileCountKey, file.FileCount);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.FormatKey, file.Format);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.HeightKey, file.Height);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.hOCRCharToWordhOCRVersionKey, file.hOCRCharToWordhOCRVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.hOCRCharToWordModuleVersionKey, file.hOCRCharToWordModuleVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.hOCRFtsTexthOCRVersionKey, file.hOCRFtsTexthOCRVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.hOCRFtsTextModuleVersionKey, file.hOCRFtsTextModuleVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.hOCRPageIndexhOCRVersionKey, file.hOCRPageIndexhOCRVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.hOCRPageIndexModuleVersionKey, file.hOCRPageIndexModuleVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.LengthKey, file.Length);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MatrixNumberKey, file.MatrixNumber);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, file.MD5);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.OriginalKey, file.Original);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.PDFModuleVersionKey, file.PDFModuleVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.PreviewImageKey, file.PreviewImage);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.RotationKey, file.Rotation);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(file.Size));
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, file.SHA1);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SourceKey, file.Source);
|
||||
rom.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SummationKey, file.Summation);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRKey, file.TesseractOCR);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRConvertedKey, file.TesseractOCRConverted);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRDetectedLangKey, file.TesseractOCRDetectedLang);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRDetectedLangConfKey, file.TesseractOCRDetectedLangConf);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRDetectedScriptKey, file.TesseractOCRDetectedScript);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRDetectedScriptConfKey, file.TesseractOCRDetectedScriptConf);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRModuleVersionKey, file.TesseractOCRModuleVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRParametersKey, file.TesseractOCRParameters);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TitleKey, file.Title);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TrackKey, file.Track);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WhisperASRModuleVersionKey, file.WhisperASRModuleVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WhisperModelHashKey, file.WhisperModelHash);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WhisperModelNameKey, file.WhisperModelName);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WhisperVersionKey, file.WhisperVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WidthKey, file.Width);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval0To10Key, file.WordConfidenceInterval0To10);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval11To20Key, file.WordConfidenceInterval11To20);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval21To30Key, file.WordConfidenceInterval21To30);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval31To40Key, file.WordConfidenceInterval31To40);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval41To50Key, file.WordConfidenceInterval41To50);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval51To60Key, file.WordConfidenceInterval51To60);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval61To70Key, file.WordConfidenceInterval61To70);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval71To80Key, file.WordConfidenceInterval71To80);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval81To90Key, file.WordConfidenceInterval81To90);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval91To100Key, file.WordConfidenceInterval91To100);
|
||||
|
||||
// Now process and add the rom
|
||||
rom.CopyMachineInformation(machine);
|
||||
|
||||
@@ -33,11 +33,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (rom.Size == null || rom.Size < 0)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) < 0)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
if (string.IsNullOrEmpty(rom.CRC)
|
||||
&& string.IsNullOrEmpty(rom.MD5)
|
||||
&& string.IsNullOrEmpty(rom.SHA1))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
}
|
||||
@@ -126,72 +126,72 @@ namespace SabreTools.DatFiles.Formats
|
||||
var file = new Models.ArchiveDotOrg.File
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Source = item.ArchiveDotOrgSource,
|
||||
//BitTorrentMagnetHash = item.BitTorrentMagnetHash, // TODO: Add to internal model
|
||||
Size = item.Size?.ToString(),
|
||||
MD5 = item.MD5,
|
||||
CRC32 = item.CRC,
|
||||
SHA1 = item.SHA1,
|
||||
//FileCount = item.FileCount, // TODO: Add to internal model
|
||||
Format = item.ArchiveDotOrgFormat,
|
||||
//Original = item.Original, // TODO: Add to internal model
|
||||
Summation = item.Summation,
|
||||
//MatrixNumber = item.MatrixNumber, // TODO: Add to internal model
|
||||
//CollectionCatalogNumber = item.CollectionCatalogNumber, // TODO: Add to internal model
|
||||
Source = item.GetFieldValue<string?>(Models.Metadata.Rom.SourceKey),
|
||||
BitTorrentMagnetHash = item.GetFieldValue<string?>(Models.Metadata.Rom.BitTorrentMagnetHashKey),
|
||||
Size = item.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key),
|
||||
CRC32 = item.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
FileCount = item.GetFieldValue<string?>(Models.Metadata.Rom.FileCountKey),
|
||||
Format = item.GetFieldValue<string?>(Models.Metadata.Rom.FormatKey),
|
||||
Original = item.GetFieldValue<string?>(Models.Metadata.Rom.OriginalKey),
|
||||
Summation = item.GetFieldValue<string?>(Models.Metadata.Rom.SummationKey),
|
||||
MatrixNumber = item.GetFieldValue<string?>(Models.Metadata.Rom.MatrixNumberKey),
|
||||
CollectionCatalogNumber = item.GetFieldValue<string?>(Models.Metadata.Rom.CollectionCatalogNumberKey),
|
||||
|
||||
// ASR-Related
|
||||
//ASRDetectedLang = item.ASRDetectedLang, // TODO: Add to internal model
|
||||
//ASRDetectedLangConf = item.ASRDetectedLangConf, // TODO: Add to internal model
|
||||
//ASRTranscribedLang = item.ASRTranscribedLang, // TODO: Add to internal model
|
||||
//WhisperASRModuleVersion = item.WhisperASRModuleVersion, // TODO: Add to internal model
|
||||
//WhisperModelHash = item.WhisperModelHash, // TODO: Add to internal model
|
||||
//WhisperModelName = item.WhisperModelName, // TODO: Add to internal model
|
||||
//WhisperVersion = item.WhisperVersion, // TODO: Add to internal model
|
||||
ASRDetectedLang = item.GetFieldValue<string?>(Models.Metadata.Rom.ASRDetectedLangKey),
|
||||
ASRDetectedLangConf = item.GetFieldValue<string?>(Models.Metadata.Rom.ASRDetectedLangConfKey),
|
||||
ASRTranscribedLang = item.GetFieldValue<string?>(Models.Metadata.Rom.ASRTranscribedLangKey),
|
||||
WhisperASRModuleVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.WhisperASRModuleVersionKey),
|
||||
WhisperModelHash = item.GetFieldValue<string?>(Models.Metadata.Rom.WhisperModelHashKey),
|
||||
WhisperModelName = item.GetFieldValue<string?>(Models.Metadata.Rom.WhisperModelNameKey),
|
||||
WhisperVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.WhisperVersionKey),
|
||||
|
||||
// OCR-Related
|
||||
//ClothCoverDetectionModuleVersion = item.ClothCoverDetectionModuleVersions, // TODO: Add to internal model
|
||||
//hOCRCharToWordhOCRVersion = item.hOCRCharToWordhOCRVersion, // TODO: Add to internal model
|
||||
//hOCRCharToWordModuleVersion = item.hOCRCharToWordModuleVersion, // TODO: Add to internal model
|
||||
//hOCRFtsTexthOCRVersion = item.hOCRFtsTexthOCRVersion, // TODO: Add to internal model
|
||||
//hOCRFtsTextModuleVersion = item.hOCRFtsTextModuleVersion, // TODO: Add to internal model
|
||||
//hOCRPageIndexhOCRVersion = item.hOCRPageIndexhOCRVersion, // TODO: Add to internal model
|
||||
//hOCRPageIndexModuleVersion = item.hOCRPageIndexModuleVersion, // TODO: Add to internal model
|
||||
//TesseractOCR = item.TesseractOCR, // TODO: Add to internal model
|
||||
//TesseractOCRConverted = item.TesseractOCRConverted, // TODO: Add to internal model
|
||||
//TesseractOCRDetectedLang = item.TesseractOCRDetectedLang, // TODO: Add to internal model
|
||||
//TesseractOCRDetectedLangConf = item.TesseractOCRDetectedLangConf, // TODO: Add to internal model
|
||||
//TesseractOCRDetectedScript = item.TesseractOCRDetectedScript, // TODO: Add to internal model
|
||||
//TesseractOCRDetectedScriptConf = item.TesseractOCRDetectedScriptConf, // TODO: Add to internal model
|
||||
//TesseractOCRParameters = item.TesseractOCRParameters, // TODO: Add to internal model
|
||||
//TesseractOCRModuleVersion = item.TesseractOCRModuleVersion, // TODO: Add to internal model
|
||||
//PDFModuleVersion = item.PDFModuleVersion, // TODO: Add to internal model
|
||||
//WordConfidenceInterval0To10 = item.WordConfidenceInterval0To10, // TODO: Add to internal model
|
||||
//WordConfidenceInterval11To20 = item.WordConfidenceInterval11To20, // TODO: Add to internal model
|
||||
//WordConfidenceInterval21To30 = item.WordConfidenceInterval21To30, // TODO: Add to internal model
|
||||
//WordConfidenceInterval31To40 = item.WordConfidenceInterval31To40, // TODO: Add to internal model
|
||||
//WordConfidenceInterval41To50 = item.WordConfidenceInterval41To50, // TODO: Add to internal model
|
||||
//WordConfidenceInterval51To60 = item.WordConfidenceInterval51To60, // TODO: Add to internal model
|
||||
//WordConfidenceInterval61To70 = item.WordConfidenceInterval61To70, // TODO: Add to internal model
|
||||
//WordConfidenceInterval71To80 = item.WordConfidenceInterval71To80, // TODO: Add to internal model
|
||||
//WordConfidenceInterval81To90 = item.WordConfidenceInterval81To90, // TODO: Add to internal model
|
||||
//WordConfidenceInterval91To100 = item.WordConfidenceInterval91To100, // TODO: Add to internal model
|
||||
ClothCoverDetectionModuleVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.ClothCoverDetectionModuleVersionKey),
|
||||
hOCRCharToWordhOCRVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.hOCRCharToWordhOCRVersionKey),
|
||||
hOCRCharToWordModuleVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.hOCRCharToWordModuleVersionKey),
|
||||
hOCRFtsTexthOCRVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.hOCRFtsTexthOCRVersionKey),
|
||||
hOCRFtsTextModuleVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.hOCRFtsTextModuleVersionKey),
|
||||
hOCRPageIndexhOCRVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.hOCRPageIndexhOCRVersionKey),
|
||||
hOCRPageIndexModuleVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.hOCRPageIndexModuleVersionKey),
|
||||
TesseractOCR = item.GetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRKey),
|
||||
TesseractOCRConverted = item.GetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRConvertedKey),
|
||||
TesseractOCRDetectedLang = item.GetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRDetectedLangKey),
|
||||
TesseractOCRDetectedLangConf = item.GetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRDetectedLangConfKey),
|
||||
TesseractOCRDetectedScript = item.GetFieldValue<string?>(fieldName: Models.Metadata.Rom.TesseractOCRDetectedScriptKey),
|
||||
TesseractOCRDetectedScriptConf = item.GetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRDetectedScriptConfKey),
|
||||
TesseractOCRParameters = item.GetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRParametersKey),
|
||||
TesseractOCRModuleVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRModuleVersionKey),
|
||||
PDFModuleVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.PDFModuleVersionKey),
|
||||
WordConfidenceInterval0To10 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval0To10Key),
|
||||
WordConfidenceInterval11To20 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval11To20Key),
|
||||
WordConfidenceInterval21To30 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval21To30Key),
|
||||
WordConfidenceInterval31To40 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval31To40Key),
|
||||
WordConfidenceInterval41To50 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval41To50Key),
|
||||
WordConfidenceInterval51To60 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval51To60Key),
|
||||
WordConfidenceInterval61To70 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval61To70Key),
|
||||
WordConfidenceInterval71To80 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval71To80Key),
|
||||
WordConfidenceInterval81To90 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval81To90Key),
|
||||
WordConfidenceInterval91To100 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval91To100Key),
|
||||
|
||||
// Media-Related
|
||||
//Album = item.Album, // TODO: Add to internal model
|
||||
//Artist = item.Artist, // TODO: Add to internal model
|
||||
//Bitrate = item.Bitrate, // TODO: Add to internal model
|
||||
//Creator = item.Creator, // TODO: Add to internal model
|
||||
//Height = item.Height, // TODO: Add to internal model
|
||||
//Length = item.Length, // TODO: Add to internal model
|
||||
//PreviewImage = item.PreviewImage, // TODO: Add to internal model
|
||||
//Rotation = item.Rotation, // TODO: Add to internal model
|
||||
//Title = item.Title, // TODO: Add to internal model
|
||||
//Track = item.Track, // TODO: Add to internal model
|
||||
//Width = item.Width, // TODO: Add to internal model
|
||||
Album = item.GetFieldValue<string?>(Models.Metadata.Rom.AlbumKey),
|
||||
Artist = item.GetFieldValue<string?>(Models.Metadata.Rom.ArtistKey),
|
||||
Bitrate = item.GetFieldValue<string?>(Models.Metadata.Rom.BitrateKey),
|
||||
Creator = item.GetFieldValue<string?>(Models.Metadata.Rom.CreatorKey),
|
||||
Height = item.GetFieldValue<string?>(Models.Metadata.Rom.HeightKey),
|
||||
Length = item.GetFieldValue<string?>(Models.Metadata.Rom.LengthKey),
|
||||
PreviewImage = item.GetFieldValue<string?>(Models.Metadata.Rom.PreviewImageKey),
|
||||
Rotation = item.GetFieldValue<string?>(Models.Metadata.Rom.RotationKey),
|
||||
Title = item.GetFieldValue<string?>(Models.Metadata.Rom.TitleKey),
|
||||
Track = item.GetFieldValue<string?>(Models.Metadata.Rom.TrackKey),
|
||||
Width = item.GetFieldValue<string?>(Models.Metadata.Rom.WidthKey),
|
||||
|
||||
};
|
||||
|
||||
if (long.TryParse(item.Date ?? string.Empty, out long lastModifiedTime))
|
||||
if (long.TryParse(item.GetFieldValue<string?>(Models.Metadata.Rom.DateKey) ?? string.Empty, out long lastModifiedTime))
|
||||
file.LastModifiedTime = lastModifiedTime.ToString();
|
||||
|
||||
return file;
|
||||
|
||||
@@ -65,15 +65,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
if (row == null)
|
||||
return;
|
||||
|
||||
var rom = new Rom()
|
||||
{
|
||||
Size = Constants.SizeZero,
|
||||
CRC = Constants.CRCZero,
|
||||
MD5 = Constants.MD5Zero,
|
||||
SHA1 = Constants.SHA1Zero,
|
||||
ItemStatus = ItemStatus.None,
|
||||
|
||||
Machine = new Machine
|
||||
var machine = new Machine
|
||||
{
|
||||
Name = row.Name,
|
||||
Description = row.Title,
|
||||
@@ -89,17 +81,23 @@ namespace SabreTools.DatFiles.Formats
|
||||
DisplayType = row.DisplayType,
|
||||
Comment = row.Extra,
|
||||
Buttons = row.Buttons
|
||||
},
|
||||
|
||||
AltName = row.AltRomname,
|
||||
AltTitle = row.AltTitle,
|
||||
// TODO: Add extended fields
|
||||
};
|
||||
|
||||
var rom = new Rom()
|
||||
{
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName("-");
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.AltRomnameKey, row.AltRomname);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.AltTitleKey, row.AltTitle);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, Constants.CRCZero);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, Constants.MD5Zero);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, Constants.SHA1Zero);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero);
|
||||
rom.SetFieldValue<ItemStatus?>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
|
||||
|
||||
// Now process and add the rom
|
||||
rom.CopyMachineInformation(machine);
|
||||
ParseAddHelper(rom, statsOnly);
|
||||
}
|
||||
|
||||
|
||||
@@ -137,8 +137,8 @@ namespace SabreTools.DatFiles.Formats
|
||||
Status = rom.Machine.Status,
|
||||
DisplayCount = rom.Machine.DisplayCount,
|
||||
DisplayType = rom.Machine.DisplayType,
|
||||
AltRomname = rom.AltName,
|
||||
AltTitle = rom.AltTitle,
|
||||
AltRomname = rom.GetFieldValue<string?>(Models.Metadata.Rom.AltRomnameKey),
|
||||
AltTitle = rom.GetFieldValue<string?>(Models.Metadata.Rom.AltTitleKey),
|
||||
Extra = rom.Machine.Comment,
|
||||
Buttons = rom.Machine.Buttons,
|
||||
// TODO: Add extended fields
|
||||
|
||||
@@ -168,14 +168,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Release
|
||||
{
|
||||
Region = release.Region,
|
||||
Language = release.Language,
|
||||
Date = release.Date,
|
||||
Default = release.Default?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(release.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Release.DateKey, release.Date);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Release.DefaultKey, release.Default?.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Release.LanguageKey, release.Language);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Release.RegionKey, release.Region);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -202,12 +201,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new BiosSet
|
||||
{
|
||||
Description = biosset.Description,
|
||||
Default = biosset.Default?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(biosset.Name);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.BiosSet.DefaultKey, biosset.Default?.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey, biosset.Description);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -234,30 +232,29 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Rom
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(rom.Size),
|
||||
CRC = rom.CRC,
|
||||
MD5 = rom.MD5,
|
||||
SHA1 = rom.SHA1,
|
||||
SHA256 = rom.SHA256,
|
||||
SHA384 = rom.SHA384,
|
||||
SHA512 = rom.SHA512,
|
||||
SpamSum = rom.SpamSum,
|
||||
//xxHash364 = rom.xxHash364, // TODO: Add to internal model
|
||||
//xxHash3128 = rom.xxHash3128, // TODO: Add to internal model
|
||||
MergeTag = rom.Merge,
|
||||
ItemStatus = rom.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL,
|
||||
Region = rom.Region,
|
||||
//Flags = rom.Flags, // TODO: Add to internal model
|
||||
Offset = rom.Offs,
|
||||
//Serial = rom.Serial, // TODO: Add to internal model
|
||||
//Header = rom.Header, // TODO: Add to internal model
|
||||
Date = rom.Date,
|
||||
Inverted = rom.Inverted?.AsYesNo(),
|
||||
MIA = rom.MIA?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(rom.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, rom.CRC);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.DateKey, rom.Date);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.FlagsKey, rom.Flags);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.HeaderKey, rom.Header);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Rom.InvertedKey, rom.Inverted?.AsYesNo());
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Rom.MIAKey, rom.MIA?.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, rom.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.MergeKey, rom.Merge);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.OffsetKey, rom.Offs);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.RegionKey, rom.Region);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SerialKey, rom.Serial);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.SHA1);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, rom.SHA256);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, rom.SHA384);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, rom.SHA512);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(rom.Size));
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, rom.SpamSum);
|
||||
item.SetFieldValue<ItemStatus?>(Models.Metadata.Rom.StatusKey, rom.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.xxHash364Key, rom.xxHash364);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.xxHash3128Key, rom.xxHash3128);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -284,15 +281,14 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Disk
|
||||
{
|
||||
MD5 = disk.MD5,
|
||||
SHA1 = disk.SHA1,
|
||||
MergeTag = disk.Merge,
|
||||
ItemStatus = disk.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL,
|
||||
//Flags = disk.Flags, // TODO: Add to internal model
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(disk.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.FlagsKey, disk.Flags);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, disk.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.MergeKey, disk.Merge);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, disk.SHA1);
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, disk.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -319,14 +315,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Media
|
||||
{
|
||||
MD5 = medium.MD5,
|
||||
SHA1 = medium.SHA1,
|
||||
SHA256 = medium.SHA256,
|
||||
SpamSum = medium.SpamSum,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(medium.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.MD5Key, medium.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SHA1Key, medium.SHA1);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SHA256Key, medium.SHA256);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SpamSumKey, medium.SpamSum);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -382,13 +377,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Chip
|
||||
{
|
||||
ChipType = chip.Type?.AsEnumValue<ChipType>() ?? ChipType.NULL,
|
||||
//Flags = chip.Flags, // TODO: Add to internal model
|
||||
Clock = NumberHelper.ConvertToInt64(chip.Clock),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(chip.Name);
|
||||
item.SetFieldValue<ChipType>(Models.Metadata.Chip.ChipTypeKey, chip.Type?.AsEnumValue<ChipType>() ?? ChipType.NULL);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Chip.ClockKey, NumberHelper.ConvertToInt64(chip.Clock));
|
||||
item.SetFieldValue<string?>(Models.Metadata.Chip.FlagsKey, chip.Flags);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -415,23 +409,22 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Display
|
||||
{
|
||||
DisplayType = video.Screen?.AsEnumValue<DisplayType>() ?? DisplayType.NULL,
|
||||
Width = NumberHelper.ConvertToInt64(video.X),
|
||||
Height = NumberHelper.ConvertToInt64(video.Y),
|
||||
//AspectX = video.AspectX, // TODO: Add to internal model or find mapping
|
||||
//AspectY = video.AspectY, // TODO: Add to internal model or find mapping
|
||||
Refresh = NumberHelper.ConvertToDouble(video.Freq),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<long?>("ASPECTX", NumberHelper.ConvertToInt64(video.AspectX));
|
||||
item.SetFieldValue<long?>("ASPECTY", NumberHelper.ConvertToInt64(video.AspectY));
|
||||
item.SetFieldValue<DisplayType>(Models.Metadata.Display.DisplayTypeKey, video.Screen?.AsEnumValue<DisplayType>() ?? DisplayType.NULL);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.HeightKey, NumberHelper.ConvertToInt64(video.Y));
|
||||
item.SetFieldValue<double?>(Models.Metadata.Display.RefreshKey, NumberHelper.ConvertToDouble(video.Freq));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.WidthKey, NumberHelper.ConvertToInt64(video.X));
|
||||
|
||||
switch (video.Orientation)
|
||||
{
|
||||
case "horizontal":
|
||||
item.Rotate = 0;
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.RotateKey, 0);
|
||||
break;
|
||||
case "vertical":
|
||||
item.Rotate = 90;
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.RotateKey, 90);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -458,10 +451,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
containsItems = true;
|
||||
var item = new Sound
|
||||
{
|
||||
Channels = NumberHelper.ConvertToInt64(sound.Channels),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<long?>(Models.Metadata.Sound.ChannelsKey, NumberHelper.ConvertToInt64(sound.Channels));
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -485,21 +477,18 @@ namespace SabreTools.DatFiles.Formats
|
||||
containsItems = true;
|
||||
var item = new Input
|
||||
{
|
||||
Players = NumberHelper.ConvertToInt64(input.Players),
|
||||
//Control = input.Control, // TODO: Add to internal model or find mapping
|
||||
Controls =
|
||||
[
|
||||
new Control
|
||||
{
|
||||
Buttons = NumberHelper.ConvertToInt64(input.Buttons),
|
||||
},
|
||||
],
|
||||
Coins = NumberHelper.ConvertToInt64(input.Coins),
|
||||
Tilt = input.Tilt?.AsYesNo(),
|
||||
Service = input.Service?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<long?>(Models.Metadata.Input.CoinsKey, NumberHelper.ConvertToInt64(input.Coins));
|
||||
//item.SetFieldValue<string?>(Models.Metadata.Input.ControlKey, input.Control);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Input.PlayersKey, NumberHelper.ConvertToInt64(input.Players));
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Input.ServiceKey, input.Service?.AsYesNo());
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Input.TiltKey, input.Tilt?.AsYesNo());
|
||||
|
||||
var control = new Control();
|
||||
control.SetFieldValue<long?>(Models.Metadata.Control.ButtonsKey, NumberHelper.ConvertToInt64(input.Buttons));
|
||||
|
||||
item.SetFieldValue<Control[]?>(Models.Metadata.Input.ControlKey, [control]);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -525,24 +514,23 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new DipSwitch
|
||||
{
|
||||
Values = [],
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(dipswitch.Name);
|
||||
|
||||
var values = new List<DipValue>();
|
||||
foreach (string entry in dipswitch.Entry ?? [])
|
||||
{
|
||||
var dipValue = new DipValue
|
||||
{
|
||||
Value = entry,
|
||||
Default = entry == dipswitch.Default,
|
||||
};
|
||||
var dipValue = new DipValue();
|
||||
dipValue.SetName(dipswitch.Name);
|
||||
dipValue.SetFieldValue<bool?>(Models.Metadata.DipValue.DefaultKey, entry == dipswitch.Default);
|
||||
dipValue.SetFieldValue<string?>(Models.Metadata.DipValue.ValueKey, entry);
|
||||
|
||||
item.Values.Add(dipValue);
|
||||
values.Add(dipValue);
|
||||
}
|
||||
|
||||
item.SetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey, [.. values]);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
}
|
||||
@@ -566,14 +554,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
containsItems = true;
|
||||
var item = new Driver
|
||||
{
|
||||
Status = driver.Status?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL,
|
||||
//Color = driver.Color, // TODO: Add to internal model or find mapping
|
||||
//Sound = driver.Sound, // TODO: Add to internal model or find mapping
|
||||
//PaletteSize = driver.PaletteSize, // TODO: Add to internal model or find mapping
|
||||
//Blit = driver.Blit, // TODO: Add to internal model or find mapping
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<string?>(Models.Metadata.Driver.BlitKey, driver.Blit);
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.ColorKey, driver.Color?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Driver.PaletteSizeKey, NumberHelper.ConvertToInt64(driver.PaletteSize));
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.SoundKey, driver.Sound?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey, driver.Status?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
|
||||
@@ -43,29 +43,29 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Release release:
|
||||
if (string.IsNullOrEmpty(release.GetName()))
|
||||
missingFields.Add(Models.Metadata.Release.NameKey);
|
||||
if (string.IsNullOrEmpty(release.Region))
|
||||
if (string.IsNullOrEmpty(release.GetFieldValue<string?>(Models.Metadata.Release.RegionKey)))
|
||||
missingFields.Add(Models.Metadata.Release.RegionKey);
|
||||
break;
|
||||
|
||||
case BiosSet biosset:
|
||||
if (string.IsNullOrEmpty(biosset.GetName()))
|
||||
missingFields.Add(Models.Metadata.BiosSet.NameKey);
|
||||
if (string.IsNullOrEmpty(biosset.Description))
|
||||
if (string.IsNullOrEmpty(biosset.GetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey)))
|
||||
missingFields.Add(Models.Metadata.BiosSet.DescriptionKey);
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetName()))
|
||||
missingFields.Add(Models.Metadata.Rom.NameKey);
|
||||
if (rom.Size == null || rom.Size < 0)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) < 0)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
if (string.IsNullOrEmpty(rom.CRC)
|
||||
&& string.IsNullOrEmpty(rom.MD5)
|
||||
&& string.IsNullOrEmpty(rom.SHA1)
|
||||
&& string.IsNullOrEmpty(rom.SHA256)
|
||||
&& string.IsNullOrEmpty(rom.SHA384)
|
||||
&& string.IsNullOrEmpty(rom.SHA512)
|
||||
&& string.IsNullOrEmpty(rom.SpamSum))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
}
|
||||
@@ -74,8 +74,8 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Disk disk:
|
||||
if (string.IsNullOrEmpty(disk.GetName()))
|
||||
missingFields.Add(Models.Metadata.Disk.NameKey);
|
||||
if (string.IsNullOrEmpty(disk.MD5)
|
||||
&& string.IsNullOrEmpty(disk.SHA1))
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key))
|
||||
&& string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Disk.SHA1Key);
|
||||
}
|
||||
@@ -92,26 +92,26 @@ namespace SabreTools.DatFiles.Formats
|
||||
break;
|
||||
|
||||
case Chip chip:
|
||||
if (!chip.ChipTypeSpecified)
|
||||
if (chip.GetFieldValue<ChipType>(Models.Metadata.Chip.ChipTypeKey) == ChipType.NULL)
|
||||
missingFields.Add(Models.Metadata.Chip.ChipTypeKey);
|
||||
if (string.IsNullOrEmpty(chip.GetName()))
|
||||
missingFields.Add(Models.Metadata.Chip.NameKey);
|
||||
break;
|
||||
|
||||
case Display display:
|
||||
if (!display.DisplayTypeSpecified)
|
||||
if (display.GetFieldValue<DisplayType>(Models.Metadata.Display.DisplayTypeKey) == DisplayType.NULL)
|
||||
missingFields.Add(Models.Metadata.Display.DisplayTypeKey);
|
||||
if (!display.RotateSpecified)
|
||||
if (display.GetFieldValue<long?>(Models.Metadata.Display.RotateKey) == null)
|
||||
missingFields.Add(Models.Metadata.Display.RotateKey);
|
||||
break;
|
||||
|
||||
case Sound sound:
|
||||
if (!sound.ChannelsSpecified)
|
||||
if (sound.GetFieldValue<long?>(Models.Metadata.Sound.ChannelsKey) == null)
|
||||
missingFields.Add(Models.Metadata.Sound.ChannelsKey);
|
||||
break;
|
||||
|
||||
case Input input:
|
||||
if (!input.PlayersSpecified)
|
||||
if (input.GetFieldValue<long?>(Models.Metadata.Input.PlayersKey) == null)
|
||||
missingFields.Add(Models.Metadata.Input.PlayersKey);
|
||||
if (!input.ControlsSpecified)
|
||||
missingFields.Add(Models.Metadata.Input.ControlKey);
|
||||
@@ -123,9 +123,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
break;
|
||||
|
||||
case Driver driver:
|
||||
if (!driver.StatusSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.StatusKey);
|
||||
if (!driver.EmulationSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.EmulationKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.EmulationKey);
|
||||
break;
|
||||
}
|
||||
@@ -338,14 +338,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
var release = new Models.ClrMamePro.Release
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Region = item.Region,
|
||||
Language = item.Language,
|
||||
Date = item.Date,
|
||||
Region = item.GetFieldValue<string?>(Models.Metadata.Release.RegionKey),
|
||||
Language = item.GetFieldValue<string?>(Models.Metadata.Release.LanguageKey),
|
||||
Date = item.GetFieldValue<string?>(Models.Metadata.Release.DateKey),
|
||||
Default = item.GetFieldValue<bool?>(Models.Metadata.Release.DefaultKey).FromYesNo(),
|
||||
};
|
||||
|
||||
if (item.DefaultSpecified)
|
||||
release.Default = item.Default.FromYesNo();
|
||||
|
||||
return release;
|
||||
}
|
||||
|
||||
@@ -357,12 +355,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
var biosset = new Models.ClrMamePro.BiosSet
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Description = item.Description,
|
||||
Default = item.GetFieldValue<bool?>(Models.Metadata.BiosSet.DefaultKey).FromYesNo(),
|
||||
Description = item.GetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey),
|
||||
};
|
||||
|
||||
if (item.DefaultSpecified)
|
||||
biosset.Default = item.Default.FromYesNo();
|
||||
|
||||
return biosset;
|
||||
}
|
||||
|
||||
@@ -374,31 +370,29 @@ namespace SabreTools.DatFiles.Formats
|
||||
var rom = new Models.ClrMamePro.Rom
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Size = item.Size?.ToString(),
|
||||
CRC = item.CRC,
|
||||
MD5 = item.MD5,
|
||||
SHA1 = item.SHA1,
|
||||
SHA256 = item.SHA256,
|
||||
SHA384 = item.SHA384,
|
||||
SHA512 = item.SHA512,
|
||||
SpamSum = item.SpamSum,
|
||||
//xxHash364 = item.xxHash364, // TODO: Add to internal model
|
||||
//xxHash3128 = item.xxHash3128, // TODO: Add to internal model
|
||||
Merge = item.MergeTag,
|
||||
Region = item.Region,
|
||||
//Flags = item.Flags, // TODO: Add to internal model
|
||||
Offs = item.Offset,
|
||||
//Serial = item.Serial, // TODO: Add to internal model
|
||||
//Header = item.Header, // TODO: Add to internal model
|
||||
Date = item.Date,
|
||||
Size = item.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
CRC = item.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
SHA256 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key),
|
||||
SHA384 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key),
|
||||
SHA512 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key),
|
||||
SpamSum = item.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey),
|
||||
xxHash364 = item.GetFieldValue<string?>(Models.Metadata.Rom.xxHash364Key),
|
||||
xxHash3128 = item.GetFieldValue<string?>(Models.Metadata.Rom.xxHash3128Key),
|
||||
Merge = item.GetFieldValue<string?>(Models.Metadata.Rom.MergeKey),
|
||||
Region = item.GetFieldValue<string?>(Models.Metadata.Rom.RegionKey),
|
||||
Flags = item.GetFieldValue<string?>(Models.Metadata.Rom.FlagsKey),
|
||||
Date = item.GetFieldValue<string?>(Models.Metadata.Rom.DateKey),
|
||||
Offs = item.GetFieldValue<string?>(Models.Metadata.Rom.OffsetKey),
|
||||
Serial = item.GetFieldValue<string?>(Models.Metadata.Rom.SerialKey),
|
||||
Header = item.GetFieldValue<string?>(Models.Metadata.Rom.HeaderKey),
|
||||
Inverted = item.GetFieldValue<bool?>(Models.Metadata.Rom.InvertedKey).FromYesNo(),
|
||||
MIA = item.GetFieldValue<bool?>(Models.Metadata.Rom.MIAKey).FromYesNo(),
|
||||
};
|
||||
|
||||
if (item.ItemStatusSpecified)
|
||||
rom.Status = item.ItemStatus.AsStringValue<ItemStatus>(useSecond: false);
|
||||
if (item.InvertedSpecified)
|
||||
rom.Inverted = item.Inverted.FromYesNo();
|
||||
if (item.MIASpecified)
|
||||
rom.MIA = item.MIA.FromYesNo();
|
||||
rom.Status = item.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey).AsStringValue<ItemStatus>(useSecond: false);
|
||||
|
||||
return rom;
|
||||
}
|
||||
@@ -411,14 +405,14 @@ namespace SabreTools.DatFiles.Formats
|
||||
var disk = new Models.ClrMamePro.Disk
|
||||
{
|
||||
Name = item.GetName(),
|
||||
MD5 = item.MD5,
|
||||
SHA1 = item.SHA1,
|
||||
Merge = item.MergeTag,
|
||||
//Flags = item.Flags, // TODO: Add to internal model
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key),
|
||||
Merge = item.GetFieldValue<string?>(Models.Metadata.Disk.MergeKey),
|
||||
Flags = item.GetFieldValue<string?>(Models.Metadata.Disk.FlagsKey),
|
||||
};
|
||||
|
||||
if (item.ItemStatusSpecified)
|
||||
disk.Status = item.ItemStatus.AsStringValue<ItemStatus>(useSecond: false);
|
||||
if (item.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) != ItemStatus.NULL)
|
||||
disk.Status = item.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey).AsStringValue<ItemStatus>(useSecond: false);
|
||||
|
||||
return disk;
|
||||
}
|
||||
@@ -431,10 +425,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
var media = new Models.ClrMamePro.Media
|
||||
{
|
||||
Name = item.GetName(),
|
||||
MD5 = item.MD5,
|
||||
SHA1 = item.SHA1,
|
||||
SHA256 = item.SHA256,
|
||||
SpamSum = item.SpamSum,
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Media.MD5Key),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key),
|
||||
SHA256 = item.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key),
|
||||
SpamSum = item.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey),
|
||||
};
|
||||
return media;
|
||||
}
|
||||
@@ -470,10 +464,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var chip = new Models.ClrMamePro.Chip
|
||||
{
|
||||
Type = item.ChipType.AsStringValue<ChipType>(),
|
||||
Type = item.GetFieldValue<ChipType>(Models.Metadata.Chip.ChipTypeKey).AsStringValue<ChipType>(),
|
||||
Name = item.GetName(),
|
||||
//Flags = item.Flags, // TODO: Add to internal model
|
||||
Clock = item.Clock?.ToString(),
|
||||
Flags = item.GetFieldValue<string?>(Models.Metadata.Chip.FlagsKey),
|
||||
Clock = item.GetFieldValue<long?>(Models.Metadata.Chip.ClockKey)?.ToString(),
|
||||
};
|
||||
return chip;
|
||||
}
|
||||
@@ -485,15 +479,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var video = new Models.ClrMamePro.Video
|
||||
{
|
||||
Screen = item.DisplayType.AsStringValue<DisplayType>(),
|
||||
X = item.Width?.ToString(),
|
||||
Y = item.Height?.ToString(),
|
||||
//AspectX = item.AspectX, // TODO: Add to internal model or find mapping
|
||||
//AspectY = item.AspectY, // TODO: Add to internal model or find mapping
|
||||
Freq = item.Refresh?.ToString(),
|
||||
Screen = item.GetFieldValue<DisplayType>(Models.Metadata.Display.DisplayTypeKey).AsStringValue<DisplayType>(),
|
||||
X = item.GetFieldValue<long?>(Models.Metadata.Display.WidthKey)?.ToString(),
|
||||
Y = item.GetFieldValue<long?>(Models.Metadata.Display.HeightKey)?.ToString(),
|
||||
AspectX = item.GetFieldValue<string?>("ASPECTX"),
|
||||
AspectY = item.GetFieldValue<string?>("ASPECTY"),
|
||||
Freq = item.GetFieldValue<double?>(Models.Metadata.Display.RefreshKey)?.ToString(),
|
||||
};
|
||||
|
||||
switch (item.Rotate)
|
||||
switch (item.GetFieldValue<long?>(Models.Metadata.Display.RotateKey))
|
||||
{
|
||||
case 0:
|
||||
case 180:
|
||||
@@ -515,7 +509,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var sound = new Models.ClrMamePro.Sound
|
||||
{
|
||||
Channels = item.Channels?.ToString(),
|
||||
Channels = item.GetFieldValue<long?>(Models.Metadata.Sound.ChannelsKey)?.ToString(),
|
||||
};
|
||||
return sound;
|
||||
}
|
||||
@@ -527,15 +521,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var input = new Models.ClrMamePro.Input
|
||||
{
|
||||
Players = item.Players?.ToString(),
|
||||
//Control = item.Control, // TODO: Add to internal model or find mapping
|
||||
Coins = item.Coins?.ToString(),
|
||||
Tilt = item.Tilt.FromYesNo(),
|
||||
Service = item.Service.FromYesNo(),
|
||||
Players = item.GetFieldValue<long?>(Models.Metadata.Input.PlayersKey)?.ToString(),
|
||||
//Control = item.GetFieldValue<string?>(Models.Metadata.Input.ControlKey),
|
||||
Coins = item.GetFieldValue<long?>(Models.Metadata.Input.CoinsKey)?.ToString(),
|
||||
Tilt = item.GetFieldValue<bool?>(Models.Metadata.Input.TiltKey).FromYesNo(),
|
||||
Service = item.GetFieldValue<bool?>(Models.Metadata.Input.ServiceKey).FromYesNo(),
|
||||
};
|
||||
|
||||
if (item.ControlsSpecified)
|
||||
input.Buttons = item.Controls![0].Buttons?.ToString();
|
||||
input.Buttons = item.GetFieldValue<Control[]?>(Models.Metadata.Input.ControlKey)![0].GetFieldValue<long?>(Models.Metadata.Control.ButtonsKey)?.ToString();
|
||||
|
||||
return input;
|
||||
}
|
||||
@@ -553,11 +547,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
if (item.ValuesSpecified)
|
||||
{
|
||||
var entries = new List<string>();
|
||||
foreach (var setting in item.Values!)
|
||||
foreach (var setting in item.GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey)!)
|
||||
{
|
||||
entries.Add(setting.Value!);
|
||||
if (setting.Default == true)
|
||||
dipswitch.Default = setting.Value;
|
||||
entries.Add(setting.GetFieldValue<string?>(Models.Metadata.DipValue.ValueKey)!);
|
||||
if (setting.GetFieldValue<bool?>(Models.Metadata.DipValue.DefaultKey) == true)
|
||||
dipswitch.Default = setting.GetFieldValue<string?>(Models.Metadata.DipValue.ValueKey);
|
||||
}
|
||||
|
||||
dipswitch.Entry = [.. entries];
|
||||
@@ -573,12 +567,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var driver = new Models.ClrMamePro.Driver
|
||||
{
|
||||
Status = item.Status.AsStringValue<SupportStatus>(),
|
||||
//Color = item.Color, // TODO: Add to internal model or find mapping
|
||||
//Sound = item.Sound, // TODO: Add to internal model or find mapping
|
||||
//PaletteSize = item.PaletteSize, // TODO: Add to internal model or find mapping
|
||||
//Blit = item.Blit, // TODO: Add to internal model or find mapping
|
||||
|
||||
Status = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey).AsStringValue<SupportStatus>(),
|
||||
Color = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.ColorKey).AsStringValue<SupportStatus>(),
|
||||
Sound = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.SoundKey).AsStringValue<SupportStatus>(),
|
||||
PaletteSize = item.GetFieldValue<long?>(Models.Metadata.Driver.PaletteSizeKey)?.ToString(),
|
||||
Blit = item.GetFieldValue<string?>(Models.Metadata.Driver.BlitKey),
|
||||
};
|
||||
return driver;
|
||||
}
|
||||
|
||||
@@ -133,17 +133,16 @@ namespace SabreTools.DatFiles.Formats
|
||||
return;
|
||||
|
||||
containsItems = true;
|
||||
foreach (var rom in files)
|
||||
foreach (var file in files)
|
||||
{
|
||||
var item = new Rom
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(rom.Size),
|
||||
CRC = rom.CRC,
|
||||
Date = rom.Date,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(rom.Name);
|
||||
item.SetName(file.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, file.CRC);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.DateKey, file.Date);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(file.Size));
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
|
||||
@@ -33,11 +33,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (!rom.SizeSpecified)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
// if (string.IsNullOrEmpty(rom.Date))
|
||||
// missingFields.Add(Models.Metadata.Rom.DateKey);
|
||||
if (string.IsNullOrEmpty(rom.CRC))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)))
|
||||
missingFields.Add(Models.Metadata.Rom.CRCKey);
|
||||
break;
|
||||
}
|
||||
@@ -179,9 +179,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
var rom = new Models.DosCenter.File
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Size = item.Size?.ToString(),
|
||||
CRC = item.CRC,
|
||||
Date = item.Date,
|
||||
Size = item.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
CRC = item.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
Date = item.GetFieldValue<string?>(Models.Metadata.Rom.DateKey),
|
||||
};
|
||||
return rom;
|
||||
}
|
||||
|
||||
@@ -100,16 +100,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
|
||||
var rom = new Rom()
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(row.Size),
|
||||
CRC = row.CRC32,
|
||||
MD5 = row.MD5,
|
||||
SHA1 = row.SHA1,
|
||||
SHA256 = row.SHA256,
|
||||
ItemStatus = ItemStatus.None,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(name);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, row.CRC32);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, row.MD5);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, row.SHA1);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, row.SHA256);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size));
|
||||
rom.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
|
||||
|
||||
// Now process and add the rom
|
||||
rom.CopyMachineInformation(machine);
|
||||
|
||||
@@ -33,13 +33,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.SHA256))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.SHA256Key);
|
||||
if (string.IsNullOrEmpty(rom.SHA1))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
if (string.IsNullOrEmpty(rom.MD5))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.MD5Key);
|
||||
if (string.IsNullOrEmpty(rom.CRC))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)))
|
||||
missingFields.Add(Models.Metadata.Rom.CRCKey);
|
||||
break;
|
||||
}
|
||||
@@ -138,12 +138,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var row = new Models.EverdriveSMDB.Row
|
||||
{
|
||||
SHA256 = rom.SHA256,
|
||||
SHA256 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key),
|
||||
Name = $"{rom.Machine.Name ?? string.Empty}/{rom.GetName()}",
|
||||
SHA1 = rom.SHA1,
|
||||
MD5 = rom.MD5,
|
||||
CRC32 = rom.CRC,
|
||||
Size = rom.Size?.ToString(),
|
||||
SHA1 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
MD5 = rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key),
|
||||
CRC32 = rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
Size = rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
};
|
||||
return row;
|
||||
}
|
||||
|
||||
@@ -146,12 +146,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Rom:
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = null,
|
||||
CRC = sfv.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(itemName);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, sfv.Hash);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, null);
|
||||
|
||||
rom.CopyMachineInformation(machine);
|
||||
ParseAddHelper(rom, statsOnly);
|
||||
@@ -194,11 +193,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Disk:
|
||||
var disk = new Disk
|
||||
{
|
||||
MD5 = md5.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
disk.SetName(itemName);
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, md5.Hash);
|
||||
|
||||
disk.CopyMachineInformation(machine);
|
||||
ParseAddHelper(disk, statsOnly);
|
||||
@@ -207,11 +205,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Media:
|
||||
var media = new Media
|
||||
{
|
||||
MD5 = md5.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
media.SetName(itemName);
|
||||
media.SetFieldValue<string?>(Models.Metadata.Media.MD5Key, md5.Hash);
|
||||
|
||||
media.CopyMachineInformation(machine);
|
||||
ParseAddHelper(media, statsOnly);
|
||||
@@ -220,12 +217,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Rom:
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = null,
|
||||
MD5 = md5.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(itemName);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, md5.Hash);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, null);
|
||||
|
||||
rom.CopyMachineInformation(machine);
|
||||
ParseAddHelper(rom, statsOnly);
|
||||
@@ -268,11 +264,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Disk:
|
||||
var disk = new Disk
|
||||
{
|
||||
SHA1 = sha1.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
disk.SetName(itemName);
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, sha1.Hash);
|
||||
|
||||
disk.CopyMachineInformation(machine);
|
||||
ParseAddHelper(disk, statsOnly);
|
||||
@@ -281,11 +276,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Media:
|
||||
var media = new Media
|
||||
{
|
||||
SHA1 = sha1.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
media.SetName(itemName);
|
||||
media.SetFieldValue<string?>(Models.Metadata.Media.SHA1Key, sha1.Hash);
|
||||
|
||||
media.CopyMachineInformation(machine);
|
||||
ParseAddHelper(media, statsOnly);
|
||||
@@ -294,12 +288,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Rom:
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = null,
|
||||
SHA1 = sha1.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(itemName);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, sha1.Hash);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, null);
|
||||
|
||||
rom.CopyMachineInformation(machine);
|
||||
ParseAddHelper(rom, statsOnly);
|
||||
@@ -342,11 +335,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Media:
|
||||
var media = new Media
|
||||
{
|
||||
SHA256 = sha256.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
media.SetName(itemName);
|
||||
media.SetFieldValue<string?>(Models.Metadata.Media.SHA256Key, sha256.Hash);
|
||||
|
||||
media.CopyMachineInformation(machine);
|
||||
ParseAddHelper(media, statsOnly);
|
||||
@@ -356,12 +348,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Rom:
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = null,
|
||||
SHA256 = sha256.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(itemName);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, sha256.Hash);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, null);
|
||||
|
||||
rom.CopyMachineInformation(machine);
|
||||
ParseAddHelper(rom, statsOnly);
|
||||
@@ -406,12 +397,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Rom:
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = null,
|
||||
SHA384 = sha384.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(itemName);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, sha384.Hash);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, null);
|
||||
|
||||
rom.CopyMachineInformation(machine);
|
||||
ParseAddHelper(rom, statsOnly);
|
||||
@@ -456,12 +446,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Rom:
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = null,
|
||||
SHA512 = sha512.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(itemName);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, sha512.Hash);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, null);
|
||||
|
||||
rom.CopyMachineInformation(machine);
|
||||
ParseAddHelper(rom, statsOnly);
|
||||
@@ -504,11 +493,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Media:
|
||||
var media = new Media
|
||||
{
|
||||
SpamSum = spamsum.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
media.SetName(itemName);
|
||||
media.SetFieldValue<string?>(Models.Metadata.Media.SpamSumKey, spamsum.Hash);
|
||||
|
||||
media.CopyMachineInformation(machine);
|
||||
ParseAddHelper(media, statsOnly);
|
||||
@@ -518,12 +506,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Rom:
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = null,
|
||||
SpamSum = spamsum.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(itemName);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, null);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, spamsum.Hash);
|
||||
|
||||
rom.CopyMachineInformation(machine);
|
||||
ParseAddHelper(rom, statsOnly);
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem.ItemType)
|
||||
{
|
||||
case ItemType.Rom:
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.CRC))
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)))
|
||||
missingFields.Add(Models.Metadata.Rom.CRCKey);
|
||||
break;
|
||||
default:
|
||||
@@ -52,15 +52,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem.ItemType)
|
||||
{
|
||||
case ItemType.Disk:
|
||||
if (string.IsNullOrEmpty((datItem as Disk)?.MD5))
|
||||
if (string.IsNullOrEmpty((datItem as Disk)?.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)))
|
||||
missingFields.Add(Models.Metadata.Disk.MD5Key);
|
||||
break;
|
||||
case ItemType.Media:
|
||||
if (string.IsNullOrEmpty((datItem as Media)?.MD5))
|
||||
if (string.IsNullOrEmpty((datItem as Media)?.GetFieldValue<string?>(Models.Metadata.Media.MD5Key)))
|
||||
missingFields.Add(Models.Metadata.Media.MD5Key);
|
||||
break;
|
||||
case ItemType.Rom:
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.MD5))
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.MD5Key);
|
||||
break;
|
||||
default:
|
||||
@@ -72,15 +72,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem.ItemType)
|
||||
{
|
||||
case ItemType.Disk:
|
||||
if (string.IsNullOrEmpty((datItem as Disk)?.SHA1))
|
||||
if (string.IsNullOrEmpty((datItem as Disk)?.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
missingFields.Add(Models.Metadata.Disk.SHA1Key);
|
||||
break;
|
||||
case ItemType.Media:
|
||||
if (string.IsNullOrEmpty((datItem as Media)?.SHA1))
|
||||
if (string.IsNullOrEmpty((datItem as Media)?.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key)))
|
||||
missingFields.Add(Models.Metadata.Media.SHA1Key);
|
||||
break;
|
||||
case ItemType.Rom:
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.SHA1))
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
break;
|
||||
default:
|
||||
@@ -92,11 +92,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem.ItemType)
|
||||
{
|
||||
case ItemType.Media:
|
||||
if (string.IsNullOrEmpty((datItem as Media)?.SHA256))
|
||||
if (string.IsNullOrEmpty((datItem as Media)?.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key)))
|
||||
missingFields.Add(Models.Metadata.Media.SHA256Key);
|
||||
break;
|
||||
case ItemType.Rom:
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.SHA256))
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.SHA256Key);
|
||||
break;
|
||||
default:
|
||||
@@ -108,7 +108,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem.ItemType)
|
||||
{
|
||||
case ItemType.Rom:
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.SHA384))
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.SHA384Key);
|
||||
break;
|
||||
default:
|
||||
@@ -120,7 +120,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem.ItemType)
|
||||
{
|
||||
case ItemType.Rom:
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.SHA512))
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.SHA512Key);
|
||||
break;
|
||||
default:
|
||||
@@ -132,11 +132,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem.ItemType)
|
||||
{
|
||||
case ItemType.Media:
|
||||
if (string.IsNullOrEmpty((datItem as Media)?.SpamSum))
|
||||
if (string.IsNullOrEmpty((datItem as Media)?.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey)))
|
||||
missingFields.Add(Models.Metadata.Media.SpamSumKey);
|
||||
break;
|
||||
case ItemType.Rom:
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.SpamSum))
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)))
|
||||
missingFields.Add(Models.Metadata.Rom.SpamSumKey);
|
||||
break;
|
||||
default:
|
||||
@@ -252,7 +252,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
sfvs.Add(new Models.Hashfile.SFV
|
||||
{
|
||||
File = name + rom.GetName(),
|
||||
Hash = rom.CRC,
|
||||
Hash = rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
});
|
||||
break;
|
||||
}
|
||||
@@ -302,7 +302,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Disk disk:
|
||||
md5s.Add(new Models.Hashfile.MD5
|
||||
{
|
||||
Hash = disk.MD5,
|
||||
Hash = disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key),
|
||||
File = name + disk.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -310,7 +310,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Media media:
|
||||
md5s.Add(new Models.Hashfile.MD5
|
||||
{
|
||||
Hash = media.MD5,
|
||||
Hash = media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key),
|
||||
File = name + media.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -318,7 +318,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Rom rom:
|
||||
md5s.Add(new Models.Hashfile.MD5
|
||||
{
|
||||
Hash = rom.MD5,
|
||||
Hash = rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key),
|
||||
File = name + rom.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -369,7 +369,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Disk disk:
|
||||
sha1s.Add(new Models.Hashfile.SHA1
|
||||
{
|
||||
Hash = disk.SHA1,
|
||||
Hash = disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key),
|
||||
File = name + disk.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -377,7 +377,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Media media:
|
||||
sha1s.Add(new Models.Hashfile.SHA1
|
||||
{
|
||||
Hash = media.SHA1,
|
||||
Hash = media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key),
|
||||
File = name + media.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -385,7 +385,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Rom rom:
|
||||
sha1s.Add(new Models.Hashfile.SHA1
|
||||
{
|
||||
Hash = rom.SHA1,
|
||||
Hash = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
File = name + rom.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -436,7 +436,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Media media:
|
||||
sha256s.Add(new Models.Hashfile.SHA256
|
||||
{
|
||||
Hash = media.SHA256,
|
||||
Hash = media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key),
|
||||
File = name + media.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -444,7 +444,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Rom rom:
|
||||
sha256s.Add(new Models.Hashfile.SHA256
|
||||
{
|
||||
Hash = rom.SHA256,
|
||||
Hash = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key),
|
||||
File = name + rom.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -495,7 +495,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Rom rom:
|
||||
sha384s.Add(new Models.Hashfile.SHA384
|
||||
{
|
||||
Hash = rom.SHA384,
|
||||
Hash = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key),
|
||||
File = name + rom.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -546,7 +546,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Rom rom:
|
||||
sha512s.Add(new Models.Hashfile.SHA512
|
||||
{
|
||||
Hash = rom.SHA512,
|
||||
Hash = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key),
|
||||
File = name + rom.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -597,7 +597,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Media media:
|
||||
spamsums.Add(new Models.Hashfile.SpamSum
|
||||
{
|
||||
Hash = media.SpamSum,
|
||||
Hash = media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey),
|
||||
File = name + media.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -605,7 +605,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Rom rom:
|
||||
spamsums.Add(new Models.Hashfile.SpamSum
|
||||
{
|
||||
Hash = rom.SpamSum,
|
||||
Hash = rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey),
|
||||
File = name + rom.GetName(),
|
||||
});
|
||||
break;
|
||||
|
||||
@@ -116,16 +116,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var disk = new Disk
|
||||
{
|
||||
ItemStatus = ItemStatus.None,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
disk.SetName(row.Name);
|
||||
disk.SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, ItemStatus.None);
|
||||
|
||||
if (!string.IsNullOrEmpty(row.MD5))
|
||||
disk.MD5 = row.MD5;
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, row.MD5);
|
||||
else
|
||||
disk.SHA1 = row.SHA1;
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, row.SHA1);
|
||||
|
||||
// Now process and add the item
|
||||
disk.CopyMachineInformation(machine);
|
||||
@@ -139,14 +138,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(row.Size),
|
||||
CRC = row.CRC,
|
||||
SHA1 = row.SHA1,
|
||||
ItemStatus = ItemStatus.None,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(row.Name);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, row.CRC);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, row.SHA1);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size));
|
||||
rom.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
|
||||
|
||||
// Now process and add the item
|
||||
rom.CopyMachineInformation(machine);
|
||||
@@ -162,16 +160,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var disk = new Disk
|
||||
{
|
||||
ItemStatus = ItemStatus.BadDump,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
disk.SetName(row.Name);
|
||||
disk.SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, value: ItemStatus.BadDump);
|
||||
|
||||
if (!string.IsNullOrEmpty(row.MD5))
|
||||
disk.MD5 = row.MD5;
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, row.MD5);
|
||||
else
|
||||
disk.SHA1 = row.SHA1;
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, row.SHA1);
|
||||
|
||||
// Now process and add the item
|
||||
disk.CopyMachineInformation(machine);
|
||||
@@ -184,13 +181,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var disk = new Disk
|
||||
{
|
||||
MD5 = null,
|
||||
SHA1 = null,
|
||||
ItemStatus = ItemStatus.Nodump,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
disk.SetName(row.Name);
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, null);
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, null);
|
||||
disk.SetFieldValue<ItemStatus?>(Models.Metadata.Disk.StatusKey, ItemStatus.Nodump);
|
||||
|
||||
// Now process and add the item
|
||||
disk.CopyMachineInformation(machine);
|
||||
@@ -204,14 +200,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(row.Size),
|
||||
CRC = row.CRC,
|
||||
SHA1 = row.SHA1,
|
||||
ItemStatus = ItemStatus.BadDump,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(row.Name);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, row.CRC);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, row.SHA1);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size));
|
||||
rom.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.BadDump);
|
||||
|
||||
// Now process and add the item
|
||||
rom.CopyMachineInformation(machine);
|
||||
@@ -224,14 +219,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(row.Size),
|
||||
CRC = null,
|
||||
SHA1 = null,
|
||||
ItemStatus = ItemStatus.Nodump,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(row.Name);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, null);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, null);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size));
|
||||
rom.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.Nodump);
|
||||
|
||||
// Now process and add the item
|
||||
rom.CopyMachineInformation(machine);
|
||||
|
||||
@@ -34,19 +34,19 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem)
|
||||
{
|
||||
case Disk disk:
|
||||
if (string.IsNullOrEmpty(disk.MD5)
|
||||
&& string.IsNullOrEmpty(disk.SHA1))
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key))
|
||||
&& string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Disk.SHA1Key);
|
||||
}
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (rom.Size == null || rom.Size < 0)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) < 0)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
if (string.IsNullOrEmpty(rom.CRC))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)))
|
||||
missingFields.Add(Models.Metadata.Rom.CRCKey);
|
||||
if (string.IsNullOrEmpty(rom.SHA1))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
break;
|
||||
}
|
||||
@@ -166,7 +166,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
/// <summary>
|
||||
private static Models.Listrom.Row? CreateRow(Disk disk)
|
||||
{
|
||||
if (disk.ItemStatus == ItemStatus.Nodump)
|
||||
if (disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump)
|
||||
{
|
||||
return new Models.Listrom.Row
|
||||
{
|
||||
@@ -174,7 +174,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
NoGoodDumpKnown = true,
|
||||
};
|
||||
}
|
||||
else if (disk.ItemStatus == ItemStatus.BadDump)
|
||||
else if (disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.BadDump)
|
||||
{
|
||||
var row = new Models.Listrom.Row
|
||||
{
|
||||
@@ -182,10 +182,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
Bad = true,
|
||||
};
|
||||
|
||||
if (!string.IsNullOrEmpty(disk.MD5))
|
||||
row.MD5 = disk.MD5;
|
||||
if (!string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)))
|
||||
row.MD5 = disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key);
|
||||
else
|
||||
row.SHA1 = disk.SHA1;
|
||||
row.SHA1 = disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key);
|
||||
|
||||
return row;
|
||||
}
|
||||
@@ -196,10 +196,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
Name = disk.GetName(),
|
||||
};
|
||||
|
||||
if (!string.IsNullOrEmpty(disk.MD5))
|
||||
row.MD5 = disk.MD5;
|
||||
if (!string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)))
|
||||
row.MD5 = disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key);
|
||||
else
|
||||
row.SHA1 = disk.SHA1;
|
||||
row.SHA1 = disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key);
|
||||
|
||||
return row;
|
||||
}
|
||||
@@ -210,24 +210,24 @@ namespace SabreTools.DatFiles.Formats
|
||||
/// <summary>
|
||||
private static Models.Listrom.Row? CreateRow(Rom rom)
|
||||
{
|
||||
if (rom.ItemStatus == ItemStatus.Nodump)
|
||||
if (rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump)
|
||||
{
|
||||
return new Models.Listrom.Row
|
||||
{
|
||||
Name = rom.GetName(),
|
||||
Size = rom.Size?.ToString(),
|
||||
Size = rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
NoGoodDumpKnown = true,
|
||||
};
|
||||
}
|
||||
else if (rom.ItemStatus == ItemStatus.BadDump)
|
||||
else if (rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.BadDump)
|
||||
{
|
||||
return new Models.Listrom.Row
|
||||
{
|
||||
Name = rom.GetName(),
|
||||
Size = rom.Size?.ToString(),
|
||||
Size = rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
Bad = true,
|
||||
CRC = rom.CRC,
|
||||
SHA1 = rom.SHA1,
|
||||
CRC = rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
SHA1 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
};
|
||||
}
|
||||
else
|
||||
@@ -235,9 +235,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
return new Models.Listrom.Row
|
||||
{
|
||||
Name = rom.GetName(),
|
||||
Size = rom.Size?.ToString(),
|
||||
CRC = rom.CRC,
|
||||
SHA1 = rom.SHA1,
|
||||
Size = rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
CRC = rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
SHA1 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,12 +172,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new BiosSet
|
||||
{
|
||||
Description = biosset.Description,
|
||||
Default = biosset.Default?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(biosset.Name);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.BiosSet.DefaultKey, biosset.Default?.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey, biosset.Description);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -204,21 +203,20 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Rom
|
||||
{
|
||||
Bios = rom.Bios,
|
||||
Size = NumberHelper.ConvertToInt64(rom.Size),
|
||||
CRC = rom.CRC,
|
||||
SHA1 = rom.SHA1,
|
||||
MergeTag = rom.Merge,
|
||||
Region = rom.Region,
|
||||
Offset = rom.Offset,
|
||||
ItemStatus = rom.Status.AsEnumValue<ItemStatus>(),
|
||||
Optional = rom.Optional.AsYesNo(),
|
||||
//Dispose = rom.Dispose.AsYesNo(), // TODO: Add to internal model
|
||||
//SoundOnly = rom.SoundOnly.AsYesNo(), // TODO: Add to internal model
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(rom.Name);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(rom.Size));
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.BiosKey, rom.Bios);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, rom.CRC);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Rom.DisposeKey, rom.Dispose.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.MergeKey, rom.Merge);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.OffsetKey, rom.Offset);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Rom.OptionalKey, rom.Optional.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.RegionKey, rom.Region);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.SHA1);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Rom.SoundOnlyKey, rom.SoundOnly.AsYesNo());
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, rom.Status.AsEnumValue<ItemStatus>());
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -245,18 +243,17 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Disk
|
||||
{
|
||||
MD5 = disk.MD5,
|
||||
SHA1 = disk.SHA1,
|
||||
MergeTag = disk.Merge,
|
||||
Region = disk.Region,
|
||||
Index = disk.Index,
|
||||
Writable = disk.Writable.AsYesNo(),
|
||||
ItemStatus = disk.Status.AsEnumValue<ItemStatus>(),
|
||||
Optional = disk.Optional.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(disk.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.IndexKey, disk.Index);
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, disk.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, disk.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.MergeKey, disk.Merge);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Disk.OptionalKey, disk.Optional.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.RegionKey, disk.Region);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, disk.SHA1);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Disk.WritableKey, disk.Writable.AsYesNo());
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -341,14 +338,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Chip
|
||||
{
|
||||
Tag = chip.Tag,
|
||||
ChipType = chip.Type.AsEnumValue<ChipType>(),
|
||||
//SoundOnly = chip.SoundOnly, // TODO: Add to internal model
|
||||
Clock = NumberHelper.ConvertToInt64(chip.Clock),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(chip.Name);
|
||||
item.SetFieldValue<ChipType?>(Models.Metadata.Chip.ChipTypeKey, chip.Type.AsEnumValue<ChipType>());
|
||||
item.SetFieldValue<long?>(Models.Metadata.Chip.ClockKey, NumberHelper.ConvertToInt64(chip.Clock));
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Chip.SoundOnlyKey, chip.Type.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Chip.TagKey, chip.Tag);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -375,23 +371,22 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Display
|
||||
{
|
||||
Tag = display.Tag,
|
||||
DisplayType = display.Type.AsEnumValue<DisplayType>(),
|
||||
Rotate = NumberHelper.ConvertToInt64(display.Rotate),
|
||||
FlipX = display.FlipX.AsYesNo(),
|
||||
Width = NumberHelper.ConvertToInt64(display.Width),
|
||||
Height = NumberHelper.ConvertToInt64(display.Height),
|
||||
Refresh = NumberHelper.ConvertToDouble(display.Refresh),
|
||||
PixClock = NumberHelper.ConvertToInt64(display.PixClock),
|
||||
HTotal = NumberHelper.ConvertToInt64(display.HTotal),
|
||||
HBEnd = NumberHelper.ConvertToInt64(display.HBEnd),
|
||||
HBStart = NumberHelper.ConvertToInt64(display.HBStart),
|
||||
VTotal = NumberHelper.ConvertToInt64(display.VTotal),
|
||||
VBEnd = NumberHelper.ConvertToInt64(display.VBEnd),
|
||||
VBStart = NumberHelper.ConvertToInt64(display.VBStart),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<DisplayType>(Models.Metadata.Display.DisplayTypeKey, display.Type.AsEnumValue<DisplayType>());
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Display.FlipXKey, display.FlipX.AsYesNo());
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.HBEndKey, NumberHelper.ConvertToInt64(display.HBEnd));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.HBStartKey, NumberHelper.ConvertToInt64(display.HBStart));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.HeightKey, NumberHelper.ConvertToInt64(display.Height));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.HTotalKey, NumberHelper.ConvertToInt64(display.HTotal));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.PixClockKey, NumberHelper.ConvertToInt64(display.PixClock));
|
||||
item.SetFieldValue<double?>(Models.Metadata.Display.RefreshKey, NumberHelper.ConvertToDouble(display.Refresh));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.RotateKey, NumberHelper.ConvertToInt64(display.Rotate));
|
||||
item.SetFieldValue<string?>(Models.Metadata.Display.TagKey, display.Tag);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.VBEndKey, NumberHelper.ConvertToInt64(display.VBEnd));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.VBStartKey, NumberHelper.ConvertToInt64(display.VBStart));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.VTotalKey, NumberHelper.ConvertToInt64(display.VTotal));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.WidthKey, NumberHelper.ConvertToInt64(display.Width));
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -418,23 +413,22 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Display
|
||||
{
|
||||
DisplayType = video.Screen?.AsEnumValue<DisplayType>() ?? DisplayType.NULL,
|
||||
Width = NumberHelper.ConvertToInt64(video.Width),
|
||||
Height = NumberHelper.ConvertToInt64(video.Height),
|
||||
//AspectX = video.AspectX, // TODO: Add to internal model or find mapping
|
||||
//AspectY = video.AspectY, // TODO: Add to internal model or find mapping
|
||||
Refresh = NumberHelper.ConvertToDouble(video.Refresh),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<long?>("ASPECTX", NumberHelper.ConvertToInt64(video.AspectX));
|
||||
item.SetFieldValue<long?>("ASPECTY", NumberHelper.ConvertToInt64(video.AspectY));
|
||||
item.SetFieldValue<DisplayType>(Models.Metadata.Display.DisplayTypeKey, video.Screen?.AsEnumValue<DisplayType>() ?? DisplayType.NULL);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.HeightKey, NumberHelper.ConvertToInt64(video.Height));
|
||||
item.SetFieldValue<double?>(Models.Metadata.Display.RefreshKey, NumberHelper.ConvertToDouble(video.Refresh));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.WidthKey, NumberHelper.ConvertToInt64(video.Width));
|
||||
|
||||
switch (video.Orientation)
|
||||
{
|
||||
case "horizontal":
|
||||
item.Rotate = 0;
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.RotateKey, 0);
|
||||
break;
|
||||
case "vertical":
|
||||
item.Rotate = 90;
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.RotateKey, 90);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -461,10 +455,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
containsItems = true;
|
||||
var item = new Sound
|
||||
{
|
||||
Channels = NumberHelper.ConvertToInt64(sound.Channels),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<long?>(Models.Metadata.Sound.ChannelsKey, NumberHelper.ConvertToInt64(sound.Channels));
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -488,39 +481,37 @@ namespace SabreTools.DatFiles.Formats
|
||||
containsItems = true;
|
||||
var item = new Input
|
||||
{
|
||||
Service = input.Service.AsYesNo(),
|
||||
Tilt = input.Tilt.AsYesNo(),
|
||||
Players = NumberHelper.ConvertToInt64(input.Players),
|
||||
//ControlAttr = input.ControlAttr, // TODO: Add to internal model
|
||||
//Buttons = input.Buttons, // TODO: Add to internal model
|
||||
Coins = NumberHelper.ConvertToInt64(input.Coins),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<long?>(Models.Metadata.Input.ButtonsKey, NumberHelper.ConvertToInt64(input.Buttons));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Input.CoinsKey, NumberHelper.ConvertToInt64(input.Coins));
|
||||
//item.SetFieldValue<string?>(Models.Metadata.Input.ControlKey, input.ControlAttr);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Input.PlayersKey, NumberHelper.ConvertToInt64(input.Players));
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Input.ServiceKey, input.Service?.AsYesNo());
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Input.TiltKey, input.Tilt?.AsYesNo());
|
||||
|
||||
var controls = new List<Control>();
|
||||
foreach (var control in input.Control ?? [])
|
||||
{
|
||||
var controlItem = new Control
|
||||
{
|
||||
ControlType = control.Type.AsEnumValue<ControlType>(),
|
||||
Player = NumberHelper.ConvertToInt64(control.Player),
|
||||
Buttons = NumberHelper.ConvertToInt64(control.Buttons),
|
||||
RequiredButtons = NumberHelper.ConvertToInt64(control.ReqButtons),
|
||||
Minimum = NumberHelper.ConvertToInt64(control.Minimum),
|
||||
Maximum = NumberHelper.ConvertToInt64(control.Maximum),
|
||||
Sensitivity = NumberHelper.ConvertToInt64(control.Sensitivity),
|
||||
KeyDelta = NumberHelper.ConvertToInt64(control.KeyDelta),
|
||||
Reverse = control.Reverse.AsYesNo(),
|
||||
Ways = control.Ways,
|
||||
Ways2 = control.Ways2,
|
||||
Ways3 = control.Ways3,
|
||||
};
|
||||
var controlItem = new Control();
|
||||
controlItem.SetFieldValue<long?>(Models.Metadata.Control.ButtonsKey, NumberHelper.ConvertToInt64(control.Buttons));
|
||||
controlItem.SetFieldValue<ControlType?>(Models.Metadata.Control.ControlTypeKey, control.Type.AsEnumValue<ControlType>());
|
||||
controlItem.SetFieldValue<long?>(Models.Metadata.Control.KeyDeltaKey, NumberHelper.ConvertToInt64(control.KeyDelta));
|
||||
controlItem.SetFieldValue<long?>(Models.Metadata.Control.MaximumKey, NumberHelper.ConvertToInt64(control.Maximum));
|
||||
controlItem.SetFieldValue<long?>(Models.Metadata.Control.MinimumKey, NumberHelper.ConvertToInt64(control.Minimum));
|
||||
controlItem.SetFieldValue<long?>(Models.Metadata.Control.PlayerKey, NumberHelper.ConvertToInt64(control.Player));
|
||||
controlItem.SetFieldValue<long?>(Models.Metadata.Control.ReqButtonsKey, NumberHelper.ConvertToInt64(control.ReqButtons));
|
||||
controlItem.SetFieldValue<bool?>(Models.Metadata.Control.ReverseKey, control.Reverse.AsYesNo());
|
||||
controlItem.SetFieldValue<long?>(Models.Metadata.Control.SensitivityKey, NumberHelper.ConvertToInt64(control.Sensitivity));
|
||||
controlItem.SetFieldValue<string?>(Models.Metadata.Control.WaysKey, control.Ways);
|
||||
controlItem.SetFieldValue<string?>(Models.Metadata.Control.Ways2Key, control.Ways2);
|
||||
controlItem.SetFieldValue<string?>(Models.Metadata.Control.Ways3Key, control.Ways3);
|
||||
|
||||
controls.Add(controlItem);
|
||||
}
|
||||
|
||||
if (controls.Any())
|
||||
item.Controls = controls;
|
||||
item.SetFieldValue<Control[]?>(Models.Metadata.Input.ControlKey, [.. controls]);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -546,68 +537,61 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new DipSwitch
|
||||
{
|
||||
Tag = dipswitch.Tag,
|
||||
Mask = dipswitch.Mask,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(dipswitch.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.DipSwitch.MaskKey, dipswitch.Mask);
|
||||
item.SetFieldValue<string?>(Models.Metadata.DipSwitch.TagKey, dipswitch.Tag);
|
||||
|
||||
if (dipswitch.Condition != null)
|
||||
{
|
||||
var condition = new Condition
|
||||
{
|
||||
Tag = dipswitch.Condition.Tag,
|
||||
Mask = dipswitch.Condition.Mask,
|
||||
Relation = dipswitch.Condition.Relation.AsEnumValue<Relation>(),
|
||||
Value = dipswitch.Condition.Value,
|
||||
};
|
||||
item.Conditions = [condition];
|
||||
var condition = new Condition();
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.MaskKey, dipswitch.Condition.Mask);
|
||||
condition.SetFieldValue<Relation?>(Models.Metadata.Condition.RelationKey, dipswitch.Condition.Relation.AsEnumValue<Relation>());
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.TagKey, dipswitch.Condition.Tag);
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.ValueKey, dipswitch.Condition.Value);
|
||||
|
||||
item.SetFieldValue<Condition[]?>(Models.Metadata.DipSwitch.ConditionKey, [condition]);
|
||||
}
|
||||
|
||||
var locations = new List<DipLocation>();
|
||||
foreach (var diplocation in dipswitch.DipLocation ?? [])
|
||||
{
|
||||
var locationItem = new DipLocation
|
||||
{
|
||||
Number = NumberHelper.ConvertToInt64(diplocation.Number),
|
||||
Inverted = diplocation.Inverted.AsYesNo(),
|
||||
};
|
||||
var locationItem = new DipLocation();
|
||||
locationItem.SetName(diplocation.Name);
|
||||
locationItem.SetFieldValue<bool?>(Models.Metadata.DipLocation.InvertedKey, diplocation.Inverted.AsYesNo());
|
||||
locationItem.SetFieldValue<long?>(Models.Metadata.DipLocation.NumberKey, NumberHelper.ConvertToInt64(diplocation.Number));
|
||||
|
||||
locations.Add(locationItem);
|
||||
}
|
||||
|
||||
if (locations.Any())
|
||||
item.Locations = locations;
|
||||
item.SetFieldValue<DipLocation[]?>(Models.Metadata.DipSwitch.DipLocationKey, [.. locations]);
|
||||
|
||||
var settings = new List<DipValue>();
|
||||
foreach (var dipvalue in dipswitch.DipValue ?? [])
|
||||
{
|
||||
var dipValueItem = new DipValue
|
||||
{
|
||||
Value = dipvalue.Value,
|
||||
Default = dipvalue.Default.AsYesNo(),
|
||||
};
|
||||
var dipValueItem = new DipValue();
|
||||
dipValueItem.SetName(dipvalue.Name);
|
||||
dipValueItem.SetFieldValue<bool?>(Models.Metadata.DipValue.DefaultKey, dipvalue.Default.AsYesNo());
|
||||
dipValueItem.SetFieldValue<string?>(Models.Metadata.DipValue.ValueKey, dipvalue.Value);
|
||||
|
||||
if (dipvalue.Condition != null)
|
||||
{
|
||||
var condition = new Condition
|
||||
{
|
||||
Tag = dipvalue.Condition.Tag,
|
||||
Mask = dipvalue.Condition.Mask,
|
||||
Relation = dipvalue.Condition.Relation.AsEnumValue<Relation>(),
|
||||
Value = dipvalue.Condition.Value,
|
||||
};
|
||||
dipValueItem.Conditions = [condition];
|
||||
var condition = new Condition();
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.MaskKey, dipvalue.Condition.Mask);
|
||||
condition.SetFieldValue<Relation?>(Models.Metadata.Condition.RelationKey, dipvalue.Condition.Relation.AsEnumValue<Relation>());
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.TagKey, dipvalue.Condition.Tag);
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.ValueKey, dipvalue.Condition.Value);
|
||||
|
||||
dipValueItem.SetFieldValue<Condition[]?>(Models.Metadata.DipValue.ConditionKey, [condition]);
|
||||
}
|
||||
|
||||
settings.Add(dipValueItem);
|
||||
}
|
||||
|
||||
if (settings.Any())
|
||||
item.Values = settings;
|
||||
item.SetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey, [.. settings]);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -634,67 +618,61 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Configuration
|
||||
{
|
||||
Tag = configuration.Tag,
|
||||
Mask = configuration.Mask,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(configuration.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Configuration.MaskKey, configuration.Mask);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Configuration.TagKey, configuration.Tag);
|
||||
|
||||
if (configuration.Condition != null)
|
||||
{
|
||||
var condition = new DatItems.Formats.Condition
|
||||
{
|
||||
Tag = configuration.Condition.Tag,
|
||||
Mask = configuration.Condition.Mask,
|
||||
Relation = configuration.Condition.Relation.AsEnumValue<Relation>(),
|
||||
Value = configuration.Condition.Value,
|
||||
};
|
||||
item.Conditions = [condition];
|
||||
var condition = new DatItems.Formats.Condition();
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.MaskKey, configuration.Condition.Mask);
|
||||
condition.SetFieldValue<Relation?>(Models.Metadata.Condition.RelationKey, configuration.Condition.Relation.AsEnumValue<Relation>());
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.TagKey, configuration.Condition.Tag);
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.ValueKey, configuration.Condition.Value);
|
||||
|
||||
item.SetFieldValue<Condition[]?>(Models.Metadata.Configuration.ConditionKey, [condition]);
|
||||
}
|
||||
|
||||
var locations = new List<ConfLocation>();
|
||||
foreach (var confLocation in configuration.ConfLocation ?? [])
|
||||
{
|
||||
var locationItem = new ConfLocation
|
||||
{
|
||||
Number = NumberHelper.ConvertToInt64(confLocation.Number),
|
||||
Inverted = confLocation.Inverted.AsYesNo(),
|
||||
};
|
||||
var locationItem = new ConfLocation();
|
||||
locationItem.SetName(confLocation.Name);
|
||||
locationItem.SetFieldValue<bool?>(Models.Metadata.ConfLocation.InvertedKey, confLocation.Inverted.AsYesNo());
|
||||
locationItem.SetFieldValue<long?>(Models.Metadata.ConfLocation.NumberKey, NumberHelper.ConvertToInt64(confLocation.Number));
|
||||
|
||||
locations.Add(locationItem);
|
||||
}
|
||||
|
||||
if (locations.Any())
|
||||
item.Locations = locations;
|
||||
item.SetFieldValue<ConfLocation[]?>(Models.Metadata.Configuration.ConfLocationKey, [.. locations]);
|
||||
|
||||
var settings = new List<ConfSetting>();
|
||||
foreach (var dipvalue in configuration.ConfSetting ?? [])
|
||||
{
|
||||
var settingItem = new ConfSetting
|
||||
{
|
||||
Value = dipvalue.Value,
|
||||
Default = dipvalue.Default.AsYesNo(),
|
||||
};
|
||||
var settingItem = new ConfSetting();
|
||||
settingItem.SetName(dipvalue.Name);
|
||||
settingItem.SetFieldValue<bool?>(Models.Metadata.ConfSetting.DefaultKey, dipvalue.Default.AsYesNo());
|
||||
settingItem.SetFieldValue<string?>(Models.Metadata.ConfSetting.ValueKey, dipvalue.Value);
|
||||
|
||||
if (dipvalue.Condition != null)
|
||||
{
|
||||
var condition = new Condition
|
||||
{
|
||||
Tag = dipvalue.Condition.Tag,
|
||||
Mask = dipvalue.Condition.Mask,
|
||||
Relation = dipvalue.Condition.Relation.AsEnumValue<Relation>(),
|
||||
Value = dipvalue.Condition.Value,
|
||||
};
|
||||
settingItem.Conditions = [condition];
|
||||
var condition = new Condition();
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.MaskKey, dipvalue.Condition.Mask);
|
||||
condition.SetFieldValue<Relation?>(Models.Metadata.Condition.RelationKey, dipvalue.Condition.Relation.AsEnumValue<Relation>());
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.TagKey, dipvalue.Condition.Tag);
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.ValueKey, dipvalue.Condition.Value);
|
||||
|
||||
settingItem.SetFieldValue<Condition[]?>(Models.Metadata.ConfSetting.ConditionKey, [condition]);
|
||||
}
|
||||
|
||||
settings.Add(settingItem);
|
||||
}
|
||||
|
||||
if (settings.Any())
|
||||
item.Settings = settings;
|
||||
item.SetFieldValue<ConfSetting[]?>(Models.Metadata.Configuration.ConfSettingKey, [.. settings]);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -721,23 +699,21 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Port
|
||||
{
|
||||
Tag = port.Tag,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<string>(Models.Metadata.Port.TagKey, port.Tag);
|
||||
|
||||
var analogs = new List<Analog>();
|
||||
foreach (var analog in port.Analog ?? [])
|
||||
{
|
||||
var analogItem = new Analog
|
||||
{
|
||||
Mask = analog.Mask,
|
||||
};
|
||||
var analogItem = new Analog();
|
||||
analogItem.SetFieldValue<string?>(Models.Metadata.Analog.MaskKey, analog.Mask);
|
||||
|
||||
analogs.Add(analogItem);
|
||||
}
|
||||
|
||||
if (analogs.Any())
|
||||
item.Analogs = analogs;
|
||||
item.SetFieldValue<Analog[]?>(Models.Metadata.Port.AnalogKey, [.. analogs]);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -762,19 +738,21 @@ namespace SabreTools.DatFiles.Formats
|
||||
containsItems = true;
|
||||
foreach (var adjuster in adjusters)
|
||||
{
|
||||
var item = new Adjuster { Source = new Source { Index = indexId, Name = filename } };
|
||||
var item = new Adjuster
|
||||
{
|
||||
Source = new Source { Index = indexId, Name = filename }
|
||||
};
|
||||
item.SetName(adjuster.Name);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Adjuster.DefaultKey, adjuster.Default.AsYesNo());
|
||||
|
||||
if (adjuster.Condition != null)
|
||||
{
|
||||
var condition = new Condition
|
||||
{
|
||||
Tag = adjuster.Condition.Tag,
|
||||
Mask = adjuster.Condition.Mask,
|
||||
Relation = adjuster.Condition.Relation.AsEnumValue<Relation>(),
|
||||
Value = adjuster.Condition.Value,
|
||||
};
|
||||
var condition = new Condition();
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.MaskKey, adjuster.Condition.Mask);
|
||||
condition.SetFieldValue<Relation?>(Models.Metadata.Condition.RelationKey, adjuster.Condition.Relation.AsEnumValue<Relation>());
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.TagKey, adjuster.Condition.Tag);
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.ValueKey, adjuster.Condition.Value);
|
||||
|
||||
item.SetFieldValue<Condition[]?>(Models.Metadata.Adjuster.ConditionKey, [condition]);
|
||||
}
|
||||
|
||||
@@ -801,20 +779,19 @@ namespace SabreTools.DatFiles.Formats
|
||||
containsItems = true;
|
||||
var item = new Driver
|
||||
{
|
||||
Status = driver.Status.AsEnumValue<SupportStatus>(),
|
||||
//Color = driver.Color.AsEnumValue<SupportStatus>(), // TODO: Add to internal model
|
||||
//Sound = driver.Sound.AsEnumValue<SupportStatus>(), // TODO: Add to internal model
|
||||
//PaletteSize = NumberHelper.ConvertToInt64(driver.PaletteSize), // TODO: Add to internal model
|
||||
Emulation = driver.Emulation.AsEnumValue<SupportStatus>(),
|
||||
Cocktail = driver.Cocktail.AsEnumValue<SupportStatus>(),
|
||||
SaveState = driver.SaveState.AsEnumValue<Supported>(),
|
||||
RequiresArtwork = driver.RequiresArtwork.AsYesNo(),
|
||||
Unofficial = driver.Unofficial.AsYesNo(),
|
||||
NoSoundHardware = driver.NoSoundHardware.AsYesNo(),
|
||||
Incomplete = driver.Incomplete.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.CocktailKey, driver.Cocktail?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.ColorKey, driver.Color?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.EmulationKey, driver.Emulation?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Driver.IncompleteKey, driver.Incomplete.AsYesNo());
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Driver.NoSoundHardwareKey, driver.NoSoundHardware.AsYesNo());
|
||||
item.SetFieldValue<long?>(Models.Metadata.Driver.PaletteSizeKey, NumberHelper.ConvertToInt64(driver.PaletteSize));
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Driver.RequiresArtworkKey, driver.RequiresArtwork.AsYesNo());
|
||||
item.SetFieldValue<Supported>(Models.Metadata.Driver.SaveStateKey, driver.SaveState?.AsEnumValue<Supported>() ?? Supported.NULL);
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.SoundKey, driver.Sound?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey, driver.Status?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Driver.UnofficialKey, driver.Unofficial.AsYesNo());
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -840,12 +817,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Feature
|
||||
{
|
||||
Type = feature.Type.AsEnumValue<FeatureType>(),
|
||||
Status = feature.Status.AsEnumValue<FeatureStatus>(),
|
||||
Overall = feature.Overall.AsEnumValue<FeatureStatus>(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<FeatureType>(Models.Metadata.Feature.FeatureTypeKey, feature.Type.AsEnumValue<FeatureType>());
|
||||
item.SetFieldValue<FeatureStatus>(Models.Metadata.Feature.OverallKey, feature.Overall.AsEnumValue<FeatureStatus>());
|
||||
item.SetFieldValue<FeatureStatus>(Models.Metadata.Feature.StatusKey, feature.Status.AsEnumValue<FeatureStatus>());
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -872,23 +848,21 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Device
|
||||
{
|
||||
DeviceType = device.Type.AsEnumValue<DeviceType>(),
|
||||
Tag = device.Tag,
|
||||
FixedImage = device.FixedImage,
|
||||
Mandatory = NumberHelper.ConvertToInt64(device.Mandatory),
|
||||
Interface = device.Interface,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<DeviceType>(Models.Metadata.Device.DeviceTypeKey, device.Type.AsEnumValue<DeviceType>());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Device.FixedImageKey, device.FixedImage);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Device.InterfaceKey, device.Interface);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Device.MandatoryKey, NumberHelper.ConvertToInt64(device.Mandatory));
|
||||
item.SetFieldValue<string?>(Models.Metadata.Device.TagKey, device.Tag);
|
||||
|
||||
if (device.Instance != null)
|
||||
{
|
||||
var instance = new Instance
|
||||
{
|
||||
BriefName = device.Instance.BriefName,
|
||||
};
|
||||
var instance = new Instance();
|
||||
instance.SetName(device.Instance.Name);
|
||||
item.Instances = [instance];
|
||||
instance.SetFieldValue<string?>(Models.Metadata.Instance.BriefNameKey, device.Instance.BriefName);
|
||||
|
||||
item.SetFieldValue<Instance[]?>(Models.Metadata.Device.InstanceKey, [instance]);
|
||||
}
|
||||
|
||||
var extensions = new List<Extension>();
|
||||
@@ -896,11 +870,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var extensionItem = new Extension();
|
||||
extensionItem.SetName(extension.Name);
|
||||
|
||||
extensions.Add(extensionItem);
|
||||
}
|
||||
|
||||
if (extensions.Any())
|
||||
item.Extensions = extensions;
|
||||
item.SetFieldValue<Extension[]?>(Models.Metadata.Device.ExtensionKey, extensions.ToArray());
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -934,17 +909,16 @@ namespace SabreTools.DatFiles.Formats
|
||||
var slotoptions = new List<SlotOption>();
|
||||
foreach (var slotoption in slot.SlotOption ?? [])
|
||||
{
|
||||
var slotoptionItem = new SlotOption
|
||||
{
|
||||
DeviceName = slotoption.DevName,
|
||||
Default = slotoption.Default.AsYesNo(),
|
||||
};
|
||||
var slotoptionItem = new SlotOption();
|
||||
slotoptionItem.SetName(slotoption.Name);
|
||||
slotoptionItem.SetFieldValue<bool?>(Models.Metadata.SlotOption.DefaultKey, slotoption.Default.AsYesNo());
|
||||
slotoptionItem.SetFieldValue<string?>(Models.Metadata.SlotOption.DevNameKey, slotoption.DevName);
|
||||
|
||||
slotoptions.Add(slotoptionItem);
|
||||
}
|
||||
|
||||
if (slotoptions.Any())
|
||||
item.SlotOptions = slotoptions;
|
||||
item.SetFieldValue<SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey, [.. slotoptions]);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -971,13 +945,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new DatItems.Formats.SoftwareList
|
||||
{
|
||||
Tag = softwarelist.Tag,
|
||||
Status = softwarelist.Status.AsEnumValue<SoftwareListStatus>(),
|
||||
Filter = softwarelist.Filter,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(softwarelist.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.SoftwareList.FilterKey, softwarelist.Filter);
|
||||
item.SetFieldValue<SoftwareListStatus>(Models.Metadata.SoftwareList.StatusKey, softwarelist.Status.AsEnumValue<SoftwareListStatus>());
|
||||
item.SetFieldValue<string?>(Models.Metadata.SoftwareList.TagKey, softwarelist.Tag);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -1004,12 +977,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new RamOption
|
||||
{
|
||||
Default = ramoption.Default.AsYesNo(),
|
||||
Content = ramoption.Content,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(ramoption.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.RamOption.ContentKey, ramoption.Content);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.RamOption.DefaultKey, ramoption.Default.AsYesNo());
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
|
||||
@@ -5,7 +5,6 @@ using SabreTools.Core;
|
||||
using SabreTools.Core.Tools;
|
||||
using SabreTools.DatItems;
|
||||
using SabreTools.DatItems.Formats;
|
||||
using SabreTools.Serialization.CrossModel;
|
||||
|
||||
namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
@@ -51,17 +50,17 @@ namespace SabreTools.DatFiles.Formats
|
||||
case BiosSet biosset:
|
||||
if (string.IsNullOrEmpty(biosset.GetName()))
|
||||
missingFields.Add(Models.Metadata.BiosSet.NameKey);
|
||||
if (string.IsNullOrEmpty(biosset.Description))
|
||||
if (string.IsNullOrEmpty(biosset.GetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey)))
|
||||
missingFields.Add(Models.Metadata.BiosSet.DescriptionKey);
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetName()))
|
||||
missingFields.Add(Models.Metadata.Rom.NameKey);
|
||||
if (rom.Size == null || rom.Size < 0)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) < 0)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
if (string.IsNullOrEmpty(rom.CRC)
|
||||
&& string.IsNullOrEmpty(rom.SHA1))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
}
|
||||
@@ -70,8 +69,8 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Disk disk:
|
||||
if (string.IsNullOrEmpty(disk.GetName()))
|
||||
missingFields.Add(Models.Metadata.Disk.NameKey);
|
||||
if (string.IsNullOrEmpty(disk.MD5)
|
||||
&& string.IsNullOrEmpty(disk.SHA1))
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key))
|
||||
&& string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Disk.SHA1Key);
|
||||
}
|
||||
@@ -90,43 +89,43 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Chip chip:
|
||||
if (string.IsNullOrEmpty(chip.GetName()))
|
||||
missingFields.Add(Models.Metadata.Chip.NameKey);
|
||||
if (!chip.ChipTypeSpecified)
|
||||
if (chip.GetFieldValue<ChipType>(Models.Metadata.Chip.ChipTypeKey) == ChipType.NULL)
|
||||
missingFields.Add(Models.Metadata.Chip.ChipTypeKey);
|
||||
break;
|
||||
|
||||
case Display display:
|
||||
if (!display.DisplayTypeSpecified)
|
||||
if (display.GetFieldValue<DisplayType>(Models.Metadata.Display.DisplayTypeKey) == DisplayType.NULL)
|
||||
missingFields.Add(Models.Metadata.Display.DisplayTypeKey);
|
||||
if (display.Refresh == null)
|
||||
if (display.GetFieldValue<double?>(Models.Metadata.Display.RefreshKey) == null)
|
||||
missingFields.Add(Models.Metadata.Display.RefreshKey);
|
||||
break;
|
||||
|
||||
case Sound sound:
|
||||
if (sound.Channels == null)
|
||||
if (sound.GetFieldValue<long?>(Models.Metadata.Sound.ChannelsKey) == null)
|
||||
missingFields.Add(Models.Metadata.Sound.ChannelsKey);
|
||||
break;
|
||||
|
||||
case Input input:
|
||||
if (input.Players == null)
|
||||
if (input.GetFieldValue<long?>(Models.Metadata.Input.PlayersKey) == null)
|
||||
missingFields.Add(Models.Metadata.Input.PlayersKey);
|
||||
break;
|
||||
|
||||
case DipSwitch dipswitch:
|
||||
if (string.IsNullOrEmpty(dipswitch.GetName()))
|
||||
missingFields.Add(Models.Metadata.DipSwitch.NameKey);
|
||||
if (string.IsNullOrEmpty(dipswitch.Tag))
|
||||
if (string.IsNullOrEmpty(dipswitch.GetFieldValue<string?>(Models.Metadata.DipSwitch.TagKey)))
|
||||
missingFields.Add(Models.Metadata.DipSwitch.TagKey);
|
||||
break;
|
||||
|
||||
case Configuration configuration:
|
||||
if (string.IsNullOrEmpty(configuration.GetName()))
|
||||
missingFields.Add(Models.Metadata.Configuration.NameKey);
|
||||
if (string.IsNullOrEmpty(configuration.Tag))
|
||||
if (string.IsNullOrEmpty(configuration.GetFieldValue<string>(Models.Metadata.Configuration.TagKey)))
|
||||
missingFields.Add(Models.Metadata.Configuration.TagKey);
|
||||
break;
|
||||
|
||||
case Port port:
|
||||
if (string.IsNullOrEmpty(port.Tag))
|
||||
if (string.IsNullOrEmpty(port.GetFieldValue<string>(Models.Metadata.Port.TagKey)))
|
||||
missingFields.Add(Models.Metadata.Port.TagKey);
|
||||
break;
|
||||
|
||||
@@ -136,23 +135,23 @@ namespace SabreTools.DatFiles.Formats
|
||||
break;
|
||||
|
||||
case Driver driver:
|
||||
if (!driver.StatusSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.StatusKey);
|
||||
if (!driver.EmulationSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.EmulationKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.EmulationKey);
|
||||
if (!driver.CocktailSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.CocktailKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.CocktailKey);
|
||||
if (!driver.SaveStateSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.SaveStateKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.SaveStateKey);
|
||||
break;
|
||||
|
||||
case Feature feature:
|
||||
if (!feature.TypeSpecified)
|
||||
if (feature.GetFieldValue<FeatureType>(Models.Metadata.Feature.FeatureTypeKey) == FeatureType.NULL)
|
||||
missingFields.Add(Models.Metadata.Feature.FeatureTypeKey);
|
||||
break;
|
||||
|
||||
case Device device:
|
||||
if (!device.DeviceTypeSpecified)
|
||||
if (device.GetFieldValue<DeviceType>(Models.Metadata.Device.DeviceTypeKey) != DeviceType.NULL)
|
||||
missingFields.Add(Models.Metadata.Device.DeviceTypeKey);
|
||||
break;
|
||||
|
||||
@@ -162,11 +161,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
break;
|
||||
|
||||
case DatItems.Formats.SoftwareList softwarelist:
|
||||
if (string.IsNullOrEmpty(softwarelist.Tag))
|
||||
if (string.IsNullOrEmpty(softwarelist.GetFieldValue<string?>(Models.Metadata.SoftwareList.TagKey)))
|
||||
missingFields.Add(Models.Metadata.SoftwareList.TagKey);
|
||||
if (string.IsNullOrEmpty(softwarelist.GetName()))
|
||||
missingFields.Add(Models.Metadata.SoftwareList.NameKey);
|
||||
if (!softwarelist.StatusSpecified)
|
||||
if (softwarelist.GetFieldValue<SoftwareListStatus?>(Models.Metadata.SoftwareList.StatusKey) == SoftwareListStatus.None)
|
||||
missingFields.Add(Models.Metadata.SoftwareList.StatusKey);
|
||||
break;
|
||||
|
||||
@@ -412,12 +411,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
var biosset = new Models.Listxml.BiosSet
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Description = item.Description,
|
||||
Default = item.GetFieldValue<bool?>(Models.Metadata.BiosSet.DefaultKey).FromYesNo(),
|
||||
Description = item.GetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey),
|
||||
};
|
||||
|
||||
if (item.DefaultSpecified)
|
||||
biosset.Default = item.Default.FromYesNo();
|
||||
|
||||
return biosset;
|
||||
}
|
||||
|
||||
@@ -429,17 +426,17 @@ namespace SabreTools.DatFiles.Formats
|
||||
var rom = new Models.Listxml.Rom
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Bios = item.Bios,
|
||||
Size = item.Size?.ToString(),
|
||||
CRC = item.CRC,
|
||||
SHA1 = item.SHA1,
|
||||
Merge = item.MergeTag,
|
||||
Region = item.Region,
|
||||
Offset = item.Offset,
|
||||
Status = item.ItemStatus.AsStringValue<ItemStatus>(useSecond: false),
|
||||
Optional = item.Optional.FromYesNo(),
|
||||
//Dispose = item.Dispose.FromYesNo(), // TODO: Add to internal model
|
||||
//SoundOnly = item.SoundOnly.FromYesNo(), // TODO: Add to internal model
|
||||
Bios = item.GetFieldValue<string?>(Models.Metadata.Rom.BiosKey),
|
||||
Size = item.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
CRC = item.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
Merge = item.GetFieldValue<string?>(Models.Metadata.Rom.MergeKey),
|
||||
Region = item.GetFieldValue<string?>(Models.Metadata.Rom.RegionKey),
|
||||
Offset = item.GetFieldValue<string?>(Models.Metadata.Rom.OffsetKey),
|
||||
Status = item.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey).AsStringValue<ItemStatus>(useSecond: false),
|
||||
Optional = item.GetFieldValue<bool?>(Models.Metadata.Rom.OptionalKey).FromYesNo(),
|
||||
Dispose = item.GetFieldValue<bool?>(Models.Metadata.Rom.DisposeKey).FromYesNo(),
|
||||
SoundOnly = item.GetFieldValue<bool?>(Models.Metadata.Rom.SoundOnlyKey).FromYesNo(),
|
||||
};
|
||||
|
||||
return rom;
|
||||
@@ -453,14 +450,14 @@ namespace SabreTools.DatFiles.Formats
|
||||
var disk = new Models.Listxml.Disk
|
||||
{
|
||||
Name = item.GetName(),
|
||||
MD5 = item.MD5,
|
||||
SHA1 = item.SHA1,
|
||||
Merge = item.MergeTag,
|
||||
Region = item.Region,
|
||||
Index = item.Index,
|
||||
Writable = item.Writable.FromYesNo(),
|
||||
Status = item.ItemStatus.AsStringValue<ItemStatus>(useSecond: false),
|
||||
Optional = item.Optional.FromYesNo(),
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key),
|
||||
Merge = item.GetFieldValue<string?>(Models.Metadata.Disk.MergeKey),
|
||||
Region = item.GetFieldValue<string?>(Models.Metadata.Disk.RegionKey),
|
||||
Index = item.GetFieldValue<string?>(Models.Metadata.Disk.IndexKey),
|
||||
Writable = item.GetFieldValue<bool?>(Models.Metadata.Disk.WritableKey).FromYesNo(),
|
||||
Status = item.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey).AsStringValue<ItemStatus>(useSecond: false),
|
||||
Optional = item.GetFieldValue<bool?>(Models.Metadata.Disk.OptionalKey).FromYesNo(),
|
||||
};
|
||||
|
||||
return disk;
|
||||
@@ -500,10 +497,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
var chip = new Models.Listxml.Chip
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Tag = item.Tag,
|
||||
Type = item.ChipType.AsStringValue<ChipType>(),
|
||||
//SoundOnly = item.SoundOnly, // TODO: Add to internal model
|
||||
Clock = item.Clock?.ToString(),
|
||||
Tag = item.GetFieldValue<string?>(Models.Metadata.Chip.TagKey),
|
||||
Type = item.GetFieldValue<ChipType>(Models.Metadata.Chip.ChipTypeKey).AsStringValue<ChipType>(),
|
||||
SoundOnly = item.GetFieldValue<bool?>(Models.Metadata.Chip.SoundOnlyKey).FromYesNo(),
|
||||
Clock = item.GetFieldValue<long?>(Models.Metadata.Chip.TagKey)?.ToString(),
|
||||
};
|
||||
|
||||
return chip;
|
||||
@@ -516,20 +513,20 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var display = new Models.Listxml.Display
|
||||
{
|
||||
Tag = item.Tag,
|
||||
Type = item.DisplayType.AsStringValue<DisplayType>(),
|
||||
Rotate = item.Rotate?.ToString(),
|
||||
FlipX = item.FlipX.FromYesNo(),
|
||||
Width = item.Width?.ToString(),
|
||||
Height = item.Height?.ToString(),
|
||||
Refresh = item.Refresh?.ToString(),
|
||||
PixClock = item.PixClock?.ToString(),
|
||||
HTotal = item.HTotal?.ToString(),
|
||||
HBEnd = item.HBEnd?.ToString(),
|
||||
HBStart = item.HBStart?.ToString(),
|
||||
VTotal = item.VTotal?.ToString(),
|
||||
VBEnd = item.VBEnd?.ToString(),
|
||||
VBStart = item.VBStart?.ToString(),
|
||||
Tag = item.GetFieldValue<string?>(Models.Metadata.Display.TagKey),
|
||||
Type = item.GetFieldValue<DisplayType>(Models.Metadata.Display.DisplayTypeKey).AsStringValue<DisplayType>(),
|
||||
Rotate = item.GetFieldValue<long?>(Models.Metadata.Display.RotateKey)?.ToString(),
|
||||
FlipX = item.GetFieldValue<bool?>(Models.Metadata.Display.FlipXKey).FromYesNo(),
|
||||
Width = item.GetFieldValue<string?>(Models.Metadata.Display.WidthKey)?.ToString(),
|
||||
Height = item.GetFieldValue<string?>(Models.Metadata.Display.HeightKey)?.ToString(),
|
||||
Refresh = item.GetFieldValue<double?>(Models.Metadata.Display.RefreshKey)?.ToString(),
|
||||
PixClock = item.GetFieldValue<string?>(Models.Metadata.Display.PixClockKey)?.ToString(),
|
||||
HTotal = item.GetFieldValue<string?>(Models.Metadata.Display.HTotalKey)?.ToString(),
|
||||
HBEnd = item.GetFieldValue<string?>(Models.Metadata.Display.HBEndKey)?.ToString(),
|
||||
HBStart = item.GetFieldValue<string?>(Models.Metadata.Display.HBStartKey)?.ToString(),
|
||||
VTotal = item.GetFieldValue<string?>(Models.Metadata.Display.VTotalKey)?.ToString(),
|
||||
VBEnd = item.GetFieldValue<string?>(Models.Metadata.Display.VBEndKey)?.ToString(),
|
||||
VBStart = item.GetFieldValue<string?>(Models.Metadata.Display.VBStartKey)?.ToString(),
|
||||
};
|
||||
|
||||
return display;
|
||||
@@ -542,7 +539,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var sound = new Models.Listxml.Sound
|
||||
{
|
||||
Channels = item.Channels?.ToString(),
|
||||
Channels = item.GetFieldValue<long?>(Models.Metadata.Sound.ChannelsKey)?.ToString(),
|
||||
};
|
||||
|
||||
return sound;
|
||||
@@ -555,16 +552,16 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var input = new Models.Listxml.Input
|
||||
{
|
||||
Service = item.Service.FromYesNo(),
|
||||
Tilt = item.Tilt.FromYesNo(),
|
||||
Players = item.Players?.ToString(),
|
||||
//ControlAttr = item.ControlAttr, // TODO: Add to internal model
|
||||
//Buttons = item.Buttons, // TODO: Add to internal model
|
||||
Coins = item.Coins?.ToString(),
|
||||
Service = item.GetFieldValue<bool?>(Models.Metadata.Input.ServiceKey).FromYesNo(),
|
||||
Tilt = item.GetFieldValue<bool?>(Models.Metadata.Input.TiltKey).FromYesNo(),
|
||||
Players = item.GetFieldValue<long?>(Models.Metadata.Input.PlayersKey)?.ToString(),
|
||||
//ControlAttr = item.GetFieldValue<string?>(Models.Metadata.Input.ControlKey),
|
||||
Buttons = item.GetFieldValue<long?>(Models.Metadata.Input.ButtonsKey)?.ToString(),
|
||||
Coins = item.GetFieldValue<long?>(Models.Metadata.Input.CoinsKey)?.ToString(),
|
||||
};
|
||||
|
||||
var controls = new List<Models.Listxml.Control>();
|
||||
foreach (var controlItem in item.Controls ?? [])
|
||||
foreach (var controlItem in item.GetFieldValue<Control[]?>(Models.Metadata.Input.ControlKey) ?? [])
|
||||
{
|
||||
var control = CreateControl(controlItem);
|
||||
controls.Add(control);
|
||||
@@ -583,18 +580,18 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var control = new Models.Listxml.Control
|
||||
{
|
||||
Type = item.ControlType.AsStringValue<ControlType>(),
|
||||
Player = item.Player?.ToString(),
|
||||
Buttons = item.Buttons?.ToString(),
|
||||
ReqButtons = item.RequiredButtons?.ToString(),
|
||||
Minimum = item.Minimum?.ToString(),
|
||||
Maximum = item.Maximum?.ToString(),
|
||||
Sensitivity = item.Sensitivity?.ToString(),
|
||||
KeyDelta = item.KeyDelta?.ToString(),
|
||||
Reverse = item.Reverse.FromYesNo(),
|
||||
Ways = item.Ways,
|
||||
Ways2 = item.Ways2,
|
||||
Ways3 = item.Ways3,
|
||||
Type = item.GetFieldValue<ControlType>(Models.Metadata.Control.ControlTypeKey).AsStringValue<ControlType>(),
|
||||
Player = item.GetFieldValue<long?>(Models.Metadata.Control.PlayerKey)?.ToString(),
|
||||
Buttons = item.GetFieldValue<long?>(Models.Metadata.Control.ButtonsKey)?.ToString(),
|
||||
ReqButtons = item.GetFieldValue<long?>(Models.Metadata.Control.ReqButtonsKey)?.ToString(),
|
||||
Minimum = item.GetFieldValue<long?>(Models.Metadata.Control.MinimumKey)?.ToString(),
|
||||
Maximum = item.GetFieldValue<long?>(Models.Metadata.Control.MaximumKey)?.ToString(),
|
||||
Sensitivity = item.GetFieldValue<long?>(Models.Metadata.Control.SensitivityKey)?.ToString(),
|
||||
KeyDelta = item.GetFieldValue<long?>(Models.Metadata.Control.KeyDeltaKey)?.ToString(),
|
||||
Reverse = item.GetFieldValue<bool?>(Models.Metadata.Control.ReverseKey).FromYesNo(),
|
||||
Ways = item.GetFieldValue<string?>(Models.Metadata.Control.WaysKey),
|
||||
Ways2 = item.GetFieldValue<string?>(Models.Metadata.Control.Ways2Key),
|
||||
Ways3 = item.GetFieldValue<string?>(Models.Metadata.Control.Ways3Key),
|
||||
};
|
||||
|
||||
return control;
|
||||
@@ -608,25 +605,25 @@ namespace SabreTools.DatFiles.Formats
|
||||
var dipswitch = new Models.Listxml.DipSwitch
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Tag = item.Tag,
|
||||
Mask = item.Mask,
|
||||
Tag = item.GetFieldValue<string?>(Models.Metadata.DipSwitch.TagKey),
|
||||
Mask = item.GetFieldValue<string?>(Models.Metadata.DipSwitch.MaskKey),
|
||||
};
|
||||
|
||||
if (item.ConditionsSpecified)
|
||||
{
|
||||
var conditionItem = item.Conditions?.FirstOrDefault();
|
||||
var conditionItem = item.GetFieldValue<Condition[]?>(Models.Metadata.DipSwitch.ConditionKey)?.FirstOrDefault();
|
||||
var condition = new Models.Listxml.Condition
|
||||
{
|
||||
Tag = conditionItem?.Tag,
|
||||
Mask = conditionItem?.Mask,
|
||||
Relation = conditionItem?.Relation.AsStringValue<Relation>(),
|
||||
Value = conditionItem?.Value,
|
||||
Tag = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.TagKey),
|
||||
Mask = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.MaskKey),
|
||||
Relation = conditionItem?.GetFieldValue<Relation>(Models.Metadata.Condition.RelationKey).AsStringValue<Relation>(),
|
||||
Value = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.ValueKey),
|
||||
};
|
||||
dipswitch.Condition = condition;
|
||||
}
|
||||
|
||||
var diplocations = new List<Models.Listxml.DipLocation>();
|
||||
foreach (var locationItem in item.Locations ?? [])
|
||||
foreach (var locationItem in item.GetFieldValue<DipLocation[]?>(Models.Metadata.DipSwitch.DipLocationKey) ?? [])
|
||||
{
|
||||
var control = CreateDipLocation(locationItem);
|
||||
diplocations.Add(control);
|
||||
@@ -636,7 +633,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
dipswitch.DipLocation = [.. diplocations];
|
||||
|
||||
var dipvalues = new List<Models.Listxml.DipValue>();
|
||||
foreach (var dipValueItem in item.Values ?? [])
|
||||
foreach (var dipValueItem in item.GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey) ?? [])
|
||||
{
|
||||
var dipvalue = CreateDipValue(dipValueItem);
|
||||
dipvalues.Add(dipvalue);
|
||||
@@ -656,8 +653,8 @@ namespace SabreTools.DatFiles.Formats
|
||||
var diplocation = new Models.Listxml.DipLocation
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Number = item.Number?.ToString(),
|
||||
Inverted = item.Inverted.FromYesNo(),
|
||||
Number = item.GetFieldValue<long?>(Models.Metadata.DipLocation.NumberKey)?.ToString(),
|
||||
Inverted = item.GetFieldValue<bool?>(Models.Metadata.DipLocation.InvertedKey).FromYesNo(),
|
||||
};
|
||||
|
||||
return diplocation;
|
||||
@@ -671,19 +668,19 @@ namespace SabreTools.DatFiles.Formats
|
||||
var dipvalue = new Models.Listxml.DipValue
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Value = item.Value,
|
||||
Default = item.Default.FromYesNo(),
|
||||
Value = item.GetFieldValue<string?>(Models.Metadata.DipValue.ValueKey),
|
||||
Default = item.GetFieldValue<bool?>(Models.Metadata.DipValue.DefaultKey).FromYesNo(),
|
||||
};
|
||||
|
||||
if (item.ConditionsSpecified)
|
||||
{
|
||||
var conditionItem = item.Conditions?.FirstOrDefault();
|
||||
var conditionItem = item.GetFieldValue<Condition[]?>(Models.Metadata.DipValue.ConditionKey)?.FirstOrDefault();
|
||||
var condition = new Models.Listxml.Condition
|
||||
{
|
||||
Tag = conditionItem?.Tag,
|
||||
Mask = conditionItem?.Mask,
|
||||
Relation = conditionItem?.Relation.AsStringValue<Relation>(),
|
||||
Value = conditionItem?.Value,
|
||||
Tag = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.TagKey),
|
||||
Mask = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.MaskKey),
|
||||
Relation = conditionItem?.GetFieldValue<Relation>(Models.Metadata.Condition.RelationKey).AsStringValue<Relation>(),
|
||||
Value = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.ValueKey),
|
||||
};
|
||||
dipvalue.Condition = condition;
|
||||
}
|
||||
@@ -699,25 +696,25 @@ namespace SabreTools.DatFiles.Formats
|
||||
var configuration = new Models.Listxml.Configuration
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Tag = item.Tag,
|
||||
Mask = item.Mask,
|
||||
Tag = item.GetFieldValue<string>(Models.Metadata.Configuration.TagKey),
|
||||
Mask = item.GetFieldValue<string>(Models.Metadata.Configuration.MaskKey),
|
||||
};
|
||||
|
||||
if (item.ConditionsSpecified)
|
||||
{
|
||||
var conditionItem = item.Conditions?.FirstOrDefault();
|
||||
var conditionItem = item.GetFieldValue<Condition[]?>(Models.Metadata.Configuration.ConditionKey)?.FirstOrDefault();
|
||||
var condition = new Models.Listxml.Condition
|
||||
{
|
||||
Tag = conditionItem?.Tag,
|
||||
Mask = conditionItem?.Mask,
|
||||
Relation = conditionItem?.Relation.AsStringValue<Relation>(),
|
||||
Value = conditionItem?.Value,
|
||||
Tag = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.TagKey),
|
||||
Mask = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.MaskKey),
|
||||
Relation = conditionItem?.GetFieldValue<Relation>(Models.Metadata.Condition.RelationKey).AsStringValue<Relation>(),
|
||||
Value = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.ValueKey),
|
||||
};
|
||||
configuration.Condition = condition;
|
||||
}
|
||||
|
||||
var confLocations = new List<Models.Listxml.ConfLocation>();
|
||||
foreach (var location in item.Locations ?? [])
|
||||
foreach (var location in item.GetFieldValue<ConfLocation[]?>(Models.Metadata.Configuration.ConfLocationKey) ?? [])
|
||||
{
|
||||
var control = CreateConfLocation(location);
|
||||
confLocations.Add(control);
|
||||
@@ -727,7 +724,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
configuration.ConfLocation = [.. confLocations];
|
||||
|
||||
var confsettings = new List<Models.Listxml.ConfSetting>();
|
||||
foreach (var confSettingItem in item.Settings ?? [])
|
||||
foreach (var confSettingItem in item.GetFieldValue<ConfSetting[]?>(Models.Metadata.Configuration.ConfSettingKey) ?? [])
|
||||
{
|
||||
var dipvalue = CreateConfSetting(confSettingItem);
|
||||
confsettings.Add(dipvalue);
|
||||
@@ -747,8 +744,8 @@ namespace SabreTools.DatFiles.Formats
|
||||
var conflocation = new Models.Listxml.ConfLocation
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Number = item.Number?.ToString(),
|
||||
Inverted = item.Inverted.FromYesNo(),
|
||||
Number = item.GetFieldValue<long?>(Models.Metadata.ConfLocation.NumberKey)?.ToString(),
|
||||
Inverted = item.GetFieldValue<bool?>(Models.Metadata.ConfLocation.InvertedKey).FromYesNo(),
|
||||
};
|
||||
|
||||
return conflocation;
|
||||
@@ -762,19 +759,19 @@ namespace SabreTools.DatFiles.Formats
|
||||
var confsetting = new Models.Listxml.ConfSetting
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Value = item.Value,
|
||||
Default = item.Default.FromYesNo(),
|
||||
Value = item.GetFieldValue<string?>(Models.Metadata.ConfSetting.ValueKey),
|
||||
Default = item.GetFieldValue<bool?>(Models.Metadata.ConfSetting.DefaultKey).FromYesNo(),
|
||||
};
|
||||
|
||||
if (item.ConditionsSpecified)
|
||||
{
|
||||
var conditionItem = item.Conditions?.FirstOrDefault();
|
||||
var conditionItem = item.GetFieldValue<Condition[]?>(Models.Metadata.ConfSetting.ConditionKey)?.FirstOrDefault();
|
||||
var condition = new Models.Listxml.Condition
|
||||
{
|
||||
Tag = conditionItem?.Tag,
|
||||
Mask = conditionItem?.Mask,
|
||||
Relation = conditionItem?.Relation.AsStringValue<Relation>(),
|
||||
Value = conditionItem?.Value,
|
||||
Tag = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.TagKey),
|
||||
Mask = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.MaskKey),
|
||||
Relation = conditionItem?.GetFieldValue<Relation>(Models.Metadata.Condition.RelationKey).AsStringValue<Relation>(),
|
||||
Value = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.ValueKey),
|
||||
};
|
||||
confsetting.Condition = condition;
|
||||
}
|
||||
@@ -789,7 +786,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var port = new Models.Listxml.Port
|
||||
{
|
||||
Tag = item.Tag,
|
||||
Tag = item.GetFieldValue<string>(Models.Metadata.Port.TagKey),
|
||||
};
|
||||
|
||||
return port;
|
||||
@@ -811,10 +808,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
var conditionItem = item.GetFieldValue<Condition[]?>(Models.Metadata.Adjuster.ConditionKey)?.FirstOrDefault();
|
||||
var condition = new Models.Listxml.Condition
|
||||
{
|
||||
Tag = conditionItem?.Tag,
|
||||
Mask = conditionItem?.Mask,
|
||||
Relation = conditionItem?.Relation.AsStringValue<Relation>(),
|
||||
Value = conditionItem?.Value,
|
||||
Tag = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.TagKey),
|
||||
Mask = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.MaskKey),
|
||||
Relation = conditionItem?.GetFieldValue<Relation>(Models.Metadata.Condition.RelationKey).AsStringValue<Relation>(),
|
||||
Value = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.ValueKey),
|
||||
};
|
||||
adjuster.Condition = condition;
|
||||
}
|
||||
@@ -829,17 +826,17 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var driver = new Models.Listxml.Driver
|
||||
{
|
||||
Status = item.Status.AsStringValue<SupportStatus>(),
|
||||
//Color = item.Color.AsStringValue<SupportStatus>(), // TODO: Add to internal model
|
||||
//Sound = item.Sound.AsStringValue<SupportStatus>(), // TODO: Add to internal model
|
||||
//PaletteSize = driver.PaletteSize?.ToString(), // TODO: Add to internal model
|
||||
Emulation = item.Emulation.AsStringValue<SupportStatus>(),
|
||||
Cocktail = item.Cocktail.AsStringValue<SupportStatus>(),
|
||||
SaveState = item.SaveState.AsStringValue<Supported>(useSecond: true),
|
||||
RequiresArtwork = item.RequiresArtwork.FromYesNo(),
|
||||
Unofficial = item.Unofficial.FromYesNo(),
|
||||
NoSoundHardware = item.NoSoundHardware.FromYesNo(),
|
||||
Incomplete = item.Incomplete.FromYesNo(),
|
||||
Status = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey).AsStringValue<SupportStatus>(),
|
||||
Color = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.ColorKey).AsStringValue<SupportStatus>(),
|
||||
Sound = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.SoundKey).AsStringValue<SupportStatus>(),
|
||||
PaletteSize = item.GetFieldValue<long?>(Models.Metadata.Driver.PaletteSizeKey)?.ToString(),
|
||||
Emulation = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.EmulationKey).AsStringValue<SupportStatus>(),
|
||||
Cocktail = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.CocktailKey).AsStringValue<SupportStatus>(),
|
||||
SaveState = item.GetFieldValue<Supported>(Models.Metadata.Driver.SaveStateKey).AsStringValue<Supported>(useSecond: true),
|
||||
RequiresArtwork = item.GetFieldValue<bool?>(Models.Metadata.Driver.RequiresArtworkKey).FromYesNo(),
|
||||
Unofficial = item.GetFieldValue<bool?>(Models.Metadata.Driver.UnofficialKey).FromYesNo(),
|
||||
NoSoundHardware = item.GetFieldValue<bool?>(Models.Metadata.Driver.NoSoundHardwareKey).FromYesNo(),
|
||||
Incomplete = item.GetFieldValue<bool?>(Models.Metadata.Driver.IncompleteKey).FromYesNo(),
|
||||
};
|
||||
|
||||
return driver;
|
||||
@@ -852,9 +849,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var feature = new Models.Listxml.Feature
|
||||
{
|
||||
Type = item.Type.AsStringValue<FeatureType>(),
|
||||
Status = item.Status.AsStringValue<FeatureStatus>(),
|
||||
Overall = item.Overall.AsStringValue<FeatureStatus>(),
|
||||
Type = item.GetFieldValue<FeatureType>(Models.Metadata.Feature.FeatureTypeKey).AsStringValue<FeatureType>(),
|
||||
Status = item.GetFieldValue<FeatureStatus>(Models.Metadata.Feature.StatusKey).AsStringValue<FeatureStatus>(),
|
||||
Overall = item.GetFieldValue<FeatureStatus>(Models.Metadata.Feature.OverallKey).AsStringValue<FeatureStatus>(),
|
||||
};
|
||||
|
||||
return feature;
|
||||
@@ -867,26 +864,26 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var device = new Models.Listxml.Device
|
||||
{
|
||||
Type = item.DeviceType.AsStringValue<DeviceType>(),
|
||||
Tag = item.Tag,
|
||||
FixedImage = item.FixedImage,
|
||||
Mandatory = item.Mandatory?.ToString(),
|
||||
Interface = item.Interface,
|
||||
Type = item.GetFieldValue<DeviceType>(Models.Metadata.Device.DeviceTypeKey).AsStringValue<DeviceType>(),
|
||||
Tag = item.GetFieldValue<string?>(Models.Metadata.Device.TagKey),
|
||||
FixedImage = item.GetFieldValue<string?>(Models.Metadata.Device.FixedImageKey),
|
||||
Mandatory = item.GetFieldValue<long?>(Models.Metadata.Device.MandatoryKey)?.ToString(),
|
||||
Interface = item.GetFieldValue<string?>(Models.Metadata.Device.InterfaceKey),
|
||||
};
|
||||
|
||||
if (item.InstancesSpecified)
|
||||
{
|
||||
var instanceItem = item.Instances?.FirstOrDefault();
|
||||
var instanceItem = item.GetFieldValue<Instance[]?>(Models.Metadata.Device.InstanceKey)?.FirstOrDefault();
|
||||
var instance = new Models.Listxml.Instance
|
||||
{
|
||||
Name = instanceItem?.GetName(),
|
||||
BriefName = instanceItem?.BriefName,
|
||||
BriefName = instanceItem?.GetFieldValue<string?>(Models.Metadata.Instance.BriefNameKey),
|
||||
};
|
||||
device.Instance = instance;
|
||||
}
|
||||
|
||||
var extensions = new List<Models.Listxml.Extension>();
|
||||
foreach (var extensionItem in item.Extensions ?? [])
|
||||
foreach (var extensionItem in item.GetFieldValue<Extension[]?>(Models.Metadata.Device.ExtensionKey) ?? [])
|
||||
{
|
||||
var extension = new Models.Listxml.Extension
|
||||
{
|
||||
@@ -912,13 +909,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
};
|
||||
|
||||
var slotoptions = new List<Models.Listxml.SlotOption>();
|
||||
foreach (var slotoptionItem in item.SlotOptions ?? [])
|
||||
foreach (var slotoptionItem in item.GetFieldValue<SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey) ?? [])
|
||||
{
|
||||
var slotoption = new Models.Listxml.SlotOption
|
||||
{
|
||||
Name = slotoptionItem.GetName(),
|
||||
DevName = slotoptionItem.DeviceName,
|
||||
Default = slotoptionItem.Default.FromYesNo(),
|
||||
DevName = slotoptionItem.GetFieldValue<string?>(Models.Metadata.SlotOption.DevNameKey),
|
||||
Default = slotoptionItem.GetFieldValue<bool?>(Models.Metadata.SlotOption.DefaultKey).FromYesNo(),
|
||||
};
|
||||
slotoptions.Add(slotoption);
|
||||
}
|
||||
@@ -936,10 +933,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var softwarelist = new Models.Listxml.SoftwareList
|
||||
{
|
||||
Tag = item.Tag,
|
||||
Tag = item.GetFieldValue<string?>(Models.Metadata.SoftwareList.TagKey),
|
||||
Name = item.GetName(),
|
||||
Status = item.Status.AsStringValue<SoftwareListStatus>(),
|
||||
Filter = item.Filter,
|
||||
Status = item.GetFieldValue<SoftwareListStatus>(Models.Metadata.SoftwareList.StatusKey).AsStringValue<SoftwareListStatus>(),
|
||||
Filter = item.GetFieldValue<string?>(Models.Metadata.SoftwareList.FilterKey),
|
||||
};
|
||||
|
||||
return softwarelist;
|
||||
@@ -953,8 +950,8 @@ namespace SabreTools.DatFiles.Formats
|
||||
var softwarelist = new Models.Listxml.RamOption
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Default = item.Default.FromYesNo(),
|
||||
Content = item.Content,
|
||||
Default = item.GetFieldValue<bool?>(Models.Metadata.RamOption.DefaultKey).FromYesNo(),
|
||||
Content = item.GetFieldValue<string?>(Models.Metadata.RamOption.ContentKey),
|
||||
};
|
||||
|
||||
return softwarelist;
|
||||
|
||||
@@ -316,14 +316,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Release
|
||||
{
|
||||
Region = release.Region,
|
||||
Language = release.Language,
|
||||
Date = release.Date,
|
||||
Default = release.Default?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(release.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Release.DateKey, release.Date);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Release.DefaultKey, release.Default?.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Release.LanguageKey, release.Language);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Release.RegionKey, release.Region);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -350,12 +349,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new BiosSet
|
||||
{
|
||||
Description = biosset.Description,
|
||||
Default = biosset.Default?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(biosset.Name);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.BiosSet.DefaultKey, biosset.Default?.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey, biosset.Description);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -382,27 +380,26 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Rom
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(rom.Size),
|
||||
CRC = rom.CRC,
|
||||
MD5 = rom.MD5,
|
||||
SHA1 = rom.SHA1,
|
||||
SHA256 = rom.SHA256,
|
||||
SHA384 = rom.SHA384,
|
||||
SHA512 = rom.SHA512,
|
||||
SpamSum = rom.SpamSum,
|
||||
//xxHash364 = rom.xxHash364, // TODO: Add to internal model
|
||||
//xxHash3128 = rom.xxHash3128, // TODO: Add to internal model
|
||||
MergeTag = rom.Merge,
|
||||
ItemStatus = rom.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL,
|
||||
//Serial = rom.Serial, // TODO: Add to internal model
|
||||
//Header = rom.Header, // TODO: Add to internal model
|
||||
Date = rom.Date,
|
||||
Inverted = rom.Inverted?.AsYesNo(),
|
||||
MIA = rom.MIA?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(rom.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, rom.CRC);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.DateKey, rom.Date);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.HeaderKey, rom.Header);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Rom.InvertedKey, rom.Inverted?.AsYesNo());
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Rom.MIAKey, rom.MIA?.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, rom.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.MergeKey, rom.Merge);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SerialKey, rom.Serial);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.SHA1);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, rom.SHA256);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, rom.SHA384);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, rom.SHA512);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(rom.Size));
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, rom.SpamSum);
|
||||
item.SetFieldValue<ItemStatus?>(Models.Metadata.Rom.StatusKey, rom.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.xxHash364Key, rom.xxHash364);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.xxHash3128Key, rom.xxHash3128);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -429,14 +426,14 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Disk
|
||||
{
|
||||
MD5 = disk.MD5,
|
||||
SHA1 = disk.SHA1,
|
||||
MergeTag = disk.Merge,
|
||||
ItemStatus = disk.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(disk.Name);
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, disk.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, disk.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.MergeKey, disk.Merge);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.RegionKey, disk.Region);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, disk.SHA1);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -463,14 +460,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Media
|
||||
{
|
||||
MD5 = medium.MD5,
|
||||
SHA1 = medium.SHA1,
|
||||
SHA256 = medium.SHA256,
|
||||
SpamSum = medium.SpamSum,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(medium.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.MD5Key, medium.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SHA1Key, medium.SHA1);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SHA256Key, medium.SHA256);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SpamSumKey, medium.SpamSum);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -582,17 +578,16 @@ namespace SabreTools.DatFiles.Formats
|
||||
containsItems = true;
|
||||
var item = new Driver
|
||||
{
|
||||
Status = driver.Status?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL,
|
||||
Emulation = driver.Emulation?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL,
|
||||
Cocktail = driver.Cocktail?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL,
|
||||
SaveState = driver.SaveState?.AsEnumValue<Supported>() ?? Supported.NULL,
|
||||
RequiresArtwork = driver.RequiresArtwork?.AsYesNo(),
|
||||
Unofficial = driver.Unofficial?.AsYesNo(),
|
||||
NoSoundHardware = driver.NoSoundHardware?.AsYesNo(),
|
||||
Incomplete = driver.Incomplete?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.CocktailKey, driver.Cocktail?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.EmulationKey, driver.Emulation?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Driver.IncompleteKey, driver.Incomplete.AsYesNo());
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Driver.NoSoundHardwareKey, driver.NoSoundHardware.AsYesNo());
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Driver.RequiresArtworkKey, driver.RequiresArtwork.AsYesNo());
|
||||
item.SetFieldValue<Supported>(Models.Metadata.Driver.SaveStateKey, driver.SaveState?.AsEnumValue<Supported>() ?? Supported.NULL);
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey, driver.Status?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Driver.UnofficialKey, driver.Unofficial.AsYesNo());
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -618,13 +613,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new DatItems.Formats.SoftwareList
|
||||
{
|
||||
Tag = softwarelist.Tag,
|
||||
Status = softwarelist.Status?.AsEnumValue<SoftwareListStatus>() ?? SoftwareListStatus.None,
|
||||
Filter = softwarelist.Filter,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(softwarelist.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.SoftwareList.FilterKey, softwarelist.Filter);
|
||||
item.SetFieldValue<SoftwareListStatus>(Models.Metadata.SoftwareList.StatusKey, softwarelist.Status.AsEnumValue<SoftwareListStatus>());
|
||||
item.SetFieldValue<string?>(Models.Metadata.SoftwareList.TagKey, softwarelist.Tag);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
|
||||
@@ -37,29 +37,29 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Release release:
|
||||
if (string.IsNullOrEmpty(release.GetName()))
|
||||
missingFields.Add(Models.Metadata.Release.NameKey);
|
||||
if (string.IsNullOrEmpty(release.Region))
|
||||
if (string.IsNullOrEmpty(release.GetFieldValue<string?>(Models.Metadata.Release.RegionKey)))
|
||||
missingFields.Add(Models.Metadata.Release.RegionKey);
|
||||
break;
|
||||
|
||||
case BiosSet biosset:
|
||||
if (string.IsNullOrEmpty(biosset.GetName()))
|
||||
missingFields.Add(Models.Metadata.BiosSet.NameKey);
|
||||
if (string.IsNullOrEmpty(biosset.Description))
|
||||
if (string.IsNullOrEmpty(biosset.GetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey)))
|
||||
missingFields.Add(Models.Metadata.BiosSet.DescriptionKey);
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetName()))
|
||||
missingFields.Add(Models.Metadata.Rom.NameKey);
|
||||
if (rom.Size == null || rom.Size < 0)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) < 0)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
if (string.IsNullOrEmpty(rom.CRC)
|
||||
&& string.IsNullOrEmpty(rom.MD5)
|
||||
&& string.IsNullOrEmpty(rom.SHA1)
|
||||
&& string.IsNullOrEmpty(rom.SHA256)
|
||||
&& string.IsNullOrEmpty(rom.SHA384)
|
||||
&& string.IsNullOrEmpty(rom.SHA512)
|
||||
&& string.IsNullOrEmpty(rom.SpamSum))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
}
|
||||
@@ -68,8 +68,8 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Disk disk:
|
||||
if (string.IsNullOrEmpty(disk.GetName()))
|
||||
missingFields.Add(Models.Metadata.Disk.NameKey);
|
||||
if (string.IsNullOrEmpty(disk.MD5)
|
||||
&& string.IsNullOrEmpty(disk.SHA1))
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key))
|
||||
&& string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Disk.SHA1Key);
|
||||
}
|
||||
@@ -78,10 +78,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Media media:
|
||||
if (string.IsNullOrEmpty(media.GetName()))
|
||||
missingFields.Add(Models.Metadata.Media.NameKey);
|
||||
if (string.IsNullOrEmpty(media.MD5)
|
||||
&& string.IsNullOrEmpty(media.SHA1)
|
||||
&& string.IsNullOrEmpty(media.SHA256)
|
||||
&& string.IsNullOrEmpty(media.SpamSum))
|
||||
if (string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key))
|
||||
&& string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key))
|
||||
&& string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key))
|
||||
&& string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Media.SHA1Key);
|
||||
}
|
||||
@@ -103,22 +103,22 @@ namespace SabreTools.DatFiles.Formats
|
||||
break;
|
||||
|
||||
case Driver driver:
|
||||
if (!driver.StatusSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.StatusKey);
|
||||
if (!driver.EmulationSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.EmulationKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.EmulationKey);
|
||||
if (!driver.CocktailSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.CocktailKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.CocktailKey);
|
||||
if (!driver.SaveStateSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.SaveStateKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.SaveStateKey);
|
||||
break;
|
||||
|
||||
case DatItems.Formats.SoftwareList softwarelist:
|
||||
if (string.IsNullOrEmpty(softwarelist.Tag))
|
||||
if (string.IsNullOrEmpty(softwarelist.GetFieldValue<string?>(Models.Metadata.SoftwareList.TagKey)))
|
||||
missingFields.Add(Models.Metadata.SoftwareList.TagKey);
|
||||
if (string.IsNullOrEmpty(softwarelist.GetName()))
|
||||
missingFields.Add(Models.Metadata.SoftwareList.NameKey);
|
||||
if (!softwarelist.StatusSpecified)
|
||||
if (softwarelist.GetFieldValue<SoftwareListStatus?>(Models.Metadata.SoftwareList.StatusKey) == SoftwareListStatus.None)
|
||||
missingFields.Add(Models.Metadata.SoftwareList.StatusKey);
|
||||
break;
|
||||
}
|
||||
@@ -485,14 +485,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
var release = new Models.Logiqx.Release
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Region = item.Region,
|
||||
Language = item.Language,
|
||||
Date = item.Date,
|
||||
Region = item.GetFieldValue<string?>(Models.Metadata.Release.RegionKey),
|
||||
Language = item.GetFieldValue<string?>(Models.Metadata.Release.LanguageKey),
|
||||
Date = item.GetFieldValue<string?>(Models.Metadata.Release.DateKey),
|
||||
Default = item.GetFieldValue<bool?>(Models.Metadata.Release.DefaultKey).FromYesNo(),
|
||||
};
|
||||
|
||||
if (item.DefaultSpecified)
|
||||
release.Default = item.Default.FromYesNo();
|
||||
|
||||
return release;
|
||||
}
|
||||
|
||||
@@ -504,12 +502,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
var biosset = new Models.Logiqx.BiosSet
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Description = item.Description,
|
||||
Default = item.GetFieldValue<bool?>(Models.Metadata.BiosSet.DefaultKey).FromYesNo(),
|
||||
Description = item.GetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey),
|
||||
};
|
||||
|
||||
if (item.DefaultSpecified)
|
||||
biosset.Default = item.Default.FromYesNo();
|
||||
|
||||
return biosset;
|
||||
}
|
||||
|
||||
@@ -521,28 +517,26 @@ namespace SabreTools.DatFiles.Formats
|
||||
var rom = new Models.Logiqx.Rom
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Size = item.Size?.ToString(),
|
||||
CRC = item.CRC,
|
||||
MD5 = item.MD5,
|
||||
SHA1 = item.SHA1,
|
||||
SHA256 = item.SHA256,
|
||||
SHA384 = item.SHA384,
|
||||
SHA512 = item.SHA512,
|
||||
SpamSum = item.SpamSum,
|
||||
//xxHash364 = item.xxHash364, // TODO: Add to internal model
|
||||
//xxHash3128 = item.xxHash3128, // TODO: Add to internal model
|
||||
Merge = item.MergeTag,
|
||||
//Serial = item.Serial, // TODO: Add to internal model
|
||||
//Header = item.Header, // TODO: Add to internal model
|
||||
Date = item.Date,
|
||||
Size = item.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
CRC = item.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
SHA256 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key),
|
||||
SHA384 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key),
|
||||
SHA512 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key),
|
||||
SpamSum = item.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey),
|
||||
xxHash364 = item.GetFieldValue<string?>(Models.Metadata.Rom.xxHash364Key),
|
||||
xxHash3128 = item.GetFieldValue<string?>(Models.Metadata.Rom.xxHash3128Key),
|
||||
Merge = item.GetFieldValue<string?>(Models.Metadata.Rom.MergeKey),
|
||||
Serial = item.GetFieldValue<string?>(Models.Metadata.Rom.SerialKey),
|
||||
Header = item.GetFieldValue<string?>(Models.Metadata.Rom.HeaderKey),
|
||||
Date = item.GetFieldValue<string?>(Models.Metadata.Rom.DateKey),
|
||||
Inverted = item.GetFieldValue<bool?>(Models.Metadata.Rom.InvertedKey).FromYesNo(),
|
||||
MIA = item.GetFieldValue<bool?>(Models.Metadata.Rom.MIAKey).FromYesNo(),
|
||||
};
|
||||
|
||||
if (item.ItemStatusSpecified)
|
||||
rom.Status = item.ItemStatus.AsStringValue<ItemStatus>(useSecond: false);
|
||||
if (item.InvertedSpecified)
|
||||
rom.Inverted = item.Inverted.FromYesNo();
|
||||
if (item.MIASpecified)
|
||||
rom.MIA = item.MIA.FromYesNo();
|
||||
rom.Status = item.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey).AsStringValue<ItemStatus>(useSecond: false);
|
||||
|
||||
return rom;
|
||||
}
|
||||
@@ -555,14 +549,14 @@ namespace SabreTools.DatFiles.Formats
|
||||
var disk = new Models.Logiqx.Disk
|
||||
{
|
||||
Name = item.GetName(),
|
||||
MD5 = item.MD5,
|
||||
SHA1 = item.SHA1,
|
||||
Merge = item.MergeTag,
|
||||
Region = item.Region,
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key),
|
||||
Merge = item.GetFieldValue<string?>(Models.Metadata.Disk.MergeKey),
|
||||
Region = item.GetFieldValue<string?>(Models.Metadata.Disk.RegionKey),
|
||||
};
|
||||
|
||||
if (item.ItemStatusSpecified)
|
||||
disk.Status = item.ItemStatus.AsStringValue<ItemStatus>(useSecond: false);
|
||||
if (item.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) != ItemStatus.NULL)
|
||||
disk.Status = item.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey).AsStringValue<ItemStatus>(useSecond: false);
|
||||
|
||||
return disk;
|
||||
}
|
||||
@@ -575,10 +569,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
var media = new Models.Logiqx.Media
|
||||
{
|
||||
Name = item.GetName(),
|
||||
MD5 = item.MD5,
|
||||
SHA1 = item.SHA1,
|
||||
SHA256 = item.SHA256,
|
||||
SpamSum = item.SpamSum,
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Media.MD5Key),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key),
|
||||
SHA256 = item.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key),
|
||||
SpamSum = item.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey),
|
||||
};
|
||||
return media;
|
||||
}
|
||||
@@ -626,21 +620,16 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var driver = new Models.Logiqx.Driver
|
||||
{
|
||||
Status = item.Status.AsStringValue<SupportStatus>(),
|
||||
Emulation = item.Emulation.AsStringValue<SupportStatus>(),
|
||||
Cocktail = item.Cocktail.AsStringValue<SupportStatus>(),
|
||||
SaveState = item.SaveState.AsStringValue<Supported>(useSecond: true),
|
||||
Status = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey).AsStringValue<SupportStatus>(),
|
||||
Emulation = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.EmulationKey).AsStringValue<SupportStatus>(),
|
||||
Cocktail = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.CocktailKey).AsStringValue<SupportStatus>(),
|
||||
SaveState = item.GetFieldValue<Supported>(Models.Metadata.Driver.SaveStateKey).AsStringValue<Supported>(useSecond: true),
|
||||
RequiresArtwork = item.GetFieldValue<bool?>(Models.Metadata.Driver.RequiresArtworkKey).FromYesNo(),
|
||||
Unofficial = item.GetFieldValue<bool?>(Models.Metadata.Driver.UnofficialKey).FromYesNo(),
|
||||
NoSoundHardware = item.GetFieldValue<bool?>(Models.Metadata.Driver.NoSoundHardwareKey).FromYesNo(),
|
||||
Incomplete = item.GetFieldValue<bool?>(Models.Metadata.Driver.IncompleteKey).FromYesNo(),
|
||||
};
|
||||
|
||||
if (item.RequiresArtworkSpecified)
|
||||
driver.RequiresArtwork = item.RequiresArtwork.FromYesNo();
|
||||
if (item.UnofficialSpecified)
|
||||
driver.Unofficial = item.Unofficial.FromYesNo();
|
||||
if (item.NoSoundHardwareSpecified)
|
||||
driver.NoSoundHardware = item.NoSoundHardware.FromYesNo();
|
||||
if (item.IncompleteSpecified)
|
||||
driver.Incomplete = item.Incomplete.FromYesNo();
|
||||
|
||||
return driver;
|
||||
}
|
||||
|
||||
@@ -651,13 +640,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var softwarelist = new Models.Logiqx.SoftwareList
|
||||
{
|
||||
Tag = item.Tag,
|
||||
Tag = item.GetFieldValue<string?>(Models.Metadata.SoftwareList.TagKey),
|
||||
Name = item.GetName(),
|
||||
Filter = item.Filter,
|
||||
Filter = item.GetFieldValue<string?>(Models.Metadata.SoftwareList.FilterKey),
|
||||
};
|
||||
|
||||
if (item.StatusSpecified)
|
||||
softwarelist.Status = item.Status.AsStringValue<SoftwareListStatus>();
|
||||
if (item.GetFieldValue<SoftwareListStatus?>(Models.Metadata.SoftwareList.StatusKey) != SoftwareListStatus.None)
|
||||
softwarelist.Status = item.GetFieldValue<SoftwareListStatus>(Models.Metadata.SoftwareList.StatusKey).AsStringValue<SoftwareListStatus>();
|
||||
|
||||
return softwarelist;
|
||||
}
|
||||
|
||||
@@ -366,13 +366,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
|
||||
var item = new Rom
|
||||
{
|
||||
Size = size,
|
||||
CRC = crc.Content,
|
||||
ItemStatus = ItemStatus.None,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, crc.Content);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, size);
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
|
||||
@@ -33,9 +33,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (rom.Size == null || rom.Size < 0)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) < 0)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
if (string.IsNullOrEmpty(rom.CRC))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)))
|
||||
missingFields.Add(Models.Metadata.Rom.CRCKey);
|
||||
break;
|
||||
}
|
||||
@@ -388,7 +388,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var romCRC = new Models.OfflineList.FileRomCRC
|
||||
{
|
||||
Content = item.CRC,
|
||||
Content = item.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
};
|
||||
|
||||
return romCRC;
|
||||
|
||||
@@ -139,34 +139,33 @@ namespace SabreTools.DatFiles.Formats
|
||||
string name = $"{machine.Name}_{index++}{(!string.IsNullOrEmpty(rom.Remark) ? $" {rom.Remark}" : string.Empty)}";
|
||||
var item = new Rom
|
||||
{
|
||||
Offset = dump.Rom?.Start,
|
||||
OpenMSXType = rom.Type,
|
||||
SHA1 = rom.Hash,
|
||||
Remark = rom.Remark,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.OffsetKey, dump.Rom?.Start);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.OpenMSXType, rom.Type);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.RemarkKey, rom.Remark);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.Hash);
|
||||
|
||||
if (dump.Original != null)
|
||||
{
|
||||
item.Original = new Original
|
||||
item.SetFieldValue<Original?>("ORIGINAL", new Original
|
||||
{
|
||||
Value = dump.Original.Value.AsYesNo(),
|
||||
Content = dump.Original.Content,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
switch (dump.Rom)
|
||||
{
|
||||
case Models.OpenMSX.Rom:
|
||||
item.OpenMSXSubType = OpenMSXSubType.Rom;
|
||||
item.SetFieldValue<OpenMSXSubType>(Models.Metadata.Rom.OpenMSXMediaType, OpenMSXSubType.Rom);
|
||||
break;
|
||||
case Models.OpenMSX.MegaRom:
|
||||
item.OpenMSXSubType = OpenMSXSubType.MegaRom;
|
||||
item.SetFieldValue<OpenMSXSubType>(Models.Metadata.Rom.OpenMSXMediaType, OpenMSXSubType.MegaRom);
|
||||
break;
|
||||
case Models.OpenMSX.SCCPlusCart:
|
||||
item.OpenMSXSubType = OpenMSXSubType.SCCPlusCart;
|
||||
item.SetFieldValue<OpenMSXSubType>(Models.Metadata.Rom.OpenMSXMediaType, OpenMSXSubType.SCCPlusCart);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.SHA1))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
break;
|
||||
}
|
||||
@@ -151,24 +151,24 @@ namespace SabreTools.DatFiles.Formats
|
||||
private static Models.OpenMSX.Dump CreateDump(Rom item)
|
||||
{
|
||||
Models.OpenMSX.Original? original = null;
|
||||
if (item.OriginalSpecified && item.Original != null)
|
||||
if (item.OriginalSpecified && item.GetFieldValue<Original?>("ORIGINAL") != null)
|
||||
{
|
||||
original = new Models.OpenMSX.Original { Content = item.Original.Content };
|
||||
if (item.Original.Value != null)
|
||||
original.Value = item.Original.Value.ToString();
|
||||
original = new Models.OpenMSX.Original { Content = item.GetFieldValue<Original?>("ORIGINAL")!.Content };
|
||||
if (item.GetFieldValue<Original?>("ORIGINAL")!.Value != null)
|
||||
original.Value = item.GetFieldValue<Original?>("ORIGINAL")!.Value.ToString();
|
||||
}
|
||||
|
||||
Models.OpenMSX.RomBase rom = item.OpenMSXSubType switch
|
||||
Models.OpenMSX.RomBase rom = item.GetFieldValue<OpenMSXSubType>(Models.Metadata.Rom.OpenMSXMediaType) switch
|
||||
{
|
||||
OpenMSXSubType.MegaRom => new Models.OpenMSX.MegaRom(),
|
||||
OpenMSXSubType.SCCPlusCart => new Models.OpenMSX.SCCPlusCart(),
|
||||
_ => new Models.OpenMSX.Rom(),
|
||||
};
|
||||
|
||||
rom.Start = item.Offset;
|
||||
rom.Type = item.OpenMSXType;
|
||||
rom.Hash = item.SHA1;
|
||||
rom.Remark = item.Remark;
|
||||
rom.Start = item.GetFieldValue<string?>(Models.Metadata.Rom.OffsetKey);
|
||||
rom.Type = item.GetFieldValue<string?>(Models.Metadata.Rom.OpenMSXType);
|
||||
rom.Hash = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key);
|
||||
rom.Remark = item.GetFieldValue<string?>(Models.Metadata.Rom.RemarkKey);
|
||||
|
||||
var dump = new Models.OpenMSX.Dump
|
||||
{
|
||||
|
||||
@@ -107,27 +107,27 @@ namespace SabreTools.DatFiles.Formats
|
||||
|
||||
foreach (var rom in games.Rom)
|
||||
{
|
||||
var item = new Rom
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(rom.RomSize),
|
||||
CRC = rom.RomCRC,
|
||||
MergeTag = rom.MergeName,
|
||||
ItemStatus = ItemStatus.None,
|
||||
|
||||
Machine = new Machine
|
||||
var machine = new Machine
|
||||
{
|
||||
Name = rom.GameName,
|
||||
Description = rom.GameDescription,
|
||||
CloneOf = rom.ParentName,
|
||||
//CloneOfDescription = rom.ParentDescription, // TODO: Add to internal model or find mapping
|
||||
RomOf = rom.RomOf,
|
||||
},
|
||||
};
|
||||
|
||||
var item = new Rom
|
||||
{
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(rom.RomName);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, rom.RomCRC);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.MergeKey, rom.MergeName);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(rom.RomSize));
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
|
||||
|
||||
// Now process and add the item
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,9 +33,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.CRC))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)))
|
||||
missingFields.Add(Models.Metadata.Rom.CRCKey);
|
||||
if (!rom.SizeSpecified)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
break;
|
||||
}
|
||||
@@ -188,10 +188,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
GameName = item.Machine.Name,
|
||||
GameDescription = item.Machine.Description,
|
||||
RomName = item.GetName(),
|
||||
RomCRC = item.CRC,
|
||||
RomSize = item.Size?.ToString(),
|
||||
RomCRC = item.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
RomSize = item.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
RomOf = item.Machine.RomOf,
|
||||
MergeName = item.MergeTag,
|
||||
MergeName = item.GetFieldValue<string?>(Models.Metadata.Rom.MergeKey),
|
||||
};
|
||||
return rom;
|
||||
}
|
||||
|
||||
@@ -84,43 +84,40 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Disk:
|
||||
item = new Disk
|
||||
{
|
||||
MD5 = row.MD5,
|
||||
SHA1 = row.SHA1,
|
||||
ItemStatus = row.Status.AsEnumValue<ItemStatus>(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(row.DiskName);
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, row.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, row.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, row.SHA1);
|
||||
break;
|
||||
|
||||
case ItemType.Media:
|
||||
item = new Media
|
||||
{
|
||||
MD5 = row.MD5,
|
||||
SHA1 = row.SHA1,
|
||||
SHA256 = row.SHA256,
|
||||
SpamSum = row.SpamSum,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(row.DiskName);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.MD5Key, row.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SHA1Key, row.SHA1);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SHA256Key, row.SHA256);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SpamSumKey, row.SpamSum);
|
||||
break;
|
||||
|
||||
case ItemType.Rom:
|
||||
item = new Rom
|
||||
{
|
||||
CRC = row.CRC,
|
||||
MD5 = row.MD5,
|
||||
SHA1 = row.SHA1,
|
||||
SHA256 = row.SHA256,
|
||||
SHA384 = row.SHA384,
|
||||
SHA512 = row.SHA512,
|
||||
SpamSum = row.SpamSum,
|
||||
ItemStatus = row.Status.AsEnumValue<ItemStatus>(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(row.RomName);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, row.CRC);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, row.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, row.SHA1);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, row.SHA256);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, row.SHA384);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, row.SHA512);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, row.SpamSum);
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, row.Status.AsEnumValue<ItemStatus>());
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -36,23 +36,23 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem)
|
||||
{
|
||||
case Disk disk:
|
||||
if (string.IsNullOrEmpty(disk.MD5)
|
||||
&& string.IsNullOrEmpty(disk.SHA1))
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key))
|
||||
&& string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Disk.SHA1Key);
|
||||
}
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (rom.Size == null || rom.Size < 0)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) < 0)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
if (string.IsNullOrEmpty(rom.CRC)
|
||||
&& string.IsNullOrEmpty(rom.MD5)
|
||||
&& string.IsNullOrEmpty(rom.SHA1)
|
||||
&& string.IsNullOrEmpty(rom.SHA256)
|
||||
&& string.IsNullOrEmpty(rom.SHA384)
|
||||
&& string.IsNullOrEmpty(rom.SHA512)
|
||||
&& string.IsNullOrEmpty(rom.SpamSum))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
}
|
||||
@@ -164,18 +164,18 @@ namespace SabreTools.DatFiles.Formats
|
||||
Description = Header.Description,
|
||||
GameName = disk.Machine.Name,
|
||||
GameDescription = disk.Machine.Description,
|
||||
Type = disk.ItemType.AsStringValue<ItemType>(),
|
||||
Type = disk.GetFieldValue<ItemType>(Models.Metadata.Disk.TypeKey).AsStringValue<ItemType>(),
|
||||
RomName = string.Empty,
|
||||
DiskName = disk.GetName(),
|
||||
Size = string.Empty,
|
||||
CRC = string.Empty,
|
||||
MD5 = disk.MD5,
|
||||
SHA1 = disk.SHA1,
|
||||
MD5 = disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key),
|
||||
SHA1 = disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key),
|
||||
SHA256 = string.Empty,
|
||||
SHA384 = string.Empty,
|
||||
SHA512 = string.Empty,
|
||||
SpamSum = string.Empty,
|
||||
Status = disk.ItemStatus.AsStringValue<ItemStatus>(useSecond: false),
|
||||
Status = disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey).AsStringValue<ItemStatus>(useSecond: false),
|
||||
};
|
||||
return row;
|
||||
}
|
||||
@@ -197,12 +197,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
DiskName = media.GetName(),
|
||||
Size = string.Empty,
|
||||
CRC = string.Empty,
|
||||
MD5 = media.MD5,
|
||||
SHA1 = media.SHA1,
|
||||
SHA256 = media.SHA256,
|
||||
MD5 = media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key),
|
||||
SHA1 = media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key),
|
||||
SHA256 = media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key),
|
||||
SHA384 = string.Empty,
|
||||
SHA512 = string.Empty,
|
||||
SpamSum = media.SpamSum,
|
||||
SpamSum = media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey),
|
||||
Status = string.Empty,
|
||||
};
|
||||
return row;
|
||||
@@ -223,15 +223,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
Type = rom.ItemType.AsStringValue<ItemType>(),
|
||||
RomName = rom.GetName(),
|
||||
DiskName = string.Empty,
|
||||
Size = rom.Size?.ToString(),
|
||||
CRC = rom.CRC,
|
||||
MD5 = rom.MD5,
|
||||
SHA1 = rom.SHA1,
|
||||
SHA256 = rom.SHA256,
|
||||
SHA384 = rom.SHA384,
|
||||
SHA512 = rom.SHA512,
|
||||
SpamSum = rom.SpamSum,
|
||||
Status = rom.ItemStatus.AsStringValue<ItemStatus>(useSecond: false),
|
||||
Size = rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
CRC = rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
MD5 = rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key),
|
||||
SHA1 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
SHA256 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key),
|
||||
SHA384 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key),
|
||||
SHA512 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key),
|
||||
SpamSum = rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey),
|
||||
Status = rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey).AsStringValue<ItemStatus>(useSecond: false),
|
||||
};
|
||||
return row;
|
||||
}
|
||||
|
||||
@@ -106,11 +106,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var infoItem = new Info
|
||||
{
|
||||
Value = info.Value,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
infoItem.SetName(info.Name);
|
||||
infoItem.SetFieldValue<string?>(Models.Metadata.Info.ValueKey, info.Value);
|
||||
|
||||
infoItem.CopyMachineInformation(machine);
|
||||
ParseAddHelper(infoItem, statsOnly);
|
||||
@@ -121,11 +120,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var sharedfeatItem = new SharedFeature
|
||||
{
|
||||
Value = sharedfeat.Value,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
sharedfeatItem.SetName(sharedfeat.Name);
|
||||
sharedfeatItem.SetFieldValue<string?>(Models.Metadata.SharedFeat.ValueKey, sharedfeat.Value);
|
||||
|
||||
sharedfeatItem.CopyMachineInformation(machine);
|
||||
ParseAddHelper(sharedfeatItem, statsOnly);
|
||||
@@ -169,12 +167,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Part
|
||||
{
|
||||
Interface = part.Interface,
|
||||
Features = CreateFeatures(part.Feature, machine, filename, indexId, statsOnly),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(part.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Part.InterfaceKey, part.Interface);
|
||||
item.SetFieldValue<PartFeature[]?>(Models.Metadata.Part.FeatureKey, CreateFeatures(part.Feature, machine, filename, indexId, statsOnly));
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
|
||||
@@ -192,7 +189,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
/// <param name="filename">Name of the file to be parsed</param>
|
||||
/// <param name="indexId">Index ID for the DAT</param>
|
||||
/// <param name="statsOnly">True to only add item statistics while parsing, false otherwise</param>
|
||||
private static List<PartFeature>? CreateFeatures(Models.SoftwareList.Feature[]? features, Machine machine, string filename, int indexId, bool statsOnly)
|
||||
private static PartFeature[]? CreateFeatures(Models.SoftwareList.Feature[]? features, Machine machine, string filename, int indexId, bool statsOnly)
|
||||
{
|
||||
// If the feature array is missing, we can't do anything
|
||||
if (features == null || !features.Any())
|
||||
@@ -203,17 +200,16 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new PartFeature
|
||||
{
|
||||
Value = feature.Value,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(feature.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Feature.ValueKey, feature.Value);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
partFeatures.Add(item);
|
||||
}
|
||||
|
||||
return partFeatures;
|
||||
return [.. partFeatures];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -236,13 +232,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new DataArea
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(dataarea.Size),
|
||||
Width = NumberHelper.ConvertToInt64(dataarea.Width),
|
||||
Endianness = dataarea.Endianness.AsEnumValue<Endianness>(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(dataarea.Name);
|
||||
item.SetFieldValue<Endianness?>(Models.Metadata.DataArea.EndiannessKey, dataarea.Endianness.AsEnumValue<Endianness>());
|
||||
item.SetFieldValue<long?>(Models.Metadata.DataArea.SizeKey, NumberHelper.ConvertToInt64(dataarea.Size));
|
||||
item.SetFieldValue<long?>(Models.Metadata.DataArea.WidthKey, NumberHelper.ConvertToInt64(dataarea.Width));
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ConvertRoms(dataarea.Rom, part, item, machine, filename, indexId, statsOnly, ref containsItems);
|
||||
@@ -271,20 +266,18 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Rom
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(rom.Size ?? rom.Length),
|
||||
CRC = rom.CRC,
|
||||
SHA1 = rom.SHA1,
|
||||
Offset = rom.Offset,
|
||||
Value = rom.Value,
|
||||
ItemStatus = rom.Status.AsEnumValue<ItemStatus>(),
|
||||
LoadFlag = rom.LoadFlag.AsEnumValue<LoadFlag>(),
|
||||
|
||||
Part = part,
|
||||
DataArea = dataarea,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(rom.Name);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(rom.Size ?? rom.Length));
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, rom.CRC);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.SHA1);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.OffsetKey, rom.Offset);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.ValueKey, rom.Value);
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, rom.Status.AsEnumValue<ItemStatus>());
|
||||
item.SetFieldValue<LoadFlag>(Models.Metadata.Rom.LoadFlagKey, rom.LoadFlag.AsEnumValue<LoadFlag>());
|
||||
item.SetFieldValue<Part?>("PART", part);
|
||||
item.SetFieldValue<DataArea?>("DATAAREA", dataarea);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -342,17 +335,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Disk
|
||||
{
|
||||
MD5 = disk.MD5,
|
||||
SHA1 = disk.SHA1,
|
||||
ItemStatus = disk.Status.AsEnumValue<ItemStatus>(),
|
||||
Writable = disk.Writeable.AsYesNo(),
|
||||
|
||||
Part = part,
|
||||
DiskArea = diskarea,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(disk.Name);
|
||||
item.SetFieldValue<DiskArea?>("DISKAREA", diskarea);
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, disk.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, disk.MD5);
|
||||
item.SetFieldValue<Part?>("PART", part);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, disk.SHA1);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Disk.WritableKey, disk.Writeable.AsYesNo());
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -379,15 +370,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new DipSwitch
|
||||
{
|
||||
Tag = dipswitch.Tag,
|
||||
Mask = dipswitch.Mask,
|
||||
Values = CreateDipValues(dipswitch.DipValue, machine, filename, indexId),
|
||||
|
||||
Part = part,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(dipswitch.Name);
|
||||
item.SetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey, CreateDipValues(dipswitch.DipValue, machine, filename, indexId)?.ToArray());
|
||||
item.SetFieldValue<Part?>("PART", part);
|
||||
item.SetFieldValue<string?>(Models.Metadata.DipSwitch.MaskKey, dipswitch.Mask);
|
||||
item.SetFieldValue<string?>(Models.Metadata.DipSwitch.TagKey, dipswitch.Tag);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -412,12 +401,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new DipValue
|
||||
{
|
||||
Value = dipvalue.Value,
|
||||
Default = dipvalue.Default.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(dipvalue.Name);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.DipValue.DefaultKey, dipvalue.Default.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.DipValue.ValueKey, dipvalue.Value);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
settings.Add(item);
|
||||
|
||||
@@ -41,22 +41,22 @@ namespace SabreTools.DatFiles.Formats
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string.IsNullOrEmpty(dipSwitch.Part!.GetName()))
|
||||
if (string.IsNullOrEmpty(dipSwitch.GetFieldValue<Part?>("PART")!.GetName()))
|
||||
missingFields.Add(Models.Metadata.Part.NameKey);
|
||||
if (string.IsNullOrEmpty(dipSwitch.Part.Interface))
|
||||
if (string.IsNullOrEmpty(dipSwitch.GetFieldValue<Part?>("PART")!.GetFieldValue<string?>(Models.Metadata.Part.InterfaceKey)))
|
||||
missingFields.Add(Models.Metadata.Part.InterfaceKey);
|
||||
}
|
||||
if (string.IsNullOrEmpty(dipSwitch.GetName()))
|
||||
missingFields.Add(Models.Metadata.DipSwitch.NameKey);
|
||||
if (string.IsNullOrEmpty(dipSwitch.Tag))
|
||||
if (string.IsNullOrEmpty(dipSwitch.GetFieldValue<string?>(Models.Metadata.DipSwitch.TagKey)))
|
||||
missingFields.Add(Models.Metadata.DipSwitch.TagKey);
|
||||
if (string.IsNullOrEmpty(dipSwitch.Mask))
|
||||
if (string.IsNullOrEmpty(dipSwitch.GetFieldValue<string?>(Models.Metadata.DipSwitch.MaskKey)))
|
||||
missingFields.Add(Models.Metadata.DipSwitch.MaskKey);
|
||||
if (dipSwitch.ValuesSpecified)
|
||||
{
|
||||
if (dipSwitch.Values!.Any(dv => string.IsNullOrEmpty(dv.GetName())))
|
||||
if (dipSwitch.GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey)!.Any(dv => string.IsNullOrEmpty(dv.GetName())))
|
||||
missingFields.Add(Models.Metadata.DipValue.NameKey);
|
||||
if (dipSwitch.Values!.Any(dv => string.IsNullOrEmpty(dv.Value)))
|
||||
if (dipSwitch.GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey)!.Any(dv => string.IsNullOrEmpty(dv.GetFieldValue<string?>(Models.Metadata.DipValue.ValueKey))))
|
||||
missingFields.Add(Models.Metadata.DipValue.ValueKey);
|
||||
}
|
||||
|
||||
@@ -70,9 +70,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string.IsNullOrEmpty(disk.Part!.GetName()))
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<Part?>("PART")!.GetName()))
|
||||
missingFields.Add(Models.Metadata.Part.NameKey);
|
||||
if (string.IsNullOrEmpty(disk.Part.Interface))
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<Part?>("PART")!.GetFieldValue<string?>(Models.Metadata.Part.InterfaceKey)))
|
||||
missingFields.Add(Models.Metadata.Part.InterfaceKey);
|
||||
}
|
||||
if (!disk.DiskAreaSpecified)
|
||||
@@ -81,7 +81,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string.IsNullOrEmpty(disk.DiskArea!.GetName()))
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<DiskArea?>("DISKAREA")!.GetName()))
|
||||
missingFields.Add(Models.Metadata.DiskArea.NameKey);
|
||||
}
|
||||
if (string.IsNullOrEmpty(disk.GetName()))
|
||||
@@ -101,9 +101,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string.IsNullOrEmpty(rom.Part!.GetName()))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<Part?>("PART")!.GetName()))
|
||||
missingFields.Add(Models.Metadata.Part.NameKey);
|
||||
if (string.IsNullOrEmpty(rom.Part.Interface))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<Part?>("PART")!.GetFieldValue<string?>(Models.Metadata.Part.InterfaceKey)))
|
||||
missingFields.Add(Models.Metadata.Part.InterfaceKey);
|
||||
}
|
||||
if (!rom.DataAreaSpecified)
|
||||
@@ -113,9 +113,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string.IsNullOrEmpty(rom.DataArea!.GetName()))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<DataArea?>("DATAAREA")!.GetName()))
|
||||
missingFields.Add(Models.Metadata.DataArea.NameKey);
|
||||
if (!rom.DataArea.SizeSpecified)
|
||||
if (rom.GetFieldValue<DataArea?>("DATAAREA")!.GetFieldValue<long?>(Models.Metadata.DataArea.SizeKey) == null)
|
||||
missingFields.Add(Models.Metadata.DataArea.SizeKey);
|
||||
}
|
||||
break;
|
||||
@@ -279,7 +279,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
var info = new Models.SoftwareList.Info
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Value = item.Value,
|
||||
Value = item.GetFieldValue<string?>(Models.Metadata.Info.ValueKey),
|
||||
};
|
||||
return info;
|
||||
}
|
||||
@@ -292,7 +292,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
var sharedfeat = new Models.SoftwareList.SharedFeat
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Value = item.Value,
|
||||
Value = item.GetFieldValue<string?>(Models.Metadata.SharedFeat.ValueKey),
|
||||
};
|
||||
return sharedfeat;
|
||||
}
|
||||
@@ -304,9 +304,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var part = new Models.SoftwareList.Part
|
||||
{
|
||||
Name = item.Part?.GetName(),
|
||||
Interface = item.Part?.Interface,
|
||||
Feature = CreateFeatures(item.Part?.Features),
|
||||
Name = item.GetFieldValue<Part?>("PART")?.GetName(),
|
||||
Interface = item.GetFieldValue<Part?>("PART")?.GetFieldValue<string?>(Models.Metadata.Part.InterfaceKey),
|
||||
Feature = CreateFeatures(item.GetFieldValue<Part?>("PART")?.GetFieldValue<PartFeature[]?>(Models.Metadata.Part.FeatureKey)),
|
||||
DataArea = CreateDataAreas(item),
|
||||
DiskArea = null,
|
||||
DipSwitch = null,
|
||||
@@ -321,9 +321,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var part = new Models.SoftwareList.Part
|
||||
{
|
||||
Name = item.Part?.GetName(),
|
||||
Interface = item.Part?.Interface,
|
||||
Feature = CreateFeatures(item.Part?.Features),
|
||||
Name = item.GetFieldValue<Part?>("PART")?.GetName(),
|
||||
Interface = item.GetFieldValue<Part?>("PART")?.GetFieldValue<string?>(Models.Metadata.Part.InterfaceKey),
|
||||
Feature = CreateFeatures(item.GetFieldValue<Part?>("PART")?.GetFieldValue<PartFeature[]?>(Models.Metadata.Part.FeatureKey)),
|
||||
DataArea = null,
|
||||
DiskArea = CreateDiskAreas(item),
|
||||
DipSwitch = null,
|
||||
@@ -338,9 +338,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var part = new Models.SoftwareList.Part
|
||||
{
|
||||
Name = item.Part?.GetName(),
|
||||
Interface = item.Part?.Interface,
|
||||
Feature = CreateFeatures(item.Part?.Features),
|
||||
Name = item.GetFieldValue<Part?>("PART")?.GetName(),
|
||||
Interface = item.GetFieldValue<Part?>("PART")?.GetFieldValue<string?>(Models.Metadata.Part.InterfaceKey),
|
||||
Feature = CreateFeatures(item.GetFieldValue<Part?>("PART")?.GetFieldValue<PartFeature[]?>(Models.Metadata.Part.FeatureKey)),
|
||||
DataArea = null,
|
||||
DiskArea = null,
|
||||
DipSwitch = CreateDipSwitches(item),
|
||||
@@ -351,7 +351,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
/// <summary>
|
||||
/// Create a Feature array from the current list of PartFeature DatItems
|
||||
/// <summary>
|
||||
private static Models.SoftwareList.Feature[]? CreateFeatures(List<PartFeature>? items)
|
||||
private static Models.SoftwareList.Feature[]? CreateFeatures(PartFeature[]? items)
|
||||
{
|
||||
// If we don't have features, we can't do anything
|
||||
if (items == null || !items.Any())
|
||||
@@ -363,7 +363,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
var feature = new Models.SoftwareList.Feature
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Value = item.Value,
|
||||
Value = item.GetFieldValue<string?>(Models.Metadata.Feature.ValueKey),
|
||||
};
|
||||
features.Add(feature);
|
||||
}
|
||||
@@ -378,10 +378,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var dataArea = new Models.SoftwareList.DataArea
|
||||
{
|
||||
Name = item.DataArea?.GetName(),
|
||||
Size = item.DataArea?.Size?.ToString(),
|
||||
Width = item.DataArea?.Width?.ToString(),
|
||||
Endianness = item.DataArea?.Endianness.AsStringValue<Endianness>(),
|
||||
Name = item.GetFieldValue<DataArea?>("DATAAREA")?.GetName(),
|
||||
Size = item.GetFieldValue<DataArea?>("DATAAREA")?.GetFieldValue<long?>(Models.Metadata.DataArea.SizeKey)?.ToString(),
|
||||
Width = item.GetFieldValue<DataArea?>("DATAAREA")?.GetFieldValue<long?>(Models.Metadata.DataArea.WidthKey)?.ToString(),
|
||||
Endianness = item.GetFieldValue<DataArea?>("DATAAREA")?.GetFieldValue<Endianness>(Models.Metadata.DataArea.EndiannessKey).AsStringValue<Endianness>(),
|
||||
Rom = CreateRom(item),
|
||||
};
|
||||
return [dataArea];
|
||||
@@ -395,14 +395,14 @@ namespace SabreTools.DatFiles.Formats
|
||||
var rom = new Models.SoftwareList.Rom
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Size = item.Size?.ToString(),
|
||||
Size = item.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
Length = null,
|
||||
CRC = item.CRC,
|
||||
SHA1 = item.SHA1,
|
||||
Offset = item.Offset,
|
||||
Value = item.Value,
|
||||
Status = item.ItemStatus.AsStringValue<ItemStatus>(useSecond: false),
|
||||
LoadFlag = item.LoadFlag.AsStringValue<LoadFlag>(),
|
||||
CRC = item.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
Offset = item.GetFieldValue<string?>(Models.Metadata.Rom.OffsetKey),
|
||||
Value = item.GetFieldValue<string?>(Models.Metadata.Rom.ValueKey),
|
||||
Status = item.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey).AsStringValue<ItemStatus>(useSecond: false),
|
||||
LoadFlag = item.GetFieldValue<LoadFlag>(Models.Metadata.Rom.LoadFlagKey).AsStringValue<LoadFlag>(),
|
||||
};
|
||||
return [rom];
|
||||
}
|
||||
@@ -427,10 +427,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
var disk = new Models.SoftwareList.Disk
|
||||
{
|
||||
Name = item.GetName(),
|
||||
MD5 = item.MD5,
|
||||
SHA1 = item.SHA1,
|
||||
Status = item.ItemStatus.AsStringValue<ItemStatus>(useSecond: false),
|
||||
Writeable = item.Writable?.ToString(),
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key),
|
||||
Status = item.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey).AsStringValue<ItemStatus>(useSecond: false),
|
||||
Writeable = item.GetFieldValue<bool?>(Models.Metadata.Disk.WritableKey)?.ToString(),
|
||||
};
|
||||
return [disk];
|
||||
}
|
||||
@@ -441,13 +441,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
private static Models.SoftwareList.DipSwitch[]? CreateDipSwitches(DipSwitch item)
|
||||
{
|
||||
var dipValues = new List<Models.SoftwareList.DipValue>();
|
||||
foreach (var setting in item.Values ?? [])
|
||||
foreach (var setting in item.GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey) ?? [])
|
||||
{
|
||||
var dipValue = new Models.SoftwareList.DipValue
|
||||
{
|
||||
Name = setting.GetName(),
|
||||
Value = setting.Value,
|
||||
Default = setting.Default?.ToString(),
|
||||
Value = setting.GetFieldValue<string?>(Models.Metadata.DipValue.ValueKey),
|
||||
Default = setting.GetFieldValue<bool?>(Models.Metadata.DipValue.DefaultKey).FromYesNo(),
|
||||
};
|
||||
|
||||
dipValues.Add(dipValue);
|
||||
|
||||
@@ -229,40 +229,40 @@ namespace SabreTools.DatFiles
|
||||
switch (item)
|
||||
{
|
||||
case Disk disk:
|
||||
if (disk.ItemStatus != ItemStatus.Nodump)
|
||||
if (disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump)
|
||||
{
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : 1);
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)) ? 0 : 1);
|
||||
}
|
||||
|
||||
AddStatusCount(ItemStatus.BadDump, disk.ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Good, disk.ItemStatus == ItemStatus.Good ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Nodump, disk.ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Verified, disk.ItemStatus == ItemStatus.Verified ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.BadDump, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.BadDump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Good, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Good ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Nodump, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Verified, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Verified ? 1 : 0);
|
||||
break;
|
||||
case Media media:
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.MD5) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(media.SHA1) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(media.SHA256) ? 0 : 1);
|
||||
AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.SpamSum) ? 0 : 1);
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey)) ? 0 : 1);
|
||||
break;
|
||||
case Rom rom:
|
||||
if (rom.ItemStatus != ItemStatus.Nodump)
|
||||
if (rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump)
|
||||
{
|
||||
TotalSize += rom.Size ?? 0;
|
||||
AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.CRC) ? 0 : 1);
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.MD5) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.SHA1) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.SHA256) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.SHA384) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.SHA512) ? 0 : 1);
|
||||
AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.SpamSum) ? 0 : 1);
|
||||
TotalSize += rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) ?? 0;
|
||||
AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)) ? 0 : 1);
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1);
|
||||
}
|
||||
|
||||
AddStatusCount(ItemStatus.BadDump, rom.ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Good, rom.ItemStatus == ItemStatus.Good ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Nodump, rom.ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Verified, rom.ItemStatus == ItemStatus.Verified ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.BadDump, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.BadDump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Good, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Good ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Nodump, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Verified, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Verified ? 1 : 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -510,40 +510,40 @@ namespace SabreTools.DatFiles
|
||||
switch (item)
|
||||
{
|
||||
case Disk disk:
|
||||
if (disk.ItemStatus != ItemStatus.Nodump)
|
||||
if (disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump)
|
||||
{
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : 1);
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)) ? 0 : 1);
|
||||
}
|
||||
|
||||
RemoveStatusCount(ItemStatus.BadDump, disk.ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Good, disk.ItemStatus == ItemStatus.Good ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Nodump, disk.ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Verified, disk.ItemStatus == ItemStatus.Verified ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.BadDump, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.BadDump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Good, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Good ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Nodump, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Verified, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Verified ? 1 : 0);
|
||||
break;
|
||||
case Media media:
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.MD5) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(media.SHA1) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(media.SHA256) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.SpamSum) ? 0 : 1);
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey)) ? 0 : 1);
|
||||
break;
|
||||
case Rom rom:
|
||||
if (rom.ItemStatus != ItemStatus.Nodump)
|
||||
if (rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump)
|
||||
{
|
||||
TotalSize -= rom.Size ?? 0;
|
||||
RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.CRC) ? 0 : 1);
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.MD5) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.SHA1) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.SHA256) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.SHA384) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.SHA512) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.SpamSum) ? 0 : 1);
|
||||
TotalSize -= rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) ?? 0;
|
||||
RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1);
|
||||
}
|
||||
|
||||
RemoveStatusCount(ItemStatus.BadDump, rom.ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Good, rom.ItemStatus == ItemStatus.Good ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Nodump, rom.ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Verified, rom.ItemStatus == ItemStatus.Verified ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.BadDump, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.BadDump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Good, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Good ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Nodump, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Verified, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Verified ? 1 : 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -346,40 +346,40 @@ namespace SabreTools.DatFiles
|
||||
switch (item)
|
||||
{
|
||||
case Disk disk:
|
||||
if (disk.ItemStatus != ItemStatus.Nodump)
|
||||
if (disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump)
|
||||
{
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : 1);
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)) ? 0 : 1);
|
||||
}
|
||||
|
||||
AddStatusCount(ItemStatus.BadDump, disk.ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Good, disk.ItemStatus == ItemStatus.Good ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Nodump, disk.ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Verified, disk.ItemStatus == ItemStatus.Verified ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.BadDump, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.BadDump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Good, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Good ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Nodump, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Verified, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Verified ? 1 : 0);
|
||||
break;
|
||||
case Media media:
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.MD5) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(media.SHA1) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(media.SHA256) ? 0 : 1);
|
||||
AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.SpamSum) ? 0 : 1);
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey)) ? 0 : 1);
|
||||
break;
|
||||
case Rom rom:
|
||||
if (rom.ItemStatus != ItemStatus.Nodump)
|
||||
if (rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump)
|
||||
{
|
||||
TotalSize += rom.Size ?? 0;
|
||||
AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.CRC) ? 0 : 1);
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.MD5) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.SHA1) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.SHA256) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.SHA384) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.SHA512) ? 0 : 1);
|
||||
AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.SpamSum) ? 0 : 1);
|
||||
TotalSize += rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) ?? 0;
|
||||
AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)) ? 0 : 1);
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1);
|
||||
}
|
||||
|
||||
AddStatusCount(ItemStatus.BadDump, rom.ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Good, rom.ItemStatus == ItemStatus.Good ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Nodump, rom.ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Verified, rom.ItemStatus == ItemStatus.Verified ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.BadDump, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.BadDump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Good, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Good ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Nodump, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Verified, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Verified ? 1 : 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -654,40 +654,40 @@ namespace SabreTools.DatFiles
|
||||
switch (item)
|
||||
{
|
||||
case Disk disk:
|
||||
if (disk.ItemStatus != ItemStatus.Nodump)
|
||||
if (disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump)
|
||||
{
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : 1);
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)) ? 0 : 1);
|
||||
}
|
||||
|
||||
RemoveStatusCount(ItemStatus.BadDump, disk.ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Good, disk.ItemStatus == ItemStatus.Good ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Nodump, disk.ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Verified, disk.ItemStatus == ItemStatus.Verified ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.BadDump, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.BadDump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Good, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Good ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Nodump, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Verified, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Verified ? 1 : 0);
|
||||
break;
|
||||
case Media media:
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.MD5) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(media.SHA1) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(media.SHA256) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.SpamSum) ? 0 : 1);
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey)) ? 0 : 1);
|
||||
break;
|
||||
case Rom rom:
|
||||
if (rom.ItemStatus != ItemStatus.Nodump)
|
||||
if (rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump)
|
||||
{
|
||||
TotalSize -= rom.Size ?? 0;
|
||||
RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.CRC) ? 0 : 1);
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.MD5) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.SHA1) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.SHA256) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.SHA384) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.SHA512) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.SpamSum) ? 0 : 1);
|
||||
TotalSize -= rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) ?? 0;
|
||||
RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1);
|
||||
}
|
||||
|
||||
RemoveStatusCount(ItemStatus.BadDump, rom.ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Good, rom.ItemStatus == ItemStatus.Good ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Nodump, rom.ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Verified, rom.ItemStatus == ItemStatus.Verified ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.BadDump, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.BadDump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Good, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Good ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Nodump, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Verified, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Verified ? 1 : 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
86
SabreTools.DatFiles/MetadataConverter.cs
Normal file
86
SabreTools.DatFiles/MetadataConverter.cs
Normal file
@@ -0,0 +1,86 @@
|
||||
using System.Linq;
|
||||
using SabreTools.DatItems;
|
||||
using SabreTools.Filter;
|
||||
|
||||
namespace SabreTools.DatFiles
|
||||
{
|
||||
public static class MetadataConverter
|
||||
{
|
||||
#region Converters
|
||||
|
||||
/// <summary>
|
||||
/// Convert metadata information
|
||||
/// </summary>
|
||||
/// <param name="item">Metadata file to convert</param>
|
||||
/// <param name="filename">Name of the file to be parsed</param>
|
||||
/// <param name="indexId">Index ID for the DAT</param>
|
||||
/// <param name="statsOnly">True to only add item statistics while parsing, false otherwise</param>
|
||||
public static void ConvertMetadata(Models.Metadata.MetadataFile? item, string filename, int indexId, bool statsOnly)
|
||||
{
|
||||
// If the metadata file is invalid, we can't do anything
|
||||
if (item == null || !item.Any())
|
||||
return;
|
||||
|
||||
// Get the machines from the metadata
|
||||
var machines = item.Read<Models.Metadata.Machine[]>(Models.Metadata.MetadataFile.MachineKey);
|
||||
if (machines == null)
|
||||
return;
|
||||
|
||||
// Loop through the machines and add
|
||||
foreach (var machine in machines)
|
||||
{
|
||||
ConvertMachine(machine, filename, indexId, statsOnly);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert machine information
|
||||
/// </summary>
|
||||
/// <param name="metadata">Metadata file to convert</param>
|
||||
/// <param name="filename">Name of the file to be parsed</param>
|
||||
/// <param name="indexId">Index ID for the DAT</param>
|
||||
/// <param name="statsOnly">True to only add item statistics while parsing, false otherwise</param>
|
||||
private static void ConvertMachine(Models.Metadata.Machine? item, string filename, int indexId, bool statsOnly)
|
||||
{
|
||||
// If the machine is invalid, we can't do anything
|
||||
if (item == null || !item.Any())
|
||||
return;
|
||||
|
||||
// Create an internal machine
|
||||
var machine = new Machine(item);
|
||||
|
||||
// Process all possible items
|
||||
/*
|
||||
AdjusterKey
|
||||
ArchiveKey
|
||||
BiosSetKey
|
||||
ChipKey
|
||||
ConfigurationKey
|
||||
DeviceKey
|
||||
DeviceRefKey
|
||||
DipSwitchKey
|
||||
DiskKey
|
||||
DisplayKey
|
||||
DriverKey
|
||||
DumpKey
|
||||
FeatureKey
|
||||
InfoKey
|
||||
InputKey
|
||||
MediaKey
|
||||
PartKey
|
||||
PortKey
|
||||
RamOptionKey
|
||||
ReleaseKey
|
||||
RomKey
|
||||
SampleKey
|
||||
SharedFeatKey
|
||||
SoftwareListKey
|
||||
SoundKey
|
||||
TruripKey
|
||||
VideoKey
|
||||
*/
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -263,7 +263,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (configuration.ConditionsSpecified)
|
||||
{
|
||||
foreach (Condition subCondition in configuration.Conditions!)
|
||||
foreach (Condition subCondition in configuration.GetFieldValue<Condition[]?>(Models.Metadata.Configuration.ConditionKey)!)
|
||||
{
|
||||
SetFields(subCondition);
|
||||
}
|
||||
@@ -271,7 +271,7 @@ namespace SabreTools.DatFiles
|
||||
|
||||
if (configuration.LocationsSpecified)
|
||||
{
|
||||
foreach (ConfLocation subLocation in configuration.Locations!)
|
||||
foreach (ConfLocation subLocation in configuration.GetFieldValue<ConfLocation[]?>(Models.Metadata.Configuration.ConfLocationKey)!)
|
||||
{
|
||||
SetFields(subLocation);
|
||||
}
|
||||
@@ -279,7 +279,7 @@ namespace SabreTools.DatFiles
|
||||
|
||||
if (configuration.SettingsSpecified)
|
||||
{
|
||||
foreach (ConfSetting subSetting in configuration.Settings!)
|
||||
foreach (ConfSetting subSetting in configuration.GetFieldValue<ConfSetting[]?>(Models.Metadata.Configuration.ConfSettingKey)!)
|
||||
{
|
||||
SetFields(subSetting as DatItem);
|
||||
}
|
||||
@@ -294,7 +294,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (confSetting.ConditionsSpecified)
|
||||
{
|
||||
foreach (Condition subCondition in confSetting.Conditions!)
|
||||
foreach (Condition subCondition in confSetting.GetFieldValue<Condition[]?>(Models.Metadata.ConfSetting.ConditionKey)!)
|
||||
{
|
||||
SetFields(subCondition);
|
||||
}
|
||||
@@ -309,7 +309,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (device.ExtensionsSpecified)
|
||||
{
|
||||
foreach (Extension subExtension in device.Extensions!)
|
||||
foreach (Extension subExtension in device.GetFieldValue<Extension[]?>(Models.Metadata.Device.ExtensionKey)!)
|
||||
{
|
||||
SetFields(subExtension);
|
||||
}
|
||||
@@ -317,7 +317,7 @@ namespace SabreTools.DatFiles
|
||||
|
||||
if (device.InstancesSpecified)
|
||||
{
|
||||
foreach (Instance subInstance in device.Instances!)
|
||||
foreach (Instance subInstance in device.GetFieldValue<Instance[]?>(Models.Metadata.Device.InstanceKey)!)
|
||||
{
|
||||
SetFields(subInstance);
|
||||
}
|
||||
@@ -332,7 +332,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (dipSwitch.ConditionsSpecified)
|
||||
{
|
||||
foreach (Condition subCondition in dipSwitch.Conditions!)
|
||||
foreach (Condition subCondition in dipSwitch.GetFieldValue<Condition[]?>(Models.Metadata.DipSwitch.ConditionKey)!)
|
||||
{
|
||||
SetFields(subCondition);
|
||||
}
|
||||
@@ -340,7 +340,7 @@ namespace SabreTools.DatFiles
|
||||
|
||||
if (dipSwitch.LocationsSpecified)
|
||||
{
|
||||
foreach (DipLocation subLocation in dipSwitch.Locations!)
|
||||
foreach (DipLocation subLocation in dipSwitch.GetFieldValue<DipLocation[]?>(Models.Metadata.DipSwitch.DipLocationKey)!)
|
||||
{
|
||||
SetFields(subLocation);
|
||||
}
|
||||
@@ -348,14 +348,16 @@ namespace SabreTools.DatFiles
|
||||
|
||||
if (dipSwitch.ValuesSpecified)
|
||||
{
|
||||
foreach (DipValue subValue in dipSwitch.Values!)
|
||||
foreach (DipValue subValue in dipSwitch.GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey)!)
|
||||
{
|
||||
SetFields(subValue as DatItem);
|
||||
}
|
||||
}
|
||||
|
||||
dipSwitch.Part ??= new Part();
|
||||
SetFields(dipSwitch.Part as DatItem);
|
||||
if (!dipSwitch.PartSpecified)
|
||||
dipSwitch.SetFieldValue<Part?>("PART", new Part());
|
||||
|
||||
SetFields((dipSwitch.GetFieldValue<Part?>("PART") as DatItem)!);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -366,7 +368,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (dipValue.ConditionsSpecified)
|
||||
{
|
||||
foreach (Condition subCondition in dipValue.Conditions!)
|
||||
foreach (Condition subCondition in dipValue.GetFieldValue<Condition[]?>(Models.Metadata.DipValue.ConditionKey)!)
|
||||
{
|
||||
SetFields(subCondition);
|
||||
}
|
||||
@@ -379,11 +381,15 @@ namespace SabreTools.DatFiles
|
||||
/// <param name="disk">Disk to remove replace fields in</param>
|
||||
private void SetFields(Disk disk)
|
||||
{
|
||||
disk.DiskArea ??= new DiskArea();
|
||||
SetFields(disk.DiskArea);
|
||||
if (!disk.DiskAreaSpecified)
|
||||
disk.SetFieldValue<DiskArea?>("DISKAREA", new DiskArea());
|
||||
|
||||
disk.Part ??= new Part();
|
||||
SetFields(disk.Part as DatItem);
|
||||
SetFields(disk.GetFieldValue<DiskArea?>("DISKAREA")! as DatItem);
|
||||
|
||||
if (!disk.PartSpecified)
|
||||
disk.SetFieldValue<Part?>("PART", new Part());
|
||||
|
||||
SetFields(disk.GetFieldValue<Part?>("PART")! as DatItem);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -394,7 +400,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (input.ControlsSpecified)
|
||||
{
|
||||
foreach (Control subControl in input.Controls!)
|
||||
foreach (Control subControl in input.GetFieldValue<Control[]?>(Models.Metadata.Input.ControlKey)!)
|
||||
{
|
||||
SetFields(subControl);
|
||||
}
|
||||
@@ -409,7 +415,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (part.FeaturesSpecified)
|
||||
{
|
||||
foreach (PartFeature subPartFeature in part.Features!)
|
||||
foreach (PartFeature subPartFeature in part.GetFieldValue<PartFeature[]?>(Models.Metadata.Part.FeatureKey)!)
|
||||
{
|
||||
SetFields(subPartFeature);
|
||||
}
|
||||
@@ -424,7 +430,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (port.AnalogsSpecified)
|
||||
{
|
||||
foreach (Analog subAnalog in port.Analogs!)
|
||||
foreach (Analog subAnalog in port.GetFieldValue<Analog[]?>(Models.Metadata.Port.AnalogKey)!)
|
||||
{
|
||||
SetFields(subAnalog);
|
||||
}
|
||||
@@ -437,11 +443,15 @@ namespace SabreTools.DatFiles
|
||||
/// <param name="rom">Rom to remove replace fields in</param>
|
||||
private void SetFields(Rom rom)
|
||||
{
|
||||
rom.DataArea ??= new DataArea();
|
||||
SetFields(rom.DataArea);
|
||||
if (!rom.DataAreaSpecified)
|
||||
rom.SetFieldValue<DataArea?>("DATAAREA", new DataArea());
|
||||
|
||||
rom.Part ??= new Part();
|
||||
SetFields(rom.Part as DatItem);
|
||||
SetFields(rom.GetFieldValue<DataArea?>("DATAAREA")! as DatItem);
|
||||
|
||||
if (!rom.PartSpecified)
|
||||
rom.SetFieldValue<Part?>("PART", new Part());
|
||||
|
||||
SetFields(rom.GetFieldValue<Part?>("PART")! as DatItem);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -452,7 +462,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (slot.SlotOptionsSpecified)
|
||||
{
|
||||
foreach (SlotOption subSlotOption in slot.SlotOptions!)
|
||||
foreach (SlotOption subSlotOption in slot.GetFieldValue<SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey)!)
|
||||
{
|
||||
SetFields(subSlotOption);
|
||||
}
|
||||
|
||||
@@ -557,13 +557,13 @@ namespace SabreTools.DatItems
|
||||
}
|
||||
|
||||
// If it's a nodump, add and skip
|
||||
if (file is Rom rom && rom.ItemStatus == ItemStatus.Nodump)
|
||||
if (file is Rom rom && rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump)
|
||||
{
|
||||
outfiles.Add(file);
|
||||
nodumpCount++;
|
||||
continue;
|
||||
}
|
||||
else if (file is Disk disk && disk.ItemStatus == ItemStatus.Nodump)
|
||||
else if (file is Disk disk && disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump)
|
||||
{
|
||||
outfiles.Add(file);
|
||||
nodumpCount++;
|
||||
|
||||
@@ -10,20 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("analog"), XmlRoot("analog")]
|
||||
public class Analog : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Analog mask value
|
||||
/// </summary>
|
||||
[JsonProperty("mask", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("mask")]
|
||||
public string? Mask
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Analog.MaskKey);
|
||||
set => _internal[Models.Metadata.Analog.MaskKey] = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -10,33 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("biosset"), XmlRoot("biosset")]
|
||||
public class BiosSet : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Description of the BIOS
|
||||
/// </summary>
|
||||
[JsonProperty("description", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("description")]
|
||||
public string? Description
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.BiosSet.DescriptionKey);
|
||||
set => _internal[Models.Metadata.BiosSet.DescriptionKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determine whether the BIOS is default
|
||||
/// </summary>
|
||||
[JsonProperty("default", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("default")]
|
||||
public bool? Default
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.BiosSet.DefaultKey);
|
||||
set => _internal[Models.Metadata.BiosSet.DefaultKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool DefaultSpecified { get { return Default != null; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using SabreTools.Core;
|
||||
using SabreTools.Core.Tools;
|
||||
|
||||
namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
@@ -12,47 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("chip"), XmlRoot("chip")]
|
||||
public class Chip : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Internal tag
|
||||
/// </summary>
|
||||
[JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tag")]
|
||||
public string? Tag
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Chip.TagKey);
|
||||
set => _internal[Models.Metadata.Chip.TagKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Type of the chip
|
||||
/// </summary>
|
||||
[JsonProperty("type", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("type")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public ChipType ChipType
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Chip.ChipTypeKey).AsEnumValue<ChipType>();
|
||||
set => _internal[Models.Metadata.Chip.ChipTypeKey] = value.AsStringValue<ChipType>();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ChipTypeSpecified { get { return ChipType != ChipType.NULL; } }
|
||||
|
||||
/// <summary>
|
||||
/// Clock speed
|
||||
/// </summary>
|
||||
[JsonProperty("clock", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("clock")]
|
||||
public long? Clock
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Chip.ClockKey);
|
||||
set => _internal[Models.Metadata.Chip.ClockKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ClockSpecified { get { return Clock != null; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using SabreTools.Core;
|
||||
using SabreTools.Core.Tools;
|
||||
|
||||
namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
@@ -12,54 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("condition"), XmlRoot("condition")]
|
||||
public class Condition : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Condition tag value
|
||||
/// </summary>
|
||||
[JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tag")]
|
||||
public string? Tag
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Condition.TagKey);
|
||||
set => _internal[Models.Metadata.Condition.TagKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Condition mask
|
||||
/// </summary>
|
||||
[JsonProperty("mask", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("mask")]
|
||||
public string? Mask
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Condition.MaskKey);
|
||||
set => _internal[Models.Metadata.Condition.MaskKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Condition relationship
|
||||
/// </summary>
|
||||
[JsonProperty("relation", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("relation")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public Relation Relation
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Condition.RelationKey).AsEnumValue<Relation>();
|
||||
set => _internal[Models.Metadata.Condition.RelationKey] = value.AsStringValue<Relation>();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool RelationSpecified { get { return Relation != Core.Relation.NULL; } }
|
||||
|
||||
/// <summary>
|
||||
/// Condition value
|
||||
/// </summary>
|
||||
[JsonProperty("value", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("value")]
|
||||
public string? Value
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Condition.ValueKey);
|
||||
set => _internal[Models.Metadata.Condition.ValueKey] = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -10,36 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("conflocation"), XmlRoot("conflocation")]
|
||||
public class ConfLocation : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Location ID
|
||||
/// </summary>
|
||||
[JsonProperty("number", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("number")]
|
||||
public long? Number
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.ConfLocation.NumberKey);
|
||||
set => _internal[Models.Metadata.ConfLocation.NumberKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool NumberSpecified { get { return Number != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Determines if location is inverted or not
|
||||
/// </summary>
|
||||
[JsonProperty("inverted", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("inverted")]
|
||||
public bool? Inverted
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.ConfLocation.InvertedKey);
|
||||
set => _internal[Models.Metadata.ConfLocation.InvertedKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool InvertedSpecified { get { return Inverted != null; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Core;
|
||||
@@ -14,41 +12,15 @@ namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Setting value
|
||||
/// </summary>
|
||||
[JsonProperty("value", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("value")]
|
||||
public string? Value
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.ConfSetting.ValueKey);
|
||||
set => _internal[Models.Metadata.ConfSetting.ValueKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines if the setting is default or not
|
||||
/// </summary>
|
||||
[JsonProperty("default", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("default")]
|
||||
public bool? Default
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.ConfSetting.DefaultKey);
|
||||
set => _internal[Models.Metadata.ConfSetting.DefaultKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool DefaultSpecified { get { return Default != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// List of conditions on the setting
|
||||
/// </summary>
|
||||
[JsonProperty("conditions", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("conditions")]
|
||||
public List<Condition>? Conditions
|
||||
public bool ConditionsSpecified
|
||||
{
|
||||
get => _internal.Read<Condition[]>(Models.Metadata.ConfSetting.ConditionKey)?.ToList();
|
||||
set => _internal[Models.Metadata.ConfSetting.ConditionKey] = value?.ToArray();
|
||||
get
|
||||
{
|
||||
var conditions = GetFieldValue<Condition[]?>(Models.Metadata.ConfSetting.ConditionKey);
|
||||
return conditions != null && conditions.Length > 0;
|
||||
}
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ConditionsSpecified { get { return Conditions != null && Conditions.Count > 0; } }
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Xml.Serialization;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Core;
|
||||
|
||||
@@ -14,64 +12,35 @@ namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Tag associated with the configuration
|
||||
/// </summary>
|
||||
[JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tag")]
|
||||
public string? Tag
|
||||
[JsonIgnore]
|
||||
public bool ConditionsSpecified
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Configuration.TagKey);
|
||||
set => _internal[Models.Metadata.Configuration.TagKey] = value;
|
||||
get
|
||||
{
|
||||
var conditions = GetFieldValue<Condition[]?>(Models.Metadata.Configuration.ConditionKey);
|
||||
return conditions != null && conditions.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Mask associated with the configuration
|
||||
/// </summary>
|
||||
[JsonProperty("mask", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("mask")]
|
||||
public string? Mask
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Configuration.MaskKey);
|
||||
set => _internal[Models.Metadata.Configuration.MaskKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Conditions associated with the configuration
|
||||
/// </summary>
|
||||
[JsonProperty("conditions", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("conditions")]
|
||||
public List<Condition>? Conditions
|
||||
{
|
||||
get => _internal.Read<Condition[]>(Models.Metadata.Configuration.ConditionKey)?.ToList();
|
||||
set => _internal[Models.Metadata.Configuration.ConditionKey] = value?.ToArray();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ConditionsSpecified { get { return Conditions != null && Conditions.Count > 0; } }
|
||||
|
||||
/// <summary>
|
||||
/// Locations associated with the configuration
|
||||
/// </summary>
|
||||
[JsonProperty("locations", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("locations")]
|
||||
public List<ConfLocation>? Locations
|
||||
public bool LocationsSpecified
|
||||
{
|
||||
get => _internal.Read<ConfLocation[]>(Models.Metadata.Configuration.ConfLocationKey)?.ToList();
|
||||
set => _internal[Models.Metadata.Configuration.ConfLocationKey] = value?.ToArray();
|
||||
get
|
||||
{
|
||||
var locations = GetFieldValue<ConfLocation[]?>(Models.Metadata.Configuration.ConfLocationKey);
|
||||
return locations != null && locations.Length > 0;
|
||||
}
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool LocationsSpecified { get { return Locations != null && Locations.Count > 0; } }
|
||||
|
||||
/// <summary>
|
||||
/// Settings associated with the configuration
|
||||
/// </summary>
|
||||
[JsonProperty("settings", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("settings")]
|
||||
public List<ConfSetting>? Settings
|
||||
public bool SettingsSpecified
|
||||
{
|
||||
get => _internal.Read<List<ConfSetting>>(Models.Metadata.Configuration.ConfSettingKey);
|
||||
set => _internal[Models.Metadata.Configuration.ConfSettingKey] = value;
|
||||
get
|
||||
{
|
||||
var settings = GetFieldValue<ConfSetting[]?>(Models.Metadata.Configuration.ConfSettingKey);
|
||||
return settings != null && settings.Length > 0;
|
||||
}
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool SettingsSpecified { get { return Settings != null && Settings.Count > 0; } }
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using SabreTools.Core;
|
||||
using SabreTools.Core.Tools;
|
||||
|
||||
namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
@@ -12,158 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("control"), XmlRoot("control")]
|
||||
public class Control : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// General type of input
|
||||
/// </summary>
|
||||
[JsonProperty("type", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("type")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public ControlType ControlType
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Control.ControlTypeKey).AsEnumValue<ControlType>();
|
||||
set => _internal[Models.Metadata.Control.ControlTypeKey] = value.AsStringValue<ControlType>();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ControlTypeSpecified { get { return ControlType != ControlType.NULL; } }
|
||||
|
||||
/// <summary>
|
||||
/// Player which the input belongs to
|
||||
/// </summary>
|
||||
[JsonProperty("player", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("player")]
|
||||
public long? Player
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Control.PlayerKey);
|
||||
set => _internal[Models.Metadata.Control.PlayerKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool PlayerSpecified { get { return Player != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Total number of buttons
|
||||
/// </summary>
|
||||
[JsonProperty("buttons", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("buttons")]
|
||||
public long? Buttons
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Control.ButtonsKey);
|
||||
set => _internal[Models.Metadata.Control.ButtonsKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ButtonsSpecified { get { return Buttons != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Total number of non-optional buttons
|
||||
/// </summary>
|
||||
[JsonProperty("reqbuttons", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("reqbuttons")]
|
||||
public long? RequiredButtons
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Control.ReqButtonsKey);
|
||||
set => _internal[Models.Metadata.Control.ReqButtonsKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool RequiredButtonsSpecified { get { return RequiredButtons != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Analog minimum value
|
||||
/// </summary>
|
||||
[JsonProperty("minimum", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("minimum")]
|
||||
public long? Minimum
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Control.MinimumKey);
|
||||
set => _internal[Models.Metadata.Control.MinimumKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool MinimumSpecified { get { return Minimum != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Analog maximum value
|
||||
/// </summary>
|
||||
[JsonProperty("maximum", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("maximum")]
|
||||
public long? Maximum
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Control.MaximumKey);
|
||||
set => _internal[Models.Metadata.Control.MaximumKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool MaximumSpecified { get { return Maximum != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Default analog sensitivity
|
||||
/// </summary>
|
||||
[JsonProperty("sensitivity", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sensitivity")]
|
||||
public long? Sensitivity
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Control.SensitivityKey);
|
||||
set => _internal[Models.Metadata.Control.SensitivityKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool SensitivitySpecified { get { return Sensitivity != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Default analog keydelta
|
||||
/// </summary>
|
||||
[JsonProperty("keydelta", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("keydelta")]
|
||||
public long? KeyDelta
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Control.KeyDeltaKey);
|
||||
set => _internal[Models.Metadata.Control.KeyDeltaKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool KeyDeltaSpecified { get { return KeyDelta != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Default analog reverse setting
|
||||
/// </summary>
|
||||
[JsonProperty("reverse", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("reverse")]
|
||||
public bool? Reverse
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.Control.ReverseKey);
|
||||
set => _internal[Models.Metadata.Control.ReverseKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ReverseSpecified { get { return Reverse != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// First set of ways
|
||||
/// </summary>
|
||||
[JsonProperty("ways", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("ways")]
|
||||
public string? Ways
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Control.WaysKey);
|
||||
set => _internal[Models.Metadata.Control.WaysKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Second set of ways
|
||||
/// </summary>
|
||||
[JsonProperty("ways2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("ways2")]
|
||||
public string? Ways2
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Control.Ways2Key);
|
||||
set => _internal[Models.Metadata.Control.Ways2Key] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Third set of ways
|
||||
/// </summary>
|
||||
[JsonProperty("ways3", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("ways3")]
|
||||
public string? Ways3
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Control.Ways3Key);
|
||||
set => _internal[Models.Metadata.Control.Ways3Key] = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Core;
|
||||
using SabreTools.Core.Tools;
|
||||
|
||||
namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
@@ -12,49 +11,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("dataarea"), XmlRoot("dataarea")]
|
||||
public class DataArea : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Total size of the area
|
||||
/// </summary>
|
||||
[JsonProperty("size", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("size")]
|
||||
public long? Size
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.DataArea.SizeKey);
|
||||
set => _internal[Models.Metadata.DataArea.SizeKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool SizeSpecified { get { return Size != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Word width for the area
|
||||
/// </summary>
|
||||
[JsonProperty("width", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("width")]
|
||||
public long? Width
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.DataArea.WidthKey);
|
||||
set => _internal[Models.Metadata.DataArea.WidthKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool WidthSpecified { get { return Width != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Byte endianness of the area
|
||||
/// </summary>
|
||||
[JsonProperty("endianness", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("endianness")]
|
||||
public Endianness Endianness
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.DataArea.WidthKey).AsEnumValue<Endianness>();
|
||||
set => _internal[Models.Metadata.DataArea.WidthKey] = value.AsStringValue<Endianness>();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool EndiannessSpecified { get { return Endianness != Endianness.NULL; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Xml.Serialization;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using SabreTools.Core;
|
||||
using SabreTools.Core.Tools;
|
||||
|
||||
namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
@@ -16,90 +12,26 @@ namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Device type
|
||||
/// </summary>
|
||||
[JsonProperty("type", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("type")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public DeviceType DeviceType
|
||||
[JsonIgnore]
|
||||
public bool InstancesSpecified
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Device.DeviceTypeKey).AsEnumValue<DeviceType>();
|
||||
set => _internal[Models.Metadata.Device.DeviceTypeKey] = value.AsStringValue<DeviceType>();
|
||||
get
|
||||
{
|
||||
var instances = GetFieldValue<Instance[]?>(Models.Metadata.Device.InstanceKey);
|
||||
return instances != null && instances.Length > 0;
|
||||
}
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool DeviceTypeSpecified { get { return DeviceType != DeviceType.NULL; } }
|
||||
|
||||
/// <summary>
|
||||
/// Device tag
|
||||
/// </summary>
|
||||
[JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tag")]
|
||||
public string? Tag
|
||||
public bool ExtensionsSpecified
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Device.TagKey);
|
||||
set => _internal[Models.Metadata.Device.TagKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fixed image format
|
||||
/// </summary>
|
||||
[JsonProperty("fixed_image", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("fixed_image")]
|
||||
public string? FixedImage
|
||||
get
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Device.FixedImageKey);
|
||||
set => _internal[Models.Metadata.Device.FixedImageKey] = value;
|
||||
var extensions = GetFieldValue<Extension[]?>(Models.Metadata.Device.ExtensionKey);
|
||||
return extensions != null && extensions.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines if the devices is mandatory
|
||||
/// </summary>
|
||||
/// <remarks>Only value used seems to be 1. Used like bool, but actually int</remarks>
|
||||
[JsonProperty("mandatory", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("mandatory")]
|
||||
public long? Mandatory
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Device.MandatoryKey);
|
||||
set => _internal[Models.Metadata.Device.MandatoryKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool MandatorySpecified { get { return Mandatory != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Device interface
|
||||
/// </summary>
|
||||
[JsonProperty("interface", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("interface")]
|
||||
public string? Interface
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Device.InterfaceKey);
|
||||
set => _internal[Models.Metadata.Device.InterfaceKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Device instances
|
||||
/// </summary>
|
||||
[JsonProperty("instances", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("instances")]
|
||||
public List<Instance>? Instances
|
||||
{
|
||||
get => _internal.Read<Instance[]>(Models.Metadata.Device.InstanceKey)?.ToList();
|
||||
set => _internal[Models.Metadata.Device.InstanceKey] = value?.ToArray();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool InstancesSpecified { get { return Instances != null && Instances.Count > 0; } }
|
||||
|
||||
/// <summary>
|
||||
/// Device extensions
|
||||
/// </summary>
|
||||
[JsonProperty("extensions", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("extensions")]
|
||||
public List<Extension>? Extensions
|
||||
{
|
||||
get => _internal.Read<Extension[]>(Models.Metadata.Device.ExtensionKey)?.ToList();
|
||||
set => _internal[Models.Metadata.Device.ExtensionKey] = value?.ToArray();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ExtensionsSpecified { get { return Extensions != null && Extensions.Count > 0; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
@@ -10,36 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("diplocation"), XmlRoot("diplocation")]
|
||||
public class DipLocation : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Location ID
|
||||
/// </summary>
|
||||
[JsonProperty("number", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("number")]
|
||||
public long? Number
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.DipLocation.NameKey);
|
||||
set => _internal[Models.Metadata.DipLocation.NameKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool NumberSpecified { get { return Number != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Determines if location is inverted or not
|
||||
/// </summary>
|
||||
[JsonProperty("inverted", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("inverted")]
|
||||
public bool? Inverted
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.DipLocation.InvertedKey);
|
||||
set => _internal[Models.Metadata.DipLocation.InvertedKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool InvertedSpecified { get { return Inverted != null; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Xml.Serialization;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Core;
|
||||
|
||||
@@ -14,93 +12,50 @@ namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
#region Fields
|
||||
|
||||
#region Common
|
||||
|
||||
/// <summary>
|
||||
/// Tag associated with the dipswitch
|
||||
/// </summary>
|
||||
[JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tag")]
|
||||
public string? Tag
|
||||
[JsonIgnore]
|
||||
public bool ConditionsSpecified
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.DipSwitch.TagKey);
|
||||
set => _internal[Models.Metadata.DipSwitch.TagKey] = value;
|
||||
get
|
||||
{
|
||||
var conditions = GetFieldValue<Condition[]?>(Models.Metadata.DipSwitch.ConditionKey);
|
||||
return conditions != null && conditions.Length > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Mask associated with the dipswitch
|
||||
/// </summary>
|
||||
[JsonProperty("mask", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("mask")]
|
||||
public string? Mask
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.DipSwitch.MaskKey);
|
||||
set => _internal[Models.Metadata.DipSwitch.MaskKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Conditions associated with the dipswitch
|
||||
/// </summary>
|
||||
[JsonProperty("conditions", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("conditions")]
|
||||
public List<Condition>? Conditions
|
||||
{
|
||||
get => _internal.Read<Condition[]>(Models.Metadata.DipSwitch.ConditionKey)?.ToList();
|
||||
set => _internal[Models.Metadata.DipSwitch.ConditionKey] = value?.ToArray();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ConditionsSpecified { get { return Conditions != null && Conditions.Count > 0; } }
|
||||
|
||||
/// <summary>
|
||||
/// Locations associated with the dipswitch
|
||||
/// </summary>
|
||||
[JsonProperty("locations", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("locations")]
|
||||
public List<DipLocation>? Locations
|
||||
public bool LocationsSpecified
|
||||
{
|
||||
get => _internal.Read<DipLocation[]>(Models.Metadata.DipSwitch.DipLocationKey)?.ToList();
|
||||
set => _internal[Models.Metadata.DipSwitch.DipLocationKey] = value?.ToArray();
|
||||
get
|
||||
{
|
||||
var locations = GetFieldValue<DipLocation[]?>(Models.Metadata.DipSwitch.DipLocationKey);
|
||||
return locations != null && locations.Length > 0;
|
||||
}
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool LocationsSpecified { get { return Locations != null && Locations.Count > 0; } }
|
||||
|
||||
/// <summary>
|
||||
/// Settings associated with the dipswitch
|
||||
/// </summary>
|
||||
[JsonProperty("values", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("values")]
|
||||
public List<DipValue>? Values
|
||||
public bool ValuesSpecified
|
||||
{
|
||||
get => _internal.Read<DipValue[]>(Models.Metadata.DipSwitch.DipValueKey)?.ToList();
|
||||
set => _internal[Models.Metadata.DipSwitch.DipValueKey] = value?.ToArray();
|
||||
get
|
||||
{
|
||||
var values = GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey);
|
||||
return values != null && values.Length > 0;
|
||||
}
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ValuesSpecified { get { return Values != null && Values.Count > 0; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region SoftwareList
|
||||
|
||||
/// <summary>
|
||||
/// Original hardware part associated with the item
|
||||
/// </summary>
|
||||
/// <remarks>This is inverted from the internal model</remarks>
|
||||
[JsonProperty("part", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("part")]
|
||||
public Part? Part { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
public bool PartSpecified
|
||||
{
|
||||
get
|
||||
{
|
||||
return Part != null
|
||||
&& (!string.IsNullOrEmpty(Part.GetName())
|
||||
|| !string.IsNullOrEmpty(Part.Interface));
|
||||
var part = GetFieldValue<Part?>("PART");
|
||||
return part != null
|
||||
&& (!string.IsNullOrEmpty(part.GetName())
|
||||
|| !string.IsNullOrEmpty(part.GetFieldValue<string?>(Models.Metadata.Part.InterfaceKey)));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion // Fields
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -142,8 +97,6 @@ namespace SabreTools.DatItems.Formats
|
||||
Remove = this.Remove,
|
||||
|
||||
_internal = this._internal?.Clone() as Models.Metadata.DipSwitch ?? [],
|
||||
|
||||
Part = this.Part,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Core;
|
||||
@@ -14,41 +12,15 @@ namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Setting value
|
||||
/// </summary>
|
||||
[JsonProperty("value", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("value")]
|
||||
public string? Value
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.DipValue.ValueKey);
|
||||
set => _internal[Models.Metadata.DipValue.ValueKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines if the setting is default or not
|
||||
/// </summary>
|
||||
[JsonProperty("default", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("default")]
|
||||
public bool? Default
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.DipValue.DefaultKey);
|
||||
set => _internal[Models.Metadata.DipValue.DefaultKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool DefaultSpecified { get { return Default != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// List of conditions on the setting
|
||||
/// </summary>
|
||||
[JsonProperty("conditions", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("conditions")]
|
||||
public List<Condition>? Conditions
|
||||
public bool ConditionsSpecified
|
||||
{
|
||||
get => _internal.Read<Condition[]>(Models.Metadata.DipValue.ConditionKey)?.ToList();
|
||||
set => _internal[Models.Metadata.DipValue.ConditionKey] = value?.ToArray();
|
||||
get
|
||||
{
|
||||
var conditions = GetFieldValue<Condition[]?>(Models.Metadata.DipValue.ConditionKey);
|
||||
return conditions != null && conditions.Length > 0;
|
||||
}
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ConditionsSpecified { get { return Conditions != null && Conditions.Count > 0; } }
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using SabreTools.Core;
|
||||
using SabreTools.Core.Tools;
|
||||
using SabreTools.FileTypes;
|
||||
@@ -15,149 +14,30 @@ namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
#region Fields
|
||||
|
||||
#region Common
|
||||
|
||||
/// <summary>
|
||||
/// Data MD5 hash
|
||||
/// </summary>
|
||||
[JsonProperty("md5", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("md5")]
|
||||
public string? MD5
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Disk.MD5Key);
|
||||
set => _internal[Models.Metadata.Disk.MD5Key] = TextHelper.NormalizeMD5(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Data SHA-1 hash
|
||||
/// </summary>
|
||||
[JsonProperty("sha1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sha1")]
|
||||
public string? SHA1
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Disk.SHA1Key);
|
||||
set => _internal[Models.Metadata.Disk.SHA1Key] = TextHelper.NormalizeSHA1(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Disk name to merge from parent
|
||||
/// </summary>
|
||||
[JsonProperty("merge", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("merge")]
|
||||
public string? MergeTag
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Disk.MergeKey);
|
||||
set => _internal[Models.Metadata.Disk.MergeKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Disk region
|
||||
/// </summary>
|
||||
[JsonProperty("region", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("region")]
|
||||
public string? Region
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Disk.RegionKey);
|
||||
set => _internal[Models.Metadata.Disk.RegionKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Disk index
|
||||
/// </summary>
|
||||
[JsonProperty("index", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("index")]
|
||||
public string? Index
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Disk.IndexKey);
|
||||
set => _internal[Models.Metadata.Disk.IndexKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Disk writable flag
|
||||
/// </summary>
|
||||
[JsonProperty("writable", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("writable")]
|
||||
public bool? Writable
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.Disk.WritableKey);
|
||||
set => _internal[Models.Metadata.Disk.WritableKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool WritableSpecified { get { return Writable != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Disk dump status
|
||||
/// </summary>
|
||||
[JsonProperty("status", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("status")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public ItemStatus ItemStatus
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Disk.StatusKey).AsEnumValue<ItemStatus>();
|
||||
set => _internal[Models.Metadata.Disk.StatusKey] = value.AsStringValue<ItemStatus>(useSecond: false);
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ItemStatusSpecified { get { return ItemStatus != ItemStatus.NULL; } }
|
||||
|
||||
/// <summary>
|
||||
/// Determine if the disk is optional in the set
|
||||
/// </summary>
|
||||
[JsonProperty("optional", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("optional")]
|
||||
public bool? Optional
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.Disk.OptionalKey);
|
||||
set => _internal[Models.Metadata.Disk.OptionalKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool OptionalSpecified { get { return Optional != null; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region SoftwareList
|
||||
|
||||
/// <summary>
|
||||
/// Disk area information
|
||||
/// </summary>
|
||||
/// <remarks>Hack on top of internal model</remarks>
|
||||
[JsonProperty("diskarea", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("diskarea")]
|
||||
public DiskArea? DiskArea
|
||||
{
|
||||
get => _internal.Read<DiskArea>("DISKAREA");
|
||||
set => _internal["DISKAREA"] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool DiskAreaSpecified
|
||||
{
|
||||
get
|
||||
{
|
||||
return DiskArea != null
|
||||
&& !string.IsNullOrEmpty(DiskArea.GetName());
|
||||
var diskArea = GetFieldValue<DiskArea?>("DISKAREA");
|
||||
return diskArea != null && !string.IsNullOrEmpty(diskArea.GetName());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Original hardware part associated with the item
|
||||
/// </summary>
|
||||
/// <remarks>Hack on top of internal model</remarks>
|
||||
[JsonProperty("part", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("part")]
|
||||
public Part? Part
|
||||
{
|
||||
get => _internal.Read<Part>("PART");
|
||||
set => _internal["PART"] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool PartSpecified
|
||||
{
|
||||
get
|
||||
{
|
||||
return Part != null
|
||||
&& (!string.IsNullOrEmpty(Part.GetName())
|
||||
|| !string.IsNullOrEmpty(Part.Interface));
|
||||
var part = GetFieldValue<Part?>("PART");
|
||||
return part != null
|
||||
&& (!string.IsNullOrEmpty(part.GetName())
|
||||
|| !string.IsNullOrEmpty(part.GetFieldValue<string?>(Models.Metadata.Part.InterfaceKey)));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion // Fields
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -181,7 +61,7 @@ namespace SabreTools.DatItems.Formats
|
||||
SetName(string.Empty);
|
||||
ItemType = ItemType.Disk;
|
||||
DupeType = 0x00;
|
||||
ItemStatus = ItemStatus.None;
|
||||
SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, ItemStatus.None);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -193,12 +73,12 @@ namespace SabreTools.DatItems.Formats
|
||||
Machine = new Machine();
|
||||
|
||||
SetName(baseFile.Filename);
|
||||
MD5 = TextHelper.ByteArrayToString(baseFile.MD5);
|
||||
SHA1 = TextHelper.ByteArrayToString(baseFile.SHA1);
|
||||
SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, TextHelper.ByteArrayToString(baseFile.MD5));
|
||||
SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, TextHelper.ByteArrayToString(baseFile.SHA1));
|
||||
|
||||
ItemType = ItemType.Disk;
|
||||
DupeType = 0x00;
|
||||
ItemStatus = ItemStatus.None;
|
||||
SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, ItemStatus.None);
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -230,8 +110,8 @@ namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
Filename = this.GetName(),
|
||||
Parent = this.Machine.Name,
|
||||
MD5 = TextHelper.StringToByteArray(this.MD5),
|
||||
SHA1 = TextHelper.StringToByteArray(this.SHA1),
|
||||
MD5 = TextHelper.StringToByteArray(GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)),
|
||||
SHA1 = TextHelper.StringToByteArray(GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -249,12 +129,9 @@ namespace SabreTools.DatItems.Formats
|
||||
Machine = this.Machine.Clone() as Machine ?? new Machine(),
|
||||
Source = this.Source?.Clone() as Source,
|
||||
Remove = this.Remove,
|
||||
|
||||
DataArea = new DataArea(),
|
||||
Part = this.Part,
|
||||
};
|
||||
|
||||
rom.DataArea.SetName(this.DiskArea?.GetName());
|
||||
rom.GetFieldValue<DataArea?>("DATAAREA")?.SetName(this.GetFieldValue<DiskArea?>("DISKAREA")?.GetName());
|
||||
|
||||
return rom;
|
||||
}
|
||||
@@ -289,11 +166,11 @@ namespace SabreTools.DatItems.Formats
|
||||
switch (bucketedBy)
|
||||
{
|
||||
case ItemKey.MD5:
|
||||
key = MD5;
|
||||
key = GetFieldValue<string?>(Models.Metadata.Disk.MD5Key);
|
||||
break;
|
||||
|
||||
case ItemKey.SHA1:
|
||||
key = SHA1;
|
||||
key = GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key);
|
||||
break;
|
||||
|
||||
// Let the base handle generic stuff
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using SabreTools.Core;
|
||||
using SabreTools.Core.Tools;
|
||||
|
||||
namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
@@ -12,190 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("display"), XmlRoot("display")]
|
||||
public class Display : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Display tag
|
||||
/// </summary>
|
||||
[JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tag")]
|
||||
public string? Tag
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Display.TagKey);
|
||||
set => _internal[Models.Metadata.Display.TagKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Display type
|
||||
/// </summary>
|
||||
[JsonProperty("type", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("type")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public DisplayType DisplayType
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Display.DisplayTypeKey).AsEnumValue<DisplayType>();
|
||||
set => _internal[Models.Metadata.Display.DisplayTypeKey] = value.AsStringValue<DisplayType>();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool DisplayTypeSpecified { get { return DisplayType != DisplayType.NULL; } }
|
||||
|
||||
/// <summary>
|
||||
/// Display rotation
|
||||
/// </summary>
|
||||
[JsonProperty("rotate", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("rotate")]
|
||||
public long? Rotate
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Display.RotateKey);
|
||||
set => _internal[Models.Metadata.Display.RotateKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool RotateSpecified { get { return Rotate != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Determines if display is flipped in the X-coordinates
|
||||
/// </summary>
|
||||
[JsonProperty("flipx", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("flipx")]
|
||||
public bool? FlipX
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.Display.FlipXKey);
|
||||
set => _internal[Models.Metadata.Display.FlipXKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool FlipXSpecified { get { return FlipX != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Display width
|
||||
/// </summary>
|
||||
[JsonProperty("width", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("width")]
|
||||
public long? Width
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Display.WidthKey);
|
||||
set => _internal[Models.Metadata.Display.WidthKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool WidthSpecified { get { return Width != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Display height
|
||||
/// </summary>
|
||||
[JsonProperty("height", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("height")]
|
||||
public long? Height
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Display.HeightKey);
|
||||
set => _internal[Models.Metadata.Display.HeightKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool HeightSpecified { get { return Height != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Refresh rate
|
||||
/// </summary>
|
||||
[JsonProperty("refresh", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("refresh")]
|
||||
public double? Refresh
|
||||
{
|
||||
get => _internal.ReadDouble(Models.Metadata.Display.RefreshKey);
|
||||
set => _internal[Models.Metadata.Display.RefreshKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool RefreshSpecified { get { return Refresh != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Pixel clock timer
|
||||
/// </summary>
|
||||
[JsonProperty("pixclock", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("pixclock")]
|
||||
public long? PixClock
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Display.PixClockKey);
|
||||
set => _internal[Models.Metadata.Display.PixClockKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool PixClockSpecified { get { return PixClock != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Total horizontal lines
|
||||
/// </summary>
|
||||
[JsonProperty("htotal", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("htotal")]
|
||||
public long? HTotal
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Display.HTotalKey);
|
||||
set => _internal[Models.Metadata.Display.HTotalKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool HTotalSpecified { get { return HTotal != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Horizontal blank end
|
||||
/// </summary>
|
||||
[JsonProperty("hbend", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("hbend")]
|
||||
public long? HBEnd
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Display.HBEndKey);
|
||||
set => _internal[Models.Metadata.Display.HBEndKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool HBEndSpecified { get { return HBEnd != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Horizontal blank start
|
||||
/// </summary>
|
||||
[JsonProperty("hbstart", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("hbstart")]
|
||||
public long? HBStart
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Display.HBStartKey);
|
||||
set => _internal[Models.Metadata.Display.HBStartKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool HBStartSpecified { get { return HBStart != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Total vertical lines
|
||||
/// </summary>
|
||||
[JsonProperty("vtotal", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("vtotal")]
|
||||
public long? VTotal
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Display.VTotalKey);
|
||||
set => _internal[Models.Metadata.Display.VTotalKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool VTotalSpecified { get { return VTotal != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Vertical blank end
|
||||
/// </summary>
|
||||
[JsonProperty("vbend", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("vbend")]
|
||||
public long? VBEnd
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Display.VBEndKey);
|
||||
set => _internal[Models.Metadata.Display.VBEndKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool VBEndSpecified { get { return VBEnd != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Vertical blank start
|
||||
/// </summary>
|
||||
[JsonProperty("vbstart", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("vbstart")]
|
||||
public long? VBStart
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Display.VBStartKey);
|
||||
set => _internal[Models.Metadata.Display.VBStartKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool VBStartSpecified { get { return VBStart != null; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using SabreTools.Core;
|
||||
using SabreTools.Core.Tools;
|
||||
|
||||
namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
@@ -15,118 +13,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("driver"), XmlRoot("driver")]
|
||||
public class Driver : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Overall driver status
|
||||
/// </summary>
|
||||
[JsonProperty("status", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("status")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public SupportStatus Status
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Driver.StatusKey).AsEnumValue<SupportStatus>();
|
||||
set => _internal[Models.Metadata.Driver.StatusKey] = value.AsStringValue<SupportStatus>();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool StatusSpecified { get { return Status != SupportStatus.NULL; } }
|
||||
|
||||
/// <summary>
|
||||
/// Driver emulation status
|
||||
/// </summary>
|
||||
[JsonProperty("emulation", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("emulation")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public SupportStatus Emulation
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Driver.EmulationKey).AsEnumValue<SupportStatus>();
|
||||
set => _internal[Models.Metadata.Driver.EmulationKey] = value.AsStringValue<SupportStatus>();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool EmulationSpecified { get { return Emulation != SupportStatus.NULL; } }
|
||||
|
||||
/// <summary>
|
||||
/// Cocktail orientation status
|
||||
/// </summary>
|
||||
[JsonProperty("cocktail", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("cocktail")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public SupportStatus Cocktail
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Driver.CocktailKey).AsEnumValue<SupportStatus>();
|
||||
set => _internal[Models.Metadata.Driver.CocktailKey] = value.AsStringValue<SupportStatus>();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool CocktailSpecified { get { return Cocktail != SupportStatus.NULL; } }
|
||||
|
||||
/// <summary>
|
||||
/// Save state support status
|
||||
/// </summary>
|
||||
[JsonProperty("savestate", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("savestate")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public Supported SaveState
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Driver.SaveStateKey).AsEnumValue<Supported>();
|
||||
set => _internal[Models.Metadata.Driver.SaveStateKey] = value.AsStringValue<Supported>(useSecond: true);
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool SaveStateSpecified { get { return SaveState != Supported.NULL; } }
|
||||
|
||||
/// <summary>
|
||||
/// Requires artwork
|
||||
/// </summary>
|
||||
[JsonProperty("requiresartwork", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("requiresartwork")]
|
||||
public bool? RequiresArtwork
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.Driver.RequiresArtworkKey);
|
||||
set => _internal[Models.Metadata.Driver.RequiresArtworkKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool RequiresArtworkSpecified { get { return RequiresArtwork != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Unofficial
|
||||
/// </summary>
|
||||
[JsonProperty("unofficial", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("unofficial")]
|
||||
public bool? Unofficial
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.Driver.UnofficialKey);
|
||||
set => _internal[Models.Metadata.Driver.UnofficialKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool UnofficialSpecified { get { return Unofficial != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// No sound hardware
|
||||
/// </summary>
|
||||
[JsonProperty("nosoundhardware", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nosoundhardware")]
|
||||
public bool? NoSoundHardware
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.Driver.NoSoundHardwareKey);
|
||||
set => _internal[Models.Metadata.Driver.NoSoundHardwareKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool NoSoundHardwareSpecified { get { return NoSoundHardware != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Incomplete
|
||||
/// </summary>
|
||||
[JsonProperty("incomplete", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("incomplete")]
|
||||
public bool? Incomplete
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.Driver.IncompleteKey);
|
||||
set => _internal[Models.Metadata.Driver.IncompleteKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool IncompleteSpecified { get { return Incomplete != null; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using SabreTools.Core;
|
||||
using SabreTools.Core.Tools;
|
||||
|
||||
namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
@@ -12,52 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("feature"), XmlRoot("feature")]
|
||||
public class Feature : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Type of feature
|
||||
/// </summary>
|
||||
[JsonProperty("type", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("type")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public FeatureType Type
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Feature.FeatureTypeKey).AsEnumValue<FeatureType>();
|
||||
set => _internal[Models.Metadata.Feature.FeatureTypeKey] = value.AsStringValue<FeatureType>();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool TypeSpecified { get { return Type != FeatureType.NULL; } }
|
||||
|
||||
/// <summary>
|
||||
/// Emulation status
|
||||
/// </summary>
|
||||
[JsonProperty("status", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("status")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public FeatureStatus Status
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Feature.StatusKey).AsEnumValue<FeatureStatus>();
|
||||
set => _internal[Models.Metadata.Feature.StatusKey] = value.AsStringValue<FeatureStatus>();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool StatusSpecified { get { return Status != FeatureStatus.NULL; } }
|
||||
|
||||
/// <summary>
|
||||
/// Overall status
|
||||
/// </summary>
|
||||
[JsonProperty("overall", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("overall")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public FeatureStatus Overall
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Feature.OverallKey).AsEnumValue<FeatureStatus>();
|
||||
set => _internal[Models.Metadata.Feature.OverallKey] = value.AsStringValue<FeatureStatus>();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool OverallSpecified { get { return Overall != FeatureStatus.NULL; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -45,9 +45,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonProperty("size", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("size")]
|
||||
public long? Size { get; set; } = null;
|
||||
|
||||
[JsonIgnore]
|
||||
public bool SizeSpecified { get { return Size != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// File CRC32 hash
|
||||
/// </summary>
|
||||
@@ -177,13 +174,12 @@ namespace SabreTools.DatItems.Formats
|
||||
Machine = this.Machine.Clone() as Machine ?? new Machine(),
|
||||
Source = this.Source?.Clone() as Source,
|
||||
Remove = this.Remove,
|
||||
|
||||
CRC = this.CRC,
|
||||
MD5 = this.MD5,
|
||||
SHA1 = this.SHA1,
|
||||
SHA256 = this.SHA256,
|
||||
};
|
||||
rom.SetName($"{this.Id}.{this.Extension}");
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, CRC);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, MD5);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, SHA1);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, SHA256);
|
||||
|
||||
return rom;
|
||||
}
|
||||
|
||||
@@ -10,20 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("info"), XmlRoot("info")]
|
||||
public class Info : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Information value
|
||||
/// </summary>
|
||||
[JsonProperty("value"), XmlElement("value")]
|
||||
public string? Value
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Info.ValueKey);
|
||||
set => _internal[Models.Metadata.Info.ValueKey] = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Xml.Serialization;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Core;
|
||||
|
||||
@@ -14,71 +12,16 @@ namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Input service ID
|
||||
/// </summary>
|
||||
[JsonProperty("service", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("service")]
|
||||
public bool? Service
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.Input.ServiceKey);
|
||||
set => _internal[Models.Metadata.Input.ServiceKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ServiceSpecified { get { return Service != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Determins if this has a tilt sensor
|
||||
/// </summary>
|
||||
[JsonProperty("tilt", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tilt")]
|
||||
public bool? Tilt
|
||||
public bool ControlsSpecified
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.Input.TiltKey);
|
||||
set => _internal[Models.Metadata.Input.TiltKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool TiltSpecified { get { return Tilt != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Number of players on the input
|
||||
/// </summary>
|
||||
[JsonProperty("players", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("players")]
|
||||
public long? Players
|
||||
get
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Input.PlayersKey);
|
||||
set => _internal[Models.Metadata.Input.PlayersKey] = value;
|
||||
var controls = GetFieldValue<Control[]?>(Models.Metadata.Input.ControlKey);
|
||||
return controls != null && controls.Length > 0;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool PlayersSpecified { get { return Players != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Number of coins required
|
||||
/// </summary>
|
||||
[JsonProperty("coins", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("coins")]
|
||||
public long? Coins
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Input.CoinsKey);
|
||||
set => _internal[Models.Metadata.Input.CoinsKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool CoinsSpecified { get { return Coins != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Set of controls for the input
|
||||
/// </summary>
|
||||
[JsonProperty("controls", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("controls")]
|
||||
public List<Control>? Controls
|
||||
{
|
||||
get => _internal.Read<Control[]>(Models.Metadata.Input.ControlKey)?.ToList();
|
||||
set => _internal[Models.Metadata.Input.ControlKey] = value?.ToArray();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ControlsSpecified { get { return Controls != null && Controls.Count > 0; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
@@ -10,20 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("instance"), XmlRoot("instance")]
|
||||
public class Instance : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Short name for the instance
|
||||
/// </summary>
|
||||
[JsonProperty("briefname", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("briefname")]
|
||||
public string? BriefName
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Instance.BriefNameKey);
|
||||
set => _internal[Models.Metadata.Instance.BriefNameKey] = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
@@ -12,50 +12,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("media"), XmlRoot("media")]
|
||||
public class Media : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Data MD5 hash
|
||||
/// </summary>
|
||||
[JsonProperty("md5", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("md5")]
|
||||
public string? MD5
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Media.MD5Key);
|
||||
set => _internal[Models.Metadata.Media.MD5Key] = TextHelper.NormalizeMD5(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Data SHA-1 hash
|
||||
/// </summary>
|
||||
[JsonProperty("sha1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sha1")]
|
||||
public string? SHA1
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Media.SHA1Key);
|
||||
set => _internal[Models.Metadata.Media.SHA1Key] = TextHelper.NormalizeSHA1(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Data SHA-256 hash
|
||||
/// </summary>
|
||||
[JsonProperty("sha256", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sha256")]
|
||||
public string? SHA256
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Media.SHA256Key);
|
||||
set => _internal[Models.Metadata.Media.SHA256Key] = TextHelper.NormalizeSHA256(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// File SpamSum fuzzy hash
|
||||
/// </summary>
|
||||
[JsonProperty("spamsum", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("spamsum")]
|
||||
public string? SpamSum
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Media.SpamSumKey);
|
||||
set => _internal[Models.Metadata.Media.SpamSumKey] = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -91,10 +47,10 @@ namespace SabreTools.DatItems.Formats
|
||||
Machine = new Machine();
|
||||
|
||||
SetName(baseFile.Filename);
|
||||
MD5 = TextHelper.ByteArrayToString(baseFile.MD5);
|
||||
SHA1 = TextHelper.ByteArrayToString(baseFile.SHA1);
|
||||
SHA256 = TextHelper.ByteArrayToString(baseFile.SHA256);
|
||||
SpamSum = System.Text.Encoding.UTF8.GetString(baseFile.SpamSum ?? []);
|
||||
SetFieldValue<string?>(Models.Metadata.Media.MD5Key, TextHelper.ByteArrayToString(baseFile.MD5));
|
||||
SetFieldValue<string?>(Models.Metadata.Media.SHA1Key, TextHelper.ByteArrayToString(baseFile.SHA1));
|
||||
SetFieldValue<string?>(Models.Metadata.Media.SHA256Key, TextHelper.ByteArrayToString(baseFile.SHA256));
|
||||
SetFieldValue<string?>(Models.Metadata.Media.SpamSumKey, System.Text.Encoding.UTF8.GetString(baseFile.SpamSum ?? []));
|
||||
|
||||
ItemType = ItemType.Media;
|
||||
DupeType = 0x00;
|
||||
@@ -129,10 +85,10 @@ namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
Filename = this.GetName(),
|
||||
Parent = this.Machine.Name,
|
||||
MD5 = TextHelper.StringToByteArray(this.MD5),
|
||||
SHA1 = TextHelper.StringToByteArray(this.SHA1),
|
||||
SHA256 = TextHelper.StringToByteArray(this.SHA256),
|
||||
SpamSum = System.Text.Encoding.UTF8.GetBytes(this.SpamSum ?? string.Empty),
|
||||
MD5 = TextHelper.StringToByteArray(GetFieldValue<string?>(Models.Metadata.Media.MD5Key)),
|
||||
SHA1 = TextHelper.StringToByteArray(GetFieldValue<string?>(Models.Metadata.Media.SHA1Key)),
|
||||
SHA256 = TextHelper.StringToByteArray(GetFieldValue<string?>(Models.Metadata.Media.SHA256Key)),
|
||||
SpamSum = System.Text.Encoding.UTF8.GetBytes(GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey) ?? string.Empty),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -185,19 +141,19 @@ namespace SabreTools.DatItems.Formats
|
||||
switch (bucketedBy)
|
||||
{
|
||||
case ItemKey.MD5:
|
||||
key = MD5;
|
||||
key = GetFieldValue<string?>(Models.Metadata.Media.MD5Key);
|
||||
break;
|
||||
|
||||
case ItemKey.SHA1:
|
||||
key = SHA1;
|
||||
key = GetFieldValue<string?>(Models.Metadata.Media.SHA1Key);
|
||||
break;
|
||||
|
||||
case ItemKey.SHA256:
|
||||
key = SHA256;
|
||||
key = GetFieldValue<string?>(Models.Metadata.Media.SHA256Key);
|
||||
break;
|
||||
|
||||
case ItemKey.SpamSum:
|
||||
key = SpamSum;
|
||||
key = GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey);
|
||||
break;
|
||||
|
||||
// Let the base handle generic stuff
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Xml.Serialization;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Core;
|
||||
|
||||
@@ -15,22 +13,15 @@ namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
#region Fields
|
||||
|
||||
[JsonProperty("interface"), XmlElement("interface")]
|
||||
public string? Interface
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Part.InterfaceKey);
|
||||
set => _internal[Models.Metadata.Part.InterfaceKey] = value;
|
||||
}
|
||||
|
||||
[JsonProperty("features", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("features")]
|
||||
public List<PartFeature>? Features
|
||||
{
|
||||
get => _internal.Read<PartFeature[]>(Models.Metadata.Part.FeatureKey)?.ToList();
|
||||
set => _internal[Models.Metadata.Part.FeatureKey] = value?.ToArray();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool FeaturesSpecified { get { return Features != null && Features.Count > 0; } }
|
||||
public bool FeaturesSpecified
|
||||
{
|
||||
get
|
||||
{
|
||||
var features = GetFieldValue<PartFeature[]?>(Models.Metadata.Part.FeatureKey);
|
||||
return features != null && features.Length > 0;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -10,20 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("part_feature"), XmlRoot("part_feature")]
|
||||
public class PartFeature : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// PartFeature value
|
||||
/// </summary>
|
||||
[JsonProperty("value"), XmlElement("value")]
|
||||
public string? Value
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Feature.ValueKey);
|
||||
set => _internal[Models.Metadata.Feature.ValueKey] = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Xml.Serialization;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Core;
|
||||
|
||||
@@ -14,28 +12,15 @@ namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Tag for the port
|
||||
/// </summary>
|
||||
[JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tag")]
|
||||
public string? Tag
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Port.TagKey);
|
||||
set => _internal[Models.Metadata.Port.TagKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// List of analogs on the port
|
||||
/// </summary>
|
||||
[JsonProperty("analogs", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("analogs")]
|
||||
public List<Analog>? Analogs
|
||||
{
|
||||
get => _internal.Read<Analog[]>(Models.Metadata.Port.AnalogKey)?.ToList();
|
||||
set => _internal[Models.Metadata.Port.AnalogKey] = value?.ToArray();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool AnalogsSpecified { get { return Analogs != null && Analogs.Count > 0; } }
|
||||
public bool AnalogsSpecified
|
||||
{
|
||||
get
|
||||
{
|
||||
var analogs = GetFieldValue<Analog[]?>(Models.Metadata.Port.AnalogKey);
|
||||
return analogs != null && analogs.Length > 0;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -10,33 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("ramoption"), XmlRoot("ramoption")]
|
||||
public class RamOption : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Determine whether the RamOption is default
|
||||
/// </summary>
|
||||
[JsonProperty("default", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("default")]
|
||||
public bool? Default
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.RamOption.DefaultKey);
|
||||
set => _internal[Models.Metadata.RamOption.DefaultKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool DefaultSpecified { get { return Default != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Determines the content of the RamOption
|
||||
/// </summary>
|
||||
[JsonProperty("content", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("content")]
|
||||
public string? Content
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.RamOption.ContentKey);
|
||||
set => _internal[Models.Metadata.RamOption.ContentKey] = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
@@ -10,53 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("release"), XmlRoot("release")]
|
||||
public class Release : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Release region(s)
|
||||
/// </summary>
|
||||
[JsonProperty("region", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("region")]
|
||||
public string? Region
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Release.RegionKey);
|
||||
set => _internal[Models.Metadata.Release.RegionKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Release language(s)
|
||||
/// </summary>
|
||||
[JsonProperty("language", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("language")]
|
||||
public string? Language
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Release.LanguageKey);
|
||||
set => _internal[Models.Metadata.Release.LanguageKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Date of release
|
||||
/// </summary>
|
||||
[JsonProperty("date", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("date")]
|
||||
public string? Date
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Release.DateKey);
|
||||
set => _internal[Models.Metadata.Release.DateKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Default release, if applicable
|
||||
/// </summary>
|
||||
[JsonProperty("default", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("default")]
|
||||
public bool? Default
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.Release.DefaultKey);
|
||||
set => _internal[Models.Metadata.Release.DefaultKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool DefaultSpecified { get { return Default != null; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -79,10 +32,6 @@ namespace SabreTools.DatItems.Formats
|
||||
|
||||
SetName(string.Empty);
|
||||
ItemType = ItemType.Release;
|
||||
Region = string.Empty;
|
||||
Language = string.Empty;
|
||||
Date = string.Empty;
|
||||
Default = null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -50,9 +50,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonProperty("nfosize", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nfosize")]
|
||||
public long? NfoSize { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
public bool NfoSizeSpecified { get { return NfoSize != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// NFO CRC value
|
||||
/// </summary>
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using SabreTools.Core;
|
||||
using SabreTools.Core.Tools;
|
||||
using SabreTools.FileTypes;
|
||||
@@ -15,356 +14,24 @@ namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
#region Fields
|
||||
|
||||
#region Common
|
||||
|
||||
/// <summary>
|
||||
/// What BIOS is required for this rom
|
||||
/// </summary>
|
||||
[JsonProperty("bios", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("bios")]
|
||||
public string? Bios
|
||||
[JsonIgnore]
|
||||
public bool ItemStatusSpecified
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.BiosKey);
|
||||
set => _internal[Models.Metadata.Rom.BiosKey] = value;
|
||||
get
|
||||
{
|
||||
var status = GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey);
|
||||
return status != ItemStatus.NULL && status != ItemStatus.None;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Byte size of the rom
|
||||
/// </summary>
|
||||
[JsonProperty("size", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("size")]
|
||||
public long? Size
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Rom.SizeKey);
|
||||
set => _internal[Models.Metadata.Rom.SizeKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool SizeSpecified { get { return Size != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// File CRC32 hash
|
||||
/// </summary>
|
||||
[JsonProperty("crc", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("crc")]
|
||||
public string? CRC
|
||||
public bool OriginalSpecified
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.CRCKey);
|
||||
set => _internal[Models.Metadata.Rom.CRCKey] = TextHelper.NormalizeCRC32(value);
|
||||
get
|
||||
{
|
||||
var original = GetFieldValue<Original?>("ORIGINAL");
|
||||
return original != null && original != default;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// File MD5 hash
|
||||
/// </summary>
|
||||
[JsonProperty("md5", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("md5")]
|
||||
public string? MD5
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.MD5Key);
|
||||
set => _internal[Models.Metadata.Rom.MD5Key] = TextHelper.NormalizeMD5(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// File SHA-1 hash
|
||||
/// </summary>
|
||||
[JsonProperty("sha1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sha1")]
|
||||
public string? SHA1
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.SHA1Key);
|
||||
set => _internal[Models.Metadata.Rom.SHA1Key] = TextHelper.NormalizeSHA1(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// File SHA-256 hash
|
||||
/// </summary>
|
||||
[JsonProperty("sha256", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sha256")]
|
||||
public string? SHA256
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.SHA256Key);
|
||||
set => _internal[Models.Metadata.Rom.SHA256Key] = TextHelper.NormalizeSHA256(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// File SHA-384 hash
|
||||
/// </summary>
|
||||
[JsonProperty("sha384", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sha384")]
|
||||
public string? SHA384
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.SHA384Key);
|
||||
set => _internal[Models.Metadata.Rom.SHA384Key] = TextHelper.NormalizeSHA384(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// File SHA-512 hash
|
||||
/// </summary>
|
||||
[JsonProperty("sha512", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sha512")]
|
||||
public string? SHA512
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.SHA512Key);
|
||||
set => _internal[Models.Metadata.Rom.SHA512Key] = TextHelper.NormalizeSHA512(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// File SpamSum fuzzy hash
|
||||
/// </summary>
|
||||
[JsonProperty("spamsum", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("spamsum")]
|
||||
public string? SpamSum
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.SpamSumKey);
|
||||
set => _internal[Models.Metadata.Rom.SpamSumKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Rom name to merge from parent
|
||||
/// </summary>
|
||||
[JsonProperty("merge", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("merge")]
|
||||
public string? MergeTag
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.MergeKey);
|
||||
set => _internal[Models.Metadata.Rom.MergeKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Rom region
|
||||
/// </summary>
|
||||
[JsonProperty("region", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("biregionos")]
|
||||
public string? Region
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.RegionKey);
|
||||
set => _internal[Models.Metadata.Rom.RegionKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Data offset within rom
|
||||
/// </summary>
|
||||
[JsonProperty("offset", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("offset")]
|
||||
public string? Offset
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.OffsetKey);
|
||||
set => _internal[Models.Metadata.Rom.OffsetKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// File created date
|
||||
/// </summary>
|
||||
[JsonProperty("date", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("date")]
|
||||
public string? Date
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.DateKey);
|
||||
set => _internal[Models.Metadata.Rom.DateKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Rom dump status
|
||||
/// </summary>
|
||||
[JsonProperty("status", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("status")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public ItemStatus ItemStatus
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.StatusKey).AsEnumValue<ItemStatus>();
|
||||
set => _internal[Models.Metadata.Rom.StatusKey] = value.AsStringValue<ItemStatus>(useSecond: false);
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ItemStatusSpecified { get { return ItemStatus != ItemStatus.NULL && ItemStatus != ItemStatus.None; } }
|
||||
|
||||
/// <summary>
|
||||
/// Determine if the rom is optional in the set
|
||||
/// </summary>
|
||||
[JsonProperty("optional", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("optional")]
|
||||
public bool? Optional
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.Rom.OptionalKey);
|
||||
set => _internal[Models.Metadata.Rom.OptionalKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool OptionalSpecified { get { return Optional != null; } }
|
||||
|
||||
/// <summary>
|
||||
/// Determine if the CRC32 hash is inverted
|
||||
/// </summary>
|
||||
[JsonProperty("inverted", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("inverted")]
|
||||
public bool? Inverted
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.Rom.InvertedKey);
|
||||
set => _internal[Models.Metadata.Rom.InvertedKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool InvertedSpecified { get { return Inverted != null; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Archive.org
|
||||
|
||||
/// <summary>
|
||||
/// Source of file
|
||||
/// </summary>
|
||||
[JsonProperty("ado_source", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("ado_source")]
|
||||
public string? ArchiveDotOrgSource
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.SourceKey);
|
||||
set => _internal[Models.Metadata.Rom.SourceKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Archive.org recognized file format
|
||||
/// </summary>
|
||||
[JsonProperty("ado_format", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("ado_format")]
|
||||
public string? ArchiveDotOrgFormat
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.FormatKey);
|
||||
set => _internal[Models.Metadata.Rom.FormatKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Original filename
|
||||
/// </summary>
|
||||
[JsonProperty("original_filename", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("original_filename")]
|
||||
public string? OriginalFilename
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.OriginalKey);
|
||||
set => _internal[Models.Metadata.Rom.OriginalKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Image rotation
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// TODO: This might be Int32?
|
||||
/// </remarks>
|
||||
[JsonProperty("rotation", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("rotation")]
|
||||
public string? Rotation
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.RotationKey);
|
||||
set => _internal[Models.Metadata.Rom.RotationKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Summation value?
|
||||
/// </summary>
|
||||
[JsonProperty("summation", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("summation")]
|
||||
public string? Summation
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.SummationKey);
|
||||
set => _internal[Models.Metadata.Rom.SummationKey] = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region AttractMode
|
||||
|
||||
/// <summary>
|
||||
/// Alternate name for the item
|
||||
/// </summary>
|
||||
[JsonProperty("alt_internalname", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("alt_internalname")]
|
||||
public string? AltName
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.AltRomnameKey);
|
||||
set => _internal[Models.Metadata.Rom.AltRomnameKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Alternate title for the item
|
||||
/// </summary>
|
||||
[JsonProperty("alt_title", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("alt_title")]
|
||||
public string? AltTitle
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.AltTitleKey);
|
||||
set => _internal[Models.Metadata.Rom.AltTitleKey] = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Logiqx
|
||||
|
||||
/// <summary>
|
||||
/// Alternate title for the item
|
||||
/// </summary>
|
||||
[JsonProperty("mia", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("mia")]
|
||||
public bool? MIA
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.Rom.MIAKey);
|
||||
set => _internal[Models.Metadata.Rom.MIAKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool MIASpecified { get { return MIA != null; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region OpenMSX
|
||||
|
||||
/// <summary>
|
||||
/// OpenMSX sub item type
|
||||
/// </summary>
|
||||
/// <remarks>Hack on top of internal model</remarks>
|
||||
[JsonProperty("original", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("original")]
|
||||
public Original? Original
|
||||
{
|
||||
get => _internal.Read<Original>("ORIGINAL");
|
||||
set => _internal["ORIGINAL"] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool OriginalSpecified { get { return Original != null && Original != default; } }
|
||||
|
||||
/// <summary>
|
||||
/// OpenMSX sub item type
|
||||
/// </summary>
|
||||
[JsonProperty("openmsx_subtype", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("openmsx_subtype")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public OpenMSXSubType OpenMSXSubType
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.OpenMSXMediaType).AsEnumValue<OpenMSXSubType>();
|
||||
set => _internal[Models.Metadata.Rom.OpenMSXMediaType] = value.AsStringValue<OpenMSXSubType>();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool OpenMSXSubTypeSpecified { get { return OpenMSXSubType != OpenMSXSubType.NULL; } }
|
||||
|
||||
/// <summary>
|
||||
/// OpenMSX sub item type
|
||||
/// </summary>
|
||||
/// <remarks>Not related to the subtype above</remarks>
|
||||
[JsonProperty("openmsx_type", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("openmsx_type")]
|
||||
public string? OpenMSXType
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.OpenMSXType);
|
||||
set => _internal[Models.Metadata.Rom.OpenMSXType] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Item remark (like a comment)
|
||||
/// </summary>
|
||||
[JsonProperty("remark", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("remark")]
|
||||
public string? Remark
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.RemarkKey);
|
||||
set => _internal[Models.Metadata.Rom.RemarkKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Boot state
|
||||
/// </summary>
|
||||
/// TODO: Investigate where this value came from?
|
||||
[JsonProperty("boot", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("boot")]
|
||||
public string? Boot
|
||||
{
|
||||
get => _internal.ReadString("BOOT");
|
||||
set => _internal["BOOT"] = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region SoftwareList
|
||||
|
||||
/// <summary>
|
||||
/// Data area information
|
||||
/// </summary>
|
||||
/// <remarks>Hack on top of internal model</remarks>
|
||||
[JsonProperty("dataarea", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("dataarea")]
|
||||
public DataArea? DataArea
|
||||
{
|
||||
get => _internal.Read<DataArea>("DATAAREA");
|
||||
set => _internal["DATAAREA"] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
@@ -372,62 +39,27 @@ namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
get
|
||||
{
|
||||
return DataArea != null
|
||||
&& (!string.IsNullOrEmpty(DataArea.GetName())
|
||||
|| DataArea.SizeSpecified
|
||||
|| DataArea.WidthSpecified
|
||||
|| DataArea.EndiannessSpecified);
|
||||
var dataArea = GetFieldValue<DataArea?>("DATAAREA");
|
||||
return dataArea != null
|
||||
&& (!string.IsNullOrEmpty(dataArea.GetName())
|
||||
|| dataArea.GetFieldValue<long?>(Models.Metadata.DataArea.SizeKey) != null
|
||||
|| dataArea.GetFieldValue<long?>(Models.Metadata.DataArea.WidthKey) != null
|
||||
|| dataArea.GetFieldValue<Endianness>(Models.Metadata.DataArea.EndiannessKey) != Endianness.NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loading flag
|
||||
/// </summary>
|
||||
[JsonProperty("loadflag", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("loadflag")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public LoadFlag LoadFlag
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.LoadFlagKey).AsEnumValue<LoadFlag>();
|
||||
set => _internal[Models.Metadata.Rom.LoadFlagKey] = value.AsStringValue<LoadFlag>();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool LoadFlagSpecified { get { return LoadFlag != LoadFlag.NULL; } }
|
||||
|
||||
/// <summary>
|
||||
/// Original hardware part associated with the item
|
||||
/// </summary>
|
||||
/// <remarks>Hack on top of internal model</remarks>
|
||||
[JsonProperty("part", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("part")]
|
||||
public Part? Part
|
||||
{
|
||||
get => _internal.Read<Part>("PART");
|
||||
set => _internal["PART"] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool PartSpecified
|
||||
{
|
||||
get
|
||||
{
|
||||
return Part != null
|
||||
&& (!string.IsNullOrEmpty(Part.GetName())
|
||||
|| !string.IsNullOrEmpty(Part.Interface));
|
||||
var part = GetFieldValue<Part?>("PART");
|
||||
return part != null
|
||||
&& (!string.IsNullOrEmpty(part.GetName())
|
||||
|| !string.IsNullOrEmpty(part.GetFieldValue<string?>(Models.Metadata.Part.InterfaceKey)));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// SoftwareList value associated with the item
|
||||
/// </summary>
|
||||
[JsonProperty("value", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("value")]
|
||||
public string? Value
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.Rom.ValueKey);
|
||||
set => _internal[Models.Metadata.Rom.ValueKey] = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion // Fields
|
||||
|
||||
#region Accessors
|
||||
@@ -453,7 +85,7 @@ namespace SabreTools.DatItems.Formats
|
||||
SetName(null);
|
||||
ItemType = ItemType.Rom;
|
||||
DupeType = 0x00;
|
||||
ItemStatus = ItemStatus.None;
|
||||
SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -467,8 +99,8 @@ namespace SabreTools.DatItems.Formats
|
||||
_internal = new Models.Metadata.Rom();
|
||||
SetName(name);
|
||||
ItemType = ItemType.Rom;
|
||||
Size = null;
|
||||
ItemStatus = ItemStatus.None;
|
||||
SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, null);
|
||||
SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
|
||||
|
||||
Machine = new Machine
|
||||
{
|
||||
@@ -487,19 +119,19 @@ namespace SabreTools.DatItems.Formats
|
||||
Machine = new Machine();
|
||||
|
||||
SetName(baseFile.Filename);
|
||||
Size = baseFile.Size;
|
||||
CRC = TextHelper.ByteArrayToString(baseFile.CRC);
|
||||
MD5 = TextHelper.ByteArrayToString(baseFile.MD5);
|
||||
SHA1 = TextHelper.ByteArrayToString(baseFile.SHA1);
|
||||
SHA256 = TextHelper.ByteArrayToString(baseFile.SHA256);
|
||||
SHA384 = TextHelper.ByteArrayToString(baseFile.SHA384);
|
||||
SHA512 = TextHelper.ByteArrayToString(baseFile.SHA512);
|
||||
SpamSum = System.Text.Encoding.UTF8.GetString(baseFile.SpamSum ?? []);
|
||||
SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, baseFile.Size);
|
||||
SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, TextHelper.ByteArrayToString(baseFile.CRC));
|
||||
SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, TextHelper.ByteArrayToString(baseFile.MD5));
|
||||
SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, TextHelper.ByteArrayToString(baseFile.SHA1));
|
||||
SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, TextHelper.ByteArrayToString(baseFile.SHA256));
|
||||
SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, TextHelper.ByteArrayToString(baseFile.SHA384));
|
||||
SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, TextHelper.ByteArrayToString(baseFile.SHA512));
|
||||
SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, System.Text.Encoding.UTF8.GetString(baseFile.SpamSum ?? []));
|
||||
|
||||
ItemType = ItemType.Rom;
|
||||
DupeType = 0x00;
|
||||
ItemStatus = ItemStatus.None;
|
||||
Date = baseFile.Date;
|
||||
SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
|
||||
SetFieldValue<string?>(Models.Metadata.Rom.DateKey, baseFile.Date);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -511,7 +143,7 @@ namespace SabreTools.DatItems.Formats
|
||||
|
||||
ItemType = ItemType.Rom;
|
||||
DupeType = 0x00;
|
||||
ItemStatus = ItemStatus.None;
|
||||
SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -541,17 +173,17 @@ namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
return new BaseFile()
|
||||
{
|
||||
Filename = this.GetName(),
|
||||
Filename = GetName(),
|
||||
Parent = this.Machine.Name,
|
||||
Date = this.Date,
|
||||
Size = this.Size,
|
||||
CRC = TextHelper.StringToByteArray(this.CRC),
|
||||
MD5 = TextHelper.StringToByteArray(this.MD5),
|
||||
SHA1 = TextHelper.StringToByteArray(this.SHA1),
|
||||
SHA256 = TextHelper.StringToByteArray(this.SHA256),
|
||||
SHA384 = TextHelper.StringToByteArray(this.SHA384),
|
||||
SHA512 = TextHelper.StringToByteArray(this.SHA512),
|
||||
SpamSum = System.Text.Encoding.UTF8.GetBytes(this.SpamSum ?? string.Empty),
|
||||
Date = GetFieldValue<string?>(Models.Metadata.Rom.DateKey),
|
||||
Size = GetFieldValue<long?>(Models.Metadata.Rom.SizeKey),
|
||||
CRC = TextHelper.StringToByteArray(GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)),
|
||||
MD5 = TextHelper.StringToByteArray(GetFieldValue<string?>(Models.Metadata.Rom.MD5Key)),
|
||||
SHA1 = TextHelper.StringToByteArray(GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)),
|
||||
SHA256 = TextHelper.StringToByteArray(GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key)),
|
||||
SHA384 = TextHelper.StringToByteArray(GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key)),
|
||||
SHA512 = TextHelper.StringToByteArray(GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key)),
|
||||
SpamSum = System.Text.Encoding.UTF8.GetBytes(GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey) ?? string.Empty),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -597,31 +229,31 @@ namespace SabreTools.DatItems.Formats
|
||||
switch (bucketedBy)
|
||||
{
|
||||
case ItemKey.CRC:
|
||||
key = CRC;
|
||||
key = GetFieldValue<string?>(Models.Metadata.Rom.CRCKey);
|
||||
break;
|
||||
|
||||
case ItemKey.MD5:
|
||||
key = MD5;
|
||||
key = GetFieldValue<string?>(Models.Metadata.Rom.MD5Key);
|
||||
break;
|
||||
|
||||
case ItemKey.SHA1:
|
||||
key = SHA1;
|
||||
key = GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key);
|
||||
break;
|
||||
|
||||
case ItemKey.SHA256:
|
||||
key = SHA256;
|
||||
key = GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key);
|
||||
break;
|
||||
|
||||
case ItemKey.SHA384:
|
||||
key = SHA384;
|
||||
key = GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key);
|
||||
break;
|
||||
|
||||
case ItemKey.SHA512:
|
||||
key = SHA512;
|
||||
key = GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key);
|
||||
break;
|
||||
|
||||
case ItemKey.SpamSum:
|
||||
key = SpamSum;
|
||||
key = GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey);
|
||||
break;
|
||||
|
||||
// Let the base handle generic stuff
|
||||
|
||||
@@ -10,20 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("sharedfeat"), XmlRoot("sharedfeat")]
|
||||
public class SharedFeature : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// SharedFeature value
|
||||
/// </summary>
|
||||
[JsonProperty("value"), XmlElement("value")]
|
||||
public string? Value
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.SharedFeat.ValueKey);
|
||||
set => _internal[Models.Metadata.SharedFeat.ValueKey] = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Xml.Serialization;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Core;
|
||||
|
||||
@@ -14,18 +12,15 @@ namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Slot options associated with the slot
|
||||
/// </summary>
|
||||
[JsonProperty("slotoptions", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("slotoptions")]
|
||||
public List<SlotOption>? SlotOptions
|
||||
{
|
||||
get => _internal.Read<SlotOption[]>(Models.Metadata.Slot.SlotOptionKey)?.ToList();
|
||||
set => _internal[Models.Metadata.Slot.SlotOptionKey] = value?.ToArray();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool SlotOptionsSpecified { get { return SlotOptions != null && SlotOptions.Count > 0; } }
|
||||
public bool SlotOptionsSpecified
|
||||
{
|
||||
get
|
||||
{
|
||||
var slotOptions = GetFieldValue<SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey);
|
||||
return slotOptions != null && slotOptions.Length > 0;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -10,33 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("slotoption"), XmlRoot("slotoption")]
|
||||
public class SlotOption : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Referenced device name
|
||||
/// </summary>
|
||||
[JsonProperty("devname"), XmlElement("devname")]
|
||||
public string? DeviceName
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.SlotOption.DevNameKey);
|
||||
set => _internal[Models.Metadata.SlotOption.DevNameKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines if this slot option is default or not
|
||||
/// </summary>
|
||||
[JsonProperty("default", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("default")]
|
||||
public bool? Default
|
||||
{
|
||||
get => _internal.ReadBool(Models.Metadata.SlotOption.DefaultKey);
|
||||
set => _internal[Models.Metadata.SlotOption.DefaultKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool DefaultSpecified { get { return Default != null; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using SabreTools.Core;
|
||||
using SabreTools.Core.Tools;
|
||||
|
||||
namespace SabreTools.DatItems.Formats
|
||||
{
|
||||
@@ -15,47 +13,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("softwarelist"), XmlRoot("softwarelist")]
|
||||
public class SoftwareList : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Tag for the software list
|
||||
/// </summary>
|
||||
[JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
[XmlElement("tag")]
|
||||
public string? Tag
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.SoftwareList.TagKey);
|
||||
set => _internal[Models.Metadata.SoftwareList.TagKey] = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Status of the softare list according to the machine
|
||||
/// </summary>
|
||||
[JsonProperty("status", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
[XmlElement("status")]
|
||||
public SoftwareListStatus Status
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.SoftwareList.StatusKey).AsEnumValue<SoftwareListStatus>();
|
||||
set => _internal[Models.Metadata.SoftwareList.StatusKey] = value.AsStringValue<SoftwareListStatus>();
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool StatusSpecified { get { return Status != SoftwareListStatus.None; } }
|
||||
|
||||
/// <summary>
|
||||
/// Filter to apply to the software list
|
||||
/// </summary>
|
||||
[JsonProperty("filter", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
[XmlElement("filter")]
|
||||
public string? Filter
|
||||
{
|
||||
get => _internal.ReadString(Models.Metadata.SoftwareList.FilterKey);
|
||||
set => _internal[Models.Metadata.SoftwareList.FilterKey] = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
@@ -10,23 +10,6 @@ namespace SabreTools.DatItems.Formats
|
||||
[JsonObject("sound"), XmlRoot("sound")]
|
||||
public class Sound : DatItem
|
||||
{
|
||||
#region Fields
|
||||
|
||||
/// <summary>
|
||||
/// Number of speakers or channels
|
||||
/// </summary>
|
||||
[JsonProperty("channels", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("channels")]
|
||||
public long? Channels
|
||||
{
|
||||
get => _internal.ReadLong(Models.Metadata.Sound.ChannelsKey);
|
||||
set => _internal[Models.Metadata.Sound.ChannelsKey] = value;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public bool ChannelsSpecified { get { return Channels != null; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
@@ -493,6 +494,26 @@ namespace SabreTools.DatItems
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a new Machine object from an existing metadata model
|
||||
/// </summary>
|
||||
/// <param name="machine">Machine metadata model</param>
|
||||
public Machine(Models.Metadata.Machine machine)
|
||||
{
|
||||
// Get all fields to automatically copy without processing
|
||||
var nonItemFields = TypeHelper.GetConstants(typeof(Models.Metadata.Machine));
|
||||
if (nonItemFields == null)
|
||||
return;
|
||||
|
||||
// Populate the internal machine from non-filter fields
|
||||
_machine = [];
|
||||
foreach (string fieldName in nonItemFields)
|
||||
{
|
||||
if (machine.ContainsKey(fieldName))
|
||||
_machine[fieldName] = machine[fieldName];
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a new Machine object with the included information
|
||||
/// </summary>
|
||||
|
||||
@@ -405,7 +405,7 @@ namespace SabreTools.DatTools
|
||||
datItem = media.ConvertToRom();
|
||||
|
||||
// Prepopluate a key string
|
||||
string crc = (datItem as Rom)!.CRC ?? string.Empty;
|
||||
string crc = (datItem as Rom)!.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey) ?? string.Empty;
|
||||
|
||||
// Try to get the stream for the file
|
||||
if (!GetFileStream(datItem, file, isZip, out Stream? fileStream))
|
||||
@@ -588,7 +588,7 @@ namespace SabreTools.DatTools
|
||||
logger.User($"Matches found for '{Path.GetFileName(datItem.GetName() ?? string.Empty)}', rebuilding accordingly...");
|
||||
|
||||
// Get the proper output path
|
||||
string sha1 = (datItem as Rom)!.SHA1 ?? string.Empty;
|
||||
string sha1 = (datItem as Rom)!.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key) ?? string.Empty;
|
||||
if (outputFormat == OutputFormat.TorrentGzipRomba)
|
||||
outDir = Path.Combine(outDir, Utilities.GetDepotPath(sha1, datFile.Header.OutputDepot?.Depth ?? 0) ?? string.Empty);
|
||||
else
|
||||
@@ -634,7 +634,7 @@ namespace SabreTools.DatTools
|
||||
logger.User($"Matches found for '{Path.GetFileName(datItem.GetName() ?? string.Empty)}', rebuilding accordingly...");
|
||||
|
||||
// Get the proper output path
|
||||
string sha1 = (datItem as Rom)!.SHA1 ?? string.Empty;
|
||||
string sha1 = (datItem as Rom)!.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key) ?? string.Empty;
|
||||
if (outputFormat == OutputFormat.TorrentXZRomba)
|
||||
outDir = Path.Combine(outDir, Utilities.GetDepotPath(sha1, datFile.Header.OutputDepot?.Depth ?? 0) ?? string.Empty).Replace(".gz", ".xz");
|
||||
else
|
||||
|
||||
@@ -185,49 +185,49 @@ namespace SabreTools.DatTools
|
||||
continue;
|
||||
|
||||
// If the file is a nodump
|
||||
if ((item.ItemType == ItemType.Rom && (item as Rom)!.ItemStatus == ItemStatus.Nodump)
|
||||
|| (item.ItemType == ItemType.Disk && (item as Disk)!.ItemStatus == ItemStatus.Nodump))
|
||||
if ((item.ItemType == ItemType.Rom && (item as Rom)!.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump)
|
||||
|| (item.ItemType == ItemType.Disk && (item as Disk)!.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump))
|
||||
{
|
||||
fieldDats[Models.Metadata.Rom.StatusKey].Items.Add(key, item);
|
||||
}
|
||||
|
||||
// If the file has a SHA-512
|
||||
else if ((item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.SHA512)))
|
||||
else if ((item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key))))
|
||||
{
|
||||
fieldDats[Models.Metadata.Rom.SHA512Key].Items.Add(key, item);
|
||||
}
|
||||
|
||||
// If the file has a SHA-384
|
||||
else if ((item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.SHA384)))
|
||||
else if ((item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key))))
|
||||
{
|
||||
fieldDats[Models.Metadata.Rom.SHA384Key].Items.Add(key, item);
|
||||
}
|
||||
|
||||
// If the file has a SHA-256
|
||||
else if ((item.ItemType == ItemType.Media && !string.IsNullOrEmpty((item as Media)!.SHA256))
|
||||
|| (item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.SHA256)))
|
||||
else if ((item.ItemType == ItemType.Media && !string.IsNullOrEmpty((item as Media)!.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key)))
|
||||
|| (item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key))))
|
||||
{
|
||||
fieldDats[Models.Metadata.Rom.SHA256Key].Items.Add(key, item);
|
||||
}
|
||||
|
||||
// If the file has a SHA-1
|
||||
else if ((item.ItemType == ItemType.Disk && !string.IsNullOrEmpty((item as Disk)!.SHA1))
|
||||
|| (item.ItemType == ItemType.Media && !string.IsNullOrEmpty((item as Media)!.SHA1))
|
||||
|| (item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.SHA1)))
|
||||
else if ((item.ItemType == ItemType.Disk && !string.IsNullOrEmpty((item as Disk)!.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
|| (item.ItemType == ItemType.Media && !string.IsNullOrEmpty((item as Media)!.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key)))
|
||||
|| (item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key))))
|
||||
{
|
||||
fieldDats[Models.Metadata.Rom.SHA1Key].Items.Add(key, item);
|
||||
}
|
||||
|
||||
// If the file has an MD5
|
||||
else if ((item.ItemType == ItemType.Disk && !string.IsNullOrEmpty((item as Disk)!.MD5))
|
||||
|| (item.ItemType == ItemType.Media && !string.IsNullOrEmpty((item as Media)!.MD5))
|
||||
|| (item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.MD5)))
|
||||
else if ((item.ItemType == ItemType.Disk && !string.IsNullOrEmpty((item as Disk)!.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)))
|
||||
|| (item.ItemType == ItemType.Media && !string.IsNullOrEmpty((item as Media)!.GetFieldValue<string?>(Models.Metadata.Media.MD5Key)))
|
||||
|| (item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key))))
|
||||
{
|
||||
fieldDats[Models.Metadata.Rom.MD5Key].Items.Add(key, item);
|
||||
}
|
||||
|
||||
// If the file has a CRC
|
||||
else if ((item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.CRC)))
|
||||
else if ((item.ItemType == ItemType.Rom && !string.IsNullOrEmpty((item as Rom)!.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey))))
|
||||
{
|
||||
fieldDats[Models.Metadata.Rom.CRCKey].Items.Add(key, item);
|
||||
}
|
||||
@@ -415,15 +415,15 @@ namespace SabreTools.DatTools
|
||||
lessThan.Items.Add(key, item);
|
||||
|
||||
// If the file is a Rom and has no size, put it in the "lesser" dat
|
||||
else if (item.ItemType == ItemType.Rom && (item as Rom)!.Size == null)
|
||||
else if (item.ItemType == ItemType.Rom && (item as Rom)!.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null)
|
||||
lessThan.Items.Add(key, item);
|
||||
|
||||
// If the file is a Rom and less than the radix, put it in the "lesser" dat
|
||||
else if (item.ItemType == ItemType.Rom && (item as Rom)!.Size < radix)
|
||||
else if (item.ItemType == ItemType.Rom && (item as Rom)!.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) < radix)
|
||||
lessThan.Items.Add(key, item);
|
||||
|
||||
// If the file is a Rom and greater than or equal to the radix, put it in the "greater" dat
|
||||
else if (item.ItemType == ItemType.Rom && (item as Rom)!.Size >= radix)
|
||||
else if (item.ItemType == ItemType.Rom && (item as Rom)!.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) >= radix)
|
||||
greaterThan.Items.Add(key, item);
|
||||
}
|
||||
#if NET40_OR_GREATER || NETCOREAPP
|
||||
@@ -487,8 +487,8 @@ namespace SabreTools.DatTools
|
||||
if (item is Rom rom)
|
||||
{
|
||||
// TODO: Should there be more than just a log if a single item is larger than the chunksize?
|
||||
machineSize += rom.Size ?? 0;
|
||||
if ((rom.Size ?? 0) > chunkSize)
|
||||
machineSize += rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) ?? 0;
|
||||
if ((rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) ?? 0) > chunkSize)
|
||||
logger.Error($"{rom.GetName() ?? string.Empty} in {machine} is larger than {chunkSize}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -296,7 +296,7 @@ namespace SabreTools.Filtering
|
||||
{
|
||||
if (configuration.ConditionsSpecified)
|
||||
{
|
||||
foreach (Condition subCondition in configuration.Conditions!)
|
||||
foreach (Condition subCondition in configuration.GetFieldValue<Condition[]?>(Models.Metadata.Configuration.ConditionKey)!)
|
||||
{
|
||||
RemoveFields(subCondition);
|
||||
}
|
||||
@@ -304,7 +304,7 @@ namespace SabreTools.Filtering
|
||||
|
||||
if (configuration.LocationsSpecified)
|
||||
{
|
||||
foreach (ConfLocation subLocation in configuration.Locations!)
|
||||
foreach (ConfLocation subLocation in configuration.GetFieldValue<ConfLocation[]?>(Models.Metadata.Configuration.ConfLocationKey)!)
|
||||
{
|
||||
RemoveFields(subLocation);
|
||||
}
|
||||
@@ -312,7 +312,7 @@ namespace SabreTools.Filtering
|
||||
|
||||
if (configuration.SettingsSpecified)
|
||||
{
|
||||
foreach (ConfSetting subSetting in configuration.Settings!)
|
||||
foreach (ConfSetting subSetting in configuration.GetFieldValue<ConfSetting[]?>(Models.Metadata.Configuration.ConfSettingKey)!)
|
||||
{
|
||||
RemoveFields(subSetting as DatItem);
|
||||
}
|
||||
@@ -327,7 +327,7 @@ namespace SabreTools.Filtering
|
||||
{
|
||||
if (confsetting.ConditionsSpecified)
|
||||
{
|
||||
foreach (Condition subCondition in confsetting.Conditions!)
|
||||
foreach (Condition subCondition in confsetting.GetFieldValue<Condition[]?>(Models.Metadata.ConfSetting.ConditionKey)!)
|
||||
{
|
||||
RemoveFields(subCondition);
|
||||
}
|
||||
@@ -342,7 +342,7 @@ namespace SabreTools.Filtering
|
||||
{
|
||||
if (device.ExtensionsSpecified)
|
||||
{
|
||||
foreach (Extension subExtension in device.Extensions!)
|
||||
foreach (Extension subExtension in device.GetFieldValue<Extension[]?>(Models.Metadata.Device.ExtensionKey)!)
|
||||
{
|
||||
RemoveFields(subExtension);
|
||||
}
|
||||
@@ -350,7 +350,7 @@ namespace SabreTools.Filtering
|
||||
|
||||
if (device.InstancesSpecified)
|
||||
{
|
||||
foreach (Instance subInstance in device.Instances!)
|
||||
foreach (Instance subInstance in device.GetFieldValue<Instance[]?>(Models.Metadata.Device.InstanceKey)!)
|
||||
{
|
||||
RemoveFields(subInstance);
|
||||
}
|
||||
@@ -365,7 +365,7 @@ namespace SabreTools.Filtering
|
||||
{
|
||||
if (dipSwitch.ConditionsSpecified)
|
||||
{
|
||||
foreach (Condition subCondition in dipSwitch.Conditions!)
|
||||
foreach (Condition subCondition in dipSwitch.GetFieldValue<Condition[]?>(Models.Metadata.DipSwitch.ConditionKey)!)
|
||||
{
|
||||
RemoveFields(subCondition);
|
||||
}
|
||||
@@ -373,7 +373,7 @@ namespace SabreTools.Filtering
|
||||
|
||||
if (dipSwitch.LocationsSpecified)
|
||||
{
|
||||
foreach (DipLocation subLocation in dipSwitch.Locations!)
|
||||
foreach (DipLocation subLocation in dipSwitch.GetFieldValue<DipLocation[]?>(Models.Metadata.DipSwitch.DipLocationKey)!)
|
||||
{
|
||||
RemoveFields(subLocation);
|
||||
}
|
||||
@@ -381,14 +381,14 @@ namespace SabreTools.Filtering
|
||||
|
||||
if (dipSwitch.ValuesSpecified)
|
||||
{
|
||||
foreach (DipValue subValue in dipSwitch.Values!)
|
||||
foreach (DipValue subValue in dipSwitch.GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey)!)
|
||||
{
|
||||
RemoveFields(subValue as DatItem);
|
||||
}
|
||||
}
|
||||
|
||||
if (dipSwitch.PartSpecified)
|
||||
RemoveFields(dipSwitch.Part! as DatItem);
|
||||
RemoveFields(dipSwitch.GetFieldValue<Part?>("PART")! as DatItem);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -399,7 +399,7 @@ namespace SabreTools.Filtering
|
||||
{
|
||||
if (dipValue.ConditionsSpecified)
|
||||
{
|
||||
foreach (Condition subCondition in dipValue.Conditions!)
|
||||
foreach (Condition subCondition in dipValue.GetFieldValue<Condition[]?>(Models.Metadata.DipValue.ConditionKey)!)
|
||||
{
|
||||
RemoveFields(subCondition);
|
||||
}
|
||||
@@ -413,10 +413,10 @@ namespace SabreTools.Filtering
|
||||
private void RemoveFields(Disk disk)
|
||||
{
|
||||
if (disk.DiskAreaSpecified)
|
||||
RemoveFields(disk.DiskArea);
|
||||
RemoveFields(disk.GetFieldValue<DiskArea?>("DISKAREA")! as DatItem);
|
||||
|
||||
if (disk.PartSpecified)
|
||||
RemoveFields(disk.Part! as DatItem);
|
||||
RemoveFields(disk.GetFieldValue<Part?>("PART")! as DatItem);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -427,7 +427,7 @@ namespace SabreTools.Filtering
|
||||
{
|
||||
if (input.ControlsSpecified)
|
||||
{
|
||||
foreach (Control subControl in input.Controls!)
|
||||
foreach (Control subControl in input.GetFieldValue<Control[]?>(Models.Metadata.Input.ControlKey)!)
|
||||
{
|
||||
RemoveFields(subControl);
|
||||
}
|
||||
@@ -442,7 +442,7 @@ namespace SabreTools.Filtering
|
||||
{
|
||||
if (part.FeaturesSpecified)
|
||||
{
|
||||
foreach (PartFeature subPartFeature in part.Features!)
|
||||
foreach (PartFeature subPartFeature in part.GetFieldValue<PartFeature[]?>(Models.Metadata.Part.FeatureKey)!)
|
||||
{
|
||||
RemoveFields(subPartFeature);
|
||||
}
|
||||
@@ -457,7 +457,7 @@ namespace SabreTools.Filtering
|
||||
{
|
||||
if (port.AnalogsSpecified)
|
||||
{
|
||||
foreach (Analog subAnalog in port.Analogs!)
|
||||
foreach (Analog subAnalog in port.GetFieldValue<Analog[]?>(Models.Metadata.Port.AnalogKey)!)
|
||||
{
|
||||
RemoveFields(subAnalog);
|
||||
}
|
||||
@@ -471,10 +471,10 @@ namespace SabreTools.Filtering
|
||||
private void RemoveFields(Rom rom)
|
||||
{
|
||||
if (rom.DataAreaSpecified)
|
||||
RemoveFields(rom.DataArea!);
|
||||
RemoveFields(rom.GetFieldValue<DataArea?>("DATAAREA")!);
|
||||
|
||||
if (rom.PartSpecified)
|
||||
RemoveFields(rom.Part! as DatItem);
|
||||
RemoveFields(rom.GetFieldValue<Part?>("PART")! as DatItem);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -485,7 +485,7 @@ namespace SabreTools.Filtering
|
||||
{
|
||||
if (slot.SlotOptionsSpecified)
|
||||
{
|
||||
foreach (SlotOption subSlotOption in slot.SlotOptions!)
|
||||
foreach (SlotOption subSlotOption in slot.GetFieldValue<SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey)!)
|
||||
{
|
||||
RemoveFields(subSlotOption);
|
||||
}
|
||||
|
||||
@@ -107,14 +107,14 @@ namespace SabreTools.Filtering
|
||||
{
|
||||
if (datItemFields.Contains(Models.Metadata.Disk.MD5Key))
|
||||
{
|
||||
if (string.IsNullOrEmpty(disk.MD5) && !string.IsNullOrEmpty(newItem.MD5))
|
||||
disk.MD5 = newItem.MD5;
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)))
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, newItem.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key));
|
||||
}
|
||||
|
||||
if (datItemFields.Contains(Models.Metadata.Disk.SHA1Key))
|
||||
{
|
||||
if (string.IsNullOrEmpty(disk.SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
|
||||
disk.SHA1 = newItem.SHA1;
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, newItem.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,26 +128,26 @@ namespace SabreTools.Filtering
|
||||
{
|
||||
if (datItemFields.Contains(Models.Metadata.Media.MD5Key))
|
||||
{
|
||||
if (string.IsNullOrEmpty(media.MD5) && !string.IsNullOrEmpty(newItem.MD5))
|
||||
media.MD5 = newItem.MD5;
|
||||
if (string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue<string?>(Models.Metadata.Media.MD5Key)))
|
||||
media.SetFieldValue<string?>(Models.Metadata.Media.MD5Key, newItem.GetFieldValue<string?>(Models.Metadata.Media.MD5Key));
|
||||
}
|
||||
|
||||
if (datItemFields.Contains(Models.Metadata.Media.SHA1Key))
|
||||
{
|
||||
if (string.IsNullOrEmpty(media.SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
|
||||
media.SHA1 = newItem.SHA1;
|
||||
if (string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key)))
|
||||
media.SetFieldValue<string?>(Models.Metadata.Media.SHA1Key, newItem.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key));
|
||||
}
|
||||
|
||||
if (datItemFields.Contains(Models.Metadata.Media.SHA256Key))
|
||||
{
|
||||
if (string.IsNullOrEmpty(media.SHA256) && !string.IsNullOrEmpty(newItem.SHA256))
|
||||
media.SHA256 = newItem.SHA256;
|
||||
if (string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key)))
|
||||
media.SetFieldValue<string?>(Models.Metadata.Media.SHA256Key, newItem.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key));
|
||||
}
|
||||
|
||||
if (datItemFields.Contains(Models.Metadata.Media.SpamSumKey))
|
||||
{
|
||||
if (string.IsNullOrEmpty(media.SpamSum) && !string.IsNullOrEmpty(newItem.SpamSum))
|
||||
media.SpamSum = newItem.SpamSum;
|
||||
if (string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey)) && !string.IsNullOrEmpty(newItem.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey)))
|
||||
media.SetFieldValue<string?>(Models.Metadata.Media.SpamSumKey, newItem.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,44 +161,44 @@ namespace SabreTools.Filtering
|
||||
{
|
||||
if (datItemFields.Contains(Models.Metadata.Rom.CRCKey))
|
||||
{
|
||||
if (string.IsNullOrEmpty(rom.CRC) && !string.IsNullOrEmpty(newItem.CRC))
|
||||
rom.CRC = newItem.CRC;
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)) && !string.IsNullOrEmpty(newItem.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)))
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, newItem.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey));
|
||||
}
|
||||
|
||||
if (datItemFields.Contains(Models.Metadata.Rom.MD5Key))
|
||||
{
|
||||
if (string.IsNullOrEmpty(rom.MD5) && !string.IsNullOrEmpty(newItem.MD5))
|
||||
rom.MD5 = newItem.MD5;
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key)))
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, newItem.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key));
|
||||
}
|
||||
|
||||
if (datItemFields.Contains(Models.Metadata.Rom.SHA1Key))
|
||||
{
|
||||
if (string.IsNullOrEmpty(rom.SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
|
||||
rom.SHA1 = newItem.SHA1;
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)))
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, newItem.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key));
|
||||
}
|
||||
|
||||
if (datItemFields.Contains(Models.Metadata.Rom.SHA256Key))
|
||||
{
|
||||
if (string.IsNullOrEmpty(rom.SHA256) && !string.IsNullOrEmpty(newItem.SHA256))
|
||||
rom.SHA256 = newItem.SHA256;
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key)))
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, newItem.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key));
|
||||
}
|
||||
|
||||
if (datItemFields.Contains(Models.Metadata.Rom.SHA384Key))
|
||||
{
|
||||
if (string.IsNullOrEmpty(rom.SHA384) && !string.IsNullOrEmpty(newItem.SHA384))
|
||||
rom.SHA384 = newItem.SHA384;
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key)))
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, newItem.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key));
|
||||
}
|
||||
|
||||
if (datItemFields.Contains(Models.Metadata.Rom.SHA512Key))
|
||||
{
|
||||
if (string.IsNullOrEmpty(rom.SHA512) && !string.IsNullOrEmpty(newItem.SHA512))
|
||||
rom.SHA512 = newItem.SHA512;
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key)) && !string.IsNullOrEmpty(newItem.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key)))
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, newItem.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key));
|
||||
}
|
||||
|
||||
if (datItemFields.Contains(Models.Metadata.Rom.SpamSumKey))
|
||||
{
|
||||
if (string.IsNullOrEmpty(rom.SpamSum) && !string.IsNullOrEmpty(newItem.SpamSum))
|
||||
rom.SpamSum = newItem.SpamSum;
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)) && !string.IsNullOrEmpty(newItem.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)))
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, newItem.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -310,8 +310,8 @@ namespace SabreTools.Filtering
|
||||
.Where(i => i.ItemType == ItemType.Slot)
|
||||
.Select(i => i as Slot)
|
||||
.Where(s => s!.SlotOptionsSpecified)
|
||||
.SelectMany(s => s!.SlotOptions!)
|
||||
.Select(so => so.DeviceName)
|
||||
.SelectMany(s => s!.GetFieldValue<SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey)!)
|
||||
.Select(so => so.GetFieldValue<string?>(Models.Metadata.SlotOption.DevNameKey))
|
||||
.Distinct()
|
||||
.ToList();
|
||||
|
||||
@@ -384,8 +384,8 @@ namespace SabreTools.Filtering
|
||||
newSlotOptions.AddRange(slotItems
|
||||
.Where(i => i.ItemType == ItemType.Slot)
|
||||
.Where(s => (s as Slot)!.SlotOptionsSpecified)
|
||||
.SelectMany(s => (s as Slot)!.SlotOptions!)
|
||||
.Select(o => o.DeviceName!));
|
||||
.SelectMany(s => (s as Slot)!.GetFieldValue<SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey)!)
|
||||
.Select(o => o.GetFieldValue<string?>(Models.Metadata.SlotOption.DevNameKey)!));
|
||||
|
||||
// Set new machine information and add to the current machine
|
||||
DatItem copyFrom = datFile.Items[machine]![0];
|
||||
@@ -409,7 +409,15 @@ namespace SabreTools.Filtering
|
||||
foreach (string slotOption in newSlotOptions.Distinct())
|
||||
{
|
||||
if (!slotOptions.Contains(slotOption))
|
||||
datFile.Items[machine]!.Add(new Slot() { SlotOptions = new List<SlotOption> { new SlotOption { DeviceName = slotOption } } });
|
||||
{
|
||||
var slotOptionItem = new SlotOption();
|
||||
slotOptionItem.SetFieldValue<string?>(Models.Metadata.SlotOption.DevNameKey, slotOption);
|
||||
|
||||
var slotItem = new Slot();
|
||||
slotItem.SetFieldValue<SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey, [slotOptionItem]);
|
||||
|
||||
datFile.Items[machine]!.Add(slotItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -513,22 +521,23 @@ namespace SabreTools.Filtering
|
||||
if (item.ItemType == ItemType.Disk)
|
||||
{
|
||||
Disk disk = (item as Disk)!;
|
||||
string? mergeTag = disk.GetFieldValue<string?>(Models.Metadata.Disk.MergeKey);
|
||||
|
||||
// If the merge tag exists and the parent already contains it, skip
|
||||
if (disk.MergeTag != null && datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Disk).Select(i => (i as Disk)!.GetName()).Contains(disk.MergeTag))
|
||||
if (mergeTag != null && datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Disk).Select(i => (i as Disk)!.GetName()).Contains(mergeTag))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// If the merge tag exists but the parent doesn't contain it, add to parent
|
||||
else if (disk.MergeTag != null && !datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Disk).Select(i => (i as Disk)!.GetName()).Contains(disk.MergeTag))
|
||||
else if (mergeTag != null && !datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Disk).Select(i => (i as Disk)!.GetName()).Contains(mergeTag))
|
||||
{
|
||||
disk.CopyMachineInformation(copyFrom);
|
||||
datFile.Items.Add(parent!, disk);
|
||||
}
|
||||
|
||||
// If there is no merge tag, add to parent
|
||||
else if (disk.MergeTag == null)
|
||||
else if (mergeTag == null)
|
||||
{
|
||||
disk.CopyMachineInformation(copyFrom);
|
||||
datFile.Items.Add(parent!, disk);
|
||||
@@ -541,13 +550,13 @@ namespace SabreTools.Filtering
|
||||
Rom rom = (item as Rom)!;
|
||||
|
||||
// If the merge tag exists and the parent already contains it, skip
|
||||
if (rom.MergeTag != null && datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Rom).Select(i => (i as Rom)!.GetName()).Contains(rom.MergeTag))
|
||||
if (rom.GetFieldValue<string?>(Models.Metadata.Rom.MergeKey) != null && datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Rom).Select(i => (i as Rom)!.GetName()).Contains(rom.GetFieldValue<string?>(Models.Metadata.Rom.MergeKey)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// If the merge tag exists but the parent doesn't contain it, add to subfolder of parent
|
||||
else if (rom.MergeTag != null && !datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Rom).Select(i => (i as Rom)!.GetName()).Contains(rom.MergeTag))
|
||||
else if (rom.GetFieldValue<string?>(Models.Metadata.Rom.MergeKey) != null && !datFile.Items[parent!]!.Where(i => i.ItemType == ItemType.Rom).Select(i => (i as Rom)!.GetName()).Contains(rom.GetFieldValue<string?>(Models.Metadata.Rom.MergeKey)))
|
||||
{
|
||||
if (subfolder)
|
||||
rom.SetName($"{rom.Machine.Name}\\{rom.GetName()}");
|
||||
|
||||
@@ -14,48 +14,37 @@ namespace SabreTools.Test.DatFiles
|
||||
[InlineData(ItemKey.SHA1, 4)]
|
||||
public void BucketByTest(ItemKey itemKey, int expected)
|
||||
{
|
||||
// Setup the items
|
||||
var rom1 = new Rom { Machine = new Machine { Name = "game-1" } };
|
||||
rom1.SetName("rom-1");
|
||||
rom1.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, "DEADBEEF");
|
||||
rom1.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6");
|
||||
rom1.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, 1024);
|
||||
|
||||
var rom2 = new Rom { Machine = new Machine { Name = "game-1" } };
|
||||
rom2.SetName("rom-2");
|
||||
rom2.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, "DEADBEEF");
|
||||
rom2.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44");
|
||||
rom2.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, 1024);
|
||||
|
||||
var rom3 = new Rom { Machine = new Machine { Name = "game-2" } };
|
||||
rom3.SetName("rom-3");
|
||||
rom3.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, "DEADBEEF");
|
||||
rom3.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, "00000ea4014ce66679e7e17d56ac510f67e39e26");
|
||||
rom3.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, 1024);
|
||||
|
||||
var rom4 = new Rom { Machine = new Machine { Name = "game-2" } };
|
||||
rom4.SetName("rom-4");
|
||||
rom4.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, "DEADBEEF");
|
||||
rom4.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, "00000151d437442e74e5134023fab8bf694a2487");
|
||||
rom4.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, 1024);
|
||||
|
||||
// Setup the dictionary
|
||||
var dict = new ItemDictionary
|
||||
{
|
||||
["game-1"] =
|
||||
[
|
||||
new Rom
|
||||
{
|
||||
Size = 1024,
|
||||
CRC = "DEADBEEF",
|
||||
SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6",
|
||||
Machine = new Machine { Name = "game-1" },
|
||||
},
|
||||
new Rom
|
||||
{
|
||||
Size = 1024,
|
||||
CRC = "DEADBEEF",
|
||||
SHA1 = "000000e948edcb4f7704b8af85a77a3339ecce44",
|
||||
Machine = new Machine { Name = "game-1" },
|
||||
},
|
||||
],
|
||||
["game-2"] =
|
||||
[
|
||||
new Rom
|
||||
{
|
||||
Size = 1024,
|
||||
CRC = "DEADBEEF",
|
||||
SHA1 = "00000ea4014ce66679e7e17d56ac510f67e39e26",
|
||||
Machine = new Machine { Name = "game-2" },
|
||||
},
|
||||
new Rom
|
||||
{
|
||||
Size = 1024,
|
||||
CRC = "DEADBEEF",
|
||||
SHA1 = "00000151d437442e74e5134023fab8bf694a2487",
|
||||
Machine = new Machine { Name = "game-2" },
|
||||
},
|
||||
],
|
||||
["game-1"] = [rom1, rom2],
|
||||
["game-2"] = [rom3, rom4],
|
||||
};
|
||||
dict["game-1"]![0].SetName("rom-1");
|
||||
dict["game-1"]![1].SetName("rom-2");
|
||||
dict["game-2"]![0].SetName("rom-3");
|
||||
dict["game-2"]![1].SetName("rom-4");
|
||||
|
||||
dict.BucketBy(itemKey, DedupeType.None);
|
||||
Assert.Equal(expected, dict.Keys.Count);
|
||||
@@ -79,30 +68,24 @@ namespace SabreTools.Test.DatFiles
|
||||
[Fact]
|
||||
public void ClearMarkedTest()
|
||||
{
|
||||
// Setup the items
|
||||
var rom1 = new Rom { Machine = new Machine { Name = "game-1" } };
|
||||
rom1.SetName("rom-1");
|
||||
rom1.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, "DEADBEEF");
|
||||
rom1.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6");
|
||||
rom1.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, 1024);
|
||||
|
||||
var rom2 = new Rom { Machine = new Machine { Name = "game-1" }, Remove = true };
|
||||
rom2.SetName("rom-2");
|
||||
rom2.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, "DEADBEEF");
|
||||
rom2.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44");
|
||||
rom2.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, 1024);
|
||||
|
||||
// Setup the dictionary
|
||||
var dict = new ItemDictionary
|
||||
{
|
||||
["game-1"] =
|
||||
[
|
||||
new Rom
|
||||
{
|
||||
Size = 1024,
|
||||
CRC = "DEADBEEF",
|
||||
SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6",
|
||||
Machine = new Machine { Name = "game-1" },
|
||||
},
|
||||
new Rom
|
||||
{
|
||||
Size = 1024,
|
||||
CRC = "DEADBEEF",
|
||||
SHA1 = "000000e948edcb4f7704b8af85a77a3339ecce44",
|
||||
Machine = new Machine { Name = "game-1" },
|
||||
Remove = true,
|
||||
},
|
||||
],
|
||||
["game-1"] = [rom1, rom2],
|
||||
};
|
||||
dict["game-1"]![0].SetName("rom-1");
|
||||
dict["game-1"]![1].SetName("rom-2");
|
||||
|
||||
dict.ClearMarked();
|
||||
string key = Assert.Single(dict.Keys);
|
||||
@@ -116,35 +99,28 @@ namespace SabreTools.Test.DatFiles
|
||||
[InlineData(false, 0)]
|
||||
public void GetDuplicatesTest(bool hasDuplicate, int expected)
|
||||
{
|
||||
// Setup the items
|
||||
var rom1 = new Rom { Machine = new Machine { Name = "game-1" } };
|
||||
rom1.SetName("rom-1");
|
||||
rom1.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6");
|
||||
rom1.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, 1024);
|
||||
|
||||
var rom2 = new Rom { Machine = new Machine { Name = "game-1" } };
|
||||
rom2.SetName("rom-2");
|
||||
rom2.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44");
|
||||
rom2.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, 1024);
|
||||
|
||||
// Setup the dictionary
|
||||
var dict = new ItemDictionary
|
||||
{
|
||||
["game-1"] =
|
||||
[
|
||||
new Rom
|
||||
{
|
||||
Size = 1024,
|
||||
SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6",
|
||||
Machine = new Machine { Name = "game-1" },
|
||||
},
|
||||
new Rom
|
||||
{
|
||||
Size = 1024,
|
||||
SHA1 = "000000e948edcb4f7704b8af85a77a3339ecce44",
|
||||
Machine = new Machine { Name = "game-1" },
|
||||
},
|
||||
],
|
||||
["game-1"] = [rom1, rom2],
|
||||
};
|
||||
dict["game-1"]![0].SetName("rom-1");
|
||||
dict["game-1"]![1].SetName("rom-2");
|
||||
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = hasDuplicate ? 1024 : 2048,
|
||||
SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6",
|
||||
Machine = new Machine { Name = "game-1" },
|
||||
};
|
||||
// Setup the test item
|
||||
var rom = new Rom { Machine = new Machine { Name = "game-1" } };
|
||||
rom.SetName("rom-1");
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6");
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, hasDuplicate ? 1024 : 2048);
|
||||
|
||||
var actual = dict.GetDuplicates(rom);
|
||||
Assert.Equal(expected, actual.Count);
|
||||
@@ -155,35 +131,28 @@ namespace SabreTools.Test.DatFiles
|
||||
[InlineData(false)]
|
||||
public void HasDuplicatesTest(bool expected)
|
||||
{
|
||||
// Setup the items
|
||||
var rom1 = new Rom { Machine = new Machine { Name = "game-1" } };
|
||||
rom1.SetName("rom-1");
|
||||
rom1.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6");
|
||||
rom1.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, 1024);
|
||||
|
||||
var rom2 = new Rom { Machine = new Machine { Name = "game-1" } };
|
||||
rom2.SetName("rom-2");
|
||||
rom2.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44");
|
||||
rom2.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, 1024);
|
||||
|
||||
// Setup the dictionary
|
||||
var dict = new ItemDictionary
|
||||
{
|
||||
["game-1"] =
|
||||
[
|
||||
new Rom
|
||||
{
|
||||
Size = 1024,
|
||||
SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6",
|
||||
Machine = new Machine { Name = "game-1" },
|
||||
},
|
||||
new Rom
|
||||
{
|
||||
Size = 1024,
|
||||
SHA1 = "000000e948edcb4f7704b8af85a77a3339ecce44",
|
||||
Machine = new Machine { Name = "game-1" },
|
||||
},
|
||||
],
|
||||
["game-1"] = [rom1, rom2],
|
||||
};
|
||||
dict["game-1"]![0].SetName("rom-1");
|
||||
dict["game-1"]![1].SetName("rom-2");
|
||||
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = expected ? 1024 : 2048,
|
||||
SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6",
|
||||
Machine = new Machine { Name = "game-1" },
|
||||
};
|
||||
// Setup the test item
|
||||
var rom = new Rom { Machine = new Machine { Name = "game-1" } };
|
||||
rom.SetName("rom-1");
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6");
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, expected ? 1024 : 2048);
|
||||
|
||||
bool actual = dict.HasDuplicates(rom);
|
||||
Assert.Equal(expected, actual);
|
||||
|
||||
@@ -49,24 +49,19 @@ namespace SabreTools.Test.DatItems
|
||||
{
|
||||
var romA = new Rom
|
||||
{
|
||||
CRC = "DEADBEEF",
|
||||
Machine = new Machine
|
||||
{
|
||||
Name = "name-same",
|
||||
},
|
||||
Machine = new Machine { Name = "name-same" },
|
||||
Source = new Source { Index = 0 },
|
||||
};
|
||||
romA.SetName("same-name");
|
||||
romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
|
||||
|
||||
var romB = new Rom
|
||||
{
|
||||
CRC = "DEADBEEF",
|
||||
Machine = new Machine
|
||||
{
|
||||
Name = "name-same",
|
||||
},
|
||||
Machine = new Machine { Name = "name-same" },
|
||||
Source = new Source { Index = 1 },
|
||||
};
|
||||
romB.SetName("same-name");
|
||||
romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
|
||||
|
||||
var actual = romA.GetDuplicateStatus(romB);
|
||||
Assert.Equal(DupeType.External | DupeType.All, actual);
|
||||
@@ -77,24 +72,19 @@ namespace SabreTools.Test.DatItems
|
||||
{
|
||||
var romA = new Rom
|
||||
{
|
||||
CRC = "DEADBEEF",
|
||||
Machine = new Machine
|
||||
{
|
||||
Name = "name-same",
|
||||
},
|
||||
Machine = new Machine { Name = "name-same" },
|
||||
Source = new Source { Index = 0 },
|
||||
};
|
||||
romA.SetName("same-name");
|
||||
romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
|
||||
|
||||
var romB = new Rom
|
||||
{
|
||||
CRC = "DEADBEEF",
|
||||
Machine = new Machine
|
||||
{
|
||||
Name = "not-name-same",
|
||||
},
|
||||
Machine = new Machine { Name = "not-name-same" },
|
||||
Source = new Source { Index = 1 },
|
||||
};
|
||||
romB.SetName("same-name");
|
||||
romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
|
||||
|
||||
var actual = romA.GetDuplicateStatus(romB);
|
||||
Assert.Equal(DupeType.External | DupeType.Hash, actual);
|
||||
@@ -105,24 +95,19 @@ namespace SabreTools.Test.DatItems
|
||||
{
|
||||
var romA = new Rom
|
||||
{
|
||||
CRC = "DEADBEEF",
|
||||
Machine = new Machine
|
||||
{
|
||||
Name = "name-same",
|
||||
},
|
||||
Machine = new Machine { Name = "name-same" },
|
||||
Source = new Source { Index = 0 },
|
||||
};
|
||||
romA.SetName("same-name");
|
||||
romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
|
||||
|
||||
var romB = new Rom
|
||||
{
|
||||
CRC = "DEADBEEF",
|
||||
Machine = new Machine
|
||||
{
|
||||
Name = "name-same",
|
||||
},
|
||||
Machine = new Machine { Name = "name-same" },
|
||||
Source = new Source { Index = 0 },
|
||||
};
|
||||
romB.SetName("same-name");
|
||||
romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
|
||||
|
||||
var actual = romA.GetDuplicateStatus(romB);
|
||||
Assert.Equal(DupeType.Internal | DupeType.All, actual);
|
||||
@@ -133,24 +118,19 @@ namespace SabreTools.Test.DatItems
|
||||
{
|
||||
var romA = new Rom
|
||||
{
|
||||
CRC = "DEADBEEF",
|
||||
Machine = new Machine
|
||||
{
|
||||
Name = "name-same",
|
||||
},
|
||||
Machine = new Machine { Name = "name-same" },
|
||||
Source = new Source { Index = 0 },
|
||||
};
|
||||
romA.SetName("same-name");
|
||||
romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
|
||||
|
||||
var romB = new Rom
|
||||
{
|
||||
CRC = "DEADBEEF",
|
||||
Machine = new Machine
|
||||
{
|
||||
Name = "not-name-same",
|
||||
},
|
||||
Machine = new Machine { Name = "not-name-same" },
|
||||
Source = new Source { Index = 0 },
|
||||
};
|
||||
romB.SetName("same-name");
|
||||
romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
|
||||
|
||||
var actual = romA.GetDuplicateStatus(romB);
|
||||
Assert.Equal(DupeType.Internal | DupeType.Hash, actual);
|
||||
|
||||
Reference in New Issue
Block a user