mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Remove nearly all explict fields
This commit is contained in:
@@ -221,12 +221,12 @@ namespace SabreTools.DatFiles
|
||||
if (item.ItemType == ItemType.Disk && item is Disk disk)
|
||||
{
|
||||
// If the file has aboslutely no hashes, skip and log
|
||||
if (disk.ItemStatus != ItemStatus.Nodump
|
||||
&& string.IsNullOrEmpty(disk.MD5)
|
||||
&& string.IsNullOrEmpty(disk.SHA1))
|
||||
if (disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump
|
||||
&& string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key))
|
||||
&& string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
{
|
||||
logger.Verbose($"Incomplete entry for '{disk.GetName()}' will be output as nodump");
|
||||
disk.ItemStatus = ItemStatus.Nodump;
|
||||
disk.SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, ItemStatus.Nodump);
|
||||
}
|
||||
|
||||
item = disk;
|
||||
@@ -234,10 +234,10 @@ namespace SabreTools.DatFiles
|
||||
if (item.ItemType == ItemType.Media && item is Media media)
|
||||
{
|
||||
// If the file has aboslutely no hashes, skip and log
|
||||
if (string.IsNullOrEmpty(media.MD5)
|
||||
&& string.IsNullOrEmpty(media.SHA1)
|
||||
&& string.IsNullOrEmpty(media.SHA256)
|
||||
&& string.IsNullOrEmpty(media.SpamSum))
|
||||
if (string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key))
|
||||
&& string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key))
|
||||
&& string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key))
|
||||
&& string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey)))
|
||||
{
|
||||
logger.Verbose($"Incomplete entry for '{media.GetName()}' will be output as nodump");
|
||||
}
|
||||
@@ -247,41 +247,41 @@ namespace SabreTools.DatFiles
|
||||
else if (item.ItemType == ItemType.Rom && item is Rom rom)
|
||||
{
|
||||
// If we have the case where there is SHA-1 and nothing else, we don't fill in any other part of the data
|
||||
if (rom.Size == null && !rom.HasHashes())
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null && !rom.HasHashes())
|
||||
{
|
||||
// No-op, just catch it so it doesn't go further
|
||||
logger.Verbose($"{Header.FileName}: Entry with only SHA-1 found - '{rom.GetName()}'");
|
||||
}
|
||||
|
||||
// If we have a rom and it's missing size AND the hashes match a 0-byte file, fill in the rest of the info
|
||||
else if ((rom.Size == 0 || rom.Size == null)
|
||||
&& (string.IsNullOrEmpty(rom.CRC) || rom.HasZeroHash()))
|
||||
else if ((rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == 0 || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null)
|
||||
&& (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)) || rom.HasZeroHash()))
|
||||
{
|
||||
// TODO: All instances of Hash.DeepHashes should be made into 0x0 eventually
|
||||
rom.Size = Constants.SizeZero;
|
||||
rom.CRC = Constants.CRCZero;
|
||||
rom.MD5 = Constants.MD5Zero;
|
||||
rom.SHA1 = Constants.SHA1Zero;
|
||||
rom.SHA256 = null; // Constants.SHA256Zero;
|
||||
rom.SHA384 = null; // Constants.SHA384Zero;
|
||||
rom.SHA512 = null; // Constants.SHA512Zero;
|
||||
rom.SpamSum = null; // Constants.SpamSumZero;
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, Constants.CRCZero);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, Constants.MD5Zero);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, Constants.SHA1Zero);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, null); // Constants.SHA256Zero;
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, null); // Constants.SHA384Zero;
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, null); // Constants.SHA512Zero;
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, null); // Constants.SpamSumZero;
|
||||
}
|
||||
|
||||
// If the file has no size and it's not the above case, skip and log
|
||||
else if (rom.ItemStatus != ItemStatus.Nodump && (rom.Size == 0 || rom.Size == null))
|
||||
else if (rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump && (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == 0 || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null))
|
||||
{
|
||||
logger.Verbose($"{Header.FileName}: Incomplete entry for '{rom.GetName()}' will be output as nodump");
|
||||
rom.ItemStatus = ItemStatus.Nodump;
|
||||
rom.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.Nodump);
|
||||
}
|
||||
|
||||
// If the file has a size but aboslutely no hashes, skip and log
|
||||
else if (rom.ItemStatus != ItemStatus.Nodump
|
||||
&& rom.Size != null && rom.Size > 0
|
||||
else if (rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump
|
||||
&& rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) != null && rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) > 0
|
||||
&& !rom.HasHashes())
|
||||
{
|
||||
logger.Verbose($"{Header.FileName}: Incomplete entry for '{rom.GetName()}' will be output as nodump");
|
||||
rom.ItemStatus = ItemStatus.Nodump;
|
||||
rom.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.Nodump);
|
||||
}
|
||||
|
||||
item = rom;
|
||||
@@ -388,26 +388,26 @@ namespace SabreTools.DatFiles
|
||||
// Ensure we have the proper values for replacement
|
||||
if (item.ItemType == ItemType.Disk && item is Disk disk)
|
||||
{
|
||||
md5 = disk.MD5 ?? string.Empty;
|
||||
sha1 = disk.SHA1 ?? string.Empty;
|
||||
md5 = disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key) ?? string.Empty;
|
||||
sha1 = disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key) ?? string.Empty;
|
||||
}
|
||||
else if (item.ItemType == ItemType.Media && item is Media media)
|
||||
{
|
||||
md5 = media.MD5 ?? string.Empty;
|
||||
sha1 = media.SHA1 ?? string.Empty;
|
||||
sha256 = media.SHA256 ?? string.Empty;
|
||||
spamsum = media.SpamSum ?? string.Empty;
|
||||
md5 = media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key) ?? string.Empty;
|
||||
sha1 = media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key) ?? string.Empty;
|
||||
sha256 = media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key) ?? string.Empty;
|
||||
spamsum = media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey) ?? string.Empty;
|
||||
}
|
||||
else if (item.ItemType == ItemType.Rom && item is Rom rom)
|
||||
{
|
||||
crc = rom.CRC ?? string.Empty;
|
||||
md5 = rom.MD5 ?? string.Empty;
|
||||
sha1 = rom.SHA1 ?? string.Empty;
|
||||
sha256 = rom.SHA256 ?? string.Empty;
|
||||
sha384 = rom.SHA384 ?? string.Empty;
|
||||
sha512 = rom.SHA512 ?? string.Empty;
|
||||
size = rom.Size?.ToString() ?? string.Empty;
|
||||
spamsum = rom.SpamSum ?? string.Empty;
|
||||
crc = rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey) ?? string.Empty;
|
||||
md5 = rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key) ?? string.Empty;
|
||||
sha1 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key) ?? string.Empty;
|
||||
sha256 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key) ?? string.Empty;
|
||||
sha384 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key) ?? string.Empty;
|
||||
sha512 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key) ?? string.Empty;
|
||||
size = rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString() ?? string.Empty;
|
||||
spamsum = rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey) ?? string.Empty;
|
||||
}
|
||||
|
||||
// Now do bulk replacement where possible
|
||||
@@ -459,27 +459,27 @@ namespace SabreTools.DatFiles
|
||||
if (item.ItemType == ItemType.Disk && item is Disk disk)
|
||||
{
|
||||
// We can only write out if there's a SHA-1
|
||||
if (!string.IsNullOrEmpty(disk.SHA1))
|
||||
if (!string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
{
|
||||
name = Utilities.GetDepotPath(disk.SHA1, Header.OutputDepot.Depth)?.Replace('\\', '/');
|
||||
name = Utilities.GetDepotPath(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key), Header.OutputDepot.Depth)?.Replace('\\', '/');
|
||||
item.SetName($"{pre}{name}{post}");
|
||||
}
|
||||
}
|
||||
else if (item.ItemType == ItemType.Media && item is Media media)
|
||||
{
|
||||
// We can only write out if there's a SHA-1
|
||||
if (!string.IsNullOrEmpty(media.SHA1))
|
||||
if (!string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key)))
|
||||
{
|
||||
name = Utilities.GetDepotPath(media.SHA1, Header.OutputDepot.Depth)?.Replace('\\', '/');
|
||||
name = Utilities.GetDepotPath(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key), Header.OutputDepot.Depth)?.Replace('\\', '/');
|
||||
item.SetName($"{pre}{name}{post}");
|
||||
}
|
||||
}
|
||||
else if (item.ItemType == ItemType.Rom && item is Rom rom)
|
||||
{
|
||||
// We can only write out if there's a SHA-1
|
||||
if (!string.IsNullOrEmpty(rom.SHA1))
|
||||
if (!string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)))
|
||||
{
|
||||
name = Utilities.GetDepotPath(rom.SHA1, Header.OutputDepot.Depth)?.Replace('\\', '/');
|
||||
name = Utilities.GetDepotPath(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key), Header.OutputDepot.Depth)?.Replace('\\', '/');
|
||||
item.SetName($"{pre}{name}{post}");
|
||||
}
|
||||
}
|
||||
@@ -537,19 +537,19 @@ namespace SabreTools.DatFiles
|
||||
return datItem;
|
||||
|
||||
// If the Rom has "null" characteristics, ensure all fields
|
||||
if (rom.Size == null && rom.CRC == "null")
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null && rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey) == "null")
|
||||
{
|
||||
logger.Verbose($"Empty folder found: {datItem.Machine.Name}");
|
||||
|
||||
rom.SetName(rom.GetName() == "null" ? "-" : rom.GetName());
|
||||
rom.Size = Constants.SizeZero;
|
||||
rom.CRC = rom.CRC == "null" ? Constants.CRCZero : null;
|
||||
rom.MD5 = rom.MD5 == "null" ? Constants.MD5Zero : null;
|
||||
rom.SHA1 = rom.SHA1 == "null" ? Constants.SHA1Zero : null;
|
||||
rom.SHA256 = rom.SHA256 == "null" ? Constants.SHA256Zero : null;
|
||||
rom.SHA384 = rom.SHA384 == "null" ? Constants.SHA384Zero : null;
|
||||
rom.SHA512 = rom.SHA512 == "null" ? Constants.SHA512Zero : null;
|
||||
rom.SpamSum = rom.SpamSum == "null" ? Constants.SpamSumZero : null;
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey) == "null" ? Constants.CRCZero : null);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key) == "null" ? Constants.MD5Zero : null);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key) == "null" ? Constants.SHA1Zero : null);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key) == "null" ? Constants.SHA256Zero : null);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key) == "null" ? Constants.SHA384Zero : null);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key) == "null" ? Constants.SHA512Zero : null);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey) == "null" ? Constants.SpamSumZero : null);
|
||||
}
|
||||
|
||||
return rom;
|
||||
@@ -626,7 +626,7 @@ namespace SabreTools.DatFiles
|
||||
if (ignoreBlanks && datItem.ItemType == ItemType.Rom && datItem is Rom rom)
|
||||
{
|
||||
// If we have a 0-size or blank rom, then we ignore
|
||||
if (rom.Size == 0 || rom.Size == null)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == 0 || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null)
|
||||
{
|
||||
string itemString = JsonConvert.SerializeObject(datItem, Formatting.None);
|
||||
logger?.Verbose($"Item '{itemString}' was skipped because it had an invalid size");
|
||||
|
||||
@@ -20,6 +20,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
// Deserialize the input file
|
||||
var files = new Serialization.Files.ArchiveDotOrg().Deserialize(filename);
|
||||
var metadata = new Serialization.CrossModel.ArchiveDotOrg().Serialize(files);
|
||||
|
||||
// Convert the files data to the internal format
|
||||
ConvertFiles(files?.File, filename, indexId, statsOnly);
|
||||
@@ -103,75 +104,67 @@ namespace SabreTools.DatFiles.Formats
|
||||
|
||||
var rom = new Rom()
|
||||
{
|
||||
ArchiveDotOrgSource = file.Source,
|
||||
//BitTorrentMagnetHash = file.BitTorrentMagnetHash, // TODO: Add to internal model
|
||||
Date = file.LastModifiedTime?.ToString(),
|
||||
Size = NumberHelper.ConvertToInt64(file.Size),
|
||||
MD5 = file.MD5,
|
||||
CRC = file.CRC32,
|
||||
SHA1 = file.SHA1,
|
||||
//FileCount = file.FileCount, // TODO: Add to internal model
|
||||
ArchiveDotOrgFormat = file.Format,
|
||||
OriginalFilename = file.Original,
|
||||
Summation = file.Summation,
|
||||
//MatrixNumber = file.MatrixNumber, // TODO: Add to internal model
|
||||
//CollectionCatalogNumber = file.CollectionCatalogNumber, // TODO: Add to internal model
|
||||
|
||||
// ASR-Related
|
||||
//ASRDetectedLang = file.ASRDetectedLang, // TODO: Add to internal model
|
||||
//ASRDetectedLangConf = file.ASRDetectedLangConf, // TODO: Add to internal model
|
||||
//ASRTranscribedLang = file.ASRTranscribedLang, // TODO: Add to internal model
|
||||
//WhisperASRModuleVersion = file.WhisperASRModuleVersion, // TODO: Add to internal model
|
||||
//WhisperModelHash = file.WhisperModelHash, // TODO: Add to internal model
|
||||
//WhisperModelName = file.WhisperModelName, // TODO: Add to internal model
|
||||
//WhisperVersion = file.WhisperVersion, // TODO: Add to internal model
|
||||
|
||||
// OCR-Related
|
||||
//ClothCoverDetectionModuleVersion = file.ClothCoverDetectionModuleVersions, // TODO: Add to internal model
|
||||
//hOCRCharToWordhOCRVersion = file.hOCRCharToWordhOCRVersion, // TODO: Add to internal model
|
||||
//hOCRCharToWordModuleVersion = file.hOCRCharToWordModuleVersion, // TODO: Add to internal model
|
||||
//hOCRFtsTexthOCRVersion = file.hOCRFtsTexthOCRVersion, // TODO: Add to internal model
|
||||
//hOCRFtsTextModuleVersion = file.hOCRFtsTextModuleVersion, // TODO: Add to internal model
|
||||
//hOCRPageIndexhOCRVersion = file.hOCRPageIndexhOCRVersion, // TODO: Add to internal model
|
||||
//hOCRPageIndexModuleVersion = file.hOCRPageIndexModuleVersion, // TODO: Add to internal model
|
||||
//TesseractOCR = file.TesseractOCR, // TODO: Add to internal model
|
||||
//TesseractOCRConverted = file.TesseractOCRConverted, // TODO: Add to internal model
|
||||
//TesseractOCRDetectedLang = file.TesseractOCRDetectedLang, // TODO: Add to internal model
|
||||
//TesseractOCRDetectedLangConf = file.TesseractOCRDetectedLangConf, // TODO: Add to internal model
|
||||
//TesseractOCRDetectedScript = file.TesseractOCRDetectedScript, // TODO: Add to internal model
|
||||
//TesseractOCRDetectedScriptConf = file.TesseractOCRDetectedScriptConf, // TODO: Add to internal model
|
||||
//TesseractOCRParameters = file.TesseractOCRParameters, // TODO: Add to internal model
|
||||
//TesseractOCRModuleVersion = file.TesseractOCRModuleVersion, // TODO: Add to internal model
|
||||
//PDFModuleVersion = file.PDFModuleVersion, // TODO: Add to internal model
|
||||
//WordConfidenceInterval0To10 = file.WordConfidenceInterval0To10, // TODO: Add to internal model
|
||||
//WordConfidenceInterval11To20 = file.WordConfidenceInterval11To20, // TODO: Add to internal model
|
||||
//WordConfidenceInterval21To30 = file.WordConfidenceInterval21To30, // TODO: Add to internal model
|
||||
//WordConfidenceInterval31To40 = file.WordConfidenceInterval31To40, // TODO: Add to internal model
|
||||
//WordConfidenceInterval41To50 = file.WordConfidenceInterval41To50, // TODO: Add to internal model
|
||||
//WordConfidenceInterval51To60 = file.WordConfidenceInterval51To60, // TODO: Add to internal model
|
||||
//WordConfidenceInterval61To70 = file.WordConfidenceInterval61To70, // TODO: Add to internal model
|
||||
//WordConfidenceInterval71To80 = file.WordConfidenceInterval71To80, // TODO: Add to internal model
|
||||
//WordConfidenceInterval81To90 = file.WordConfidenceInterval81To90, // TODO: Add to internal model
|
||||
//WordConfidenceInterval91To100 = file.WordConfidenceInterval91To100, // TODO: Add to internal model
|
||||
|
||||
// Media-Related
|
||||
//Album = file.Album, // TODO: Add to internal model
|
||||
//Artist = file.Artist, // TODO: Add to internal model
|
||||
//Bitrate = file.Bitrate, // TODO: Add to internal model
|
||||
//Creator = file.Creator, // TODO: Add to internal model
|
||||
//Height = file.Height, // TODO: Add to internal model
|
||||
//Length = file.Length, // TODO: Add to internal model
|
||||
//PreviewImage = file.PreviewImage, // TODO: Add to internal model
|
||||
//Rotation = file.Rotation, // TODO: Add to internal model
|
||||
//Title = file.Title, // TODO: Add to internal model
|
||||
//Track = file.Track, // TODO: Add to internal model
|
||||
//Width = file.Width, // TODO: Add to internal model
|
||||
|
||||
ItemStatus = ItemStatus.None,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(name);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.AlbumKey, file.Album);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.ArtistKey, file.Artist);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.ASRDetectedLangKey, file.ASRDetectedLang);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.ASRDetectedLangConfKey, file.ASRDetectedLangConf);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.ASRTranscribedLangKey, file.ASRTranscribedLang);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.BitrateKey, file.Bitrate);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.BitTorrentMagnetHashKey, file.BitTorrentMagnetHash);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.ClothCoverDetectionModuleVersionKey, file.ClothCoverDetectionModuleVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CollectionCatalogNumberKey, file.CollectionCatalogNumber);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, file.CRC32);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CreatorKey, file.Creator);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.DateKey, file.LastModifiedTime?.ToString());
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.FileCountKey, file.FileCount);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.FormatKey, file.Format);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.HeightKey, file.Height);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.hOCRCharToWordhOCRVersionKey, file.hOCRCharToWordhOCRVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.hOCRCharToWordModuleVersionKey, file.hOCRCharToWordModuleVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.hOCRFtsTexthOCRVersionKey, file.hOCRFtsTexthOCRVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.hOCRFtsTextModuleVersionKey, file.hOCRFtsTextModuleVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.hOCRPageIndexhOCRVersionKey, file.hOCRPageIndexhOCRVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.hOCRPageIndexModuleVersionKey, file.hOCRPageIndexModuleVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.LengthKey, file.Length);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MatrixNumberKey, file.MatrixNumber);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, file.MD5);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.OriginalKey, file.Original);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.PDFModuleVersionKey, file.PDFModuleVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.PreviewImageKey, file.PreviewImage);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.RotationKey, file.Rotation);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(file.Size));
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, file.SHA1);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SourceKey, file.Source);
|
||||
rom.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SummationKey, file.Summation);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRKey, file.TesseractOCR);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRConvertedKey, file.TesseractOCRConverted);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRDetectedLangKey, file.TesseractOCRDetectedLang);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRDetectedLangConfKey, file.TesseractOCRDetectedLangConf);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRDetectedScriptKey, file.TesseractOCRDetectedScript);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRDetectedScriptConfKey, file.TesseractOCRDetectedScriptConf);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRModuleVersionKey, file.TesseractOCRModuleVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRParametersKey, file.TesseractOCRParameters);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TitleKey, file.Title);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.TrackKey, file.Track);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WhisperASRModuleVersionKey, file.WhisperASRModuleVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WhisperModelHashKey, file.WhisperModelHash);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WhisperModelNameKey, file.WhisperModelName);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WhisperVersionKey, file.WhisperVersion);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WidthKey, file.Width);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval0To10Key, file.WordConfidenceInterval0To10);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval11To20Key, file.WordConfidenceInterval11To20);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval21To30Key, file.WordConfidenceInterval21To30);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval31To40Key, file.WordConfidenceInterval31To40);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval41To50Key, file.WordConfidenceInterval41To50);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval51To60Key, file.WordConfidenceInterval51To60);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval61To70Key, file.WordConfidenceInterval61To70);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval71To80Key, file.WordConfidenceInterval71To80);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval81To90Key, file.WordConfidenceInterval81To90);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval91To100Key, file.WordConfidenceInterval91To100);
|
||||
|
||||
// Now process and add the rom
|
||||
rom.CopyMachineInformation(machine);
|
||||
|
||||
@@ -33,11 +33,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (rom.Size == null || rom.Size < 0)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) < 0)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
if (string.IsNullOrEmpty(rom.CRC)
|
||||
&& string.IsNullOrEmpty(rom.MD5)
|
||||
&& string.IsNullOrEmpty(rom.SHA1))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
}
|
||||
@@ -126,72 +126,72 @@ namespace SabreTools.DatFiles.Formats
|
||||
var file = new Models.ArchiveDotOrg.File
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Source = item.ArchiveDotOrgSource,
|
||||
//BitTorrentMagnetHash = item.BitTorrentMagnetHash, // TODO: Add to internal model
|
||||
Size = item.Size?.ToString(),
|
||||
MD5 = item.MD5,
|
||||
CRC32 = item.CRC,
|
||||
SHA1 = item.SHA1,
|
||||
//FileCount = item.FileCount, // TODO: Add to internal model
|
||||
Format = item.ArchiveDotOrgFormat,
|
||||
//Original = item.Original, // TODO: Add to internal model
|
||||
Summation = item.Summation,
|
||||
//MatrixNumber = item.MatrixNumber, // TODO: Add to internal model
|
||||
//CollectionCatalogNumber = item.CollectionCatalogNumber, // TODO: Add to internal model
|
||||
Source = item.GetFieldValue<string?>(Models.Metadata.Rom.SourceKey),
|
||||
BitTorrentMagnetHash = item.GetFieldValue<string?>(Models.Metadata.Rom.BitTorrentMagnetHashKey),
|
||||
Size = item.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key),
|
||||
CRC32 = item.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
FileCount = item.GetFieldValue<string?>(Models.Metadata.Rom.FileCountKey),
|
||||
Format = item.GetFieldValue<string?>(Models.Metadata.Rom.FormatKey),
|
||||
Original = item.GetFieldValue<string?>(Models.Metadata.Rom.OriginalKey),
|
||||
Summation = item.GetFieldValue<string?>(Models.Metadata.Rom.SummationKey),
|
||||
MatrixNumber = item.GetFieldValue<string?>(Models.Metadata.Rom.MatrixNumberKey),
|
||||
CollectionCatalogNumber = item.GetFieldValue<string?>(Models.Metadata.Rom.CollectionCatalogNumberKey),
|
||||
|
||||
// ASR-Related
|
||||
//ASRDetectedLang = item.ASRDetectedLang, // TODO: Add to internal model
|
||||
//ASRDetectedLangConf = item.ASRDetectedLangConf, // TODO: Add to internal model
|
||||
//ASRTranscribedLang = item.ASRTranscribedLang, // TODO: Add to internal model
|
||||
//WhisperASRModuleVersion = item.WhisperASRModuleVersion, // TODO: Add to internal model
|
||||
//WhisperModelHash = item.WhisperModelHash, // TODO: Add to internal model
|
||||
//WhisperModelName = item.WhisperModelName, // TODO: Add to internal model
|
||||
//WhisperVersion = item.WhisperVersion, // TODO: Add to internal model
|
||||
ASRDetectedLang = item.GetFieldValue<string?>(Models.Metadata.Rom.ASRDetectedLangKey),
|
||||
ASRDetectedLangConf = item.GetFieldValue<string?>(Models.Metadata.Rom.ASRDetectedLangConfKey),
|
||||
ASRTranscribedLang = item.GetFieldValue<string?>(Models.Metadata.Rom.ASRTranscribedLangKey),
|
||||
WhisperASRModuleVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.WhisperASRModuleVersionKey),
|
||||
WhisperModelHash = item.GetFieldValue<string?>(Models.Metadata.Rom.WhisperModelHashKey),
|
||||
WhisperModelName = item.GetFieldValue<string?>(Models.Metadata.Rom.WhisperModelNameKey),
|
||||
WhisperVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.WhisperVersionKey),
|
||||
|
||||
// OCR-Related
|
||||
//ClothCoverDetectionModuleVersion = item.ClothCoverDetectionModuleVersions, // TODO: Add to internal model
|
||||
//hOCRCharToWordhOCRVersion = item.hOCRCharToWordhOCRVersion, // TODO: Add to internal model
|
||||
//hOCRCharToWordModuleVersion = item.hOCRCharToWordModuleVersion, // TODO: Add to internal model
|
||||
//hOCRFtsTexthOCRVersion = item.hOCRFtsTexthOCRVersion, // TODO: Add to internal model
|
||||
//hOCRFtsTextModuleVersion = item.hOCRFtsTextModuleVersion, // TODO: Add to internal model
|
||||
//hOCRPageIndexhOCRVersion = item.hOCRPageIndexhOCRVersion, // TODO: Add to internal model
|
||||
//hOCRPageIndexModuleVersion = item.hOCRPageIndexModuleVersion, // TODO: Add to internal model
|
||||
//TesseractOCR = item.TesseractOCR, // TODO: Add to internal model
|
||||
//TesseractOCRConverted = item.TesseractOCRConverted, // TODO: Add to internal model
|
||||
//TesseractOCRDetectedLang = item.TesseractOCRDetectedLang, // TODO: Add to internal model
|
||||
//TesseractOCRDetectedLangConf = item.TesseractOCRDetectedLangConf, // TODO: Add to internal model
|
||||
//TesseractOCRDetectedScript = item.TesseractOCRDetectedScript, // TODO: Add to internal model
|
||||
//TesseractOCRDetectedScriptConf = item.TesseractOCRDetectedScriptConf, // TODO: Add to internal model
|
||||
//TesseractOCRParameters = item.TesseractOCRParameters, // TODO: Add to internal model
|
||||
//TesseractOCRModuleVersion = item.TesseractOCRModuleVersion, // TODO: Add to internal model
|
||||
//PDFModuleVersion = item.PDFModuleVersion, // TODO: Add to internal model
|
||||
//WordConfidenceInterval0To10 = item.WordConfidenceInterval0To10, // TODO: Add to internal model
|
||||
//WordConfidenceInterval11To20 = item.WordConfidenceInterval11To20, // TODO: Add to internal model
|
||||
//WordConfidenceInterval21To30 = item.WordConfidenceInterval21To30, // TODO: Add to internal model
|
||||
//WordConfidenceInterval31To40 = item.WordConfidenceInterval31To40, // TODO: Add to internal model
|
||||
//WordConfidenceInterval41To50 = item.WordConfidenceInterval41To50, // TODO: Add to internal model
|
||||
//WordConfidenceInterval51To60 = item.WordConfidenceInterval51To60, // TODO: Add to internal model
|
||||
//WordConfidenceInterval61To70 = item.WordConfidenceInterval61To70, // TODO: Add to internal model
|
||||
//WordConfidenceInterval71To80 = item.WordConfidenceInterval71To80, // TODO: Add to internal model
|
||||
//WordConfidenceInterval81To90 = item.WordConfidenceInterval81To90, // TODO: Add to internal model
|
||||
//WordConfidenceInterval91To100 = item.WordConfidenceInterval91To100, // TODO: Add to internal model
|
||||
ClothCoverDetectionModuleVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.ClothCoverDetectionModuleVersionKey),
|
||||
hOCRCharToWordhOCRVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.hOCRCharToWordhOCRVersionKey),
|
||||
hOCRCharToWordModuleVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.hOCRCharToWordModuleVersionKey),
|
||||
hOCRFtsTexthOCRVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.hOCRFtsTexthOCRVersionKey),
|
||||
hOCRFtsTextModuleVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.hOCRFtsTextModuleVersionKey),
|
||||
hOCRPageIndexhOCRVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.hOCRPageIndexhOCRVersionKey),
|
||||
hOCRPageIndexModuleVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.hOCRPageIndexModuleVersionKey),
|
||||
TesseractOCR = item.GetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRKey),
|
||||
TesseractOCRConverted = item.GetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRConvertedKey),
|
||||
TesseractOCRDetectedLang = item.GetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRDetectedLangKey),
|
||||
TesseractOCRDetectedLangConf = item.GetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRDetectedLangConfKey),
|
||||
TesseractOCRDetectedScript = item.GetFieldValue<string?>(fieldName: Models.Metadata.Rom.TesseractOCRDetectedScriptKey),
|
||||
TesseractOCRDetectedScriptConf = item.GetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRDetectedScriptConfKey),
|
||||
TesseractOCRParameters = item.GetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRParametersKey),
|
||||
TesseractOCRModuleVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.TesseractOCRModuleVersionKey),
|
||||
PDFModuleVersion = item.GetFieldValue<string?>(Models.Metadata.Rom.PDFModuleVersionKey),
|
||||
WordConfidenceInterval0To10 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval0To10Key),
|
||||
WordConfidenceInterval11To20 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval11To20Key),
|
||||
WordConfidenceInterval21To30 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval21To30Key),
|
||||
WordConfidenceInterval31To40 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval31To40Key),
|
||||
WordConfidenceInterval41To50 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval41To50Key),
|
||||
WordConfidenceInterval51To60 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval51To60Key),
|
||||
WordConfidenceInterval61To70 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval61To70Key),
|
||||
WordConfidenceInterval71To80 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval71To80Key),
|
||||
WordConfidenceInterval81To90 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval81To90Key),
|
||||
WordConfidenceInterval91To100 = item.GetFieldValue<string?>(Models.Metadata.Rom.WordConfidenceInterval91To100Key),
|
||||
|
||||
// Media-Related
|
||||
//Album = item.Album, // TODO: Add to internal model
|
||||
//Artist = item.Artist, // TODO: Add to internal model
|
||||
//Bitrate = item.Bitrate, // TODO: Add to internal model
|
||||
//Creator = item.Creator, // TODO: Add to internal model
|
||||
//Height = item.Height, // TODO: Add to internal model
|
||||
//Length = item.Length, // TODO: Add to internal model
|
||||
//PreviewImage = item.PreviewImage, // TODO: Add to internal model
|
||||
//Rotation = item.Rotation, // TODO: Add to internal model
|
||||
//Title = item.Title, // TODO: Add to internal model
|
||||
//Track = item.Track, // TODO: Add to internal model
|
||||
//Width = item.Width, // TODO: Add to internal model
|
||||
Album = item.GetFieldValue<string?>(Models.Metadata.Rom.AlbumKey),
|
||||
Artist = item.GetFieldValue<string?>(Models.Metadata.Rom.ArtistKey),
|
||||
Bitrate = item.GetFieldValue<string?>(Models.Metadata.Rom.BitrateKey),
|
||||
Creator = item.GetFieldValue<string?>(Models.Metadata.Rom.CreatorKey),
|
||||
Height = item.GetFieldValue<string?>(Models.Metadata.Rom.HeightKey),
|
||||
Length = item.GetFieldValue<string?>(Models.Metadata.Rom.LengthKey),
|
||||
PreviewImage = item.GetFieldValue<string?>(Models.Metadata.Rom.PreviewImageKey),
|
||||
Rotation = item.GetFieldValue<string?>(Models.Metadata.Rom.RotationKey),
|
||||
Title = item.GetFieldValue<string?>(Models.Metadata.Rom.TitleKey),
|
||||
Track = item.GetFieldValue<string?>(Models.Metadata.Rom.TrackKey),
|
||||
Width = item.GetFieldValue<string?>(Models.Metadata.Rom.WidthKey),
|
||||
|
||||
};
|
||||
|
||||
if (long.TryParse(item.Date ?? string.Empty, out long lastModifiedTime))
|
||||
if (long.TryParse(item.GetFieldValue<string?>(Models.Metadata.Rom.DateKey) ?? string.Empty, out long lastModifiedTime))
|
||||
file.LastModifiedTime = lastModifiedTime.ToString();
|
||||
|
||||
return file;
|
||||
|
||||
@@ -65,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);
|
||||
}
|
||||
|
||||
|
||||
@@ -137,8 +137,8 @@ namespace SabreTools.DatFiles.Formats
|
||||
Status = rom.Machine.Status,
|
||||
DisplayCount = rom.Machine.DisplayCount,
|
||||
DisplayType = rom.Machine.DisplayType,
|
||||
AltRomname = rom.AltName,
|
||||
AltTitle = rom.AltTitle,
|
||||
AltRomname = rom.GetFieldValue<string?>(Models.Metadata.Rom.AltRomnameKey),
|
||||
AltTitle = rom.GetFieldValue<string?>(Models.Metadata.Rom.AltTitleKey),
|
||||
Extra = rom.Machine.Comment,
|
||||
Buttons = rom.Machine.Buttons,
|
||||
// TODO: Add extended fields
|
||||
|
||||
@@ -168,14 +168,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Release
|
||||
{
|
||||
Region = release.Region,
|
||||
Language = release.Language,
|
||||
Date = release.Date,
|
||||
Default = release.Default?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(release.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Release.DateKey, release.Date);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Release.DefaultKey, release.Default?.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Release.LanguageKey, release.Language);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Release.RegionKey, release.Region);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -202,12 +201,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new BiosSet
|
||||
{
|
||||
Description = biosset.Description,
|
||||
Default = biosset.Default?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(biosset.Name);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.BiosSet.DefaultKey, biosset.Default?.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey, biosset.Description);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -234,30 +232,29 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Rom
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(rom.Size),
|
||||
CRC = rom.CRC,
|
||||
MD5 = rom.MD5,
|
||||
SHA1 = rom.SHA1,
|
||||
SHA256 = rom.SHA256,
|
||||
SHA384 = rom.SHA384,
|
||||
SHA512 = rom.SHA512,
|
||||
SpamSum = rom.SpamSum,
|
||||
//xxHash364 = rom.xxHash364, // TODO: Add to internal model
|
||||
//xxHash3128 = rom.xxHash3128, // TODO: Add to internal model
|
||||
MergeTag = rom.Merge,
|
||||
ItemStatus = rom.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL,
|
||||
Region = rom.Region,
|
||||
//Flags = rom.Flags, // TODO: Add to internal model
|
||||
Offset = rom.Offs,
|
||||
//Serial = rom.Serial, // TODO: Add to internal model
|
||||
//Header = rom.Header, // TODO: Add to internal model
|
||||
Date = rom.Date,
|
||||
Inverted = rom.Inverted?.AsYesNo(),
|
||||
MIA = rom.MIA?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(rom.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, rom.CRC);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.DateKey, rom.Date);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.FlagsKey, rom.Flags);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.HeaderKey, rom.Header);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Rom.InvertedKey, rom.Inverted?.AsYesNo());
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Rom.MIAKey, rom.MIA?.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, rom.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.MergeKey, rom.Merge);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.OffsetKey, rom.Offs);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.RegionKey, rom.Region);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SerialKey, rom.Serial);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.SHA1);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, rom.SHA256);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, rom.SHA384);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, rom.SHA512);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(rom.Size));
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, rom.SpamSum);
|
||||
item.SetFieldValue<ItemStatus?>(Models.Metadata.Rom.StatusKey, rom.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.xxHash364Key, rom.xxHash364);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.xxHash3128Key, rom.xxHash3128);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -284,15 +281,14 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Disk
|
||||
{
|
||||
MD5 = disk.MD5,
|
||||
SHA1 = disk.SHA1,
|
||||
MergeTag = disk.Merge,
|
||||
ItemStatus = disk.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL,
|
||||
//Flags = disk.Flags, // TODO: Add to internal model
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(disk.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.FlagsKey, disk.Flags);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, disk.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.MergeKey, disk.Merge);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, disk.SHA1);
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, disk.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -319,14 +315,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Media
|
||||
{
|
||||
MD5 = medium.MD5,
|
||||
SHA1 = medium.SHA1,
|
||||
SHA256 = medium.SHA256,
|
||||
SpamSum = medium.SpamSum,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(medium.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.MD5Key, medium.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SHA1Key, medium.SHA1);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SHA256Key, medium.SHA256);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SpamSumKey, medium.SpamSum);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -382,13 +377,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Chip
|
||||
{
|
||||
ChipType = chip.Type?.AsEnumValue<ChipType>() ?? ChipType.NULL,
|
||||
//Flags = chip.Flags, // TODO: Add to internal model
|
||||
Clock = NumberHelper.ConvertToInt64(chip.Clock),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(chip.Name);
|
||||
item.SetFieldValue<ChipType>(Models.Metadata.Chip.ChipTypeKey, chip.Type?.AsEnumValue<ChipType>() ?? ChipType.NULL);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Chip.ClockKey, NumberHelper.ConvertToInt64(chip.Clock));
|
||||
item.SetFieldValue<string?>(Models.Metadata.Chip.FlagsKey, chip.Flags);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -415,23 +409,22 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Display
|
||||
{
|
||||
DisplayType = video.Screen?.AsEnumValue<DisplayType>() ?? DisplayType.NULL,
|
||||
Width = NumberHelper.ConvertToInt64(video.X),
|
||||
Height = NumberHelper.ConvertToInt64(video.Y),
|
||||
//AspectX = video.AspectX, // TODO: Add to internal model or find mapping
|
||||
//AspectY = video.AspectY, // TODO: Add to internal model or find mapping
|
||||
Refresh = NumberHelper.ConvertToDouble(video.Freq),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<long?>("ASPECTX", NumberHelper.ConvertToInt64(video.AspectX));
|
||||
item.SetFieldValue<long?>("ASPECTY", NumberHelper.ConvertToInt64(video.AspectY));
|
||||
item.SetFieldValue<DisplayType>(Models.Metadata.Display.DisplayTypeKey, video.Screen?.AsEnumValue<DisplayType>() ?? DisplayType.NULL);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.HeightKey, NumberHelper.ConvertToInt64(video.Y));
|
||||
item.SetFieldValue<double?>(Models.Metadata.Display.RefreshKey, NumberHelper.ConvertToDouble(video.Freq));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.WidthKey, NumberHelper.ConvertToInt64(video.X));
|
||||
|
||||
switch (video.Orientation)
|
||||
{
|
||||
case "horizontal":
|
||||
item.Rotate = 0;
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.RotateKey, 0);
|
||||
break;
|
||||
case "vertical":
|
||||
item.Rotate = 90;
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.RotateKey, 90);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -458,10 +451,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
containsItems = true;
|
||||
var item = new Sound
|
||||
{
|
||||
Channels = NumberHelper.ConvertToInt64(sound.Channels),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<long?>(Models.Metadata.Sound.ChannelsKey, NumberHelper.ConvertToInt64(sound.Channels));
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -485,21 +477,18 @@ namespace SabreTools.DatFiles.Formats
|
||||
containsItems = true;
|
||||
var item = new Input
|
||||
{
|
||||
Players = NumberHelper.ConvertToInt64(input.Players),
|
||||
//Control = input.Control, // TODO: Add to internal model or find mapping
|
||||
Controls =
|
||||
[
|
||||
new Control
|
||||
{
|
||||
Buttons = NumberHelper.ConvertToInt64(input.Buttons),
|
||||
},
|
||||
],
|
||||
Coins = NumberHelper.ConvertToInt64(input.Coins),
|
||||
Tilt = input.Tilt?.AsYesNo(),
|
||||
Service = input.Service?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<long?>(Models.Metadata.Input.CoinsKey, NumberHelper.ConvertToInt64(input.Coins));
|
||||
//item.SetFieldValue<string?>(Models.Metadata.Input.ControlKey, input.Control);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Input.PlayersKey, NumberHelper.ConvertToInt64(input.Players));
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Input.ServiceKey, input.Service?.AsYesNo());
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Input.TiltKey, input.Tilt?.AsYesNo());
|
||||
|
||||
var control = new Control();
|
||||
control.SetFieldValue<long?>(Models.Metadata.Control.ButtonsKey, NumberHelper.ConvertToInt64(input.Buttons));
|
||||
|
||||
item.SetFieldValue<Control[]?>(Models.Metadata.Input.ControlKey, [control]);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -525,24 +514,23 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new DipSwitch
|
||||
{
|
||||
Values = [],
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(dipswitch.Name);
|
||||
|
||||
var values = new List<DipValue>();
|
||||
foreach (string entry in dipswitch.Entry ?? [])
|
||||
{
|
||||
var dipValue = new DipValue
|
||||
{
|
||||
Value = entry,
|
||||
Default = entry == dipswitch.Default,
|
||||
};
|
||||
var dipValue = new DipValue();
|
||||
dipValue.SetName(dipswitch.Name);
|
||||
dipValue.SetFieldValue<bool?>(Models.Metadata.DipValue.DefaultKey, entry == dipswitch.Default);
|
||||
dipValue.SetFieldValue<string?>(Models.Metadata.DipValue.ValueKey, entry);
|
||||
|
||||
item.Values.Add(dipValue);
|
||||
values.Add(dipValue);
|
||||
}
|
||||
|
||||
item.SetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey, [.. values]);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
}
|
||||
@@ -566,14 +554,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
containsItems = true;
|
||||
var item = new Driver
|
||||
{
|
||||
Status = driver.Status?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL,
|
||||
//Color = driver.Color, // TODO: Add to internal model or find mapping
|
||||
//Sound = driver.Sound, // TODO: Add to internal model or find mapping
|
||||
//PaletteSize = driver.PaletteSize, // TODO: Add to internal model or find mapping
|
||||
//Blit = driver.Blit, // TODO: Add to internal model or find mapping
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<string?>(Models.Metadata.Driver.BlitKey, driver.Blit);
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.ColorKey, driver.Color?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Driver.PaletteSizeKey, NumberHelper.ConvertToInt64(driver.PaletteSize));
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.SoundKey, driver.Sound?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey, driver.Status?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
|
||||
@@ -43,29 +43,29 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Release release:
|
||||
if (string.IsNullOrEmpty(release.GetName()))
|
||||
missingFields.Add(Models.Metadata.Release.NameKey);
|
||||
if (string.IsNullOrEmpty(release.Region))
|
||||
if (string.IsNullOrEmpty(release.GetFieldValue<string?>(Models.Metadata.Release.RegionKey)))
|
||||
missingFields.Add(Models.Metadata.Release.RegionKey);
|
||||
break;
|
||||
|
||||
case BiosSet biosset:
|
||||
if (string.IsNullOrEmpty(biosset.GetName()))
|
||||
missingFields.Add(Models.Metadata.BiosSet.NameKey);
|
||||
if (string.IsNullOrEmpty(biosset.Description))
|
||||
if (string.IsNullOrEmpty(biosset.GetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey)))
|
||||
missingFields.Add(Models.Metadata.BiosSet.DescriptionKey);
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetName()))
|
||||
missingFields.Add(Models.Metadata.Rom.NameKey);
|
||||
if (rom.Size == null || rom.Size < 0)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) < 0)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
if (string.IsNullOrEmpty(rom.CRC)
|
||||
&& string.IsNullOrEmpty(rom.MD5)
|
||||
&& string.IsNullOrEmpty(rom.SHA1)
|
||||
&& string.IsNullOrEmpty(rom.SHA256)
|
||||
&& string.IsNullOrEmpty(rom.SHA384)
|
||||
&& string.IsNullOrEmpty(rom.SHA512)
|
||||
&& string.IsNullOrEmpty(rom.SpamSum))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
}
|
||||
@@ -74,8 +74,8 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Disk disk:
|
||||
if (string.IsNullOrEmpty(disk.GetName()))
|
||||
missingFields.Add(Models.Metadata.Disk.NameKey);
|
||||
if (string.IsNullOrEmpty(disk.MD5)
|
||||
&& string.IsNullOrEmpty(disk.SHA1))
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key))
|
||||
&& string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Disk.SHA1Key);
|
||||
}
|
||||
@@ -92,26 +92,26 @@ namespace SabreTools.DatFiles.Formats
|
||||
break;
|
||||
|
||||
case Chip chip:
|
||||
if (!chip.ChipTypeSpecified)
|
||||
if (chip.GetFieldValue<ChipType>(Models.Metadata.Chip.ChipTypeKey) == ChipType.NULL)
|
||||
missingFields.Add(Models.Metadata.Chip.ChipTypeKey);
|
||||
if (string.IsNullOrEmpty(chip.GetName()))
|
||||
missingFields.Add(Models.Metadata.Chip.NameKey);
|
||||
break;
|
||||
|
||||
case Display display:
|
||||
if (!display.DisplayTypeSpecified)
|
||||
if (display.GetFieldValue<DisplayType>(Models.Metadata.Display.DisplayTypeKey) == DisplayType.NULL)
|
||||
missingFields.Add(Models.Metadata.Display.DisplayTypeKey);
|
||||
if (!display.RotateSpecified)
|
||||
if (display.GetFieldValue<long?>(Models.Metadata.Display.RotateKey) == null)
|
||||
missingFields.Add(Models.Metadata.Display.RotateKey);
|
||||
break;
|
||||
|
||||
case Sound sound:
|
||||
if (!sound.ChannelsSpecified)
|
||||
if (sound.GetFieldValue<long?>(Models.Metadata.Sound.ChannelsKey) == null)
|
||||
missingFields.Add(Models.Metadata.Sound.ChannelsKey);
|
||||
break;
|
||||
|
||||
case Input input:
|
||||
if (!input.PlayersSpecified)
|
||||
if (input.GetFieldValue<long?>(Models.Metadata.Input.PlayersKey) == null)
|
||||
missingFields.Add(Models.Metadata.Input.PlayersKey);
|
||||
if (!input.ControlsSpecified)
|
||||
missingFields.Add(Models.Metadata.Input.ControlKey);
|
||||
@@ -123,9 +123,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
break;
|
||||
|
||||
case Driver driver:
|
||||
if (!driver.StatusSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.StatusKey);
|
||||
if (!driver.EmulationSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.EmulationKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.EmulationKey);
|
||||
break;
|
||||
}
|
||||
@@ -338,14 +338,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
var release = new Models.ClrMamePro.Release
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Region = item.Region,
|
||||
Language = item.Language,
|
||||
Date = item.Date,
|
||||
Region = item.GetFieldValue<string?>(Models.Metadata.Release.RegionKey),
|
||||
Language = item.GetFieldValue<string?>(Models.Metadata.Release.LanguageKey),
|
||||
Date = item.GetFieldValue<string?>(Models.Metadata.Release.DateKey),
|
||||
Default = item.GetFieldValue<bool?>(Models.Metadata.Release.DefaultKey).FromYesNo(),
|
||||
};
|
||||
|
||||
if (item.DefaultSpecified)
|
||||
release.Default = item.Default.FromYesNo();
|
||||
|
||||
return release;
|
||||
}
|
||||
|
||||
@@ -357,12 +355,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
var biosset = new Models.ClrMamePro.BiosSet
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Description = item.Description,
|
||||
Default = item.GetFieldValue<bool?>(Models.Metadata.BiosSet.DefaultKey).FromYesNo(),
|
||||
Description = item.GetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey),
|
||||
};
|
||||
|
||||
if (item.DefaultSpecified)
|
||||
biosset.Default = item.Default.FromYesNo();
|
||||
|
||||
return biosset;
|
||||
}
|
||||
|
||||
@@ -374,31 +370,29 @@ namespace SabreTools.DatFiles.Formats
|
||||
var rom = new Models.ClrMamePro.Rom
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Size = item.Size?.ToString(),
|
||||
CRC = item.CRC,
|
||||
MD5 = item.MD5,
|
||||
SHA1 = item.SHA1,
|
||||
SHA256 = item.SHA256,
|
||||
SHA384 = item.SHA384,
|
||||
SHA512 = item.SHA512,
|
||||
SpamSum = item.SpamSum,
|
||||
//xxHash364 = item.xxHash364, // TODO: Add to internal model
|
||||
//xxHash3128 = item.xxHash3128, // TODO: Add to internal model
|
||||
Merge = item.MergeTag,
|
||||
Region = item.Region,
|
||||
//Flags = item.Flags, // TODO: Add to internal model
|
||||
Offs = item.Offset,
|
||||
//Serial = item.Serial, // TODO: Add to internal model
|
||||
//Header = item.Header, // TODO: Add to internal model
|
||||
Date = item.Date,
|
||||
Size = item.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
CRC = item.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
SHA256 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key),
|
||||
SHA384 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key),
|
||||
SHA512 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key),
|
||||
SpamSum = item.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey),
|
||||
xxHash364 = item.GetFieldValue<string?>(Models.Metadata.Rom.xxHash364Key),
|
||||
xxHash3128 = item.GetFieldValue<string?>(Models.Metadata.Rom.xxHash3128Key),
|
||||
Merge = item.GetFieldValue<string?>(Models.Metadata.Rom.MergeKey),
|
||||
Region = item.GetFieldValue<string?>(Models.Metadata.Rom.RegionKey),
|
||||
Flags = item.GetFieldValue<string?>(Models.Metadata.Rom.FlagsKey),
|
||||
Date = item.GetFieldValue<string?>(Models.Metadata.Rom.DateKey),
|
||||
Offs = item.GetFieldValue<string?>(Models.Metadata.Rom.OffsetKey),
|
||||
Serial = item.GetFieldValue<string?>(Models.Metadata.Rom.SerialKey),
|
||||
Header = item.GetFieldValue<string?>(Models.Metadata.Rom.HeaderKey),
|
||||
Inverted = item.GetFieldValue<bool?>(Models.Metadata.Rom.InvertedKey).FromYesNo(),
|
||||
MIA = item.GetFieldValue<bool?>(Models.Metadata.Rom.MIAKey).FromYesNo(),
|
||||
};
|
||||
|
||||
if (item.ItemStatusSpecified)
|
||||
rom.Status = item.ItemStatus.AsStringValue<ItemStatus>(useSecond: false);
|
||||
if (item.InvertedSpecified)
|
||||
rom.Inverted = item.Inverted.FromYesNo();
|
||||
if (item.MIASpecified)
|
||||
rom.MIA = item.MIA.FromYesNo();
|
||||
rom.Status = item.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey).AsStringValue<ItemStatus>(useSecond: false);
|
||||
|
||||
return rom;
|
||||
}
|
||||
@@ -411,14 +405,14 @@ namespace SabreTools.DatFiles.Formats
|
||||
var disk = new Models.ClrMamePro.Disk
|
||||
{
|
||||
Name = item.GetName(),
|
||||
MD5 = item.MD5,
|
||||
SHA1 = item.SHA1,
|
||||
Merge = item.MergeTag,
|
||||
//Flags = item.Flags, // TODO: Add to internal model
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key),
|
||||
Merge = item.GetFieldValue<string?>(Models.Metadata.Disk.MergeKey),
|
||||
Flags = item.GetFieldValue<string?>(Models.Metadata.Disk.FlagsKey),
|
||||
};
|
||||
|
||||
if (item.ItemStatusSpecified)
|
||||
disk.Status = item.ItemStatus.AsStringValue<ItemStatus>(useSecond: false);
|
||||
if (item.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) != ItemStatus.NULL)
|
||||
disk.Status = item.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey).AsStringValue<ItemStatus>(useSecond: false);
|
||||
|
||||
return disk;
|
||||
}
|
||||
@@ -431,10 +425,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
var media = new Models.ClrMamePro.Media
|
||||
{
|
||||
Name = item.GetName(),
|
||||
MD5 = item.MD5,
|
||||
SHA1 = item.SHA1,
|
||||
SHA256 = item.SHA256,
|
||||
SpamSum = item.SpamSum,
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Media.MD5Key),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key),
|
||||
SHA256 = item.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key),
|
||||
SpamSum = item.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey),
|
||||
};
|
||||
return media;
|
||||
}
|
||||
@@ -470,10 +464,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var chip = new Models.ClrMamePro.Chip
|
||||
{
|
||||
Type = item.ChipType.AsStringValue<ChipType>(),
|
||||
Type = item.GetFieldValue<ChipType>(Models.Metadata.Chip.ChipTypeKey).AsStringValue<ChipType>(),
|
||||
Name = item.GetName(),
|
||||
//Flags = item.Flags, // TODO: Add to internal model
|
||||
Clock = item.Clock?.ToString(),
|
||||
Flags = item.GetFieldValue<string?>(Models.Metadata.Chip.FlagsKey),
|
||||
Clock = item.GetFieldValue<long?>(Models.Metadata.Chip.ClockKey)?.ToString(),
|
||||
};
|
||||
return chip;
|
||||
}
|
||||
@@ -485,15 +479,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var video = new Models.ClrMamePro.Video
|
||||
{
|
||||
Screen = item.DisplayType.AsStringValue<DisplayType>(),
|
||||
X = item.Width?.ToString(),
|
||||
Y = item.Height?.ToString(),
|
||||
//AspectX = item.AspectX, // TODO: Add to internal model or find mapping
|
||||
//AspectY = item.AspectY, // TODO: Add to internal model or find mapping
|
||||
Freq = item.Refresh?.ToString(),
|
||||
Screen = item.GetFieldValue<DisplayType>(Models.Metadata.Display.DisplayTypeKey).AsStringValue<DisplayType>(),
|
||||
X = item.GetFieldValue<long?>(Models.Metadata.Display.WidthKey)?.ToString(),
|
||||
Y = item.GetFieldValue<long?>(Models.Metadata.Display.HeightKey)?.ToString(),
|
||||
AspectX = item.GetFieldValue<string?>("ASPECTX"),
|
||||
AspectY = item.GetFieldValue<string?>("ASPECTY"),
|
||||
Freq = item.GetFieldValue<double?>(Models.Metadata.Display.RefreshKey)?.ToString(),
|
||||
};
|
||||
|
||||
switch (item.Rotate)
|
||||
switch (item.GetFieldValue<long?>(Models.Metadata.Display.RotateKey))
|
||||
{
|
||||
case 0:
|
||||
case 180:
|
||||
@@ -515,7 +509,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var sound = new Models.ClrMamePro.Sound
|
||||
{
|
||||
Channels = item.Channels?.ToString(),
|
||||
Channels = item.GetFieldValue<long?>(Models.Metadata.Sound.ChannelsKey)?.ToString(),
|
||||
};
|
||||
return sound;
|
||||
}
|
||||
@@ -527,15 +521,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var input = new Models.ClrMamePro.Input
|
||||
{
|
||||
Players = item.Players?.ToString(),
|
||||
//Control = item.Control, // TODO: Add to internal model or find mapping
|
||||
Coins = item.Coins?.ToString(),
|
||||
Tilt = item.Tilt.FromYesNo(),
|
||||
Service = item.Service.FromYesNo(),
|
||||
Players = item.GetFieldValue<long?>(Models.Metadata.Input.PlayersKey)?.ToString(),
|
||||
//Control = item.GetFieldValue<string?>(Models.Metadata.Input.ControlKey),
|
||||
Coins = item.GetFieldValue<long?>(Models.Metadata.Input.CoinsKey)?.ToString(),
|
||||
Tilt = item.GetFieldValue<bool?>(Models.Metadata.Input.TiltKey).FromYesNo(),
|
||||
Service = item.GetFieldValue<bool?>(Models.Metadata.Input.ServiceKey).FromYesNo(),
|
||||
};
|
||||
|
||||
if (item.ControlsSpecified)
|
||||
input.Buttons = item.Controls![0].Buttons?.ToString();
|
||||
input.Buttons = item.GetFieldValue<Control[]?>(Models.Metadata.Input.ControlKey)![0].GetFieldValue<long?>(Models.Metadata.Control.ButtonsKey)?.ToString();
|
||||
|
||||
return input;
|
||||
}
|
||||
@@ -553,11 +547,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
if (item.ValuesSpecified)
|
||||
{
|
||||
var entries = new List<string>();
|
||||
foreach (var setting in item.Values!)
|
||||
foreach (var setting in item.GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey)!)
|
||||
{
|
||||
entries.Add(setting.Value!);
|
||||
if (setting.Default == true)
|
||||
dipswitch.Default = setting.Value;
|
||||
entries.Add(setting.GetFieldValue<string?>(Models.Metadata.DipValue.ValueKey)!);
|
||||
if (setting.GetFieldValue<bool?>(Models.Metadata.DipValue.DefaultKey) == true)
|
||||
dipswitch.Default = setting.GetFieldValue<string?>(Models.Metadata.DipValue.ValueKey);
|
||||
}
|
||||
|
||||
dipswitch.Entry = [.. entries];
|
||||
@@ -573,12 +567,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var driver = new Models.ClrMamePro.Driver
|
||||
{
|
||||
Status = item.Status.AsStringValue<SupportStatus>(),
|
||||
//Color = item.Color, // TODO: Add to internal model or find mapping
|
||||
//Sound = item.Sound, // TODO: Add to internal model or find mapping
|
||||
//PaletteSize = item.PaletteSize, // TODO: Add to internal model or find mapping
|
||||
//Blit = item.Blit, // TODO: Add to internal model or find mapping
|
||||
|
||||
Status = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey).AsStringValue<SupportStatus>(),
|
||||
Color = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.ColorKey).AsStringValue<SupportStatus>(),
|
||||
Sound = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.SoundKey).AsStringValue<SupportStatus>(),
|
||||
PaletteSize = item.GetFieldValue<long?>(Models.Metadata.Driver.PaletteSizeKey)?.ToString(),
|
||||
Blit = item.GetFieldValue<string?>(Models.Metadata.Driver.BlitKey),
|
||||
};
|
||||
return driver;
|
||||
}
|
||||
|
||||
@@ -133,17 +133,16 @@ namespace SabreTools.DatFiles.Formats
|
||||
return;
|
||||
|
||||
containsItems = true;
|
||||
foreach (var rom in files)
|
||||
foreach (var file in files)
|
||||
{
|
||||
var item = new Rom
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(rom.Size),
|
||||
CRC = rom.CRC,
|
||||
Date = rom.Date,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(rom.Name);
|
||||
item.SetName(file.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, file.CRC);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.DateKey, file.Date);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(file.Size));
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
|
||||
@@ -33,11 +33,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (!rom.SizeSpecified)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
// if (string.IsNullOrEmpty(rom.Date))
|
||||
// missingFields.Add(Models.Metadata.Rom.DateKey);
|
||||
if (string.IsNullOrEmpty(rom.CRC))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)))
|
||||
missingFields.Add(Models.Metadata.Rom.CRCKey);
|
||||
break;
|
||||
}
|
||||
@@ -179,9 +179,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
var rom = new Models.DosCenter.File
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Size = item.Size?.ToString(),
|
||||
CRC = item.CRC,
|
||||
Date = item.Date,
|
||||
Size = item.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
CRC = item.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
Date = item.GetFieldValue<string?>(Models.Metadata.Rom.DateKey),
|
||||
};
|
||||
return rom;
|
||||
}
|
||||
|
||||
@@ -100,16 +100,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
|
||||
var rom = new Rom()
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(row.Size),
|
||||
CRC = row.CRC32,
|
||||
MD5 = row.MD5,
|
||||
SHA1 = row.SHA1,
|
||||
SHA256 = row.SHA256,
|
||||
ItemStatus = ItemStatus.None,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(name);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, row.CRC32);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, row.MD5);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, row.SHA1);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, row.SHA256);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size));
|
||||
rom.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
|
||||
|
||||
// Now process and add the rom
|
||||
rom.CopyMachineInformation(machine);
|
||||
|
||||
@@ -33,13 +33,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.SHA256))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.SHA256Key);
|
||||
if (string.IsNullOrEmpty(rom.SHA1))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
if (string.IsNullOrEmpty(rom.MD5))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.MD5Key);
|
||||
if (string.IsNullOrEmpty(rom.CRC))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)))
|
||||
missingFields.Add(Models.Metadata.Rom.CRCKey);
|
||||
break;
|
||||
}
|
||||
@@ -138,12 +138,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var row = new Models.EverdriveSMDB.Row
|
||||
{
|
||||
SHA256 = rom.SHA256,
|
||||
SHA256 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key),
|
||||
Name = $"{rom.Machine.Name ?? string.Empty}/{rom.GetName()}",
|
||||
SHA1 = rom.SHA1,
|
||||
MD5 = rom.MD5,
|
||||
CRC32 = rom.CRC,
|
||||
Size = rom.Size?.ToString(),
|
||||
SHA1 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
MD5 = rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key),
|
||||
CRC32 = rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
Size = rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
};
|
||||
return row;
|
||||
}
|
||||
|
||||
@@ -146,12 +146,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Rom:
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = null,
|
||||
CRC = sfv.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(itemName);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, sfv.Hash);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, null);
|
||||
|
||||
rom.CopyMachineInformation(machine);
|
||||
ParseAddHelper(rom, statsOnly);
|
||||
@@ -194,11 +193,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Disk:
|
||||
var disk = new Disk
|
||||
{
|
||||
MD5 = md5.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
disk.SetName(itemName);
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, md5.Hash);
|
||||
|
||||
disk.CopyMachineInformation(machine);
|
||||
ParseAddHelper(disk, statsOnly);
|
||||
@@ -207,11 +205,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Media:
|
||||
var media = new Media
|
||||
{
|
||||
MD5 = md5.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
media.SetName(itemName);
|
||||
media.SetFieldValue<string?>(Models.Metadata.Media.MD5Key, md5.Hash);
|
||||
|
||||
media.CopyMachineInformation(machine);
|
||||
ParseAddHelper(media, statsOnly);
|
||||
@@ -220,12 +217,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Rom:
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = null,
|
||||
MD5 = md5.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(itemName);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, md5.Hash);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, null);
|
||||
|
||||
rom.CopyMachineInformation(machine);
|
||||
ParseAddHelper(rom, statsOnly);
|
||||
@@ -268,11 +264,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Disk:
|
||||
var disk = new Disk
|
||||
{
|
||||
SHA1 = sha1.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
disk.SetName(itemName);
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, sha1.Hash);
|
||||
|
||||
disk.CopyMachineInformation(machine);
|
||||
ParseAddHelper(disk, statsOnly);
|
||||
@@ -281,11 +276,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Media:
|
||||
var media = new Media
|
||||
{
|
||||
SHA1 = sha1.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
media.SetName(itemName);
|
||||
media.SetFieldValue<string?>(Models.Metadata.Media.SHA1Key, sha1.Hash);
|
||||
|
||||
media.CopyMachineInformation(machine);
|
||||
ParseAddHelper(media, statsOnly);
|
||||
@@ -294,12 +288,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Rom:
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = null,
|
||||
SHA1 = sha1.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(itemName);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, sha1.Hash);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, null);
|
||||
|
||||
rom.CopyMachineInformation(machine);
|
||||
ParseAddHelper(rom, statsOnly);
|
||||
@@ -342,11 +335,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Media:
|
||||
var media = new Media
|
||||
{
|
||||
SHA256 = sha256.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
media.SetName(itemName);
|
||||
media.SetFieldValue<string?>(Models.Metadata.Media.SHA256Key, sha256.Hash);
|
||||
|
||||
media.CopyMachineInformation(machine);
|
||||
ParseAddHelper(media, statsOnly);
|
||||
@@ -356,12 +348,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Rom:
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = null,
|
||||
SHA256 = sha256.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(itemName);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, sha256.Hash);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, null);
|
||||
|
||||
rom.CopyMachineInformation(machine);
|
||||
ParseAddHelper(rom, statsOnly);
|
||||
@@ -406,12 +397,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Rom:
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = null,
|
||||
SHA384 = sha384.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(itemName);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, sha384.Hash);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, null);
|
||||
|
||||
rom.CopyMachineInformation(machine);
|
||||
ParseAddHelper(rom, statsOnly);
|
||||
@@ -456,12 +446,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Rom:
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = null,
|
||||
SHA512 = sha512.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(itemName);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, sha512.Hash);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, null);
|
||||
|
||||
rom.CopyMachineInformation(machine);
|
||||
ParseAddHelper(rom, statsOnly);
|
||||
@@ -504,11 +493,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Media:
|
||||
var media = new Media
|
||||
{
|
||||
SpamSum = spamsum.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
media.SetName(itemName);
|
||||
media.SetFieldValue<string?>(Models.Metadata.Media.SpamSumKey, spamsum.Hash);
|
||||
|
||||
media.CopyMachineInformation(machine);
|
||||
ParseAddHelper(media, statsOnly);
|
||||
@@ -518,12 +506,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Rom:
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = null,
|
||||
SpamSum = spamsum.Hash,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(itemName);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, null);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, spamsum.Hash);
|
||||
|
||||
rom.CopyMachineInformation(machine);
|
||||
ParseAddHelper(rom, statsOnly);
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem.ItemType)
|
||||
{
|
||||
case ItemType.Rom:
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.CRC))
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)))
|
||||
missingFields.Add(Models.Metadata.Rom.CRCKey);
|
||||
break;
|
||||
default:
|
||||
@@ -52,15 +52,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem.ItemType)
|
||||
{
|
||||
case ItemType.Disk:
|
||||
if (string.IsNullOrEmpty((datItem as Disk)?.MD5))
|
||||
if (string.IsNullOrEmpty((datItem as Disk)?.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)))
|
||||
missingFields.Add(Models.Metadata.Disk.MD5Key);
|
||||
break;
|
||||
case ItemType.Media:
|
||||
if (string.IsNullOrEmpty((datItem as Media)?.MD5))
|
||||
if (string.IsNullOrEmpty((datItem as Media)?.GetFieldValue<string?>(Models.Metadata.Media.MD5Key)))
|
||||
missingFields.Add(Models.Metadata.Media.MD5Key);
|
||||
break;
|
||||
case ItemType.Rom:
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.MD5))
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.MD5Key);
|
||||
break;
|
||||
default:
|
||||
@@ -72,15 +72,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem.ItemType)
|
||||
{
|
||||
case ItemType.Disk:
|
||||
if (string.IsNullOrEmpty((datItem as Disk)?.SHA1))
|
||||
if (string.IsNullOrEmpty((datItem as Disk)?.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
missingFields.Add(Models.Metadata.Disk.SHA1Key);
|
||||
break;
|
||||
case ItemType.Media:
|
||||
if (string.IsNullOrEmpty((datItem as Media)?.SHA1))
|
||||
if (string.IsNullOrEmpty((datItem as Media)?.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key)))
|
||||
missingFields.Add(Models.Metadata.Media.SHA1Key);
|
||||
break;
|
||||
case ItemType.Rom:
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.SHA1))
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
break;
|
||||
default:
|
||||
@@ -92,11 +92,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem.ItemType)
|
||||
{
|
||||
case ItemType.Media:
|
||||
if (string.IsNullOrEmpty((datItem as Media)?.SHA256))
|
||||
if (string.IsNullOrEmpty((datItem as Media)?.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key)))
|
||||
missingFields.Add(Models.Metadata.Media.SHA256Key);
|
||||
break;
|
||||
case ItemType.Rom:
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.SHA256))
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.SHA256Key);
|
||||
break;
|
||||
default:
|
||||
@@ -108,7 +108,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem.ItemType)
|
||||
{
|
||||
case ItemType.Rom:
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.SHA384))
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.SHA384Key);
|
||||
break;
|
||||
default:
|
||||
@@ -120,7 +120,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem.ItemType)
|
||||
{
|
||||
case ItemType.Rom:
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.SHA512))
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.SHA512Key);
|
||||
break;
|
||||
default:
|
||||
@@ -132,11 +132,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem.ItemType)
|
||||
{
|
||||
case ItemType.Media:
|
||||
if (string.IsNullOrEmpty((datItem as Media)?.SpamSum))
|
||||
if (string.IsNullOrEmpty((datItem as Media)?.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey)))
|
||||
missingFields.Add(Models.Metadata.Media.SpamSumKey);
|
||||
break;
|
||||
case ItemType.Rom:
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.SpamSum))
|
||||
if (string.IsNullOrEmpty((datItem as Rom)?.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)))
|
||||
missingFields.Add(Models.Metadata.Rom.SpamSumKey);
|
||||
break;
|
||||
default:
|
||||
@@ -252,7 +252,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
sfvs.Add(new Models.Hashfile.SFV
|
||||
{
|
||||
File = name + rom.GetName(),
|
||||
Hash = rom.CRC,
|
||||
Hash = rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
});
|
||||
break;
|
||||
}
|
||||
@@ -302,7 +302,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Disk disk:
|
||||
md5s.Add(new Models.Hashfile.MD5
|
||||
{
|
||||
Hash = disk.MD5,
|
||||
Hash = disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key),
|
||||
File = name + disk.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -310,7 +310,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Media media:
|
||||
md5s.Add(new Models.Hashfile.MD5
|
||||
{
|
||||
Hash = media.MD5,
|
||||
Hash = media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key),
|
||||
File = name + media.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -318,7 +318,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Rom rom:
|
||||
md5s.Add(new Models.Hashfile.MD5
|
||||
{
|
||||
Hash = rom.MD5,
|
||||
Hash = rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key),
|
||||
File = name + rom.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -369,7 +369,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Disk disk:
|
||||
sha1s.Add(new Models.Hashfile.SHA1
|
||||
{
|
||||
Hash = disk.SHA1,
|
||||
Hash = disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key),
|
||||
File = name + disk.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -377,7 +377,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Media media:
|
||||
sha1s.Add(new Models.Hashfile.SHA1
|
||||
{
|
||||
Hash = media.SHA1,
|
||||
Hash = media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key),
|
||||
File = name + media.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -385,7 +385,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Rom rom:
|
||||
sha1s.Add(new Models.Hashfile.SHA1
|
||||
{
|
||||
Hash = rom.SHA1,
|
||||
Hash = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
File = name + rom.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -436,7 +436,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Media media:
|
||||
sha256s.Add(new Models.Hashfile.SHA256
|
||||
{
|
||||
Hash = media.SHA256,
|
||||
Hash = media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key),
|
||||
File = name + media.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -444,7 +444,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Rom rom:
|
||||
sha256s.Add(new Models.Hashfile.SHA256
|
||||
{
|
||||
Hash = rom.SHA256,
|
||||
Hash = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key),
|
||||
File = name + rom.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -495,7 +495,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Rom rom:
|
||||
sha384s.Add(new Models.Hashfile.SHA384
|
||||
{
|
||||
Hash = rom.SHA384,
|
||||
Hash = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key),
|
||||
File = name + rom.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -546,7 +546,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Rom rom:
|
||||
sha512s.Add(new Models.Hashfile.SHA512
|
||||
{
|
||||
Hash = rom.SHA512,
|
||||
Hash = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key),
|
||||
File = name + rom.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -597,7 +597,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Media media:
|
||||
spamsums.Add(new Models.Hashfile.SpamSum
|
||||
{
|
||||
Hash = media.SpamSum,
|
||||
Hash = media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey),
|
||||
File = name + media.GetName(),
|
||||
});
|
||||
break;
|
||||
@@ -605,7 +605,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Rom rom:
|
||||
spamsums.Add(new Models.Hashfile.SpamSum
|
||||
{
|
||||
Hash = rom.SpamSum,
|
||||
Hash = rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey),
|
||||
File = name + rom.GetName(),
|
||||
});
|
||||
break;
|
||||
|
||||
@@ -116,16 +116,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var disk = new Disk
|
||||
{
|
||||
ItemStatus = ItemStatus.None,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
disk.SetName(row.Name);
|
||||
disk.SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, ItemStatus.None);
|
||||
|
||||
if (!string.IsNullOrEmpty(row.MD5))
|
||||
disk.MD5 = row.MD5;
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, row.MD5);
|
||||
else
|
||||
disk.SHA1 = row.SHA1;
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, row.SHA1);
|
||||
|
||||
// Now process and add the item
|
||||
disk.CopyMachineInformation(machine);
|
||||
@@ -139,14 +138,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(row.Size),
|
||||
CRC = row.CRC,
|
||||
SHA1 = row.SHA1,
|
||||
ItemStatus = ItemStatus.None,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(row.Name);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, row.CRC);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, row.SHA1);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size));
|
||||
rom.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
|
||||
|
||||
// Now process and add the item
|
||||
rom.CopyMachineInformation(machine);
|
||||
@@ -162,16 +160,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var disk = new Disk
|
||||
{
|
||||
ItemStatus = ItemStatus.BadDump,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
disk.SetName(row.Name);
|
||||
disk.SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, value: ItemStatus.BadDump);
|
||||
|
||||
if (!string.IsNullOrEmpty(row.MD5))
|
||||
disk.MD5 = row.MD5;
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, row.MD5);
|
||||
else
|
||||
disk.SHA1 = row.SHA1;
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, row.SHA1);
|
||||
|
||||
// Now process and add the item
|
||||
disk.CopyMachineInformation(machine);
|
||||
@@ -184,13 +181,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var disk = new Disk
|
||||
{
|
||||
MD5 = null,
|
||||
SHA1 = null,
|
||||
ItemStatus = ItemStatus.Nodump,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
disk.SetName(row.Name);
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, null);
|
||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, null);
|
||||
disk.SetFieldValue<ItemStatus?>(Models.Metadata.Disk.StatusKey, ItemStatus.Nodump);
|
||||
|
||||
// Now process and add the item
|
||||
disk.CopyMachineInformation(machine);
|
||||
@@ -204,14 +200,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(row.Size),
|
||||
CRC = row.CRC,
|
||||
SHA1 = row.SHA1,
|
||||
ItemStatus = ItemStatus.BadDump,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(row.Name);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, row.CRC);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, row.SHA1);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size));
|
||||
rom.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.BadDump);
|
||||
|
||||
// Now process and add the item
|
||||
rom.CopyMachineInformation(machine);
|
||||
@@ -224,14 +219,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var rom = new Rom
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(row.Size),
|
||||
CRC = null,
|
||||
SHA1 = null,
|
||||
ItemStatus = ItemStatus.Nodump,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
rom.SetName(row.Name);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, null);
|
||||
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, null);
|
||||
rom.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size));
|
||||
rom.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.Nodump);
|
||||
|
||||
// Now process and add the item
|
||||
rom.CopyMachineInformation(machine);
|
||||
|
||||
@@ -34,19 +34,19 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem)
|
||||
{
|
||||
case Disk disk:
|
||||
if (string.IsNullOrEmpty(disk.MD5)
|
||||
&& string.IsNullOrEmpty(disk.SHA1))
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key))
|
||||
&& string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Disk.SHA1Key);
|
||||
}
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (rom.Size == null || rom.Size < 0)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) < 0)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
if (string.IsNullOrEmpty(rom.CRC))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)))
|
||||
missingFields.Add(Models.Metadata.Rom.CRCKey);
|
||||
if (string.IsNullOrEmpty(rom.SHA1))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
break;
|
||||
}
|
||||
@@ -166,7 +166,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
/// <summary>
|
||||
private static Models.Listrom.Row? CreateRow(Disk disk)
|
||||
{
|
||||
if (disk.ItemStatus == ItemStatus.Nodump)
|
||||
if (disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump)
|
||||
{
|
||||
return new Models.Listrom.Row
|
||||
{
|
||||
@@ -174,7 +174,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
NoGoodDumpKnown = true,
|
||||
};
|
||||
}
|
||||
else if (disk.ItemStatus == ItemStatus.BadDump)
|
||||
else if (disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.BadDump)
|
||||
{
|
||||
var row = new Models.Listrom.Row
|
||||
{
|
||||
@@ -182,10 +182,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
Bad = true,
|
||||
};
|
||||
|
||||
if (!string.IsNullOrEmpty(disk.MD5))
|
||||
row.MD5 = disk.MD5;
|
||||
if (!string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)))
|
||||
row.MD5 = disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key);
|
||||
else
|
||||
row.SHA1 = disk.SHA1;
|
||||
row.SHA1 = disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key);
|
||||
|
||||
return row;
|
||||
}
|
||||
@@ -196,10 +196,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
Name = disk.GetName(),
|
||||
};
|
||||
|
||||
if (!string.IsNullOrEmpty(disk.MD5))
|
||||
row.MD5 = disk.MD5;
|
||||
if (!string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)))
|
||||
row.MD5 = disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key);
|
||||
else
|
||||
row.SHA1 = disk.SHA1;
|
||||
row.SHA1 = disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key);
|
||||
|
||||
return row;
|
||||
}
|
||||
@@ -210,24 +210,24 @@ namespace SabreTools.DatFiles.Formats
|
||||
/// <summary>
|
||||
private static Models.Listrom.Row? CreateRow(Rom rom)
|
||||
{
|
||||
if (rom.ItemStatus == ItemStatus.Nodump)
|
||||
if (rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump)
|
||||
{
|
||||
return new Models.Listrom.Row
|
||||
{
|
||||
Name = rom.GetName(),
|
||||
Size = rom.Size?.ToString(),
|
||||
Size = rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
NoGoodDumpKnown = true,
|
||||
};
|
||||
}
|
||||
else if (rom.ItemStatus == ItemStatus.BadDump)
|
||||
else if (rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.BadDump)
|
||||
{
|
||||
return new Models.Listrom.Row
|
||||
{
|
||||
Name = rom.GetName(),
|
||||
Size = rom.Size?.ToString(),
|
||||
Size = rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
Bad = true,
|
||||
CRC = rom.CRC,
|
||||
SHA1 = rom.SHA1,
|
||||
CRC = rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
SHA1 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
};
|
||||
}
|
||||
else
|
||||
@@ -235,9 +235,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
return new Models.Listrom.Row
|
||||
{
|
||||
Name = rom.GetName(),
|
||||
Size = rom.Size?.ToString(),
|
||||
CRC = rom.CRC,
|
||||
SHA1 = rom.SHA1,
|
||||
Size = rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
CRC = rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
SHA1 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,12 +172,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new BiosSet
|
||||
{
|
||||
Description = biosset.Description,
|
||||
Default = biosset.Default?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(biosset.Name);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.BiosSet.DefaultKey, biosset.Default?.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey, biosset.Description);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -204,21 +203,20 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Rom
|
||||
{
|
||||
Bios = rom.Bios,
|
||||
Size = NumberHelper.ConvertToInt64(rom.Size),
|
||||
CRC = rom.CRC,
|
||||
SHA1 = rom.SHA1,
|
||||
MergeTag = rom.Merge,
|
||||
Region = rom.Region,
|
||||
Offset = rom.Offset,
|
||||
ItemStatus = rom.Status.AsEnumValue<ItemStatus>(),
|
||||
Optional = rom.Optional.AsYesNo(),
|
||||
//Dispose = rom.Dispose.AsYesNo(), // TODO: Add to internal model
|
||||
//SoundOnly = rom.SoundOnly.AsYesNo(), // TODO: Add to internal model
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(rom.Name);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(rom.Size));
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.BiosKey, rom.Bios);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, rom.CRC);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Rom.DisposeKey, rom.Dispose.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.MergeKey, rom.Merge);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.OffsetKey, rom.Offset);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Rom.OptionalKey, rom.Optional.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.RegionKey, rom.Region);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.SHA1);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Rom.SoundOnlyKey, rom.SoundOnly.AsYesNo());
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, rom.Status.AsEnumValue<ItemStatus>());
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -245,18 +243,17 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Disk
|
||||
{
|
||||
MD5 = disk.MD5,
|
||||
SHA1 = disk.SHA1,
|
||||
MergeTag = disk.Merge,
|
||||
Region = disk.Region,
|
||||
Index = disk.Index,
|
||||
Writable = disk.Writable.AsYesNo(),
|
||||
ItemStatus = disk.Status.AsEnumValue<ItemStatus>(),
|
||||
Optional = disk.Optional.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(disk.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.IndexKey, disk.Index);
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, disk.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, disk.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.MergeKey, disk.Merge);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Disk.OptionalKey, disk.Optional.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.RegionKey, disk.Region);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, disk.SHA1);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Disk.WritableKey, disk.Writable.AsYesNo());
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -341,14 +338,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Chip
|
||||
{
|
||||
Tag = chip.Tag,
|
||||
ChipType = chip.Type.AsEnumValue<ChipType>(),
|
||||
//SoundOnly = chip.SoundOnly, // TODO: Add to internal model
|
||||
Clock = NumberHelper.ConvertToInt64(chip.Clock),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(chip.Name);
|
||||
item.SetFieldValue<ChipType?>(Models.Metadata.Chip.ChipTypeKey, chip.Type.AsEnumValue<ChipType>());
|
||||
item.SetFieldValue<long?>(Models.Metadata.Chip.ClockKey, NumberHelper.ConvertToInt64(chip.Clock));
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Chip.SoundOnlyKey, chip.Type.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Chip.TagKey, chip.Tag);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -375,23 +371,22 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Display
|
||||
{
|
||||
Tag = display.Tag,
|
||||
DisplayType = display.Type.AsEnumValue<DisplayType>(),
|
||||
Rotate = NumberHelper.ConvertToInt64(display.Rotate),
|
||||
FlipX = display.FlipX.AsYesNo(),
|
||||
Width = NumberHelper.ConvertToInt64(display.Width),
|
||||
Height = NumberHelper.ConvertToInt64(display.Height),
|
||||
Refresh = NumberHelper.ConvertToDouble(display.Refresh),
|
||||
PixClock = NumberHelper.ConvertToInt64(display.PixClock),
|
||||
HTotal = NumberHelper.ConvertToInt64(display.HTotal),
|
||||
HBEnd = NumberHelper.ConvertToInt64(display.HBEnd),
|
||||
HBStart = NumberHelper.ConvertToInt64(display.HBStart),
|
||||
VTotal = NumberHelper.ConvertToInt64(display.VTotal),
|
||||
VBEnd = NumberHelper.ConvertToInt64(display.VBEnd),
|
||||
VBStart = NumberHelper.ConvertToInt64(display.VBStart),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<DisplayType>(Models.Metadata.Display.DisplayTypeKey, display.Type.AsEnumValue<DisplayType>());
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Display.FlipXKey, display.FlipX.AsYesNo());
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.HBEndKey, NumberHelper.ConvertToInt64(display.HBEnd));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.HBStartKey, NumberHelper.ConvertToInt64(display.HBStart));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.HeightKey, NumberHelper.ConvertToInt64(display.Height));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.HTotalKey, NumberHelper.ConvertToInt64(display.HTotal));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.PixClockKey, NumberHelper.ConvertToInt64(display.PixClock));
|
||||
item.SetFieldValue<double?>(Models.Metadata.Display.RefreshKey, NumberHelper.ConvertToDouble(display.Refresh));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.RotateKey, NumberHelper.ConvertToInt64(display.Rotate));
|
||||
item.SetFieldValue<string?>(Models.Metadata.Display.TagKey, display.Tag);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.VBEndKey, NumberHelper.ConvertToInt64(display.VBEnd));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.VBStartKey, NumberHelper.ConvertToInt64(display.VBStart));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.VTotalKey, NumberHelper.ConvertToInt64(display.VTotal));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.WidthKey, NumberHelper.ConvertToInt64(display.Width));
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -418,23 +413,22 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Display
|
||||
{
|
||||
DisplayType = video.Screen?.AsEnumValue<DisplayType>() ?? DisplayType.NULL,
|
||||
Width = NumberHelper.ConvertToInt64(video.Width),
|
||||
Height = NumberHelper.ConvertToInt64(video.Height),
|
||||
//AspectX = video.AspectX, // TODO: Add to internal model or find mapping
|
||||
//AspectY = video.AspectY, // TODO: Add to internal model or find mapping
|
||||
Refresh = NumberHelper.ConvertToDouble(video.Refresh),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<long?>("ASPECTX", NumberHelper.ConvertToInt64(video.AspectX));
|
||||
item.SetFieldValue<long?>("ASPECTY", NumberHelper.ConvertToInt64(video.AspectY));
|
||||
item.SetFieldValue<DisplayType>(Models.Metadata.Display.DisplayTypeKey, video.Screen?.AsEnumValue<DisplayType>() ?? DisplayType.NULL);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.HeightKey, NumberHelper.ConvertToInt64(video.Height));
|
||||
item.SetFieldValue<double?>(Models.Metadata.Display.RefreshKey, NumberHelper.ConvertToDouble(video.Refresh));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.WidthKey, NumberHelper.ConvertToInt64(video.Width));
|
||||
|
||||
switch (video.Orientation)
|
||||
{
|
||||
case "horizontal":
|
||||
item.Rotate = 0;
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.RotateKey, 0);
|
||||
break;
|
||||
case "vertical":
|
||||
item.Rotate = 90;
|
||||
item.SetFieldValue<long?>(Models.Metadata.Display.RotateKey, 90);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -461,10 +455,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
containsItems = true;
|
||||
var item = new Sound
|
||||
{
|
||||
Channels = NumberHelper.ConvertToInt64(sound.Channels),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<long?>(Models.Metadata.Sound.ChannelsKey, NumberHelper.ConvertToInt64(sound.Channels));
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -488,39 +481,37 @@ namespace SabreTools.DatFiles.Formats
|
||||
containsItems = true;
|
||||
var item = new Input
|
||||
{
|
||||
Service = input.Service.AsYesNo(),
|
||||
Tilt = input.Tilt.AsYesNo(),
|
||||
Players = NumberHelper.ConvertToInt64(input.Players),
|
||||
//ControlAttr = input.ControlAttr, // TODO: Add to internal model
|
||||
//Buttons = input.Buttons, // TODO: Add to internal model
|
||||
Coins = NumberHelper.ConvertToInt64(input.Coins),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<long?>(Models.Metadata.Input.ButtonsKey, NumberHelper.ConvertToInt64(input.Buttons));
|
||||
item.SetFieldValue<long?>(Models.Metadata.Input.CoinsKey, NumberHelper.ConvertToInt64(input.Coins));
|
||||
//item.SetFieldValue<string?>(Models.Metadata.Input.ControlKey, input.ControlAttr);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Input.PlayersKey, NumberHelper.ConvertToInt64(input.Players));
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Input.ServiceKey, input.Service?.AsYesNo());
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Input.TiltKey, input.Tilt?.AsYesNo());
|
||||
|
||||
var controls = new List<Control>();
|
||||
foreach (var control in input.Control ?? [])
|
||||
{
|
||||
var controlItem = new Control
|
||||
{
|
||||
ControlType = control.Type.AsEnumValue<ControlType>(),
|
||||
Player = NumberHelper.ConvertToInt64(control.Player),
|
||||
Buttons = NumberHelper.ConvertToInt64(control.Buttons),
|
||||
RequiredButtons = NumberHelper.ConvertToInt64(control.ReqButtons),
|
||||
Minimum = NumberHelper.ConvertToInt64(control.Minimum),
|
||||
Maximum = NumberHelper.ConvertToInt64(control.Maximum),
|
||||
Sensitivity = NumberHelper.ConvertToInt64(control.Sensitivity),
|
||||
KeyDelta = NumberHelper.ConvertToInt64(control.KeyDelta),
|
||||
Reverse = control.Reverse.AsYesNo(),
|
||||
Ways = control.Ways,
|
||||
Ways2 = control.Ways2,
|
||||
Ways3 = control.Ways3,
|
||||
};
|
||||
var controlItem = new Control();
|
||||
controlItem.SetFieldValue<long?>(Models.Metadata.Control.ButtonsKey, NumberHelper.ConvertToInt64(control.Buttons));
|
||||
controlItem.SetFieldValue<ControlType?>(Models.Metadata.Control.ControlTypeKey, control.Type.AsEnumValue<ControlType>());
|
||||
controlItem.SetFieldValue<long?>(Models.Metadata.Control.KeyDeltaKey, NumberHelper.ConvertToInt64(control.KeyDelta));
|
||||
controlItem.SetFieldValue<long?>(Models.Metadata.Control.MaximumKey, NumberHelper.ConvertToInt64(control.Maximum));
|
||||
controlItem.SetFieldValue<long?>(Models.Metadata.Control.MinimumKey, NumberHelper.ConvertToInt64(control.Minimum));
|
||||
controlItem.SetFieldValue<long?>(Models.Metadata.Control.PlayerKey, NumberHelper.ConvertToInt64(control.Player));
|
||||
controlItem.SetFieldValue<long?>(Models.Metadata.Control.ReqButtonsKey, NumberHelper.ConvertToInt64(control.ReqButtons));
|
||||
controlItem.SetFieldValue<bool?>(Models.Metadata.Control.ReverseKey, control.Reverse.AsYesNo());
|
||||
controlItem.SetFieldValue<long?>(Models.Metadata.Control.SensitivityKey, NumberHelper.ConvertToInt64(control.Sensitivity));
|
||||
controlItem.SetFieldValue<string?>(Models.Metadata.Control.WaysKey, control.Ways);
|
||||
controlItem.SetFieldValue<string?>(Models.Metadata.Control.Ways2Key, control.Ways2);
|
||||
controlItem.SetFieldValue<string?>(Models.Metadata.Control.Ways3Key, control.Ways3);
|
||||
|
||||
controls.Add(controlItem);
|
||||
}
|
||||
|
||||
if (controls.Any())
|
||||
item.Controls = controls;
|
||||
item.SetFieldValue<Control[]?>(Models.Metadata.Input.ControlKey, [.. controls]);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -546,68 +537,61 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new DipSwitch
|
||||
{
|
||||
Tag = dipswitch.Tag,
|
||||
Mask = dipswitch.Mask,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(dipswitch.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.DipSwitch.MaskKey, dipswitch.Mask);
|
||||
item.SetFieldValue<string?>(Models.Metadata.DipSwitch.TagKey, dipswitch.Tag);
|
||||
|
||||
if (dipswitch.Condition != null)
|
||||
{
|
||||
var condition = new Condition
|
||||
{
|
||||
Tag = dipswitch.Condition.Tag,
|
||||
Mask = dipswitch.Condition.Mask,
|
||||
Relation = dipswitch.Condition.Relation.AsEnumValue<Relation>(),
|
||||
Value = dipswitch.Condition.Value,
|
||||
};
|
||||
item.Conditions = [condition];
|
||||
var condition = new Condition();
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.MaskKey, dipswitch.Condition.Mask);
|
||||
condition.SetFieldValue<Relation?>(Models.Metadata.Condition.RelationKey, dipswitch.Condition.Relation.AsEnumValue<Relation>());
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.TagKey, dipswitch.Condition.Tag);
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.ValueKey, dipswitch.Condition.Value);
|
||||
|
||||
item.SetFieldValue<Condition[]?>(Models.Metadata.DipSwitch.ConditionKey, [condition]);
|
||||
}
|
||||
|
||||
var locations = new List<DipLocation>();
|
||||
foreach (var diplocation in dipswitch.DipLocation ?? [])
|
||||
{
|
||||
var locationItem = new DipLocation
|
||||
{
|
||||
Number = NumberHelper.ConvertToInt64(diplocation.Number),
|
||||
Inverted = diplocation.Inverted.AsYesNo(),
|
||||
};
|
||||
var locationItem = new DipLocation();
|
||||
locationItem.SetName(diplocation.Name);
|
||||
locationItem.SetFieldValue<bool?>(Models.Metadata.DipLocation.InvertedKey, diplocation.Inverted.AsYesNo());
|
||||
locationItem.SetFieldValue<long?>(Models.Metadata.DipLocation.NumberKey, NumberHelper.ConvertToInt64(diplocation.Number));
|
||||
|
||||
locations.Add(locationItem);
|
||||
}
|
||||
|
||||
if (locations.Any())
|
||||
item.Locations = locations;
|
||||
item.SetFieldValue<DipLocation[]?>(Models.Metadata.DipSwitch.DipLocationKey, [.. locations]);
|
||||
|
||||
var settings = new List<DipValue>();
|
||||
foreach (var dipvalue in dipswitch.DipValue ?? [])
|
||||
{
|
||||
var dipValueItem = new DipValue
|
||||
{
|
||||
Value = dipvalue.Value,
|
||||
Default = dipvalue.Default.AsYesNo(),
|
||||
};
|
||||
var dipValueItem = new DipValue();
|
||||
dipValueItem.SetName(dipvalue.Name);
|
||||
dipValueItem.SetFieldValue<bool?>(Models.Metadata.DipValue.DefaultKey, dipvalue.Default.AsYesNo());
|
||||
dipValueItem.SetFieldValue<string?>(Models.Metadata.DipValue.ValueKey, dipvalue.Value);
|
||||
|
||||
if (dipvalue.Condition != null)
|
||||
{
|
||||
var condition = new Condition
|
||||
{
|
||||
Tag = dipvalue.Condition.Tag,
|
||||
Mask = dipvalue.Condition.Mask,
|
||||
Relation = dipvalue.Condition.Relation.AsEnumValue<Relation>(),
|
||||
Value = dipvalue.Condition.Value,
|
||||
};
|
||||
dipValueItem.Conditions = [condition];
|
||||
var condition = new Condition();
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.MaskKey, dipvalue.Condition.Mask);
|
||||
condition.SetFieldValue<Relation?>(Models.Metadata.Condition.RelationKey, dipvalue.Condition.Relation.AsEnumValue<Relation>());
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.TagKey, dipvalue.Condition.Tag);
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.ValueKey, dipvalue.Condition.Value);
|
||||
|
||||
dipValueItem.SetFieldValue<Condition[]?>(Models.Metadata.DipValue.ConditionKey, [condition]);
|
||||
}
|
||||
|
||||
settings.Add(dipValueItem);
|
||||
}
|
||||
|
||||
if (settings.Any())
|
||||
item.Values = settings;
|
||||
item.SetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey, [.. settings]);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -634,67 +618,61 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Configuration
|
||||
{
|
||||
Tag = configuration.Tag,
|
||||
Mask = configuration.Mask,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(configuration.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Configuration.MaskKey, configuration.Mask);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Configuration.TagKey, configuration.Tag);
|
||||
|
||||
if (configuration.Condition != null)
|
||||
{
|
||||
var condition = new DatItems.Formats.Condition
|
||||
{
|
||||
Tag = configuration.Condition.Tag,
|
||||
Mask = configuration.Condition.Mask,
|
||||
Relation = configuration.Condition.Relation.AsEnumValue<Relation>(),
|
||||
Value = configuration.Condition.Value,
|
||||
};
|
||||
item.Conditions = [condition];
|
||||
var condition = new DatItems.Formats.Condition();
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.MaskKey, configuration.Condition.Mask);
|
||||
condition.SetFieldValue<Relation?>(Models.Metadata.Condition.RelationKey, configuration.Condition.Relation.AsEnumValue<Relation>());
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.TagKey, configuration.Condition.Tag);
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.ValueKey, configuration.Condition.Value);
|
||||
|
||||
item.SetFieldValue<Condition[]?>(Models.Metadata.Configuration.ConditionKey, [condition]);
|
||||
}
|
||||
|
||||
var locations = new List<ConfLocation>();
|
||||
foreach (var confLocation in configuration.ConfLocation ?? [])
|
||||
{
|
||||
var locationItem = new ConfLocation
|
||||
{
|
||||
Number = NumberHelper.ConvertToInt64(confLocation.Number),
|
||||
Inverted = confLocation.Inverted.AsYesNo(),
|
||||
};
|
||||
var locationItem = new ConfLocation();
|
||||
locationItem.SetName(confLocation.Name);
|
||||
locationItem.SetFieldValue<bool?>(Models.Metadata.ConfLocation.InvertedKey, confLocation.Inverted.AsYesNo());
|
||||
locationItem.SetFieldValue<long?>(Models.Metadata.ConfLocation.NumberKey, NumberHelper.ConvertToInt64(confLocation.Number));
|
||||
|
||||
locations.Add(locationItem);
|
||||
}
|
||||
|
||||
if (locations.Any())
|
||||
item.Locations = locations;
|
||||
item.SetFieldValue<ConfLocation[]?>(Models.Metadata.Configuration.ConfLocationKey, [.. locations]);
|
||||
|
||||
var settings = new List<ConfSetting>();
|
||||
foreach (var dipvalue in configuration.ConfSetting ?? [])
|
||||
{
|
||||
var settingItem = new ConfSetting
|
||||
{
|
||||
Value = dipvalue.Value,
|
||||
Default = dipvalue.Default.AsYesNo(),
|
||||
};
|
||||
var settingItem = new ConfSetting();
|
||||
settingItem.SetName(dipvalue.Name);
|
||||
settingItem.SetFieldValue<bool?>(Models.Metadata.ConfSetting.DefaultKey, dipvalue.Default.AsYesNo());
|
||||
settingItem.SetFieldValue<string?>(Models.Metadata.ConfSetting.ValueKey, dipvalue.Value);
|
||||
|
||||
if (dipvalue.Condition != null)
|
||||
{
|
||||
var condition = new Condition
|
||||
{
|
||||
Tag = dipvalue.Condition.Tag,
|
||||
Mask = dipvalue.Condition.Mask,
|
||||
Relation = dipvalue.Condition.Relation.AsEnumValue<Relation>(),
|
||||
Value = dipvalue.Condition.Value,
|
||||
};
|
||||
settingItem.Conditions = [condition];
|
||||
var condition = new Condition();
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.MaskKey, dipvalue.Condition.Mask);
|
||||
condition.SetFieldValue<Relation?>(Models.Metadata.Condition.RelationKey, dipvalue.Condition.Relation.AsEnumValue<Relation>());
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.TagKey, dipvalue.Condition.Tag);
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.ValueKey, dipvalue.Condition.Value);
|
||||
|
||||
settingItem.SetFieldValue<Condition[]?>(Models.Metadata.ConfSetting.ConditionKey, [condition]);
|
||||
}
|
||||
|
||||
settings.Add(settingItem);
|
||||
}
|
||||
|
||||
if (settings.Any())
|
||||
item.Settings = settings;
|
||||
item.SetFieldValue<ConfSetting[]?>(Models.Metadata.Configuration.ConfSettingKey, [.. settings]);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -721,23 +699,21 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Port
|
||||
{
|
||||
Tag = port.Tag,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<string>(Models.Metadata.Port.TagKey, port.Tag);
|
||||
|
||||
var analogs = new List<Analog>();
|
||||
foreach (var analog in port.Analog ?? [])
|
||||
{
|
||||
var analogItem = new Analog
|
||||
{
|
||||
Mask = analog.Mask,
|
||||
};
|
||||
var analogItem = new Analog();
|
||||
analogItem.SetFieldValue<string?>(Models.Metadata.Analog.MaskKey, analog.Mask);
|
||||
|
||||
analogs.Add(analogItem);
|
||||
}
|
||||
|
||||
if (analogs.Any())
|
||||
item.Analogs = analogs;
|
||||
item.SetFieldValue<Analog[]?>(Models.Metadata.Port.AnalogKey, [.. analogs]);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -762,19 +738,21 @@ namespace SabreTools.DatFiles.Formats
|
||||
containsItems = true;
|
||||
foreach (var adjuster in adjusters)
|
||||
{
|
||||
var item = new Adjuster { Source = new Source { Index = indexId, Name = filename } };
|
||||
var item = new Adjuster
|
||||
{
|
||||
Source = new Source { Index = indexId, Name = filename }
|
||||
};
|
||||
item.SetName(adjuster.Name);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Adjuster.DefaultKey, adjuster.Default.AsYesNo());
|
||||
|
||||
if (adjuster.Condition != null)
|
||||
{
|
||||
var condition = new Condition
|
||||
{
|
||||
Tag = adjuster.Condition.Tag,
|
||||
Mask = adjuster.Condition.Mask,
|
||||
Relation = adjuster.Condition.Relation.AsEnumValue<Relation>(),
|
||||
Value = adjuster.Condition.Value,
|
||||
};
|
||||
var condition = new Condition();
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.MaskKey, adjuster.Condition.Mask);
|
||||
condition.SetFieldValue<Relation?>(Models.Metadata.Condition.RelationKey, adjuster.Condition.Relation.AsEnumValue<Relation>());
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.TagKey, adjuster.Condition.Tag);
|
||||
condition.SetFieldValue<string?>(Models.Metadata.Condition.ValueKey, adjuster.Condition.Value);
|
||||
|
||||
item.SetFieldValue<Condition[]?>(Models.Metadata.Adjuster.ConditionKey, [condition]);
|
||||
}
|
||||
|
||||
@@ -801,20 +779,19 @@ namespace SabreTools.DatFiles.Formats
|
||||
containsItems = true;
|
||||
var item = new Driver
|
||||
{
|
||||
Status = driver.Status.AsEnumValue<SupportStatus>(),
|
||||
//Color = driver.Color.AsEnumValue<SupportStatus>(), // TODO: Add to internal model
|
||||
//Sound = driver.Sound.AsEnumValue<SupportStatus>(), // TODO: Add to internal model
|
||||
//PaletteSize = NumberHelper.ConvertToInt64(driver.PaletteSize), // TODO: Add to internal model
|
||||
Emulation = driver.Emulation.AsEnumValue<SupportStatus>(),
|
||||
Cocktail = driver.Cocktail.AsEnumValue<SupportStatus>(),
|
||||
SaveState = driver.SaveState.AsEnumValue<Supported>(),
|
||||
RequiresArtwork = driver.RequiresArtwork.AsYesNo(),
|
||||
Unofficial = driver.Unofficial.AsYesNo(),
|
||||
NoSoundHardware = driver.NoSoundHardware.AsYesNo(),
|
||||
Incomplete = driver.Incomplete.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.CocktailKey, driver.Cocktail?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.ColorKey, driver.Color?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.EmulationKey, driver.Emulation?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Driver.IncompleteKey, driver.Incomplete.AsYesNo());
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Driver.NoSoundHardwareKey, driver.NoSoundHardware.AsYesNo());
|
||||
item.SetFieldValue<long?>(Models.Metadata.Driver.PaletteSizeKey, NumberHelper.ConvertToInt64(driver.PaletteSize));
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Driver.RequiresArtworkKey, driver.RequiresArtwork.AsYesNo());
|
||||
item.SetFieldValue<Supported>(Models.Metadata.Driver.SaveStateKey, driver.SaveState?.AsEnumValue<Supported>() ?? Supported.NULL);
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.SoundKey, driver.Sound?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey, driver.Status?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Driver.UnofficialKey, driver.Unofficial.AsYesNo());
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -840,12 +817,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Feature
|
||||
{
|
||||
Type = feature.Type.AsEnumValue<FeatureType>(),
|
||||
Status = feature.Status.AsEnumValue<FeatureStatus>(),
|
||||
Overall = feature.Overall.AsEnumValue<FeatureStatus>(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<FeatureType>(Models.Metadata.Feature.FeatureTypeKey, feature.Type.AsEnumValue<FeatureType>());
|
||||
item.SetFieldValue<FeatureStatus>(Models.Metadata.Feature.OverallKey, feature.Overall.AsEnumValue<FeatureStatus>());
|
||||
item.SetFieldValue<FeatureStatus>(Models.Metadata.Feature.StatusKey, feature.Status.AsEnumValue<FeatureStatus>());
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -872,23 +848,21 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Device
|
||||
{
|
||||
DeviceType = device.Type.AsEnumValue<DeviceType>(),
|
||||
Tag = device.Tag,
|
||||
FixedImage = device.FixedImage,
|
||||
Mandatory = NumberHelper.ConvertToInt64(device.Mandatory),
|
||||
Interface = device.Interface,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<DeviceType>(Models.Metadata.Device.DeviceTypeKey, device.Type.AsEnumValue<DeviceType>());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Device.FixedImageKey, device.FixedImage);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Device.InterfaceKey, device.Interface);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Device.MandatoryKey, NumberHelper.ConvertToInt64(device.Mandatory));
|
||||
item.SetFieldValue<string?>(Models.Metadata.Device.TagKey, device.Tag);
|
||||
|
||||
if (device.Instance != null)
|
||||
{
|
||||
var instance = new Instance
|
||||
{
|
||||
BriefName = device.Instance.BriefName,
|
||||
};
|
||||
var instance = new Instance();
|
||||
instance.SetName(device.Instance.Name);
|
||||
item.Instances = [instance];
|
||||
instance.SetFieldValue<string?>(Models.Metadata.Instance.BriefNameKey, device.Instance.BriefName);
|
||||
|
||||
item.SetFieldValue<Instance[]?>(Models.Metadata.Device.InstanceKey, [instance]);
|
||||
}
|
||||
|
||||
var extensions = new List<Extension>();
|
||||
@@ -896,11 +870,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var extensionItem = new Extension();
|
||||
extensionItem.SetName(extension.Name);
|
||||
|
||||
extensions.Add(extensionItem);
|
||||
}
|
||||
|
||||
if (extensions.Any())
|
||||
item.Extensions = extensions;
|
||||
item.SetFieldValue<Extension[]?>(Models.Metadata.Device.ExtensionKey, extensions.ToArray());
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -934,17 +909,16 @@ namespace SabreTools.DatFiles.Formats
|
||||
var slotoptions = new List<SlotOption>();
|
||||
foreach (var slotoption in slot.SlotOption ?? [])
|
||||
{
|
||||
var slotoptionItem = new SlotOption
|
||||
{
|
||||
DeviceName = slotoption.DevName,
|
||||
Default = slotoption.Default.AsYesNo(),
|
||||
};
|
||||
var slotoptionItem = new SlotOption();
|
||||
slotoptionItem.SetName(slotoption.Name);
|
||||
slotoptionItem.SetFieldValue<bool?>(Models.Metadata.SlotOption.DefaultKey, slotoption.Default.AsYesNo());
|
||||
slotoptionItem.SetFieldValue<string?>(Models.Metadata.SlotOption.DevNameKey, slotoption.DevName);
|
||||
|
||||
slotoptions.Add(slotoptionItem);
|
||||
}
|
||||
|
||||
if (slotoptions.Any())
|
||||
item.SlotOptions = slotoptions;
|
||||
item.SetFieldValue<SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey, [.. slotoptions]);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -971,13 +945,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new DatItems.Formats.SoftwareList
|
||||
{
|
||||
Tag = softwarelist.Tag,
|
||||
Status = softwarelist.Status.AsEnumValue<SoftwareListStatus>(),
|
||||
Filter = softwarelist.Filter,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(softwarelist.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.SoftwareList.FilterKey, softwarelist.Filter);
|
||||
item.SetFieldValue<SoftwareListStatus>(Models.Metadata.SoftwareList.StatusKey, softwarelist.Status.AsEnumValue<SoftwareListStatus>());
|
||||
item.SetFieldValue<string?>(Models.Metadata.SoftwareList.TagKey, softwarelist.Tag);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -1004,12 +977,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new RamOption
|
||||
{
|
||||
Default = ramoption.Default.AsYesNo(),
|
||||
Content = ramoption.Content,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(ramoption.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.RamOption.ContentKey, ramoption.Content);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.RamOption.DefaultKey, ramoption.Default.AsYesNo());
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
|
||||
@@ -5,7 +5,6 @@ using SabreTools.Core;
|
||||
using SabreTools.Core.Tools;
|
||||
using SabreTools.DatItems;
|
||||
using SabreTools.DatItems.Formats;
|
||||
using SabreTools.Serialization.CrossModel;
|
||||
|
||||
namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
@@ -51,17 +50,17 @@ namespace SabreTools.DatFiles.Formats
|
||||
case BiosSet biosset:
|
||||
if (string.IsNullOrEmpty(biosset.GetName()))
|
||||
missingFields.Add(Models.Metadata.BiosSet.NameKey);
|
||||
if (string.IsNullOrEmpty(biosset.Description))
|
||||
if (string.IsNullOrEmpty(biosset.GetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey)))
|
||||
missingFields.Add(Models.Metadata.BiosSet.DescriptionKey);
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetName()))
|
||||
missingFields.Add(Models.Metadata.Rom.NameKey);
|
||||
if (rom.Size == null || rom.Size < 0)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) < 0)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
if (string.IsNullOrEmpty(rom.CRC)
|
||||
&& string.IsNullOrEmpty(rom.SHA1))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
}
|
||||
@@ -70,8 +69,8 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Disk disk:
|
||||
if (string.IsNullOrEmpty(disk.GetName()))
|
||||
missingFields.Add(Models.Metadata.Disk.NameKey);
|
||||
if (string.IsNullOrEmpty(disk.MD5)
|
||||
&& string.IsNullOrEmpty(disk.SHA1))
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key))
|
||||
&& string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Disk.SHA1Key);
|
||||
}
|
||||
@@ -90,43 +89,43 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Chip chip:
|
||||
if (string.IsNullOrEmpty(chip.GetName()))
|
||||
missingFields.Add(Models.Metadata.Chip.NameKey);
|
||||
if (!chip.ChipTypeSpecified)
|
||||
if (chip.GetFieldValue<ChipType>(Models.Metadata.Chip.ChipTypeKey) == ChipType.NULL)
|
||||
missingFields.Add(Models.Metadata.Chip.ChipTypeKey);
|
||||
break;
|
||||
|
||||
case Display display:
|
||||
if (!display.DisplayTypeSpecified)
|
||||
if (display.GetFieldValue<DisplayType>(Models.Metadata.Display.DisplayTypeKey) == DisplayType.NULL)
|
||||
missingFields.Add(Models.Metadata.Display.DisplayTypeKey);
|
||||
if (display.Refresh == null)
|
||||
if (display.GetFieldValue<double?>(Models.Metadata.Display.RefreshKey) == null)
|
||||
missingFields.Add(Models.Metadata.Display.RefreshKey);
|
||||
break;
|
||||
|
||||
case Sound sound:
|
||||
if (sound.Channels == null)
|
||||
if (sound.GetFieldValue<long?>(Models.Metadata.Sound.ChannelsKey) == null)
|
||||
missingFields.Add(Models.Metadata.Sound.ChannelsKey);
|
||||
break;
|
||||
|
||||
case Input input:
|
||||
if (input.Players == null)
|
||||
if (input.GetFieldValue<long?>(Models.Metadata.Input.PlayersKey) == null)
|
||||
missingFields.Add(Models.Metadata.Input.PlayersKey);
|
||||
break;
|
||||
|
||||
case DipSwitch dipswitch:
|
||||
if (string.IsNullOrEmpty(dipswitch.GetName()))
|
||||
missingFields.Add(Models.Metadata.DipSwitch.NameKey);
|
||||
if (string.IsNullOrEmpty(dipswitch.Tag))
|
||||
if (string.IsNullOrEmpty(dipswitch.GetFieldValue<string?>(Models.Metadata.DipSwitch.TagKey)))
|
||||
missingFields.Add(Models.Metadata.DipSwitch.TagKey);
|
||||
break;
|
||||
|
||||
case Configuration configuration:
|
||||
if (string.IsNullOrEmpty(configuration.GetName()))
|
||||
missingFields.Add(Models.Metadata.Configuration.NameKey);
|
||||
if (string.IsNullOrEmpty(configuration.Tag))
|
||||
if (string.IsNullOrEmpty(configuration.GetFieldValue<string>(Models.Metadata.Configuration.TagKey)))
|
||||
missingFields.Add(Models.Metadata.Configuration.TagKey);
|
||||
break;
|
||||
|
||||
case Port port:
|
||||
if (string.IsNullOrEmpty(port.Tag))
|
||||
if (string.IsNullOrEmpty(port.GetFieldValue<string>(Models.Metadata.Port.TagKey)))
|
||||
missingFields.Add(Models.Metadata.Port.TagKey);
|
||||
break;
|
||||
|
||||
@@ -136,23 +135,23 @@ namespace SabreTools.DatFiles.Formats
|
||||
break;
|
||||
|
||||
case Driver driver:
|
||||
if (!driver.StatusSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.StatusKey);
|
||||
if (!driver.EmulationSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.EmulationKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.EmulationKey);
|
||||
if (!driver.CocktailSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.CocktailKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.CocktailKey);
|
||||
if (!driver.SaveStateSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.SaveStateKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.SaveStateKey);
|
||||
break;
|
||||
|
||||
case Feature feature:
|
||||
if (!feature.TypeSpecified)
|
||||
if (feature.GetFieldValue<FeatureType>(Models.Metadata.Feature.FeatureTypeKey) == FeatureType.NULL)
|
||||
missingFields.Add(Models.Metadata.Feature.FeatureTypeKey);
|
||||
break;
|
||||
|
||||
case Device device:
|
||||
if (!device.DeviceTypeSpecified)
|
||||
if (device.GetFieldValue<DeviceType>(Models.Metadata.Device.DeviceTypeKey) != DeviceType.NULL)
|
||||
missingFields.Add(Models.Metadata.Device.DeviceTypeKey);
|
||||
break;
|
||||
|
||||
@@ -162,11 +161,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
break;
|
||||
|
||||
case DatItems.Formats.SoftwareList softwarelist:
|
||||
if (string.IsNullOrEmpty(softwarelist.Tag))
|
||||
if (string.IsNullOrEmpty(softwarelist.GetFieldValue<string?>(Models.Metadata.SoftwareList.TagKey)))
|
||||
missingFields.Add(Models.Metadata.SoftwareList.TagKey);
|
||||
if (string.IsNullOrEmpty(softwarelist.GetName()))
|
||||
missingFields.Add(Models.Metadata.SoftwareList.NameKey);
|
||||
if (!softwarelist.StatusSpecified)
|
||||
if (softwarelist.GetFieldValue<SoftwareListStatus?>(Models.Metadata.SoftwareList.StatusKey) == SoftwareListStatus.None)
|
||||
missingFields.Add(Models.Metadata.SoftwareList.StatusKey);
|
||||
break;
|
||||
|
||||
@@ -412,12 +411,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
var biosset = new Models.Listxml.BiosSet
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Description = item.Description,
|
||||
Default = item.GetFieldValue<bool?>(Models.Metadata.BiosSet.DefaultKey).FromYesNo(),
|
||||
Description = item.GetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey),
|
||||
};
|
||||
|
||||
if (item.DefaultSpecified)
|
||||
biosset.Default = item.Default.FromYesNo();
|
||||
|
||||
return biosset;
|
||||
}
|
||||
|
||||
@@ -429,17 +426,17 @@ namespace SabreTools.DatFiles.Formats
|
||||
var rom = new Models.Listxml.Rom
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Bios = item.Bios,
|
||||
Size = item.Size?.ToString(),
|
||||
CRC = item.CRC,
|
||||
SHA1 = item.SHA1,
|
||||
Merge = item.MergeTag,
|
||||
Region = item.Region,
|
||||
Offset = item.Offset,
|
||||
Status = item.ItemStatus.AsStringValue<ItemStatus>(useSecond: false),
|
||||
Optional = item.Optional.FromYesNo(),
|
||||
//Dispose = item.Dispose.FromYesNo(), // TODO: Add to internal model
|
||||
//SoundOnly = item.SoundOnly.FromYesNo(), // TODO: Add to internal model
|
||||
Bios = item.GetFieldValue<string?>(Models.Metadata.Rom.BiosKey),
|
||||
Size = item.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
CRC = item.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
Merge = item.GetFieldValue<string?>(Models.Metadata.Rom.MergeKey),
|
||||
Region = item.GetFieldValue<string?>(Models.Metadata.Rom.RegionKey),
|
||||
Offset = item.GetFieldValue<string?>(Models.Metadata.Rom.OffsetKey),
|
||||
Status = item.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey).AsStringValue<ItemStatus>(useSecond: false),
|
||||
Optional = item.GetFieldValue<bool?>(Models.Metadata.Rom.OptionalKey).FromYesNo(),
|
||||
Dispose = item.GetFieldValue<bool?>(Models.Metadata.Rom.DisposeKey).FromYesNo(),
|
||||
SoundOnly = item.GetFieldValue<bool?>(Models.Metadata.Rom.SoundOnlyKey).FromYesNo(),
|
||||
};
|
||||
|
||||
return rom;
|
||||
@@ -453,14 +450,14 @@ namespace SabreTools.DatFiles.Formats
|
||||
var disk = new Models.Listxml.Disk
|
||||
{
|
||||
Name = item.GetName(),
|
||||
MD5 = item.MD5,
|
||||
SHA1 = item.SHA1,
|
||||
Merge = item.MergeTag,
|
||||
Region = item.Region,
|
||||
Index = item.Index,
|
||||
Writable = item.Writable.FromYesNo(),
|
||||
Status = item.ItemStatus.AsStringValue<ItemStatus>(useSecond: false),
|
||||
Optional = item.Optional.FromYesNo(),
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key),
|
||||
Merge = item.GetFieldValue<string?>(Models.Metadata.Disk.MergeKey),
|
||||
Region = item.GetFieldValue<string?>(Models.Metadata.Disk.RegionKey),
|
||||
Index = item.GetFieldValue<string?>(Models.Metadata.Disk.IndexKey),
|
||||
Writable = item.GetFieldValue<bool?>(Models.Metadata.Disk.WritableKey).FromYesNo(),
|
||||
Status = item.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey).AsStringValue<ItemStatus>(useSecond: false),
|
||||
Optional = item.GetFieldValue<bool?>(Models.Metadata.Disk.OptionalKey).FromYesNo(),
|
||||
};
|
||||
|
||||
return disk;
|
||||
@@ -500,10 +497,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
var chip = new Models.Listxml.Chip
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Tag = item.Tag,
|
||||
Type = item.ChipType.AsStringValue<ChipType>(),
|
||||
//SoundOnly = item.SoundOnly, // TODO: Add to internal model
|
||||
Clock = item.Clock?.ToString(),
|
||||
Tag = item.GetFieldValue<string?>(Models.Metadata.Chip.TagKey),
|
||||
Type = item.GetFieldValue<ChipType>(Models.Metadata.Chip.ChipTypeKey).AsStringValue<ChipType>(),
|
||||
SoundOnly = item.GetFieldValue<bool?>(Models.Metadata.Chip.SoundOnlyKey).FromYesNo(),
|
||||
Clock = item.GetFieldValue<long?>(Models.Metadata.Chip.TagKey)?.ToString(),
|
||||
};
|
||||
|
||||
return chip;
|
||||
@@ -516,20 +513,20 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var display = new Models.Listxml.Display
|
||||
{
|
||||
Tag = item.Tag,
|
||||
Type = item.DisplayType.AsStringValue<DisplayType>(),
|
||||
Rotate = item.Rotate?.ToString(),
|
||||
FlipX = item.FlipX.FromYesNo(),
|
||||
Width = item.Width?.ToString(),
|
||||
Height = item.Height?.ToString(),
|
||||
Refresh = item.Refresh?.ToString(),
|
||||
PixClock = item.PixClock?.ToString(),
|
||||
HTotal = item.HTotal?.ToString(),
|
||||
HBEnd = item.HBEnd?.ToString(),
|
||||
HBStart = item.HBStart?.ToString(),
|
||||
VTotal = item.VTotal?.ToString(),
|
||||
VBEnd = item.VBEnd?.ToString(),
|
||||
VBStart = item.VBStart?.ToString(),
|
||||
Tag = item.GetFieldValue<string?>(Models.Metadata.Display.TagKey),
|
||||
Type = item.GetFieldValue<DisplayType>(Models.Metadata.Display.DisplayTypeKey).AsStringValue<DisplayType>(),
|
||||
Rotate = item.GetFieldValue<long?>(Models.Metadata.Display.RotateKey)?.ToString(),
|
||||
FlipX = item.GetFieldValue<bool?>(Models.Metadata.Display.FlipXKey).FromYesNo(),
|
||||
Width = item.GetFieldValue<string?>(Models.Metadata.Display.WidthKey)?.ToString(),
|
||||
Height = item.GetFieldValue<string?>(Models.Metadata.Display.HeightKey)?.ToString(),
|
||||
Refresh = item.GetFieldValue<double?>(Models.Metadata.Display.RefreshKey)?.ToString(),
|
||||
PixClock = item.GetFieldValue<string?>(Models.Metadata.Display.PixClockKey)?.ToString(),
|
||||
HTotal = item.GetFieldValue<string?>(Models.Metadata.Display.HTotalKey)?.ToString(),
|
||||
HBEnd = item.GetFieldValue<string?>(Models.Metadata.Display.HBEndKey)?.ToString(),
|
||||
HBStart = item.GetFieldValue<string?>(Models.Metadata.Display.HBStartKey)?.ToString(),
|
||||
VTotal = item.GetFieldValue<string?>(Models.Metadata.Display.VTotalKey)?.ToString(),
|
||||
VBEnd = item.GetFieldValue<string?>(Models.Metadata.Display.VBEndKey)?.ToString(),
|
||||
VBStart = item.GetFieldValue<string?>(Models.Metadata.Display.VBStartKey)?.ToString(),
|
||||
};
|
||||
|
||||
return display;
|
||||
@@ -542,7 +539,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var sound = new Models.Listxml.Sound
|
||||
{
|
||||
Channels = item.Channels?.ToString(),
|
||||
Channels = item.GetFieldValue<long?>(Models.Metadata.Sound.ChannelsKey)?.ToString(),
|
||||
};
|
||||
|
||||
return sound;
|
||||
@@ -555,16 +552,16 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var input = new Models.Listxml.Input
|
||||
{
|
||||
Service = item.Service.FromYesNo(),
|
||||
Tilt = item.Tilt.FromYesNo(),
|
||||
Players = item.Players?.ToString(),
|
||||
//ControlAttr = item.ControlAttr, // TODO: Add to internal model
|
||||
//Buttons = item.Buttons, // TODO: Add to internal model
|
||||
Coins = item.Coins?.ToString(),
|
||||
Service = item.GetFieldValue<bool?>(Models.Metadata.Input.ServiceKey).FromYesNo(),
|
||||
Tilt = item.GetFieldValue<bool?>(Models.Metadata.Input.TiltKey).FromYesNo(),
|
||||
Players = item.GetFieldValue<long?>(Models.Metadata.Input.PlayersKey)?.ToString(),
|
||||
//ControlAttr = item.GetFieldValue<string?>(Models.Metadata.Input.ControlKey),
|
||||
Buttons = item.GetFieldValue<long?>(Models.Metadata.Input.ButtonsKey)?.ToString(),
|
||||
Coins = item.GetFieldValue<long?>(Models.Metadata.Input.CoinsKey)?.ToString(),
|
||||
};
|
||||
|
||||
var controls = new List<Models.Listxml.Control>();
|
||||
foreach (var controlItem in item.Controls ?? [])
|
||||
foreach (var controlItem in item.GetFieldValue<Control[]?>(Models.Metadata.Input.ControlKey) ?? [])
|
||||
{
|
||||
var control = CreateControl(controlItem);
|
||||
controls.Add(control);
|
||||
@@ -583,18 +580,18 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var control = new Models.Listxml.Control
|
||||
{
|
||||
Type = item.ControlType.AsStringValue<ControlType>(),
|
||||
Player = item.Player?.ToString(),
|
||||
Buttons = item.Buttons?.ToString(),
|
||||
ReqButtons = item.RequiredButtons?.ToString(),
|
||||
Minimum = item.Minimum?.ToString(),
|
||||
Maximum = item.Maximum?.ToString(),
|
||||
Sensitivity = item.Sensitivity?.ToString(),
|
||||
KeyDelta = item.KeyDelta?.ToString(),
|
||||
Reverse = item.Reverse.FromYesNo(),
|
||||
Ways = item.Ways,
|
||||
Ways2 = item.Ways2,
|
||||
Ways3 = item.Ways3,
|
||||
Type = item.GetFieldValue<ControlType>(Models.Metadata.Control.ControlTypeKey).AsStringValue<ControlType>(),
|
||||
Player = item.GetFieldValue<long?>(Models.Metadata.Control.PlayerKey)?.ToString(),
|
||||
Buttons = item.GetFieldValue<long?>(Models.Metadata.Control.ButtonsKey)?.ToString(),
|
||||
ReqButtons = item.GetFieldValue<long?>(Models.Metadata.Control.ReqButtonsKey)?.ToString(),
|
||||
Minimum = item.GetFieldValue<long?>(Models.Metadata.Control.MinimumKey)?.ToString(),
|
||||
Maximum = item.GetFieldValue<long?>(Models.Metadata.Control.MaximumKey)?.ToString(),
|
||||
Sensitivity = item.GetFieldValue<long?>(Models.Metadata.Control.SensitivityKey)?.ToString(),
|
||||
KeyDelta = item.GetFieldValue<long?>(Models.Metadata.Control.KeyDeltaKey)?.ToString(),
|
||||
Reverse = item.GetFieldValue<bool?>(Models.Metadata.Control.ReverseKey).FromYesNo(),
|
||||
Ways = item.GetFieldValue<string?>(Models.Metadata.Control.WaysKey),
|
||||
Ways2 = item.GetFieldValue<string?>(Models.Metadata.Control.Ways2Key),
|
||||
Ways3 = item.GetFieldValue<string?>(Models.Metadata.Control.Ways3Key),
|
||||
};
|
||||
|
||||
return control;
|
||||
@@ -608,25 +605,25 @@ namespace SabreTools.DatFiles.Formats
|
||||
var dipswitch = new Models.Listxml.DipSwitch
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Tag = item.Tag,
|
||||
Mask = item.Mask,
|
||||
Tag = item.GetFieldValue<string?>(Models.Metadata.DipSwitch.TagKey),
|
||||
Mask = item.GetFieldValue<string?>(Models.Metadata.DipSwitch.MaskKey),
|
||||
};
|
||||
|
||||
if (item.ConditionsSpecified)
|
||||
{
|
||||
var conditionItem = item.Conditions?.FirstOrDefault();
|
||||
var conditionItem = item.GetFieldValue<Condition[]?>(Models.Metadata.DipSwitch.ConditionKey)?.FirstOrDefault();
|
||||
var condition = new Models.Listxml.Condition
|
||||
{
|
||||
Tag = conditionItem?.Tag,
|
||||
Mask = conditionItem?.Mask,
|
||||
Relation = conditionItem?.Relation.AsStringValue<Relation>(),
|
||||
Value = conditionItem?.Value,
|
||||
Tag = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.TagKey),
|
||||
Mask = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.MaskKey),
|
||||
Relation = conditionItem?.GetFieldValue<Relation>(Models.Metadata.Condition.RelationKey).AsStringValue<Relation>(),
|
||||
Value = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.ValueKey),
|
||||
};
|
||||
dipswitch.Condition = condition;
|
||||
}
|
||||
|
||||
var diplocations = new List<Models.Listxml.DipLocation>();
|
||||
foreach (var locationItem in item.Locations ?? [])
|
||||
foreach (var locationItem in item.GetFieldValue<DipLocation[]?>(Models.Metadata.DipSwitch.DipLocationKey) ?? [])
|
||||
{
|
||||
var control = CreateDipLocation(locationItem);
|
||||
diplocations.Add(control);
|
||||
@@ -636,7 +633,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
dipswitch.DipLocation = [.. diplocations];
|
||||
|
||||
var dipvalues = new List<Models.Listxml.DipValue>();
|
||||
foreach (var dipValueItem in item.Values ?? [])
|
||||
foreach (var dipValueItem in item.GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey) ?? [])
|
||||
{
|
||||
var dipvalue = CreateDipValue(dipValueItem);
|
||||
dipvalues.Add(dipvalue);
|
||||
@@ -656,8 +653,8 @@ namespace SabreTools.DatFiles.Formats
|
||||
var diplocation = new Models.Listxml.DipLocation
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Number = item.Number?.ToString(),
|
||||
Inverted = item.Inverted.FromYesNo(),
|
||||
Number = item.GetFieldValue<long?>(Models.Metadata.DipLocation.NumberKey)?.ToString(),
|
||||
Inverted = item.GetFieldValue<bool?>(Models.Metadata.DipLocation.InvertedKey).FromYesNo(),
|
||||
};
|
||||
|
||||
return diplocation;
|
||||
@@ -671,19 +668,19 @@ namespace SabreTools.DatFiles.Formats
|
||||
var dipvalue = new Models.Listxml.DipValue
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Value = item.Value,
|
||||
Default = item.Default.FromYesNo(),
|
||||
Value = item.GetFieldValue<string?>(Models.Metadata.DipValue.ValueKey),
|
||||
Default = item.GetFieldValue<bool?>(Models.Metadata.DipValue.DefaultKey).FromYesNo(),
|
||||
};
|
||||
|
||||
if (item.ConditionsSpecified)
|
||||
{
|
||||
var conditionItem = item.Conditions?.FirstOrDefault();
|
||||
var conditionItem = item.GetFieldValue<Condition[]?>(Models.Metadata.DipValue.ConditionKey)?.FirstOrDefault();
|
||||
var condition = new Models.Listxml.Condition
|
||||
{
|
||||
Tag = conditionItem?.Tag,
|
||||
Mask = conditionItem?.Mask,
|
||||
Relation = conditionItem?.Relation.AsStringValue<Relation>(),
|
||||
Value = conditionItem?.Value,
|
||||
Tag = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.TagKey),
|
||||
Mask = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.MaskKey),
|
||||
Relation = conditionItem?.GetFieldValue<Relation>(Models.Metadata.Condition.RelationKey).AsStringValue<Relation>(),
|
||||
Value = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.ValueKey),
|
||||
};
|
||||
dipvalue.Condition = condition;
|
||||
}
|
||||
@@ -699,25 +696,25 @@ namespace SabreTools.DatFiles.Formats
|
||||
var configuration = new Models.Listxml.Configuration
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Tag = item.Tag,
|
||||
Mask = item.Mask,
|
||||
Tag = item.GetFieldValue<string>(Models.Metadata.Configuration.TagKey),
|
||||
Mask = item.GetFieldValue<string>(Models.Metadata.Configuration.MaskKey),
|
||||
};
|
||||
|
||||
if (item.ConditionsSpecified)
|
||||
{
|
||||
var conditionItem = item.Conditions?.FirstOrDefault();
|
||||
var conditionItem = item.GetFieldValue<Condition[]?>(Models.Metadata.Configuration.ConditionKey)?.FirstOrDefault();
|
||||
var condition = new Models.Listxml.Condition
|
||||
{
|
||||
Tag = conditionItem?.Tag,
|
||||
Mask = conditionItem?.Mask,
|
||||
Relation = conditionItem?.Relation.AsStringValue<Relation>(),
|
||||
Value = conditionItem?.Value,
|
||||
Tag = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.TagKey),
|
||||
Mask = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.MaskKey),
|
||||
Relation = conditionItem?.GetFieldValue<Relation>(Models.Metadata.Condition.RelationKey).AsStringValue<Relation>(),
|
||||
Value = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.ValueKey),
|
||||
};
|
||||
configuration.Condition = condition;
|
||||
}
|
||||
|
||||
var confLocations = new List<Models.Listxml.ConfLocation>();
|
||||
foreach (var location in item.Locations ?? [])
|
||||
foreach (var location in item.GetFieldValue<ConfLocation[]?>(Models.Metadata.Configuration.ConfLocationKey) ?? [])
|
||||
{
|
||||
var control = CreateConfLocation(location);
|
||||
confLocations.Add(control);
|
||||
@@ -727,7 +724,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
configuration.ConfLocation = [.. confLocations];
|
||||
|
||||
var confsettings = new List<Models.Listxml.ConfSetting>();
|
||||
foreach (var confSettingItem in item.Settings ?? [])
|
||||
foreach (var confSettingItem in item.GetFieldValue<ConfSetting[]?>(Models.Metadata.Configuration.ConfSettingKey) ?? [])
|
||||
{
|
||||
var dipvalue = CreateConfSetting(confSettingItem);
|
||||
confsettings.Add(dipvalue);
|
||||
@@ -747,8 +744,8 @@ namespace SabreTools.DatFiles.Formats
|
||||
var conflocation = new Models.Listxml.ConfLocation
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Number = item.Number?.ToString(),
|
||||
Inverted = item.Inverted.FromYesNo(),
|
||||
Number = item.GetFieldValue<long?>(Models.Metadata.ConfLocation.NumberKey)?.ToString(),
|
||||
Inverted = item.GetFieldValue<bool?>(Models.Metadata.ConfLocation.InvertedKey).FromYesNo(),
|
||||
};
|
||||
|
||||
return conflocation;
|
||||
@@ -762,19 +759,19 @@ namespace SabreTools.DatFiles.Formats
|
||||
var confsetting = new Models.Listxml.ConfSetting
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Value = item.Value,
|
||||
Default = item.Default.FromYesNo(),
|
||||
Value = item.GetFieldValue<string?>(Models.Metadata.ConfSetting.ValueKey),
|
||||
Default = item.GetFieldValue<bool?>(Models.Metadata.ConfSetting.DefaultKey).FromYesNo(),
|
||||
};
|
||||
|
||||
if (item.ConditionsSpecified)
|
||||
{
|
||||
var conditionItem = item.Conditions?.FirstOrDefault();
|
||||
var conditionItem = item.GetFieldValue<Condition[]?>(Models.Metadata.ConfSetting.ConditionKey)?.FirstOrDefault();
|
||||
var condition = new Models.Listxml.Condition
|
||||
{
|
||||
Tag = conditionItem?.Tag,
|
||||
Mask = conditionItem?.Mask,
|
||||
Relation = conditionItem?.Relation.AsStringValue<Relation>(),
|
||||
Value = conditionItem?.Value,
|
||||
Tag = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.TagKey),
|
||||
Mask = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.MaskKey),
|
||||
Relation = conditionItem?.GetFieldValue<Relation>(Models.Metadata.Condition.RelationKey).AsStringValue<Relation>(),
|
||||
Value = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.ValueKey),
|
||||
};
|
||||
confsetting.Condition = condition;
|
||||
}
|
||||
@@ -789,7 +786,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var port = new Models.Listxml.Port
|
||||
{
|
||||
Tag = item.Tag,
|
||||
Tag = item.GetFieldValue<string>(Models.Metadata.Port.TagKey),
|
||||
};
|
||||
|
||||
return port;
|
||||
@@ -811,10 +808,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
var conditionItem = item.GetFieldValue<Condition[]?>(Models.Metadata.Adjuster.ConditionKey)?.FirstOrDefault();
|
||||
var condition = new Models.Listxml.Condition
|
||||
{
|
||||
Tag = conditionItem?.Tag,
|
||||
Mask = conditionItem?.Mask,
|
||||
Relation = conditionItem?.Relation.AsStringValue<Relation>(),
|
||||
Value = conditionItem?.Value,
|
||||
Tag = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.TagKey),
|
||||
Mask = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.MaskKey),
|
||||
Relation = conditionItem?.GetFieldValue<Relation>(Models.Metadata.Condition.RelationKey).AsStringValue<Relation>(),
|
||||
Value = conditionItem?.GetFieldValue<string?>(Models.Metadata.Condition.ValueKey),
|
||||
};
|
||||
adjuster.Condition = condition;
|
||||
}
|
||||
@@ -829,17 +826,17 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var driver = new Models.Listxml.Driver
|
||||
{
|
||||
Status = item.Status.AsStringValue<SupportStatus>(),
|
||||
//Color = item.Color.AsStringValue<SupportStatus>(), // TODO: Add to internal model
|
||||
//Sound = item.Sound.AsStringValue<SupportStatus>(), // TODO: Add to internal model
|
||||
//PaletteSize = driver.PaletteSize?.ToString(), // TODO: Add to internal model
|
||||
Emulation = item.Emulation.AsStringValue<SupportStatus>(),
|
||||
Cocktail = item.Cocktail.AsStringValue<SupportStatus>(),
|
||||
SaveState = item.SaveState.AsStringValue<Supported>(useSecond: true),
|
||||
RequiresArtwork = item.RequiresArtwork.FromYesNo(),
|
||||
Unofficial = item.Unofficial.FromYesNo(),
|
||||
NoSoundHardware = item.NoSoundHardware.FromYesNo(),
|
||||
Incomplete = item.Incomplete.FromYesNo(),
|
||||
Status = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey).AsStringValue<SupportStatus>(),
|
||||
Color = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.ColorKey).AsStringValue<SupportStatus>(),
|
||||
Sound = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.SoundKey).AsStringValue<SupportStatus>(),
|
||||
PaletteSize = item.GetFieldValue<long?>(Models.Metadata.Driver.PaletteSizeKey)?.ToString(),
|
||||
Emulation = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.EmulationKey).AsStringValue<SupportStatus>(),
|
||||
Cocktail = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.CocktailKey).AsStringValue<SupportStatus>(),
|
||||
SaveState = item.GetFieldValue<Supported>(Models.Metadata.Driver.SaveStateKey).AsStringValue<Supported>(useSecond: true),
|
||||
RequiresArtwork = item.GetFieldValue<bool?>(Models.Metadata.Driver.RequiresArtworkKey).FromYesNo(),
|
||||
Unofficial = item.GetFieldValue<bool?>(Models.Metadata.Driver.UnofficialKey).FromYesNo(),
|
||||
NoSoundHardware = item.GetFieldValue<bool?>(Models.Metadata.Driver.NoSoundHardwareKey).FromYesNo(),
|
||||
Incomplete = item.GetFieldValue<bool?>(Models.Metadata.Driver.IncompleteKey).FromYesNo(),
|
||||
};
|
||||
|
||||
return driver;
|
||||
@@ -852,9 +849,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var feature = new Models.Listxml.Feature
|
||||
{
|
||||
Type = item.Type.AsStringValue<FeatureType>(),
|
||||
Status = item.Status.AsStringValue<FeatureStatus>(),
|
||||
Overall = item.Overall.AsStringValue<FeatureStatus>(),
|
||||
Type = item.GetFieldValue<FeatureType>(Models.Metadata.Feature.FeatureTypeKey).AsStringValue<FeatureType>(),
|
||||
Status = item.GetFieldValue<FeatureStatus>(Models.Metadata.Feature.StatusKey).AsStringValue<FeatureStatus>(),
|
||||
Overall = item.GetFieldValue<FeatureStatus>(Models.Metadata.Feature.OverallKey).AsStringValue<FeatureStatus>(),
|
||||
};
|
||||
|
||||
return feature;
|
||||
@@ -867,26 +864,26 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var device = new Models.Listxml.Device
|
||||
{
|
||||
Type = item.DeviceType.AsStringValue<DeviceType>(),
|
||||
Tag = item.Tag,
|
||||
FixedImage = item.FixedImage,
|
||||
Mandatory = item.Mandatory?.ToString(),
|
||||
Interface = item.Interface,
|
||||
Type = item.GetFieldValue<DeviceType>(Models.Metadata.Device.DeviceTypeKey).AsStringValue<DeviceType>(),
|
||||
Tag = item.GetFieldValue<string?>(Models.Metadata.Device.TagKey),
|
||||
FixedImage = item.GetFieldValue<string?>(Models.Metadata.Device.FixedImageKey),
|
||||
Mandatory = item.GetFieldValue<long?>(Models.Metadata.Device.MandatoryKey)?.ToString(),
|
||||
Interface = item.GetFieldValue<string?>(Models.Metadata.Device.InterfaceKey),
|
||||
};
|
||||
|
||||
if (item.InstancesSpecified)
|
||||
{
|
||||
var instanceItem = item.Instances?.FirstOrDefault();
|
||||
var instanceItem = item.GetFieldValue<Instance[]?>(Models.Metadata.Device.InstanceKey)?.FirstOrDefault();
|
||||
var instance = new Models.Listxml.Instance
|
||||
{
|
||||
Name = instanceItem?.GetName(),
|
||||
BriefName = instanceItem?.BriefName,
|
||||
BriefName = instanceItem?.GetFieldValue<string?>(Models.Metadata.Instance.BriefNameKey),
|
||||
};
|
||||
device.Instance = instance;
|
||||
}
|
||||
|
||||
var extensions = new List<Models.Listxml.Extension>();
|
||||
foreach (var extensionItem in item.Extensions ?? [])
|
||||
foreach (var extensionItem in item.GetFieldValue<Extension[]?>(Models.Metadata.Device.ExtensionKey) ?? [])
|
||||
{
|
||||
var extension = new Models.Listxml.Extension
|
||||
{
|
||||
@@ -912,13 +909,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
};
|
||||
|
||||
var slotoptions = new List<Models.Listxml.SlotOption>();
|
||||
foreach (var slotoptionItem in item.SlotOptions ?? [])
|
||||
foreach (var slotoptionItem in item.GetFieldValue<SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey) ?? [])
|
||||
{
|
||||
var slotoption = new Models.Listxml.SlotOption
|
||||
{
|
||||
Name = slotoptionItem.GetName(),
|
||||
DevName = slotoptionItem.DeviceName,
|
||||
Default = slotoptionItem.Default.FromYesNo(),
|
||||
DevName = slotoptionItem.GetFieldValue<string?>(Models.Metadata.SlotOption.DevNameKey),
|
||||
Default = slotoptionItem.GetFieldValue<bool?>(Models.Metadata.SlotOption.DefaultKey).FromYesNo(),
|
||||
};
|
||||
slotoptions.Add(slotoption);
|
||||
}
|
||||
@@ -936,10 +933,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var softwarelist = new Models.Listxml.SoftwareList
|
||||
{
|
||||
Tag = item.Tag,
|
||||
Tag = item.GetFieldValue<string?>(Models.Metadata.SoftwareList.TagKey),
|
||||
Name = item.GetName(),
|
||||
Status = item.Status.AsStringValue<SoftwareListStatus>(),
|
||||
Filter = item.Filter,
|
||||
Status = item.GetFieldValue<SoftwareListStatus>(Models.Metadata.SoftwareList.StatusKey).AsStringValue<SoftwareListStatus>(),
|
||||
Filter = item.GetFieldValue<string?>(Models.Metadata.SoftwareList.FilterKey),
|
||||
};
|
||||
|
||||
return softwarelist;
|
||||
@@ -953,8 +950,8 @@ namespace SabreTools.DatFiles.Formats
|
||||
var softwarelist = new Models.Listxml.RamOption
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Default = item.Default.FromYesNo(),
|
||||
Content = item.Content,
|
||||
Default = item.GetFieldValue<bool?>(Models.Metadata.RamOption.DefaultKey).FromYesNo(),
|
||||
Content = item.GetFieldValue<string?>(Models.Metadata.RamOption.ContentKey),
|
||||
};
|
||||
|
||||
return softwarelist;
|
||||
|
||||
@@ -316,14 +316,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Release
|
||||
{
|
||||
Region = release.Region,
|
||||
Language = release.Language,
|
||||
Date = release.Date,
|
||||
Default = release.Default?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(release.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Release.DateKey, release.Date);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Release.DefaultKey, release.Default?.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Release.LanguageKey, release.Language);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Release.RegionKey, release.Region);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -350,12 +349,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new BiosSet
|
||||
{
|
||||
Description = biosset.Description,
|
||||
Default = biosset.Default?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(biosset.Name);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.BiosSet.DefaultKey, biosset.Default?.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey, biosset.Description);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -382,27 +380,26 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Rom
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(rom.Size),
|
||||
CRC = rom.CRC,
|
||||
MD5 = rom.MD5,
|
||||
SHA1 = rom.SHA1,
|
||||
SHA256 = rom.SHA256,
|
||||
SHA384 = rom.SHA384,
|
||||
SHA512 = rom.SHA512,
|
||||
SpamSum = rom.SpamSum,
|
||||
//xxHash364 = rom.xxHash364, // TODO: Add to internal model
|
||||
//xxHash3128 = rom.xxHash3128, // TODO: Add to internal model
|
||||
MergeTag = rom.Merge,
|
||||
ItemStatus = rom.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL,
|
||||
//Serial = rom.Serial, // TODO: Add to internal model
|
||||
//Header = rom.Header, // TODO: Add to internal model
|
||||
Date = rom.Date,
|
||||
Inverted = rom.Inverted?.AsYesNo(),
|
||||
MIA = rom.MIA?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(rom.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, rom.CRC);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.DateKey, rom.Date);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.HeaderKey, rom.Header);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Rom.InvertedKey, rom.Inverted?.AsYesNo());
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Rom.MIAKey, rom.MIA?.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, rom.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.MergeKey, rom.Merge);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SerialKey, rom.Serial);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.SHA1);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, rom.SHA256);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, rom.SHA384);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, rom.SHA512);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(rom.Size));
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, rom.SpamSum);
|
||||
item.SetFieldValue<ItemStatus?>(Models.Metadata.Rom.StatusKey, rom.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.xxHash364Key, rom.xxHash364);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.xxHash3128Key, rom.xxHash3128);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -429,14 +426,14 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Disk
|
||||
{
|
||||
MD5 = disk.MD5,
|
||||
SHA1 = disk.SHA1,
|
||||
MergeTag = disk.Merge,
|
||||
ItemStatus = disk.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(disk.Name);
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, disk.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, disk.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.MergeKey, disk.Merge);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.RegionKey, disk.Region);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, disk.SHA1);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -463,14 +460,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Media
|
||||
{
|
||||
MD5 = medium.MD5,
|
||||
SHA1 = medium.SHA1,
|
||||
SHA256 = medium.SHA256,
|
||||
SpamSum = medium.SpamSum,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(medium.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.MD5Key, medium.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SHA1Key, medium.SHA1);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SHA256Key, medium.SHA256);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SpamSumKey, medium.SpamSum);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -582,17 +578,16 @@ namespace SabreTools.DatFiles.Formats
|
||||
containsItems = true;
|
||||
var item = new Driver
|
||||
{
|
||||
Status = driver.Status?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL,
|
||||
Emulation = driver.Emulation?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL,
|
||||
Cocktail = driver.Cocktail?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL,
|
||||
SaveState = driver.SaveState?.AsEnumValue<Supported>() ?? Supported.NULL,
|
||||
RequiresArtwork = driver.RequiresArtwork?.AsYesNo(),
|
||||
Unofficial = driver.Unofficial?.AsYesNo(),
|
||||
NoSoundHardware = driver.NoSoundHardware?.AsYesNo(),
|
||||
Incomplete = driver.Incomplete?.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.CocktailKey, driver.Cocktail?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.EmulationKey, driver.Emulation?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Driver.IncompleteKey, driver.Incomplete.AsYesNo());
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Driver.NoSoundHardwareKey, driver.NoSoundHardware.AsYesNo());
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Driver.RequiresArtworkKey, driver.RequiresArtwork.AsYesNo());
|
||||
item.SetFieldValue<Supported>(Models.Metadata.Driver.SaveStateKey, driver.SaveState?.AsEnumValue<Supported>() ?? Supported.NULL);
|
||||
item.SetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey, driver.Status?.AsEnumValue<SupportStatus>() ?? SupportStatus.NULL);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Driver.UnofficialKey, driver.Unofficial.AsYesNo());
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -618,13 +613,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new DatItems.Formats.SoftwareList
|
||||
{
|
||||
Tag = softwarelist.Tag,
|
||||
Status = softwarelist.Status?.AsEnumValue<SoftwareListStatus>() ?? SoftwareListStatus.None,
|
||||
Filter = softwarelist.Filter,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(softwarelist.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.SoftwareList.FilterKey, softwarelist.Filter);
|
||||
item.SetFieldValue<SoftwareListStatus>(Models.Metadata.SoftwareList.StatusKey, softwarelist.Status.AsEnumValue<SoftwareListStatus>());
|
||||
item.SetFieldValue<string?>(Models.Metadata.SoftwareList.TagKey, softwarelist.Tag);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
|
||||
@@ -37,29 +37,29 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Release release:
|
||||
if (string.IsNullOrEmpty(release.GetName()))
|
||||
missingFields.Add(Models.Metadata.Release.NameKey);
|
||||
if (string.IsNullOrEmpty(release.Region))
|
||||
if (string.IsNullOrEmpty(release.GetFieldValue<string?>(Models.Metadata.Release.RegionKey)))
|
||||
missingFields.Add(Models.Metadata.Release.RegionKey);
|
||||
break;
|
||||
|
||||
case BiosSet biosset:
|
||||
if (string.IsNullOrEmpty(biosset.GetName()))
|
||||
missingFields.Add(Models.Metadata.BiosSet.NameKey);
|
||||
if (string.IsNullOrEmpty(biosset.Description))
|
||||
if (string.IsNullOrEmpty(biosset.GetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey)))
|
||||
missingFields.Add(Models.Metadata.BiosSet.DescriptionKey);
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.GetName()))
|
||||
missingFields.Add(Models.Metadata.Rom.NameKey);
|
||||
if (rom.Size == null || rom.Size < 0)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) < 0)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
if (string.IsNullOrEmpty(rom.CRC)
|
||||
&& string.IsNullOrEmpty(rom.MD5)
|
||||
&& string.IsNullOrEmpty(rom.SHA1)
|
||||
&& string.IsNullOrEmpty(rom.SHA256)
|
||||
&& string.IsNullOrEmpty(rom.SHA384)
|
||||
&& string.IsNullOrEmpty(rom.SHA512)
|
||||
&& string.IsNullOrEmpty(rom.SpamSum))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
}
|
||||
@@ -68,8 +68,8 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Disk disk:
|
||||
if (string.IsNullOrEmpty(disk.GetName()))
|
||||
missingFields.Add(Models.Metadata.Disk.NameKey);
|
||||
if (string.IsNullOrEmpty(disk.MD5)
|
||||
&& string.IsNullOrEmpty(disk.SHA1))
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key))
|
||||
&& string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Disk.SHA1Key);
|
||||
}
|
||||
@@ -78,10 +78,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
case Media media:
|
||||
if (string.IsNullOrEmpty(media.GetName()))
|
||||
missingFields.Add(Models.Metadata.Media.NameKey);
|
||||
if (string.IsNullOrEmpty(media.MD5)
|
||||
&& string.IsNullOrEmpty(media.SHA1)
|
||||
&& string.IsNullOrEmpty(media.SHA256)
|
||||
&& string.IsNullOrEmpty(media.SpamSum))
|
||||
if (string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key))
|
||||
&& string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key))
|
||||
&& string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key))
|
||||
&& string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Media.SHA1Key);
|
||||
}
|
||||
@@ -103,22 +103,22 @@ namespace SabreTools.DatFiles.Formats
|
||||
break;
|
||||
|
||||
case Driver driver:
|
||||
if (!driver.StatusSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.StatusKey);
|
||||
if (!driver.EmulationSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.EmulationKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.EmulationKey);
|
||||
if (!driver.CocktailSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.CocktailKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.CocktailKey);
|
||||
if (!driver.SaveStateSpecified)
|
||||
if (driver.GetFieldValue<SupportStatus>(Models.Metadata.Driver.SaveStateKey) == SupportStatus.NULL)
|
||||
missingFields.Add(Models.Metadata.Driver.SaveStateKey);
|
||||
break;
|
||||
|
||||
case DatItems.Formats.SoftwareList softwarelist:
|
||||
if (string.IsNullOrEmpty(softwarelist.Tag))
|
||||
if (string.IsNullOrEmpty(softwarelist.GetFieldValue<string?>(Models.Metadata.SoftwareList.TagKey)))
|
||||
missingFields.Add(Models.Metadata.SoftwareList.TagKey);
|
||||
if (string.IsNullOrEmpty(softwarelist.GetName()))
|
||||
missingFields.Add(Models.Metadata.SoftwareList.NameKey);
|
||||
if (!softwarelist.StatusSpecified)
|
||||
if (softwarelist.GetFieldValue<SoftwareListStatus?>(Models.Metadata.SoftwareList.StatusKey) == SoftwareListStatus.None)
|
||||
missingFields.Add(Models.Metadata.SoftwareList.StatusKey);
|
||||
break;
|
||||
}
|
||||
@@ -485,14 +485,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
var release = new Models.Logiqx.Release
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Region = item.Region,
|
||||
Language = item.Language,
|
||||
Date = item.Date,
|
||||
Region = item.GetFieldValue<string?>(Models.Metadata.Release.RegionKey),
|
||||
Language = item.GetFieldValue<string?>(Models.Metadata.Release.LanguageKey),
|
||||
Date = item.GetFieldValue<string?>(Models.Metadata.Release.DateKey),
|
||||
Default = item.GetFieldValue<bool?>(Models.Metadata.Release.DefaultKey).FromYesNo(),
|
||||
};
|
||||
|
||||
if (item.DefaultSpecified)
|
||||
release.Default = item.Default.FromYesNo();
|
||||
|
||||
return release;
|
||||
}
|
||||
|
||||
@@ -504,12 +502,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
var biosset = new Models.Logiqx.BiosSet
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Description = item.Description,
|
||||
Default = item.GetFieldValue<bool?>(Models.Metadata.BiosSet.DefaultKey).FromYesNo(),
|
||||
Description = item.GetFieldValue<string?>(Models.Metadata.BiosSet.DescriptionKey),
|
||||
};
|
||||
|
||||
if (item.DefaultSpecified)
|
||||
biosset.Default = item.Default.FromYesNo();
|
||||
|
||||
return biosset;
|
||||
}
|
||||
|
||||
@@ -521,28 +517,26 @@ namespace SabreTools.DatFiles.Formats
|
||||
var rom = new Models.Logiqx.Rom
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Size = item.Size?.ToString(),
|
||||
CRC = item.CRC,
|
||||
MD5 = item.MD5,
|
||||
SHA1 = item.SHA1,
|
||||
SHA256 = item.SHA256,
|
||||
SHA384 = item.SHA384,
|
||||
SHA512 = item.SHA512,
|
||||
SpamSum = item.SpamSum,
|
||||
//xxHash364 = item.xxHash364, // TODO: Add to internal model
|
||||
//xxHash3128 = item.xxHash3128, // TODO: Add to internal model
|
||||
Merge = item.MergeTag,
|
||||
//Serial = item.Serial, // TODO: Add to internal model
|
||||
//Header = item.Header, // TODO: Add to internal model
|
||||
Date = item.Date,
|
||||
Size = item.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
CRC = item.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
SHA256 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key),
|
||||
SHA384 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key),
|
||||
SHA512 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key),
|
||||
SpamSum = item.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey),
|
||||
xxHash364 = item.GetFieldValue<string?>(Models.Metadata.Rom.xxHash364Key),
|
||||
xxHash3128 = item.GetFieldValue<string?>(Models.Metadata.Rom.xxHash3128Key),
|
||||
Merge = item.GetFieldValue<string?>(Models.Metadata.Rom.MergeKey),
|
||||
Serial = item.GetFieldValue<string?>(Models.Metadata.Rom.SerialKey),
|
||||
Header = item.GetFieldValue<string?>(Models.Metadata.Rom.HeaderKey),
|
||||
Date = item.GetFieldValue<string?>(Models.Metadata.Rom.DateKey),
|
||||
Inverted = item.GetFieldValue<bool?>(Models.Metadata.Rom.InvertedKey).FromYesNo(),
|
||||
MIA = item.GetFieldValue<bool?>(Models.Metadata.Rom.MIAKey).FromYesNo(),
|
||||
};
|
||||
|
||||
if (item.ItemStatusSpecified)
|
||||
rom.Status = item.ItemStatus.AsStringValue<ItemStatus>(useSecond: false);
|
||||
if (item.InvertedSpecified)
|
||||
rom.Inverted = item.Inverted.FromYesNo();
|
||||
if (item.MIASpecified)
|
||||
rom.MIA = item.MIA.FromYesNo();
|
||||
rom.Status = item.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey).AsStringValue<ItemStatus>(useSecond: false);
|
||||
|
||||
return rom;
|
||||
}
|
||||
@@ -555,14 +549,14 @@ namespace SabreTools.DatFiles.Formats
|
||||
var disk = new Models.Logiqx.Disk
|
||||
{
|
||||
Name = item.GetName(),
|
||||
MD5 = item.MD5,
|
||||
SHA1 = item.SHA1,
|
||||
Merge = item.MergeTag,
|
||||
Region = item.Region,
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key),
|
||||
Merge = item.GetFieldValue<string?>(Models.Metadata.Disk.MergeKey),
|
||||
Region = item.GetFieldValue<string?>(Models.Metadata.Disk.RegionKey),
|
||||
};
|
||||
|
||||
if (item.ItemStatusSpecified)
|
||||
disk.Status = item.ItemStatus.AsStringValue<ItemStatus>(useSecond: false);
|
||||
if (item.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) != ItemStatus.NULL)
|
||||
disk.Status = item.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey).AsStringValue<ItemStatus>(useSecond: false);
|
||||
|
||||
return disk;
|
||||
}
|
||||
@@ -575,10 +569,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
var media = new Models.Logiqx.Media
|
||||
{
|
||||
Name = item.GetName(),
|
||||
MD5 = item.MD5,
|
||||
SHA1 = item.SHA1,
|
||||
SHA256 = item.SHA256,
|
||||
SpamSum = item.SpamSum,
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Media.MD5Key),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key),
|
||||
SHA256 = item.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key),
|
||||
SpamSum = item.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey),
|
||||
};
|
||||
return media;
|
||||
}
|
||||
@@ -626,21 +620,16 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var driver = new Models.Logiqx.Driver
|
||||
{
|
||||
Status = item.Status.AsStringValue<SupportStatus>(),
|
||||
Emulation = item.Emulation.AsStringValue<SupportStatus>(),
|
||||
Cocktail = item.Cocktail.AsStringValue<SupportStatus>(),
|
||||
SaveState = item.SaveState.AsStringValue<Supported>(useSecond: true),
|
||||
Status = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.StatusKey).AsStringValue<SupportStatus>(),
|
||||
Emulation = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.EmulationKey).AsStringValue<SupportStatus>(),
|
||||
Cocktail = item.GetFieldValue<SupportStatus>(Models.Metadata.Driver.CocktailKey).AsStringValue<SupportStatus>(),
|
||||
SaveState = item.GetFieldValue<Supported>(Models.Metadata.Driver.SaveStateKey).AsStringValue<Supported>(useSecond: true),
|
||||
RequiresArtwork = item.GetFieldValue<bool?>(Models.Metadata.Driver.RequiresArtworkKey).FromYesNo(),
|
||||
Unofficial = item.GetFieldValue<bool?>(Models.Metadata.Driver.UnofficialKey).FromYesNo(),
|
||||
NoSoundHardware = item.GetFieldValue<bool?>(Models.Metadata.Driver.NoSoundHardwareKey).FromYesNo(),
|
||||
Incomplete = item.GetFieldValue<bool?>(Models.Metadata.Driver.IncompleteKey).FromYesNo(),
|
||||
};
|
||||
|
||||
if (item.RequiresArtworkSpecified)
|
||||
driver.RequiresArtwork = item.RequiresArtwork.FromYesNo();
|
||||
if (item.UnofficialSpecified)
|
||||
driver.Unofficial = item.Unofficial.FromYesNo();
|
||||
if (item.NoSoundHardwareSpecified)
|
||||
driver.NoSoundHardware = item.NoSoundHardware.FromYesNo();
|
||||
if (item.IncompleteSpecified)
|
||||
driver.Incomplete = item.Incomplete.FromYesNo();
|
||||
|
||||
return driver;
|
||||
}
|
||||
|
||||
@@ -651,13 +640,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var softwarelist = new Models.Logiqx.SoftwareList
|
||||
{
|
||||
Tag = item.Tag,
|
||||
Tag = item.GetFieldValue<string?>(Models.Metadata.SoftwareList.TagKey),
|
||||
Name = item.GetName(),
|
||||
Filter = item.Filter,
|
||||
Filter = item.GetFieldValue<string?>(Models.Metadata.SoftwareList.FilterKey),
|
||||
};
|
||||
|
||||
if (item.StatusSpecified)
|
||||
softwarelist.Status = item.Status.AsStringValue<SoftwareListStatus>();
|
||||
if (item.GetFieldValue<SoftwareListStatus?>(Models.Metadata.SoftwareList.StatusKey) != SoftwareListStatus.None)
|
||||
softwarelist.Status = item.GetFieldValue<SoftwareListStatus>(Models.Metadata.SoftwareList.StatusKey).AsStringValue<SoftwareListStatus>();
|
||||
|
||||
return softwarelist;
|
||||
}
|
||||
|
||||
@@ -366,13 +366,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
|
||||
var item = new Rom
|
||||
{
|
||||
Size = size,
|
||||
CRC = crc.Content,
|
||||
ItemStatus = ItemStatus.None,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, crc.Content);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, size);
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
|
||||
@@ -33,9 +33,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (rom.Size == null || rom.Size < 0)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) < 0)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
if (string.IsNullOrEmpty(rom.CRC))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)))
|
||||
missingFields.Add(Models.Metadata.Rom.CRCKey);
|
||||
break;
|
||||
}
|
||||
@@ -388,7 +388,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var romCRC = new Models.OfflineList.FileRomCRC
|
||||
{
|
||||
Content = item.CRC,
|
||||
Content = item.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
};
|
||||
|
||||
return romCRC;
|
||||
|
||||
@@ -139,34 +139,33 @@ namespace SabreTools.DatFiles.Formats
|
||||
string name = $"{machine.Name}_{index++}{(!string.IsNullOrEmpty(rom.Remark) ? $" {rom.Remark}" : string.Empty)}";
|
||||
var item = new Rom
|
||||
{
|
||||
Offset = dump.Rom?.Start,
|
||||
OpenMSXType = rom.Type,
|
||||
SHA1 = rom.Hash,
|
||||
Remark = rom.Remark,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.OffsetKey, dump.Rom?.Start);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.OpenMSXType, rom.Type);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.RemarkKey, rom.Remark);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.Hash);
|
||||
|
||||
if (dump.Original != null)
|
||||
{
|
||||
item.Original = new Original
|
||||
item.SetFieldValue<Original?>("ORIGINAL", new Original
|
||||
{
|
||||
Value = dump.Original.Value.AsYesNo(),
|
||||
Content = dump.Original.Content,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
switch (dump.Rom)
|
||||
{
|
||||
case Models.OpenMSX.Rom:
|
||||
item.OpenMSXSubType = OpenMSXSubType.Rom;
|
||||
item.SetFieldValue<OpenMSXSubType>(Models.Metadata.Rom.OpenMSXMediaType, OpenMSXSubType.Rom);
|
||||
break;
|
||||
case Models.OpenMSX.MegaRom:
|
||||
item.OpenMSXSubType = OpenMSXSubType.MegaRom;
|
||||
item.SetFieldValue<OpenMSXSubType>(Models.Metadata.Rom.OpenMSXMediaType, OpenMSXSubType.MegaRom);
|
||||
break;
|
||||
case Models.OpenMSX.SCCPlusCart:
|
||||
item.OpenMSXSubType = OpenMSXSubType.SCCPlusCart;
|
||||
item.SetFieldValue<OpenMSXSubType>(Models.Metadata.Rom.OpenMSXMediaType, OpenMSXSubType.SCCPlusCart);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.SHA1))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)))
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
break;
|
||||
}
|
||||
@@ -151,24 +151,24 @@ namespace SabreTools.DatFiles.Formats
|
||||
private static Models.OpenMSX.Dump CreateDump(Rom item)
|
||||
{
|
||||
Models.OpenMSX.Original? original = null;
|
||||
if (item.OriginalSpecified && item.Original != null)
|
||||
if (item.OriginalSpecified && item.GetFieldValue<Original?>("ORIGINAL") != null)
|
||||
{
|
||||
original = new Models.OpenMSX.Original { Content = item.Original.Content };
|
||||
if (item.Original.Value != null)
|
||||
original.Value = item.Original.Value.ToString();
|
||||
original = new Models.OpenMSX.Original { Content = item.GetFieldValue<Original?>("ORIGINAL")!.Content };
|
||||
if (item.GetFieldValue<Original?>("ORIGINAL")!.Value != null)
|
||||
original.Value = item.GetFieldValue<Original?>("ORIGINAL")!.Value.ToString();
|
||||
}
|
||||
|
||||
Models.OpenMSX.RomBase rom = item.OpenMSXSubType switch
|
||||
Models.OpenMSX.RomBase rom = item.GetFieldValue<OpenMSXSubType>(Models.Metadata.Rom.OpenMSXMediaType) switch
|
||||
{
|
||||
OpenMSXSubType.MegaRom => new Models.OpenMSX.MegaRom(),
|
||||
OpenMSXSubType.SCCPlusCart => new Models.OpenMSX.SCCPlusCart(),
|
||||
_ => new Models.OpenMSX.Rom(),
|
||||
};
|
||||
|
||||
rom.Start = item.Offset;
|
||||
rom.Type = item.OpenMSXType;
|
||||
rom.Hash = item.SHA1;
|
||||
rom.Remark = item.Remark;
|
||||
rom.Start = item.GetFieldValue<string?>(Models.Metadata.Rom.OffsetKey);
|
||||
rom.Type = item.GetFieldValue<string?>(Models.Metadata.Rom.OpenMSXType);
|
||||
rom.Hash = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key);
|
||||
rom.Remark = item.GetFieldValue<string?>(Models.Metadata.Rom.RemarkKey);
|
||||
|
||||
var dump = new Models.OpenMSX.Dump
|
||||
{
|
||||
|
||||
@@ -107,27 +107,27 @@ namespace SabreTools.DatFiles.Formats
|
||||
|
||||
foreach (var rom in games.Rom)
|
||||
{
|
||||
var 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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,9 +33,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem)
|
||||
{
|
||||
case Rom rom:
|
||||
if (string.IsNullOrEmpty(rom.CRC))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)))
|
||||
missingFields.Add(Models.Metadata.Rom.CRCKey);
|
||||
if (!rom.SizeSpecified)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
break;
|
||||
}
|
||||
@@ -188,10 +188,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
GameName = item.Machine.Name,
|
||||
GameDescription = item.Machine.Description,
|
||||
RomName = item.GetName(),
|
||||
RomCRC = item.CRC,
|
||||
RomSize = item.Size?.ToString(),
|
||||
RomCRC = item.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
RomSize = item.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
RomOf = item.Machine.RomOf,
|
||||
MergeName = item.MergeTag,
|
||||
MergeName = item.GetFieldValue<string?>(Models.Metadata.Rom.MergeKey),
|
||||
};
|
||||
return rom;
|
||||
}
|
||||
|
||||
@@ -84,43 +84,40 @@ namespace SabreTools.DatFiles.Formats
|
||||
case ItemType.Disk:
|
||||
item = new Disk
|
||||
{
|
||||
MD5 = row.MD5,
|
||||
SHA1 = row.SHA1,
|
||||
ItemStatus = row.Status.AsEnumValue<ItemStatus>(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(row.DiskName);
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, row.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, row.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, row.SHA1);
|
||||
break;
|
||||
|
||||
case ItemType.Media:
|
||||
item = new Media
|
||||
{
|
||||
MD5 = row.MD5,
|
||||
SHA1 = row.SHA1,
|
||||
SHA256 = row.SHA256,
|
||||
SpamSum = row.SpamSum,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(row.DiskName);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.MD5Key, row.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SHA1Key, row.SHA1);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SHA256Key, row.SHA256);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Media.SpamSumKey, row.SpamSum);
|
||||
break;
|
||||
|
||||
case ItemType.Rom:
|
||||
item = new Rom
|
||||
{
|
||||
CRC = row.CRC,
|
||||
MD5 = row.MD5,
|
||||
SHA1 = row.SHA1,
|
||||
SHA256 = row.SHA256,
|
||||
SHA384 = row.SHA384,
|
||||
SHA512 = row.SHA512,
|
||||
SpamSum = row.SpamSum,
|
||||
ItemStatus = row.Status.AsEnumValue<ItemStatus>(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(row.RomName);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, row.CRC);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, row.MD5);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, row.SHA1);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, row.SHA256);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, row.SHA384);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, row.SHA512);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, row.SpamSum);
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, row.Status.AsEnumValue<ItemStatus>());
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -36,23 +36,23 @@ namespace SabreTools.DatFiles.Formats
|
||||
switch (datItem)
|
||||
{
|
||||
case Disk disk:
|
||||
if (string.IsNullOrEmpty(disk.MD5)
|
||||
&& string.IsNullOrEmpty(disk.SHA1))
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key))
|
||||
&& string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Disk.SHA1Key);
|
||||
}
|
||||
break;
|
||||
|
||||
case Rom rom:
|
||||
if (rom.Size == null || rom.Size < 0)
|
||||
if (rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) < 0)
|
||||
missingFields.Add(Models.Metadata.Rom.SizeKey);
|
||||
if (string.IsNullOrEmpty(rom.CRC)
|
||||
&& string.IsNullOrEmpty(rom.MD5)
|
||||
&& string.IsNullOrEmpty(rom.SHA1)
|
||||
&& string.IsNullOrEmpty(rom.SHA256)
|
||||
&& string.IsNullOrEmpty(rom.SHA384)
|
||||
&& string.IsNullOrEmpty(rom.SHA512)
|
||||
&& string.IsNullOrEmpty(rom.SpamSum))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key))
|
||||
&& string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)))
|
||||
{
|
||||
missingFields.Add(Models.Metadata.Rom.SHA1Key);
|
||||
}
|
||||
@@ -164,18 +164,18 @@ namespace SabreTools.DatFiles.Formats
|
||||
Description = Header.Description,
|
||||
GameName = disk.Machine.Name,
|
||||
GameDescription = disk.Machine.Description,
|
||||
Type = disk.ItemType.AsStringValue<ItemType>(),
|
||||
Type = disk.GetFieldValue<ItemType>(Models.Metadata.Disk.TypeKey).AsStringValue<ItemType>(),
|
||||
RomName = string.Empty,
|
||||
DiskName = disk.GetName(),
|
||||
Size = string.Empty,
|
||||
CRC = string.Empty,
|
||||
MD5 = disk.MD5,
|
||||
SHA1 = disk.SHA1,
|
||||
MD5 = disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key),
|
||||
SHA1 = disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key),
|
||||
SHA256 = string.Empty,
|
||||
SHA384 = string.Empty,
|
||||
SHA512 = string.Empty,
|
||||
SpamSum = string.Empty,
|
||||
Status = disk.ItemStatus.AsStringValue<ItemStatus>(useSecond: false),
|
||||
Status = disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey).AsStringValue<ItemStatus>(useSecond: false),
|
||||
};
|
||||
return row;
|
||||
}
|
||||
@@ -197,12 +197,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
DiskName = media.GetName(),
|
||||
Size = string.Empty,
|
||||
CRC = string.Empty,
|
||||
MD5 = media.MD5,
|
||||
SHA1 = media.SHA1,
|
||||
SHA256 = media.SHA256,
|
||||
MD5 = media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key),
|
||||
SHA1 = media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key),
|
||||
SHA256 = media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key),
|
||||
SHA384 = string.Empty,
|
||||
SHA512 = string.Empty,
|
||||
SpamSum = media.SpamSum,
|
||||
SpamSum = media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey),
|
||||
Status = string.Empty,
|
||||
};
|
||||
return row;
|
||||
@@ -223,15 +223,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
Type = rom.ItemType.AsStringValue<ItemType>(),
|
||||
RomName = rom.GetName(),
|
||||
DiskName = string.Empty,
|
||||
Size = rom.Size?.ToString(),
|
||||
CRC = rom.CRC,
|
||||
MD5 = rom.MD5,
|
||||
SHA1 = rom.SHA1,
|
||||
SHA256 = rom.SHA256,
|
||||
SHA384 = rom.SHA384,
|
||||
SHA512 = rom.SHA512,
|
||||
SpamSum = rom.SpamSum,
|
||||
Status = rom.ItemStatus.AsStringValue<ItemStatus>(useSecond: false),
|
||||
Size = rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
CRC = rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
MD5 = rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key),
|
||||
SHA1 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
SHA256 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key),
|
||||
SHA384 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key),
|
||||
SHA512 = rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key),
|
||||
SpamSum = rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey),
|
||||
Status = rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey).AsStringValue<ItemStatus>(useSecond: false),
|
||||
};
|
||||
return row;
|
||||
}
|
||||
|
||||
@@ -106,11 +106,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var infoItem = new Info
|
||||
{
|
||||
Value = info.Value,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
infoItem.SetName(info.Name);
|
||||
infoItem.SetFieldValue<string?>(Models.Metadata.Info.ValueKey, info.Value);
|
||||
|
||||
infoItem.CopyMachineInformation(machine);
|
||||
ParseAddHelper(infoItem, statsOnly);
|
||||
@@ -121,11 +120,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var sharedfeatItem = new SharedFeature
|
||||
{
|
||||
Value = sharedfeat.Value,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
sharedfeatItem.SetName(sharedfeat.Name);
|
||||
sharedfeatItem.SetFieldValue<string?>(Models.Metadata.SharedFeat.ValueKey, sharedfeat.Value);
|
||||
|
||||
sharedfeatItem.CopyMachineInformation(machine);
|
||||
ParseAddHelper(sharedfeatItem, statsOnly);
|
||||
@@ -169,12 +167,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Part
|
||||
{
|
||||
Interface = part.Interface,
|
||||
Features = CreateFeatures(part.Feature, machine, filename, indexId, statsOnly),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(part.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Part.InterfaceKey, part.Interface);
|
||||
item.SetFieldValue<PartFeature[]?>(Models.Metadata.Part.FeatureKey, CreateFeatures(part.Feature, machine, filename, indexId, statsOnly));
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
|
||||
@@ -192,7 +189,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
/// <param name="filename">Name of the file to be parsed</param>
|
||||
/// <param name="indexId">Index ID for the DAT</param>
|
||||
/// <param name="statsOnly">True to only add item statistics while parsing, false otherwise</param>
|
||||
private static List<PartFeature>? CreateFeatures(Models.SoftwareList.Feature[]? features, Machine machine, string filename, int indexId, bool statsOnly)
|
||||
private static PartFeature[]? CreateFeatures(Models.SoftwareList.Feature[]? features, Machine machine, string filename, int indexId, bool statsOnly)
|
||||
{
|
||||
// If the feature array is missing, we can't do anything
|
||||
if (features == null || !features.Any())
|
||||
@@ -203,17 +200,16 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new PartFeature
|
||||
{
|
||||
Value = feature.Value,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(feature.Name);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Feature.ValueKey, feature.Value);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
partFeatures.Add(item);
|
||||
}
|
||||
|
||||
return partFeatures;
|
||||
return [.. partFeatures];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -236,13 +232,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new DataArea
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(dataarea.Size),
|
||||
Width = NumberHelper.ConvertToInt64(dataarea.Width),
|
||||
Endianness = dataarea.Endianness.AsEnumValue<Endianness>(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(dataarea.Name);
|
||||
item.SetFieldValue<Endianness?>(Models.Metadata.DataArea.EndiannessKey, dataarea.Endianness.AsEnumValue<Endianness>());
|
||||
item.SetFieldValue<long?>(Models.Metadata.DataArea.SizeKey, NumberHelper.ConvertToInt64(dataarea.Size));
|
||||
item.SetFieldValue<long?>(Models.Metadata.DataArea.WidthKey, NumberHelper.ConvertToInt64(dataarea.Width));
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ConvertRoms(dataarea.Rom, part, item, machine, filename, indexId, statsOnly, ref containsItems);
|
||||
@@ -271,20 +266,18 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Rom
|
||||
{
|
||||
Size = NumberHelper.ConvertToInt64(rom.Size ?? rom.Length),
|
||||
CRC = rom.CRC,
|
||||
SHA1 = rom.SHA1,
|
||||
Offset = rom.Offset,
|
||||
Value = rom.Value,
|
||||
ItemStatus = rom.Status.AsEnumValue<ItemStatus>(),
|
||||
LoadFlag = rom.LoadFlag.AsEnumValue<LoadFlag>(),
|
||||
|
||||
Part = part,
|
||||
DataArea = dataarea,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(rom.Name);
|
||||
item.SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(rom.Size ?? rom.Length));
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, rom.CRC);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.SHA1);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.OffsetKey, rom.Offset);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Rom.ValueKey, rom.Value);
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, rom.Status.AsEnumValue<ItemStatus>());
|
||||
item.SetFieldValue<LoadFlag>(Models.Metadata.Rom.LoadFlagKey, rom.LoadFlag.AsEnumValue<LoadFlag>());
|
||||
item.SetFieldValue<Part?>("PART", part);
|
||||
item.SetFieldValue<DataArea?>("DATAAREA", dataarea);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -342,17 +335,15 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new Disk
|
||||
{
|
||||
MD5 = disk.MD5,
|
||||
SHA1 = disk.SHA1,
|
||||
ItemStatus = disk.Status.AsEnumValue<ItemStatus>(),
|
||||
Writable = disk.Writeable.AsYesNo(),
|
||||
|
||||
Part = part,
|
||||
DiskArea = diskarea,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(disk.Name);
|
||||
item.SetFieldValue<DiskArea?>("DISKAREA", diskarea);
|
||||
item.SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, disk.Status?.AsEnumValue<ItemStatus>() ?? ItemStatus.NULL);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, disk.MD5);
|
||||
item.SetFieldValue<Part?>("PART", part);
|
||||
item.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, disk.SHA1);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.Disk.WritableKey, disk.Writeable.AsYesNo());
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -379,15 +370,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new DipSwitch
|
||||
{
|
||||
Tag = dipswitch.Tag,
|
||||
Mask = dipswitch.Mask,
|
||||
Values = CreateDipValues(dipswitch.DipValue, machine, filename, indexId),
|
||||
|
||||
Part = part,
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(dipswitch.Name);
|
||||
item.SetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey, CreateDipValues(dipswitch.DipValue, machine, filename, indexId)?.ToArray());
|
||||
item.SetFieldValue<Part?>("PART", part);
|
||||
item.SetFieldValue<string?>(Models.Metadata.DipSwitch.MaskKey, dipswitch.Mask);
|
||||
item.SetFieldValue<string?>(Models.Metadata.DipSwitch.TagKey, dipswitch.Tag);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
ParseAddHelper(item, statsOnly);
|
||||
@@ -412,12 +401,11 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var item = new DipValue
|
||||
{
|
||||
Value = dipvalue.Value,
|
||||
Default = dipvalue.Default.AsYesNo(),
|
||||
|
||||
Source = new Source { Index = indexId, Name = filename },
|
||||
};
|
||||
item.SetName(dipvalue.Name);
|
||||
item.SetFieldValue<bool?>(Models.Metadata.DipValue.DefaultKey, dipvalue.Default.AsYesNo());
|
||||
item.SetFieldValue<string?>(Models.Metadata.DipValue.ValueKey, dipvalue.Value);
|
||||
|
||||
item.CopyMachineInformation(machine);
|
||||
settings.Add(item);
|
||||
|
||||
@@ -41,22 +41,22 @@ namespace SabreTools.DatFiles.Formats
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string.IsNullOrEmpty(dipSwitch.Part!.GetName()))
|
||||
if (string.IsNullOrEmpty(dipSwitch.GetFieldValue<Part?>("PART")!.GetName()))
|
||||
missingFields.Add(Models.Metadata.Part.NameKey);
|
||||
if (string.IsNullOrEmpty(dipSwitch.Part.Interface))
|
||||
if (string.IsNullOrEmpty(dipSwitch.GetFieldValue<Part?>("PART")!.GetFieldValue<string?>(Models.Metadata.Part.InterfaceKey)))
|
||||
missingFields.Add(Models.Metadata.Part.InterfaceKey);
|
||||
}
|
||||
if (string.IsNullOrEmpty(dipSwitch.GetName()))
|
||||
missingFields.Add(Models.Metadata.DipSwitch.NameKey);
|
||||
if (string.IsNullOrEmpty(dipSwitch.Tag))
|
||||
if (string.IsNullOrEmpty(dipSwitch.GetFieldValue<string?>(Models.Metadata.DipSwitch.TagKey)))
|
||||
missingFields.Add(Models.Metadata.DipSwitch.TagKey);
|
||||
if (string.IsNullOrEmpty(dipSwitch.Mask))
|
||||
if (string.IsNullOrEmpty(dipSwitch.GetFieldValue<string?>(Models.Metadata.DipSwitch.MaskKey)))
|
||||
missingFields.Add(Models.Metadata.DipSwitch.MaskKey);
|
||||
if (dipSwitch.ValuesSpecified)
|
||||
{
|
||||
if (dipSwitch.Values!.Any(dv => string.IsNullOrEmpty(dv.GetName())))
|
||||
if (dipSwitch.GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey)!.Any(dv => string.IsNullOrEmpty(dv.GetName())))
|
||||
missingFields.Add(Models.Metadata.DipValue.NameKey);
|
||||
if (dipSwitch.Values!.Any(dv => string.IsNullOrEmpty(dv.Value)))
|
||||
if (dipSwitch.GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey)!.Any(dv => string.IsNullOrEmpty(dv.GetFieldValue<string?>(Models.Metadata.DipValue.ValueKey))))
|
||||
missingFields.Add(Models.Metadata.DipValue.ValueKey);
|
||||
}
|
||||
|
||||
@@ -70,9 +70,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string.IsNullOrEmpty(disk.Part!.GetName()))
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<Part?>("PART")!.GetName()))
|
||||
missingFields.Add(Models.Metadata.Part.NameKey);
|
||||
if (string.IsNullOrEmpty(disk.Part.Interface))
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<Part?>("PART")!.GetFieldValue<string?>(Models.Metadata.Part.InterfaceKey)))
|
||||
missingFields.Add(Models.Metadata.Part.InterfaceKey);
|
||||
}
|
||||
if (!disk.DiskAreaSpecified)
|
||||
@@ -81,7 +81,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string.IsNullOrEmpty(disk.DiskArea!.GetName()))
|
||||
if (string.IsNullOrEmpty(disk.GetFieldValue<DiskArea?>("DISKAREA")!.GetName()))
|
||||
missingFields.Add(Models.Metadata.DiskArea.NameKey);
|
||||
}
|
||||
if (string.IsNullOrEmpty(disk.GetName()))
|
||||
@@ -101,9 +101,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string.IsNullOrEmpty(rom.Part!.GetName()))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<Part?>("PART")!.GetName()))
|
||||
missingFields.Add(Models.Metadata.Part.NameKey);
|
||||
if (string.IsNullOrEmpty(rom.Part.Interface))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<Part?>("PART")!.GetFieldValue<string?>(Models.Metadata.Part.InterfaceKey)))
|
||||
missingFields.Add(Models.Metadata.Part.InterfaceKey);
|
||||
}
|
||||
if (!rom.DataAreaSpecified)
|
||||
@@ -113,9 +113,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string.IsNullOrEmpty(rom.DataArea!.GetName()))
|
||||
if (string.IsNullOrEmpty(rom.GetFieldValue<DataArea?>("DATAAREA")!.GetName()))
|
||||
missingFields.Add(Models.Metadata.DataArea.NameKey);
|
||||
if (!rom.DataArea.SizeSpecified)
|
||||
if (rom.GetFieldValue<DataArea?>("DATAAREA")!.GetFieldValue<long?>(Models.Metadata.DataArea.SizeKey) == null)
|
||||
missingFields.Add(Models.Metadata.DataArea.SizeKey);
|
||||
}
|
||||
break;
|
||||
@@ -279,7 +279,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
var info = new Models.SoftwareList.Info
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Value = item.Value,
|
||||
Value = item.GetFieldValue<string?>(Models.Metadata.Info.ValueKey),
|
||||
};
|
||||
return info;
|
||||
}
|
||||
@@ -292,7 +292,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
var sharedfeat = new Models.SoftwareList.SharedFeat
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Value = item.Value,
|
||||
Value = item.GetFieldValue<string?>(Models.Metadata.SharedFeat.ValueKey),
|
||||
};
|
||||
return sharedfeat;
|
||||
}
|
||||
@@ -304,9 +304,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var part = new Models.SoftwareList.Part
|
||||
{
|
||||
Name = item.Part?.GetName(),
|
||||
Interface = item.Part?.Interface,
|
||||
Feature = CreateFeatures(item.Part?.Features),
|
||||
Name = item.GetFieldValue<Part?>("PART")?.GetName(),
|
||||
Interface = item.GetFieldValue<Part?>("PART")?.GetFieldValue<string?>(Models.Metadata.Part.InterfaceKey),
|
||||
Feature = CreateFeatures(item.GetFieldValue<Part?>("PART")?.GetFieldValue<PartFeature[]?>(Models.Metadata.Part.FeatureKey)),
|
||||
DataArea = CreateDataAreas(item),
|
||||
DiskArea = null,
|
||||
DipSwitch = null,
|
||||
@@ -321,9 +321,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var part = new Models.SoftwareList.Part
|
||||
{
|
||||
Name = item.Part?.GetName(),
|
||||
Interface = item.Part?.Interface,
|
||||
Feature = CreateFeatures(item.Part?.Features),
|
||||
Name = item.GetFieldValue<Part?>("PART")?.GetName(),
|
||||
Interface = item.GetFieldValue<Part?>("PART")?.GetFieldValue<string?>(Models.Metadata.Part.InterfaceKey),
|
||||
Feature = CreateFeatures(item.GetFieldValue<Part?>("PART")?.GetFieldValue<PartFeature[]?>(Models.Metadata.Part.FeatureKey)),
|
||||
DataArea = null,
|
||||
DiskArea = CreateDiskAreas(item),
|
||||
DipSwitch = null,
|
||||
@@ -338,9 +338,9 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var part = new Models.SoftwareList.Part
|
||||
{
|
||||
Name = item.Part?.GetName(),
|
||||
Interface = item.Part?.Interface,
|
||||
Feature = CreateFeatures(item.Part?.Features),
|
||||
Name = item.GetFieldValue<Part?>("PART")?.GetName(),
|
||||
Interface = item.GetFieldValue<Part?>("PART")?.GetFieldValue<string?>(Models.Metadata.Part.InterfaceKey),
|
||||
Feature = CreateFeatures(item.GetFieldValue<Part?>("PART")?.GetFieldValue<PartFeature[]?>(Models.Metadata.Part.FeatureKey)),
|
||||
DataArea = null,
|
||||
DiskArea = null,
|
||||
DipSwitch = CreateDipSwitches(item),
|
||||
@@ -351,7 +351,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
/// <summary>
|
||||
/// Create a Feature array from the current list of PartFeature DatItems
|
||||
/// <summary>
|
||||
private static Models.SoftwareList.Feature[]? CreateFeatures(List<PartFeature>? items)
|
||||
private static Models.SoftwareList.Feature[]? CreateFeatures(PartFeature[]? items)
|
||||
{
|
||||
// If we don't have features, we can't do anything
|
||||
if (items == null || !items.Any())
|
||||
@@ -363,7 +363,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
var feature = new Models.SoftwareList.Feature
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Value = item.Value,
|
||||
Value = item.GetFieldValue<string?>(Models.Metadata.Feature.ValueKey),
|
||||
};
|
||||
features.Add(feature);
|
||||
}
|
||||
@@ -378,10 +378,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
{
|
||||
var dataArea = new Models.SoftwareList.DataArea
|
||||
{
|
||||
Name = item.DataArea?.GetName(),
|
||||
Size = item.DataArea?.Size?.ToString(),
|
||||
Width = item.DataArea?.Width?.ToString(),
|
||||
Endianness = item.DataArea?.Endianness.AsStringValue<Endianness>(),
|
||||
Name = item.GetFieldValue<DataArea?>("DATAAREA")?.GetName(),
|
||||
Size = item.GetFieldValue<DataArea?>("DATAAREA")?.GetFieldValue<long?>(Models.Metadata.DataArea.SizeKey)?.ToString(),
|
||||
Width = item.GetFieldValue<DataArea?>("DATAAREA")?.GetFieldValue<long?>(Models.Metadata.DataArea.WidthKey)?.ToString(),
|
||||
Endianness = item.GetFieldValue<DataArea?>("DATAAREA")?.GetFieldValue<Endianness>(Models.Metadata.DataArea.EndiannessKey).AsStringValue<Endianness>(),
|
||||
Rom = CreateRom(item),
|
||||
};
|
||||
return [dataArea];
|
||||
@@ -395,14 +395,14 @@ namespace SabreTools.DatFiles.Formats
|
||||
var rom = new Models.SoftwareList.Rom
|
||||
{
|
||||
Name = item.GetName(),
|
||||
Size = item.Size?.ToString(),
|
||||
Size = item.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey)?.ToString(),
|
||||
Length = null,
|
||||
CRC = item.CRC,
|
||||
SHA1 = item.SHA1,
|
||||
Offset = item.Offset,
|
||||
Value = item.Value,
|
||||
Status = item.ItemStatus.AsStringValue<ItemStatus>(useSecond: false),
|
||||
LoadFlag = item.LoadFlag.AsStringValue<LoadFlag>(),
|
||||
CRC = item.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key),
|
||||
Offset = item.GetFieldValue<string?>(Models.Metadata.Rom.OffsetKey),
|
||||
Value = item.GetFieldValue<string?>(Models.Metadata.Rom.ValueKey),
|
||||
Status = item.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey).AsStringValue<ItemStatus>(useSecond: false),
|
||||
LoadFlag = item.GetFieldValue<LoadFlag>(Models.Metadata.Rom.LoadFlagKey).AsStringValue<LoadFlag>(),
|
||||
};
|
||||
return [rom];
|
||||
}
|
||||
@@ -427,10 +427,10 @@ namespace SabreTools.DatFiles.Formats
|
||||
var disk = new Models.SoftwareList.Disk
|
||||
{
|
||||
Name = item.GetName(),
|
||||
MD5 = item.MD5,
|
||||
SHA1 = item.SHA1,
|
||||
Status = item.ItemStatus.AsStringValue<ItemStatus>(useSecond: false),
|
||||
Writeable = item.Writable?.ToString(),
|
||||
MD5 = item.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key),
|
||||
SHA1 = item.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key),
|
||||
Status = item.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey).AsStringValue<ItemStatus>(useSecond: false),
|
||||
Writeable = item.GetFieldValue<bool?>(Models.Metadata.Disk.WritableKey)?.ToString(),
|
||||
};
|
||||
return [disk];
|
||||
}
|
||||
@@ -441,13 +441,13 @@ namespace SabreTools.DatFiles.Formats
|
||||
private static Models.SoftwareList.DipSwitch[]? CreateDipSwitches(DipSwitch item)
|
||||
{
|
||||
var dipValues = new List<Models.SoftwareList.DipValue>();
|
||||
foreach (var setting in item.Values ?? [])
|
||||
foreach (var setting in item.GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey) ?? [])
|
||||
{
|
||||
var dipValue = new Models.SoftwareList.DipValue
|
||||
{
|
||||
Name = setting.GetName(),
|
||||
Value = setting.Value,
|
||||
Default = setting.Default?.ToString(),
|
||||
Value = setting.GetFieldValue<string?>(Models.Metadata.DipValue.ValueKey),
|
||||
Default = setting.GetFieldValue<bool?>(Models.Metadata.DipValue.DefaultKey).FromYesNo(),
|
||||
};
|
||||
|
||||
dipValues.Add(dipValue);
|
||||
|
||||
@@ -229,40 +229,40 @@ namespace SabreTools.DatFiles
|
||||
switch (item)
|
||||
{
|
||||
case Disk disk:
|
||||
if (disk.ItemStatus != ItemStatus.Nodump)
|
||||
if (disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump)
|
||||
{
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : 1);
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)) ? 0 : 1);
|
||||
}
|
||||
|
||||
AddStatusCount(ItemStatus.BadDump, disk.ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Good, disk.ItemStatus == ItemStatus.Good ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Nodump, disk.ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Verified, disk.ItemStatus == ItemStatus.Verified ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.BadDump, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.BadDump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Good, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Good ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Nodump, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Verified, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Verified ? 1 : 0);
|
||||
break;
|
||||
case Media media:
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.MD5) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(media.SHA1) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(media.SHA256) ? 0 : 1);
|
||||
AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.SpamSum) ? 0 : 1);
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey)) ? 0 : 1);
|
||||
break;
|
||||
case Rom rom:
|
||||
if (rom.ItemStatus != ItemStatus.Nodump)
|
||||
if (rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump)
|
||||
{
|
||||
TotalSize += rom.Size ?? 0;
|
||||
AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.CRC) ? 0 : 1);
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.MD5) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.SHA1) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.SHA256) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.SHA384) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.SHA512) ? 0 : 1);
|
||||
AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.SpamSum) ? 0 : 1);
|
||||
TotalSize += rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) ?? 0;
|
||||
AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)) ? 0 : 1);
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1);
|
||||
}
|
||||
|
||||
AddStatusCount(ItemStatus.BadDump, rom.ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Good, rom.ItemStatus == ItemStatus.Good ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Nodump, rom.ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Verified, rom.ItemStatus == ItemStatus.Verified ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.BadDump, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.BadDump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Good, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Good ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Nodump, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Verified, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Verified ? 1 : 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -510,40 +510,40 @@ namespace SabreTools.DatFiles
|
||||
switch (item)
|
||||
{
|
||||
case Disk disk:
|
||||
if (disk.ItemStatus != ItemStatus.Nodump)
|
||||
if (disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump)
|
||||
{
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : 1);
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)) ? 0 : 1);
|
||||
}
|
||||
|
||||
RemoveStatusCount(ItemStatus.BadDump, disk.ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Good, disk.ItemStatus == ItemStatus.Good ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Nodump, disk.ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Verified, disk.ItemStatus == ItemStatus.Verified ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.BadDump, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.BadDump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Good, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Good ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Nodump, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Verified, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Verified ? 1 : 0);
|
||||
break;
|
||||
case Media media:
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.MD5) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(media.SHA1) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(media.SHA256) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.SpamSum) ? 0 : 1);
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey)) ? 0 : 1);
|
||||
break;
|
||||
case Rom rom:
|
||||
if (rom.ItemStatus != ItemStatus.Nodump)
|
||||
if (rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump)
|
||||
{
|
||||
TotalSize -= rom.Size ?? 0;
|
||||
RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.CRC) ? 0 : 1);
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.MD5) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.SHA1) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.SHA256) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.SHA384) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.SHA512) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.SpamSum) ? 0 : 1);
|
||||
TotalSize -= rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) ?? 0;
|
||||
RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1);
|
||||
}
|
||||
|
||||
RemoveStatusCount(ItemStatus.BadDump, rom.ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Good, rom.ItemStatus == ItemStatus.Good ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Nodump, rom.ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Verified, rom.ItemStatus == ItemStatus.Verified ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.BadDump, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.BadDump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Good, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Good ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Nodump, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Verified, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Verified ? 1 : 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -346,40 +346,40 @@ namespace SabreTools.DatFiles
|
||||
switch (item)
|
||||
{
|
||||
case Disk disk:
|
||||
if (disk.ItemStatus != ItemStatus.Nodump)
|
||||
if (disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump)
|
||||
{
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : 1);
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)) ? 0 : 1);
|
||||
}
|
||||
|
||||
AddStatusCount(ItemStatus.BadDump, disk.ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Good, disk.ItemStatus == ItemStatus.Good ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Nodump, disk.ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Verified, disk.ItemStatus == ItemStatus.Verified ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.BadDump, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.BadDump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Good, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Good ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Nodump, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Verified, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Verified ? 1 : 0);
|
||||
break;
|
||||
case Media media:
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.MD5) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(media.SHA1) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(media.SHA256) ? 0 : 1);
|
||||
AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.SpamSum) ? 0 : 1);
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey)) ? 0 : 1);
|
||||
break;
|
||||
case Rom rom:
|
||||
if (rom.ItemStatus != ItemStatus.Nodump)
|
||||
if (rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump)
|
||||
{
|
||||
TotalSize += rom.Size ?? 0;
|
||||
AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.CRC) ? 0 : 1);
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.MD5) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.SHA1) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.SHA256) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.SHA384) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.SHA512) ? 0 : 1);
|
||||
AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.SpamSum) ? 0 : 1);
|
||||
TotalSize += rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) ?? 0;
|
||||
AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)) ? 0 : 1);
|
||||
AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key)) ? 0 : 1);
|
||||
AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1);
|
||||
}
|
||||
|
||||
AddStatusCount(ItemStatus.BadDump, rom.ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Good, rom.ItemStatus == ItemStatus.Good ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Nodump, rom.ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Verified, rom.ItemStatus == ItemStatus.Verified ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.BadDump, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.BadDump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Good, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Good ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Nodump, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump ? 1 : 0);
|
||||
AddStatusCount(ItemStatus.Verified, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Verified ? 1 : 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -654,40 +654,40 @@ namespace SabreTools.DatFiles
|
||||
switch (item)
|
||||
{
|
||||
case Disk disk:
|
||||
if (disk.ItemStatus != ItemStatus.Nodump)
|
||||
if (disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) != ItemStatus.Nodump)
|
||||
{
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : 1);
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.MD5Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.GetFieldValue<string?>(Models.Metadata.Disk.SHA1Key)) ? 0 : 1);
|
||||
}
|
||||
|
||||
RemoveStatusCount(ItemStatus.BadDump, disk.ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Good, disk.ItemStatus == ItemStatus.Good ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Nodump, disk.ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Verified, disk.ItemStatus == ItemStatus.Verified ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.BadDump, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.BadDump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Good, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Good ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Nodump, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Nodump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Verified, disk.GetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey) == ItemStatus.Verified ? 1 : 0);
|
||||
break;
|
||||
case Media media:
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.MD5) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(media.SHA1) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(media.SHA256) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.SpamSum) ? 0 : 1);
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.MD5Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA1Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SHA256Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.GetFieldValue<string?>(Models.Metadata.Media.SpamSumKey)) ? 0 : 1);
|
||||
break;
|
||||
case Rom rom:
|
||||
if (rom.ItemStatus != ItemStatus.Nodump)
|
||||
if (rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump)
|
||||
{
|
||||
TotalSize -= rom.Size ?? 0;
|
||||
RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.CRC) ? 0 : 1);
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.MD5) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.SHA1) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.SHA256) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.SHA384) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.SHA512) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.SpamSum) ? 0 : 1);
|
||||
TotalSize -= rom.GetFieldValue<long?>(Models.Metadata.Rom.SizeKey) ?? 0;
|
||||
RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.CRCKey)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.MD5Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA1Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA256Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA384Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SHA512Key)) ? 0 : 1);
|
||||
RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.GetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey)) ? 0 : 1);
|
||||
}
|
||||
|
||||
RemoveStatusCount(ItemStatus.BadDump, rom.ItemStatus == ItemStatus.BadDump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Good, rom.ItemStatus == ItemStatus.Good ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Nodump, rom.ItemStatus == ItemStatus.Nodump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Verified, rom.ItemStatus == ItemStatus.Verified ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.BadDump, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.BadDump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Good, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Good ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Nodump, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Nodump ? 1 : 0);
|
||||
RemoveStatusCount(ItemStatus.Verified, rom.GetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey) == ItemStatus.Verified ? 1 : 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
86
SabreTools.DatFiles/MetadataConverter.cs
Normal file
86
SabreTools.DatFiles/MetadataConverter.cs
Normal file
@@ -0,0 +1,86 @@
|
||||
using System.Linq;
|
||||
using SabreTools.DatItems;
|
||||
using SabreTools.Filter;
|
||||
|
||||
namespace SabreTools.DatFiles
|
||||
{
|
||||
public static class MetadataConverter
|
||||
{
|
||||
#region Converters
|
||||
|
||||
/// <summary>
|
||||
/// Convert metadata information
|
||||
/// </summary>
|
||||
/// <param name="item">Metadata file to convert</param>
|
||||
/// <param name="filename">Name of the file to be parsed</param>
|
||||
/// <param name="indexId">Index ID for the DAT</param>
|
||||
/// <param name="statsOnly">True to only add item statistics while parsing, false otherwise</param>
|
||||
public static void ConvertMetadata(Models.Metadata.MetadataFile? item, string filename, int indexId, bool statsOnly)
|
||||
{
|
||||
// If the metadata file is invalid, we can't do anything
|
||||
if (item == null || !item.Any())
|
||||
return;
|
||||
|
||||
// Get the machines from the metadata
|
||||
var machines = item.Read<Models.Metadata.Machine[]>(Models.Metadata.MetadataFile.MachineKey);
|
||||
if (machines == null)
|
||||
return;
|
||||
|
||||
// Loop through the machines and add
|
||||
foreach (var machine in machines)
|
||||
{
|
||||
ConvertMachine(machine, filename, indexId, statsOnly);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert machine information
|
||||
/// </summary>
|
||||
/// <param name="metadata">Metadata file to convert</param>
|
||||
/// <param name="filename">Name of the file to be parsed</param>
|
||||
/// <param name="indexId">Index ID for the DAT</param>
|
||||
/// <param name="statsOnly">True to only add item statistics while parsing, false otherwise</param>
|
||||
private static void ConvertMachine(Models.Metadata.Machine? item, string filename, int indexId, bool statsOnly)
|
||||
{
|
||||
// If the machine is invalid, we can't do anything
|
||||
if (item == null || !item.Any())
|
||||
return;
|
||||
|
||||
// Create an internal machine
|
||||
var machine = new Machine(item);
|
||||
|
||||
// Process all possible items
|
||||
/*
|
||||
AdjusterKey
|
||||
ArchiveKey
|
||||
BiosSetKey
|
||||
ChipKey
|
||||
ConfigurationKey
|
||||
DeviceKey
|
||||
DeviceRefKey
|
||||
DipSwitchKey
|
||||
DiskKey
|
||||
DisplayKey
|
||||
DriverKey
|
||||
DumpKey
|
||||
FeatureKey
|
||||
InfoKey
|
||||
InputKey
|
||||
MediaKey
|
||||
PartKey
|
||||
PortKey
|
||||
RamOptionKey
|
||||
ReleaseKey
|
||||
RomKey
|
||||
SampleKey
|
||||
SharedFeatKey
|
||||
SoftwareListKey
|
||||
SoundKey
|
||||
TruripKey
|
||||
VideoKey
|
||||
*/
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -263,7 +263,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (configuration.ConditionsSpecified)
|
||||
{
|
||||
foreach (Condition subCondition in configuration.Conditions!)
|
||||
foreach (Condition subCondition in configuration.GetFieldValue<Condition[]?>(Models.Metadata.Configuration.ConditionKey)!)
|
||||
{
|
||||
SetFields(subCondition);
|
||||
}
|
||||
@@ -271,7 +271,7 @@ namespace SabreTools.DatFiles
|
||||
|
||||
if (configuration.LocationsSpecified)
|
||||
{
|
||||
foreach (ConfLocation subLocation in configuration.Locations!)
|
||||
foreach (ConfLocation subLocation in configuration.GetFieldValue<ConfLocation[]?>(Models.Metadata.Configuration.ConfLocationKey)!)
|
||||
{
|
||||
SetFields(subLocation);
|
||||
}
|
||||
@@ -279,7 +279,7 @@ namespace SabreTools.DatFiles
|
||||
|
||||
if (configuration.SettingsSpecified)
|
||||
{
|
||||
foreach (ConfSetting subSetting in configuration.Settings!)
|
||||
foreach (ConfSetting subSetting in configuration.GetFieldValue<ConfSetting[]?>(Models.Metadata.Configuration.ConfSettingKey)!)
|
||||
{
|
||||
SetFields(subSetting as DatItem);
|
||||
}
|
||||
@@ -294,7 +294,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (confSetting.ConditionsSpecified)
|
||||
{
|
||||
foreach (Condition subCondition in confSetting.Conditions!)
|
||||
foreach (Condition subCondition in confSetting.GetFieldValue<Condition[]?>(Models.Metadata.ConfSetting.ConditionKey)!)
|
||||
{
|
||||
SetFields(subCondition);
|
||||
}
|
||||
@@ -309,7 +309,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (device.ExtensionsSpecified)
|
||||
{
|
||||
foreach (Extension subExtension in device.Extensions!)
|
||||
foreach (Extension subExtension in device.GetFieldValue<Extension[]?>(Models.Metadata.Device.ExtensionKey)!)
|
||||
{
|
||||
SetFields(subExtension);
|
||||
}
|
||||
@@ -317,7 +317,7 @@ namespace SabreTools.DatFiles
|
||||
|
||||
if (device.InstancesSpecified)
|
||||
{
|
||||
foreach (Instance subInstance in device.Instances!)
|
||||
foreach (Instance subInstance in device.GetFieldValue<Instance[]?>(Models.Metadata.Device.InstanceKey)!)
|
||||
{
|
||||
SetFields(subInstance);
|
||||
}
|
||||
@@ -332,7 +332,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (dipSwitch.ConditionsSpecified)
|
||||
{
|
||||
foreach (Condition subCondition in dipSwitch.Conditions!)
|
||||
foreach (Condition subCondition in dipSwitch.GetFieldValue<Condition[]?>(Models.Metadata.DipSwitch.ConditionKey)!)
|
||||
{
|
||||
SetFields(subCondition);
|
||||
}
|
||||
@@ -340,7 +340,7 @@ namespace SabreTools.DatFiles
|
||||
|
||||
if (dipSwitch.LocationsSpecified)
|
||||
{
|
||||
foreach (DipLocation subLocation in dipSwitch.Locations!)
|
||||
foreach (DipLocation subLocation in dipSwitch.GetFieldValue<DipLocation[]?>(Models.Metadata.DipSwitch.DipLocationKey)!)
|
||||
{
|
||||
SetFields(subLocation);
|
||||
}
|
||||
@@ -348,14 +348,16 @@ namespace SabreTools.DatFiles
|
||||
|
||||
if (dipSwitch.ValuesSpecified)
|
||||
{
|
||||
foreach (DipValue subValue in dipSwitch.Values!)
|
||||
foreach (DipValue subValue in dipSwitch.GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey)!)
|
||||
{
|
||||
SetFields(subValue as DatItem);
|
||||
}
|
||||
}
|
||||
|
||||
dipSwitch.Part ??= new Part();
|
||||
SetFields(dipSwitch.Part as DatItem);
|
||||
if (!dipSwitch.PartSpecified)
|
||||
dipSwitch.SetFieldValue<Part?>("PART", new Part());
|
||||
|
||||
SetFields((dipSwitch.GetFieldValue<Part?>("PART") as DatItem)!);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -366,7 +368,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (dipValue.ConditionsSpecified)
|
||||
{
|
||||
foreach (Condition subCondition in dipValue.Conditions!)
|
||||
foreach (Condition subCondition in dipValue.GetFieldValue<Condition[]?>(Models.Metadata.DipValue.ConditionKey)!)
|
||||
{
|
||||
SetFields(subCondition);
|
||||
}
|
||||
@@ -379,11 +381,15 @@ namespace SabreTools.DatFiles
|
||||
/// <param name="disk">Disk to remove replace fields in</param>
|
||||
private void SetFields(Disk disk)
|
||||
{
|
||||
disk.DiskArea ??= new DiskArea();
|
||||
SetFields(disk.DiskArea);
|
||||
if (!disk.DiskAreaSpecified)
|
||||
disk.SetFieldValue<DiskArea?>("DISKAREA", new DiskArea());
|
||||
|
||||
disk.Part ??= new Part();
|
||||
SetFields(disk.Part as DatItem);
|
||||
SetFields(disk.GetFieldValue<DiskArea?>("DISKAREA")! as DatItem);
|
||||
|
||||
if (!disk.PartSpecified)
|
||||
disk.SetFieldValue<Part?>("PART", new Part());
|
||||
|
||||
SetFields(disk.GetFieldValue<Part?>("PART")! as DatItem);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -394,7 +400,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (input.ControlsSpecified)
|
||||
{
|
||||
foreach (Control subControl in input.Controls!)
|
||||
foreach (Control subControl in input.GetFieldValue<Control[]?>(Models.Metadata.Input.ControlKey)!)
|
||||
{
|
||||
SetFields(subControl);
|
||||
}
|
||||
@@ -409,7 +415,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (part.FeaturesSpecified)
|
||||
{
|
||||
foreach (PartFeature subPartFeature in part.Features!)
|
||||
foreach (PartFeature subPartFeature in part.GetFieldValue<PartFeature[]?>(Models.Metadata.Part.FeatureKey)!)
|
||||
{
|
||||
SetFields(subPartFeature);
|
||||
}
|
||||
@@ -424,7 +430,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (port.AnalogsSpecified)
|
||||
{
|
||||
foreach (Analog subAnalog in port.Analogs!)
|
||||
foreach (Analog subAnalog in port.GetFieldValue<Analog[]?>(Models.Metadata.Port.AnalogKey)!)
|
||||
{
|
||||
SetFields(subAnalog);
|
||||
}
|
||||
@@ -437,11 +443,15 @@ namespace SabreTools.DatFiles
|
||||
/// <param name="rom">Rom to remove replace fields in</param>
|
||||
private void SetFields(Rom rom)
|
||||
{
|
||||
rom.DataArea ??= new DataArea();
|
||||
SetFields(rom.DataArea);
|
||||
if (!rom.DataAreaSpecified)
|
||||
rom.SetFieldValue<DataArea?>("DATAAREA", new DataArea());
|
||||
|
||||
rom.Part ??= new Part();
|
||||
SetFields(rom.Part as DatItem);
|
||||
SetFields(rom.GetFieldValue<DataArea?>("DATAAREA")! as DatItem);
|
||||
|
||||
if (!rom.PartSpecified)
|
||||
rom.SetFieldValue<Part?>("PART", new Part());
|
||||
|
||||
SetFields(rom.GetFieldValue<Part?>("PART")! as DatItem);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -452,7 +462,7 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
if (slot.SlotOptionsSpecified)
|
||||
{
|
||||
foreach (SlotOption subSlotOption in slot.SlotOptions!)
|
||||
foreach (SlotOption subSlotOption in slot.GetFieldValue<SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey)!)
|
||||
{
|
||||
SetFields(subSlotOption);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user