Remove nearly all explict fields

This commit is contained in:
Matt Nadareski
2024-03-09 21:34:26 -05:00
parent c755abf4c0
commit 24d4e352a4
79 changed files with 1723 additions and 3554 deletions

View File

@@ -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");

View File

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

View File

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

View File

@@ -65,41 +65,39 @@ namespace SabreTools.DatFiles.Formats
if (row == null)
return;
var machine = new Machine
{
Name = row.Name,
Description = row.Title,
CloneOf = row.CloneOf,
Year = row.Year,
Manufacturer = row.Manufacturer,
Category = row.Category,
Players = row.Players,
Rotation = row.Rotation,
Control = row.Control,
Status = row.Status,
DisplayCount = row.DisplayCount,
DisplayType = row.DisplayType,
Comment = row.Extra,
Buttons = row.Buttons
};
var rom = new Rom()
{
Size = Constants.SizeZero,
CRC = Constants.CRCZero,
MD5 = Constants.MD5Zero,
SHA1 = Constants.SHA1Zero,
ItemStatus = ItemStatus.None,
Machine = new Machine
{
Name = row.Name,
Description = row.Title,
CloneOf = row.CloneOf,
Year = row.Year,
Manufacturer = row.Manufacturer,
Category = row.Category,
Players = row.Players,
Rotation = row.Rotation,
Control = row.Control,
Status = row.Status,
DisplayCount = row.DisplayCount,
DisplayType = row.DisplayType,
Comment = row.Extra,
Buttons = row.Buttons
},
AltName = row.AltRomname,
AltTitle = row.AltTitle,
// TODO: Add extended fields
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);
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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
{

View File

@@ -107,27 +107,27 @@ namespace SabreTools.DatFiles.Formats
foreach (var rom in games.Rom)
{
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
{
Size = NumberHelper.ConvertToInt64(rom.RomSize),
CRC = rom.RomCRC,
MergeTag = rom.MergeName,
ItemStatus = ItemStatus.None,
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,
},
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);
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View 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
}
}

View File

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