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