diff --git a/SabreTools.DatFiles/DatFile.ToMetadata.cs b/SabreTools.DatFiles/DatFile.ToMetadata.cs index 65db1e2c..40976da4 100644 --- a/SabreTools.DatFiles/DatFile.ToMetadata.cs +++ b/SabreTools.DatFiles/DatFile.ToMetadata.cs @@ -45,6 +45,14 @@ namespace SabreTools.DatFiles // Create an internal header var header = Header.GetInternalClone(); + // Remove fields with default values + if (header.Read(Models.Metadata.Header.ForceMergingKey) == Core.MergingFlag.None) + header.Remove(Models.Metadata.Header.ForceMergingKey); + if (header.Read(Models.Metadata.Header.ForceNodumpKey) == Core.NodumpFlag.None) + header.Remove(Models.Metadata.Header.ForceNodumpKey); + if (header.Read(Models.Metadata.Header.ForcePackingKey) == Core.PackingFlag.None) + header.Remove(Models.Metadata.Header.ForcePackingKey); + // Convert subheader values if (Header.CanOpenSpecified) header[Models.Metadata.Header.CanOpenKey] = Header.GetFieldValue(Models.Metadata.Header.CanOpenKey); diff --git a/SabreTools.DatFiles/DatFile.cs b/SabreTools.DatFiles/DatFile.cs index 857e06ea..1047978c 100644 --- a/SabreTools.DatFiles/DatFile.cs +++ b/SabreTools.DatFiles/DatFile.cs @@ -246,19 +246,21 @@ namespace SabreTools.DatFiles } else if (item is Rom rom) { + long? size = NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)); + // 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.GetFieldValue(Models.Metadata.Rom.SizeKey) == null && !rom.HasHashes()) + if (size == null && !rom.HasHashes()) { // No-op, just catch it so it doesn't go further logger.Verbose($"{Header.GetFieldValue(DatHeader.FileNameKey)}: 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.GetFieldValue(Models.Metadata.Rom.SizeKey) == 0 || rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null) + else if ((size == 0 || size == null) && (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) || rom.HasZeroHash())) { // TODO: All instances of Hash.DeepHashes should be made into 0x0 eventually - rom.SetFieldValue(Models.Metadata.Rom.SizeKey, Constants.SizeZero); + rom.SetFieldValue(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString()); rom.SetFieldValue(Models.Metadata.Rom.CRCKey, Constants.CRCZero); rom.SetFieldValue(Models.Metadata.Rom.MD5Key, Constants.MD5Zero); rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, Constants.SHA1Zero); @@ -269,7 +271,7 @@ namespace SabreTools.DatFiles } // If the file has no size and it's not the above case, skip and log - else if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump && (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == 0 || rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null)) + else if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump && (size == 0 || size == null)) { logger.Verbose($"{Header.GetFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.GetName()}' will be output as nodump"); rom.SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.Nodump); @@ -277,7 +279,7 @@ namespace SabreTools.DatFiles // If the file has a size but aboslutely no hashes, skip and log else if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump - && rom.GetFieldValue(Models.Metadata.Rom.SizeKey) != null && rom.GetFieldValue(Models.Metadata.Rom.SizeKey) > 0 + && size != null && size > 0 && !rom.HasHashes()) { logger.Verbose($"{Header.GetFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.GetName()}' will be output as nodump"); @@ -406,7 +408,7 @@ namespace SabreTools.DatFiles sha256 = rom.GetFieldValue(Models.Metadata.Rom.SHA256Key) ?? string.Empty; sha384 = rom.GetFieldValue(Models.Metadata.Rom.SHA384Key) ?? string.Empty; sha512 = rom.GetFieldValue(Models.Metadata.Rom.SHA512Key) ?? string.Empty; - size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey)?.ToString() ?? string.Empty; + size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey) ?? string.Empty; spamsum = rom.GetFieldValue(Models.Metadata.Rom.SpamSumKey) ?? string.Empty; } @@ -540,7 +542,7 @@ namespace SabreTools.DatFiles logger.Verbose($"Empty folder found: {datItem.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey)}"); rom.SetName(rom.GetName() == "null" ? "-" : rom.GetName()); - rom.SetFieldValue(Models.Metadata.Rom.SizeKey, Constants.SizeZero); + rom.SetFieldValue(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString()); rom.SetFieldValue(Models.Metadata.Rom.CRCKey, rom.GetFieldValue(Models.Metadata.Rom.CRCKey) == "null" ? Constants.CRCZero : null); rom.SetFieldValue(Models.Metadata.Rom.MD5Key, rom.GetFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? Constants.MD5Zero : null); rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, rom.GetFieldValue(Models.Metadata.Rom.SHA1Key) == "null" ? Constants.SHA1Zero : null); @@ -624,7 +626,8 @@ namespace SabreTools.DatFiles if (ignoreBlanks && datItem is Rom rom) { // If we have a 0-size or blank rom, then we ignore - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == 0 || rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null) + long? size = NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)); + if (size == 0 || size == null) { string itemString = JsonConvert.SerializeObject(datItem, Formatting.None); logger?.Verbose($"Item '{itemString}' was skipped because it had an invalid size"); diff --git a/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs b/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs index 76387a05..23e05890 100644 --- a/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs +++ b/SabreTools.DatFiles/Formats/ClrMamePro.Writer.cs @@ -57,7 +57,7 @@ namespace SabreTools.DatFiles.Formats case Rom rom: if (string.IsNullOrEmpty(rom.GetName())) missingFields.Add(Models.Metadata.Rom.NameKey); - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue(Models.Metadata.Rom.SizeKey) < 0) + if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < 0) missingFields.Add(Models.Metadata.Rom.SizeKey); if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key)) @@ -140,7 +140,11 @@ namespace SabreTools.DatFiles.Formats { logger.User($"Writing to '{outfile}'..."); - var metadataFile = CreateMetadataFile(ignoreblanks); + //var metadataFile = CreateMetadataFile(ignoreblanks); + + // Serialize the input file + var metadata = ConvertMetadata(ignoreblanks); + var metadataFile = new Serialization.CrossModel.ClrMamePro().Deserialize(metadata); if (!(new Serialization.Files.ClrMamePro().Serialize(metadataFile, outfile, Quotes))) { logger.Warning($"File '{outfile}' could not be written! See the log for more details."); @@ -370,7 +374,7 @@ namespace SabreTools.DatFiles.Formats var rom = new Models.ClrMamePro.Rom { Name = item.GetName(), - Size = item.GetFieldValue(Models.Metadata.Rom.SizeKey)?.ToString(), + Size = item.GetFieldValue(Models.Metadata.Rom.SizeKey), CRC = item.GetFieldValue(Models.Metadata.Rom.CRCKey), MD5 = item.GetFieldValue(Models.Metadata.Rom.MD5Key), SHA1 = item.GetFieldValue(Models.Metadata.Rom.SHA1Key), diff --git a/SabreTools.DatFiles/Formats/DosCenter.Writer.cs b/SabreTools.DatFiles/Formats/DosCenter.Writer.cs index 695b4b37..8de2be84 100644 --- a/SabreTools.DatFiles/Formats/DosCenter.Writer.cs +++ b/SabreTools.DatFiles/Formats/DosCenter.Writer.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using SabreTools.Core; +using SabreTools.Core.Tools; using SabreTools.DatItems; using SabreTools.DatItems.Formats; @@ -33,7 +34,7 @@ namespace SabreTools.DatFiles.Formats switch (datItem) { case Rom rom: - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null) + if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < 0) missingFields.Add(Models.Metadata.Rom.SizeKey); // if (string.IsNullOrEmpty(rom.Date)) // missingFields.Add(Models.Metadata.Rom.DateKey); @@ -179,7 +180,7 @@ namespace SabreTools.DatFiles.Formats var rom = new Models.DosCenter.File { Name = item.GetName(), - Size = item.GetFieldValue(Models.Metadata.Rom.SizeKey)?.ToString(), + Size = item.GetFieldValue(Models.Metadata.Rom.SizeKey), CRC = item.GetFieldValue(Models.Metadata.Rom.CRCKey), Date = item.GetFieldValue(Models.Metadata.Rom.DateKey), }; diff --git a/SabreTools.DatFiles/Formats/EverdriveSMDB.Writer.cs b/SabreTools.DatFiles/Formats/EverdriveSMDB.Writer.cs index af1c879e..9697a3d1 100644 --- a/SabreTools.DatFiles/Formats/EverdriveSMDB.Writer.cs +++ b/SabreTools.DatFiles/Formats/EverdriveSMDB.Writer.cs @@ -143,7 +143,7 @@ namespace SabreTools.DatFiles.Formats SHA1 = rom.GetFieldValue(Models.Metadata.Rom.SHA1Key), MD5 = rom.GetFieldValue(Models.Metadata.Rom.MD5Key), CRC32 = rom.GetFieldValue(Models.Metadata.Rom.CRCKey), - Size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey)?.ToString(), + Size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey), }; return row; } diff --git a/SabreTools.DatFiles/Formats/Listrom.Reader.cs b/SabreTools.DatFiles/Formats/Listrom.Reader.cs index 3f782fa7..3258a491 100644 --- a/SabreTools.DatFiles/Formats/Listrom.Reader.cs +++ b/SabreTools.DatFiles/Formats/Listrom.Reader.cs @@ -134,7 +134,7 @@ namespace SabreTools.DatFiles.Formats rom.SetName(row.Name); rom.SetFieldValue(Models.Metadata.Rom.CRCKey, row.CRC); rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, row.SHA1); - rom.SetFieldValue(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size)); + rom.SetFieldValue(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size).ToString()); rom.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); rom.SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.None); @@ -190,7 +190,7 @@ namespace SabreTools.DatFiles.Formats rom.SetName(row.Name); rom.SetFieldValue(Models.Metadata.Rom.CRCKey, row.CRC); rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, row.SHA1); - rom.SetFieldValue(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size)); + rom.SetFieldValue(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size).ToString()); rom.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); rom.SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.BadDump); @@ -207,7 +207,7 @@ namespace SabreTools.DatFiles.Formats rom.SetName(row.Name); rom.SetFieldValue(Models.Metadata.Rom.CRCKey, null); rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, null); - rom.SetFieldValue(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size)); + rom.SetFieldValue(Models.Metadata.Rom.SizeKey, NumberHelper.ConvertToInt64(row.Size).ToString()); rom.SetFieldValue(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); rom.SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.Nodump); diff --git a/SabreTools.DatFiles/Formats/Listrom.Writer.cs b/SabreTools.DatFiles/Formats/Listrom.Writer.cs index 12a3d7fb..87bcd5f3 100644 --- a/SabreTools.DatFiles/Formats/Listrom.Writer.cs +++ b/SabreTools.DatFiles/Formats/Listrom.Writer.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using SabreTools.Core; +using SabreTools.Core.Tools; using SabreTools.DatItems; using SabreTools.DatItems.Formats; @@ -42,7 +43,7 @@ namespace SabreTools.DatFiles.Formats break; case Rom rom: - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue(Models.Metadata.Rom.SizeKey) < 0) + if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < 0) missingFields.Add(Models.Metadata.Rom.SizeKey); if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey))) missingFields.Add(Models.Metadata.Rom.CRCKey); @@ -214,7 +215,7 @@ namespace SabreTools.DatFiles.Formats return new Models.Listrom.Row { Name = rom.GetName(), - Size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey)?.ToString(), + Size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey), NoGoodDumpKnown = true, }; } @@ -223,7 +224,7 @@ namespace SabreTools.DatFiles.Formats return new Models.Listrom.Row { Name = rom.GetName(), - Size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey)?.ToString(), + Size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey), Bad = true, CRC = rom.GetFieldValue(Models.Metadata.Rom.CRCKey), SHA1 = rom.GetFieldValue(Models.Metadata.Rom.SHA1Key), @@ -234,7 +235,7 @@ namespace SabreTools.DatFiles.Formats return new Models.Listrom.Row { Name = rom.GetName(), - Size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey)?.ToString(), + Size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey), CRC = rom.GetFieldValue(Models.Metadata.Rom.CRCKey), SHA1 = rom.GetFieldValue(Models.Metadata.Rom.SHA1Key), }; diff --git a/SabreTools.DatFiles/Formats/Listxml.Writer.cs b/SabreTools.DatFiles/Formats/Listxml.Writer.cs index 101f703f..b31dc15d 100644 --- a/SabreTools.DatFiles/Formats/Listxml.Writer.cs +++ b/SabreTools.DatFiles/Formats/Listxml.Writer.cs @@ -57,7 +57,7 @@ namespace SabreTools.DatFiles.Formats case Rom rom: if (string.IsNullOrEmpty(rom.GetName())) missingFields.Add(Models.Metadata.Rom.NameKey); - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue(Models.Metadata.Rom.SizeKey) < 0) + if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < 0) missingFields.Add(Models.Metadata.Rom.SizeKey); if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key))) @@ -420,7 +420,7 @@ namespace SabreTools.DatFiles.Formats { Name = item.GetName(), Bios = item.GetFieldValue(Models.Metadata.Rom.BiosKey), - Size = item.GetFieldValue(Models.Metadata.Rom.SizeKey)?.ToString(), + Size = item.GetFieldValue(Models.Metadata.Rom.SizeKey), CRC = item.GetFieldValue(Models.Metadata.Rom.CRCKey), SHA1 = item.GetFieldValue(Models.Metadata.Rom.SHA1Key), Merge = item.GetFieldValue(Models.Metadata.Rom.MergeKey), diff --git a/SabreTools.DatFiles/Formats/Logiqx.Writer.cs b/SabreTools.DatFiles/Formats/Logiqx.Writer.cs index e50dc189..e68ef7db 100644 --- a/SabreTools.DatFiles/Formats/Logiqx.Writer.cs +++ b/SabreTools.DatFiles/Formats/Logiqx.Writer.cs @@ -51,7 +51,7 @@ namespace SabreTools.DatFiles.Formats case Rom rom: if (string.IsNullOrEmpty(rom.GetName())) missingFields.Add(Models.Metadata.Rom.NameKey); - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue(Models.Metadata.Rom.SizeKey) < 0) + if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < 0) missingFields.Add(Models.Metadata.Rom.SizeKey); if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key)) @@ -508,7 +508,7 @@ namespace SabreTools.DatFiles.Formats var rom = new Models.Logiqx.Rom { Name = item.GetName(), - Size = item.GetFieldValue(Models.Metadata.Rom.SizeKey)?.ToString(), + Size = item.GetFieldValue(Models.Metadata.Rom.SizeKey), CRC = item.GetFieldValue(Models.Metadata.Rom.CRCKey), MD5 = item.GetFieldValue(Models.Metadata.Rom.MD5Key), SHA1 = item.GetFieldValue(Models.Metadata.Rom.SHA1Key), diff --git a/SabreTools.DatFiles/Formats/OfflineList.Writer.cs b/SabreTools.DatFiles/Formats/OfflineList.Writer.cs index 9ba4988f..8ddbd4ed 100644 --- a/SabreTools.DatFiles/Formats/OfflineList.Writer.cs +++ b/SabreTools.DatFiles/Formats/OfflineList.Writer.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using SabreTools.Core; +using SabreTools.Core.Tools; using SabreTools.DatItems; using SabreTools.DatItems.Formats; @@ -33,7 +34,7 @@ namespace SabreTools.DatFiles.Formats switch (datItem) { case Rom rom: - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue(Models.Metadata.Rom.SizeKey) < 0) + if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < 0) missingFields.Add(Models.Metadata.Rom.SizeKey); if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey))) missingFields.Add(Models.Metadata.Rom.CRCKey); diff --git a/SabreTools.DatFiles/Formats/RomCenter.Writer.cs b/SabreTools.DatFiles/Formats/RomCenter.Writer.cs index 6b0d57a7..7f7becb5 100644 --- a/SabreTools.DatFiles/Formats/RomCenter.Writer.cs +++ b/SabreTools.DatFiles/Formats/RomCenter.Writer.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using SabreTools.Core; +using SabreTools.Core.Tools; using SabreTools.DatItems; using SabreTools.DatItems.Formats; @@ -35,7 +36,7 @@ namespace SabreTools.DatFiles.Formats case Rom rom: if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey))) missingFields.Add(Models.Metadata.Rom.CRCKey); - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null) + if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < 0) missingFields.Add(Models.Metadata.Rom.SizeKey); break; } @@ -189,7 +190,7 @@ namespace SabreTools.DatFiles.Formats GameDescription = item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.DescriptionKey), RomName = item.GetName(), RomCRC = item.GetFieldValue(Models.Metadata.Rom.CRCKey), - RomSize = item.GetFieldValue(Models.Metadata.Rom.SizeKey)?.ToString(), + RomSize = item.GetFieldValue(Models.Metadata.Rom.SizeKey), RomOf = item.GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.RomOfKey), MergeName = item.GetFieldValue(Models.Metadata.Rom.MergeKey), }; diff --git a/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs b/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs index 3a1313d3..71065be7 100644 --- a/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs +++ b/SabreTools.DatFiles/Formats/SeparatedValue.Writer.cs @@ -44,7 +44,7 @@ namespace SabreTools.DatFiles.Formats break; case Rom rom: - if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || rom.GetFieldValue(Models.Metadata.Rom.SizeKey) < 0) + if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null || NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < 0) missingFields.Add(Models.Metadata.Rom.SizeKey); if (string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) && string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key)) @@ -223,7 +223,7 @@ namespace SabreTools.DatFiles.Formats Type = rom.GetFieldValue(Models.Metadata.DatItem.TypeKey).AsStringValue(), RomName = rom.GetName(), DiskName = string.Empty, - Size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey)?.ToString(), + Size = rom.GetFieldValue(Models.Metadata.Rom.SizeKey), CRC = rom.GetFieldValue(Models.Metadata.Rom.CRCKey), MD5 = rom.GetFieldValue(Models.Metadata.Rom.MD5Key), SHA1 = rom.GetFieldValue(Models.Metadata.Rom.SHA1Key), diff --git a/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs b/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs index 26ba313e..7f74b018 100644 --- a/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs +++ b/SabreTools.DatFiles/Formats/SoftwareList.Writer.cs @@ -395,7 +395,7 @@ namespace SabreTools.DatFiles.Formats var rom = new Models.SoftwareList.Rom { Name = item.GetName(), - Size = item.GetFieldValue(Models.Metadata.Rom.SizeKey)?.ToString(), + Size = item.GetFieldValue(Models.Metadata.Rom.SizeKey), Length = null, CRC = item.GetFieldValue(Models.Metadata.Rom.CRCKey), SHA1 = item.GetFieldValue(Models.Metadata.Rom.SHA1Key), diff --git a/SabreTools.DatFiles/ItemDictionary.cs b/SabreTools.DatFiles/ItemDictionary.cs index cb3f2fc0..3ee78a9f 100644 --- a/SabreTools.DatFiles/ItemDictionary.cs +++ b/SabreTools.DatFiles/ItemDictionary.cs @@ -11,6 +11,7 @@ using System.Threading.Tasks; using System.Xml.Serialization; using Newtonsoft.Json; using SabreTools.Core; +using SabreTools.Core.Tools; using SabreTools.DatItems; using SabreTools.DatItems.Formats; using SabreTools.Hashing; @@ -249,7 +250,7 @@ namespace SabreTools.DatFiles case Rom rom: if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump) { - TotalSize += rom.GetFieldValue(Models.Metadata.Rom.SizeKey) ?? 0; + TotalSize += NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) ?? 0; AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1); AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1); @@ -530,7 +531,7 @@ namespace SabreTools.DatFiles case Rom rom: if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump) { - TotalSize -= rom.GetFieldValue(Models.Metadata.Rom.SizeKey) ?? 0; + TotalSize -= NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) ?? 0; RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1); RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1); diff --git a/SabreTools.DatFiles/ItemDictionaryDB.cs b/SabreTools.DatFiles/ItemDictionaryDB.cs index f4e0e7e3..5ef7ca51 100644 --- a/SabreTools.DatFiles/ItemDictionaryDB.cs +++ b/SabreTools.DatFiles/ItemDictionaryDB.cs @@ -10,6 +10,7 @@ using System.Xml.Serialization; using Microsoft.Data.Sqlite; using Newtonsoft.Json; using SabreTools.Core; +using SabreTools.Core.Tools; using SabreTools.DatItems; using SabreTools.DatItems.Formats; using SabreTools.Hashing; @@ -366,7 +367,7 @@ namespace SabreTools.DatFiles case Rom rom: if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump) { - TotalSize += rom.GetFieldValue(Models.Metadata.Rom.SizeKey) ?? 0; + TotalSize += NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) ?? 0; AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1); AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1); @@ -674,7 +675,7 @@ namespace SabreTools.DatFiles case Rom rom: if (rom.GetFieldValue(Models.Metadata.Rom.StatusKey) != ItemStatus.Nodump) { - TotalSize -= rom.GetFieldValue(Models.Metadata.Rom.SizeKey) ?? 0; + TotalSize -= NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) ?? 0; RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1); RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1); diff --git a/SabreTools.DatItems/Formats/Rom.cs b/SabreTools.DatItems/Formats/Rom.cs index ca24d369..6a3311b8 100644 --- a/SabreTools.DatItems/Formats/Rom.cs +++ b/SabreTools.DatItems/Formats/Rom.cs @@ -100,7 +100,7 @@ namespace SabreTools.DatItems.Formats SetFieldValue(Models.Metadata.Rom.SHA256Key, TextHelper.ByteArrayToString(baseFile.SHA256)); SetFieldValue(Models.Metadata.Rom.SHA384Key, TextHelper.ByteArrayToString(baseFile.SHA384)); SetFieldValue(Models.Metadata.Rom.SHA512Key, TextHelper.ByteArrayToString(baseFile.SHA512)); - SetFieldValue(Models.Metadata.Rom.SizeKey, baseFile.Size); + SetFieldValue(Models.Metadata.Rom.SizeKey, baseFile.Size.ToString()); SetFieldValue(Models.Metadata.Rom.SpamSumKey, System.Text.Encoding.UTF8.GetString(baseFile.SpamSum ?? [])); SetFieldValue(DatItem.DupeTypeKey, 0x00); @@ -127,7 +127,7 @@ namespace SabreTools.DatItems.Formats Filename = GetName(), Parent = GetFieldValue(DatItem.MachineKey)!.GetFieldValue(Models.Metadata.Machine.NameKey), Date = GetFieldValue(Models.Metadata.Rom.DateKey), - Size = GetFieldValue(Models.Metadata.Rom.SizeKey), + Size = NumberHelper.ConvertToInt64(GetFieldValue(Models.Metadata.Rom.SizeKey)), CRC = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Rom.CRCKey)), MD5 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Rom.MD5Key)), SHA1 = TextHelper.StringToByteArray(GetFieldValue(Models.Metadata.Rom.SHA1Key)), diff --git a/SabreTools.DatTools/Splitter.cs b/SabreTools.DatTools/Splitter.cs index bb83d56e..b3d51a1e 100644 --- a/SabreTools.DatTools/Splitter.cs +++ b/SabreTools.DatTools/Splitter.cs @@ -7,6 +7,7 @@ using System.Net; using System.Threading.Tasks; #endif using SabreTools.Core; +using SabreTools.Core.Tools; using SabreTools.DatFiles; using SabreTools.DatItems; using SabreTools.DatItems.Formats; @@ -412,15 +413,15 @@ namespace SabreTools.DatTools lessThan.Items.Add(key, item); // If the file is a Rom and has no size, put it in the "lesser" dat - else if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null) + else if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) == null) lessThan.Items.Add(key, item); // If the file is a Rom and less than the radix, put it in the "lesser" dat - else if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) < radix) + else if (NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) < radix) lessThan.Items.Add(key, item); // If the file is a Rom and greater than or equal to the radix, put it in the "greater" dat - else if (rom.GetFieldValue(Models.Metadata.Rom.SizeKey) >= radix) + else if (NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) >= radix) greaterThan.Items.Add(key, item); } #if NET40_OR_GREATER || NETCOREAPP @@ -484,8 +485,8 @@ namespace SabreTools.DatTools if (item is Rom rom) { // TODO: Should there be more than just a log if a single item is larger than the chunksize? - machineSize += rom.GetFieldValue(Models.Metadata.Rom.SizeKey) ?? 0; - if ((rom.GetFieldValue(Models.Metadata.Rom.SizeKey) ?? 0) > chunkSize) + machineSize += NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) ?? 0; + if ((NumberHelper.ConvertToInt64(rom.GetFieldValue(Models.Metadata.Rom.SizeKey)) ?? 0) > chunkSize) logger.Error($"{rom.GetName() ?? string.Empty} in {machine} is larger than {chunkSize}"); } } diff --git a/SabreTools.Test/DatFiles/ItemDictionaryTests.cs b/SabreTools.Test/DatFiles/ItemDictionaryTests.cs index 92d0dcda..dda569ee 100644 --- a/SabreTools.Test/DatFiles/ItemDictionaryTests.cs +++ b/SabreTools.Test/DatFiles/ItemDictionaryTests.cs @@ -25,28 +25,28 @@ namespace SabreTools.Test.DatFiles rom1.SetName("rom-1"); rom1.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); rom1.SetFieldValue(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom1.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom1.SetFieldValue(Models.Metadata.Rom.SizeKey, "1024"); rom1.CopyMachineInformation(machine1); var rom2 = new Rom(); rom2.SetName("rom-2"); rom2.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); rom2.SetFieldValue(Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); - rom2.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom2.SetFieldValue(Models.Metadata.Rom.SizeKey, "1024"); rom1.CopyMachineInformation(machine1); var rom3 = new Rom(); rom3.SetName("rom-3"); rom3.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); rom3.SetFieldValue(Models.Metadata.Rom.SHA1Key, "00000ea4014ce66679e7e17d56ac510f67e39e26"); - rom3.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom3.SetFieldValue(Models.Metadata.Rom.SizeKey, "1024"); rom1.CopyMachineInformation(machine2); var rom4 = new Rom(); rom4.SetName("rom-4"); rom4.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); rom4.SetFieldValue(Models.Metadata.Rom.SHA1Key, "00000151d437442e74e5134023fab8bf694a2487"); - rom4.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom4.SetFieldValue(Models.Metadata.Rom.SizeKey, "1024"); rom1.CopyMachineInformation(machine2); // Setup the dictionary @@ -86,7 +86,7 @@ namespace SabreTools.Test.DatFiles rom1.SetName("rom-1"); rom1.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); rom1.SetFieldValue(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom1.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom1.SetFieldValue(Models.Metadata.Rom.SizeKey, "1024"); rom1.CopyMachineInformation(machine1); var rom2 = new Rom(); @@ -94,7 +94,7 @@ namespace SabreTools.Test.DatFiles rom2.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); rom2.SetFieldValue(DatItem.RemoveKey, true); rom2.SetFieldValue(Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); - rom2.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom2.SetFieldValue(Models.Metadata.Rom.SizeKey, "1024"); rom1.CopyMachineInformation(machine1); // Setup the dictionary @@ -122,13 +122,13 @@ namespace SabreTools.Test.DatFiles var rom1 = new Rom(); rom1.SetName("rom-1"); rom1.SetFieldValue(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom1.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom1.SetFieldValue(Models.Metadata.Rom.SizeKey, "1024"); rom1.CopyMachineInformation(machine1); var rom2 = new Rom(); rom2.SetName("rom-2"); rom2.SetFieldValue(Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); - rom2.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom2.SetFieldValue(Models.Metadata.Rom.SizeKey, "1024"); rom1.CopyMachineInformation(machine1); // Setup the dictionary @@ -141,7 +141,7 @@ namespace SabreTools.Test.DatFiles var rom = new Rom(); rom.SetName("rom-1"); rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom.SetFieldValue(Models.Metadata.Rom.SizeKey, hasDuplicate ? 1024 : 2048); + rom.SetFieldValue(Models.Metadata.Rom.SizeKey, hasDuplicate ? "1024" : "2048"); rom1.CopyMachineInformation(machine1); var actual = dict.GetDuplicates(rom); @@ -160,13 +160,13 @@ namespace SabreTools.Test.DatFiles var rom1 = new Rom(); rom1.SetName("rom-1"); rom1.SetFieldValue(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom1.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom1.SetFieldValue(Models.Metadata.Rom.SizeKey, "1024"); rom1.CopyMachineInformation(machine1); var rom2 = new Rom(); rom2.SetName("rom-2"); rom2.SetFieldValue(Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); - rom2.SetFieldValue(Models.Metadata.Rom.SizeKey, 1024); + rom2.SetFieldValue(Models.Metadata.Rom.SizeKey, "1024"); rom1.CopyMachineInformation(machine1); // Setup the dictionary @@ -179,7 +179,7 @@ namespace SabreTools.Test.DatFiles var rom = new Rom(); rom.SetName("rom-1"); rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom.SetFieldValue(Models.Metadata.Rom.SizeKey, expected ? 1024 : 2048); + rom.SetFieldValue(Models.Metadata.Rom.SizeKey, expected ? "1024" : "2048"); rom1.CopyMachineInformation(machine1); bool actual = dict.HasDuplicates(rom);