diff --git a/SabreTools.Data.Extensions.Test/MetadataExtensionsTests.cs b/SabreTools.Data.Extensions.Test/MetadataExtensionsTests.cs index 145b5211..8f25855e 100644 --- a/SabreTools.Data.Extensions.Test/MetadataExtensionsTests.cs +++ b/SabreTools.Data.Extensions.Test/MetadataExtensionsTests.cs @@ -40,12 +40,12 @@ namespace SabreTools.Data.Extensions.Test DictionaryBase? self = new Disk { Name = "name", - [Disk.MergeKey] = "XXXXXX", - [Disk.RegionKey] = "XXXXXX", + Merge = "merge", + Region = "region", Status = ItemStatus.Good, Optional = true, - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", + MD5 = "md5", + SHA1 = "sha1", }; Rom? actual = self.ConvertToRom(); @@ -54,12 +54,12 @@ namespace SabreTools.Data.Extensions.Test Assert.Equal(4, actual.Count); Assert.Equal(ItemType.Rom, actual.ItemType); Assert.Equal("name.chd", actual.Name); - Assert.Equal("XXXXXX", actual[Rom.MergeKey]); - Assert.Equal("XXXXXX", actual[Rom.RegionKey]); + Assert.Equal("merge", actual[Rom.MergeKey]); + Assert.Equal("region", actual[Rom.RegionKey]); Assert.Equal(ItemStatus.Good, actual.Status); Assert.Equal(true, actual.Optional); - Assert.Equal("XXXXXX", actual[Rom.MD5Key]); - Assert.Equal("XXXXXX", actual[Rom.SHA1Key]); + Assert.Equal("md5", actual[Rom.MD5Key]); + Assert.Equal("sha1", actual[Rom.SHA1Key]); } [Fact] @@ -84,10 +84,10 @@ namespace SabreTools.Data.Extensions.Test DictionaryBase? self = new Media { Name = "name", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - SHA256 = "XXXXXX", - SpamSum = "XXXXXX", + MD5 = "md5", + SHA1 = "sha1", + SHA256 = "sha256", + SpamSum = "spamsum", }; Rom? actual = self.ConvertToRom(); @@ -96,10 +96,10 @@ namespace SabreTools.Data.Extensions.Test Assert.Equal(4, actual.Count); Assert.Equal(ItemType.Rom, actual.ItemType); Assert.Equal("name.aaruf", actual.Name); - Assert.Equal("XXXXXX", actual[Rom.MD5Key]); - Assert.Equal("XXXXXX", actual[Rom.SHA1Key]); - Assert.Equal("XXXXXX", actual[Rom.SHA256Key]); - Assert.Equal("XXXXXX", actual[Rom.SpamSumKey]); + Assert.Equal("md5", actual[Rom.MD5Key]); + Assert.Equal("sha1", actual[Rom.SHA1Key]); + Assert.Equal("sha256", actual[Rom.SHA256Key]); + Assert.Equal("spamsum", actual[Rom.SpamSumKey]); } [Fact] @@ -153,13 +153,13 @@ namespace SabreTools.Data.Extensions.Test { Disk self = new Disk { - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = string.Empty, + MD5 = "md5", + SHA1 = string.Empty, }; Disk other = new Disk { - [Disk.MD5Key] = string.Empty, - [Disk.SHA1Key] = "XXXXXX", + MD5 = string.Empty, + SHA1 = "sha1", }; bool actual = self.HashMatch(other); @@ -171,13 +171,13 @@ namespace SabreTools.Data.Extensions.Test { Disk self = new Disk { - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = string.Empty, + MD5 = "md5", + SHA1 = string.Empty, }; Disk other = new Disk { - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", + MD5 = "md5", + SHA1 = "sha1", }; bool actual = self.HashMatch(other); @@ -189,13 +189,13 @@ namespace SabreTools.Data.Extensions.Test { Disk self = new Disk { - [Disk.MD5Key] = string.Empty, - [Disk.SHA1Key] = "XXXXXX", + MD5 = string.Empty, + SHA1 = "sha1", }; Disk other = new Disk { - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", + MD5 = "md5", + SHA1 = "sha1", }; bool actual = self.HashMatch(other); @@ -207,13 +207,13 @@ namespace SabreTools.Data.Extensions.Test { Disk self = new Disk { - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", + MD5 = "md5", + SHA1 = "sha1", }; Disk other = new Disk { - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", + MD5 = "md5", + SHA1 = "sha1", }; bool actual = self.HashMatch(other); @@ -225,17 +225,17 @@ namespace SabreTools.Data.Extensions.Test { Media self = new Media { - MD5 = "XXXXXX", + MD5 = "md5", SHA1 = string.Empty, - SHA256 = "XXXXXX", + SHA256 = "sha256", SpamSum = string.Empty, }; Media other = new Media { MD5 = string.Empty, - SHA1 = "XXXXXX", + SHA1 = "sha1", SHA256 = string.Empty, - SpamSum = "XXXXXX", + SpamSum = "spamsum", }; bool actual = self.HashMatch(other); @@ -969,8 +969,8 @@ namespace SabreTools.Data.Extensions.Test { DictionaryBase self = new Disk { - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", }; bool actual = self.HasZeroHash(); @@ -982,8 +982,8 @@ namespace SabreTools.Data.Extensions.Test { DictionaryBase self = new Disk { - [Disk.MD5Key] = HashType.MD5.ZeroString, - [Disk.SHA1Key] = string.Empty, + MD5 = HashType.MD5.ZeroString, + SHA1 = string.Empty, }; bool actual = self.HasZeroHash(); @@ -995,8 +995,8 @@ namespace SabreTools.Data.Extensions.Test { DictionaryBase self = new Disk { - [Disk.MD5Key] = string.Empty, - [Disk.SHA1Key] = HashType.SHA1.ZeroString, + MD5 = string.Empty, + SHA1 = HashType.SHA1.ZeroString, }; bool actual = self.HasZeroHash(); @@ -1008,8 +1008,8 @@ namespace SabreTools.Data.Extensions.Test { DictionaryBase self = new Disk { - [Disk.MD5Key] = HashType.MD5.ZeroString, - [Disk.SHA1Key] = HashType.SHA1.ZeroString, + MD5 = HashType.MD5.ZeroString, + SHA1 = HashType.SHA1.ZeroString, }; bool actual = self.HasZeroHash(); @@ -1510,8 +1510,8 @@ namespace SabreTools.Data.Extensions.Test DictionaryBase self = new Disk(); DictionaryBase other = new Disk { - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", }; self.FillMissingHashes(other); diff --git a/SabreTools.Data.Extensions/MetadataExtensions.cs b/SabreTools.Data.Extensions/MetadataExtensions.cs index 19a14578..4bde6ffd 100644 --- a/SabreTools.Data.Extensions/MetadataExtensions.cs +++ b/SabreTools.Data.Extensions/MetadataExtensions.cs @@ -173,6 +173,8 @@ namespace SabreTools.Data.Extensions return dipSwitch.Clone() as DipSwitch; else if (self is DipValue dipValue) return dipValue.Clone() as DipValue; + else if (self is Disk disk) + return disk.Clone() as Disk; else if (self is Display display) return display.Clone() as Display; else if (self is Driver driver) @@ -224,12 +226,6 @@ namespace SabreTools.Data.Extensions cloneDataArea.Size = selfDataArea.Size; cloneDataArea.Width = selfDataArea.Width; } - else if (self is Disk selfDisk && clone is Disk cloneDisk) - { - cloneDisk.Optional = selfDisk.Optional; - cloneDisk.Status = selfDisk.Status; - cloneDisk.Writable = selfDisk.Writable; - } else if (self is Feature selfFeature && clone is Feature cloneFeature) { // TODO: Remove when PartFeature no longer needs nesting @@ -434,12 +430,12 @@ namespace SabreTools.Data.Extensions return new Rom { Name = name, - [Rom.MergeKey] = disk.ReadString(Disk.MergeKey), - [Rom.RegionKey] = disk.ReadString(Disk.RegionKey), + [Rom.MergeKey] = disk.Merge, + [Rom.RegionKey] = disk.Region, Status = disk.Status, Optional = disk.Optional, - [Rom.MD5Key] = disk.ReadString(Disk.MD5Key), - [Rom.SHA1Key] = disk.ReadString(Disk.SHA1Key), + [Rom.MD5Key] = disk.MD5, + [Rom.SHA1Key] = disk.SHA1, }; } @@ -519,13 +515,8 @@ namespace SabreTools.Data.Extensions return false; // Return if all hashes match according to merge rules - string? selfMd5 = self.ReadString(Disk.MD5Key); - string? otherMd5 = other.ReadString(Disk.MD5Key); - bool conditionalMd5 = ConditionalHashEquals(selfMd5, otherMd5); - - string? selfSha1 = self.ReadString(Disk.SHA1Key); - string? otherSha1 = other.ReadString(Disk.SHA1Key); - bool conditionalSha1 = ConditionalHashEquals(selfSha1, otherSha1); + bool conditionalMd5 = ConditionalHashEquals(self.MD5, other.MD5); + bool conditionalSha1 = ConditionalHashEquals(self.SHA1, other.SHA1); return conditionalMd5 && conditionalSha1; @@ -670,11 +661,11 @@ namespace SabreTools.Data.Extensions /// private static bool HasCommonHash(this Disk self, Disk other) { - bool md5Null = string.IsNullOrEmpty(self.ReadString(Disk.MD5Key)); - md5Null ^= string.IsNullOrEmpty(other.ReadString(Disk.MD5Key)); + bool md5Null = string.IsNullOrEmpty(self.MD5); + md5Null ^= string.IsNullOrEmpty(other.MD5); - bool sha1Null = string.IsNullOrEmpty(self.ReadString(Disk.SHA1Key)); - sha1Null ^= string.IsNullOrEmpty(other.ReadString(Disk.SHA1Key)); + bool sha1Null = string.IsNullOrEmpty(self.SHA1); + sha1Null ^= string.IsNullOrEmpty(other.SHA1); return !md5Null || !sha1Null; @@ -767,8 +758,8 @@ namespace SabreTools.Data.Extensions /// private static bool HasHashes(this Disk disk) { - bool md5Null = string.IsNullOrEmpty(disk.ReadString(Disk.MD5Key)); - bool sha1Null = string.IsNullOrEmpty(disk.ReadString(Disk.SHA1Key)); + bool md5Null = string.IsNullOrEmpty(disk.MD5); + bool sha1Null = string.IsNullOrEmpty(disk.SHA1); return !md5Null || !sha1Null; @@ -829,10 +820,10 @@ namespace SabreTools.Data.Extensions /// private static bool HasZeroHash(this Disk disk) { - string? md5 = disk.ReadString(Disk.MD5Key); + string? md5 = disk.MD5; bool md5Null = string.IsNullOrEmpty(md5) || string.Equals(md5, HashType.MD5.ZeroString, StringComparison.OrdinalIgnoreCase); - string? sha1 = disk.ReadString(Disk.SHA1Key); + string? sha1 = disk.SHA1; bool sha1Null = string.IsNullOrEmpty(sha1) || string.Equals(sha1, HashType.SHA1.ZeroString, StringComparison.OrdinalIgnoreCase); return md5Null @@ -967,15 +958,15 @@ namespace SabreTools.Data.Extensions if (self is null || other is null) return; - string? selfMd5 = self.ReadString(Disk.MD5Key); - string? otherMd5 = other.ReadString(Disk.MD5Key); + string? selfMd5 = self.MD5; + string? otherMd5 = other.MD5; if (string.IsNullOrEmpty(selfMd5) && !string.IsNullOrEmpty(otherMd5)) - self[Disk.MD5Key] = otherMd5; + self.MD5 = otherMd5; - string? selfSha1 = self.ReadString(Disk.SHA1Key); - string? otherSha1 = other.ReadString(Disk.SHA1Key); + string? selfSha1 = self.SHA1; + string? otherSha1 = other.SHA1; if (string.IsNullOrEmpty(selfSha1) && !string.IsNullOrEmpty(otherSha1)) - self[Disk.SHA1Key] = otherSha1; + self.SHA1 = otherSha1; } /// diff --git a/SabreTools.Data.Models/Listxml/Disk.cs b/SabreTools.Data.Models/Listxml/Disk.cs index b5bf0d57..1ca07c83 100644 --- a/SabreTools.Data.Models/Listxml/Disk.cs +++ b/SabreTools.Data.Models/Listxml/Disk.cs @@ -24,9 +24,8 @@ namespace SabreTools.Data.Models.Listxml [XmlAttribute("region")] public string? Region { get; set; } - /// Numeric? [XmlAttribute("index")] - public string? Index { get; set; } + public long? Index { get; set; } /// (yes|no) "no" [XmlAttribute("writable")] diff --git a/SabreTools.Data.Models/Metadata/Disk.cs b/SabreTools.Data.Models/Metadata/Disk.cs index b1c77800..c012e119 100644 --- a/SabreTools.Data.Models/Metadata/Disk.cs +++ b/SabreTools.Data.Models/Metadata/Disk.cs @@ -1,18 +1,32 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { + // TODO: IEquatable [JsonObject("disk"), XmlRoot(elementName: "disk")] - public class Disk : DatItem + public class Disk : DatItem, ICloneable { #region Properties + public string? Flags { get; set; } + + public long? Index { get; set; } + + public string? MD5 { get; set; } + + public string? Merge { get; set; } + public string? Name { get; set; } /// (yes|no) "no" public bool? Optional { get; set; } + public string? Region { get; set; } + + public string? SHA1 { get; set; } + /// (baddump|nodump|good|verified) "good" public ItemStatus? Status { get; set; } @@ -21,28 +35,25 @@ namespace SabreTools.Data.Models.Metadata #endregion - #region Keys - - /// string - public const string FlagsKey = "flags"; - - /// string, possibly long - public const string IndexKey = "index"; - - /// string - public const string MD5Key = "md5"; - - /// string - public const string MergeKey = "merge"; - - /// string - public const string RegionKey = "region"; - - /// string - public const string SHA1Key = "sha1"; - - #endregion - public Disk() => ItemType = ItemType.Disk; + + /// + public object Clone() + { + var obj = new Disk(); + + obj.Flags = Flags; + obj.Index = Index; + obj.MD5 = MD5; + obj.Merge = Merge; + obj.Name = Name; + obj.Optional = Optional; + obj.Region = Region; + obj.SHA1 = SHA1; + obj.Status = Status; + obj.Writable = Writable; + + return obj; + } } } diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs index fa348f4b..7dbb386b 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs @@ -133,10 +133,8 @@ namespace SabreTools.Metadata.DatFiles.Test // All other fields are tested separately Disk? partDisk = Array.Find(datItems, item => item is Disk disk && disk.DiskAreaSpecified && disk.PartSpecified) as Disk; Assert.NotNull(partDisk); - DiskArea? diskDiskArea = partDisk.Read(Disk.DiskAreaKey); - ValidateDiskArea(diskDiskArea); - Part? diskPart = partDisk.Read(Disk.PartKey); - ValidatePart(diskPart); + ValidateDiskArea(partDisk.DiskArea); + ValidatePart(partDisk.Part); PartFeature? partFeature = Array.Find(datItems, item => item is PartFeature) as PartFeature; ValidatePartFeature(partFeature); @@ -551,14 +549,14 @@ namespace SabreTools.Metadata.DatFiles.Test { return new Data.Models.Metadata.Disk { - [Data.Models.Metadata.Disk.FlagsKey] = "flags", - [Data.Models.Metadata.Disk.IndexKey] = "index", - [Data.Models.Metadata.Disk.MD5Key] = HashType.MD5.ZeroString, - [Data.Models.Metadata.Disk.MergeKey] = "merge", + Flags = "flags", + Index = 12345, + MD5 = HashType.MD5.ZeroString, + Merge = "merge", Name = "name", Optional = true, - [Data.Models.Metadata.Disk.RegionKey] = "region", - [Data.Models.Metadata.Disk.SHA1Key] = HashType.SHA1.ZeroString, + Region = "region", + SHA1 = HashType.SHA1.ZeroString, Writable = true, }; } @@ -1307,14 +1305,14 @@ namespace SabreTools.Metadata.DatFiles.Test private static void ValidateDisk(Disk? disk) { Assert.NotNull(disk); - Assert.Equal("flags", disk.ReadString(Data.Models.Metadata.Disk.FlagsKey)); - Assert.Equal("index", disk.ReadString(Data.Models.Metadata.Disk.IndexKey)); - Assert.Equal(HashType.MD5.ZeroString, disk.ReadString(Data.Models.Metadata.Disk.MD5Key)); - Assert.Equal("merge", disk.ReadString(Data.Models.Metadata.Disk.MergeKey)); + Assert.Equal("flags", disk.Flags); + Assert.Equal(12345, disk.Index); + Assert.Equal(HashType.MD5.ZeroString, disk.MD5); + Assert.Equal("merge", disk.Merge); Assert.Equal("name", disk.Name); Assert.True(disk.Optional); - Assert.Equal("region", disk.ReadString(Data.Models.Metadata.Disk.RegionKey)); - Assert.Equal(HashType.SHA1.ZeroString, disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)); + Assert.Equal("region", disk.Region); + Assert.Equal(HashType.SHA1.ZeroString, disk.SHA1); Assert.True(disk.Writable); } diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs index 9b8a24cd..32a7b59a 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs @@ -196,8 +196,8 @@ namespace SabreTools.Metadata.DatFiles.Test { Disk item = new Disk(CreateMetadataDisk()); item.CopyMachineInformation(machine); - item.Write(Disk.DiskAreaKey, CreateDiskArea(machine)); - item.Write(Disk.PartKey, CreatePart(machine)); + item.DiskArea = CreateDiskArea(machine); + item.Part = CreatePart(machine); return item; } @@ -837,14 +837,14 @@ namespace SabreTools.Metadata.DatFiles.Test private static void ValidateMetadataDisk(Data.Models.Metadata.Disk? disk) { Assert.NotNull(disk); - Assert.Equal("flags", disk.ReadString(Data.Models.Metadata.Disk.FlagsKey)); - Assert.Equal("index", disk.ReadString(Data.Models.Metadata.Disk.IndexKey)); - Assert.Equal(HashType.MD5.ZeroString, disk.ReadString(Data.Models.Metadata.Disk.MD5Key)); - Assert.Equal("merge", disk.ReadString(Data.Models.Metadata.Disk.MergeKey)); + Assert.Equal("flags", disk.Flags); + Assert.Equal(12345, disk.Index); + Assert.Equal(HashType.MD5.ZeroString, disk.MD5); + Assert.Equal("merge", disk.Merge); Assert.Equal("name", disk.Name); Assert.True(disk.Optional); - Assert.Equal("region", disk.ReadString(Data.Models.Metadata.Disk.RegionKey)); - Assert.Equal(HashType.SHA1.ZeroString, disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)); + Assert.Equal("region", disk.Region); + Assert.Equal(HashType.SHA1.ZeroString, disk.SHA1); Assert.True(disk.Writable); } diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.cs index 662027c8..235002b2 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.cs @@ -1404,9 +1404,12 @@ namespace SabreTools.Metadata.DatFiles.Test }; machine.Write(Data.Models.Metadata.Machine.CategoryKey, "category"); - DatItem item = new Disk { Name = "name" }; - item.Write(Data.Models.Metadata.Disk.MD5Key, "md5"); - item.Write(Data.Models.Metadata.Disk.SHA1Key, "sha1"); + DatItem item = new Disk + { + Name = "name", + MD5 = "md5", + SHA1 = "sha1", + }; string actual = DatFile.FormatPrefixPostfix(item, machine, fix); Assert.Equal(expected, actual); @@ -1670,8 +1673,7 @@ namespace SabreTools.Metadata.DatFiles.Test public void GetDuplicateSuffix_Disk_MD5() { string hash = "XXXXXX"; - DatItem datItem = new Disk(); - datItem.Write(Data.Models.Metadata.Disk.MD5Key, hash); + DatItem datItem = new Disk { MD5 = hash }; string actual = DatFile.GetDuplicateSuffix(datItem); Assert.Equal($"_{hash}", actual); @@ -1681,8 +1683,7 @@ namespace SabreTools.Metadata.DatFiles.Test public void GetDuplicateSuffix_Disk_SHA1() { string hash = "XXXXXX"; - DatItem datItem = new Disk(); - datItem.Write(Data.Models.Metadata.Disk.SHA1Key, hash); + DatItem datItem = new Disk { SHA1 = hash }; string actual = DatFile.GetDuplicateSuffix(datItem); Assert.Equal($"_{hash}", actual); diff --git a/SabreTools.Metadata.DatFiles.Test/DatStatisticsTests.cs b/SabreTools.Metadata.DatFiles.Test/DatStatisticsTests.cs index c8bc7785..a03ed1cf 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatStatisticsTests.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatStatisticsTests.cs @@ -251,9 +251,12 @@ namespace SabreTools.Metadata.DatFiles.Test /// private static Disk CreateDisk() { - var disk = new Disk { Status = ItemStatus.Good }; - disk.Write(Data.Models.Metadata.Disk.MD5Key, HashType.MD5.ZeroString); - disk.Write(Data.Models.Metadata.Disk.SHA1Key, HashType.SHA1.ZeroString); + var disk = new Disk + { + Status = ItemStatus.Good, + MD5 = HashType.MD5.ZeroString, + SHA1 = HashType.SHA1.ZeroString, + }; return disk; } diff --git a/SabreTools.Metadata.DatFiles.Test/FormatsTests.cs b/SabreTools.Metadata.DatFiles.Test/FormatsTests.cs index d9e32108..5ea7c211 100644 --- a/SabreTools.Metadata.DatFiles.Test/FormatsTests.cs +++ b/SabreTools.Metadata.DatFiles.Test/FormatsTests.cs @@ -143,7 +143,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ nameof(Data.Models.Metadata.Disk.Name), - Data.Models.Metadata.Disk.SHA1Key, + nameof(Data.Models.Metadata.Disk.SHA1), ])); } @@ -427,7 +427,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ nameof(Data.Models.Metadata.Disk.Name), - Data.Models.Metadata.Disk.MD5Key, + nameof(Data.Models.Metadata.Disk.MD5), ])); } @@ -534,7 +534,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ nameof(Data.Models.Metadata.Disk.Name), - Data.Models.Metadata.Disk.SHA1Key, + nameof(Data.Models.Metadata.Disk.SHA1), ])); } @@ -726,7 +726,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ nameof(Data.Models.Metadata.Disk.Name), - Data.Models.Metadata.Disk.SHA1Key, + nameof(Data.Models.Metadata.Disk.SHA1), ])); } @@ -822,7 +822,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ nameof(Data.Models.Metadata.Disk.Name), - Data.Models.Metadata.Disk.SHA1Key, + nameof(Data.Models.Metadata.Disk.SHA1), ])); } @@ -1139,7 +1139,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ nameof(Data.Models.Metadata.Disk.Name), - Data.Models.Metadata.Disk.SHA1Key, + nameof(Data.Models.Metadata.Disk.SHA1), ])); } @@ -1391,7 +1391,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ nameof(Data.Models.Metadata.Disk.Name), - Data.Models.Metadata.Disk.SHA1Key, + nameof(Data.Models.Metadata.Disk.SHA1), ])); } @@ -1449,7 +1449,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ nameof(Data.Models.Metadata.Disk.Name), - Data.Models.Metadata.Disk.SHA1Key, + nameof(Data.Models.Metadata.Disk.SHA1), ])); } @@ -1507,7 +1507,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ nameof(Data.Models.Metadata.Disk.Name), - Data.Models.Metadata.Disk.SHA1Key, + nameof(Data.Models.Metadata.Disk.SHA1), ])); } diff --git a/SabreTools.Metadata.DatFiles.Test/ItemDictionaryDBTests.cs b/SabreTools.Metadata.DatFiles.Test/ItemDictionaryDBTests.cs index e750c4ee..294b6b6f 100644 --- a/SabreTools.Metadata.DatFiles.Test/ItemDictionaryDBTests.cs +++ b/SabreTools.Metadata.DatFiles.Test/ItemDictionaryDBTests.cs @@ -16,8 +16,11 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem disk = new Disk { Name = "item" }; - disk.Write(Data.Models.Metadata.Disk.SHA1Key, "deadbeef"); + DatItem disk = new Disk + { + Name = "item", + SHA1 = "deadbeef", + }; var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); diff --git a/SabreTools.Metadata.DatFiles.Test/ItemDictionaryTests.cs b/SabreTools.Metadata.DatFiles.Test/ItemDictionaryTests.cs index 8cb49110..4a317cfc 100644 --- a/SabreTools.Metadata.DatFiles.Test/ItemDictionaryTests.cs +++ b/SabreTools.Metadata.DatFiles.Test/ItemDictionaryTests.cs @@ -16,10 +16,13 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem disk = new Disk { Name = "item" }; - disk.Write(Data.Models.Metadata.Disk.SHA1Key, "deadbeef"); - disk.Source = source; - disk.Machine = machine; + DatItem disk = new Disk + { + Name = "item", + SHA1 = "deadbeef", + Source = source, + Machine = machine, + }; var dict = new ItemDictionary(); _ = dict.AddItem(disk, statsOnly: false); diff --git a/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs b/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs index dae18fed..4b04c48d 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs @@ -654,9 +654,11 @@ namespace SabreTools.Metadata.DatFiles if (filterRunner is not null && !filterRunner.Run(disk)) continue; - var diskItem = new Disk(disk, machine, source); - diskItem.Write(Disk.DiskAreaKey, diskAreaitem); - diskItem.Write(Disk.PartKey, partItem); + var diskItem = new Disk(disk, machine, source) + { + DiskArea = diskAreaitem, + Part = partItem, + }; AddItem(diskItem, statsOnly); // AddItemDB(diskItem, machineIndex, sourceIndex, statsOnly); diff --git a/SabreTools.Metadata.DatFiles/DatFile.Splitting.cs b/SabreTools.Metadata.DatFiles/DatFile.Splitting.cs index d7581fce..2bd079c9 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.Splitting.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.Splitting.cs @@ -297,7 +297,7 @@ namespace SabreTools.Metadata.DatFiles // Special disk handling if (item is Disk disk) { - string? mergeTag = disk.ReadString(Data.Models.Metadata.Disk.MergeKey); + string? mergeTag = disk.Merge; // If the merge tag exists and the parent already contains it, skip if (mergeTag is not null && GetItemsForBucket(cloneOf) @@ -433,7 +433,7 @@ namespace SabreTools.Metadata.DatFiles // Special disk handling if (item.Value is Disk disk) { - string? mergeTag = disk.ReadString(Data.Models.Metadata.Disk.MergeKey); + string? mergeTag = disk.Merge; // If the merge tag exists and the parent already contains it, skip if (mergeTag is not null && GetItemsForBucketDB(cloneOf).Values @@ -722,8 +722,7 @@ namespace SabreTools.Metadata.DatFiles continue; deviceReferences.Add(deviceReference); - var deviceRef = new DeviceRef(); - deviceRef.Name = deviceReference; + var deviceRef = new DeviceRef { Name = deviceReference }; deviceRef.CopyMachineInformation(copyFrom); Items.AddItem(deviceRef, statsOnly: false); } @@ -772,8 +771,7 @@ namespace SabreTools.Metadata.DatFiles continue; slotOptions.Add(slotOption); - var slotOptionItem = new SlotOption(); - slotOptionItem.DevName = slotOption; + var slotOptionItem = new SlotOption { DevName = slotOption }; slotOptionItem.CopyMachineInformation(copyFrom); var slotItem = new Slot(); @@ -887,8 +885,7 @@ namespace SabreTools.Metadata.DatFiles { if (!deviceReferences.Contains(deviceReference)) { - var deviceRef = new DeviceRef(); - deviceRef.Name = deviceReference; + var deviceRef = new DeviceRef { Name = deviceReference }; ItemsDB.AddItem(deviceRef, machine.Key, source.Key); } } @@ -943,8 +940,7 @@ namespace SabreTools.Metadata.DatFiles { if (!slotOptions.Contains(slotOption)) { - var slotOptionItem = new SlotOption(); - slotOptionItem.DevName = slotOption; + var slotOptionItem = new SlotOption { DevName = slotOption }; var slotItem = new Slot(); slotItem.Write(Data.Models.Metadata.Slot.SlotOptionKey, [slotOptionItem]); diff --git a/SabreTools.Metadata.DatFiles/DatFile.ToMetadata.cs b/SabreTools.Metadata.DatFiles/DatFile.ToMetadata.cs index 54564538..2b9ee580 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.ToMetadata.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.ToMetadata.cs @@ -164,17 +164,17 @@ namespace SabreTools.Metadata.DatFiles AppendToMachineKey(machine, Data.Models.Metadata.Machine.DiskKey, diskItem); // Add Part and DiskArea mappings - bool diskContainsPart = diskItem.ContainsKey(DatItems.Formats.Disk.PartKey); - bool diskContainsDiskArea = diskItem.ContainsKey(DatItems.Formats.Disk.DiskAreaKey); + bool diskContainsPart = disk.Part is not null; + bool diskContainsDiskArea = disk.DiskArea is not null; if (diskContainsPart && diskContainsDiskArea) { - var partItem = diskItem.Read(DatItems.Formats.Disk.PartKey); + var partItem = disk.Part; if (partItem is not null) { var partItemInternal = partItem.GetInternalClone(); partMappings[partItemInternal] = diskItem; - var diskAreaItem = diskItem.Read(DatItems.Formats.Disk.DiskAreaKey); + var diskAreaItem = disk.DiskArea; if (diskAreaItem is not null) diskAreaMappings[partItemInternal] = (diskAreaItem.GetInternalClone(), diskItem); } @@ -585,17 +585,17 @@ namespace SabreTools.Metadata.DatFiles AppendToMachineKey(machine, Data.Models.Metadata.Machine.DiskKey, diskItem); // Add Part and DiskArea mappings - bool diskContainsPart = diskItem.ContainsKey(DatItems.Formats.Disk.PartKey); - bool diskContainsDiskArea = diskItem.ContainsKey(DatItems.Formats.Disk.DiskAreaKey); + bool diskContainsPart = disk.Part is not null; + bool diskContainsDiskArea = disk.DiskArea is not null; if (diskContainsPart && diskContainsDiskArea) { - var partItem = diskItem.Read(DatItems.Formats.Disk.PartKey); + var partItem = disk.Part; if (partItem is not null) { var partItemInternal = partItem.GetInternalClone(); partMappings[partItemInternal] = diskItem; - var diskAreaItem = diskItem.Read(DatItems.Formats.Disk.DiskAreaKey); + var diskAreaItem = disk.DiskArea; if (diskAreaItem is not null) diskAreaMappings[partItemInternal] = (diskAreaItem.GetInternalClone(), diskItem); } diff --git a/SabreTools.Metadata.DatFiles/DatFile.cs b/SabreTools.Metadata.DatFiles/DatFile.cs index d63408b0..517d2bba 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.cs @@ -503,7 +503,7 @@ namespace SabreTools.Metadata.DatFiles if (item is Disk disk) { // We can only write out if there's a SHA-1 - string? sha1 = disk.ReadString(Data.Models.Metadata.Disk.SHA1Key); + string? sha1 = disk.SHA1; if (!string.IsNullOrEmpty(sha1)) { name = Utilities.GetDepotPath(sha1, Modifiers.OutputDepot.Depth)?.Replace('\\', '/'); @@ -606,8 +606,8 @@ namespace SabreTools.Metadata.DatFiles // Ensure we have the proper values for replacement if (item is Disk disk) { - md5 = disk.ReadString(Data.Models.Metadata.Disk.MD5Key) ?? string.Empty; - sha1 = disk.ReadString(Data.Models.Metadata.Disk.SHA1Key) ?? string.Empty; + md5 = disk.MD5 ?? string.Empty; + sha1 = disk.SHA1 ?? string.Empty; } else if (item is DatItems.Formats.File file) { @@ -1038,11 +1038,11 @@ namespace SabreTools.Metadata.DatFiles /// private static string GetDuplicateSuffix(Disk datItem) { - string? md5 = datItem.ReadString(Data.Models.Metadata.Disk.MD5Key); + string? md5 = datItem.MD5; if (!string.IsNullOrEmpty(md5)) return $"_{md5}"; - string? sha1 = datItem.ReadString(Data.Models.Metadata.Disk.SHA1Key); + string? sha1 = datItem.SHA1; if (!string.IsNullOrEmpty(sha1)) return $"_{sha1}"; diff --git a/SabreTools.Metadata.DatFiles/DatStatistics.cs b/SabreTools.Metadata.DatFiles/DatStatistics.cs index 2cc3a271..7bb127eb 100644 --- a/SabreTools.Metadata.DatFiles/DatStatistics.cs +++ b/SabreTools.Metadata.DatFiles/DatStatistics.cs @@ -330,8 +330,8 @@ namespace SabreTools.Metadata.DatFiles ItemStatus? status = disk.Status; if (status != ItemStatus.Nodump) { - AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) ? 0 : 1); - AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)) ? 0 : 1); + AddHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : 1); + AddHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : 1); } AddStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); @@ -459,8 +459,8 @@ namespace SabreTools.Metadata.DatFiles ItemStatus? status = disk.Status; if (status != ItemStatus.Nodump) { - RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key)) ? 0 : 1); + RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : 1); + RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : 1); } RemoveStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); diff --git a/SabreTools.Metadata.DatFiles/Formats/ClrMamePro.cs b/SabreTools.Metadata.DatFiles/Formats/ClrMamePro.cs index a2912b25..767cabe8 100644 --- a/SabreTools.Metadata.DatFiles/Formats/ClrMamePro.cs +++ b/SabreTools.Metadata.DatFiles/Formats/ClrMamePro.cs @@ -114,10 +114,10 @@ namespace SabreTools.Metadata.DatFiles.Formats case Disk disk: if (string.IsNullOrEmpty(disk.Name)) missingFields.Add(nameof(Data.Models.Metadata.Disk.Name)); - if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key))) + if (string.IsNullOrEmpty(disk.MD5) + && string.IsNullOrEmpty(disk.SHA1)) { - missingFields.Add(Data.Models.Metadata.Disk.SHA1Key); + missingFields.Add(nameof(Data.Models.Metadata.Disk.SHA1)); } break; diff --git a/SabreTools.Metadata.DatFiles/Formats/Listrom.cs b/SabreTools.Metadata.DatFiles/Formats/Listrom.cs index 1c12704f..290caf11 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Listrom.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Listrom.cs @@ -37,10 +37,10 @@ namespace SabreTools.Metadata.DatFiles.Formats switch (datItem) { case Disk disk: - if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key))) + if (string.IsNullOrEmpty(disk.MD5) + && string.IsNullOrEmpty(disk.SHA1)) { - missingFields.Add(Data.Models.Metadata.Disk.SHA1Key); + missingFields.Add(nameof(Data.Models.Metadata.Disk.SHA1)); } break; diff --git a/SabreTools.Metadata.DatFiles/Formats/Listxml.cs b/SabreTools.Metadata.DatFiles/Formats/Listxml.cs index 6188a981..65b7eb7c 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Listxml.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Listxml.cs @@ -282,10 +282,10 @@ namespace SabreTools.Metadata.DatFiles.Formats case Disk disk: if (string.IsNullOrEmpty(disk.Name)) missingFields.Add(nameof(Data.Models.Metadata.Disk.Name)); - if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key))) + if (string.IsNullOrEmpty(disk.MD5) + && string.IsNullOrEmpty(disk.SHA1)) { - missingFields.Add(Data.Models.Metadata.Disk.SHA1Key); + missingFields.Add(nameof(Data.Models.Metadata.Disk.SHA1)); } break; diff --git a/SabreTools.Metadata.DatFiles/Formats/Logiqx.cs b/SabreTools.Metadata.DatFiles/Formats/Logiqx.cs index e57375ed..7e5c0385 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Logiqx.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Logiqx.cs @@ -306,10 +306,10 @@ namespace SabreTools.Metadata.DatFiles.Formats case Disk disk: if (string.IsNullOrEmpty(disk.Name)) missingFields.Add(nameof(Data.Models.Metadata.Disk.Name)); - if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key))) + if (string.IsNullOrEmpty(disk.MD5) + && string.IsNullOrEmpty(disk.SHA1)) { - missingFields.Add(Data.Models.Metadata.Disk.SHA1Key); + missingFields.Add(nameof(Data.Models.Metadata.Disk.SHA1)); } break; diff --git a/SabreTools.Metadata.DatFiles/Formats/Md5File.cs b/SabreTools.Metadata.DatFiles/Formats/Md5File.cs index 1814519f..bfa09d09 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Md5File.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Md5File.cs @@ -40,8 +40,8 @@ namespace SabreTools.Metadata.DatFiles.Formats switch (datItem) { case Disk disk: - if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key))) - missingFields.Add(Data.Models.Metadata.Disk.MD5Key); + if (string.IsNullOrEmpty(disk.MD5)) + missingFields.Add(nameof(Data.Models.Metadata.Disk.MD5)); break; case Media medium: diff --git a/SabreTools.Metadata.DatFiles/Formats/SeparatedValue.cs b/SabreTools.Metadata.DatFiles/Formats/SeparatedValue.cs index f8309329..1c253b65 100644 --- a/SabreTools.Metadata.DatFiles/Formats/SeparatedValue.cs +++ b/SabreTools.Metadata.DatFiles/Formats/SeparatedValue.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using SabreTools.Metadata.DatItems; using SabreTools.Metadata.DatItems.Formats; @@ -73,10 +73,10 @@ namespace SabreTools.Metadata.DatFiles.Formats switch (datItem) { case Disk disk: - if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key))) + if (string.IsNullOrEmpty(disk.MD5) + && string.IsNullOrEmpty(disk.SHA1)) { - missingFields.Add(Data.Models.Metadata.Disk.SHA1Key); + missingFields.Add(nameof(Data.Models.Metadata.Disk.SHA1)); } break; diff --git a/SabreTools.Metadata.DatFiles/Formats/Sha1File.cs b/SabreTools.Metadata.DatFiles/Formats/Sha1File.cs index d8a4296d..8cb8a639 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Sha1File.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Sha1File.cs @@ -40,8 +40,8 @@ namespace SabreTools.Metadata.DatFiles.Formats switch (datItem) { case Disk disk: - if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key))) - missingFields.Add(Data.Models.Metadata.Disk.SHA1Key); + if (string.IsNullOrEmpty(disk.SHA1)) + missingFields.Add(nameof(Data.Models.Metadata.Disk.SHA1)); break; case Media medium: diff --git a/SabreTools.Metadata.DatFiles/Formats/SoftwareList.cs b/SabreTools.Metadata.DatFiles/Formats/SoftwareList.cs index 6120b5e0..871dce80 100644 --- a/SabreTools.Metadata.DatFiles/Formats/SoftwareList.cs +++ b/SabreTools.Metadata.DatFiles/Formats/SoftwareList.cs @@ -145,9 +145,9 @@ namespace SabreTools.Metadata.DatFiles.Formats } else { - if (string.IsNullOrEmpty(disk.Read(Disk.PartKey)!.Name)) + if (string.IsNullOrEmpty(disk.Part!.Name)) missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); - if (string.IsNullOrEmpty(disk.Read(Disk.PartKey)!.Interface)) + if (string.IsNullOrEmpty(disk.Part.Interface)) missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); } @@ -157,7 +157,7 @@ namespace SabreTools.Metadata.DatFiles.Formats } else { - if (string.IsNullOrEmpty(disk.Read(Disk.DiskAreaKey)!.Name)) + if (string.IsNullOrEmpty(disk.DiskArea!.Name)) missingFields.Add(nameof(Data.Models.Metadata.DiskArea.Name)); } diff --git a/SabreTools.Metadata.DatFiles/ItemDictionary.cs b/SabreTools.Metadata.DatFiles/ItemDictionary.cs index 7525cbcf..809205eb 100644 --- a/SabreTools.Metadata.DatFiles/ItemDictionary.cs +++ b/SabreTools.Metadata.DatFiles/ItemDictionary.cs @@ -99,8 +99,8 @@ namespace SabreTools.Metadata.DatFiles { // If the file has aboslutely no hashes, skip and log if (disk.Status != ItemStatus.Nodump - && string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key))) + && string.IsNullOrEmpty(disk.MD5) + && string.IsNullOrEmpty(disk.SHA1)) { _logger.Verbose($"Incomplete entry for '{disk.Name}' will be output as nodump"); disk.Status = ItemStatus.Nodump; diff --git a/SabreTools.Metadata.DatFiles/ItemDictionaryDB.cs b/SabreTools.Metadata.DatFiles/ItemDictionaryDB.cs index 859bb236..87fbb4a3 100644 --- a/SabreTools.Metadata.DatFiles/ItemDictionaryDB.cs +++ b/SabreTools.Metadata.DatFiles/ItemDictionaryDB.cs @@ -188,8 +188,8 @@ namespace SabreTools.Metadata.DatFiles { // If the file has aboslutely no hashes, skip and log if (disk.Status != ItemStatus.Nodump - && string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key))) + && string.IsNullOrEmpty(disk.MD5) + && string.IsNullOrEmpty(disk.SHA1)) { _logger.Verbose($"Incomplete entry for '{disk.Name}' will be output as nodump"); disk.Status = ItemStatus.Nodump; diff --git a/SabreTools.Metadata.DatItems.Test/Formats/DiskTests.cs b/SabreTools.Metadata.DatItems.Test/Formats/DiskTests.cs index a47ba12d..ecaddbed 100644 --- a/SabreTools.Metadata.DatItems.Test/Formats/DiskTests.cs +++ b/SabreTools.Metadata.DatItems.Test/Formats/DiskTests.cs @@ -10,39 +10,36 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void ConvertToRomTest() { - DiskArea diskArea = new DiskArea - { - Name = "name" - }; + DiskArea diskArea = new DiskArea { Name = "name" }; Machine machine = new Machine { Name = "name" }; - Part part = new Part + Part part = new Part { Name = "name" }; + + Source source = new Source(0, "source"); + + Disk disk = new Disk { - Name = "name" + Name = "name", + DiskArea = diskArea, + Merge = "merge", + Region = "region", + Status = Data.Models.Metadata.ItemStatus.Good, + Optional = true, + MD5 = HashType.MD5.ZeroString, + SHA1 = HashType.SHA1.ZeroString, + DupeType = DupeType.All | DupeType.External, + Machine = machine, + Part = part, + RemoveFlag = false, + Source = source, }; - Source source = new Source(0, "XXXXXX"); - - Disk disk = new Disk { Name = "name" }; - disk.Write(Disk.DiskAreaKey, diskArea); - disk.Write(Data.Models.Metadata.Disk.MergeKey, "XXXXXX"); - disk.Write(Data.Models.Metadata.Disk.RegionKey, "XXXXXX"); - disk.Status = Data.Models.Metadata.ItemStatus.Good; - disk.Optional = true; - disk.Write(Data.Models.Metadata.Disk.MD5Key, HashType.MD5.ZeroString); - disk.Write(Data.Models.Metadata.Disk.SHA1Key, HashType.SHA1.ZeroString); - disk.DupeType = DupeType.All | DupeType.External; - disk.Machine = machine; - disk.Write(Disk.PartKey, part); - disk.RemoveFlag = false; - disk.Source = source; - Rom actual = disk.ConvertToRom(); Assert.Equal("name.chd", actual.Name); - Assert.Equal("XXXXXX", actual.ReadString(Data.Models.Metadata.Rom.MergeKey)); - Assert.Equal("XXXXXX", actual.ReadString(Data.Models.Metadata.Rom.RegionKey)); + Assert.Equal("merge", actual.ReadString(Data.Models.Metadata.Rom.MergeKey)); + Assert.Equal("region", actual.ReadString(Data.Models.Metadata.Rom.RegionKey)); Assert.Equal(Data.Models.Metadata.ItemStatus.Good, actual.Status); Assert.Equal(true, actual.Optional); Assert.Equal(HashType.MD5.ZeroString, actual.ReadString(Data.Models.Metadata.Rom.MD5Key)); @@ -66,7 +63,7 @@ namespace SabreTools.Metadata.DatItems.Formats.Test Source? actualSource = actual.Source; Assert.NotNull(actualSource); Assert.Equal(0, actualSource.Index); - Assert.Equal("XXXXXX", actualSource.Name); + Assert.Equal("source", actualSource.Name); } #endregion @@ -81,8 +78,8 @@ namespace SabreTools.Metadata.DatItems.Formats.Test self.FillMissingInformation(other); - Assert.Null(self.ReadString(Data.Models.Metadata.Disk.MD5Key)); - Assert.Null(self.ReadString(Data.Models.Metadata.Disk.SHA1Key)); + Assert.Null(self.MD5); + Assert.Null(self.SHA1); } [Fact] @@ -90,14 +87,16 @@ namespace SabreTools.Metadata.DatItems.Formats.Test { Disk self = new Disk(); - Disk other = new Disk(); - other.Write(Data.Models.Metadata.Disk.MD5Key, "XXXXXX"); - other.Write(Data.Models.Metadata.Disk.SHA1Key, "XXXXXX"); + Disk other = new Disk + { + MD5 = "md5", + SHA1 = "sha1", + }; self.FillMissingInformation(other); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Disk.MD5Key)); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Disk.SHA1Key)); + Assert.Equal("md5", self.MD5); + Assert.Equal("sha1", self.SHA1); } #endregion @@ -115,9 +114,11 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_MD5_True() { - Disk self = new Disk(); - self.Write(Data.Models.Metadata.Disk.MD5Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Disk.SHA1Key, string.Empty); + Disk self = new Disk + { + MD5 = "md5", + SHA1 = string.Empty, + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -126,9 +127,11 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_SHA1_True() { - Disk self = new Disk(); - self.Write(Data.Models.Metadata.Disk.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Disk.SHA1Key, "XXXXXX"); + Disk self = new Disk + { + MD5 = string.Empty, + SHA1 = "sha1", + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -137,9 +140,11 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_All_True() { - Disk self = new Disk(); - self.Write(Data.Models.Metadata.Disk.MD5Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Disk.SHA1Key, "XXXXXX"); + Disk self = new Disk + { + MD5 = "md5", + SHA1 = "sha1", + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -160,9 +165,11 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_NonZeroHash_False() { - Disk self = new Disk(); - self.Write(Data.Models.Metadata.Disk.MD5Key, "DEADBEEF"); - self.Write(Data.Models.Metadata.Disk.SHA1Key, "DEADBEEF"); + Disk self = new Disk + { + MD5 = "DEADBEEF", + SHA1 = "DEADBEEF", + }; bool actual = self.HasZeroHash(); Assert.False(actual); @@ -171,9 +178,11 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroMD5_True() { - Disk self = new Disk(); - self.Write(Data.Models.Metadata.Disk.MD5Key, HashType.MD5.ZeroString); - self.Write(Data.Models.Metadata.Disk.SHA1Key, string.Empty); + Disk self = new Disk + { + MD5 = HashType.MD5.ZeroString, + SHA1 = string.Empty, + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -182,9 +191,11 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroSHA1_True() { - Disk self = new Disk(); - self.Write(Data.Models.Metadata.Disk.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Disk.SHA1Key, HashType.SHA1.ZeroString); + Disk self = new Disk + { + MD5 = string.Empty, + SHA1 = HashType.SHA1.ZeroString, + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -193,9 +204,11 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroAll_True() { - Disk self = new Disk(); - self.Write(Data.Models.Metadata.Disk.MD5Key, HashType.MD5.ZeroString); - self.Write(Data.Models.Metadata.Disk.SHA1Key, HashType.SHA1.ZeroString); + Disk self = new Disk + { + MD5 = HashType.MD5.ZeroString, + SHA1 = HashType.SHA1.ZeroString, + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -257,9 +270,11 @@ namespace SabreTools.Metadata.DatItems.Formats.Test Machine machine = new Machine { Name = "Machine" }; - DatItem datItem = new Disk(); - datItem.Write(Data.Models.Metadata.Disk.MD5Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Disk.SHA1Key, "DEADBEEF"); + DatItem datItem = new Disk + { + MD5 = "DEADBEEF", + SHA1 = "DEADBEEF", + }; string actual = datItem.GetKey(bucketedBy, machine, source, lower, norename); Assert.Equal(expected, actual); diff --git a/SabreTools.Metadata.DatItems/Formats/Disk.cs b/SabreTools.Metadata.DatItems/Formats/Disk.cs index 74bcc47d..fb7caf1d 100644 --- a/SabreTools.Metadata.DatItems/Formats/Disk.cs +++ b/SabreTools.Metadata.DatItems/Formats/Disk.cs @@ -12,35 +12,41 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("disk"), XmlRoot("disk")] public sealed class Disk : DatItem { - #region Constants - - /// - /// Non-standard key for inverted logic - /// - public const string DiskAreaKey = "DISKAREA"; - - /// - /// Non-standard key for inverted logic - /// - public const string PartKey = "PART"; - - #endregion - #region Fields + public DiskArea? DiskArea { get; set; } + [JsonIgnore] public bool DiskAreaSpecified + => DiskArea is not null && !string.IsNullOrEmpty(DiskArea.Name); + + public string? Flags { - get - { - var diskArea = Read(DiskAreaKey); - return diskArea is not null && !string.IsNullOrEmpty(diskArea.Name); - } + get => (_internal as Data.Models.Metadata.Disk)?.Flags; + set => (_internal as Data.Models.Metadata.Disk)?.Flags = value; + } + + public long? Index + { + get => (_internal as Data.Models.Metadata.Disk)?.Index; + set => (_internal as Data.Models.Metadata.Disk)?.Index = value; } /// /> public override ItemType ItemType => ItemType.Disk; + public string? MD5 + { + get => (_internal as Data.Models.Metadata.Disk)?.MD5; + set => (_internal as Data.Models.Metadata.Disk)?.MD5 = value; + } + + public string? Merge + { + get => (_internal as Data.Models.Metadata.Disk)?.Merge; + set => (_internal as Data.Models.Metadata.Disk)?.Merge = value; + } + public string? Name { get => (_internal as Data.Models.Metadata.Disk)?.Name; @@ -53,18 +59,31 @@ namespace SabreTools.Metadata.DatItems.Formats set => (_internal as Data.Models.Metadata.Disk)?.Optional = value; } + public Part? Part { get; set; } + [JsonIgnore] public bool PartSpecified { get { - var part = Read(PartKey); - return part is not null - && (!string.IsNullOrEmpty(part.Name) - || !string.IsNullOrEmpty(part.Interface)); + return Part is not null + && (!string.IsNullOrEmpty(Part.Name) + || !string.IsNullOrEmpty(Part.Interface)); } } + public string? Region + { + get => (_internal as Data.Models.Metadata.Disk)?.Region; + set => (_internal as Data.Models.Metadata.Disk)?.Region = value; + } + + public string? SHA1 + { + get => (_internal as Data.Models.Metadata.Disk)?.SHA1; + set => (_internal as Data.Models.Metadata.Disk)?.SHA1 = value; + } + public ItemStatus? Status { get => (_internal as Data.Models.Metadata.Disk)?.Status; @@ -92,13 +111,11 @@ namespace SabreTools.Metadata.DatItems.Formats DupeType = 0x00; // Process hash values - string? md5 = ReadString(Data.Models.Metadata.Disk.MD5Key); - if (md5 is not null) - Write(Data.Models.Metadata.Disk.MD5Key, TextHelper.NormalizeMD5(md5)); + if (MD5 is not null) + MD5 = TextHelper.NormalizeMD5(MD5); - string? sha1 = ReadString(Data.Models.Metadata.Disk.SHA1Key); - if (sha1 is not null) - Write(Data.Models.Metadata.Disk.SHA1Key, TextHelper.NormalizeSHA1(sha1)); + if (SHA1 is not null) + SHA1 = TextHelper.NormalizeSHA1(SHA1); } public Disk(Data.Models.Metadata.Disk item, Machine machine, Source source) : this(item) @@ -123,18 +140,15 @@ namespace SabreTools.Metadata.DatItems.Formats var rom = new Rom(_internal.ConvertToRom()!); // Create a DataArea if there was an existing DiskArea - var diskArea = Read(DiskAreaKey); - if (diskArea is not null) + if (DiskArea is not null) { - var dataArea = new DataArea(); - dataArea.Name = diskArea.Name; - + var dataArea = new DataArea { Name = DiskArea.Name }; rom.Write(Rom.DataAreaKey, dataArea); } rom.DupeType = DupeType; rom.Machine = Machine?.Clone() as Machine; - rom.Write(Rom.PartKey, Read(PartKey)?.Clone() as Part); + rom.Write(Rom.PartKey, Part?.Clone() as Part); rom.RemoveFlag = RemoveFlag; rom.Source = Source?.Clone() as Source; @@ -179,11 +193,11 @@ namespace SabreTools.Metadata.DatItems.Formats switch (bucketedBy) { case ItemKey.MD5: - key = ReadString(Data.Models.Metadata.Disk.MD5Key); + key = MD5; break; case ItemKey.SHA1: - key = ReadString(Data.Models.Metadata.Disk.SHA1Key); + key = SHA1; break; // Let the base handle generic stuff diff --git a/SabreTools.Metadata.Filter/FilterObject.cs b/SabreTools.Metadata.Filter/FilterObject.cs index c8f9b298..e1cdb2d7 100644 --- a/SabreTools.Metadata.Filter/FilterObject.cs +++ b/SabreTools.Metadata.Filter/FilterObject.cs @@ -504,9 +504,27 @@ namespace SabreTools.Metadata.Filter checkValue = item.Value; return true; + case Disk item when fieldName == "flags": + checkValue = item.Flags; + return true; + case Disk item when fieldName == "index": + checkValue = item.Index?.ToString(); + return true; + case Disk item when fieldName == "md5": + checkValue = item.MD5; + return true; + case Disk item when fieldName == "merge": + checkValue = item.Merge; + return true; case Disk item when fieldName == "optional": checkValue = item.Optional.FromYesNo(); return true; + case Disk item when fieldName == "region": + checkValue = item.Region; + return true; + case Disk item when fieldName == "sha1": + checkValue = item.SHA1; + return true; case Disk item when fieldName == "status": checkValue = item.Status?.AsStringValue(); return true; diff --git a/SabreTools.Metadata.Test/DictionaryBaseExtensionsTests.cs b/SabreTools.Metadata.Test/DictionaryBaseExtensionsTests.cs index 4eba1f60..e17b7629 100644 --- a/SabreTools.Metadata.Test/DictionaryBaseExtensionsTests.cs +++ b/SabreTools.Metadata.Test/DictionaryBaseExtensionsTests.cs @@ -24,15 +24,15 @@ namespace SabreTools.Metadata.Test { Status = ItemStatus.Nodump, Name = "name", - [Disk.MD5Key] = string.Empty, - [Disk.SHA1Key] = string.Empty, + MD5 = string.Empty, + SHA1 = string.Empty, }; DictionaryBase other = new Disk { Status = ItemStatus.Nodump, Name = "name", - [Disk.MD5Key] = string.Empty, - [Disk.SHA1Key] = string.Empty, + MD5 = string.Empty, + SHA1 = string.Empty, }; bool actual = self.EqualTo(other); @@ -45,14 +45,14 @@ namespace SabreTools.Metadata.Test DictionaryBase self = new Disk { Name = "name", - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = string.Empty, + MD5 = "XXXXXX", + SHA1 = string.Empty, }; DictionaryBase other = new Disk { Name = "name", - [Disk.MD5Key] = string.Empty, - [Disk.SHA1Key] = "XXXXXX", + MD5 = string.Empty, + SHA1 = "XXXXXX", }; bool actual = self.EqualTo(other); @@ -65,14 +65,14 @@ namespace SabreTools.Metadata.Test DictionaryBase self = new Disk { Name = "XXXXXX1", - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = string.Empty, + MD5 = "XXXXXX", + SHA1 = string.Empty, }; DictionaryBase other = new Disk { Name = "XXXXXX2", - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", }; bool actual = self.EqualTo(other); @@ -85,14 +85,14 @@ namespace SabreTools.Metadata.Test DictionaryBase self = new Disk { Name = "XXXXXX1", - [Disk.MD5Key] = string.Empty, - [Disk.SHA1Key] = "XXXXXX", + MD5 = string.Empty, + SHA1 = "XXXXXX", }; DictionaryBase other = new Disk { Name = "XXXXXX2", - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", }; bool actual = self.EqualTo(other); @@ -105,14 +105,14 @@ namespace SabreTools.Metadata.Test DictionaryBase self = new Disk { Name = "XXXXXX1", - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", }; DictionaryBase other = new Disk { Name = "XXXXXX2", - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", }; bool actual = self.EqualTo(other); diff --git a/SabreTools.Serialization.CrossModel.Test/ClrMameProTests.cs b/SabreTools.Serialization.CrossModel.Test/ClrMameProTests.cs index e585e699..9dc537d1 100644 --- a/SabreTools.Serialization.CrossModel.Test/ClrMameProTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/ClrMameProTests.cs @@ -128,11 +128,11 @@ namespace SabreTools.Serialization.CrossModel.Test var disk = new Data.Models.ClrMamePro.Disk { Name = "name", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - Merge = "XXXXXX", + MD5 = "md5", + SHA1 = "sha1", + Merge = "merge", Status = Data.Models.Metadata.ItemStatus.Good, - Flags = "XXXXXX", + Flags = "flags", }; var sample = new Data.Models.ClrMamePro.Sample @@ -395,11 +395,11 @@ namespace SabreTools.Serialization.CrossModel.Test { Assert.NotNull(disk); Assert.Equal("name", disk.Name); - Assert.Equal("XXXXXX", disk.MD5); - Assert.Equal("XXXXXX", disk.SHA1); - Assert.Equal("XXXXXX", disk.Merge); + Assert.Equal("md5", disk.MD5); + Assert.Equal("sha1", disk.SHA1); + Assert.Equal("merge", disk.Merge); Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status); - Assert.Equal("XXXXXX", disk.Flags); + Assert.Equal("flags", disk.Flags); } /// diff --git a/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs b/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs index 525728fc..f5cfc37c 100644 --- a/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs @@ -89,11 +89,11 @@ namespace SabreTools.Serialization.CrossModel.Test var disk = new Data.Models.Listxml.Disk { Name = "name", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - Merge = "XXXXXX", - Region = "XXXXXX", - Index = "XXXXXX", + MD5 = "md5", + SHA1 = "sha1", + Merge = "merge", + Region = "region", + Index = 12345, Writable = true, Status = Data.Models.Metadata.ItemStatus.Good, Optional = true, @@ -505,11 +505,11 @@ namespace SabreTools.Serialization.CrossModel.Test { Assert.NotNull(disk); Assert.Equal("name", disk.Name); - Assert.Equal("XXXXXX", disk.MD5); - Assert.Equal("XXXXXX", disk.SHA1); - Assert.Equal("XXXXXX", disk.Merge); - Assert.Equal("XXXXXX", disk.Region); - Assert.Equal("XXXXXX", disk.Index); + Assert.Equal("md5", disk.MD5); + Assert.Equal("sha1", disk.SHA1); + Assert.Equal("merge", disk.Merge); + Assert.Equal("region", disk.Region); + Assert.Equal(12345, disk.Index); Assert.Equal(true, disk.Writable); Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status); Assert.Equal(true, disk.Optional); diff --git a/SabreTools.Serialization.CrossModel.Test/M1Tests.cs b/SabreTools.Serialization.CrossModel.Test/M1Tests.cs index 73453a6b..4f8d42ad 100644 --- a/SabreTools.Serialization.CrossModel.Test/M1Tests.cs +++ b/SabreTools.Serialization.CrossModel.Test/M1Tests.cs @@ -85,11 +85,11 @@ namespace SabreTools.Serialization.CrossModel.Test var disk = new Data.Models.Listxml.Disk { Name = "name", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - Merge = "XXXXXX", - Region = "XXXXXX", - Index = "XXXXXX", + MD5 = "md5", + SHA1 = "sha1", + Merge = "merge", + Region = "region", + Index = 12345, Writable = true, Status = Data.Models.Metadata.ItemStatus.Good, Optional = true, @@ -499,11 +499,11 @@ namespace SabreTools.Serialization.CrossModel.Test { Assert.NotNull(disk); Assert.Equal("name", disk.Name); - Assert.Equal("XXXXXX", disk.MD5); - Assert.Equal("XXXXXX", disk.SHA1); - Assert.Equal("XXXXXX", disk.Merge); - Assert.Equal("XXXXXX", disk.Region); - Assert.Equal("XXXXXX", disk.Index); + Assert.Equal("md5", disk.MD5); + Assert.Equal("sha1", disk.SHA1); + Assert.Equal("merge", disk.Merge); + Assert.Equal("region", disk.Region); + Assert.Equal(12345, disk.Index); Assert.Equal(true, disk.Writable); Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status); Assert.Equal(true, disk.Optional); diff --git a/SabreTools.Serialization.CrossModel.Test/MessTests.cs b/SabreTools.Serialization.CrossModel.Test/MessTests.cs index cefd38d2..d42345ff 100644 --- a/SabreTools.Serialization.CrossModel.Test/MessTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/MessTests.cs @@ -85,11 +85,11 @@ namespace SabreTools.Serialization.CrossModel.Test var disk = new Data.Models.Listxml.Disk { Name = "name", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - Merge = "XXXXXX", - Region = "XXXXXX", - Index = "XXXXXX", + MD5 = "md5", + SHA1 = "sha1", + Merge = "merge", + Region = "region", + Index = 12345, Writable = true, Status = Data.Models.Metadata.ItemStatus.Good, Optional = true, @@ -499,11 +499,11 @@ namespace SabreTools.Serialization.CrossModel.Test { Assert.NotNull(disk); Assert.Equal("name", disk.Name); - Assert.Equal("XXXXXX", disk.MD5); - Assert.Equal("XXXXXX", disk.SHA1); - Assert.Equal("XXXXXX", disk.Merge); - Assert.Equal("XXXXXX", disk.Region); - Assert.Equal("XXXXXX", disk.Index); + Assert.Equal("md5", disk.MD5); + Assert.Equal("sha1", disk.SHA1); + Assert.Equal("merge", disk.Merge); + Assert.Equal("region", disk.Region); + Assert.Equal(12345, disk.Index); Assert.Equal(true, disk.Writable); Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status); Assert.Equal(true, disk.Optional); diff --git a/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs b/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs index 512753d8..ed56c002 100644 --- a/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs @@ -197,11 +197,11 @@ namespace SabreTools.Serialization.CrossModel var disk = new Disk { Name = item.Name, - MD5 = item.ReadString(Data.Models.Metadata.Disk.MD5Key), - SHA1 = item.ReadString(Data.Models.Metadata.Disk.SHA1Key), - Merge = item.ReadString(Data.Models.Metadata.Disk.MergeKey), + MD5 = item.MD5, + SHA1 = item.SHA1, + Merge = item.Merge, Status = item.Status, - Flags = item.ReadString(Data.Models.Metadata.Disk.FlagsKey), + Flags = item.Flags, }; return disk; } diff --git a/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs b/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs index cf3e28ea..1381c51d 100644 --- a/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs @@ -210,11 +210,11 @@ namespace SabreTools.Serialization.CrossModel var disk = new Data.Models.Metadata.Disk { Name = item.Name, - [Data.Models.Metadata.Disk.MD5Key] = item.MD5, - [Data.Models.Metadata.Disk.SHA1Key] = item.SHA1, - [Data.Models.Metadata.Disk.MergeKey] = item.Merge, + MD5 = item.MD5, + SHA1 = item.SHA1, + Merge = item.Merge, Status = item.Status, - [Data.Models.Metadata.Disk.FlagsKey] = item.Flags, + Flags = item.Flags, }; return disk; } diff --git a/SabreTools.Serialization.CrossModel/Listrom.Deserializer.cs b/SabreTools.Serialization.CrossModel/Listrom.Deserializer.cs index e37f8aa3..db875814 100644 --- a/SabreTools.Serialization.CrossModel/Listrom.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/Listrom.Deserializer.cs @@ -56,8 +56,8 @@ namespace SabreTools.Serialization.CrossModel var row = new Row { Name = item.Name, - MD5 = item.ReadString(Data.Models.Metadata.Disk.MD5Key), - SHA1 = item.ReadString(Data.Models.Metadata.Disk.SHA1Key), + MD5 = item.MD5, + SHA1 = item.SHA1, }; if (item.Status == Data.Models.Metadata.ItemStatus.Nodump) diff --git a/SabreTools.Serialization.CrossModel/Listrom.Serializer.cs b/SabreTools.Serialization.CrossModel/Listrom.Serializer.cs index 94c44e35..6419e27f 100644 --- a/SabreTools.Serialization.CrossModel/Listrom.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/Listrom.Serializer.cs @@ -84,8 +84,8 @@ namespace SabreTools.Serialization.CrossModel var disk = new Data.Models.Metadata.Disk { Name = item.Name, - [Data.Models.Metadata.Disk.MD5Key] = item.MD5, - [Data.Models.Metadata.Disk.SHA1Key] = item.SHA1, + MD5 = item.MD5, + SHA1 = item.SHA1, }; if (item.NoGoodDumpKnown) diff --git a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs index 095d4997..3ac33a38 100644 --- a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs @@ -404,11 +404,11 @@ namespace SabreTools.Serialization.CrossModel var disk = new Disk { Name = item.Name, - MD5 = item.ReadString(Data.Models.Metadata.Disk.MD5Key), - SHA1 = item.ReadString(Data.Models.Metadata.Disk.SHA1Key), - Merge = item.ReadString(Data.Models.Metadata.Disk.MergeKey), - Region = item.ReadString(Data.Models.Metadata.Disk.RegionKey), - Index = item.ReadString(Data.Models.Metadata.Disk.IndexKey), + MD5 = item.MD5, + SHA1 = item.SHA1, + Merge = item.Merge, + Region = item.Region, + Index = item.Index, Writable = item.Writable, Status = item.Status, Optional = item.Optional, diff --git a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs index b810bfd2..6a5a8a82 100644 --- a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs @@ -427,11 +427,11 @@ namespace SabreTools.Serialization.CrossModel var disk = new Data.Models.Metadata.Disk { Name = item.Name, - [Data.Models.Metadata.Disk.MD5Key] = item.MD5, - [Data.Models.Metadata.Disk.SHA1Key] = item.SHA1, - [Data.Models.Metadata.Disk.MergeKey] = item.Merge, - [Data.Models.Metadata.Disk.RegionKey] = item.Region, - [Data.Models.Metadata.Disk.IndexKey] = item.Index, + MD5 = item.MD5, + SHA1 = item.SHA1, + Merge = item.Merge, + Region = item.Region, + Index = item.Index, Writable = item.Writable, Status = item.Status, Optional = item.Optional, diff --git a/SabreTools.Serialization.CrossModel/Logiqx.Deserializer.cs b/SabreTools.Serialization.CrossModel/Logiqx.Deserializer.cs index 126d84b0..06f44fd3 100644 --- a/SabreTools.Serialization.CrossModel/Logiqx.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/Logiqx.Deserializer.cs @@ -233,11 +233,11 @@ namespace SabreTools.Serialization.CrossModel var disk = new Disk { Name = item.Name, - MD5 = item.ReadString(Data.Models.Metadata.Disk.MD5Key), - SHA1 = item.ReadString(Data.Models.Metadata.Disk.SHA1Key), - Merge = item.ReadString(Data.Models.Metadata.Disk.MergeKey), + MD5 = item.MD5, + SHA1 = item.SHA1, + Merge = item.Merge, Status = item.Status, - Region = item.ReadString(Data.Models.Metadata.Disk.RegionKey), + Region = item.Region, }; return disk; } diff --git a/SabreTools.Serialization.CrossModel/Logiqx.Serializer.cs b/SabreTools.Serialization.CrossModel/Logiqx.Serializer.cs index 9d4fc753..6887a903 100644 --- a/SabreTools.Serialization.CrossModel/Logiqx.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/Logiqx.Serializer.cs @@ -227,11 +227,11 @@ namespace SabreTools.Serialization.CrossModel var disk = new Data.Models.Metadata.Disk { Name = item.Name, - [Data.Models.Metadata.Disk.MD5Key] = item.MD5, - [Data.Models.Metadata.Disk.SHA1Key] = item.SHA1, - [Data.Models.Metadata.Disk.MergeKey] = item.Merge, + MD5 = item.MD5, + SHA1 = item.SHA1, + Merge = item.Merge, Status = item.Status, - [Data.Models.Metadata.Disk.RegionKey] = item.Region, + Region = item.Region, }; return disk; } diff --git a/SabreTools.Serialization.CrossModel/SeparatedValue.Deserializer.cs b/SabreTools.Serialization.CrossModel/SeparatedValue.Deserializer.cs index acc2cfdc..664c4757 100644 --- a/SabreTools.Serialization.CrossModel/SeparatedValue.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/SeparatedValue.Deserializer.cs @@ -86,8 +86,8 @@ namespace SabreTools.Serialization.CrossModel DiskName = item.Name, Size = null, CRC = null, - MD5 = item.ReadString(Data.Models.Metadata.Disk.MD5Key), - SHA1 = item.ReadString(Data.Models.Metadata.Disk.SHA1Key), + MD5 = item.MD5, + SHA1 = item.SHA1, SHA256 = null, SHA384 = null, SHA512 = null, diff --git a/SabreTools.Serialization.CrossModel/SeparatedValue.Serializer.cs b/SabreTools.Serialization.CrossModel/SeparatedValue.Serializer.cs index 89ce378a..bd9257e6 100644 --- a/SabreTools.Serialization.CrossModel/SeparatedValue.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/SeparatedValue.Serializer.cs @@ -90,8 +90,8 @@ namespace SabreTools.Serialization.CrossModel "disk" => new Data.Models.Metadata.Disk { Name = item.DiskName, - [Data.Models.Metadata.Disk.MD5Key] = item.MD5, - [Data.Models.Metadata.Disk.SHA1Key] = item.SHA1, + MD5 = item.MD5, + SHA1 = item.SHA1, Status = item.Status, }, "media" => new Data.Models.Metadata.Media diff --git a/SabreTools.Serialization.CrossModel/SoftwareList.Deserializer.cs b/SabreTools.Serialization.CrossModel/SoftwareList.Deserializer.cs index 6493fb8d..864ea791 100644 --- a/SabreTools.Serialization.CrossModel/SoftwareList.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/SoftwareList.Deserializer.cs @@ -127,8 +127,8 @@ namespace SabreTools.Serialization.CrossModel var disk = new Disk { Name = item.Name, - MD5 = item.ReadString(Data.Models.Metadata.Disk.MD5Key), - SHA1 = item.ReadString(Data.Models.Metadata.Disk.SHA1Key), + MD5 = item.MD5, + SHA1 = item.SHA1, Status = item.Status, Writeable = item.Writable, }; diff --git a/SabreTools.Serialization.CrossModel/SoftwareList.Serializer.cs b/SabreTools.Serialization.CrossModel/SoftwareList.Serializer.cs index 0dc4888c..ab8d821a 100644 --- a/SabreTools.Serialization.CrossModel/SoftwareList.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/SoftwareList.Serializer.cs @@ -126,8 +126,8 @@ namespace SabreTools.Serialization.CrossModel var disk = new Data.Models.Metadata.Disk { Name = item.Name, - [Data.Models.Metadata.Disk.MD5Key] = item.MD5, - [Data.Models.Metadata.Disk.SHA1Key] = item.SHA1, + MD5 = item.MD5, + SHA1 = item.SHA1, Status = item.Status, Writable = item.Writeable, }; diff --git a/SabreTools.Serialization.Readers.Test/ListxmlTests.cs b/SabreTools.Serialization.Readers.Test/ListxmlTests.cs index a4997294..aef932cc 100644 --- a/SabreTools.Serialization.Readers.Test/ListxmlTests.cs +++ b/SabreTools.Serialization.Readers.Test/ListxmlTests.cs @@ -156,11 +156,11 @@ namespace SabreTools.Serialization.Readers.Test var disk = new Data.Models.Listxml.Disk { Name = "name", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - Merge = "XXXXXX", - Region = "XXXXXX", - Index = "XXXXXX", + MD5 = "md5", + SHA1 = "sha1", + Merge = "merge", + Region = "region", + Index = 12345, Writable = true, Status = Data.Models.Metadata.ItemStatus.Good, Optional = true, @@ -572,11 +572,11 @@ namespace SabreTools.Serialization.Readers.Test { Assert.NotNull(disk); Assert.Equal("name", disk.Name); - Assert.Equal("XXXXXX", disk.MD5); - Assert.Equal("XXXXXX", disk.SHA1); - Assert.Equal("XXXXXX", disk.Merge); - Assert.Equal("XXXXXX", disk.Region); - Assert.Equal("XXXXXX", disk.Index); + Assert.Equal("md5", disk.MD5); + Assert.Equal("sha1", disk.SHA1); + Assert.Equal("merge", disk.Merge); + Assert.Equal("region", disk.Region); + Assert.Equal(12345, disk.Index); Assert.Equal(true, disk.Writable); Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status); Assert.Equal(true, disk.Optional); diff --git a/SabreTools.Serialization.Readers.Test/M1Tests.cs b/SabreTools.Serialization.Readers.Test/M1Tests.cs index 3f581a31..8c5ed64e 100644 --- a/SabreTools.Serialization.Readers.Test/M1Tests.cs +++ b/SabreTools.Serialization.Readers.Test/M1Tests.cs @@ -152,11 +152,11 @@ namespace SabreTools.Serialization.Readers.Test var disk = new Data.Models.Listxml.Disk { Name = "name", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - Merge = "XXXXXX", - Region = "XXXXXX", - Index = "XXXXXX", + MD5 = "md5", + SHA1 = "sha1", + Merge = "merge", + Region = "region", + Index = 12345, Writable = true, Status = Data.Models.Metadata.ItemStatus.Good, Optional = true, @@ -566,11 +566,11 @@ namespace SabreTools.Serialization.Readers.Test { Assert.NotNull(disk); Assert.Equal("name", disk.Name); - Assert.Equal("XXXXXX", disk.MD5); - Assert.Equal("XXXXXX", disk.SHA1); - Assert.Equal("XXXXXX", disk.Merge); - Assert.Equal("XXXXXX", disk.Region); - Assert.Equal("XXXXXX", disk.Index); + Assert.Equal("md5", disk.MD5); + Assert.Equal("sha1", disk.SHA1); + Assert.Equal("merge", disk.Merge); + Assert.Equal("region", disk.Region); + Assert.Equal(12345, disk.Index); Assert.Equal(true, disk.Writable); Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status); Assert.Equal(true, disk.Optional); diff --git a/SabreTools.Serialization.Readers.Test/MessTests.cs b/SabreTools.Serialization.Readers.Test/MessTests.cs index 4d18462d..f9b1ae56 100644 --- a/SabreTools.Serialization.Readers.Test/MessTests.cs +++ b/SabreTools.Serialization.Readers.Test/MessTests.cs @@ -152,11 +152,11 @@ namespace SabreTools.Serialization.Readers.Test var disk = new Data.Models.Listxml.Disk { Name = "name", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - Merge = "XXXXXX", - Region = "XXXXXX", - Index = "XXXXXX", + MD5 = "md5", + SHA1 = "sha1", + Merge = "merge", + Region = "region", + Index = 12345, Writable = true, Status = Data.Models.Metadata.ItemStatus.Good, Optional = true, @@ -566,11 +566,11 @@ namespace SabreTools.Serialization.Readers.Test { Assert.NotNull(disk); Assert.Equal("name", disk.Name); - Assert.Equal("XXXXXX", disk.MD5); - Assert.Equal("XXXXXX", disk.SHA1); - Assert.Equal("XXXXXX", disk.Merge); - Assert.Equal("XXXXXX", disk.Region); - Assert.Equal("XXXXXX", disk.Index); + Assert.Equal("md5", disk.MD5); + Assert.Equal("sha1", disk.SHA1); + Assert.Equal("merge", disk.Merge); + Assert.Equal("region", disk.Region); + Assert.Equal(12345, disk.Index); Assert.Equal(true, disk.Writable); Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status); Assert.Equal(true, disk.Optional); diff --git a/SabreTools.Serialization.Readers/Listxml.cs b/SabreTools.Serialization.Readers/Listxml.cs index 594d34d8..4b283090 100644 --- a/SabreTools.Serialization.Readers/Listxml.cs +++ b/SabreTools.Serialization.Readers/Listxml.cs @@ -557,7 +557,7 @@ namespace SabreTools.Serialization.Readers obj.SHA1 = reader.GetAttribute("sha1"); obj.Merge = reader.GetAttribute("merge"); obj.Region = reader.GetAttribute("region"); - obj.Index = reader.GetAttribute("index"); + obj.Index = NumberHelper.ConvertToInt64(reader.GetAttribute("index")); obj.Writable = reader.GetAttribute("writable").AsYesNo(); obj.Status = reader.GetAttribute("status").AsItemStatus(); obj.Optional = reader.GetAttribute("optional").AsYesNo(); diff --git a/SabreTools.Serialization.Readers/M1.cs b/SabreTools.Serialization.Readers/M1.cs index 83b3202a..2ccd1f22 100644 --- a/SabreTools.Serialization.Readers/M1.cs +++ b/SabreTools.Serialization.Readers/M1.cs @@ -555,7 +555,7 @@ namespace SabreTools.Serialization.Readers obj.SHA1 = reader.GetAttribute("sha1"); obj.Merge = reader.GetAttribute("merge"); obj.Region = reader.GetAttribute("region"); - obj.Index = reader.GetAttribute("index"); + obj.Index = NumberHelper.ConvertToInt64(reader.GetAttribute("index")); obj.Writable = reader.GetAttribute("writable").AsYesNo(); obj.Status = reader.GetAttribute("status").AsItemStatus(); obj.Optional = reader.GetAttribute("optional").AsYesNo(); diff --git a/SabreTools.Serialization.Readers/Mess.cs b/SabreTools.Serialization.Readers/Mess.cs index 97a581da..74637da8 100644 --- a/SabreTools.Serialization.Readers/Mess.cs +++ b/SabreTools.Serialization.Readers/Mess.cs @@ -555,7 +555,7 @@ namespace SabreTools.Serialization.Readers obj.SHA1 = reader.GetAttribute("sha1"); obj.Merge = reader.GetAttribute("merge"); obj.Region = reader.GetAttribute("region"); - obj.Index = reader.GetAttribute("index"); + obj.Index = NumberHelper.ConvertToInt64(reader.GetAttribute("index")); obj.Writable = reader.GetAttribute("writable").AsYesNo(); obj.Status = reader.GetAttribute("status").AsItemStatus(); obj.Optional = reader.GetAttribute("optional").AsYesNo(); diff --git a/SabreTools.Serialization.Writers/Listxml.cs b/SabreTools.Serialization.Writers/Listxml.cs index 78c12a3f..89b638e1 100644 --- a/SabreTools.Serialization.Writers/Listxml.cs +++ b/SabreTools.Serialization.Writers/Listxml.cs @@ -372,7 +372,7 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalAttributeString("sha1", obj.SHA1); writer.WriteOptionalAttributeString("merge", obj.Merge); writer.WriteOptionalAttributeString("region", obj.Region); - writer.WriteOptionalAttributeString("index", obj.Index); + writer.WriteOptionalAttributeString("index", obj.Index?.ToString()); writer.WriteOptionalAttributeString("writable", obj.Writable.FromYesNo()); writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue()); writer.WriteOptionalAttributeString("optional", obj.Optional.FromYesNo()); diff --git a/SabreTools.Serialization.Writers/M1.cs b/SabreTools.Serialization.Writers/M1.cs index 7fcbbcf3..af84c695 100644 --- a/SabreTools.Serialization.Writers/M1.cs +++ b/SabreTools.Serialization.Writers/M1.cs @@ -370,7 +370,7 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalAttributeString("sha1", obj.SHA1); writer.WriteOptionalAttributeString("merge", obj.Merge); writer.WriteOptionalAttributeString("region", obj.Region); - writer.WriteOptionalAttributeString("index", obj.Index); + writer.WriteOptionalAttributeString("index", obj.Index?.ToString()); writer.WriteOptionalAttributeString("writable", obj.Writable.FromYesNo()); writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue()); writer.WriteOptionalAttributeString("optional", obj.Optional.FromYesNo()); diff --git a/SabreTools.Serialization.Writers/Mess.cs b/SabreTools.Serialization.Writers/Mess.cs index f616b2b1..ada680f8 100644 --- a/SabreTools.Serialization.Writers/Mess.cs +++ b/SabreTools.Serialization.Writers/Mess.cs @@ -370,7 +370,7 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalAttributeString("sha1", obj.SHA1); writer.WriteOptionalAttributeString("merge", obj.Merge); writer.WriteOptionalAttributeString("region", obj.Region); - writer.WriteOptionalAttributeString("index", obj.Index); + writer.WriteOptionalAttributeString("index", obj.Index?.ToString()); writer.WriteOptionalAttributeString("writable", obj.Writable.FromYesNo()); writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue()); writer.WriteOptionalAttributeString("optional", obj.Optional.FromYesNo());