From 5ccfde54f533af496e2aeba283641316f9348bcd Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Fri, 3 Apr 2026 17:49:45 -0400 Subject: [PATCH] Convert last long key to property --- SabreTools.Data.Extensions/MetadataExtensions.cs | 1 + SabreTools.Data.Models/ArchiveDotOrg/File.cs | 2 +- SabreTools.Data.Models/Metadata/DictionaryBase.cs | 3 +++ SabreTools.Data.Models/Metadata/Rom.cs | 6 +++--- .../DatFileTests.FromMetadata.cs | 4 ++-- .../DatFileTests.ToMetadata.cs | 2 +- SabreTools.Metadata.DatItems/Formats/Rom.cs | 6 ++++++ SabreTools.Metadata.Filter/FilterObject.cs | 3 +++ SabreTools.Metadata/ModelBackedItemT.cs | 1 + .../ArchiveDotOrgTests.cs | 4 ++-- .../ArchiveDotOrg.Deserializer.cs | 2 +- .../ArchiveDotOrg.Serializer.cs | 2 +- SabreTools.Serialization.Readers.Test/ArchiveDotOrgTests.cs | 4 ++-- SabreTools.Serialization.Readers/ArchiveDotOrg.cs | 3 ++- SabreTools.Serialization.Writers/ArchiveDotOrg.cs | 2 +- 15 files changed, 30 insertions(+), 15 deletions(-) diff --git a/SabreTools.Data.Extensions/MetadataExtensions.cs b/SabreTools.Data.Extensions/MetadataExtensions.cs index 45f790ab..353db922 100644 --- a/SabreTools.Data.Extensions/MetadataExtensions.cs +++ b/SabreTools.Data.Extensions/MetadataExtensions.cs @@ -319,6 +319,7 @@ namespace SabreTools.Data.Extensions else if (self is Rom selfRom && clone is Rom cloneRom) { cloneRom.Dispose = selfRom.Dispose; + cloneRom.FileCount = selfRom.FileCount; cloneRom.FileIsAvailable = selfRom.FileIsAvailable; cloneRom.Inverted = selfRom.Inverted; cloneRom.LoadFlag = selfRom.LoadFlag; diff --git a/SabreTools.Data.Models/ArchiveDotOrg/File.cs b/SabreTools.Data.Models/ArchiveDotOrg/File.cs index adb129c2..d1f52fbb 100644 --- a/SabreTools.Data.Models/ArchiveDotOrg/File.cs +++ b/SabreTools.Data.Models/ArchiveDotOrg/File.cs @@ -33,7 +33,7 @@ namespace SabreTools.Data.Models.ArchiveDotOrg public string? SHA1 { get; set; } [XmlElement("filecount")] - public string? FileCount { get; set; } + public long? FileCount { get; set; } /// Is this a set of defined values? [XmlElement("format")] diff --git a/SabreTools.Data.Models/Metadata/DictionaryBase.cs b/SabreTools.Data.Models/Metadata/DictionaryBase.cs index 4548c583..55c2f733 100644 --- a/SabreTools.Data.Models/Metadata/DictionaryBase.cs +++ b/SabreTools.Data.Models/Metadata/DictionaryBase.cs @@ -31,6 +31,7 @@ namespace SabreTools.Data.Models.Metadata /// /// Read a key as a bool, returning null on error /// + /// TODO: Determine if this can be removed public bool? ReadBool(string key) { if (!ValidateReadKey(key)) @@ -52,6 +53,7 @@ namespace SabreTools.Data.Models.Metadata /// /// Read a key as a double, returning null on error /// + /// TODO: Determine if this can be removed public double? ReadDouble(string key) { if (!ValidateReadKey(key)) @@ -82,6 +84,7 @@ namespace SabreTools.Data.Models.Metadata /// Read a key as a long, returning null on error /// /// TODO: Add logic to convert SI suffixes and hex + /// TODO: Determine if this can be removed public long? ReadLong(string key) { if (!ValidateReadKey(key)) diff --git a/SabreTools.Data.Models/Metadata/Rom.cs b/SabreTools.Data.Models/Metadata/Rom.cs index d83a81bb..190e65dd 100644 --- a/SabreTools.Data.Models/Metadata/Rom.cs +++ b/SabreTools.Data.Models/Metadata/Rom.cs @@ -11,6 +11,9 @@ namespace SabreTools.Data.Models.Metadata /// (yes|no) "no" public bool? Dispose { get; set; } + /// ArchiveDotOrg.File + public long? FileCount { get; set; } + /// bool; AttractMode.Row public bool? FileIsAvailable { get; set; } @@ -102,9 +105,6 @@ namespace SabreTools.Data.Models.Metadata /// string; OfflineList.FileRomCRC public const string ExtensionKey = "extension"; - /// long; ArchiveDotOrg.File - public const string FileCountKey = "filecount"; - /// string public const string FlagsKey = "flags"; diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs index 03031399..b44e838a 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs @@ -792,7 +792,7 @@ namespace SabreTools.Metadata.DatFiles.Test [Data.Models.Metadata.Rom.DateKey] = "date", Dispose = true, [Data.Models.Metadata.Rom.ExtensionKey] = "extension", - [Data.Models.Metadata.Rom.FileCountKey] = 12345L, + FileCount = 12345, FileIsAvailable = true, [Data.Models.Metadata.Rom.FlagsKey] = "flags", [Data.Models.Metadata.Rom.FormatKey] = "format", @@ -1494,7 +1494,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.Equal("date", rom.ReadString(Data.Models.Metadata.Rom.DateKey)); Assert.True(rom.Dispose); Assert.Equal("extension", rom.ReadString(Data.Models.Metadata.Rom.ExtensionKey)); - Assert.Equal(12345L, rom.ReadLong(Data.Models.Metadata.Rom.FileCountKey)); + Assert.Equal(12345, rom.FileCount); Assert.True(rom.FileIsAvailable); Assert.Equal("flags", rom.ReadString(Data.Models.Metadata.Rom.FlagsKey)); Assert.Equal("format", rom.ReadString(Data.Models.Metadata.Rom.FormatKey)); diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs index d31360ab..c6a7932f 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs @@ -1057,7 +1057,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.Equal("date", rom.ReadString(Data.Models.Metadata.Rom.DateKey)); Assert.True(rom.Dispose); Assert.Equal("extension", rom.ReadString(Data.Models.Metadata.Rom.ExtensionKey)); - Assert.Equal(12345, rom.ReadLong(Data.Models.Metadata.Rom.FileCountKey)); + Assert.Equal(12345, rom.FileCount); Assert.True(rom.FileIsAvailable); Assert.Equal("flags", rom.ReadString(Data.Models.Metadata.Rom.FlagsKey)); Assert.Equal("format", rom.ReadString(Data.Models.Metadata.Rom.FormatKey)); diff --git a/SabreTools.Metadata.DatItems/Formats/Rom.cs b/SabreTools.Metadata.DatItems/Formats/Rom.cs index 3a19d3c9..5fa916c3 100644 --- a/SabreTools.Metadata.DatItems/Formats/Rom.cs +++ b/SabreTools.Metadata.DatItems/Formats/Rom.cs @@ -48,6 +48,12 @@ namespace SabreTools.Metadata.DatItems.Formats set => (_internal as Data.Models.Metadata.Rom)?.Dispose = value; } + public long? FileCount + { + get => (_internal as Data.Models.Metadata.Rom)?.FileCount; + set => (_internal as Data.Models.Metadata.Rom)?.FileCount = value; + } + public bool? FileIsAvailable { get => (_internal as Data.Models.Metadata.Rom)?.FileIsAvailable; diff --git a/SabreTools.Metadata.Filter/FilterObject.cs b/SabreTools.Metadata.Filter/FilterObject.cs index 73671a19..1b3c7f9d 100644 --- a/SabreTools.Metadata.Filter/FilterObject.cs +++ b/SabreTools.Metadata.Filter/FilterObject.cs @@ -790,6 +790,9 @@ namespace SabreTools.Metadata.Filter case Rom item when fieldName == "dispose": checkValue = item.Dispose.FromYesNo(); return true; + case Rom item when fieldName == "filecount": + checkValue = item.FileCount?.ToString(); + return true; case Rom item when fieldName == "fileisavailable": checkValue = item.FileIsAvailable.FromYesNo(); return true; diff --git a/SabreTools.Metadata/ModelBackedItemT.cs b/SabreTools.Metadata/ModelBackedItemT.cs index fb3ecef3..60afca9c 100644 --- a/SabreTools.Metadata/ModelBackedItemT.cs +++ b/SabreTools.Metadata/ModelBackedItemT.cs @@ -58,6 +58,7 @@ namespace SabreTools.Metadata /// /// Field to retrieve /// Value from the field, if possible + /// TODO: Determine if this can be removed public long? ReadLong(string fieldName) => _internal.ReadLong(fieldName); diff --git a/SabreTools.Serialization.CrossModel.Test/ArchiveDotOrgTests.cs b/SabreTools.Serialization.CrossModel.Test/ArchiveDotOrgTests.cs index 863930c9..a06570f5 100644 --- a/SabreTools.Serialization.CrossModel.Test/ArchiveDotOrgTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/ArchiveDotOrgTests.cs @@ -42,7 +42,7 @@ namespace SabreTools.Serialization.CrossModel.Test MD5 = "XXXXXX", CRC32 = "XXXXXX", SHA1 = "XXXXXX", - FileCount = "XXXXXX", + FileCount = 12345, Format = "XXXXXX", Original = "XXXXXX", Summation = "XXXXXX", @@ -116,7 +116,7 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal("XXXXXX", file.MD5); Assert.Equal("XXXXXX", file.CRC32); Assert.Equal("XXXXXX", file.SHA1); - Assert.Equal("XXXXXX", file.FileCount); + Assert.Equal(12345, file.FileCount); Assert.Equal("XXXXXX", file.Format); Assert.Equal("XXXXXX", file.Original); Assert.Equal("XXXXXX", file.Summation); diff --git a/SabreTools.Serialization.CrossModel/ArchiveDotOrg.Deserializer.cs b/SabreTools.Serialization.CrossModel/ArchiveDotOrg.Deserializer.cs index fbf426f2..e955fd02 100644 --- a/SabreTools.Serialization.CrossModel/ArchiveDotOrg.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/ArchiveDotOrg.Deserializer.cs @@ -52,7 +52,7 @@ namespace SabreTools.Serialization.CrossModel MD5 = item.ReadString(Data.Models.Metadata.Rom.MD5Key), CRC32 = item.ReadString(Data.Models.Metadata.Rom.CRCKey), SHA1 = item.ReadString(Data.Models.Metadata.Rom.SHA1Key), - FileCount = item.ReadString(Data.Models.Metadata.Rom.FileCountKey), + FileCount = item.FileCount, Format = item.ReadString(Data.Models.Metadata.Rom.FormatKey), Original = item.ReadString(Data.Models.Metadata.Rom.OriginalKey), Summation = item.ReadString(Data.Models.Metadata.Rom.SummationKey), diff --git a/SabreTools.Serialization.CrossModel/ArchiveDotOrg.Serializer.cs b/SabreTools.Serialization.CrossModel/ArchiveDotOrg.Serializer.cs index 7b76d5c0..36706d9a 100644 --- a/SabreTools.Serialization.CrossModel/ArchiveDotOrg.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/ArchiveDotOrg.Serializer.cs @@ -70,7 +70,7 @@ namespace SabreTools.Serialization.CrossModel [Data.Models.Metadata.Rom.MD5Key] = item.MD5, [Data.Models.Metadata.Rom.CRCKey] = item.CRC32, [Data.Models.Metadata.Rom.SHA1Key] = item.SHA1, - [Data.Models.Metadata.Rom.FileCountKey] = item.FileCount, + FileCount = item.FileCount, [Data.Models.Metadata.Rom.FormatKey] = item.Format, [Data.Models.Metadata.Rom.OriginalKey] = item.Original, [Data.Models.Metadata.Rom.SummationKey] = item.Summation, diff --git a/SabreTools.Serialization.Readers.Test/ArchiveDotOrgTests.cs b/SabreTools.Serialization.Readers.Test/ArchiveDotOrgTests.cs index 8bd8f58c..15a68d98 100644 --- a/SabreTools.Serialization.Readers.Test/ArchiveDotOrgTests.cs +++ b/SabreTools.Serialization.Readers.Test/ArchiveDotOrgTests.cs @@ -108,7 +108,7 @@ namespace SabreTools.Serialization.Readers.Test MD5 = "XXXXXX", CRC32 = "XXXXXX", SHA1 = "XXXXXX", - FileCount = "XXXXXX", + FileCount = 12345, Format = "XXXXXX", Original = "XXXXXX", Summation = "XXXXXX", @@ -182,7 +182,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal("XXXXXX", file.MD5); Assert.Equal("XXXXXX", file.CRC32); Assert.Equal("XXXXXX", file.SHA1); - Assert.Equal("XXXXXX", file.FileCount); + Assert.Equal(12345, file.FileCount); Assert.Equal("XXXXXX", file.Format); Assert.Equal("XXXXXX", file.Original); Assert.Equal("XXXXXX", file.Summation); diff --git a/SabreTools.Serialization.Readers/ArchiveDotOrg.cs b/SabreTools.Serialization.Readers/ArchiveDotOrg.cs index 9add6d13..165018af 100644 --- a/SabreTools.Serialization.Readers/ArchiveDotOrg.cs +++ b/SabreTools.Serialization.Readers/ArchiveDotOrg.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Xml; using SabreTools.Data.Models.ArchiveDotOrg; +using SabreTools.Text.Extensions; namespace SabreTools.Serialization.Readers { @@ -136,7 +137,7 @@ namespace SabreTools.Serialization.Readers obj.SHA1 = reader.ReadElementContentAsString(); break; case "filecount": - obj.FileCount = reader.ReadElementContentAsString(); + obj.FileCount = NumberHelper.ConvertToInt64(reader.ReadElementContentAsString()); break; case "format": obj.Format = reader.ReadElementContentAsString(); diff --git a/SabreTools.Serialization.Writers/ArchiveDotOrg.cs b/SabreTools.Serialization.Writers/ArchiveDotOrg.cs index b23709be..a46e0c9a 100644 --- a/SabreTools.Serialization.Writers/ArchiveDotOrg.cs +++ b/SabreTools.Serialization.Writers/ArchiveDotOrg.cs @@ -57,7 +57,7 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalElementString("md5", obj.MD5); writer.WriteOptionalElementString("crc32", obj.CRC32); writer.WriteOptionalElementString("sha1", obj.SHA1); - writer.WriteOptionalElementString("filecount", obj.FileCount); + writer.WriteOptionalElementString("filecount", obj.FileCount?.ToString()); writer.WriteOptionalElementString("format", obj.Format); writer.WriteOptionalElementString("original", obj.Original); writer.WriteOptionalElementString("summation", obj.Summation);