diff --git a/README.MD b/README.MD index 56f6bbf7..115ee792 100644 --- a/README.MD +++ b/README.MD @@ -82,7 +82,6 @@ Below are a list of the included namespaces with links to their README files: - [SabreTools.Data.Extensions](https://github.com/SabreTools/SabreTools.Serialization/tree/main/SabreTools.Data.Extensions) - [SabreTools.Data.Models](https://github.com/SabreTools/SabreTools.Serialization/tree/main/SabreTools.Data.Models) -- [SabreTools.Metadata](https://github.com/SabreTools/SabreTools.Serialization/tree/main/SabreTools.Metadata) - [SabreTools.Metadata.DatFiles](https://github.com/SabreTools/SabreTools.Serialization/tree/main/SabreTools.Metadata.DatFiles) - [SabreTools.Metadata.DatItems](https://github.com/SabreTools/SabreTools.Serialization/tree/main/SabreTools.Metadata.Datitems) - [SabreTools.Metadata.Filter](https://github.com/SabreTools/SabreTools.Serialization/tree/main/SabreTools.Metadata.Filter) diff --git a/SabreTools.Data.Extensions.Test/MetadataExtensionsTests.cs b/SabreTools.Data.Extensions.Test/MetadataExtensionsTests.cs index 5248b23c..f994865f 100644 --- a/SabreTools.Data.Extensions.Test/MetadataExtensionsTests.cs +++ b/SabreTools.Data.Extensions.Test/MetadataExtensionsTests.cs @@ -8,106 +8,1128 @@ namespace SabreTools.Data.Extensions.Test { #region ConvertToRom - [Fact] - public void ConvertToRom_Null_Null() - { - DictionaryBase? self = null; - Rom? actual = self.ConvertToRom(); - Assert.Null(actual); - } - [Fact] public void ConvertToRom_EmptyDisk_EmptyRom() { - DictionaryBase? self = new Disk(); + var self = new Disk(); Rom? actual = self.ConvertToRom(); Assert.NotNull(actual); - Assert.Equal(8, actual.Count); - Assert.Equal(ItemType.Rom, actual["_type"]); - Assert.Null(actual[Rom.NameKey]); - Assert.Null(actual[Rom.MergeKey]); - Assert.Null(actual[Rom.RegionKey]); - Assert.Null(actual[Rom.StatusKey]); - Assert.Null(actual[Rom.OptionalKey]); - Assert.Null(actual[Rom.MD5Key]); - Assert.Null(actual[Rom.SHA1Key]); + Assert.Equal(ItemType.Rom, actual.ItemType); + Assert.Null(actual.Name); + Assert.Null(actual.Merge); + Assert.Null(actual.Region); + Assert.Null(actual.Status); + Assert.Null(actual.Optional); + Assert.Null(actual.MD5); + Assert.Null(actual.SHA1); } [Fact] public void ConvertToRom_FilledDisk_FilledRom() { - DictionaryBase? self = new Disk + var self = new Disk { - [Disk.NameKey] = "XXXXXX", - [Disk.MergeKey] = "XXXXXX", - [Disk.RegionKey] = "XXXXXX", - [Disk.StatusKey] = "XXXXXX", - [Disk.OptionalKey] = "XXXXXX", - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", + Name = "name", + Merge = "merge", + Region = "region", + Status = ItemStatus.Good, + Optional = true, + MD5 = "md5", + SHA1 = "sha1", }; Rom? actual = self.ConvertToRom(); Assert.NotNull(actual); - Assert.Equal(8, actual.Count); - Assert.Equal(ItemType.Rom, actual["_type"]); - Assert.Equal("XXXXXX.chd", actual[Rom.NameKey]); - Assert.Equal("XXXXXX", actual[Rom.MergeKey]); - Assert.Equal("XXXXXX", actual[Rom.RegionKey]); - Assert.Equal("XXXXXX", actual[Rom.StatusKey]); - Assert.Equal("XXXXXX", actual[Rom.OptionalKey]); - Assert.Equal("XXXXXX", actual[Rom.MD5Key]); - Assert.Equal("XXXXXX", actual[Rom.SHA1Key]); + Assert.Equal(ItemType.Rom, actual.ItemType); + Assert.Equal("name.chd", actual.Name); + Assert.Equal("merge", actual.Merge); + Assert.Equal("region", actual.Region); + Assert.Equal(ItemStatus.Good, actual.Status); + Assert.Equal(true, actual.Optional); + Assert.Equal("md5", actual.MD5); + Assert.Equal("sha1", actual.SHA1); } [Fact] public void ConvertToRom_EmptyMedia_EmptyRom() { - DictionaryBase? self = new Media(); + var self = new Media(); Rom? actual = self.ConvertToRom(); Assert.NotNull(actual); - Assert.Equal(6, actual.Count); - Assert.Equal(ItemType.Rom, actual["_type"]); - Assert.Null(actual[Rom.NameKey]); - Assert.Null(actual[Rom.MD5Key]); - Assert.Null(actual[Rom.SHA1Key]); - Assert.Null(actual[Rom.SHA256Key]); - Assert.Null(actual[Rom.SpamSumKey]); + Assert.Equal(ItemType.Rom, actual.ItemType); + Assert.Null(actual.Name); + Assert.Null(actual.MD5); + Assert.Null(actual.SHA1); + Assert.Null(actual.SHA256); + Assert.Null(actual.SpamSum); } [Fact] public void ConvertToRom_FilledMedia_FilledRom() { - DictionaryBase? self = new Media + var self = new Media { - [Media.NameKey] = "XXXXXX", - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = "XXXXXX", + Name = "name", + MD5 = "md5", + SHA1 = "sha1", + SHA256 = "sha256", + SpamSum = "spamsum", }; Rom? actual = self.ConvertToRom(); Assert.NotNull(actual); - Assert.Equal(6, actual.Count); - Assert.Equal(ItemType.Rom, actual["_type"]); - Assert.Equal("XXXXXX.aaruf", actual[Rom.NameKey]); - 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(ItemType.Rom, actual.ItemType); + Assert.Equal("name.aaruf", actual.Name); + Assert.Equal("md5", actual.MD5); + Assert.Equal("sha1", actual.SHA1); + Assert.Equal("sha256", actual.SHA256); + Assert.Equal("spamsum", actual.SpamSum); + } + + #endregion + + #region PartialEquals + + [Fact] + public void PartialEquals_Disk_Nodumps_True() + { + var self = new Disk + { + Status = ItemStatus.Nodump, + Name = "name", + MD5 = string.Empty, + SHA1 = string.Empty, + }; + var other = new Disk + { + Status = ItemStatus.Nodump, + Name = "name", + MD5 = string.Empty, + SHA1 = string.Empty, + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); } [Fact] - public void ConvertToRom_Other_Null() + public void PartialEquals_Disk_Mismatch_False() { - DictionaryBase? self = new Sample(); - Rom? actual = self.ConvertToRom(); - Assert.Null(actual); + var self = new Disk + { + Name = "name", + MD5 = "XXXXXX", + SHA1 = string.Empty, + }; + var other = new Disk + { + Name = "name", + MD5 = string.Empty, + SHA1 = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.False(actual); + } + + [Fact] + public void PartialEquals_Disk_PartialMD5_True() + { + var self = new Disk + { + Name = "XXXXXX1", + MD5 = "XXXXXX", + SHA1 = string.Empty, + }; + var other = new Disk + { + Name = "XXXXXX2", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Disk_PartialSHA1_True() + { + var self = new Disk + { + Name = "XXXXXX1", + MD5 = string.Empty, + SHA1 = "XXXXXX", + }; + var other = new Disk + { + Name = "XXXXXX2", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Disk_FullMatch_True() + { + var self = new Disk + { + Name = "XXXXXX1", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + }; + var other = new Disk + { + Name = "XXXXXX2", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Media_Mismatch_False() + { + var self = new Media + { + Name = "name", + MD5 = "XXXXXX", + SHA1 = string.Empty, + SHA256 = "XXXXXX", + SpamSum = string.Empty, + }; + var other = new Media + { + Name = "name", + MD5 = string.Empty, + SHA1 = "XXXXXX", + SHA256 = string.Empty, + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.False(actual); + } + + [Fact] + public void PartialEquals_Media_PartialMD5_True() + { + var self = new Media + { + Name = "name", + MD5 = "XXXXXX", + SHA1 = string.Empty, + SHA256 = string.Empty, + SpamSum = string.Empty, + }; + var other = new Media + { + Name = "name", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Media_PartialSHA1_True() + { + var self = new Media + { + Name = "name", + MD5 = string.Empty, + SHA1 = "XXXXXX", + SHA256 = string.Empty, + SpamSum = string.Empty, + }; + var other = new Media + { + Name = "name", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Media_PartialSHA256_True() + { + var self = new Media + { + Name = "name", + MD5 = string.Empty, + SHA1 = string.Empty, + SHA256 = "XXXXXX", + SpamSum = string.Empty, + }; + var other = new Media + { + Name = "name", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Media_PartialSpamSum_True() + { + var self = new Media + { + Name = "name", + MD5 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SpamSum = "XXXXXX", + }; + var other = new Media + { + Name = "name", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Media_FullMatch_True() + { + var self = new Media + { + Name = "name", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX", + }; + var other = new Media + { + Name = "name", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_Nodumps_True() + { + var self = new Rom + { + Status = ItemStatus.Nodump, + Name = "name", + Size = 12345, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, + }; + var other = new Rom + { + Status = ItemStatus.Nodump, + Name = "name", + Size = 12345, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_Mismatch_False() + { + var self = new Rom + { + Name = "name", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = string.Empty, + CRC64 = "XXXXXX", + MD2 = string.Empty, + MD4 = "XXXXXX", + MD5 = string.Empty, + RIPEMD128 = "XXXXXX", + RIPEMD160 = string.Empty, + SHA1 = "XXXXXX", + SHA256 = string.Empty, + SHA384 = "XXXXXX", + SHA512 = string.Empty, + SpamSum = "XXXXXX", + }; + var other = new Rom + { + Name = "name", + Size = 12345, + CRC16 = string.Empty, + CRC32 = "XXXXXX", + CRC64 = string.Empty, + MD2 = "XXXXXX", + MD4 = string.Empty, + MD5 = "XXXXXX", + RIPEMD128 = string.Empty, + RIPEMD160 = "XXXXXX", + SHA1 = string.Empty, + SHA256 = "XXXXXX", + SHA384 = string.Empty, + SHA512 = "XXXXXX", + SpamSum = string.Empty, + }; + + bool actual = self.PartialEquals(other); + Assert.False(actual); + } + + [Fact] + public void PartialEquals_Rom_NoSelfSize_True() + { + var self = new Rom + { + Name = "XXXXXX1", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + var other = new Rom + { + Name = "XXXXXX2", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_NoOtherSize_True() + { + var self = new Rom + { + Name = "XXXXXX1", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + var other = new Rom + { + Name = "XXXXXX2", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_PartialCRC16_True() + { + var self = new Rom + { + Name = "XXXXXX1", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, + }; + var other = new Rom + { + Name = "XXXXXX2", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_PartialCRC_True() + { + var self = new Rom + { + Name = "XXXXXX1", + Size = 12345, + CRC16 = string.Empty, + CRC32 = "XXXXXX", + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, + }; + var other = new Rom + { + Name = "XXXXXX2", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_PartialCRC64_True() + { + var self = new Rom + { + Name = "XXXXXX1", + Size = 12345, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = "XXXXXX", + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, + }; + var other = new Rom + { + Name = "XXXXXX2", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_PartialMD2_True() + { + var self = new Rom + { + Name = "XXXXXX1", + Size = 12345, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = "XXXXXX", + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, + }; + var other = new Rom + { + Name = "XXXXXX2", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_PartialMD4_True() + { + var self = new Rom + { + Name = "XXXXXX1", + Size = 12345, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = "XXXXXX", + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, + }; + var other = new Rom + { + Name = "XXXXXX2", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_PartialMD5_True() + { + var self = new Rom + { + Name = "XXXXXX1", + Size = 12345, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = "XXXXXX", + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, + }; + var other = new Rom + { + Name = "XXXXXX2", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_PartialRIPEMD128_True() + { + var self = new Rom + { + Name = "XXXXXX1", + Size = 12345, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = "XXXXXX", + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, + }; + var other = new Rom + { + Name = "XXXXXX2", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_PartialRIPEMD160_True() + { + var self = new Rom + { + Name = "XXXXXX1", + Size = 12345, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = "XXXXXX", + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, + }; + var other = new Rom + { + Name = "XXXXXX2", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_PartialSHA1_True() + { + var self = new Rom + { + Name = "XXXXXX1", + Size = 12345, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = "XXXXXX", + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, + }; + var other = new Rom + { + Name = "XXXXXX2", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_PartialSHA256_True() + { + var self = new Rom + { + Name = "XXXXXX1", + Size = 12345, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = "XXXXXX", + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, + }; + var other = new Rom + { + Name = "XXXXXX2", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_PartialSHA384_True() + { + var self = new Rom + { + Name = "XXXXXX1", + Size = 12345, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = "XXXXXX", + SHA512 = string.Empty, + SpamSum = string.Empty, + }; + var other = new Rom + { + Name = "XXXXXX2", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_PartialSHA512_True() + { + var self = new Rom + { + Name = "XXXXXX1", + Size = 12345, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = "XXXXXX", + SpamSum = string.Empty, + }; + var other = new Rom + { + Name = "XXXXXX2", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_PartialSpamSum_True() + { + var self = new Rom + { + Name = "XXXXXX1", + Size = 12345, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = "XXXXXX", + }; + var other = new Rom + { + Name = "XXXXXX2", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); + } + + [Fact] + public void PartialEquals_Rom_FullMatch_True() + { + var self = new Rom + { + Name = "XXXXXX1", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + var other = new Rom + { + Name = "XXXXXX2", + Size = 12345, + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", + }; + + bool actual = self.PartialEquals(other); + Assert.True(actual); } #endregion @@ -153,13 +1175,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 +1193,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 +1211,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 +1229,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 +1247,17 @@ namespace SabreTools.Data.Extensions.Test { Media self = new Media { - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = string.Empty, - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = string.Empty, + MD5 = "md5", + SHA1 = string.Empty, + SHA256 = "sha256", + SpamSum = string.Empty, }; Media other = new Media { - [Media.MD5Key] = string.Empty, - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = string.Empty, - [Media.SpamSumKey] = "XXXXXX", + MD5 = string.Empty, + SHA1 = "sha1", + SHA256 = string.Empty, + SpamSum = "spamsum", }; bool actual = self.HashMatch(other); @@ -247,17 +1269,17 @@ namespace SabreTools.Data.Extensions.Test { Media self = new Media { - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = string.Empty, - [Media.SHA256Key] = string.Empty, - [Media.SpamSumKey] = string.Empty, + MD5 = "XXXXXX", + SHA1 = string.Empty, + SHA256 = string.Empty, + SpamSum = string.Empty, }; Media other = new Media { - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = "XXXXXX", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -269,17 +1291,17 @@ namespace SabreTools.Data.Extensions.Test { Media self = new Media { - [Media.MD5Key] = string.Empty, - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = string.Empty, - [Media.SpamSumKey] = string.Empty, + MD5 = string.Empty, + SHA1 = "XXXXXX", + SHA256 = string.Empty, + SpamSum = string.Empty, }; Media other = new Media { - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = "XXXXXX", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -291,17 +1313,17 @@ namespace SabreTools.Data.Extensions.Test { Media self = new Media { - [Media.MD5Key] = string.Empty, - [Media.SHA1Key] = string.Empty, - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = string.Empty, + MD5 = string.Empty, + SHA1 = string.Empty, + SHA256 = "XXXXXX", + SpamSum = string.Empty, }; Media other = new Media { - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = "XXXXXX", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -313,17 +1335,17 @@ namespace SabreTools.Data.Extensions.Test { Media self = new Media { - [Media.MD5Key] = string.Empty, - [Media.SHA1Key] = string.Empty, - [Media.SHA256Key] = string.Empty, - [Media.SpamSumKey] = "XXXXXX", + MD5 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SpamSum = "XXXXXX", }; Media other = new Media { - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = "XXXXXX", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -335,17 +1357,17 @@ namespace SabreTools.Data.Extensions.Test { Media self = new Media { - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = "XXXXXX", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX", }; Media other = new Media { - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = "XXXXXX", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -357,35 +1379,35 @@ namespace SabreTools.Data.Extensions.Test { Rom self = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = string.Empty, + CRC64 = "XXXXXX", + MD2 = string.Empty, + MD4 = "XXXXXX", + MD5 = string.Empty, + RIPEMD128 = "XXXXXX", + RIPEMD160 = string.Empty, + SHA1 = "XXXXXX", + SHA256 = string.Empty, + SHA384 = "XXXXXX", + SHA512 = string.Empty, + SpamSum = "XXXXXX", }; Rom other = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = "XXXXXX", + CRC64 = string.Empty, + MD2 = "XXXXXX", + MD4 = string.Empty, + MD5 = "XXXXXX", + RIPEMD128 = string.Empty, + RIPEMD160 = "XXXXXX", + SHA1 = string.Empty, + SHA256 = "XXXXXX", + SHA384 = string.Empty, + SHA512 = "XXXXXX", + SpamSum = string.Empty, }; bool actual = self.HashMatch(other); @@ -397,35 +1419,35 @@ namespace SabreTools.Data.Extensions.Test { Rom self = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = "XXXXXX", + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; Rom other = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -437,35 +1459,35 @@ namespace SabreTools.Data.Extensions.Test { Rom self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = "XXXXXX", + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; Rom other = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -477,35 +1499,35 @@ namespace SabreTools.Data.Extensions.Test { Rom self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = "XXXXXX", + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; Rom other = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -517,35 +1539,35 @@ namespace SabreTools.Data.Extensions.Test { Rom self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = "XXXXXX", + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; Rom other = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -557,35 +1579,35 @@ namespace SabreTools.Data.Extensions.Test { Rom self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = "XXXXXX", + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; Rom other = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -597,35 +1619,35 @@ namespace SabreTools.Data.Extensions.Test { Rom self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = "XXXXXX", + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; Rom other = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -637,35 +1659,35 @@ namespace SabreTools.Data.Extensions.Test { Rom self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = "XXXXXX", + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; Rom other = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -677,35 +1699,35 @@ namespace SabreTools.Data.Extensions.Test { Rom self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = "XXXXXX", + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; Rom other = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -717,35 +1739,35 @@ namespace SabreTools.Data.Extensions.Test { Rom self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = "XXXXXX", + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; Rom other = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -757,35 +1779,35 @@ namespace SabreTools.Data.Extensions.Test { Rom self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = "XXXXXX", + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; Rom other = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -797,35 +1819,35 @@ namespace SabreTools.Data.Extensions.Test { Rom self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = "XXXXXX", + SHA512 = string.Empty, + SpamSum = string.Empty, }; Rom other = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -837,35 +1859,35 @@ namespace SabreTools.Data.Extensions.Test { Rom self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = "XXXXXX", + SpamSum = string.Empty, }; Rom other = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -877,35 +1899,35 @@ namespace SabreTools.Data.Extensions.Test { Rom self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = "XXXXXX", }; Rom other = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -917,35 +1939,35 @@ namespace SabreTools.Data.Extensions.Test { Rom self = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; Rom other = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HashMatch(other); @@ -959,7 +1981,7 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Disk_NoHash_True() { - DictionaryBase self = new Disk(); + var self = new Disk(); bool actual = self.HasZeroHash(); Assert.True(actual); } @@ -967,10 +1989,10 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Disk_NonZeroHash_False() { - DictionaryBase self = new Disk + var self = new Disk { - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", }; bool actual = self.HasZeroHash(); @@ -980,10 +2002,10 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Disk_ZeroMD5_True() { - DictionaryBase self = new Disk + var self = new Disk { - [Disk.MD5Key] = HashType.MD5.ZeroString, - [Disk.SHA1Key] = string.Empty, + MD5 = HashType.MD5.ZeroString, + SHA1 = string.Empty, }; bool actual = self.HasZeroHash(); @@ -993,10 +2015,10 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Disk_ZeroSHA1_True() { - DictionaryBase self = new Disk + var self = new Disk { - [Disk.MD5Key] = string.Empty, - [Disk.SHA1Key] = HashType.SHA1.ZeroString, + MD5 = string.Empty, + SHA1 = HashType.SHA1.ZeroString, }; bool actual = self.HasZeroHash(); @@ -1006,10 +2028,10 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Disk_ZeroAll_True() { - DictionaryBase self = new Disk + var 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(); @@ -1019,7 +2041,7 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Media_NoHash_True() { - DictionaryBase self = new Media(); + var self = new Media(); bool actual = self.HasZeroHash(); Assert.True(actual); } @@ -1027,12 +2049,12 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Media_NonZeroHash_False() { - DictionaryBase self = new Media + var self = new Media { - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = "XXXXXX", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HasZeroHash(); @@ -1042,12 +2064,12 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Media_ZeroMD5_True() { - DictionaryBase self = new Media + var self = new Media { - [Media.MD5Key] = HashType.MD5.ZeroString, - [Media.SHA1Key] = string.Empty, - [Media.SHA256Key] = string.Empty, - [Media.SpamSumKey] = string.Empty, + MD5 = HashType.MD5.ZeroString, + SHA1 = string.Empty, + SHA256 = string.Empty, + SpamSum = string.Empty, }; bool actual = self.HasZeroHash(); @@ -1057,12 +2079,12 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Media_ZeroSHA1_True() { - DictionaryBase self = new Media + var self = new Media { - [Media.MD5Key] = string.Empty, - [Media.SHA1Key] = HashType.SHA1.ZeroString, - [Media.SHA256Key] = string.Empty, - [Media.SpamSumKey] = string.Empty, + MD5 = string.Empty, + SHA1 = HashType.SHA1.ZeroString, + SHA256 = string.Empty, + SpamSum = string.Empty, }; bool actual = self.HasZeroHash(); @@ -1072,12 +2094,12 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Media_ZeroSHA256_True() { - DictionaryBase self = new Media + var self = new Media { - [Media.MD5Key] = string.Empty, - [Media.SHA1Key] = string.Empty, - [Media.SHA256Key] = HashType.SHA256.ZeroString, - [Media.SpamSumKey] = string.Empty, + MD5 = string.Empty, + SHA1 = string.Empty, + SHA256 = HashType.SHA256.ZeroString, + SpamSum = string.Empty, }; bool actual = self.HasZeroHash(); @@ -1087,12 +2109,12 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Media_ZeroSpamSum_True() { - DictionaryBase self = new Media + var self = new Media { - [Media.MD5Key] = string.Empty, - [Media.SHA1Key] = string.Empty, - [Media.SHA256Key] = string.Empty, - [Media.SpamSumKey] = HashType.SpamSum.ZeroString, + MD5 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SpamSum = HashType.SpamSum.ZeroString, }; bool actual = self.HasZeroHash(); @@ -1102,12 +2124,12 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Media_ZeroAll_True() { - DictionaryBase self = new Media + var self = new Media { - [Media.MD5Key] = HashType.MD5.ZeroString, - [Media.SHA1Key] = HashType.SHA1.ZeroString, - [Media.SHA256Key] = HashType.SHA256.ZeroString, - [Media.SpamSumKey] = HashType.SpamSum.ZeroString, + MD5 = HashType.MD5.ZeroString, + SHA1 = HashType.SHA1.ZeroString, + SHA256 = HashType.SHA256.ZeroString, + SpamSum = HashType.SpamSum.ZeroString, }; bool actual = self.HasZeroHash(); @@ -1117,7 +2139,7 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Rom_NoHash_True() { - DictionaryBase self = new Rom(); + var self = new Rom(); bool actual = self.HasZeroHash(); Assert.True(actual); } @@ -1125,21 +2147,21 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Rom_NonZeroHash_False() { - DictionaryBase self = new Rom + var self = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; bool actual = self.HasZeroHash(); @@ -1149,21 +2171,21 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Rom_ZeroCRC16_True() { - DictionaryBase self = new Rom + var self = new Rom { - [Rom.CRC16Key] = HashType.CRC16.ZeroString, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = HashType.CRC16.ZeroString, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; bool actual = self.HasZeroHash(); @@ -1173,21 +2195,21 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Rom_ZeroCRC_True() { - DictionaryBase self = new Rom + var self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = HashType.CRC32.ZeroString, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = HashType.CRC32.ZeroString, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; bool actual = self.HasZeroHash(); @@ -1197,21 +2219,21 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Rom_ZeroCRC64_True() { - DictionaryBase self = new Rom + var self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = HashType.CRC64.ZeroString, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = HashType.CRC64.ZeroString, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; bool actual = self.HasZeroHash(); @@ -1221,21 +2243,21 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Rom_ZeroMD2_True() { - DictionaryBase self = new Rom + var self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = HashType.MD2.ZeroString, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = HashType.MD2.ZeroString, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; bool actual = self.HasZeroHash(); @@ -1245,21 +2267,21 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Rom_ZeroMD4_True() { - DictionaryBase self = new Rom + var self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = HashType.MD4.ZeroString, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = HashType.MD4.ZeroString, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; bool actual = self.HasZeroHash(); @@ -1269,21 +2291,21 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Rom_ZeroMD5_True() { - DictionaryBase self = new Rom + var self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = HashType.MD5.ZeroString, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = HashType.MD5.ZeroString, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; bool actual = self.HasZeroHash(); @@ -1293,21 +2315,21 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Rom_ZeroRIPEMD128_True() { - DictionaryBase self = new Rom + var self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = HashType.RIPEMD128.ZeroString, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = HashType.RIPEMD128.ZeroString, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; bool actual = self.HasZeroHash(); @@ -1317,21 +2339,21 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Rom_ZeroRIPEMD160_True() { - DictionaryBase self = new Rom + var self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = HashType.RIPEMD160.ZeroString, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = HashType.RIPEMD160.ZeroString, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; bool actual = self.HasZeroHash(); @@ -1341,21 +2363,21 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Rom_ZeroSHA1_True() { - DictionaryBase self = new Rom + var self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = HashType.SHA1.ZeroString, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = HashType.SHA1.ZeroString, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; bool actual = self.HasZeroHash(); @@ -1365,21 +2387,21 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Rom_ZeroSHA256_True() { - DictionaryBase self = new Rom + var self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = HashType.SHA256.ZeroString, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = HashType.SHA256.ZeroString, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty, }; bool actual = self.HasZeroHash(); @@ -1389,21 +2411,21 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Rom_ZeroSHA384_True() { - DictionaryBase self = new Rom + var self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = HashType.SHA384.ZeroString, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = HashType.SHA384.ZeroString, + SHA512 = string.Empty, + SpamSum = string.Empty, }; bool actual = self.HasZeroHash(); @@ -1413,21 +2435,21 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Rom_ZeroSHA512_True() { - DictionaryBase self = new Rom + var self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = HashType.SHA512.ZeroString, - [Rom.SpamSumKey] = string.Empty, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = HashType.SHA512.ZeroString, + SpamSum = string.Empty, }; bool actual = self.HasZeroHash(); @@ -1437,21 +2459,21 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Rom_ZeroSpamSum_True() { - DictionaryBase self = new Rom + var self = new Rom { - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = HashType.SpamSum.ZeroString, + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = HashType.SpamSum.ZeroString, }; bool actual = self.HasZeroHash(); @@ -1461,35 +2483,27 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void HasZeroHash_Rom_ZeroAll_True() { - DictionaryBase self = new Rom + var self = new Rom { - [Rom.CRC16Key] = HashType.CRC16.ZeroString, - [Rom.CRCKey] = HashType.CRC32.ZeroString, - [Rom.CRC64Key] = HashType.CRC64.ZeroString, - [Rom.MD2Key] = HashType.MD2.ZeroString, - [Rom.MD4Key] = HashType.MD4.ZeroString, - [Rom.MD5Key] = HashType.MD5.ZeroString, - [Rom.RIPEMD128Key] = HashType.RIPEMD128.ZeroString, - [Rom.RIPEMD160Key] = HashType.RIPEMD160.ZeroString, - [Rom.SHA1Key] = HashType.SHA1.ZeroString, - [Rom.SHA256Key] = HashType.SHA256.ZeroString, - [Rom.SHA384Key] = HashType.SHA384.ZeroString, - [Rom.SHA512Key] = HashType.SHA512.ZeroString, - [Rom.SpamSumKey] = HashType.SpamSum.ZeroString, + CRC16 = HashType.CRC16.ZeroString, + CRC32 = HashType.CRC32.ZeroString, + CRC64 = HashType.CRC64.ZeroString, + MD2 = HashType.MD2.ZeroString, + MD4 = HashType.MD4.ZeroString, + MD5 = HashType.MD5.ZeroString, + RIPEMD128 = HashType.RIPEMD128.ZeroString, + RIPEMD160 = HashType.RIPEMD160.ZeroString, + SHA1 = HashType.SHA1.ZeroString, + SHA256 = HashType.SHA256.ZeroString, + SHA384 = HashType.SHA384.ZeroString, + SHA512 = HashType.SHA512.ZeroString, + SpamSum = HashType.SpamSum.ZeroString, }; bool actual = self.HasZeroHash(); Assert.True(actual); } - [Fact] - public void HasZeroHash_Other_False() - { - DictionaryBase self = new Sample(); - bool actual = self.HasZeroHash(); - Assert.False(actual); - } - #endregion #region FillMissingHashes @@ -1497,21 +2511,21 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void FillMissingHashes_Disk_BothEmpty() { - DictionaryBase self = new Disk(); - DictionaryBase other = new Disk(); + var self = new Disk(); + var other = new Disk(); self.FillMissingHashes(other); - Assert.Single(self); + Assert.False(self.HasHashes()); } [Fact] public void FillMissingHashes_Disk_AllMissing() { - DictionaryBase self = new Disk(); - DictionaryBase other = new Disk + var self = new Disk(); + var other = new Disk { - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", }; self.FillMissingHashes(other); @@ -1520,22 +2534,22 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void FillMissingHashes_Media_BothEmpty() { - DictionaryBase self = new Media(); - DictionaryBase other = new Media(); + var self = new Media(); + var other = new Media(); self.FillMissingHashes(other); - Assert.Single(self); + Assert.False(self.HasHashes()); } [Fact] public void FillMissingHashes_Media_AllMissing() { - DictionaryBase self = new Media(); - DictionaryBase other = new Media + var self = new Media(); + var other = new Media { - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = "XXXXXX", + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX", }; self.FillMissingHashes(other); @@ -1544,31 +2558,31 @@ namespace SabreTools.Data.Extensions.Test [Fact] public void FillMissingHashes_Rom_BothEmpty() { - DictionaryBase self = new Rom(); - DictionaryBase other = new Rom(); + var self = new Rom(); + var other = new Rom(); self.FillMissingHashes(other); - Assert.Single(self); + Assert.False(self.HasHashes()); } [Fact] public void FillMissingHashes_Rom_AllMissing() { - DictionaryBase self = new Rom(); - DictionaryBase other = new Rom + var self = new Rom(); + var other = new Rom { - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX", }; self.FillMissingHashes(other); @@ -1578,6 +2592,16 @@ namespace SabreTools.Data.Extensions.Test #region String to Enum + [Theory] + [InlineData(null, null)] + [InlineData("plain", Blit.Plain)] + [InlineData("dirty", Blit.Dirty)] + public void AsBlitTest(string? field, Blit? expected) + { + Blit? actual = field.AsBlit(); + Assert.Equal(expected, actual); + } + [Theory] [InlineData(null, null)] [InlineData("cpu", ChipType.CPU)] @@ -1704,12 +2728,74 @@ namespace SabreTools.Data.Extensions.Test [InlineData("nodump", ItemStatus.Nodump)] [InlineData("yes", ItemStatus.Nodump)] [InlineData("verified", ItemStatus.Verified)] + [InlineData("deduped", ItemStatus.Deduped)] public void AsItemStatusTest(string? field, ItemStatus? expected) { ItemStatus? actual = field.AsItemStatus(); Assert.Equal(expected, actual); } + [Theory] + [InlineData(null, ItemType.NULL)] + [InlineData("adjuster", ItemType.Adjuster)] + [InlineData("analog", ItemType.Analog)] + [InlineData("archive", ItemType.Archive)] + [InlineData("biosset", ItemType.BiosSet)] + [InlineData("blank", ItemType.Blank)] + [InlineData("chip", ItemType.Chip)] + [InlineData("condition", ItemType.Condition)] + [InlineData("configuration", ItemType.Configuration)] + [InlineData("conflocation", ItemType.ConfLocation)] + [InlineData("confsetting", ItemType.ConfSetting)] + [InlineData("control", ItemType.Control)] + [InlineData("dataarea", ItemType.DataArea)] + [InlineData("device", ItemType.Device)] + [InlineData("deviceref", ItemType.DeviceRef)] + [InlineData("device_ref", ItemType.DeviceRef)] + [InlineData("diplocation", ItemType.DipLocation)] + [InlineData("dipswitch", ItemType.DipSwitch)] + [InlineData("dipvalue", ItemType.DipValue)] + [InlineData("disk", ItemType.Disk)] + [InlineData("diskarea", ItemType.DiskArea)] + [InlineData("display", ItemType.Display)] + [InlineData("driver", ItemType.Driver)] + [InlineData("extension", ItemType.Extension)] + [InlineData("feature", ItemType.Feature)] + [InlineData("file", ItemType.File)] + [InlineData("info", ItemType.Info)] + [InlineData("input", ItemType.Input)] + [InlineData("instance", ItemType.Instance)] + [InlineData("media", ItemType.Media)] + [InlineData("part", ItemType.Part)] + [InlineData("partfeature", ItemType.PartFeature)] + [InlineData("part_feature", ItemType.PartFeature)] + [InlineData("port", ItemType.Port)] + [InlineData("ramoption", ItemType.RamOption)] + [InlineData("ram_option", ItemType.RamOption)] + [InlineData("release", ItemType.Release)] + [InlineData("releasedetails", ItemType.ReleaseDetails)] + [InlineData("release_details", ItemType.ReleaseDetails)] + [InlineData("rom", ItemType.Rom)] + [InlineData("sample", ItemType.Sample)] + [InlineData("serials", ItemType.Serials)] + [InlineData("sharedfeat", ItemType.SharedFeat)] + [InlineData("shared_feat", ItemType.SharedFeat)] + [InlineData("sharedfeature", ItemType.SharedFeat)] + [InlineData("shared_feature", ItemType.SharedFeat)] + [InlineData("slot", ItemType.Slot)] + [InlineData("slotoption", ItemType.SlotOption)] + [InlineData("slot_option", ItemType.SlotOption)] + [InlineData("softwarelist", ItemType.SoftwareList)] + [InlineData("software_list", ItemType.SoftwareList)] + [InlineData("sound", ItemType.Sound)] + [InlineData("sourcedetails", ItemType.SourceDetails)] + [InlineData("source_details", ItemType.SourceDetails)] + public void AsItemTypeTest(string? field, ItemType expected) + { + ItemType actual = field.AsItemType(); + Assert.Equal(expected, actual); + } + [Theory] [InlineData(null, null)] [InlineData("load16_byte", LoadFlag.Load16Byte)] @@ -1805,6 +2891,24 @@ namespace SabreTools.Data.Extensions.Test Assert.Equal(expected, actual); } + [Theory] + [InlineData(null, null)] + [InlineData("0", Rotation.North)] + [InlineData("north", Rotation.North)] + [InlineData("vertical", Rotation.North)] + [InlineData("90", Rotation.East)] + [InlineData("east", Rotation.East)] + [InlineData("horizontal", Rotation.East)] + [InlineData("180", Rotation.South)] + [InlineData("south", Rotation.South)] + [InlineData("270", Rotation.West)] + [InlineData("west", Rotation.West)] + public void AsRotationTest(string? field, Rotation? expected) + { + Rotation? actual = field.AsRotation(); + Assert.Equal(expected, actual); + } + [Theory] [InlineData(null, null)] [InlineData("no", Runnable.No)] @@ -1851,11 +2955,29 @@ namespace SabreTools.Data.Extensions.Test Assert.Equal(expected, actual); } + [Theory] + [InlineData(null, null)] + [InlineData("8", Width.Byte)] + [InlineData("byte", Width.Byte)] + [InlineData("16", Width.Short)] + [InlineData("short", Width.Short)] + [InlineData("32", Width.Int)] + [InlineData("int", Width.Int)] + [InlineData("64", Width.Long)] + [InlineData("long", Width.Long)] + public void AsWidth(string? field, Width? expected) + { + Width? actual = field.AsWidth(); + Assert.Equal(expected, actual); + } + [Theory] [InlineData(null, null)] [InlineData("INVALID", null)] + [InlineData("1", true)] [InlineData("yes", true)] [InlineData("True", true)] + [InlineData("0", false)] [InlineData("no", false)] [InlineData("False", false)] public void AsYesNoTest(string? field, bool? expected) @@ -1868,6 +2990,16 @@ namespace SabreTools.Data.Extensions.Test #region Enum to String + [Theory] + [InlineData((Blit)int.MaxValue, null)] + [InlineData(Blit.Plain, "plain")] + [InlineData(Blit.Dirty, "dirty")] + public void FromBlitTest(Blit field, string? expected) + { + string? actual = field.AsStringValue(); + Assert.Equal(expected, actual); + } + [Theory] [InlineData((ChipType)int.MaxValue, null)] [InlineData(ChipType.CPU, "cpu")] @@ -1998,12 +3130,65 @@ namespace SabreTools.Data.Extensions.Test [InlineData(ItemStatus.Nodump, false, "nodump")] [InlineData(ItemStatus.Verified, true, "verified")] [InlineData(ItemStatus.Verified, false, "verified")] + [InlineData(ItemStatus.Deduped, true, "deduped")] + [InlineData(ItemStatus.Deduped, false, "deduped")] public void FromItemStatusTest(ItemStatus field, bool useSecond, string? expected) { string? actual = field.AsStringValue(useSecond); Assert.Equal(expected, actual); } + [Theory] + [InlineData(ItemType.NULL, null)] + [InlineData(ItemType.Adjuster, "adjuster")] + [InlineData(ItemType.Analog, "analog")] + [InlineData(ItemType.Archive, "archive")] + [InlineData(ItemType.BiosSet, "biosset")] + [InlineData(ItemType.Blank, "blank")] + [InlineData(ItemType.Chip, "chip")] + [InlineData(ItemType.Condition, "condition")] + [InlineData(ItemType.Configuration, "configuration")] + [InlineData(ItemType.ConfLocation, "conflocation")] + [InlineData(ItemType.ConfSetting, "confsetting")] + [InlineData(ItemType.Control, "control")] + [InlineData(ItemType.DataArea, "dataarea")] + [InlineData(ItemType.Device, "device")] + [InlineData(ItemType.DeviceRef, "device_ref")] + [InlineData(ItemType.DipLocation, "diplocation")] + [InlineData(ItemType.DipSwitch, "dipswitch")] + [InlineData(ItemType.DipValue, "dipvalue")] + [InlineData(ItemType.Disk, "disk")] + [InlineData(ItemType.DiskArea, "diskarea")] + [InlineData(ItemType.Display, "display")] + [InlineData(ItemType.Driver, "driver")] + [InlineData(ItemType.Extension, "extension")] + [InlineData(ItemType.Feature, "feature")] + [InlineData(ItemType.File, "file")] + [InlineData(ItemType.Info, "info")] + [InlineData(ItemType.Input, "input")] + [InlineData(ItemType.Instance, "instance")] + [InlineData(ItemType.Media, "media")] + [InlineData(ItemType.Part, "part")] + [InlineData(ItemType.PartFeature, "part_feature")] + [InlineData(ItemType.Port, "port")] + [InlineData(ItemType.RamOption, "ramoption")] + [InlineData(ItemType.Release, "release")] + [InlineData(ItemType.ReleaseDetails, "release_details")] + [InlineData(ItemType.Rom, "rom")] + [InlineData(ItemType.Sample, "sample")] + [InlineData(ItemType.Serials, "serials")] + [InlineData(ItemType.SharedFeat, "sharedfeat")] + [InlineData(ItemType.Slot, "slot")] + [InlineData(ItemType.SlotOption, "slotoption")] + [InlineData(ItemType.SoftwareList, "softwarelist")] + [InlineData(ItemType.Sound, "sound")] + [InlineData(ItemType.SourceDetails, "source_details")] + public void FromItemTypeTest(ItemType field, string? expected) + { + string? actual = field.AsStringValue(); + Assert.Equal(expected, actual); + } + [Theory] [InlineData((LoadFlag)int.MaxValue, null)] [InlineData(LoadFlag.Load16Byte, "load16_byte")] @@ -2102,6 +3287,21 @@ namespace SabreTools.Data.Extensions.Test Assert.Equal(expected, actual); } + [Theory] + [InlineData(Rotation.North, true, "vertical")] + [InlineData(Rotation.North, false, "0")] + [InlineData(Rotation.East, true, "horizontal")] + [InlineData(Rotation.East, false, "90")] + [InlineData(Rotation.South, true, "vertical")] + [InlineData(Rotation.South, false, "180")] + [InlineData(Rotation.West, true, "horizontal")] + [InlineData(Rotation.West, false, "270")] + public void FromRotationTest(Rotation field, bool useSecond, string? expected) + { + string? actual = field.AsStringValue(useSecond); + Assert.Equal(expected, actual); + } + [Theory] [InlineData((Runnable)int.MaxValue, null)] [InlineData(Runnable.No, "no")] @@ -2150,6 +3350,18 @@ namespace SabreTools.Data.Extensions.Test Assert.Equal(expected, actual); } + [Theory] + [InlineData((Width)int.MaxValue, null)] + [InlineData(Width.Byte, "8")] + [InlineData(Width.Short, "16")] + [InlineData(Width.Int, "32")] + [InlineData(Width.Long, "64")] + public void FromWidthTest(Width field, string? expected) + { + string? actual = field.AsStringValue(); + Assert.Equal(expected, actual); + } + [Theory] [InlineData(null, null)] [InlineData(true, "yes")] diff --git a/SabreTools.Data.Extensions/MetadataExtensions.cs b/SabreTools.Data.Extensions/MetadataExtensions.cs index c46fece7..9852c363 100644 --- a/SabreTools.Data.Extensions/MetadataExtensions.cs +++ b/SabreTools.Data.Extensions/MetadataExtensions.cs @@ -6,238 +6,148 @@ using SabreTools.Matching; namespace SabreTools.Data.Extensions { + // TODO: Add proper enum for YesNo + // TODO: Combine yes/partial/no enums public static class MetadataExtensions { - #region Accessors - - /// - /// Gets the name to use for a DictionaryBase or null - /// - public static string? GetName(this DictionaryBase self) - { - if (self is null) - return null; - - return self switch - { - Machine => self.ReadString(Machine.NameKey), - - Adjuster => self.ReadString(Adjuster.NameKey), - Analog => null, - Archive => self.ReadString(Archive.NameKey), - BiosSet => self.ReadString(BiosSet.NameKey), - Chip => self.ReadString(Chip.NameKey), - Condition => null, - ConfLocation => self.ReadString(ConfLocation.NameKey), - ConfSetting => self.ReadString(ConfSetting.NameKey), - Configuration => self.ReadString(Configuration.NameKey), - Control => null, - DataArea => self.ReadString(DataArea.NameKey), - Device => null, - DeviceRef => self.ReadString(DeviceRef.NameKey), - DipLocation => self.ReadString(DipLocation.NameKey), - DipSwitch => self.ReadString(DipSwitch.NameKey), - DipValue => self.ReadString(DipValue.NameKey), - Disk => self.ReadString(Disk.NameKey), - DiskArea => self.ReadString(DiskArea.NameKey), - Display => null, - Driver => null, - Extension => self.ReadString(Extension.NameKey), - Feature => self.ReadString(Feature.NameKey), - Info => self.ReadString(Info.NameKey), - Input => null, - Instance => self.ReadString(Instance.NameKey), - Media => self.ReadString(Media.NameKey), - Part => self.ReadString(Part.NameKey), - Port => null, - RamOption => self.ReadString(RamOption.NameKey), - Release => self.ReadString(Release.NameKey), - ReleaseDetails => null, - Rom => self.ReadString(Rom.NameKey), - Sample => self.ReadString(Sample.NameKey), - Serials => null, - SharedFeat => self.ReadString(SharedFeat.NameKey), - Slot => self.ReadString(Slot.NameKey), - SlotOption => self.ReadString(SlotOption.NameKey), - SoftwareList => self.ReadString(SoftwareList.NameKey), - Sound => null, - SourceDetails => null, - Video => null, - - _ => null, - }; - } - - /// - /// Gets the name to use for a DictionaryBase or null - /// - public static void SetName(this DictionaryBase self, string? name) - { - if (self is null || string.IsNullOrEmpty(name)) - return; - - switch (self) - { - case Machine: self[Machine.NameKey] = name; break; - - case Adjuster: self[Adjuster.NameKey] = name; break; - case Analog: break; - case Archive: self[Archive.NameKey] = name; break; - case BiosSet: self[BiosSet.NameKey] = name; break; - case Chip: self[Chip.NameKey] = name; break; - case Condition: break; - case ConfLocation: self[ConfLocation.NameKey] = name; break; - case ConfSetting: self[ConfSetting.NameKey] = name; break; - case Configuration: self[Configuration.NameKey] = name; break; - case Control: break; - case DataArea: self[DataArea.NameKey] = name; break; - case Device: break; - case DeviceRef: self[DeviceRef.NameKey] = name; break; - case DipLocation: self[DipLocation.NameKey] = name; break; - case DipSwitch: self[DipSwitch.NameKey] = name; break; - case DipValue: self[DipValue.NameKey] = name; break; - case Disk: self[Disk.NameKey] = name; break; - case DiskArea: self[DiskArea.NameKey] = name; break; - case Display: break; - case Driver: break; - case Extension: self[Extension.NameKey] = name; break; - case Feature: self[Feature.NameKey] = name; break; - case Info: self[Info.NameKey] = name; break; - case Input: break; - case Instance: self[Instance.NameKey] = name; break; - case Media: self[Media.NameKey] = name; break; - case Part: self[Part.NameKey] = name; break; - case Port: break; - case RamOption: self[RamOption.NameKey] = name; break; - case Release: self[Release.NameKey] = name; break; - case ReleaseDetails: break; - case Rom: self[Rom.NameKey] = name; break; - case Sample: self[Sample.NameKey] = name; break; - case Serials: break; - case SharedFeat: self[SharedFeat.NameKey] = name; break; - case Slot: self[Slot.NameKey] = name; break; - case SlotOption: self[SlotOption.NameKey] = name; break; - case SoftwareList: self[SoftwareList.NameKey] = name; break; - case Sound: break; - case SourceDetails: break; - case Video: break; - - default: break; - } - } - - #endregion - - #region Cloning - - /// - /// Deep clone a DictionaryBase object - /// - public static DictionaryBase? Clone(this DictionaryBase self) - { - // If construction failed, we can't do anything - if (Activator.CreateInstance(self.GetType()) is not DictionaryBase clone) - return null; - - // Loop through and clone per type - foreach (string key in self.Keys) - { - object? value = self[key]; - clone[key] = value switch - { - // Primative types - bool or long or double or string => value, - - // DictionaryBase types - DictionaryBase db => db.Clone(), - - // Enumerable types - byte[] bytArr => bytArr.Clone(), - string[] strArr => strArr.Clone(), - DictionaryBase[] dbArr => Array.ConvertAll(dbArr, Clone), - ICloneable[] clArr => Array.ConvertAll(clArr, cl => cl.Clone()), - - // Everything else just copies - _ => value, - }; - } - - return clone; - } - - #endregion - #region Conversion - /// - /// Convert a DictionaryBase to a Rom - /// - public static Rom? ConvertToRom(this DictionaryBase? self) - { - // If the DatItem is missing, we can't do anything - if (self is null) - return null; - - return self switch - { - Disk diskSelf => ConvertToRom(diskSelf), - Media mediaSelf => ConvertToRom(mediaSelf), - _ => null, - }; - } - /// /// Convert a Disk to a Rom /// - private static Rom? ConvertToRom(this Disk? disk) + public static Rom? ConvertToRom(this Disk? disk) { // If the Disk is missing, we can't do anything if (disk is null) return null; // Append a suffix to the name - string? name = disk.ReadString(Disk.NameKey); + string? name = disk.Name; if (name is not null) name += ".chd"; return new Rom { - [Rom.NameKey] = name, - [Rom.MergeKey] = disk.ReadString(Disk.MergeKey), - [Rom.RegionKey] = disk.ReadString(Disk.RegionKey), - [Rom.StatusKey] = disk.ReadString(Disk.StatusKey), - [Rom.OptionalKey] = disk.ReadString(Disk.OptionalKey), - [Rom.MD5Key] = disk.ReadString(Disk.MD5Key), - [Rom.SHA1Key] = disk.ReadString(Disk.SHA1Key), + Name = name, + Merge = disk.Merge, + Region = disk.Region, + Status = disk.Status, + Optional = disk.Optional, + MD5 = disk.MD5, + SHA1 = disk.SHA1, }; } /// /// Convert a Media to a Rom /// - private static Rom? ConvertToRom(this Media? media) + public static Rom? ConvertToRom(this Media? media) { // If the Media is missing, we can't do anything if (media is null) return null; // Append a suffix to the name - string? name = media.ReadString(Media.NameKey); + string? name = media.Name; if (name is not null) name += ".aaruf"; return new Rom { - [Rom.NameKey] = name, - [Rom.MD5Key] = media.ReadString(Media.MD5Key), - [Rom.SHA1Key] = media.ReadString(Media.SHA1Key), - [Rom.SHA256Key] = media.ReadString(Media.SHA256Key), - [Rom.SpamSumKey] = media.ReadString(Media.SpamSumKey), + Name = name, + MD5 = media.MD5, + SHA1 = media.SHA1, + SHA256 = media.SHA256, + SpamSum = media.SpamSum, }; } #endregion + #region Equality Checking + + /// + /// Check equality of two Disk objects + /// + public static bool PartialEquals(this Disk self, Disk other) + { + ItemStatus? selfStatus = self.Status; + ItemStatus? otherStatus = other.Status; + + string? selfName = self.Name; + string? otherName = other.Name; + + // If all hashes are empty but they're both nodump and the names match, then they're dupes + if (selfStatus == ItemStatus.Nodump + && otherStatus == ItemStatus.Nodump + && string.Equals(selfName, otherName, StringComparison.OrdinalIgnoreCase) + && !self.HasHashes() + && !other.HasHashes()) + { + return true; + } + + // If we get a partial match + if (self.HashMatch(other)) + return true; + + // All other cases fail + return false; + } + + /// + /// Check equality of two Media objects + /// + public static bool PartialEquals(this Media self, Media other) + { + // If we get a partial match + if (self.HashMatch(other)) + return true; + + // All other cases fail + return false; + } + + /// + /// Check equality of two Rom objects + /// + public static bool PartialEquals(this Rom self, Rom other) + { + ItemStatus? selfStatus = self.Status; + ItemStatus? otherStatus = other.Status; + + string? selfName = self.Name; + string? otherName = other.Name; + + long? selfSize = self.Size; + long? otherSize = other.Size; + + // If all hashes are empty but they're both nodump and the names match, then they're dupes + if (selfStatus == ItemStatus.Nodump + && otherStatus == ItemStatus.Nodump + && string.Equals(selfName, otherName, StringComparison.OrdinalIgnoreCase) + && !self.HasHashes() + && !other.HasHashes()) + { + return true; + } + + // If we have a file that has no known size, rely on the hashes only + if (selfSize is null && self.HashMatch(other)) + return true; + else if (otherSize is null && self.HashMatch(other)) + return true; + + // If we get a partial match + if (selfSize == otherSize && self.HashMatch(other)) + return true; + + // All other cases fail + return false; + } + + #endregion + #region Hash Checking /// @@ -288,13 +198,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; @@ -314,21 +219,10 @@ namespace SabreTools.Data.Extensions return false; // Return if all hashes match according to merge rules - string? selfMd5 = self.ReadString(Media.MD5Key); - string? otherMd5 = other.ReadString(Media.MD5Key); - bool conditionalMd5 = ConditionalHashEquals(selfMd5, otherMd5); - - string? selfSha1 = self.ReadString(Media.SHA1Key); - string? otherSha1 = other.ReadString(Media.SHA1Key); - bool conditionalSha1 = ConditionalHashEquals(selfSha1, otherSha1); - - string? selfSha256 = self.ReadString(Media.SHA256Key); - string? otherSha256 = other.ReadString(Media.SHA256Key); - bool conditionalSha256 = ConditionalHashEquals(selfSha256, otherSha256); - - string? selfSpamSum = self.ReadString(Media.SpamSumKey); - string? otherSpamSum = other.ReadString(Media.SpamSumKey); - bool conditionalSpamSum = ConditionalHashEquals(selfSpamSum, otherSpamSum); + bool conditionalMd5 = ConditionalHashEquals(self.MD5, other.MD5); + bool conditionalSha1 = ConditionalHashEquals(self.SHA1, other.SHA1); + bool conditionalSha256 = ConditionalHashEquals(self.SHA256, other.SHA256); + bool conditionalSpamSum = ConditionalHashEquals(self.SpamSum, other.SpamSum); return conditionalMd5 && conditionalSha1 @@ -350,56 +244,56 @@ namespace SabreTools.Data.Extensions return false; // Return if all hashes match according to merge rules - string? selfCrc16 = self.ReadString(Rom.CRC16Key); - string? otherCrc16 = other.ReadString(Rom.CRC16Key); + string? selfCrc16 = self.CRC16; + string? otherCrc16 = other.CRC16; bool conditionalCrc16 = ConditionalHashEquals(selfCrc16, otherCrc16); - string? selfCrc = self.ReadString(Rom.CRCKey); - string? otherCrc = other.ReadString(Rom.CRCKey); + string? selfCrc = self.CRC32; + string? otherCrc = other.CRC32; bool conditionalCrc = ConditionalHashEquals(selfCrc, otherCrc); - string? selfCrc64 = self.ReadString(Rom.CRC64Key); - string? otherCrc64 = other.ReadString(Rom.CRC64Key); + string? selfCrc64 = self.CRC64; + string? otherCrc64 = other.CRC64; bool conditionalCrc64 = ConditionalHashEquals(selfCrc64, otherCrc64); - string? selfMd2 = self.ReadString(Rom.MD2Key); - string? otherMd2 = other.ReadString(Rom.MD2Key); + string? selfMd2 = self.MD2; + string? otherMd2 = other.MD2; bool conditionalMd2 = ConditionalHashEquals(selfMd2, otherMd2); - string? selfMd4 = self.ReadString(Rom.MD4Key); - string? otherMd4 = other.ReadString(Rom.MD4Key); + string? selfMd4 = self.MD4; + string? otherMd4 = other.MD4; bool conditionalMd4 = ConditionalHashEquals(selfMd4, otherMd4); - string? selfMd5 = self.ReadString(Rom.MD5Key); - string? otherMd5 = other.ReadString(Rom.MD5Key); + string? selfMd5 = self.MD5; + string? otherMd5 = other.MD5; bool conditionalMd5 = ConditionalHashEquals(selfMd5, otherMd5); - string? selfRipeMD128 = self.ReadString(Rom.RIPEMD128Key); - string? otherRipeMD128 = other.ReadString(Rom.RIPEMD128Key); + string? selfRipeMD128 = self.RIPEMD128; + string? otherRipeMD128 = other.RIPEMD128; bool conditionaRipeMD128 = ConditionalHashEquals(selfRipeMD128, otherRipeMD128); - string? selfRipeMD160 = self.ReadString(Rom.RIPEMD160Key); - string? otherRipeMD160 = other.ReadString(Rom.RIPEMD160Key); + string? selfRipeMD160 = self.RIPEMD160; + string? otherRipeMD160 = other.RIPEMD160; bool conditionaRipeMD160 = ConditionalHashEquals(selfRipeMD160, otherRipeMD160); - string? selfSha1 = self.ReadString(Rom.SHA1Key); - string? otherSha1 = other.ReadString(Rom.SHA1Key); + string? selfSha1 = self.SHA1; + string? otherSha1 = other.SHA1; bool conditionalSha1 = ConditionalHashEquals(selfSha1, otherSha1); - string? selfSha256 = self.ReadString(Rom.SHA256Key); - string? otherSha256 = other.ReadString(Rom.SHA256Key); + string? selfSha256 = self.SHA256; + string? otherSha256 = other.SHA256; bool conditionalSha256 = ConditionalHashEquals(selfSha256, otherSha256); - string? selfSha384 = self.ReadString(Rom.SHA384Key); - string? otherSha384 = other.ReadString(Rom.SHA384Key); + string? selfSha384 = self.SHA384; + string? otherSha384 = other.SHA384; bool conditionalSha384 = ConditionalHashEquals(selfSha384, otherSha384); - string? selfSha512 = self.ReadString(Rom.SHA512Key); - string? otherSha512 = other.ReadString(Rom.SHA512Key); + string? selfSha512 = self.SHA512; + string? otherSha512 = other.SHA512; bool conditionalSha512 = ConditionalHashEquals(selfSha512, otherSha512); - string? selfSpamSum = self.ReadString(Rom.SpamSumKey); - string? otherSpamSum = other.ReadString(Rom.SpamSumKey); + string? selfSpamSum = self.SpamSum; + string? otherSpamSum = other.SpamSum; bool conditionalSpamSum = ConditionalHashEquals(selfSpamSum, otherSpamSum); return conditionalCrc16 @@ -420,135 +314,10 @@ namespace SabreTools.Data.Extensions /// /// Returns if any hashes exist /// - public static bool HasHashes(this DictionaryBase self) + public static bool HasHashes(this Disk disk) { - return self switch - { - Disk diskSelf => diskSelf.HasHashes(), - Media mediaSelf => mediaSelf.HasHashes(), - Rom romSelf => romSelf.HasHashes(), - _ => false, - }; - } - - /// - /// Returns if all of the hashes are set to their 0-byte values or null - /// - public static bool HasZeroHash(this DictionaryBase self) - { - return self switch - { - Disk diskSelf => diskSelf.HasZeroHash(), - Media mediaSelf => mediaSelf.HasZeroHash(), - Rom romSelf => romSelf.HasZeroHash(), - _ => false, - }; - } - - /// - /// Returns if there are no, non-empty hashes in common - /// - 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 sha1Null = string.IsNullOrEmpty(self.ReadString(Disk.SHA1Key)); - sha1Null ^= string.IsNullOrEmpty(other.ReadString(Disk.SHA1Key)); - - return !md5Null - || !sha1Null; - } - - /// - /// Returns if there are no, non-empty hashes in common - /// - private static bool HasCommonHash(this Media self, Media other) - { - bool md5Null = string.IsNullOrEmpty(self.ReadString(Media.MD5Key)); - md5Null ^= string.IsNullOrEmpty(other.ReadString(Media.MD5Key)); - - bool sha1Null = string.IsNullOrEmpty(self.ReadString(Media.SHA1Key)); - sha1Null ^= string.IsNullOrEmpty(other.ReadString(Media.SHA1Key)); - - bool sha256Null = string.IsNullOrEmpty(self.ReadString(Media.SHA256Key)); - sha256Null ^= string.IsNullOrEmpty(other.ReadString(Media.SHA256Key)); - - bool spamsumNull = string.IsNullOrEmpty(self.ReadString(Media.SpamSumKey)); - spamsumNull ^= string.IsNullOrEmpty(other.ReadString(Media.SpamSumKey)); - - return !md5Null - || !sha1Null - || !sha256Null - || !spamsumNull; - } - - /// - /// Returns if there are no, non-empty hashes in common - /// - private static bool HasCommonHash(this Rom self, Rom other) - { - bool crc16Null = string.IsNullOrEmpty(self.ReadString(Rom.CRC16Key)); - crc16Null ^= string.IsNullOrEmpty(other.ReadString(Rom.CRC16Key)); - - bool crcNull = string.IsNullOrEmpty(self.ReadString(Rom.CRCKey)); - crcNull ^= string.IsNullOrEmpty(other.ReadString(Rom.CRCKey)); - - bool crc64Null = string.IsNullOrEmpty(self.ReadString(Rom.CRC64Key)); - crc64Null ^= string.IsNullOrEmpty(other.ReadString(Rom.CRC64Key)); - - bool md2Null = string.IsNullOrEmpty(self.ReadString(Rom.MD2Key)); - md2Null ^= string.IsNullOrEmpty(other.ReadString(Rom.MD2Key)); - - bool md4Null = string.IsNullOrEmpty(self.ReadString(Rom.MD4Key)); - md4Null ^= string.IsNullOrEmpty(other.ReadString(Rom.MD4Key)); - - bool md5Null = string.IsNullOrEmpty(self.ReadString(Rom.MD5Key)); - md5Null ^= string.IsNullOrEmpty(other.ReadString(Rom.MD5Key)); - - bool ripeMD128Null = string.IsNullOrEmpty(self.ReadString(Rom.RIPEMD128Key)); - ripeMD128Null ^= string.IsNullOrEmpty(other.ReadString(Rom.RIPEMD128Key)); - - bool ripeMD160Null = string.IsNullOrEmpty(self.ReadString(Rom.RIPEMD160Key)); - ripeMD160Null ^= string.IsNullOrEmpty(other.ReadString(Rom.RIPEMD160Key)); - - bool sha1Null = string.IsNullOrEmpty(self.ReadString(Rom.SHA1Key)); - sha1Null ^= string.IsNullOrEmpty(other.ReadString(Rom.SHA1Key)); - - bool sha256Null = string.IsNullOrEmpty(self.ReadString(Rom.SHA256Key)); - sha256Null ^= string.IsNullOrEmpty(other.ReadString(Rom.SHA256Key)); - - bool sha384Null = string.IsNullOrEmpty(self.ReadString(Rom.SHA384Key)); - sha384Null ^= string.IsNullOrEmpty(other.ReadString(Rom.SHA384Key)); - - bool sha512Null = string.IsNullOrEmpty(self.ReadString(Rom.SHA512Key)); - sha512Null ^= string.IsNullOrEmpty(other.ReadString(Rom.SHA512Key)); - - bool spamsumNull = string.IsNullOrEmpty(self.ReadString(Rom.SpamSumKey)); - spamsumNull ^= string.IsNullOrEmpty(other.ReadString(Rom.SpamSumKey)); - - return !crc16Null - || !crcNull - || !crc64Null - || !md2Null - || !md4Null - || !md5Null - || !ripeMD128Null - || !ripeMD160Null - || !sha1Null - || !sha256Null - || !sha384Null - || !sha512Null - || !spamsumNull; - } - - /// - /// Returns if any hashes exist - /// - 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; @@ -557,12 +326,12 @@ namespace SabreTools.Data.Extensions /// /// Returns if any hashes exist /// - private static bool HasHashes(this Media media) + public static bool HasHashes(this Media media) { - bool md5Null = string.IsNullOrEmpty(media.ReadString(Media.MD5Key)); - bool sha1Null = string.IsNullOrEmpty(media.ReadString(Media.SHA1Key)); - bool sha256Null = string.IsNullOrEmpty(media.ReadString(Media.SHA256Key)); - bool spamsumNull = string.IsNullOrEmpty(media.ReadString(Media.SpamSumKey)); + bool md5Null = string.IsNullOrEmpty(media.MD5); + bool sha1Null = string.IsNullOrEmpty(media.SHA1); + bool sha256Null = string.IsNullOrEmpty(media.SHA256); + bool spamsumNull = string.IsNullOrEmpty(media.SpamSum); return !md5Null || !sha1Null @@ -573,24 +342,24 @@ namespace SabreTools.Data.Extensions /// /// Returns if any hashes exist /// - private static bool HasHashes(this Rom rom) + public static bool HasHashes(this Rom rom) { - bool crc16Null = string.IsNullOrEmpty(rom.ReadString(Rom.CRC16Key)); - bool crcNull = string.IsNullOrEmpty(rom.ReadString(Rom.CRCKey)); - bool crc64Null = string.IsNullOrEmpty(rom.ReadString(Rom.CRC64Key)); - bool md2Null = string.IsNullOrEmpty(rom.ReadString(Rom.MD2Key)); - bool md4Null = string.IsNullOrEmpty(rom.ReadString(Rom.MD4Key)); - bool md5Null = string.IsNullOrEmpty(rom.ReadString(Rom.MD5Key)); - bool ripeMD128Null = string.IsNullOrEmpty(rom.ReadString(Rom.RIPEMD128Key)); - bool ripeMD160Null = string.IsNullOrEmpty(rom.ReadString(Rom.RIPEMD160Key)); - bool sha1Null = string.IsNullOrEmpty(rom.ReadString(Rom.SHA1Key)); - bool sha256Null = string.IsNullOrEmpty(rom.ReadString(Rom.SHA256Key)); - bool sha384Null = string.IsNullOrEmpty(rom.ReadString(Rom.SHA384Key)); - bool sha512Null = string.IsNullOrEmpty(rom.ReadString(Rom.SHA512Key)); - bool spamsumNull = string.IsNullOrEmpty(rom.ReadString(Rom.SpamSumKey)); + bool crc16Null = string.IsNullOrEmpty(rom.CRC16); + bool crc32Null = string.IsNullOrEmpty(rom.CRC32); + bool crc64Null = string.IsNullOrEmpty(rom.CRC64); + bool md2Null = string.IsNullOrEmpty(rom.MD2); + bool md4Null = string.IsNullOrEmpty(rom.MD4); + bool md5Null = string.IsNullOrEmpty(rom.MD5); + bool ripeMD128Null = string.IsNullOrEmpty(rom.RIPEMD128); + bool ripeMD160Null = string.IsNullOrEmpty(rom.RIPEMD160); + bool sha1Null = string.IsNullOrEmpty(rom.SHA1); + bool sha256Null = string.IsNullOrEmpty(rom.SHA256); + bool sha384Null = string.IsNullOrEmpty(rom.SHA384); + bool sha512Null = string.IsNullOrEmpty(rom.SHA512); + bool spamsumNull = string.IsNullOrEmpty(rom.SpamSum); return !crc16Null - || !crcNull + || !crc32Null || !crc64Null || !md2Null || !md4Null @@ -607,12 +376,12 @@ namespace SabreTools.Data.Extensions /// /// Returns if all of the hashes are set to their 0-byte values or null /// - private static bool HasZeroHash(this Disk disk) + public 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 @@ -622,18 +391,18 @@ namespace SabreTools.Data.Extensions /// /// Returns if all of the hashes are set to their 0-byte values or null /// - private static bool HasZeroHash(this Media media) + public static bool HasZeroHash(this Media media) { - string? md5 = media.ReadString(Media.MD5Key); + string? md5 = media.MD5; bool md5Null = string.IsNullOrEmpty(md5) || string.Equals(md5, HashType.MD5.ZeroString, StringComparison.OrdinalIgnoreCase); - string? sha1 = media.ReadString(Media.SHA1Key); + string? sha1 = media.SHA1; bool sha1Null = string.IsNullOrEmpty(sha1) || string.Equals(sha1, HashType.SHA1.ZeroString, StringComparison.OrdinalIgnoreCase); - string? sha256 = media.ReadString(Media.SHA256Key); + string? sha256 = media.SHA256; bool sha256Null = string.IsNullOrEmpty(sha256) || string.Equals(sha256, HashType.SHA256.ZeroString, StringComparison.OrdinalIgnoreCase); - string? spamsum = media.ReadString(Media.SpamSumKey); + string? spamsum = media.SpamSum; bool spamsumNull = string.IsNullOrEmpty(spamsum) || string.Equals(spamsum, HashType.SpamSum.ZeroString, StringComparison.OrdinalIgnoreCase); return md5Null @@ -645,49 +414,49 @@ namespace SabreTools.Data.Extensions /// /// Returns if all of the hashes are set to their 0-byte values or null /// - private static bool HasZeroHash(this Rom rom) + public static bool HasZeroHash(this Rom rom) { - string? crc16 = rom.ReadString(Rom.CRC16Key); + string? crc16 = rom.CRC16; bool crc16Null = string.IsNullOrEmpty(crc16) || string.Equals(crc16, HashType.CRC16.ZeroString, StringComparison.OrdinalIgnoreCase); - string? crc = rom.ReadString(Rom.CRCKey); - bool crcNull = string.IsNullOrEmpty(crc) || string.Equals(crc, HashType.CRC32.ZeroString, StringComparison.OrdinalIgnoreCase); + string? crc32 = rom.CRC32; + bool crc32Null = string.IsNullOrEmpty(crc32) || string.Equals(crc32, HashType.CRC32.ZeroString, StringComparison.OrdinalIgnoreCase); - string? crc64 = rom.ReadString(Rom.CRC64Key); + string? crc64 = rom.CRC64; bool crc64Null = string.IsNullOrEmpty(crc64) || string.Equals(crc64, HashType.CRC64.ZeroString, StringComparison.OrdinalIgnoreCase); - string? md2 = rom.ReadString(Rom.MD2Key); + string? md2 = rom.MD2; bool md2Null = string.IsNullOrEmpty(md2) || string.Equals(md2, HashType.MD2.ZeroString, StringComparison.OrdinalIgnoreCase); - string? md4 = rom.ReadString(Rom.MD4Key); + string? md4 = rom.MD4; bool md4Null = string.IsNullOrEmpty(md4) || string.Equals(md4, HashType.MD4.ZeroString, StringComparison.OrdinalIgnoreCase); - string? md5 = rom.ReadString(Rom.MD5Key); + string? md5 = rom.MD5; bool md5Null = string.IsNullOrEmpty(md5) || string.Equals(md5, HashType.MD5.ZeroString, StringComparison.OrdinalIgnoreCase); - string? ripeMD128 = rom.ReadString(Rom.RIPEMD128Key); + string? ripeMD128 = rom.RIPEMD128; bool ripeMD128Null = string.IsNullOrEmpty(value: ripeMD128) || string.Equals(ripeMD128, HashType.RIPEMD128.ZeroString, StringComparison.OrdinalIgnoreCase); - string? ripeMD160 = rom.ReadString(Rom.RIPEMD160Key); + string? ripeMD160 = rom.RIPEMD160; bool ripeMD160Null = string.IsNullOrEmpty(ripeMD160) || string.Equals(ripeMD160, HashType.RIPEMD160.ZeroString, StringComparison.OrdinalIgnoreCase); - string? sha1 = rom.ReadString(Rom.SHA1Key); + string? sha1 = rom.SHA1; bool sha1Null = string.IsNullOrEmpty(sha1) || string.Equals(sha1, HashType.SHA1.ZeroString, StringComparison.OrdinalIgnoreCase); - string? sha256 = rom.ReadString(Rom.SHA256Key); + string? sha256 = rom.SHA256; bool sha256Null = string.IsNullOrEmpty(sha256) || string.Equals(sha256, HashType.SHA256.ZeroString, StringComparison.OrdinalIgnoreCase); - string? sha384 = rom.ReadString(Rom.SHA384Key); + string? sha384 = rom.SHA384; bool sha384Null = string.IsNullOrEmpty(sha384) || string.Equals(sha384, HashType.SHA384.ZeroString, StringComparison.OrdinalIgnoreCase); - string? sha512 = rom.ReadString(Rom.SHA512Key); + string? sha512 = rom.SHA512; bool sha512Null = string.IsNullOrEmpty(sha512) || string.Equals(sha512, HashType.SHA512.ZeroString, StringComparison.OrdinalIgnoreCase); - string? spamsum = rom.ReadString(Rom.SpamSumKey); + string? spamsum = rom.SpamSum; bool spamsumNull = string.IsNullOrEmpty(spamsum) || string.Equals(spamsum, HashType.SpamSum.ZeroString, StringComparison.OrdinalIgnoreCase); return crc16Null - && crcNull + && crc32Null && crc64Null && md2Null && md4Null @@ -701,175 +470,253 @@ namespace SabreTools.Data.Extensions && spamsumNull; } + /// + /// Returns if there are no, non-empty hashes in common + /// + private static bool HasCommonHash(this Disk self, Disk other) + { + bool md5Null = string.IsNullOrEmpty(self.MD5); + md5Null ^= string.IsNullOrEmpty(other.MD5); + + bool sha1Null = string.IsNullOrEmpty(self.SHA1); + sha1Null ^= string.IsNullOrEmpty(other.SHA1); + + return !md5Null + || !sha1Null; + } + + /// + /// Returns if there are no, non-empty hashes in common + /// + private static bool HasCommonHash(this Media self, Media other) + { + bool md5Null = string.IsNullOrEmpty(self.MD5); + md5Null ^= string.IsNullOrEmpty(other.MD5); + + bool sha1Null = string.IsNullOrEmpty(self.SHA1); + sha1Null ^= string.IsNullOrEmpty(other.SHA1); + + bool sha256Null = string.IsNullOrEmpty(self.SHA256); + sha256Null ^= string.IsNullOrEmpty(other.SHA256); + + bool spamsumNull = string.IsNullOrEmpty(self.SpamSum); + spamsumNull ^= string.IsNullOrEmpty(other.SpamSum); + + return !md5Null + || !sha1Null + || !sha256Null + || !spamsumNull; + } + + /// + /// Returns if there are no, non-empty hashes in common + /// + private static bool HasCommonHash(this Rom self, Rom other) + { + bool crc16Null = string.IsNullOrEmpty(self.CRC16); + crc16Null ^= string.IsNullOrEmpty(other.CRC16); + + bool crc32Null = string.IsNullOrEmpty(self.CRC32); + crc32Null ^= string.IsNullOrEmpty(other.CRC32); + + bool crc64Null = string.IsNullOrEmpty(self.CRC64); + crc64Null ^= string.IsNullOrEmpty(other.CRC64); + + bool md2Null = string.IsNullOrEmpty(self.MD2); + md2Null ^= string.IsNullOrEmpty(other.MD2); + + bool md4Null = string.IsNullOrEmpty(self.MD4); + md4Null ^= string.IsNullOrEmpty(other.MD4); + + bool md5Null = string.IsNullOrEmpty(self.MD5); + md5Null ^= string.IsNullOrEmpty(other.MD5); + + bool ripeMD128Null = string.IsNullOrEmpty(self.RIPEMD128); + ripeMD128Null ^= string.IsNullOrEmpty(other.RIPEMD128); + + bool ripeMD160Null = string.IsNullOrEmpty(self.RIPEMD160); + ripeMD160Null ^= string.IsNullOrEmpty(other.RIPEMD160); + + bool sha1Null = string.IsNullOrEmpty(self.SHA1); + sha1Null ^= string.IsNullOrEmpty(other.SHA1); + + bool sha256Null = string.IsNullOrEmpty(self.SHA256); + sha256Null ^= string.IsNullOrEmpty(other.SHA256); + + bool sha384Null = string.IsNullOrEmpty(self.SHA384); + sha384Null ^= string.IsNullOrEmpty(other.SHA384); + + bool sha512Null = string.IsNullOrEmpty(self.SHA512); + sha512Null ^= string.IsNullOrEmpty(other.SHA512); + + bool spamsumNull = string.IsNullOrEmpty(self.SpamSum); + spamsumNull ^= string.IsNullOrEmpty(other.SpamSum); + + return !crc16Null + || !crc32Null + || !crc64Null + || !md2Null + || !md4Null + || !md5Null + || !ripeMD128Null + || !ripeMD160Null + || !sha1Null + || !sha256Null + || !sha384Null + || !sha512Null + || !spamsumNull; + } + #endregion #region Information Filling - /// - /// Fill any missing size and hash information from another DictionaryBase - /// - public static void FillMissingHashes(this DictionaryBase? self, DictionaryBase? other) - { - if (self is null || other is null) - return; - -#if NETCOREAPP || NETSTANDARD2_0_OR_GREATER - switch (self, other) - { - case (Disk diskSelf, Disk diskOther): - diskSelf.FillMissingHashes(diskOther); - break; - case (Media mediaSelf, Media mediaOther): - mediaSelf.FillMissingHashes(mediaOther); - break; - case (Rom romSelf, Rom romOther): - romSelf.FillMissingHashes(romOther); - break; - - default: - break; - } -#else - if (self is Disk diskSelf && other is Disk diskOther) - diskSelf.FillMissingHashes(diskOther); - else if (self is Media mediaSelf && other is Media mediaOther) - mediaSelf.FillMissingHashes(mediaOther); - else if (self is Rom romSelf && other is Rom romOther) - romSelf.FillMissingHashes(romOther); -#endif - } - /// /// Fill any missing size and hash information from another Disk /// - private static void FillMissingHashes(this Disk? self, Disk? other) + public static void FillMissingHashes(this Disk? self, Disk? other) { 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; } /// /// Fill any missing size and hash information from another Media /// - private static void FillMissingHashes(this Media? self, Media? other) + public static void FillMissingHashes(this Media? self, Media? other) { if (self is null || other is null) return; - string? selfMd5 = self.ReadString(Media.MD5Key); - string? otherMd5 = other.ReadString(Media.MD5Key); + string? selfMd5 = self.MD5; + string? otherMd5 = other.MD5; if (string.IsNullOrEmpty(selfMd5) && !string.IsNullOrEmpty(otherMd5)) - self[Media.MD5Key] = otherMd5; + self.MD5 = otherMd5; - string? selfSha1 = self.ReadString(Media.SHA1Key); - string? otherSha1 = other.ReadString(Media.SHA1Key); + string? selfSha1 = self.SHA1; + string? otherSha1 = other.SHA1; if (string.IsNullOrEmpty(selfSha1) && !string.IsNullOrEmpty(otherSha1)) - self[Media.SHA1Key] = otherSha1; + self.SHA1 = otherSha1; - string? selfSha256 = self.ReadString(Media.SHA256Key); - string? otherSha256 = other.ReadString(Media.SHA256Key); + string? selfSha256 = self.SHA256; + string? otherSha256 = other.SHA256; if (string.IsNullOrEmpty(selfSha256) && !string.IsNullOrEmpty(otherSha256)) - self[Media.SHA256Key] = otherSha256; + self.SHA256 = otherSha256; - string? selfSpamSum = self.ReadString(Media.SpamSumKey); - string? otherSpamSum = other.ReadString(Media.SpamSumKey); + string? selfSpamSum = self.SpamSum; + string? otherSpamSum = other.SpamSum; if (string.IsNullOrEmpty(selfSpamSum) && !string.IsNullOrEmpty(otherSpamSum)) - self[Media.SpamSumKey] = otherSpamSum; + self.SpamSum = otherSpamSum; } /// /// Fill any missing size and hash information from another Rom /// - private static void FillMissingHashes(this Rom? self, Rom? other) + public static void FillMissingHashes(this Rom? self, Rom? other) { if (self is null || other is null) return; - long? selfSize = self.ReadLong(Rom.SizeKey); - long? otherSize = other.ReadLong(Rom.SizeKey); + long? selfSize = self.Size; + long? otherSize = other.Size; if (selfSize is null && otherSize is not null) - self[Rom.SizeKey] = otherSize; + self.Size = otherSize; - string? selfCrc16 = self.ReadString(Rom.CRC16Key); - string? otherCrc16 = other.ReadString(Rom.CRC16Key); + string? selfCrc16 = self.CRC16; + string? otherCrc16 = other.CRC16; if (string.IsNullOrEmpty(selfCrc16) && !string.IsNullOrEmpty(otherCrc16)) - self[Rom.CRC16Key] = otherCrc16; + self.CRC16 = otherCrc16; - string? selfCrc = self.ReadString(Rom.CRCKey); - string? otherCrc = other.ReadString(Rom.CRCKey); + string? selfCrc = self.CRC32; + string? otherCrc = other.CRC32; if (string.IsNullOrEmpty(selfCrc) && !string.IsNullOrEmpty(otherCrc)) - self[Rom.CRCKey] = otherCrc; + self.CRC32 = otherCrc; - string? selfCrc64 = self.ReadString(Rom.CRC64Key); - string? otherCrc64 = other.ReadString(Rom.CRC64Key); + string? selfCrc64 = self.CRC64; + string? otherCrc64 = other.CRC64; if (string.IsNullOrEmpty(selfCrc64) && !string.IsNullOrEmpty(otherCrc64)) - self[Rom.CRC64Key] = otherCrc64; + self.CRC64 = otherCrc64; - string? selfMd2 = self.ReadString(Rom.MD2Key); - string? otherMd2 = other.ReadString(Rom.MD2Key); + string? selfMd2 = self.MD2; + string? otherMd2 = other.MD2; if (string.IsNullOrEmpty(selfMd2) && !string.IsNullOrEmpty(otherMd2)) - self[Rom.MD2Key] = otherMd2; + self.MD2 = otherMd2; - string? selfMd4 = self.ReadString(Rom.MD4Key); - string? otherMd4 = other.ReadString(Rom.MD4Key); + string? selfMd4 = self.MD4; + string? otherMd4 = other.MD4; if (string.IsNullOrEmpty(selfMd4) && !string.IsNullOrEmpty(otherMd4)) - self[Rom.MD4Key] = otherMd4; + self.MD4 = otherMd4; - string? selfMd5 = self.ReadString(Rom.MD5Key); - string? otherMd5 = other.ReadString(Rom.MD5Key); + string? selfMd5 = self.MD5; + string? otherMd5 = other.MD5; if (string.IsNullOrEmpty(selfMd5) && !string.IsNullOrEmpty(otherMd5)) - self[Rom.MD5Key] = otherMd5; + self.MD5 = otherMd5; - string? selfRipeMD128 = self.ReadString(Rom.RIPEMD128Key); - string? otherRipeMD128 = other.ReadString(Rom.RIPEMD128Key); + string? selfRipeMD128 = self.RIPEMD128; + string? otherRipeMD128 = other.RIPEMD128; if (string.IsNullOrEmpty(selfRipeMD128) && !string.IsNullOrEmpty(otherRipeMD128)) - self[Rom.RIPEMD128Key] = otherRipeMD128; + self.RIPEMD128 = otherRipeMD128; - string? selfRipeMD160 = self.ReadString(Rom.RIPEMD160Key); - string? otherRipeMD160 = other.ReadString(Rom.RIPEMD160Key); + string? selfRipeMD160 = self.RIPEMD160; + string? otherRipeMD160 = other.RIPEMD160; if (string.IsNullOrEmpty(selfRipeMD160) && !string.IsNullOrEmpty(otherRipeMD160)) - self[Rom.RIPEMD160Key] = otherRipeMD160; + self.RIPEMD160 = otherRipeMD160; - string? selfSha1 = self.ReadString(Rom.SHA1Key); - string? otherSha1 = other.ReadString(Rom.SHA1Key); + string? selfSha1 = self.SHA1; + string? otherSha1 = other.SHA1; if (string.IsNullOrEmpty(selfSha1) && !string.IsNullOrEmpty(otherSha1)) - self[Rom.SHA1Key] = otherSha1; + self.SHA1 = otherSha1; - string? selfSha256 = self.ReadString(Rom.SHA256Key); - string? otherSha256 = other.ReadString(Rom.SHA256Key); + string? selfSha256 = self.SHA256; + string? otherSha256 = other.SHA256; if (string.IsNullOrEmpty(selfSha256) && !string.IsNullOrEmpty(otherSha256)) - self[Rom.SHA256Key] = otherSha256; + self.SHA256 = otherSha256; - string? selfSha384 = self.ReadString(Rom.SHA384Key); - string? otherSha384 = other.ReadString(Rom.SHA384Key); + string? selfSha384 = self.SHA384; + string? otherSha384 = other.SHA384; if (string.IsNullOrEmpty(selfSha384) && !string.IsNullOrEmpty(otherSha384)) - self[Rom.SHA384Key] = otherSha384; + self.SHA384 = otherSha384; - string? selfSha512 = self.ReadString(Rom.SHA512Key); - string? otherSha512 = other.ReadString(Rom.SHA512Key); + string? selfSha512 = self.SHA512; + string? otherSha512 = other.SHA512; if (string.IsNullOrEmpty(selfSha512) && !string.IsNullOrEmpty(otherSha512)) - self[Rom.SHA512Key] = otherSha512; + self.SHA512 = otherSha512; - string? selfSpamSum = self.ReadString(Rom.SpamSumKey); - string? otherSpamSum = other.ReadString(Rom.SpamSumKey); + string? selfSpamSum = self.SpamSum; + string? otherSpamSum = other.SpamSum; if (string.IsNullOrEmpty(selfSpamSum) && !string.IsNullOrEmpty(otherSpamSum)) - self[Rom.SpamSumKey] = otherSpamSum; + self.SpamSum = otherSpamSum; } #endregion #region String to Enum + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum value representing the input, null on error + public static Blit? AsBlit(this string? value) + { + return value?.ToLowerInvariant() switch + { + "plain" => Blit.Plain, + "dirty" => Blit.Dirty, + _ => null, + }; + } + /// /// Get the enum value for an input string, if possible /// @@ -1036,10 +883,73 @@ namespace SabreTools.Data.Extensions "baddump" => ItemStatus.BadDump, "nodump" or "yes" => ItemStatus.Nodump, "verified" => ItemStatus.Verified, + "deduped" => ItemStatus.Deduped, _ => null, }; } + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum value representing the input, default on error + public static ItemType AsItemType(this string? value) + { + return value?.ToLowerInvariant() switch + { + // "Actionable" item types + "rom" => ItemType.Rom, + "disk" => ItemType.Disk, + "file" => ItemType.File, + "media" => ItemType.Media, + + // "Auxiliary" item types + "adjuster" => ItemType.Adjuster, + "analog" => ItemType.Analog, + "archive" => ItemType.Archive, + "biosset" => ItemType.BiosSet, + "chip" => ItemType.Chip, + "condition" => ItemType.Condition, + "configuration" => ItemType.Configuration, + "conflocation" => ItemType.ConfLocation, + "confsetting" => ItemType.ConfSetting, + "control" => ItemType.Control, + "dataarea" => ItemType.DataArea, + "device" => ItemType.Device, + "device_ref" or "deviceref" => ItemType.DeviceRef, + "diplocation" => ItemType.DipLocation, + "dipswitch" => ItemType.DipSwitch, + "dipvalue" => ItemType.DipValue, + "diskarea" => ItemType.DiskArea, + "display" => ItemType.Display, + "driver" => ItemType.Driver, + "dump" => ItemType.Dump, + "extension" => ItemType.Extension, + "feature" => ItemType.Feature, + "info" => ItemType.Info, + "input" => ItemType.Input, + "instance" => ItemType.Instance, + "original" => ItemType.Original, + "part" => ItemType.Part, + "part_feature" or "partfeature" => ItemType.PartFeature, + "port" => ItemType.Port, + "ramoption" or "ram_option" => ItemType.RamOption, + "release" => ItemType.Release, + "release_details" or "releasedetails" => ItemType.ReleaseDetails, + "sample" => ItemType.Sample, + "serials" => ItemType.Serials, + "sharedfeat" or "shared_feat" or "sharedfeature" or "shared_feature" => ItemType.SharedFeat, + "slot" => ItemType.Slot, + "slotoption" or "slot_option" => ItemType.SlotOption, + "softwarelist" or "software_list" => ItemType.SoftwareList, + "sound" => ItemType.Sound, + "source_details" or "sourcedetails" => ItemType.SourceDetails, + "video" => ItemType.Video, + "blank" => ItemType.Blank, + _ => ItemType.NULL, + }; + } + /// /// Get the enum value for an input string, if possible /// @@ -1158,6 +1068,23 @@ namespace SabreTools.Data.Extensions }; } + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum value representing the input, null on error + public static Rotation? AsRotation(this string? value) + { + return value?.ToLowerInvariant() switch + { + "0" or "north" or "vertical" => Rotation.North, + "90" or "east" or "horizontal" => Rotation.East, + "180" or "south" => Rotation.South, + "270" or "west" => Rotation.West, + _ => null, + }; + } + /// /// Get the enum value for an input string, if possible /// @@ -1222,6 +1149,23 @@ namespace SabreTools.Data.Extensions }; } + /// + /// Get the enum value for an input string, if possible + /// + /// String value to parse/param> + /// Enum value representing the input, null on error + public static Width? AsWidth(this string? value) + { + return value?.ToLowerInvariant() switch + { + "8" or "byte" => Width.Byte, + "16" or "short" => Width.Short, + "32" or "int" => Width.Int, + "64" or "long" => Width.Long, + _ => null, + }; + } + /// /// Get bool? value from input string /// @@ -1231,8 +1175,8 @@ namespace SabreTools.Data.Extensions { return yesno?.ToLowerInvariant() switch { - "yes" or "true" => true, - "no" or "false" => false, + "1" or "yes" or "true" => true, + "0" or "no" or "false" => false, _ => null, }; } @@ -1241,6 +1185,21 @@ namespace SabreTools.Data.Extensions #region Enum to String + /// + /// Get the string value for an input enum, if possible + /// + /// Enum value to parse/param> + /// String value representing the input, null on error + public static string? AsStringValue(this Blit value) + { + return value switch + { + Blit.Plain => "plain", + Blit.Dirty => "dirty", + _ => null, + }; + } + /// /// Get the string value for an input enum, if possible /// @@ -1408,6 +1367,71 @@ namespace SabreTools.Data.Extensions ItemStatus.BadDump => "baddump", ItemStatus.Nodump => useSecond ? "yes" : "nodump", ItemStatus.Verified => "verified", + ItemStatus.Deduped => "deduped", + _ => null, + }; + } + + /// + /// Get the string value for an input enum, if possible + /// + /// Enum value to parse/param> + /// String value representing the input, default on error + public static string? AsStringValue(this ItemType value) + { + return value switch + { + // "Actionable" item types + ItemType.Rom => "rom", + ItemType.Disk => "disk", + ItemType.File => "file", + ItemType.Media => "media", + + // "Auxiliary" item types + ItemType.Adjuster => "adjuster", + ItemType.Analog => "analog", + ItemType.Archive => "archive", + ItemType.BiosSet => "biosset", + ItemType.Chip => "chip", + ItemType.Condition => "condition", + ItemType.Configuration => "configuration", + ItemType.ConfLocation => "conflocation", + ItemType.ConfSetting => "confsetting", + ItemType.Control => "control", + ItemType.DataArea => "dataarea", + ItemType.Device => "device", + ItemType.DeviceRef => "device_ref", + ItemType.DipLocation => "diplocation", + ItemType.DipSwitch => "dipswitch", + ItemType.DipValue => "dipvalue", + ItemType.DiskArea => "diskarea", + ItemType.Display => "display", + ItemType.Driver => "driver", + ItemType.Dump => "dump", + ItemType.Extension => "extension", + ItemType.Feature => "feature", + ItemType.Info => "info", + ItemType.Input => "input", + ItemType.Instance => "instance", + ItemType.Original => "original", + ItemType.Part => "part", + ItemType.PartFeature => "part_feature", + ItemType.Port => "port", + ItemType.RamOption => "ramoption", + ItemType.Release => "release", + ItemType.ReleaseDetails => "release_details", + ItemType.Sample => "sample", + ItemType.Serials => "serials", + ItemType.SharedFeat => "sharedfeat", + ItemType.Slot => "slot", + ItemType.SlotOption => "slotoption", + ItemType.SoftwareList => "softwarelist", + ItemType.Sound => "sound", + ItemType.SourceDetails => "source_details", + ItemType.Video => "video", + ItemType.Blank => "blank", + + ItemType.NULL => null, _ => null, }; } @@ -1532,6 +1556,23 @@ namespace SabreTools.Data.Extensions }; } + /// + /// Get the string value for an input enum, if possible + /// + /// Enum value to parse/param> + /// String value representing the input, null on error + public static string? AsStringValue(this Rotation value, bool useSecond = false) + { + return value switch + { + Rotation.North => useSecond ? "vertical" : "0", + Rotation.East => useSecond ? "horizontal" : "90", + Rotation.South => useSecond ? "vertical" : "180", + Rotation.West => useSecond ? "horizontal" : "270", + _ => null, + }; + } + /// /// Get the string value for an input enum, if possible /// @@ -1581,6 +1622,23 @@ namespace SabreTools.Data.Extensions }; } + /// + /// Get the string value for an input enum, if possible + /// + /// Enum value to parse/param> + /// String value representing the input, null on error + public static string? AsStringValue(this Width value) + { + return value switch + { + Width.Byte => "8", + Width.Short => "16", + Width.Int => "32", + Width.Long => "64", + _ => null, + }; + } + /// /// Get the string value for an input enum, if possible /// @@ -1593,6 +1651,7 @@ namespace SabreTools.Data.Extensions SupportStatus.Good => "good", SupportStatus.Imperfect => "imperfect", SupportStatus.Preliminary => "preliminary", + SupportStatus.Test => "test", _ => null, }; } 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/AttractMode/Row.cs b/SabreTools.Data.Models/AttractMode/Row.cs index 06867ab5..6f4c648e 100644 --- a/SabreTools.Data.Models/AttractMode/Row.cs +++ b/SabreTools.Data.Models/AttractMode/Row.cs @@ -46,6 +46,6 @@ namespace SabreTools.Data.Models.AttractMode public string? PlayedTime { get; set; } - public string? FileIsAvailable { get; set; } + public bool? FileIsAvailable { get; set; } } } diff --git a/SabreTools.Data.Models/ClrMamePro/BiosSet.cs b/SabreTools.Data.Models/ClrMamePro/BiosSet.cs index 77895d53..a6d069ea 100644 --- a/SabreTools.Data.Models/ClrMamePro/BiosSet.cs +++ b/SabreTools.Data.Models/ClrMamePro/BiosSet.cs @@ -3,15 +3,15 @@ namespace SabreTools.Data.Models.ClrMamePro /// biosset public class BiosSet { - /// name + /// "name" [Required] public string? Name { get; set; } - /// description + /// "description" [Required] public string? Description { get; set; } - /// default - public string? Default { get; set; } + /// "default", (yes|no) "no" + public bool? Default { get; set; } } } diff --git a/SabreTools.Data.Models/ClrMamePro/Chip.cs b/SabreTools.Data.Models/ClrMamePro/Chip.cs index 5d9fd30b..282e53fe 100644 --- a/SabreTools.Data.Models/ClrMamePro/Chip.cs +++ b/SabreTools.Data.Models/ClrMamePro/Chip.cs @@ -1,4 +1,6 @@ +using SabreTools.Data.Models.Metadata; + namespace SabreTools.Data.Models.ClrMamePro { /// chip @@ -6,7 +8,7 @@ namespace SabreTools.Data.Models.ClrMamePro { /// type, (cpu|audio) [Required] - public string? Type { get; set; } + public ChipType? Type { get; set; } /// name [Required] @@ -15,7 +17,7 @@ namespace SabreTools.Data.Models.ClrMamePro /// flags public string? Flags { get; set; } - /// clock, Numeric? - public string? Clock { get; set; } + /// clock + public long? Clock { get; set; } } } diff --git a/SabreTools.Data.Models/ClrMamePro/ClrMamePro.cs b/SabreTools.Data.Models/ClrMamePro/ClrMamePro.cs index 4cc061bd..772d6664 100644 --- a/SabreTools.Data.Models/ClrMamePro/ClrMamePro.cs +++ b/SabreTools.Data.Models/ClrMamePro/ClrMamePro.cs @@ -1,3 +1,5 @@ +using SabreTools.Data.Models.Metadata; + namespace SabreTools.Data.Models.ClrMamePro { /// clrmamepro @@ -40,12 +42,12 @@ namespace SabreTools.Data.Models.ClrMamePro public string? Type { get; set; } /// forcemerging - public string? ForceMerging { get; set; } + public MergingFlag ForceMerging { get; set; } - /// forcezipping - public string? ForceZipping { get; set; } + /// forcezipping, (yes|no) "no" + public bool? ForceZipping { get; set; } /// forcepacking - public string? ForcePacking { get; set; } + public PackingFlag ForcePacking { get; set; } } } diff --git a/SabreTools.Data.Models/ClrMamePro/DipSwitch.cs b/SabreTools.Data.Models/ClrMamePro/DipSwitch.cs index 63370948..49a970ff 100644 --- a/SabreTools.Data.Models/ClrMamePro/DipSwitch.cs +++ b/SabreTools.Data.Models/ClrMamePro/DipSwitch.cs @@ -4,14 +4,14 @@ namespace SabreTools.Data.Models.ClrMamePro /// dipswitch public class DipSwitch { - /// name + /// "name" [Required] public string? Name { get; set; } - /// entry + /// "entry" public string[]? Entry { get; set; } - /// default, (yes|no) "no" - public string? Default { get; set; } + /// "default", (yes|no) "no" + public bool? Default { get; set; } } } diff --git a/SabreTools.Data.Models/ClrMamePro/Disk.cs b/SabreTools.Data.Models/ClrMamePro/Disk.cs index af2493ba..34d9d4b9 100644 --- a/SabreTools.Data.Models/ClrMamePro/Disk.cs +++ b/SabreTools.Data.Models/ClrMamePro/Disk.cs @@ -1,4 +1,6 @@ +using SabreTools.Data.Models.Metadata; + namespace SabreTools.Data.Models.ClrMamePro { /// disk @@ -18,7 +20,7 @@ namespace SabreTools.Data.Models.ClrMamePro public string? Merge { get; set; } /// status - public string? Status { get; set; } + public ItemStatus? Status { get; set; } /// flags public string? Flags { get; set; } diff --git a/SabreTools.Data.Models/ClrMamePro/Driver.cs b/SabreTools.Data.Models/ClrMamePro/Driver.cs index cddc19b9..07abe4a2 100644 --- a/SabreTools.Data.Models/ClrMamePro/Driver.cs +++ b/SabreTools.Data.Models/ClrMamePro/Driver.cs @@ -1,4 +1,6 @@ +using SabreTools.Data.Models.Metadata; + namespace SabreTools.Data.Models.ClrMamePro { /// driver @@ -6,18 +8,18 @@ namespace SabreTools.Data.Models.ClrMamePro { /// status, (good|imperfect|preliminary) [Required] - public string? Status { get; set; } + public SupportStatus? Status { get; set; } /// color, (good|imperfect|preliminary) - public string? Color { get; set; } + public SupportStatus? Color { get; set; } /// sound, (good|imperfect|preliminary) - public string? Sound { get; set; } + public SupportStatus? Sound { get; set; } /// palettesize, Numeric? public string? PaletteSize { get; set; } /// blit, (plain|dirty) - public string? Blit { get; set; } + public Blit? Blit { get; set; } } } diff --git a/SabreTools.Data.Models/ClrMamePro/Input.cs b/SabreTools.Data.Models/ClrMamePro/Input.cs index 3a413113..94217a4c 100644 --- a/SabreTools.Data.Models/ClrMamePro/Input.cs +++ b/SabreTools.Data.Models/ClrMamePro/Input.cs @@ -4,24 +4,24 @@ namespace SabreTools.Data.Models.ClrMamePro /// input public class Input { - /// players, Numeric/remarks> + /// "players"/remarks> [Required] - public string? Players { get; set; } + public long? Players { get; set; } - /// control + /// "control" public string? Control { get; set; } - /// buttons, Numeric + /// "buttons" [Required] - public string? Buttons { get; set; } + public long? Buttons { get; set; } - /// coins, Numeric - public string? Coins { get; set; } + /// "coins" + public long? Coins { get; set; } - /// tilt, (yes|no) "no" - public string? Tilt { get; set; } + /// "tilt", (yes|no) "no" + public bool? Tilt { get; set; } - /// service, (yes|no) "no" - public string? Service { get; set; } + /// "service", (yes|no) "no" + public bool? Service { get; set; } } } diff --git a/SabreTools.Data.Models/ClrMamePro/Release.cs b/SabreTools.Data.Models/ClrMamePro/Release.cs index 7ed56e6d..afb313d8 100644 --- a/SabreTools.Data.Models/ClrMamePro/Release.cs +++ b/SabreTools.Data.Models/ClrMamePro/Release.cs @@ -4,21 +4,21 @@ namespace SabreTools.Data.Models.ClrMamePro /// release public class Release { - /// name + /// "name" [Required] public string? Name { get; set; } - /// region + /// "region" [Required] public string? Region { get; set; } - /// language + /// "language" public string? Language { get; set; } - /// date + /// "date" public string? Date { get; set; } - /// default - public string? Default { get; set; } + /// "default", (yes|no) "no" + public bool? Default { get; set; } } } diff --git a/SabreTools.Data.Models/ClrMamePro/Rom.cs b/SabreTools.Data.Models/ClrMamePro/Rom.cs index 4034798e..329fa18e 100644 --- a/SabreTools.Data.Models/ClrMamePro/Rom.cs +++ b/SabreTools.Data.Models/ClrMamePro/Rom.cs @@ -1,5 +1,7 @@ #pragma warning disable IDE1006 // Naming Styles +using SabreTools.Data.Models.Metadata; + namespace SabreTools.Data.Models.ClrMamePro { /// rom @@ -11,7 +13,7 @@ namespace SabreTools.Data.Models.ClrMamePro /// size, Numeric [Required] - public string? Size { get; set; } + public long? Size { get; set; } /// crc public string? CRC { get; set; } @@ -26,7 +28,7 @@ namespace SabreTools.Data.Models.ClrMamePro public string? Merge { get; set; } /// status - public string? Status { get; set; } + public ItemStatus? Status { get; set; } /// flags public string? Flags { get; set; } @@ -101,10 +103,10 @@ namespace SabreTools.Data.Models.ClrMamePro #region RomVault Extensions /// inverted; Boolean; Appears after Date - public string? Inverted { get; set; } + public bool? Inverted { get; set; } /// mia; Boolean; Appears after Inverted - public string? MIA { get; set; } + public bool? MIA { get; set; } #endregion } diff --git a/SabreTools.Data.Models/ClrMamePro/Sound.cs b/SabreTools.Data.Models/ClrMamePro/Sound.cs index 4af5f9ce..1ffa6fc0 100644 --- a/SabreTools.Data.Models/ClrMamePro/Sound.cs +++ b/SabreTools.Data.Models/ClrMamePro/Sound.cs @@ -6,6 +6,6 @@ namespace SabreTools.Data.Models.ClrMamePro { /// channels, Numeric? [Required] - public string? Channels { get; set; } + public long? Channels { get; set; } } } diff --git a/SabreTools.Data.Models/ClrMamePro/Video.cs b/SabreTools.Data.Models/ClrMamePro/Video.cs index e8c801ca..0c53a151 100644 --- a/SabreTools.Data.Models/ClrMamePro/Video.cs +++ b/SabreTools.Data.Models/ClrMamePro/Video.cs @@ -1,4 +1,6 @@ +using SabreTools.Data.Models.Metadata; + namespace SabreTools.Data.Models.ClrMamePro { /// video @@ -6,25 +8,25 @@ namespace SabreTools.Data.Models.ClrMamePro { /// screen, (raster|vector) [Required] - public string? Screen { get; set; } + public DisplayType? Screen { get; set; } /// orientation, (vertical|horizontal) [Required] - public string? Orientation { get; set; } + public Rotation? Orientation { get; set; } - /// x, Numeric? - public string? X { get; set; } + /// x + public long? X { get; set; } - /// y, Numeric? - public string? Y { get; set; } + /// y + public long? Y { get; set; } - /// aspectx, Numeric? - public string? AspectX { get; set; } + /// aspectx + public long? AspectX { get; set; } - /// aspecty, Numeric? - public string? AspectY { get; set; } + /// aspecty + public long? AspectY { get; set; } - /// freq, Numeric? - public string? Freq { get; set; } + /// freq + public double? Freq { get; set; } } } diff --git a/SabreTools.Data.Models/DosCenter/File.cs b/SabreTools.Data.Models/DosCenter/File.cs index 7766ead6..99b30442 100644 --- a/SabreTools.Data.Models/DosCenter/File.cs +++ b/SabreTools.Data.Models/DosCenter/File.cs @@ -10,7 +10,7 @@ namespace SabreTools.Data.Models.DosCenter /// size, attribute, numeric [Required] - public string? Size { get; set; } + public long? Size { get; set; } /// crc, attribute [Required] diff --git a/SabreTools.Data.Models/EverdriveSMDB/Row.cs b/SabreTools.Data.Models/EverdriveSMDB/Row.cs index ddc19765..d81cc3fb 100644 --- a/SabreTools.Data.Models/EverdriveSMDB/Row.cs +++ b/SabreTools.Data.Models/EverdriveSMDB/Row.cs @@ -21,6 +21,6 @@ namespace SabreTools.Data.Models.EverdriveSMDB [Required] public string? CRC32 { get; set; } - public string? Size { get; set; } + public long? Size { get; set; } } } diff --git a/SabreTools.Data.Models/Listrom/Row.cs b/SabreTools.Data.Models/Listrom/Row.cs index 28e32499..a86bb239 100644 --- a/SabreTools.Data.Models/Listrom/Row.cs +++ b/SabreTools.Data.Models/Listrom/Row.cs @@ -18,7 +18,7 @@ namespace SabreTools.Data.Models.Listrom [Required] public string? Name { get; set; } - public string? Size { get; set; } + public long? Size { get; set; } public bool Bad { get; set; } diff --git a/SabreTools.Data.Models/Listxml/Adjuster.cs b/SabreTools.Data.Models/Listxml/Adjuster.cs index 44417c5d..ea99b1d2 100644 --- a/SabreTools.Data.Models/Listxml/Adjuster.cs +++ b/SabreTools.Data.Models/Listxml/Adjuster.cs @@ -12,7 +12,7 @@ namespace SabreTools.Data.Models.Listxml /// (yes|no) "no" [XmlAttribute("default")] - public string? Default { get; set; } + public bool? Default { get; set; } [XmlElement("condition")] public Condition? Condition { get; set; } diff --git a/SabreTools.Data.Models/Listxml/BiosSet.cs b/SabreTools.Data.Models/Listxml/BiosSet.cs index f62df74a..2ffdb633 100644 --- a/SabreTools.Data.Models/Listxml/BiosSet.cs +++ b/SabreTools.Data.Models/Listxml/BiosSet.cs @@ -16,6 +16,6 @@ namespace SabreTools.Data.Models.Listxml /// (yes|no) "no" [XmlAttribute("default")] - public string? Default { get; set; } + public bool? Default { get; set; } } } diff --git a/SabreTools.Data.Models/Listxml/Chip.cs b/SabreTools.Data.Models/Listxml/Chip.cs index 993a967f..b447e24c 100644 --- a/SabreTools.Data.Models/Listxml/Chip.cs +++ b/SabreTools.Data.Models/Listxml/Chip.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Listxml { @@ -16,13 +17,13 @@ namespace SabreTools.Data.Models.Listxml /// (cpu|audio) [Required] [XmlAttribute("type")] - public string? Type { get; set; } + public ChipType? Type { get; set; } /// Only present in older versions [XmlAttribute("soundonly")] - public string? SoundOnly { get; set; } + public bool? SoundOnly { get; set; } [XmlAttribute("clock")] - public string? Clock { get; set; } + public long? Clock { get; set; } } } diff --git a/SabreTools.Data.Models/Listxml/Condition.cs b/SabreTools.Data.Models/Listxml/Condition.cs index 73f4908b..5e4858a4 100644 --- a/SabreTools.Data.Models/Listxml/Condition.cs +++ b/SabreTools.Data.Models/Listxml/Condition.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Listxml { @@ -17,7 +18,7 @@ namespace SabreTools.Data.Models.Listxml /// (eq|ne|gt|le|lt|ge) [Required] [XmlAttribute("relation")] - public string? Relation { get; set; } + public Relation? Relation { get; set; } [Required] [XmlAttribute("value")] diff --git a/SabreTools.Data.Models/Listxml/ConfLocation.cs b/SabreTools.Data.Models/Listxml/ConfLocation.cs index dd1da1dc..de57786f 100644 --- a/SabreTools.Data.Models/Listxml/ConfLocation.cs +++ b/SabreTools.Data.Models/Listxml/ConfLocation.cs @@ -10,13 +10,12 @@ namespace SabreTools.Data.Models.Listxml [XmlAttribute("name")] public string? Name { get; set; } - /// Numeric? [Required] [XmlAttribute("number")] - public string? Number { get; set; } + public long? Number { get; set; } /// (yes|no) "no" [XmlAttribute("inverted")] - public string? Inverted { get; set; } + public bool? Inverted { get; set; } } } diff --git a/SabreTools.Data.Models/Listxml/ConfSetting.cs b/SabreTools.Data.Models/Listxml/ConfSetting.cs index 20f7200b..1d351d0c 100644 --- a/SabreTools.Data.Models/Listxml/ConfSetting.cs +++ b/SabreTools.Data.Models/Listxml/ConfSetting.cs @@ -16,7 +16,7 @@ namespace SabreTools.Data.Models.Listxml /// (yes|no) "no" [XmlAttribute("default")] - public string? Default { get; set; } + public bool? Default { get; set; } [XmlElement("condition")] public Condition? Condition { get; set; } diff --git a/SabreTools.Data.Models/Listxml/Control.cs b/SabreTools.Data.Models/Listxml/Control.cs index e5b0f134..b1be6a26 100644 --- a/SabreTools.Data.Models/Listxml/Control.cs +++ b/SabreTools.Data.Models/Listxml/Control.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Listxml { @@ -9,49 +10,39 @@ namespace SabreTools.Data.Models.Listxml /// (joy|stick|paddle|pedal|lightgun|positional|dial|trackball|mouse|only_buttons|keypad|keyboard|mahjong|hanafuda|gambling) [Required] [XmlAttribute("type")] - public string? Type { get; set; } + public ControlType? Type { get; set; } - /// Numeric [XmlAttribute("player")] - public string? Player { get; set; } + public long? Player { get; set; } - /// Numeric [XmlAttribute("buttons")] - public string? Buttons { get; set; } + public long? Buttons { get; set; } - /// Numeric [XmlAttribute("reqbuttons")] - public string? ReqButtons { get; set; } + public long? ReqButtons { get; set; } - /// Numeric [XmlAttribute("minimum")] - public string? Minimum { get; set; } + public long? Minimum { get; set; } - /// Numeric [XmlAttribute("maximum")] - public string? Maximum { get; set; } + public long? Maximum { get; set; } - /// Numeric [XmlAttribute("sensitivity")] - public string? Sensitivity { get; set; } + public long? Sensitivity { get; set; } - /// Numeric [XmlAttribute("keydelta")] - public string? KeyDelta { get; set; } + public long? KeyDelta { get; set; } /// (yes|no) "no" [XmlAttribute("reverse")] - public string? Reverse { get; set; } + public bool? Reverse { get; set; } - /// Numeric? [XmlAttribute("ways")] public string? Ways { get; set; } - /// Numeric? [XmlAttribute("ways2")] public string? Ways2 { get; set; } - /// Numeric? [XmlAttribute("ways3")] public string? Ways3 { get; set; } } diff --git a/SabreTools.Data.Models/Listxml/Device.cs b/SabreTools.Data.Models/Listxml/Device.cs index a6790474..ef377197 100644 --- a/SabreTools.Data.Models/Listxml/Device.cs +++ b/SabreTools.Data.Models/Listxml/Device.cs @@ -1,14 +1,16 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Listxml { [XmlRoot("device")] public class Device { + /// (unknown|cartridge|floppydisk|harddisk|cylinder|cassette|punchcard|punchtape|printout|serial|parallel|snapshot|quickload|memcard|cdrom|magtape|romimage|midiin|midiout|picture|vidfile) [Required] [XmlAttribute("type")] - public string? Type { get; set; } + public DeviceType? Type { get; set; } [XmlAttribute("tag")] public string? Tag { get; set; } @@ -16,9 +18,9 @@ namespace SabreTools.Data.Models.Listxml [XmlAttribute("fixed_image")] public string? FixedImage { get; set; } - /// Numeric boolean + /// (0|1) "0" [XmlAttribute("mandatory")] - public string? Mandatory { get; set; } + public bool? Mandatory { get; set; } [XmlAttribute("interface")] public string? Interface { get; set; } diff --git a/SabreTools.Data.Models/Listxml/DipLocation.cs b/SabreTools.Data.Models/Listxml/DipLocation.cs index f669f3e5..cdbdf653 100644 --- a/SabreTools.Data.Models/Listxml/DipLocation.cs +++ b/SabreTools.Data.Models/Listxml/DipLocation.cs @@ -10,13 +10,12 @@ namespace SabreTools.Data.Models.Listxml [XmlAttribute("name")] public string? Name { get; set; } - /// Numeric? [Required] [XmlAttribute("number")] - public string? Number { get; set; } + public long? Number { get; set; } /// (yes|no) "no" [XmlAttribute("inverted")] - public string? Inverted { get; set; } + public bool? Inverted { get; set; } } } diff --git a/SabreTools.Data.Models/Listxml/DipValue.cs b/SabreTools.Data.Models/Listxml/DipValue.cs index 3f61f7fb..cfd96626 100644 --- a/SabreTools.Data.Models/Listxml/DipValue.cs +++ b/SabreTools.Data.Models/Listxml/DipValue.cs @@ -16,7 +16,7 @@ namespace SabreTools.Data.Models.Listxml /// (yes|no) "no" [XmlAttribute("default")] - public string? Default { get; set; } + public bool? Default { get; set; } [XmlElement("condition")] public Condition? Condition { get; set; } diff --git a/SabreTools.Data.Models/Listxml/Disk.cs b/SabreTools.Data.Models/Listxml/Disk.cs index 3b4c6158..1ca07c83 100644 --- a/SabreTools.Data.Models/Listxml/Disk.cs +++ b/SabreTools.Data.Models/Listxml/Disk.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Listxml { @@ -23,20 +24,19 @@ 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")] - public string? Writable { get; set; } + public bool? Writable { get; set; } /// (baddump|nodump|good) "good" [XmlAttribute("status")] - public string? Status { get; set; } + public ItemStatus? Status { get; set; } /// (yes|no) "no" [XmlAttribute("optional")] - public string? Optional { get; set; } + public bool? Optional { get; set; } } } diff --git a/SabreTools.Data.Models/Listxml/Display.cs b/SabreTools.Data.Models/Listxml/Display.cs index 885cb5f3..2da2f7c0 100644 --- a/SabreTools.Data.Models/Listxml/Display.cs +++ b/SabreTools.Data.Models/Listxml/Display.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Listxml { @@ -12,55 +13,45 @@ namespace SabreTools.Data.Models.Listxml /// (raster|vector|lcd|svg|unknown) [Required] [XmlAttribute("type")] - public string? Type { get; set; } + public DisplayType? Type { get; set; } /// (0|90|180|270) [XmlAttribute("rotate")] - public string? Rotate { get; set; } + public Rotation? Rotate { get; set; } /// (yes|no) "no" [XmlAttribute("flipx")] - public string? FlipX { get; set; } + public bool? FlipX { get; set; } - /// Numeric [XmlAttribute("width")] - public string? Width { get; set; } + public long? Width { get; set; } - /// Numeric [XmlAttribute("height")] - public string? Height { get; set; } + public long? Height { get; set; } - /// Numeric [Required] [XmlAttribute("refresh")] - public string? Refresh { get; set; } + public double? Refresh { get; set; } - /// Numeric [XmlAttribute("pixclock")] - public string? PixClock { get; set; } + public long? PixClock { get; set; } - /// Numeric [XmlAttribute("htotal")] - public string? HTotal { get; set; } + public long? HTotal { get; set; } - /// Numeric [XmlAttribute("hbend")] - public string? HBEnd { get; set; } + public long? HBEnd { get; set; } - /// Numeric [XmlAttribute("hbstart")] - public string? HBStart { get; set; } + public long? HBStart { get; set; } - /// Numeric [XmlAttribute("vtotal")] - public string? VTotal { get; set; } + public long? VTotal { get; set; } - /// Numeric [XmlAttribute("vbend")] - public string? VBEnd { get; set; } + public long? VBEnd { get; set; } - /// Numeric [XmlAttribute("vbstart")] - public string? VBStart { get; set; } + public long? VBStart { get; set; } } } diff --git a/SabreTools.Data.Models/Listxml/Driver.cs b/SabreTools.Data.Models/Listxml/Driver.cs index 56efb119..c03b7baf 100644 --- a/SabreTools.Data.Models/Listxml/Driver.cs +++ b/SabreTools.Data.Models/Listxml/Driver.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Listxml { @@ -9,15 +10,15 @@ namespace SabreTools.Data.Models.Listxml /// (good|imperfect|preliminary), (good|preliminary|test) in older versions [Required] [XmlAttribute("status")] - public string? Status { get; set; } + public SupportStatus? Status { get; set; } /// (good|imperfect|preliminary), Only present in older versions [XmlAttribute("color")] - public string? Color { get; set; } + public SupportStatus? Color { get; set; } /// (good|imperfect|preliminary), Only present in older versions [XmlAttribute("sound")] - public string? Sound { get; set; } + public SupportStatus? Sound { get; set; } /// Only present in older versions [XmlAttribute("palettesize")] @@ -26,32 +27,32 @@ namespace SabreTools.Data.Models.Listxml /// (good|imperfect|preliminary) [Required] [XmlAttribute("emulation")] - public string? Emulation { get; set; } + public SupportStatus? Emulation { get; set; } /// (good|imperfect|preliminary) [Required] [XmlAttribute("cocktail")] - public string? Cocktail { get; set; } + public SupportStatus? Cocktail { get; set; } /// (supported|unsupported) [Required] [XmlAttribute("savestate")] - public string? SaveState { get; set; } + public Supported? SaveState { get; set; } /// (yes|no) "no" [XmlAttribute("requiresartwork")] - public string? RequiresArtwork { get; set; } + public bool? RequiresArtwork { get; set; } /// (yes|no) "no" [XmlAttribute("unofficial")] - public string? Unofficial { get; set; } + public bool? Unofficial { get; set; } /// (yes|no) "no" [XmlAttribute("nosoundhardware")] - public string? NoSoundHardware { get; set; } + public bool? NoSoundHardware { get; set; } /// (yes|no) "no" [XmlAttribute("incomplete")] - public string? Incomplete { get; set; } + public bool? Incomplete { get; set; } } } diff --git a/SabreTools.Data.Models/Listxml/Feature.cs b/SabreTools.Data.Models/Listxml/Feature.cs index b4897e4c..b1a29119 100644 --- a/SabreTools.Data.Models/Listxml/Feature.cs +++ b/SabreTools.Data.Models/Listxml/Feature.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Listxml { @@ -9,14 +10,14 @@ namespace SabreTools.Data.Models.Listxml /// (protection|timing|graphics|palette|sound|capture|camera|microphone|controls|keyboard|mouse|media|disk|printer|tape|punch|drum|rom|comms|lan|wan) [Required] [XmlAttribute("type")] - public string? Type { get; set; } + public FeatureType? Type { get; set; } /// (unemulated|imperfect) [XmlAttribute("status")] - public string? Status { get; set; } + public FeatureStatus? Status { get; set; } /// (unemulated|imperfect) [XmlAttribute("overall")] - public string? Overall { get; set; } + public FeatureStatus? Overall { get; set; } } } diff --git a/SabreTools.Data.Models/Listxml/GameBase.cs b/SabreTools.Data.Models/Listxml/GameBase.cs index bec36fcd..de08a58b 100644 --- a/SabreTools.Data.Models/Listxml/GameBase.cs +++ b/SabreTools.Data.Models/Listxml/GameBase.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Listxml { @@ -18,19 +19,19 @@ namespace SabreTools.Data.Models.Listxml /// (yes|no) "no", Machine only [XmlAttribute("isbios")] - public string? IsBios { get; set; } + public bool? IsBios { get; set; } /// (yes|no) "no", Machine only [XmlAttribute("isdevice")] - public string? IsDevice { get; set; } + public bool? IsDevice { get; set; } /// (yes|no) "no", Machine only [XmlAttribute("ismechanical")] - public string? IsMechanical { get; set; } + public bool? IsMechanical { get; set; } /// (yes|no) "no" [XmlAttribute("runnable")] - public string? Runnable { get; set; } + public Runnable? Runnable { get; set; } [XmlAttribute("cloneof")] public string? CloneOf { get; set; } diff --git a/SabreTools.Data.Models/Listxml/Input.cs b/SabreTools.Data.Models/Listxml/Input.cs index f856df6d..e6f62971 100644 --- a/SabreTools.Data.Models/Listxml/Input.cs +++ b/SabreTools.Data.Models/Listxml/Input.cs @@ -8,28 +8,26 @@ namespace SabreTools.Data.Models.Listxml { /// (yes|no) "no" [XmlAttribute("service")] - public string? Service { get; set; } + public bool? Service { get; set; } /// (yes|no) "no" [XmlAttribute("tilt")] - public string? Tilt { get; set; } + public bool? Tilt { get; set; } - /// Numeric [Required] [XmlAttribute("players")] - public string? Players { get; set; } + public long? Players { get; set; } /// Only present in older versions [XmlAttribute("control")] public string? ControlAttr { get; set; } - /// Only present in older versions, Numeric? + /// Only present in older versions [XmlAttribute("buttons")] - public string? Buttons { get; set; } + public long? Buttons { get; set; } - /// Numeric? [XmlAttribute("coins")] - public string? Coins { get; set; } + public long? Coins { get; set; } [XmlElement("control")] public Control[]? Control { get; set; } diff --git a/SabreTools.Data.Models/Listxml/Mame.cs b/SabreTools.Data.Models/Listxml/Mame.cs index 06faa831..a52584c6 100644 --- a/SabreTools.Data.Models/Listxml/Mame.cs +++ b/SabreTools.Data.Models/Listxml/Mame.cs @@ -11,7 +11,7 @@ namespace SabreTools.Data.Models.Listxml /// (yes|no) "no" [XmlAttribute("debug")] - public string? Debug { get; set; } + public bool? Debug { get; set; } [Required] [XmlAttribute("mameconfig")] diff --git a/SabreTools.Data.Models/Listxml/RamOption.cs b/SabreTools.Data.Models/Listxml/RamOption.cs index d1d0b5cf..78c105cc 100644 --- a/SabreTools.Data.Models/Listxml/RamOption.cs +++ b/SabreTools.Data.Models/Listxml/RamOption.cs @@ -10,8 +10,9 @@ namespace SabreTools.Data.Models.Listxml [XmlAttribute("name")] public string? Name { get; set; } + /// (yes|no) "no" [XmlAttribute("default")] - public string? Default { get; set; } + public bool? Default { get; set; } [XmlText] public string? Content { get; set; } diff --git a/SabreTools.Data.Models/Listxml/Rom.cs b/SabreTools.Data.Models/Listxml/Rom.cs index edaecf51..d537ea66 100644 --- a/SabreTools.Data.Models/Listxml/Rom.cs +++ b/SabreTools.Data.Models/Listxml/Rom.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Listxml { @@ -13,10 +14,9 @@ namespace SabreTools.Data.Models.Listxml [XmlAttribute("bios")] public string? Bios { get; set; } - /// Numeric [Required] [XmlAttribute("size")] - public string? Size { get; set; } + public long? Size { get; set; } [XmlAttribute("crc")] public string? CRC { get; set; } @@ -36,18 +36,18 @@ namespace SabreTools.Data.Models.Listxml /// (baddump|nodump|good) "good" [XmlAttribute("status")] - public string? Status { get; set; } + public ItemStatus? Status { get; set; } /// (yes|no) "no" [XmlAttribute("optional")] - public string? Optional { get; set; } + public bool? Optional { get; set; } /// (yes|no) "no", Only present in older versions [XmlAttribute("dispose")] - public string? Dispose { get; set; } + public bool? Dispose { get; set; } /// (yes|no) "no", Only present in older versions [XmlAttribute("soundonly")] - public string? SoundOnly { get; set; } + public bool? SoundOnly { get; set; } } } diff --git a/SabreTools.Data.Models/Listxml/SlotOption.cs b/SabreTools.Data.Models/Listxml/SlotOption.cs index 8f9bb9cf..fbbe9730 100644 --- a/SabreTools.Data.Models/Listxml/SlotOption.cs +++ b/SabreTools.Data.Models/Listxml/SlotOption.cs @@ -16,6 +16,6 @@ namespace SabreTools.Data.Models.Listxml /// (yes|no) "no" [XmlAttribute("default")] - public string? Default { get; set; } + public bool? Default { get; set; } } } diff --git a/SabreTools.Data.Models/Listxml/SoftwareList.cs b/SabreTools.Data.Models/Listxml/SoftwareList.cs index 31f7ed3c..b440b12d 100644 --- a/SabreTools.Data.Models/Listxml/SoftwareList.cs +++ b/SabreTools.Data.Models/Listxml/SoftwareList.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Listxml { @@ -17,7 +18,7 @@ namespace SabreTools.Data.Models.Listxml /// (original|compatible) [Required] [XmlAttribute("status")] - public string? Status { get; set; } + public SoftwareListStatus? Status { get; set; } [XmlAttribute("filter")] public string? Filter { get; set; } diff --git a/SabreTools.Data.Models/Listxml/Sound.cs b/SabreTools.Data.Models/Listxml/Sound.cs index 7f616c72..2600d84c 100644 --- a/SabreTools.Data.Models/Listxml/Sound.cs +++ b/SabreTools.Data.Models/Listxml/Sound.cs @@ -9,6 +9,6 @@ namespace SabreTools.Data.Models.Listxml /// Numeric [Required] [XmlAttribute("channels")] - public string? Channels { get; set; } + public long? Channels { get; set; } } } diff --git a/SabreTools.Data.Models/Listxml/Video.cs b/SabreTools.Data.Models/Listxml/Video.cs index 7568ea9f..9c0f0e15 100644 --- a/SabreTools.Data.Models/Listxml/Video.cs +++ b/SabreTools.Data.Models/Listxml/Video.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Listxml { @@ -9,31 +10,26 @@ namespace SabreTools.Data.Models.Listxml /// (raster|vector) [Required] [XmlAttribute("screen")] - public string? Screen { get; set; } + public DisplayType? Screen { get; set; } /// (vertical|horizontal) [Required] [XmlAttribute("orientation")] - public string? Orientation { get; set; } + public Rotation? Orientation { get; set; } - /// Numeric [XmlAttribute("width")] - public string? Width { get; set; } + public long? Width { get; set; } - /// Numeric [XmlAttribute("height")] - public string? Height { get; set; } + public long? Height { get; set; } - /// Numeric [XmlAttribute("aspectx")] - public string? AspectX { get; set; } + public long? AspectX { get; set; } - /// Numeric [XmlAttribute("aspecty")] - public string? AspectY { get; set; } + public long? AspectY { get; set; } - /// Numeric [XmlAttribute("refresh")] - public string? Refresh { get; set; } + public double? Refresh { get; set; } } } diff --git a/SabreTools.Data.Models/Logiqx/BiosSet.cs b/SabreTools.Data.Models/Logiqx/BiosSet.cs index 53c13561..f8be9c31 100644 --- a/SabreTools.Data.Models/Logiqx/BiosSet.cs +++ b/SabreTools.Data.Models/Logiqx/BiosSet.cs @@ -16,6 +16,6 @@ namespace SabreTools.Data.Models.Logiqx /// (yes|no) "no" [XmlAttribute("default")] - public string? Default { get; set; } + public bool? Default { get; set; } } } diff --git a/SabreTools.Data.Models/Logiqx/ClrMamePro.cs b/SabreTools.Data.Models/Logiqx/ClrMamePro.cs index f66596a6..ba9bf306 100644 --- a/SabreTools.Data.Models/Logiqx/ClrMamePro.cs +++ b/SabreTools.Data.Models/Logiqx/ClrMamePro.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Logiqx { @@ -11,14 +12,14 @@ namespace SabreTools.Data.Models.Logiqx /// (none|split|merged|nonmerged|fullmerged|device|full) "split" [XmlAttribute("forcemerging")] - public string? ForceMerging { get; set; } + public MergingFlag ForceMerging { get; set; } /// (obsolete|required|ignore) "obsolete" [XmlAttribute("forcenodump")] - public string? ForceNodump { get; set; } + public NodumpFlag ForceNodump { get; set; } /// (zip|unzip) "zip" [XmlAttribute("forcepacking")] - public string? ForcePacking { get; set; } + public PackingFlag ForcePacking { get; set; } } } diff --git a/SabreTools.Data.Models/Logiqx/Datafile.cs b/SabreTools.Data.Models/Logiqx/Datafile.cs index 3c0b8eb6..4a9eca43 100644 --- a/SabreTools.Data.Models/Logiqx/Datafile.cs +++ b/SabreTools.Data.Models/Logiqx/Datafile.cs @@ -11,7 +11,7 @@ namespace SabreTools.Data.Models.Logiqx /// (yes|no) "no" [XmlAttribute("debug")] - public string? Debug { get; set; } + public bool? Debug { get; set; } /// No-Intro extension [XmlAttribute(Namespace = "http://www.w3.org/2001/XMLSchema-instance", AttributeName = "schemaLocation")] diff --git a/SabreTools.Data.Models/Logiqx/Disk.cs b/SabreTools.Data.Models/Logiqx/Disk.cs index c36ef5d1..2b080f8d 100644 --- a/SabreTools.Data.Models/Logiqx/Disk.cs +++ b/SabreTools.Data.Models/Logiqx/Disk.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Logiqx { @@ -21,7 +22,7 @@ namespace SabreTools.Data.Models.Logiqx /// (baddump|nodump|good|verified) "good" [XmlAttribute("status")] - public string? Status { get; set; } + public ItemStatus? Status { get; set; } /// MAME extension [XmlAttribute("region")] diff --git a/SabreTools.Data.Models/Logiqx/Driver.cs b/SabreTools.Data.Models/Logiqx/Driver.cs index b58fdd42..bb1f752c 100644 --- a/SabreTools.Data.Models/Logiqx/Driver.cs +++ b/SabreTools.Data.Models/Logiqx/Driver.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Logiqx { @@ -9,37 +10,37 @@ namespace SabreTools.Data.Models.Logiqx /// (good|imperfect|preliminary) [Required] [XmlAttribute("status")] - public string? Status { get; set; } + public SupportStatus? Status { get; set; } /// (good|imperfect|preliminary) [Required] [XmlAttribute("emulation")] - public string? Emulation { get; set; } + public SupportStatus? Emulation { get; set; } /// (good|imperfect|preliminary) [Required] [XmlAttribute("cocktail")] - public string? Cocktail { get; set; } + public SupportStatus? Cocktail { get; set; } /// (supported|unsupported) [Required] [XmlAttribute("savestate")] - public string? SaveState { get; set; } + public Supported? SaveState { get; set; } /// (yes|no) "no" [XmlAttribute("requiresartwork")] - public string? RequiresArtwork { get; set; } + public bool? RequiresArtwork { get; set; } /// (yes|no) "no" [XmlAttribute("unofficial")] - public string? Unofficial { get; set; } + public bool? Unofficial { get; set; } /// (yes|no) "no" [XmlAttribute("nosoundhardware")] - public string? NoSoundHardware { get; set; } + public bool? NoSoundHardware { get; set; } /// (yes|no) "no" [XmlAttribute("incomplete")] - public string? Incomplete { get; set; } + public bool? Incomplete { get; set; } } } diff --git a/SabreTools.Data.Models/Logiqx/GameBase.cs b/SabreTools.Data.Models/Logiqx/GameBase.cs index 28e6d4ab..49fb6d26 100644 --- a/SabreTools.Data.Models/Logiqx/GameBase.cs +++ b/SabreTools.Data.Models/Logiqx/GameBase.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Logiqx { @@ -17,15 +18,15 @@ namespace SabreTools.Data.Models.Logiqx /// (yes|no) "no" [XmlAttribute("isbios")] - public string? IsBios { get; set; } + public bool? IsBios { get; set; } /// (yes|no) "no", MAME extension [XmlAttribute("isdevice")] - public string? IsDevice { get; set; } + public bool? IsDevice { get; set; } /// (yes|no) "no", MAME extension [XmlAttribute("ismechanical")] - public string? IsMechanical { get; set; } + public bool? IsMechanical { get; set; } [XmlAttribute("cloneof")] public string? CloneOf { get; set; } @@ -52,7 +53,7 @@ namespace SabreTools.Data.Models.Logiqx /// (no|partial|yes) "no" [XmlAttribute("runnable")] - public string? Runnable { get; set; } + public Runnable? Runnable { get; set; } [XmlElement("comment")] public string[]? Comment { get; set; } diff --git a/SabreTools.Data.Models/Logiqx/Header.cs b/SabreTools.Data.Models/Logiqx/Header.cs index 86619e68..504615e9 100644 --- a/SabreTools.Data.Models/Logiqx/Header.cs +++ b/SabreTools.Data.Models/Logiqx/Header.cs @@ -52,6 +52,9 @@ namespace SabreTools.Data.Models.Logiqx [XmlElement("type")] public string? Type { get; set; } + [XmlElement("romvault")] + public RomVault? RomVault { get; set; } + [XmlElement("clrmamepro")] public ClrMamePro? ClrMamePro { get; set; } diff --git a/SabreTools.Data.Models/Logiqx/Release.cs b/SabreTools.Data.Models/Logiqx/Release.cs index e961fcb3..51a442cb 100644 --- a/SabreTools.Data.Models/Logiqx/Release.cs +++ b/SabreTools.Data.Models/Logiqx/Release.cs @@ -22,6 +22,6 @@ namespace SabreTools.Data.Models.Logiqx /// (yes|no) "no" [XmlAttribute("default")] - public string? Default { get; set; } + public bool? Default { get; set; } } } diff --git a/SabreTools.Data.Models/Logiqx/Rom.cs b/SabreTools.Data.Models/Logiqx/Rom.cs index e20d4efb..bef09c1c 100644 --- a/SabreTools.Data.Models/Logiqx/Rom.cs +++ b/SabreTools.Data.Models/Logiqx/Rom.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; #pragma warning disable IDE1006 // Naming Styles namespace SabreTools.Data.Models.Logiqx @@ -13,7 +14,7 @@ namespace SabreTools.Data.Models.Logiqx [Required] [XmlAttribute("size")] - public string? Size { get; set; } + public long? Size { get; set; } /// Hash extension [XmlAttribute("crc16")] @@ -77,7 +78,7 @@ namespace SabreTools.Data.Models.Logiqx /// (baddump|nodump|good|verified) "good" [XmlAttribute("status")] - public string? Status { get; set; } + public ItemStatus? Status { get; set; } /// No-Intro extension [XmlAttribute("serial")] @@ -92,10 +93,10 @@ namespace SabreTools.Data.Models.Logiqx /// Boolean; RomVault extension [XmlAttribute("inverted")] - public string? Inverted { get; set; } + public bool? Inverted { get; set; } /// Boolean; RomVault extension [XmlAttribute("mia")] - public string? MIA { get; set; } + public bool? MIA { get; set; } } } diff --git a/SabreTools.Data.Models/Logiqx/RomCenter.cs b/SabreTools.Data.Models/Logiqx/RomCenter.cs index 157776dc..84e4554b 100644 --- a/SabreTools.Data.Models/Logiqx/RomCenter.cs +++ b/SabreTools.Data.Models/Logiqx/RomCenter.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Logiqx { @@ -11,26 +12,26 @@ namespace SabreTools.Data.Models.Logiqx /// (none|split|merged|unmerged|fullmerged|device|full) "split" [XmlAttribute("rommode")] - public string? RomMode { get; set; } + public MergingFlag RomMode { get; set; } /// (none|split|merged|unmerged|fullmerged|device|full) "split" [XmlAttribute("biosmode")] - public string? BiosMode { get; set; } + public MergingFlag BiosMode { get; set; } /// (none|split|merged|unmerged|fullmerged|device|full) "merged" [XmlAttribute("samplemode")] - public string? SampleMode { get; set; } + public MergingFlag SampleMode { get; set; } /// (yes|no) "no" [XmlAttribute("lockrommode")] - public string? LockRomMode { get; set; } + public bool? LockRomMode { get; set; } /// (yes|no) "no" [XmlAttribute("lockbiosmode")] - public string? LockBiosMode { get; set; } + public bool? LockBiosMode { get; set; } /// (yes|no) "no" [XmlAttribute("locksamplemode")] - public string? LockSampleMode { get; set; } + public bool? LockSampleMode { get; set; } } } diff --git a/SabreTools.Data.Models/Logiqx/RomVault.cs b/SabreTools.Data.Models/Logiqx/RomVault.cs new file mode 100644 index 00000000..3bccee00 --- /dev/null +++ b/SabreTools.Data.Models/Logiqx/RomVault.cs @@ -0,0 +1,25 @@ +using System.Xml; +using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; + +namespace SabreTools.Data.Models.Logiqx +{ + [XmlRoot("romvault")] + public class RomVault + { + [XmlAttribute("header")] + public string? Header { get; set; } + + /// (none|split|merged|nonmerged|fullmerged|device|full) "split" + [XmlAttribute("forcemerging")] + public MergingFlag ForceMerging { get; set; } + + /// (obsolete|required|ignore) "obsolete" + [XmlAttribute("forcenodump")] + public NodumpFlag ForceNodump { get; set; } + + /// (zip|unzip) "zip" + [XmlAttribute("forcepacking")] + public PackingFlag ForcePacking { get; set; } + } +} diff --git a/SabreTools.Data.Models/Logiqx/SoftwareList.cs b/SabreTools.Data.Models/Logiqx/SoftwareList.cs index fb06ff48..69d23183 100644 --- a/SabreTools.Data.Models/Logiqx/SoftwareList.cs +++ b/SabreTools.Data.Models/Logiqx/SoftwareList.cs @@ -1,5 +1,6 @@ using System.Xml; using System.Xml.Serialization; +using SabreTools.Data.Models.Metadata; namespace SabreTools.Data.Models.Logiqx { @@ -17,7 +18,7 @@ namespace SabreTools.Data.Models.Logiqx /// (original|compatible) [Required] [XmlAttribute("status")] - public string? Status { get; set; } + public SoftwareListStatus? Status { get; set; } [XmlAttribute("filter")] public string? Filter { get; set; } diff --git a/SabreTools.Data.Models/Metadata/Adjuster.cs b/SabreTools.Data.Models/Metadata/Adjuster.cs index 7b4c8e96..35ed6e8b 100644 --- a/SabreTools.Data.Models/Metadata/Adjuster.cs +++ b/SabreTools.Data.Models/Metadata/Adjuster.cs @@ -1,25 +1,60 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("adjuster"), XmlRoot("adjuster")] - public class Adjuster : DatItem + public class Adjuster : DatItem, ICloneable, IEquatable { - #region Keys + #region Properties - // Condition - [NoFilter] - public const string ConditionKey = "condition"; + public Condition? Condition { get; set; } - /// bool - public const string DefaultKey = "default"; + /// (yes|no) "no" + public bool? Default { get; set; } - /// string - public const string NameKey = "name"; + public string? Name { get; set; } #endregion - public Adjuster() => Type = ItemType.Adjuster; + public Adjuster() => ItemType = ItemType.Adjuster; + + /// + public object Clone() + { + var obj = new Adjuster(); + + obj.Condition = Condition?.Clone() as Condition; + obj.Default = Default; + obj.Name = Name; + + return obj; + } + + /// + public bool Equals(Adjuster? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if (Default != other.Default) + return false; + + if ((Name is null) ^ (other.Name is null)) + return false; + else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase)) + return false; + + // Sub-items + if ((Condition is null) ^ (other.Condition is null)) + return false; + else if (Condition is not null && other.Condition is not null && Condition.Equals(other.Condition)) + return false; + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/Analog.cs b/SabreTools.Data.Models/Metadata/Analog.cs index b02d99bc..c99da0f0 100644 --- a/SabreTools.Data.Models/Metadata/Analog.cs +++ b/SabreTools.Data.Models/Metadata/Analog.cs @@ -1,18 +1,44 @@ -using System.Xml.Serialization; +using System; +using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("analog"), XmlRoot("analog")] - public class Analog : DatItem + public class Analog : DatItem, ICloneable, IEquatable { - #region Keys + #region Properties - /// string - public const string MaskKey = "mask"; + public string? Mask { get; set; } #endregion - public Analog() => Type = ItemType.Analog; + public Analog() => ItemType = ItemType.Analog; + + /// + public object Clone() + { + var obj = new Analog(); + + obj.Mask = Mask; + + return obj; + } + + /// + public bool Equals(Analog? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if ((Mask is null) ^ (other.Mask is null)) + return false; + else if (Mask is not null && !Mask.Equals(other.Mask, StringComparison.OrdinalIgnoreCase)) + return false; + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/Archive.cs b/SabreTools.Data.Models/Metadata/Archive.cs index d80c9ecd..d46641c2 100644 --- a/SabreTools.Data.Models/Metadata/Archive.cs +++ b/SabreTools.Data.Models/Metadata/Archive.cs @@ -1,114 +1,310 @@ -using System.Xml.Serialization; +using System; +using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("archive"), XmlRoot("archive")] - public class Archive : DatItem + public class Archive : DatItem, ICloneable, IEquatable { - #region Keys + #region Properties - /// string, No-Intro DB extension - public const string NumberKey = "number"; + /// No-Intro DB extension + public string? Additional { get; set; } - /// string, No-Intro DB extension - public const string CloneKey = "clone"; + /// (0|1) "0", No-Intro DB extension + public bool? Adult { get; set; } - /// string, No-Intro DB extension - public const string RegParentKey = "regparent"; + /// (0|1) "0", No-Intro DB extension + public bool? Alt { get; set; } - /// string, No-Intro DB extension - public const string MergeOfKey = "mergeof"; + /// (0|1) "0", No-Intro DB extension + public bool? Bios { get; set; } - /// string, No-Intro DB extension - public const string MergeNameKey = "mergename"; + /// No-Intro DB extension + public string? Categories { get; set; } - /// string - public const string NameKey = "name"; + /// No-Intro DB extension + public string? CloneTag { get; set; } - /// string, No-Intro DB extension - public const string NameAltKey = "name_alt"; + /// (0|1) "0", No-Intro DB extension + public bool? Complete { get; set; } - /// string, No-Intro DB extension - public const string RegionKey = "region"; + /// (0|1) "0", No-Intro DB extension + public bool? Dat { get; set; } - /// string, No-Intro DB extension - public const string LanguagesKey = "languages"; + /// No-Intro DB extension + public string? DatterNote { get; set; } - /// byte, No-Intro DB extension - public const string ShowLangKey = "showlang"; + /// No-Intro DB extension + public string? Description { get; set; } - /// string, No-Intro DB extension - public const string LangCheckedKey = "langchecked"; + /// No-Intro DB extension + public string? DevStatus { get; set; } - /// string, No-Intro DB extension - public const string Version1Key = "version1"; + /// No-Intro DB extension + public string? GameId1 { get; set; } - /// string, No-Intro DB extension - public const string Version2Key = "version2"; + /// No-Intro DB extension + public string? GameId2 { get; set; } - /// string, No-Intro DB extension - public const string DevStatusKey = "devstatus"; + /// No-Intro DB extension + public string? LangChecked { get; set; } - /// string, No-Intro DB extension - public const string AdditionalKey = "additional"; + /// No-Intro DB extension + public string? Languages { get; set; } - /// string, No-Intro DB extension - public const string Special1Key = "special1"; + /// (0|1) "0", No-Intro DB extension + public bool? Licensed { get; set; } - /// string, No-Intro DB extension - public const string Special2Key = "special2"; + /// (0|1) "0", No-Intro DB extension + public bool? Listed { get; set; } - /// byte, No-Intro DB extension - public const string AltKey = "alt"; + /// No-Intro DB extension + public string? MergeOf { get; set; } - /// string, No-Intro DB extension - public const string GameId1Key = "gameid1"; + /// No-Intro DB extension + public string? MergeName { get; set; } - /// string, No-Intro DB extension - public const string GameId2Key = "gameid2"; + public string? Name { get; set; } - /// string, No-Intro DB extension - public const string DescriptionKey = "description"; + /// No-Intro DB extension + public string? NameAlt { get; set; } - /// byte, No-Intro DB extension - public const string BiosKey = "bios"; + /// No-Intro DB extension + public string? Number { get; set; } - /// byte, No-Intro DB extension - public const string LicensedKey = "licensed"; + /// (0|1) "0", No-Intro DB extension + public bool? Physical { get; set; } - /// byte, No-Intro DB extension - public const string PirateKey = "pirate"; + /// (0|1) "0", No-Intro DB extension + public bool? Pirate { get; set; } - /// byte, No-Intro DB extension - public const string PhysicalKey = "physical"; + /// (0|1) "0", No-Intro DB extension + public bool? Private { get; set; } - /// byte, No-Intro DB extension - public const string CompleteKey = "complete"; + /// No-Intro DB extension + public string? Region { get; set; } - /// byte, No-Intro DB extension - public const string AdultKey = "adult"; + /// No-Intro DB extension + public string? RegParent { get; set; } - /// byte, No-Intro DB extension - public const string DatKey = "dat"; + /// (0|1) "0", No-Intro DB extension + public bool? ShowLang { get; set; } - /// byte, No-Intro DB extension - public const string ListedKey = "listed"; + /// No-Intro DB extension + public string? Special1 { get; set; } - /// byte, No-Intro DB extension - public const string PrivateKey = "private"; + /// No-Intro DB extension + public string? Special2 { get; set; } - /// string, No-Intro DB extension - public const string StickyNoteKey = "stickynote"; + /// No-Intro DB extension + public string? StickyNote { get; set; } - /// string, No-Intro DB extension - public const string DatterNoteKey = "datternote"; + /// No-Intro DB extension + public string? Version1 { get; set; } - /// string, No-Intro DB extension - public const string CategoriesKey = "categories"; + /// No-Intro DB extension + public string? Version2 { get; set; } #endregion - public Archive() => Type = ItemType.Archive; + public Archive() => ItemType = ItemType.Archive; + + /// + public object Clone() + { + var obj = new Archive(); + + obj.Additional = Additional; + obj.Adult = Adult; + obj.Alt = Alt; + obj.Bios = Bios; + obj.Categories = Categories; + obj.CloneTag = CloneTag; + obj.Complete = Complete; + obj.Dat = Dat; + obj.DatterNote = DatterNote; + obj.Description = Description; + obj.DevStatus = DevStatus; + obj.GameId1 = GameId1; + obj.GameId2 = GameId2; + obj.LangChecked = LangChecked; + obj.Languages = Languages; + obj.Licensed = Licensed; + obj.Listed = Listed; + obj.MergeOf = MergeOf; + obj.MergeName = MergeName; + obj.Name = Name; + obj.NameAlt = NameAlt; + obj.Number = Number; + obj.Physical = Physical; + obj.Pirate = Pirate; + obj.Private = Private; + obj.Region = Region; + obj.RegParent = RegParent; + obj.ShowLang = ShowLang; + obj.Special1 = Special1; + obj.Special2 = Special2; + obj.StickyNote = StickyNote; + obj.Version1 = Version1; + obj.Version2 = Version2; + + return obj; + } + + /// + public bool Equals(Archive? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if ((Additional is null) ^ (other.Additional is null)) + return false; + else if (Additional is not null && !Additional.Equals(other.Additional, StringComparison.OrdinalIgnoreCase)) + return false; + + if (Adult != other.Adult) + return false; + + if (Alt != other.Alt) + return false; + + if (Bios != other.Bios) + return false; + + if ((Categories is null) ^ (other.Categories is null)) + return false; + else if (Categories is not null && !Categories.Equals(other.Categories, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((CloneTag is null) ^ (other.CloneTag is null)) + return false; + else if (CloneTag is not null && !CloneTag.Equals(other.CloneTag, StringComparison.OrdinalIgnoreCase)) + return false; + + if (Complete != other.Complete) + return false; + + if (Dat != other.Dat) + return false; + + if ((DatterNote is null) ^ (other.DatterNote is null)) + return false; + else if (DatterNote is not null && !DatterNote.Equals(other.DatterNote, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Description is null) ^ (other.Description is null)) + return false; + else if (Description is not null && !Description.Equals(other.Description, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((DevStatus is null) ^ (other.DevStatus is null)) + return false; + else if (DevStatus is not null && !DevStatus.Equals(other.DevStatus, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((GameId1 is null) ^ (other.GameId1 is null)) + return false; + else if (GameId1 is not null && !GameId1.Equals(other.GameId1, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((GameId2 is null) ^ (other.GameId2 is null)) + return false; + else if (GameId2 is not null && !GameId2.Equals(other.GameId2, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((LangChecked is null) ^ (other.LangChecked is null)) + return false; + else if (LangChecked is not null && !LangChecked.Equals(other.LangChecked, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Languages is null) ^ (other.Languages is null)) + return false; + else if (Languages is not null && !Languages.Equals(other.Languages, StringComparison.OrdinalIgnoreCase)) + return false; + + if (Licensed != other.Licensed) + return false; + + if (Listed != other.Listed) + return false; + + if ((MergeOf is null) ^ (other.MergeOf is null)) + return false; + else if (MergeOf is not null && !MergeOf.Equals(other.MergeOf, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((MergeName is null) ^ (other.MergeName is null)) + return false; + else if (MergeName is not null && !MergeName.Equals(other.MergeName, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Name is null) ^ (other.Name is null)) + return false; + else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((NameAlt is null) ^ (other.NameAlt is null)) + return false; + else if (NameAlt is not null && !NameAlt.Equals(other.NameAlt, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Number is null) ^ (other.Number is null)) + return false; + else if (Number is not null && !Number.Equals(other.Number, StringComparison.OrdinalIgnoreCase)) + return false; + + if (Physical != other.Physical) + return false; + + if (Pirate != other.Pirate) + return false; + + if (Private != other.Private) + return false; + + if ((Region is null) ^ (other.Region is null)) + return false; + else if (Region is not null && !Region.Equals(other.Region, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((RegParent is null) ^ (other.RegParent is null)) + return false; + else if (RegParent is not null && !RegParent.Equals(other.RegParent, StringComparison.OrdinalIgnoreCase)) + return false; + + if (ShowLang != other.ShowLang) + return false; + + if ((Special1 is null) ^ (other.Special1 is null)) + return false; + else if (Special1 is not null && !Special1.Equals(other.Special1, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Special2 is null) ^ (other.Special2 is null)) + return false; + else if (Special2 is not null && !Special2.Equals(other.Special2, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((StickyNote is null) ^ (other.StickyNote is null)) + return false; + else if (StickyNote is not null && !StickyNote.Equals(other.StickyNote, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Version1 is null) ^ (other.Version1 is null)) + return false; + else if (Version1 is not null && !Version1.Equals(other.Version1, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Version2 is null) ^ (other.Version2 is null)) + return false; + else if (Version2 is not null && !Version2.Equals(other.Version2, StringComparison.OrdinalIgnoreCase)) + return false; + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/BiosSet.cs b/SabreTools.Data.Models/Metadata/BiosSet.cs index 08600ba8..d8d89f38 100644 --- a/SabreTools.Data.Models/Metadata/BiosSet.cs +++ b/SabreTools.Data.Models/Metadata/BiosSet.cs @@ -1,24 +1,59 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("biosset"), XmlRoot("biosset")] - public class BiosSet : DatItem + public class BiosSet : DatItem, ICloneable, IEquatable { - #region Keys + #region Properties - /// bool - public const string DefaultKey = "default"; + /// (yes|no) "no" + public bool? Default { get; set; } - /// string - public const string DescriptionKey = "description"; + public string? Description { get; set; } - /// string - public const string NameKey = "name"; + public string? Name { get; set; } #endregion - public BiosSet() => Type = ItemType.BiosSet; + public BiosSet() => ItemType = ItemType.BiosSet; + + /// + public object Clone() + { + var obj = new BiosSet(); + + obj.Default = Default; + obj.Description = Description; + obj.Name = Name; + + return obj; + } + + /// + public bool Equals(BiosSet? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if (Default != other.Default) + return false; + + if ((Description is null) ^ (other.Description is null)) + return false; + else if (Description is not null && !Description.Equals(other.Description, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Name is null) ^ (other.Name is null)) + return false; + else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase)) + return false; + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/Blank.cs b/SabreTools.Data.Models/Metadata/Blank.cs index 411f0273..8d095192 100644 --- a/SabreTools.Data.Models/Metadata/Blank.cs +++ b/SabreTools.Data.Models/Metadata/Blank.cs @@ -1,11 +1,18 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("blank"), XmlRoot("blank")] - public class Blank : DatItem + public class Blank : DatItem, ICloneable, IEquatable { - public Blank() => Type = ItemType.Blank; + public Blank() => ItemType = ItemType.Blank; + + /// + public object Clone() => new Blank(); + + /// + public bool Equals(Blank? other) => other is not null; } } diff --git a/SabreTools.Data.Models/Metadata/Chip.cs b/SabreTools.Data.Models/Metadata/Chip.cs index c3a512b0..e55ac97f 100644 --- a/SabreTools.Data.Models/Metadata/Chip.cs +++ b/SabreTools.Data.Models/Metadata/Chip.cs @@ -1,33 +1,80 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("chip"), XmlRoot("chip")] - public class Chip : DatItem + public class Chip : DatItem, ICloneable, IEquatable { - #region Keys - - /// long - public const string ClockKey = "clock"; - - /// string - public const string FlagsKey = "flags"; - - /// string - public const string NameKey = "name"; - - /// (yes|no) "no" - public const string SoundOnlyKey = "soundonly"; - - /// string - public const string TagKey = "tag"; + #region Properties /// (cpu|audio) - public const string ChipTypeKey = "type"; + public ChipType? ChipType { get; set; } + + public long? Clock { get; set; } + + public string? Flags { get; set; } + + public string? Name { get; set; } + + /// (yes|no) "no" + public bool? SoundOnly { get; set; } + + public string? Tag { get; set; } #endregion - public Chip() => Type = ItemType.Chip; + public Chip() => ItemType = ItemType.Chip; + + /// + public object Clone() + { + var obj = new Chip(); + + obj.ChipType = ChipType; + obj.Clock = Clock; + obj.Flags = Flags; + obj.Name = Name; + obj.SoundOnly = SoundOnly; + obj.Tag = Tag; + + return obj; + } + + /// + public bool Equals(Chip? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if (ChipType != other.ChipType) + return false; + + if (Clock != other.Clock) + return false; + + if ((Flags is null) ^ (other.Flags is null)) + return false; + else if (Flags is not null && !Flags.Equals(other.Flags, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Name is null) ^ (other.Name is null)) + return false; + else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase)) + return false; + + if (SoundOnly != other.SoundOnly) + return false; + + if ((Tag is null) ^ (other.Tag is null)) + return false; + else if (Tag is not null && !Tag.Equals(other.Tag, StringComparison.OrdinalIgnoreCase)) + return false; + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/Condition.cs b/SabreTools.Data.Models/Metadata/Condition.cs index ead68ff2..b6daea52 100644 --- a/SabreTools.Data.Models/Metadata/Condition.cs +++ b/SabreTools.Data.Models/Metadata/Condition.cs @@ -1,27 +1,67 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("condition"), XmlRoot("condition")] - public class Condition : DatItem + public class Condition : DatItem, ICloneable, IEquatable { - #region Keys + #region Properties - /// string - public const string ValueKey = "clock"; - - /// string - public const string MaskKey = "mask"; + public string? Mask { get; set; } /// (eq|ne|gt|le|lt|ge) - public const string RelationKey = "relation"; + public Relation? Relation { get; set; } - /// string - public const string TagKey = "tag"; + public string? Tag { get; set; } + + public string? Value { get; set; } #endregion - public Condition() => Type = ItemType.Condition; + public Condition() => ItemType = ItemType.Condition; + + /// + public object Clone() + { + var obj = new Condition(); + + obj.Mask = Mask; + obj.Relation = Relation; + obj.Tag = Tag; + obj.Value = Value; + + return obj; + } + + /// + public bool Equals(Condition? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if ((Mask is null) ^ (other.Mask is null)) + return false; + else if (Mask is not null && !Mask.Equals(other.Mask, StringComparison.OrdinalIgnoreCase)) + return false; + + if (Relation != other.Relation) + return false; + + if ((Tag is null) ^ (other.Tag is null)) + return false; + else if (Tag is not null && !Tag.Equals(other.Tag, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Value is null) ^ (other.Value is null)) + return false; + else if (Value is not null && !Value.Equals(other.Value, StringComparison.OrdinalIgnoreCase)) + return false; + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/ConfLocation.cs b/SabreTools.Data.Models/Metadata/ConfLocation.cs index d26305c6..bea51e61 100644 --- a/SabreTools.Data.Models/Metadata/ConfLocation.cs +++ b/SabreTools.Data.Models/Metadata/ConfLocation.cs @@ -1,24 +1,57 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("conflocation"), XmlRoot("conflocation")] - public class ConfLocation : DatItem + public class ConfLocation : DatItem, ICloneable, IEquatable { - #region Keys + #region Properties /// (yes|no) "no" - public const string InvertedKey = "inverted"; + public bool? Inverted { get; set; } - /// string - public const string NameKey = "name"; + public string? Name { get; set; } - /// string, possibly long - public const string NumberKey = "number"; + public long? Number { get; set; } #endregion - public ConfLocation() => Type = ItemType.ConfLocation; + public ConfLocation() => ItemType = ItemType.ConfLocation; + + /// + public object Clone() + { + var obj = new ConfLocation(); + + obj.Inverted = Inverted; + obj.Name = Name; + obj.Number = Number; + + return obj; + } + + /// + public bool Equals(ConfLocation? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if (Inverted != other.Inverted) + return false; + + if ((Name is null) ^ (other.Name is null)) + return false; + else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase)) + return false; + + if (Number != other.Number) + return false; + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/ConfSetting.cs b/SabreTools.Data.Models/Metadata/ConfSetting.cs index f5e1d706..8a0676c2 100644 --- a/SabreTools.Data.Models/Metadata/ConfSetting.cs +++ b/SabreTools.Data.Models/Metadata/ConfSetting.cs @@ -1,28 +1,68 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("confsetting"), XmlRoot("confsetting")] - public class ConfSetting : DatItem + public class ConfSetting : DatItem, ICloneable, IEquatable { - #region Keys + #region Properties - /// Condition - [NoFilter] - public const string ConditionKey = "condition"; + public Condition? Condition { get; set; } /// (yes|no) "no" - public const string DefaultKey = "default"; + public bool? Default { get; set; } - /// string - public const string NameKey = "name"; + public string? Name { get; set; } - /// string - public const string ValueKey = "value"; + public string? Value { get; set; } #endregion - public ConfSetting() => Type = ItemType.ConfSetting; + public ConfSetting() => ItemType = ItemType.ConfSetting; + + /// + public object Clone() + { + var obj = new ConfSetting(); + + obj.Condition = Condition?.Clone() as Condition; + obj.Default = Default; + obj.Name = Name; + obj.Value = Value; + + return obj; + } + + /// + public bool Equals(ConfSetting? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if (Default != other.Default) + return false; + + if ((Name is null) ^ (other.Name is null)) + return false; + else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Value is null) ^ (other.Value is null)) + return false; + else if (Value is not null && !Value.Equals(other.Value, StringComparison.OrdinalIgnoreCase)) + return false; + + // Sub-items + if ((Condition is null) ^ (other.Condition is null)) + return false; + else if (Condition is not null && other.Condition is not null && Condition.Equals(other.Condition)) + return false; + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/Configuration.cs b/SabreTools.Data.Models/Metadata/Configuration.cs index baeea5ed..13bf012f 100644 --- a/SabreTools.Data.Models/Metadata/Configuration.cs +++ b/SabreTools.Data.Models/Metadata/Configuration.cs @@ -1,36 +1,79 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("configuration"), XmlRoot("configuration")] - public class Configuration : DatItem + public class Configuration : DatItem, ICloneable, IEquatable { - #region Keys + #region Properties - /// Condition - [NoFilter] - public const string ConditionKey = "condition"; + public Condition? Condition { get; set; } - /// ConfLocation[] - [NoFilter] - public const string ConfLocationKey = "conflocation"; + public ConfLocation[]? ConfLocation { get; set; } - /// ConfSetting[] - [NoFilter] - public const string ConfSettingKey = "confsetting"; + public ConfSetting[]? ConfSetting { get; set; } - /// string - public const string MaskKey = "mask"; + public string? Mask { get; set; } - /// string - public const string NameKey = "name"; + public string? Name { get; set; } - /// string - public const string TagKey = "tag"; + public string? Tag { get; set; } #endregion - public Configuration() => Type = ItemType.Configuration; + public Configuration() => ItemType = ItemType.Configuration; + + /// + public object Clone() + { + var obj = new Configuration(); + + obj.Condition = Condition?.Clone() as Condition; + if (ConfLocation is not null) + obj.ConfLocation = Array.ConvertAll(ConfLocation, i => (ConfLocation)i.Clone()); + if (ConfSetting is not null) + obj.ConfSetting = Array.ConvertAll(ConfSetting, i => (ConfSetting)i.Clone()); + obj.Mask = Mask; + obj.Name = Name; + obj.Tag = Tag; + + return obj; + } + + /// + public bool Equals(Configuration? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if ((Mask is null) ^ (other.Mask is null)) + return false; + else if (Mask is not null && !Mask.Equals(other.Mask, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Name is null) ^ (other.Name is null)) + return false; + else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Tag is null) ^ (other.Tag is null)) + return false; + else if (Tag is not null && !Tag.Equals(other.Tag, StringComparison.OrdinalIgnoreCase)) + return false; + + // Sub-items + if ((Condition is null) ^ (other.Condition is null)) + return false; + else if (Condition is not null && other.Condition is not null && Condition.Equals(other.Condition)) + return false; + + // TODO: Figure out how to properly check arrays + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/Control.cs b/SabreTools.Data.Models/Metadata/Control.cs index b14eee03..11268628 100644 --- a/SabreTools.Data.Models/Metadata/Control.cs +++ b/SabreTools.Data.Models/Metadata/Control.cs @@ -1,51 +1,116 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("control"), XmlRoot("control")] - public class Control : DatItem + public class Control : DatItem, ICloneable, IEquatable { - #region Keys + #region Properties - /// long - public const string ButtonsKey = "buttons"; - - /// long - public const string KeyDeltaKey = "keydelta"; - - /// long - public const string MaximumKey = "maximum"; - - /// long - public const string MinimumKey = "minimum"; - - /// long - public const string PlayerKey = "player"; - - /// long - public const string ReqButtonsKey = "reqbuttons"; - - /// (yes|no) "no" - public const string ReverseKey = "reverse"; - - /// long - public const string SensitivityKey = "sensitivity"; + public long? Buttons { get; set; } /// (joy|stick|paddle|pedal|lightgun|positional|dial|trackball|mouse|only_buttons|keypad|keyboard|mahjong|hanafuda|gambling) - public const string ControlTypeKey = "type"; + public ControlType? ControlType { get; set; } - /// string, possibly long - public const string WaysKey = "ways"; + public long? KeyDelta { get; set; } - /// string, possibly long - public const string Ways2Key = "ways2"; + public long? Maximum { get; set; } - /// string, possibly long - public const string Ways3Key = "ways3"; + public long? Minimum { get; set; } + + public long? Player { get; set; } + + public long? ReqButtons { get; set; } + + /// (yes|no) "no" + public bool? Reverse { get; set; } + + public long? Sensitivity { get; set; } + + public string? Ways { get; set; } + + public string? Ways2 { get; set; } + + public string? Ways3 { get; set; } #endregion - public Control() => Type = ItemType.Control; + public Control() => ItemType = ItemType.Control; + + /// + public object Clone() + { + var obj = new Control(); + + obj.Buttons = Buttons; + obj.ControlType = ControlType; + obj.KeyDelta = KeyDelta; + obj.Maximum = Maximum; + obj.Minimum = Minimum; + obj.Player = Player; + obj.ReqButtons = ReqButtons; + obj.Reverse = Reverse; + obj.Sensitivity = Sensitivity; + obj.Ways = Ways; + obj.Ways2 = Ways2; + obj.Ways3 = Ways3; + + return obj; + } + + /// + public bool Equals(Control? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if (Buttons != other.Buttons) + return false; + + if (ControlType != other.ControlType) + return false; + + if (KeyDelta != other.KeyDelta) + return false; + + if (Maximum != other.Maximum) + return false; + + if (Minimum != other.Minimum) + return false; + + if (Player != other.Player) + return false; + + if (ReqButtons != other.ReqButtons) + return false; + + if (Reverse != other.Reverse) + return false; + + if (Sensitivity != other.Sensitivity) + return false; + + if ((Ways is null) ^ (other.Ways is null)) + return false; + else if (Ways is not null && !Ways.Equals(other.Ways, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Ways2 is null) ^ (other.Ways2 is null)) + return false; + else if (Ways2 is not null && !Ways2.Equals(other.Ways2, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Ways3 is null) ^ (other.Ways3 is null)) + return false; + else if (Ways3 is not null && !Ways3.Equals(other.Ways3, StringComparison.OrdinalIgnoreCase)) + return false; + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/DatItem.cs b/SabreTools.Data.Models/Metadata/DatItem.cs index 47a1c59e..8b3c2e7e 100644 --- a/SabreTools.Data.Models/Metadata/DatItem.cs +++ b/SabreTools.Data.Models/Metadata/DatItem.cs @@ -6,22 +6,12 @@ namespace SabreTools.Data.Models.Metadata /// /// Format-agnostic representation of item data /// - public class DatItem : DictionaryBase + public abstract class DatItem { - #region Common Keys - - public const string TypeKey = "_type"; - - #endregion - /// - /// Quick accessor to item type, if it exists + /// Quick accessor to item type /// [JsonProperty("itemtype", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("itemtype")] - public ItemType? Type - { - get => ContainsKey(TypeKey) ? this[TypeKey] as ItemType? : null; - set => this[TypeKey] = value; - } + public ItemType ItemType { get; protected set; } } } diff --git a/SabreTools.Data.Models/Metadata/DataArea.cs b/SabreTools.Data.Models/Metadata/DataArea.cs index 2a2b989d..cbbb9944 100644 --- a/SabreTools.Data.Models/Metadata/DataArea.cs +++ b/SabreTools.Data.Models/Metadata/DataArea.cs @@ -1,31 +1,71 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("dataarea"), XmlRoot("dataarea")] - public class DataArea : DatItem + public class DataArea : DatItem, ICloneable, IEquatable { - #region Keys + #region Properties /// (big|little) "little" - public const string EndiannessKey = "endianness"; + public Endianness? Endianness { get; set; } - /// string - public const string NameKey = "name"; + public string? Name { get; set; } - /// Rom[] - [NoFilter] - public const string RomKey = "rom"; + public Rom[]? Rom { get; set; } - /// long - public const string SizeKey = "size"; + public long? Size { get; set; } /// (8|16|32|64) "8" - public const string WidthKey = "width"; + public Width? Width { get; set; } #endregion - public DataArea() => Type = ItemType.DataArea; + public DataArea() => ItemType = ItemType.DataArea; + + /// + public object Clone() + { + var obj = new DataArea(); + + obj.Endianness = Endianness; + obj.Name = Name; + if (Rom is not null) + obj.Rom = Array.ConvertAll(Rom, i => (Rom)i.Clone()); + obj.Size = Size; + obj.Width = Width; + + return obj; + } + + /// + public bool Equals(DataArea? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if (Endianness != other.Endianness) + return false; + + if ((Name is null) ^ (other.Name is null)) + return false; + else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase)) + return false; + + if (Size != other.Size) + return false; + + if (Width != other.Width) + return false; + + // Sub-items + // TODO: Figure out how to properly check arrays + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/Device.cs b/SabreTools.Data.Models/Metadata/Device.cs index b2ba3bdb..8e44cd27 100644 --- a/SabreTools.Data.Models/Metadata/Device.cs +++ b/SabreTools.Data.Models/Metadata/Device.cs @@ -1,38 +1,89 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("device"), XmlRoot("device")] - public class Device : DatItem + public class Device : DatItem, ICloneable, IEquatable { - #region Keys - - /// Extension[] - [NoFilter] - public const string ExtensionKey = "extension"; - - /// string - public const string FixedImageKey = "fixed_image"; - - /// Instance - [NoFilter] - public const string InstanceKey = "instance"; - - /// string - public const string InterfaceKey = "interface"; - - /// (0|1) "0" - public const string MandatoryKey = "mandatory"; - - /// string - public const string TagKey = "tag"; + #region Properties /// (unknown|cartridge|floppydisk|harddisk|cylinder|cassette|punchcard|punchtape|printout|serial|parallel|snapshot|quickload|memcard|cdrom|magtape|romimage|midiin|midiout|picture|vidfile) - public const string DeviceTypeKey = "type"; + public DeviceType? DeviceType { get; set; } + + public Extension[]? Extension { get; set; } + + public string? FixedImage { get; set; } + + public Instance? Instance { get; set; } + + public string? Interface { get; set; } + + /// (0|1) "0" + public bool? Mandatory { get; set; } + + public string? Tag { get; set; } #endregion - public Device() => Type = ItemType.Device; + public Device() => ItemType = ItemType.Device; + + /// + public object Clone() + { + var obj = new Device(); + + obj.DeviceType = DeviceType; + if (Extension is not null) + obj.Extension = Array.ConvertAll(Extension, i => (Extension)i.Clone()); + obj.FixedImage = FixedImage; + obj.Instance = Instance?.Clone() as Instance; + obj.Interface = Interface; + obj.Mandatory = Mandatory; + obj.Tag = Tag; + + return obj; + } + + /// + public bool Equals(Device? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if (DeviceType != other.DeviceType) + return false; + + if ((FixedImage is null) ^ (other.FixedImage is null)) + return false; + else if (FixedImage is not null && !FixedImage.Equals(other.FixedImage, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Interface is null) ^ (other.Interface is null)) + return false; + else if (Interface is not null && !Interface.Equals(other.Interface, StringComparison.OrdinalIgnoreCase)) + return false; + + if (Mandatory != other.Mandatory) + return false; + + if ((Tag is null) ^ (other.Tag is null)) + return false; + else if (Tag is not null && !Tag.Equals(other.Tag, StringComparison.OrdinalIgnoreCase)) + return false; + + // Sub-items + if ((Instance is null) ^ (other.Instance is null)) + return false; + else if (Instance is not null && other.Instance is not null && Instance.Equals(other.Instance)) + return false; + + // TODO: Figure out how to properly check arrays + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/DeviceRef.cs b/SabreTools.Data.Models/Metadata/DeviceRef.cs index 31223b86..36cfbc7b 100644 --- a/SabreTools.Data.Models/Metadata/DeviceRef.cs +++ b/SabreTools.Data.Models/Metadata/DeviceRef.cs @@ -1,18 +1,44 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("device_ref"), XmlRoot("device_ref")] - public class DeviceRef : DatItem + public class DeviceRef : DatItem, ICloneable, IEquatable { - #region Keys + #region Properties - /// string - public const string NameKey = "name"; + public string? Name { get; set; } #endregion - public DeviceRef() => Type = ItemType.DeviceRef; + public DeviceRef() => ItemType = ItemType.DeviceRef; + + /// + public object Clone() + { + var obj = new DeviceRef(); + + obj.Name = Name; + + return obj; + } + + /// + public bool Equals(DeviceRef? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if ((Name is null) ^ (other.Name is null)) + return false; + else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase)) + return false; + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/DictionaryBase.cs b/SabreTools.Data.Models/Metadata/DictionaryBase.cs deleted file mode 100644 index 4548c583..00000000 --- a/SabreTools.Data.Models/Metadata/DictionaryBase.cs +++ /dev/null @@ -1,259 +0,0 @@ -using System.Collections.Generic; - -namespace SabreTools.Data.Models.Metadata -{ - /// - /// Specialized dictionary base for item types - /// - public abstract class DictionaryBase : Dictionary - { - #region Read - - /// - /// Read a key as the specified type, returning null on error - /// - public T? Read(string key) - { - try - { - if (!ValidateReadKey(key)) - return default; - if (this[key] is not T) - return default; - return (T?)this[key]; - } - catch - { - return default; - } - } - - /// - /// Read a key as a bool, returning null on error - /// - public bool? ReadBool(string key) - { - if (!ValidateReadKey(key)) - return null; - - bool? asBool = Read(key); - if (asBool is not null) - return asBool; - - string? asString = Read(key); - return asString?.ToLowerInvariant() switch - { - "true" or "yes" => true, - "false" or "no" => false, - _ => null, - }; - } - - /// - /// Read a key as a double, returning null on error - /// - public double? ReadDouble(string key) - { - if (!ValidateReadKey(key)) - return null; - - double? asDouble = Read(key); - if (asDouble is not null) - return asDouble; - - float? asFloat = Read(key); - if (asFloat is not null) - return asFloat; - -#if NET5_0_OR_GREATER - System.Half? asHalf = Read(key); - if (asHalf is not null) - return (double?)asHalf; -#endif - - string? asString = Read(key); - if (asString is not null && double.TryParse(asString, out double asStringDouble)) - return asStringDouble; - - return null; - } - - /// - /// Read a key as a long, returning null on error - /// - /// TODO: Add logic to convert SI suffixes and hex - public long? ReadLong(string key) - { - if (!ValidateReadKey(key)) - return null; - - long? asLong = Read(key); - if (asLong is not null) - return asLong; - - int? asInt = Read(key); - if (asInt is not null) - return asInt; - - short? asShort = Read(key); - if (asShort is not null) - return asShort; - - string? asString = Read(key); - if (asString is not null && long.TryParse(asString, out long asStringLong)) - return asStringLong; - - return null; - } - - /// - /// Read a key as a string, returning null on error - /// - public string? ReadString(string key) - { - if (!ValidateReadKey(key)) - return null; - - string? asString = Read(key); - if (asString is not null) - return asString; - - string[]? asArray = Read(key); - if (asArray is not null) -#if NETFRAMEWORK || NETSTANDARD2_0 - return string.Join(",", asArray); -#else - return string.Join(',', asArray); -#endif - - // TODO: Add byte array conversion here - // TODO: Add byte array read helper - - return this[key]!.ToString(); - } - - /// - /// Read a key as a T[], returning null on error - /// - public T[]? ReadArray(string key) - { - if (!ValidateReadKey(key)) - return null; - - var items = Read(key); - if (items is not null) - return items; - - var single = Read(key); - if (single is not null) - return [single]; - - return null; - } - - /// - /// Read a key as a string[], returning null on error - /// - public string[]? ReadStringArray(string key) - { - if (!ValidateReadKey(key)) - return null; - - string[]? asArray = Read(key); - if (asArray is not null) - return asArray; - - string? asString = Read(key); - if (asString is not null) - return [asString]; - - asString = this[key]!.ToString(); - if (asString is not null) - return [asString]; - - return null; - } - - /// - /// Check if a key is valid for read - /// - private bool ValidateReadKey(string key) - { - if (string.IsNullOrEmpty(key)) - return false; - else if (!ContainsKey(key)) - return false; - else if (this[key] is null) - return false; - - return true; - } - - #endregion - - #region Write - - /// - /// Remove a key, if possible - /// - public new bool Remove(string? fieldName) - { - // If the item or field name are missing, we can't do anything - if (string.IsNullOrEmpty(fieldName)) - return false; - - // If the key doesn't exist, then it's already removed - if (!ContainsKey(fieldName!)) - return true; - - // Remove the key - base.Remove(fieldName!); - return true; - } - - /// - /// Replace a field from another item - /// - public bool Replace(DictionaryBase? from, string fieldName) - { - // If the source item is invalid - if (from is null) - return false; - - // If the field name is missing, we can't do anything - if (string.IsNullOrEmpty(fieldName)) - return false; - - // If the types of the items are not the same, we can't do anything - if (from.GetType() != GetType()) - return false; - - // If the key doesn't exist in the source, we can't do anything - if (!from.TryGetValue(fieldName!, out var value)) - return false; - - // Set the key - this[fieldName!] = value; - return true; - } - - /// - /// Write a key as the specified type, returning false on error - /// - /// Field to set - /// Value to set - /// True if the value was set, false otherwise - public bool Write(string fieldName, T? value) - { - // Invalid field cannot be processed - if (fieldName is null) - return false; - - // Set the value based on the type - this[fieldName] = value; - return true; - } - - #endregion - } -} diff --git a/SabreTools.Data.Models/Metadata/DipLocation.cs b/SabreTools.Data.Models/Metadata/DipLocation.cs index 24570ba9..5926d140 100644 --- a/SabreTools.Data.Models/Metadata/DipLocation.cs +++ b/SabreTools.Data.Models/Metadata/DipLocation.cs @@ -1,24 +1,57 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("diplocation"), XmlRoot("diplocation")] - public class DipLocation : DatItem + public class DipLocation : DatItem, ICloneable, IEquatable { - #region Keys + #region Properties /// (yes|no) "no" - public const string InvertedKey = "inverted"; + public bool? Inverted { get; set; } - /// string - public const string NameKey = "name"; + public string? Name { get; set; } - /// string, possibly long - public const string NumberKey = "number"; + public long? Number { get; set; } #endregion - public DipLocation() => Type = ItemType.DipLocation; + public DipLocation() => ItemType = ItemType.DipLocation; + + /// + public object Clone() + { + var obj = new DipLocation(); + + obj.Inverted = Inverted; + obj.Name = Name; + obj.Number = Number; + + return obj; + } + + /// + public bool Equals(DipLocation? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if (Inverted != other.Inverted) + return false; + + if ((Name is null) ^ (other.Name is null)) + return false; + else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase)) + return false; + + if (Number != other.Number) + return false; + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/DipSwitch.cs b/SabreTools.Data.Models/Metadata/DipSwitch.cs index a363539a..93cc798f 100644 --- a/SabreTools.Data.Models/Metadata/DipSwitch.cs +++ b/SabreTools.Data.Models/Metadata/DipSwitch.cs @@ -1,42 +1,87 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("dipswitch"), XmlRoot("dipswitch")] - public class DipSwitch : DatItem + public class DipSwitch : DatItem, ICloneable, IEquatable { - #region Keys + #region Properties - /// Condition - [NoFilter] - public const string ConditionKey = "condition"; + public Condition? Condition { get; set; } /// (yes|no) "no" - public const string DefaultKey = "default"; + public bool? Default { get; set; } - /// DipLocation[] - [NoFilter] - public const string DipLocationKey = "diplocation"; + public DipLocation[]? DipLocation { get; set; } - /// DipValue[] - [NoFilter] - public const string DipValueKey = "dipvalue"; + public DipValue[]? DipValue { get; set; } - /// string[] - public const string EntryKey = "entry"; + public string[]? Entry { get; set; } - /// string - public const string MaskKey = "mask"; + public string? Mask { get; set; } - /// string - public const string NameKey = "name"; + public string? Name { get; set; } - /// string - public const string TagKey = "tag"; + public string? Tag { get; set; } #endregion - public DipSwitch() => Type = ItemType.DipSwitch; + public DipSwitch() => ItemType = ItemType.DipSwitch; + + /// + public object Clone() + { + var obj = new DipSwitch(); + + obj.Condition = Condition?.Clone() as Condition; + obj.Default = Default; + if (DipLocation is not null) + obj.DipLocation = Array.ConvertAll(DipLocation, i => (DipLocation)i.Clone()); + if (DipValue is not null) + obj.DipValue = Array.ConvertAll(DipValue, i => (DipValue)i.Clone()); + if (Entry is not null) + obj.Entry = Array.ConvertAll(Entry, i => i); + obj.Mask = Mask; + obj.Name = Name; + obj.Tag = Tag; + + return obj; + } + + /// + public bool Equals(DipSwitch? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if ((Mask is null) ^ (other.Mask is null)) + return false; + else if (Mask is not null && !Mask.Equals(other.Mask, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Name is null) ^ (other.Name is null)) + return false; + else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Tag is null) ^ (other.Tag is null)) + return false; + else if (Tag is not null && !Tag.Equals(other.Tag, StringComparison.OrdinalIgnoreCase)) + return false; + + // Sub-items + if ((Condition is null) ^ (other.Condition is null)) + return false; + else if (Condition is not null && other.Condition is not null && Condition.Equals(other.Condition)) + return false; + + // TODO: Figure out how to properly check arrays + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/DipValue.cs b/SabreTools.Data.Models/Metadata/DipValue.cs index 153c8bcb..c23ed88f 100644 --- a/SabreTools.Data.Models/Metadata/DipValue.cs +++ b/SabreTools.Data.Models/Metadata/DipValue.cs @@ -1,28 +1,68 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("dipvalue"), XmlRoot("dipvalue")] - public class DipValue : DatItem + public class DipValue : DatItem, ICloneable, IEquatable { - #region Keys + #region Properties - /// Condition - [NoFilter] - public const string ConditionKey = "condition"; + public Condition? Condition { get; set; } /// (yes|no) "no" - public const string DefaultKey = "default"; + public bool? Default { get; set; } - /// string - public const string NameKey = "name"; + public string? Name { get; set; } - /// string - public const string ValueKey = "value"; + public string? Value { get; set; } #endregion - public DipValue() => Type = ItemType.DipValue; + public DipValue() => ItemType = ItemType.DipValue; + + /// + public object Clone() + { + var obj = new DipValue(); + + obj.Condition = Condition?.Clone() as Condition; + obj.Default = Default; + obj.Name = Name; + obj.Value = Value; + + return obj; + } + + /// + public bool Equals(DipValue? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if (Default != other.Default) + return false; + + if ((Name is null) ^ (other.Name is null)) + return false; + else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Value is null) ^ (other.Value is null)) + return false; + else if (Value is not null && !Value.Equals(other.Value, StringComparison.OrdinalIgnoreCase)) + return false; + + // Sub-items + if ((Condition is null) ^ (other.Condition is null)) + return false; + else if (Condition is not null && other.Condition is not null && Condition.Equals(other.Condition)) + return false; + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/Disk.cs b/SabreTools.Data.Models/Metadata/Disk.cs index 006218c5..c012e119 100644 --- a/SabreTools.Data.Models/Metadata/Disk.cs +++ b/SabreTools.Data.Models/Metadata/Disk.cs @@ -1,45 +1,59 @@ +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 Keys + #region Properties - /// string - public const string FlagsKey = "flags"; + public string? Flags { get; set; } - /// string, possibly long - public const string IndexKey = "index"; + public long? Index { get; set; } - /// string - public const string MD5Key = "md5"; + public string? MD5 { get; set; } - /// string - public const string MergeKey = "merge"; + public string? Merge { get; set; } - /// string - public const string NameKey = "name"; + public string? Name { get; set; } /// (yes|no) "no" - public const string OptionalKey = "optional"; + public bool? Optional { get; set; } - /// string - public const string RegionKey = "region"; + public string? Region { get; set; } - /// string - public const string SHA1Key = "sha1"; + public string? SHA1 { get; set; } /// (baddump|nodump|good|verified) "good" - public const string StatusKey = "status"; + public ItemStatus? Status { get; set; } /// (yes|no) "no" - public const string WritableKey = "writable"; + public bool? Writable { get; set; } #endregion - public Disk() => Type = ItemType.Disk; + 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.Data.Models/Metadata/DiskArea.cs b/SabreTools.Data.Models/Metadata/DiskArea.cs index 0c1c73ba..b82b168a 100644 --- a/SabreTools.Data.Models/Metadata/DiskArea.cs +++ b/SabreTools.Data.Models/Metadata/DiskArea.cs @@ -1,22 +1,51 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("diskarea"), XmlRoot("diskarea")] - public class DiskArea : DatItem + public class DiskArea : DatItem, ICloneable, IEquatable { - #region Keys + #region Properties - /// Disk[] - [NoFilter] - public const string DiskKey = "disk"; + public Disk[]? Disk { get; set; } - /// string - public const string NameKey = "name"; + public string? Name { get; set; } #endregion - public DiskArea() => Type = ItemType.DiskArea; + public DiskArea() => ItemType = ItemType.DiskArea; + + /// + public object Clone() + { + var obj = new DiskArea(); + + if (Disk is not null) + obj.Disk = Array.ConvertAll(Disk, i => (Disk)i.Clone()); + obj.Name = Name; + + return obj; + } + + /// + public bool Equals(DiskArea? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if ((Name is null) ^ (other.Name is null)) + return false; + else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase)) + return false; + + // Sub-items + // TODO: Figure out how to properly check arrays + + return true; + } } } diff --git a/SabreTools.Data.Models/Metadata/Display.cs b/SabreTools.Data.Models/Metadata/Display.cs index 286b72cc..a4d594d2 100644 --- a/SabreTools.Data.Models/Metadata/Display.cs +++ b/SabreTools.Data.Models/Metadata/Display.cs @@ -1,57 +1,165 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("display"), XmlRoot("display")] - public class Display : DatItem + public class Display : DatItem, ICloneable, IEquatable, IEquatable private static Rom CreateRom() { - var rom = new Rom(); - - rom.Write(Data.Models.Metadata.Rom.StatusKey, ItemStatus.Good.AsStringValue()); - rom.Write(Data.Models.Metadata.Rom.SizeKey, 1); - rom.Write(Data.Models.Metadata.Rom.CRC16Key, HashType.CRC16.ZeroString); - rom.Write(Data.Models.Metadata.Rom.CRCKey, HashType.CRC32.ZeroString); - rom.Write(Data.Models.Metadata.Rom.CRC64Key, HashType.CRC64.ZeroString); - rom.Write(Data.Models.Metadata.Rom.MD2Key, HashType.MD2.ZeroString); - rom.Write(Data.Models.Metadata.Rom.MD4Key, HashType.MD4.ZeroString); - rom.Write(Data.Models.Metadata.Rom.MD5Key, HashType.MD5.ZeroString); - rom.Write(Data.Models.Metadata.Rom.RIPEMD128Key, HashType.RIPEMD128.ZeroString); - rom.Write(Data.Models.Metadata.Rom.RIPEMD160Key, HashType.RIPEMD160.ZeroString); - rom.Write(Data.Models.Metadata.Rom.SHA1Key, HashType.SHA1.ZeroString); - rom.Write(Data.Models.Metadata.Rom.SHA256Key, HashType.SHA256.ZeroString); - rom.Write(Data.Models.Metadata.Rom.SHA384Key, HashType.SHA384.ZeroString); - rom.Write(Data.Models.Metadata.Rom.SHA512Key, HashType.SHA512.ZeroString); - rom.Write(Data.Models.Metadata.Rom.SpamSumKey, HashType.SpamSum.ZeroString); + var rom = new Rom + { + Status = ItemStatus.Good, + Size = 1 + }; + rom.CRC16 = HashType.CRC16.ZeroString; + rom.CRC32 = HashType.CRC32.ZeroString; + rom.CRC64 = HashType.CRC64.ZeroString; + rom.MD2 = HashType.MD2.ZeroString; + rom.MD4 = HashType.MD4.ZeroString; + rom.MD5 = HashType.MD5.ZeroString; + rom.RIPEMD128 = HashType.RIPEMD128.ZeroString; + rom.RIPEMD160 = HashType.RIPEMD160.ZeroString; + rom.SHA1 = HashType.SHA1.ZeroString; + rom.SHA256 = HashType.SHA256.ZeroString; + rom.SHA384 = HashType.SHA384.ZeroString; + rom.SHA512 = HashType.SHA512.ZeroString; + rom.SpamSum = HashType.SpamSum.ZeroString; return rom; } diff --git a/SabreTools.Metadata.Test/UtilitiesTests.cs b/SabreTools.Metadata.DatFiles.Test/DepotInformationTests.cs similarity index 64% rename from SabreTools.Metadata.Test/UtilitiesTests.cs rename to SabreTools.Metadata.DatFiles.Test/DepotInformationTests.cs index fdc34b8d..1a3ad828 100644 --- a/SabreTools.Metadata.Test/UtilitiesTests.cs +++ b/SabreTools.Metadata.DatFiles.Test/DepotInformationTests.cs @@ -1,8 +1,8 @@ using Xunit; -namespace SabreTools.Metadata.Test +namespace SabreTools.Metadata.DatFiles.Test { - public class UtilitiesTests + public class DepotInformationTests { #region GetDepotPath @@ -16,7 +16,8 @@ namespace SabreTools.Metadata.Test [InlineData(new byte[] { 0xda, 0x39, 0xa3, 0xee, 0x5e, 0x6b, 0x4b, 0x0d, 0x32, 0x55, 0xbf, 0xef, 0x95, 0x60, 0x18, 0x90, 0xaf, 0xd8, 0x07, 0x09 }, 1, "da\\da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] public void GetDepotPath_Array(byte[]? hash, int depth, string? expected) { - string? actual = Utilities.GetDepotPath(hash, depth); + var depot = new DepotInformation(isActive: true, depth: depth); + string? actual = depot.GetDepotPath(hash); if (System.IO.Path.DirectorySeparatorChar == '/') expected = expected?.Replace('\\', '/'); @@ -33,7 +34,8 @@ namespace SabreTools.Metadata.Test [InlineData("da39a3ee5e6b4b0d3255bfef95601890afd80709", 1, "da\\da39a3ee5e6b4b0d3255bfef95601890afd80709.gz")] public void GetDepotPath_String(string? hash, int depth, string? expected) { - string? actual = Utilities.GetDepotPath(hash, depth); + var depot = new DepotInformation(isActive: true, depth: depth); + string? actual = depot.GetDepotPath(hash); if (System.IO.Path.DirectorySeparatorChar == '/') expected = expected?.Replace('\\', '/'); @@ -41,30 +43,5 @@ namespace SabreTools.Metadata.Test } #endregion - - #region HasValidDatExtension - - [Theory] - [InlineData(null, false)] - [InlineData("", false)] - [InlineData("no-extension", false)] - [InlineData("no-extension.", false)] - [InlineData("invalid.ext", false)] - [InlineData("invalid..ext", false)] - [InlineData("INVALID.EXT", false)] - [InlineData("INVALID..EXT", false)] - [InlineData(".dat", true)] - [InlineData(".DAT", true)] - [InlineData("valid_extension.dat", true)] - [InlineData("valid_extension..dat", true)] - [InlineData("valid_extension.DAT", true)] - [InlineData("valid_extension..DAT", true)] - public void HasValidDatExtensionTest(string? path, bool expected) - { - bool actual = Utilities.HasValidDatExtension(path); - Assert.Equal(expected, actual); - } - - #endregion } } diff --git a/SabreTools.Metadata.DatFiles.Test/FormatsTests.cs b/SabreTools.Metadata.DatFiles.Test/FormatsTests.cs index 96b898de..63b7cf5e 100644 --- a/SabreTools.Metadata.DatFiles.Test/FormatsTests.cs +++ b/SabreTools.Metadata.DatFiles.Test/FormatsTests.cs @@ -1,7 +1,6 @@ using System; using System.Linq; using SabreTools.Metadata.DatFiles.Formats; -using SabreTools.Metadata.DatItems; using SabreTools.Metadata.DatItems.Formats; using Xunit; @@ -17,7 +16,7 @@ namespace SabreTools.Metadata.DatFiles.Test /// /// All defined item types /// - private static readonly ItemType[] AllTypes = Enum.GetValues(); + private static readonly Data.Models.Metadata.ItemType[] AllTypes = Enum.GetValues(); #endregion @@ -29,7 +28,7 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new ArchiveDotOrg(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -43,7 +42,7 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new AttractMode(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -57,7 +56,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, + nameof(Data.Models.Metadata.Rom.Name), ])); } @@ -71,19 +70,19 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new ClrMamePro(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Archive, - ItemType.BiosSet, - ItemType.Chip, - ItemType.DipSwitch, - ItemType.Disk, - ItemType.Display, - ItemType.Driver, - ItemType.Input, - ItemType.Media, - ItemType.Release, - ItemType.Rom, - ItemType.Sample, - ItemType.Sound, + Data.Models.Metadata.ItemType.Archive, + Data.Models.Metadata.ItemType.BiosSet, + Data.Models.Metadata.ItemType.Chip, + Data.Models.Metadata.ItemType.DipSwitch, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Display, + Data.Models.Metadata.ItemType.Driver, + Data.Models.Metadata.ItemType.Input, + Data.Models.Metadata.ItemType.Media, + Data.Models.Metadata.ItemType.Release, + Data.Models.Metadata.ItemType.Rom, + Data.Models.Metadata.ItemType.Sample, + Data.Models.Metadata.ItemType.Sound, ])); } @@ -97,8 +96,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Release.NameKey, - Data.Models.Metadata.Release.RegionKey, + nameof(Data.Models.Metadata.Release.Name), + nameof(Data.Models.Metadata.Release.Region), ])); } @@ -112,8 +111,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.BiosSet.NameKey, - Data.Models.Metadata.BiosSet.DescriptionKey, + nameof(Data.Models.Metadata.BiosSet.Name), + nameof(Data.Models.Metadata.BiosSet.Description), ])); } @@ -127,9 +126,9 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.SizeKey, - Data.Models.Metadata.Rom.SHA1Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.Size), + nameof(Data.Models.Metadata.Rom.SHA1), ])); } @@ -143,8 +142,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Disk.NameKey, - Data.Models.Metadata.Disk.SHA1Key, + nameof(Data.Models.Metadata.Disk.Name), + nameof(Data.Models.Metadata.Disk.SHA1), ])); } @@ -158,7 +157,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Sample.NameKey, + nameof(Data.Models.Metadata.Sample.Name), ])); } @@ -172,7 +171,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Archive.NameKey, + nameof(Data.Models.Metadata.Archive.Name), ])); } @@ -186,8 +185,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Chip.ChipTypeKey, - Data.Models.Metadata.Chip.NameKey, + nameof(Data.Models.Metadata.Chip.ChipType), + nameof(Data.Models.Metadata.Chip.Name), ])); } @@ -201,8 +200,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Display.DisplayTypeKey, - Data.Models.Metadata.Display.RotateKey, + nameof(Data.Models.Metadata.Display.DisplayType), + nameof(Data.Models.Metadata.Display.Rotate), ])); } @@ -216,7 +215,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Sound.ChannelsKey, + nameof(Data.Models.Metadata.Sound.Channels), ])); } @@ -230,8 +229,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Input.PlayersKey, - Data.Models.Metadata.Input.ControlKey, + nameof(Data.Models.Metadata.Input.Players), + nameof(Data.Models.Metadata.Input.Control), ])); } @@ -245,7 +244,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.DipSwitch.NameKey, + nameof(Data.Models.Metadata.DipSwitch.Name), ])); } @@ -259,8 +258,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Driver.StatusKey, - Data.Models.Metadata.Driver.EmulationKey, + nameof(Data.Models.Metadata.Driver.Status), + nameof(Data.Models.Metadata.Driver.Emulation), ])); } @@ -274,7 +273,7 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new DosCenter(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -288,9 +287,9 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.SizeKey, - Data.Models.Metadata.Rom.CRCKey, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.Size), + nameof(Data.Models.Metadata.Rom.CRC32), ])); } @@ -304,7 +303,7 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new EverdriveSMDB(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -318,11 +317,11 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.SHA256Key, - Data.Models.Metadata.Rom.SHA1Key, - Data.Models.Metadata.Rom.MD5Key, - Data.Models.Metadata.Rom.CRCKey, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.SHA256), + nameof(Data.Models.Metadata.Rom.SHA1), + nameof(Data.Models.Metadata.Rom.MD5), + nameof(Data.Models.Metadata.Rom.CRC32), ])); } @@ -336,7 +335,7 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new SfvFile(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -350,8 +349,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.CRCKey, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.CRC32), ])); } @@ -361,7 +360,7 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new Md2File(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -375,8 +374,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.MD2Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.MD2), ])); } @@ -386,7 +385,7 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new Md4File(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -400,8 +399,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.MD4Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.MD4), ])); } @@ -411,9 +410,9 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new Md5File(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Disk, - ItemType.Media, - ItemType.Rom, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Media, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -427,8 +426,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Disk.NameKey, - Data.Models.Metadata.Disk.MD5Key, + nameof(Data.Models.Metadata.Disk.Name), + nameof(Data.Models.Metadata.Disk.MD5), ])); } @@ -442,8 +441,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Media.NameKey, - Data.Models.Metadata.Media.MD5Key, + nameof(Data.Models.Metadata.Media.Name), + nameof(Data.Models.Metadata.Media.MD5), ])); } @@ -457,8 +456,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.MD5Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.MD5), ])); } @@ -468,7 +467,7 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new RipeMD128File(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -482,8 +481,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.RIPEMD128Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.RIPEMD128), ])); } @@ -493,7 +492,7 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new RipeMD160File(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -507,8 +506,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.RIPEMD160Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.RIPEMD160), ])); } @@ -518,9 +517,9 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new Sha1File(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Disk, - ItemType.Media, - ItemType.Rom, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Media, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -534,8 +533,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Disk.NameKey, - Data.Models.Metadata.Disk.SHA1Key, + nameof(Data.Models.Metadata.Disk.Name), + nameof(Data.Models.Metadata.Disk.SHA1), ])); } @@ -549,8 +548,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Media.NameKey, - Data.Models.Metadata.Media.SHA1Key, + nameof(Data.Models.Metadata.Media.Name), + nameof(Data.Models.Metadata.Media.SHA1), ])); } @@ -564,8 +563,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.SHA1Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.SHA1), ])); } @@ -575,8 +574,8 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new Sha256File(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Media, - ItemType.Rom, + Data.Models.Metadata.ItemType.Media, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -590,8 +589,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Media.NameKey, - Data.Models.Metadata.Media.SHA256Key, + nameof(Data.Models.Metadata.Media.Name), + nameof(Data.Models.Metadata.Media.SHA256), ])); } @@ -605,8 +604,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.SHA256Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.SHA256), ])); } @@ -616,7 +615,7 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new Sha384File(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -630,8 +629,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.SHA384Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.SHA384), ])); } @@ -641,7 +640,7 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new Sha512File(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -655,8 +654,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.SHA512Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.SHA512), ])); } @@ -666,8 +665,8 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new SpamSumFile(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Media, - ItemType.Rom, + Data.Models.Metadata.ItemType.Media, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -681,8 +680,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Media.NameKey, - Data.Models.Metadata.Media.SpamSumKey, + nameof(Data.Models.Metadata.Media.Name), + nameof(Data.Models.Metadata.Media.SpamSum), ])); } @@ -696,8 +695,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.SpamSumKey, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.SpamSum), ])); } @@ -711,8 +710,8 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new Listrom(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Disk, - ItemType.Rom, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -726,8 +725,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Disk.NameKey, - Data.Models.Metadata.Disk.SHA1Key, + nameof(Data.Models.Metadata.Disk.Name), + nameof(Data.Models.Metadata.Disk.SHA1), ])); } @@ -741,10 +740,10 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.SizeKey, - Data.Models.Metadata.Rom.CRCKey, - Data.Models.Metadata.Rom.SHA1Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.Size), + nameof(Data.Models.Metadata.Rom.CRC32), + nameof(Data.Models.Metadata.Rom.SHA1), ])); } @@ -758,26 +757,26 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new Listxml(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Adjuster, - ItemType.BiosSet, - ItemType.Chip, - ItemType.Condition, - ItemType.Configuration, - ItemType.Device, - ItemType.DeviceRef, - ItemType.DipSwitch, - ItemType.Disk, - ItemType.Display, - ItemType.Driver, - ItemType.Feature, - ItemType.Input, - ItemType.Port, - ItemType.RamOption, - ItemType.Rom, - ItemType.Sample, - ItemType.Slot, - ItemType.SoftwareList, - ItemType.Sound, + Data.Models.Metadata.ItemType.Adjuster, + Data.Models.Metadata.ItemType.BiosSet, + Data.Models.Metadata.ItemType.Chip, + Data.Models.Metadata.ItemType.Condition, + Data.Models.Metadata.ItemType.Configuration, + Data.Models.Metadata.ItemType.Device, + Data.Models.Metadata.ItemType.DeviceRef, + Data.Models.Metadata.ItemType.DipSwitch, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Display, + Data.Models.Metadata.ItemType.Driver, + Data.Models.Metadata.ItemType.Feature, + Data.Models.Metadata.ItemType.Input, + Data.Models.Metadata.ItemType.Port, + Data.Models.Metadata.ItemType.RamOption, + Data.Models.Metadata.ItemType.Rom, + Data.Models.Metadata.ItemType.Sample, + Data.Models.Metadata.ItemType.Slot, + Data.Models.Metadata.ItemType.SoftwareList, + Data.Models.Metadata.ItemType.Sound, ])); } @@ -791,8 +790,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.BiosSet.NameKey, - Data.Models.Metadata.BiosSet.DescriptionKey, + nameof(Data.Models.Metadata.BiosSet.Name), + nameof(Data.Models.Metadata.BiosSet.Description), ])); } @@ -806,9 +805,9 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.SizeKey, - Data.Models.Metadata.Rom.SHA1Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.Size), + nameof(Data.Models.Metadata.Rom.SHA1), ])); } @@ -822,8 +821,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Disk.NameKey, - Data.Models.Metadata.Disk.SHA1Key, + nameof(Data.Models.Metadata.Disk.Name), + nameof(Data.Models.Metadata.Disk.SHA1), ])); } @@ -837,7 +836,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.DeviceRef.NameKey, + nameof(Data.Models.Metadata.DeviceRef.Name), ])); } @@ -851,7 +850,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Sample.NameKey, + nameof(Data.Models.Metadata.Sample.Name), ])); } @@ -865,8 +864,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Chip.NameKey, - Data.Models.Metadata.Chip.ChipTypeKey, + nameof(Data.Models.Metadata.Chip.Name), + nameof(Data.Models.Metadata.Chip.ChipType), ])); } @@ -880,8 +879,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Display.DisplayTypeKey, - Data.Models.Metadata.Display.RefreshKey, + nameof(Data.Models.Metadata.Display.DisplayType), + nameof(Data.Models.Metadata.Display.Refresh), ])); } @@ -895,7 +894,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Sound.ChannelsKey, + nameof(Data.Models.Metadata.Sound.Channels), ])); } @@ -909,7 +908,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Input.PlayersKey, + nameof(Data.Models.Metadata.Input.Players), ])); } @@ -923,8 +922,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.DipSwitch.NameKey, - Data.Models.Metadata.DipSwitch.TagKey, + nameof(Data.Models.Metadata.DipSwitch.Name), + nameof(Data.Models.Metadata.DipSwitch.Tag), ])); } @@ -938,8 +937,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Configuration.NameKey, - Data.Models.Metadata.Configuration.TagKey, + nameof(Data.Models.Metadata.Configuration.Name), + nameof(Data.Models.Metadata.Configuration.Tag), ])); } @@ -953,7 +952,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Port.TagKey, + nameof(Data.Models.Metadata.Port.Tag), ])); } @@ -967,7 +966,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Adjuster.NameKey, + nameof(Data.Models.Metadata.Adjuster.Name), ])); } @@ -981,10 +980,10 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Driver.StatusKey, - Data.Models.Metadata.Driver.EmulationKey, - Data.Models.Metadata.Driver.CocktailKey, - Data.Models.Metadata.Driver.SaveStateKey, + nameof(Data.Models.Metadata.Driver.Status), + nameof(Data.Models.Metadata.Driver.Emulation), + nameof(Data.Models.Metadata.Driver.Cocktail), + nameof(Data.Models.Metadata.Driver.SaveState), ])); } @@ -998,7 +997,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Feature.FeatureTypeKey, + nameof(Data.Models.Metadata.Feature.FeatureType), ])); } @@ -1012,7 +1011,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Device.DeviceTypeKey, + nameof(Data.Models.Metadata.Device.DeviceType), ])); } @@ -1026,7 +1025,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Slot.NameKey, + nameof(Data.Models.Metadata.Slot.Name), ])); } @@ -1040,9 +1039,9 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.SoftwareList.TagKey, - Data.Models.Metadata.SoftwareList.NameKey, - Data.Models.Metadata.SoftwareList.StatusKey, + nameof(Data.Models.Metadata.SoftwareList.Tag), + nameof(Data.Models.Metadata.SoftwareList.Name), + nameof(Data.Models.Metadata.SoftwareList.Status), ])); } @@ -1056,7 +1055,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.RamOption.NameKey, + nameof(Data.Models.Metadata.RamOption.Name), ])); } @@ -1070,16 +1069,16 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new Logiqx(null, false); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Archive, - ItemType.BiosSet, - ItemType.DeviceRef, - ItemType.Disk, - ItemType.Driver, - ItemType.Media, - ItemType.Release, - ItemType.Rom, - ItemType.Sample, - ItemType.SoftwareList, + Data.Models.Metadata.ItemType.Archive, + Data.Models.Metadata.ItemType.BiosSet, + Data.Models.Metadata.ItemType.DeviceRef, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Driver, + Data.Models.Metadata.ItemType.Media, + Data.Models.Metadata.ItemType.Release, + Data.Models.Metadata.ItemType.Rom, + Data.Models.Metadata.ItemType.Sample, + Data.Models.Metadata.ItemType.SoftwareList, ])); } @@ -1093,8 +1092,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Release.NameKey, - Data.Models.Metadata.Release.RegionKey, + nameof(Data.Models.Metadata.Release.Name), + nameof(Data.Models.Metadata.Release.Region), ])); } @@ -1108,8 +1107,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.BiosSet.NameKey, - Data.Models.Metadata.BiosSet.DescriptionKey, + nameof(Data.Models.Metadata.BiosSet.Name), + nameof(Data.Models.Metadata.BiosSet.Description), ])); } @@ -1123,9 +1122,9 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.SizeKey, - Data.Models.Metadata.Rom.SHA1Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.Size), + nameof(Data.Models.Metadata.Rom.SHA1), ])); } @@ -1139,8 +1138,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Disk.NameKey, - Data.Models.Metadata.Disk.SHA1Key, + nameof(Data.Models.Metadata.Disk.Name), + nameof(Data.Models.Metadata.Disk.SHA1), ])); } @@ -1154,8 +1153,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Media.NameKey, - Data.Models.Metadata.Media.SHA1Key, + nameof(Data.Models.Metadata.Media.Name), + nameof(Data.Models.Metadata.Media.SHA1), ])); } @@ -1169,7 +1168,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.DeviceRef.NameKey, + nameof(Data.Models.Metadata.DeviceRef.Name), ])); } @@ -1183,7 +1182,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Sample.NameKey, + nameof(Data.Models.Metadata.Sample.Name), ])); } @@ -1197,7 +1196,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Archive.NameKey, + nameof(Data.Models.Metadata.Archive.Name), ])); } @@ -1211,10 +1210,10 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Driver.StatusKey, - Data.Models.Metadata.Driver.EmulationKey, - Data.Models.Metadata.Driver.CocktailKey, - Data.Models.Metadata.Driver.SaveStateKey, + nameof(Data.Models.Metadata.Driver.Status), + nameof(Data.Models.Metadata.Driver.Emulation), + nameof(Data.Models.Metadata.Driver.Cocktail), + nameof(Data.Models.Metadata.Driver.SaveState), ])); } @@ -1228,9 +1227,9 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.SoftwareList.TagKey, - Data.Models.Metadata.SoftwareList.NameKey, - Data.Models.Metadata.SoftwareList.StatusKey, + nameof(Data.Models.Metadata.SoftwareList.Tag), + nameof(Data.Models.Metadata.SoftwareList.Name), + nameof(Data.Models.Metadata.SoftwareList.Status), ])); } @@ -1263,7 +1262,7 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new OfflineList(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -1277,8 +1276,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.SizeKey, - Data.Models.Metadata.Rom.CRCKey, + nameof(Data.Models.Metadata.Rom.Size), + nameof(Data.Models.Metadata.Rom.CRC32), ])); } @@ -1292,7 +1291,7 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new OpenMSX(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -1306,8 +1305,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.SHA1Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.SHA1), ])); } @@ -1321,7 +1320,7 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new RomCenter(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -1335,9 +1334,9 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.CRCKey, - Data.Models.Metadata.Rom.SizeKey, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.CRC32), + nameof(Data.Models.Metadata.Rom.Size), ])); } @@ -1375,9 +1374,9 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new CommaSeparatedValue(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Disk, - ItemType.Media, - ItemType.Rom, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Media, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -1391,8 +1390,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Disk.NameKey, - Data.Models.Metadata.Disk.SHA1Key, + nameof(Data.Models.Metadata.Disk.Name), + nameof(Data.Models.Metadata.Disk.SHA1), ])); } @@ -1406,8 +1405,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Media.NameKey, - Data.Models.Metadata.Media.SHA1Key, + nameof(Data.Models.Metadata.Media.Name), + nameof(Data.Models.Metadata.Media.SHA1), ])); } @@ -1421,9 +1420,9 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.SizeKey, - Data.Models.Metadata.Rom.SHA1Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.Size), + nameof(Data.Models.Metadata.Rom.SHA1), ])); } @@ -1433,9 +1432,9 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new SemicolonSeparatedValue(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Disk, - ItemType.Media, - ItemType.Rom, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Media, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -1449,8 +1448,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Disk.NameKey, - Data.Models.Metadata.Disk.SHA1Key, + nameof(Data.Models.Metadata.Disk.Name), + nameof(Data.Models.Metadata.Disk.SHA1), ])); } @@ -1464,8 +1463,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Media.NameKey, - Data.Models.Metadata.Media.SHA1Key, + nameof(Data.Models.Metadata.Media.Name), + nameof(Data.Models.Metadata.Media.SHA1), ])); } @@ -1479,9 +1478,9 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.SizeKey, - Data.Models.Metadata.Rom.SHA1Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.Size), + nameof(Data.Models.Metadata.Rom.SHA1), ])); } @@ -1491,9 +1490,9 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new TabSeparatedValue(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.Disk, - ItemType.Media, - ItemType.Rom, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Media, + Data.Models.Metadata.ItemType.Rom, ])); } @@ -1507,8 +1506,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Disk.NameKey, - Data.Models.Metadata.Disk.SHA1Key, + nameof(Data.Models.Metadata.Disk.Name), + nameof(Data.Models.Metadata.Disk.SHA1), ])); } @@ -1522,8 +1521,8 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Media.NameKey, - Data.Models.Metadata.Media.SHA1Key, + nameof(Data.Models.Metadata.Media.Name), + nameof(Data.Models.Metadata.Media.SHA1), ])); } @@ -1537,9 +1536,9 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Rom.NameKey, - Data.Models.Metadata.Rom.SizeKey, - Data.Models.Metadata.Rom.SHA1Key, + nameof(Data.Models.Metadata.Rom.Name), + nameof(Data.Models.Metadata.Rom.Size), + nameof(Data.Models.Metadata.Rom.SHA1), ])); } @@ -1553,12 +1552,12 @@ namespace SabreTools.Metadata.DatFiles.Test var datFile = new Formats.SoftwareList(null); var actual = datFile.SupportedTypes; Assert.True(actual.SequenceEqual([ - ItemType.DipSwitch, - ItemType.Disk, - ItemType.Info, - ItemType.PartFeature, - ItemType.Rom, - ItemType.SharedFeat, + Data.Models.Metadata.ItemType.DipSwitch, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Info, + Data.Models.Metadata.ItemType.PartFeature, + Data.Models.Metadata.ItemType.Rom, + Data.Models.Metadata.ItemType.SharedFeat, ])); } @@ -1572,11 +1571,11 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Part.NameKey, - Data.Models.Metadata.Part.InterfaceKey, - Data.Models.Metadata.DipSwitch.NameKey, - Data.Models.Metadata.DipSwitch.TagKey, - Data.Models.Metadata.DipSwitch.MaskKey, + nameof(Data.Models.Metadata.Part.Name), + nameof(Data.Models.Metadata.Part.Interface), + nameof(Data.Models.Metadata.DipSwitch.Name), + nameof(Data.Models.Metadata.DipSwitch.Tag), + nameof(Data.Models.Metadata.DipSwitch.Mask), ])); } @@ -1590,10 +1589,10 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Part.NameKey, - Data.Models.Metadata.Part.InterfaceKey, - Data.Models.Metadata.DiskArea.NameKey, - Data.Models.Metadata.Disk.NameKey, + nameof(Data.Models.Metadata.Part.Name), + nameof(Data.Models.Metadata.Part.Interface), + nameof(Data.Models.Metadata.DiskArea.Name), + nameof(Data.Models.Metadata.Disk.Name), ])); } @@ -1607,7 +1606,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Info.NameKey, + nameof(Data.Models.Metadata.Info.Name), ])); } @@ -1621,10 +1620,10 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.Part.NameKey, - Data.Models.Metadata.Part.InterfaceKey, - Data.Models.Metadata.DataArea.NameKey, - Data.Models.Metadata.DataArea.SizeKey, + nameof(Data.Models.Metadata.Part.Name), + nameof(Data.Models.Metadata.Part.Interface), + nameof(Data.Models.Metadata.DataArea.Name), + nameof(Data.Models.Metadata.DataArea.Size), ])); } @@ -1638,7 +1637,7 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.NotNull(actual); Assert.True(actual.SequenceEqual([ - Data.Models.Metadata.SharedFeat.NameKey, + nameof(Data.Models.Metadata.SharedFeat.Name), ])); } diff --git a/SabreTools.Metadata.DatFiles.Test/ItemDictionaryDBTests.cs b/SabreTools.Metadata.DatFiles.Test/ItemDictionaryDBTests.cs index 45b3a936..eca25387 100644 --- a/SabreTools.Metadata.DatFiles.Test/ItemDictionaryDBTests.cs +++ b/SabreTools.Metadata.DatFiles.Test/ItemDictionaryDBTests.cs @@ -16,9 +16,11 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem disk = new Disk(); - disk.SetName("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); @@ -26,8 +28,9 @@ namespace SabreTools.Metadata.DatFiles.Test _ = dict.AddItem(disk, machineIndex, sourceIndex, statsOnly: false); DatItem actual = Assert.Single(dict.GetItemsForBucket("default")).Value; - Assert.True(actual is Disk); - Assert.Equal("none", actual.ReadString(Data.Models.Metadata.Disk.StatusKey)); + Disk? actualDisk = actual as Disk; + Assert.NotNull(actualDisk); + Assert.Equal(Data.Models.Metadata.ItemStatus.None, actualDisk.Status); } [Fact] @@ -36,8 +39,7 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem disk = new Disk(); - disk.SetName("item"); + DatItem disk = new Disk { Name = "item" }; var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); @@ -45,8 +47,9 @@ namespace SabreTools.Metadata.DatFiles.Test _ = dict.AddItem(disk, machineIndex, sourceIndex, statsOnly: false); DatItem actual = Assert.Single(dict.GetItemsForBucket("default")).Value; - Assert.True(actual is Disk); - Assert.Equal("nodump", actual.ReadString(Data.Models.Metadata.Disk.StatusKey)); + Disk? actualDisk = actual as Disk; + Assert.NotNull(actualDisk); + Assert.Equal(Data.Models.Metadata.ItemStatus.Nodump, actualDisk.Status); } [Fact] @@ -55,9 +58,7 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - var file = new File(); - file.SetName("item"); - file.SHA1 = "deadbeef"; + var file = new File { SHA1 = "deadbeef" }; var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); @@ -76,7 +77,6 @@ namespace SabreTools.Metadata.DatFiles.Test Machine machine = new Machine(); DatItem file = new File(); - file.SetName("item"); var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); @@ -94,9 +94,11 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem media = new Media(); - media.SetName("item"); - media.Write(Data.Models.Metadata.Media.SHA1Key, "deadbeef"); + DatItem media = new Media + { + SHA1 = "deadbeef", + Name = "item" + }; var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); @@ -114,8 +116,10 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem media = new Media(); - media.SetName("item"); + DatItem media = new Media + { + Name = "item" + }; var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); @@ -133,10 +137,12 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem rom = new Rom(); - rom.SetName("item"); - rom.Write(Data.Models.Metadata.Rom.SizeKey, 12345); - rom.Write(Data.Models.Metadata.Rom.SHA1Key, "deadbeef"); + DatItem rom = new Rom + { + Name = "item", + Size = 12345, + SHA1 = "deadbeef" + }; var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); @@ -144,10 +150,11 @@ namespace SabreTools.Metadata.DatFiles.Test _ = dict.AddItem(rom, machineIndex, sourceIndex, statsOnly: false); DatItem actual = Assert.Single(dict.GetItemsForBucket("default")).Value; - Assert.True(actual is Rom); - Assert.Equal(12345, actual.ReadLong(Data.Models.Metadata.Rom.SizeKey)); - Assert.Equal("deadbeef", actual.ReadString(Data.Models.Metadata.Rom.SHA1Key)); - Assert.Equal("none", actual.ReadString(Data.Models.Metadata.Rom.StatusKey)); + Rom? actualRom = actual as Rom; + Assert.NotNull(actualRom); + Assert.Equal(12345, actualRom.Size); + Assert.Equal("deadbeef", actualRom.SHA1); + Assert.Equal(Data.Models.Metadata.ItemStatus.None, actualRom.Status); } [Fact] @@ -156,9 +163,11 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem rom = new Rom(); - rom.SetName("item"); - rom.Write(Data.Models.Metadata.Rom.SizeKey, 12345); + DatItem rom = new Rom() + { + Name = "item", + Size = 12345, + }; var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); @@ -166,10 +175,11 @@ namespace SabreTools.Metadata.DatFiles.Test _ = dict.AddItem(rom, machineIndex, sourceIndex, statsOnly: false); DatItem actual = Assert.Single(dict.GetItemsForBucket("default")).Value; - Assert.True(actual is Rom); - Assert.Equal(12345, actual.ReadLong(Data.Models.Metadata.Rom.SizeKey)); - Assert.Null(actual.ReadString(Data.Models.Metadata.Rom.SHA1Key)); - Assert.Equal("nodump", actual.ReadString(Data.Models.Metadata.Rom.StatusKey)); + Rom? actualRom = actual as Rom; + Assert.NotNull(actualRom); + Assert.Equal(12345, actualRom.Size); + Assert.Null(actualRom.SHA1); + Assert.Equal(Data.Models.Metadata.ItemStatus.Nodump, actualRom.Status); } [Fact] @@ -178,9 +188,11 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem rom = new Rom(); - rom.SetName("item"); - rom.Write(Data.Models.Metadata.Rom.SHA1Key, "deadbeef"); + DatItem rom = new Rom + { + Name = "item", + SHA1 = "deadbeef" + }; var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); @@ -188,10 +200,11 @@ namespace SabreTools.Metadata.DatFiles.Test _ = dict.AddItem(rom, machineIndex, sourceIndex, statsOnly: false); DatItem actual = Assert.Single(dict.GetItemsForBucket("default")).Value; - Assert.True(actual is Rom); - Assert.Null(actual.ReadLong(Data.Models.Metadata.Rom.SizeKey)); - Assert.Equal("deadbeef", actual.ReadString(Data.Models.Metadata.Rom.SHA1Key)); - Assert.Equal("none", actual.ReadString(Data.Models.Metadata.Rom.StatusKey)); + Rom? actualRom = actual as Rom; + Assert.NotNull(actualRom); + Assert.Null(actualRom.Size); + Assert.Equal("deadbeef", actualRom.SHA1); + Assert.Equal(Data.Models.Metadata.ItemStatus.None, actualRom.Status); } [Fact] @@ -200,8 +213,7 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem rom = new Rom(); - rom.SetName("item"); + DatItem rom = new Rom { Name = "item" }; var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); @@ -209,10 +221,11 @@ namespace SabreTools.Metadata.DatFiles.Test _ = dict.AddItem(rom, machineIndex, sourceIndex, statsOnly: false); DatItem actual = Assert.Single(dict.GetItemsForBucket("default")).Value; - Assert.True(actual is Rom); - Assert.Equal(0, actual.ReadLong(Data.Models.Metadata.Rom.SizeKey)); - Assert.Equal(HashType.SHA1.ZeroString, actual.ReadString(Data.Models.Metadata.Rom.SHA1Key)); - Assert.Equal("none", actual.ReadString(Data.Models.Metadata.Rom.StatusKey)); + Rom? actualRom = actual as Rom; + Assert.NotNull(actualRom); + Assert.Equal(0, actualRom.Size); + Assert.Equal(HashType.SHA1.ZeroString, actualRom.SHA1); + Assert.Equal(Data.Models.Metadata.ItemStatus.None, actualRom.Status); } [Fact] @@ -221,8 +234,7 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem item = new Rom(); - item.SetName("item"); + DatItem item = new Rom { Name = "item" }; var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); @@ -238,8 +250,7 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem item = new Rom(); - item.SetName("item"); + DatItem item = new Rom { Name = "item" }; var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); @@ -289,21 +300,24 @@ namespace SabreTools.Metadata.DatFiles.Test // Setup the items Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("game-1"); + Machine machine = new Machine { Name = "game-1" }; - DatItem rom1 = new Rom(); - rom1.SetName("rom-1"); - rom1.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - rom1.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom1.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom1 = new Rom + { + Name = "rom-1", + Size = 1024, + CRC32 = "DEADBEEF", + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; - DatItem rom2 = new Rom(); - rom2.SetName("rom-2"); - rom2.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - rom2.Write(DatItem.RemoveKey, true); - rom2.Write(Data.Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); - rom2.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom2 = new Rom + { + Name = "rom-2", + Size = 1024, + CRC32 = "DEADBEEF", + RemoveFlag = true, + SHA1 = "000000e948edcb4f7704b8af85a77a3339ecce44" + }; // Setup the dictionary var dict = new ItemDictionaryDB(); @@ -328,8 +342,7 @@ namespace SabreTools.Metadata.DatFiles.Test { Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("machine"); + Machine machine = new Machine { Name = "machine" }; DatItem item = new Rom(); @@ -348,8 +361,7 @@ namespace SabreTools.Metadata.DatFiles.Test { Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("machine"); + Machine machine = new Machine { Name = "machine" }; DatItem item = new Rom(); @@ -368,11 +380,9 @@ namespace SabreTools.Metadata.DatFiles.Test { Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("machine"); + Machine machine = new Machine { Name = "machine" }; - DatItem item = new Rom(); - item.Write(DatItem.RemoveKey, true); + DatItem item = new Rom { RemoveFlag = true }; var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); @@ -389,11 +399,9 @@ namespace SabreTools.Metadata.DatFiles.Test { Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("machine"); + Machine machine = new Machine { Name = "machine" }; - DatItem item = new Rom(); - item.Write(DatItem.RemoveKey, true); + DatItem item = new Rom { RemoveFlag = true }; var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); @@ -410,8 +418,7 @@ namespace SabreTools.Metadata.DatFiles.Test { Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("machine"); + Machine machine = new Machine { Name = "machine" }; DatItem item = new Rom(); @@ -508,11 +515,9 @@ namespace SabreTools.Metadata.DatFiles.Test { Source source = new Source(0, source: null); - Machine origMachine = new Machine(); - origMachine.Write(Data.Models.Metadata.Machine.NameKey, "original"); + Machine origMachine = new Machine { Name = "original" }; - Machine newMachine = new Machine(); - newMachine.Write(Data.Models.Metadata.Machine.NameKey, "new"); + Machine newMachine = new Machine { Name = "new" }; DatItem datItem = new Rom(); @@ -527,7 +532,7 @@ namespace SabreTools.Metadata.DatFiles.Test var actual = dict.GetMachineForItem(itemIndex); Assert.Equal(1, actual.Key); Assert.NotNull(actual.Value); - Assert.Equal("new", actual.Value.GetName()); + Assert.Equal("new", actual.Value.Name); } #endregion @@ -539,14 +544,15 @@ namespace SabreTools.Metadata.DatFiles.Test { Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("game-1"); + Machine machine = new Machine { Name = "game-1" }; - DatItem datItem = new Rom(); - datItem.SetName("rom-1"); - datItem.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - datItem.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem datItem = new Rom + { + Name = "rom-1", + Size = 1024, + CRC32 = "DEADBEEF", + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); @@ -567,14 +573,15 @@ namespace SabreTools.Metadata.DatFiles.Test { Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("game-1"); + Machine machine = new Machine { Name = "game-1" }; - DatItem datItem = new Rom(); - datItem.SetName("rom-1"); - datItem.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - datItem.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem datItem = new Rom + { + Name = "rom-1", + Size = 1024, + CRC32 = "DEADBEEF", + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); @@ -609,42 +616,48 @@ namespace SabreTools.Metadata.DatFiles.Test [Theory] [InlineData(ItemKey.NULL, 2)] [InlineData(ItemKey.Machine, 2)] - [InlineData(ItemKey.CRC, 1)] + [InlineData(ItemKey.CRC32, 1)] [InlineData(ItemKey.SHA1, 4)] public void BucketByTest(ItemKey itemKey, int expected) { // Setup the items Source source = new Source(0, source: null); - Machine machine1 = new Machine(); - machine1.SetName("game-1"); + Machine machine1 = new Machine { Name = "game-1" }; - Machine machine2 = new Machine(); - machine2.SetName("game-2"); + Machine machine2 = new Machine { Name = "game-2" }; - DatItem rom1 = new Rom(); - rom1.SetName("rom-1"); - rom1.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - rom1.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom1.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom1 = new Rom + { + Name = "rom-1", + Size = 1024, + CRC32 = "DEADBEEF", + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; - DatItem rom2 = new Rom(); - rom2.SetName("rom-2"); - rom2.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - rom2.Write(Data.Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); - rom2.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom2 = new Rom + { + Name = "rom-2", + Size = 1024, + CRC32 = "DEADBEEF", + SHA1 = "000000e948edcb4f7704b8af85a77a3339ecce44" + }; - DatItem rom3 = new Rom(); - rom3.SetName("rom-3"); - rom3.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - rom3.Write(Data.Models.Metadata.Rom.SHA1Key, "00000ea4014ce66679e7e17d56ac510f67e39e26"); - rom3.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom3 = new Rom + { + Name = "rom-3", + Size = 1024, + CRC32 = "DEADBEEF", + SHA1 = "00000ea4014ce66679e7e17d56ac510f67e39e26" + }; - DatItem rom4 = new Rom(); - rom4.SetName("rom-4"); - rom4.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - rom4.Write(Data.Models.Metadata.Rom.SHA1Key, "00000151d437442e74e5134023fab8bf694a2487"); - rom4.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom4 = new Rom + { + Name = "rom-4", + Size = 1024, + CRC32 = "DEADBEEF", + SHA1 = "00000151d437442e74e5134023fab8bf694a2487" + }; // Setup the dictionary var dict = new ItemDictionaryDB(); @@ -670,18 +683,21 @@ namespace SabreTools.Metadata.DatFiles.Test // Setup the items Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("game-1"); + Machine machine = new Machine { Name = "game-1" }; - DatItem rom1 = new Rom(); - rom1.SetName("rom-1"); - rom1.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom1.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom1 = new Rom + { + Name = "rom-1", + Size = 1024, + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; - DatItem rom2 = new Rom(); - rom2.SetName("rom-2"); - rom2.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom2.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom2 = new Rom + { + Name = "rom-2", + Size = 1024, + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; // Setup the dictionary var dict = new ItemDictionaryDB(); @@ -737,23 +753,25 @@ namespace SabreTools.Metadata.DatFiles.Test Source? sourceB = new Source(1); long sourceBIndex = dict.AddSource(sourceB); - Machine? machineA = new Machine(); - machineA.SetName("name-same"); + Machine? machineA = new Machine { Name = "name-same" }; long machineAIndex = dict.AddMachine(machineA); - Machine? machineB = new Machine(); - machineB.SetName("name-same"); + Machine? machineB = new Machine { Name = "name-same" }; long machineBIndex = dict.AddMachine(machineB); - var romA = new Rom(); - romA.SetName("same-name"); - romA.Write(Data.Models.Metadata.Rom.CRCKey, "BEEFDEAD"); + var romA = new Rom + { + Name = "same-name", + CRC32 = "BEEFDEAD" + }; long romAIndex = dict.AddItem(romA, machineAIndex, sourceAIndex); KeyValuePair? romAPair = new KeyValuePair(romAIndex, romA); - var romB = new Rom(); - romB.SetName("same-name"); - romB.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); + var romB = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF" + }; long romBIndex = dict.AddItem(romB, machineBIndex, sourceBIndex); KeyValuePair? romBPair = new KeyValuePair(romBIndex, romB); @@ -771,23 +789,25 @@ namespace SabreTools.Metadata.DatFiles.Test Source? sourceB = new Source(1); long sourceBIndex = dict.AddSource(sourceB); - Machine? machineA = new Machine(); - machineA.SetName("name-same"); + Machine? machineA = new Machine { Name = "name-same" }; long machineAIndex = dict.AddMachine(machineA); - Machine? machineB = new Machine(); - machineB.SetName("name-same"); + Machine? machineB = new Machine { Name = "name-same" }; long machineBIndex = dict.AddMachine(machineB); - var romA = new Rom(); - romA.SetName("same-name"); - romA.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); + var romA = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF" + }; long romAIndex = dict.AddItem(romA, machineAIndex, sourceAIndex); KeyValuePair? romAPair = new KeyValuePair(romAIndex, romA); - var romB = new Rom(); - romB.SetName("same-name"); - romB.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); + var romB = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF" + }; long romBIndex = dict.AddItem(romB, machineBIndex, sourceBIndex); KeyValuePair? romBPair = new KeyValuePair(romBIndex, romB); @@ -805,23 +825,25 @@ namespace SabreTools.Metadata.DatFiles.Test Source? sourceB = new Source(1); long sourceBIndex = dict.AddSource(sourceB); - Machine? machineA = new Machine(); - machineA.SetName("name-same"); + Machine? machineA = new Machine { Name = "name-same" }; long machineAIndex = dict.AddMachine(machineA); - Machine? machineB = new Machine(); - machineB.SetName("not-name-same"); + Machine? machineB = new Machine { Name = "not-name-same" }; long machineBIndex = dict.AddMachine(machineB); - var romA = new Rom(); - romA.SetName("same-name"); - romA.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); + var romA = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF" + }; long romAIndex = dict.AddItem(romA, machineAIndex, sourceAIndex); KeyValuePair? romAPair = new KeyValuePair(romAIndex, romA); - var romB = new Rom(); - romB.SetName("same-name"); - romB.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); + var romB = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF" + }; long romBIndex = dict.AddItem(romB, machineBIndex, sourceBIndex); KeyValuePair? romBPair = new KeyValuePair(romBIndex, romB); @@ -839,23 +861,25 @@ namespace SabreTools.Metadata.DatFiles.Test Source? sourceB = new Source(0); long sourceBIndex = dict.AddSource(sourceB); - Machine? machineA = new Machine(); - machineA.SetName("name-same"); + Machine? machineA = new Machine { Name = "name-same" }; long machineAIndex = dict.AddMachine(machineA); - Machine? machineB = new Machine(); - machineB.SetName("name-same"); + Machine? machineB = new Machine { Name = "name-same" }; long machineBIndex = dict.AddMachine(machineB); - var romA = new Rom(); - romA.SetName("same-name"); - romA.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); + var romA = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF" + }; long romAIndex = dict.AddItem(romA, machineAIndex, sourceAIndex); KeyValuePair? romAPair = new KeyValuePair(romAIndex, romA); - var romB = new Rom(); - romB.SetName("same-name"); - romB.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); + var romB = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF" + }; long romBIndex = dict.AddItem(romB, machineBIndex, sourceBIndex); KeyValuePair? romBPair = new KeyValuePair(romBIndex, romB); @@ -873,23 +897,25 @@ namespace SabreTools.Metadata.DatFiles.Test Source? sourceB = new Source(0); long sourceBIndex = dict.AddSource(sourceB); - Machine? machineA = new Machine(); - machineA.SetName("name-same"); + Machine? machineA = new Machine { Name = "name-same" }; long machineAIndex = dict.AddMachine(machineA); - Machine? machineB = new Machine(); - machineB.SetName("not-name-same"); + Machine? machineB = new Machine { Name = "not-name-same" }; long machineBIndex = dict.AddMachine(machineB); - var romA = new Rom(); - romA.SetName("same-name"); - romA.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); + var romA = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF" + }; long romAIndex = dict.AddItem(romA, machineAIndex, sourceAIndex); KeyValuePair? romAPair = new KeyValuePair(romAIndex, romA); - var romB = new Rom(); - romB.SetName("same-name"); - romB.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); + var romB = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF" + }; long romBIndex = dict.AddItem(romB, machineBIndex, sourceBIndex); KeyValuePair? romBPair = new KeyValuePair(romBIndex, romB); @@ -909,18 +935,21 @@ namespace SabreTools.Metadata.DatFiles.Test // Setup the items Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("game-1"); + Machine machine = new Machine { Name = "game-1" }; - DatItem rom1 = new Rom(); - rom1.SetName("rom-1"); - rom1.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom1.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom1 = new Rom + { + Name = "rom-1", + Size = 1024, + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; - DatItem rom2 = new Rom(); - rom2.SetName("rom-2"); - rom2.Write(Data.Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); - rom2.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom2 = new Rom + { + Name = "rom-2", + Size = 1024, + SHA1 = "000000e948edcb4f7704b8af85a77a3339ecce44" + }; // Setup the dictionary var dict = new ItemDictionaryDB(); @@ -930,10 +959,12 @@ namespace SabreTools.Metadata.DatFiles.Test dict.AddItem(rom2, machineIndex, sourceIndex, statsOnly: false); // Setup the test item - DatItem rom = new Rom(); - rom.SetName("rom-1"); - rom.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom.Write(Data.Models.Metadata.Rom.SizeKey, hasDuplicate ? "1024" : "2048"); + DatItem rom = new Rom + { + Name = "rom-1", + Size = hasDuplicate ? 1024 : 2048, + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; var actual = dict.GetDuplicates(new KeyValuePair(-1, rom)); Assert.Equal(expected, actual.Count); @@ -951,18 +982,21 @@ namespace SabreTools.Metadata.DatFiles.Test // Setup the items Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("game-1"); + Machine machine = new Machine { Name = "game-1" }; - DatItem rom1 = new Rom(); - rom1.SetName("rom-1"); - rom1.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom1.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom1 = new Rom + { + Name = "rom-1", + Size = 1024, + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; - DatItem rom2 = new Rom(); - rom2.SetName("rom-2"); - rom2.Write(Data.Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); - rom2.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom2 = new Rom + { + Name = "rom-2", + Size = 1024, + SHA1 = "000000e948edcb4f7704b8af85a77a3339ecce44" + }; // Setup the dictionary var dict = new ItemDictionaryDB(); @@ -972,10 +1006,12 @@ namespace SabreTools.Metadata.DatFiles.Test dict.AddItem(rom2, machineIndex, sourceIndex, statsOnly: false); // Setup the test item - DatItem rom = new Rom(); - rom.SetName("rom-1"); - rom.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom.Write(Data.Models.Metadata.Rom.SizeKey, expected ? "1024" : "2048"); + DatItem rom = new Rom + { + Name = "rom-1", + Size = expected ? 1024 : 2048, + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; bool actual = dict.HasDuplicates(new KeyValuePair(-1, rom)); Assert.Equal(expected, actual); @@ -990,13 +1026,14 @@ namespace SabreTools.Metadata.DatFiles.Test { Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("machine"); + Machine machine = new Machine { Name = "machine" }; - DatItem item = new Rom(); - item.SetName("rom"); - item.Write(Data.Models.Metadata.Rom.SizeKey, 12345); - item.Write(Data.Models.Metadata.Rom.CRCKey, "deadbeef"); + var item = new Rom + { + Name = "rom", + Size = 12345, + CRC32 = "deadbeef" + }; var dict = new ItemDictionaryDB(); long sourceIndex = dict.AddSource(source); @@ -1004,17 +1041,17 @@ namespace SabreTools.Metadata.DatFiles.Test _ = dict.AddItem(item, machineIndex, sourceIndex, statsOnly: false); Assert.Equal(1, dict.DatStatistics.TotalCount); - Assert.Equal(1, dict.DatStatistics.GetItemCount(ItemType.Rom)); + Assert.Equal(1, dict.DatStatistics.GetItemCount(Data.Models.Metadata.ItemType.Rom)); Assert.Equal(12345, dict.DatStatistics.TotalSize); Assert.Equal(1, dict.DatStatistics.GetHashCount(HashType.CRC32)); Assert.Equal(0, dict.DatStatistics.GetHashCount(HashType.MD5)); - item.Write(Data.Models.Metadata.Rom.MD5Key, "deadbeef"); + item.MD5 = "deadbeef"; dict.RecalculateStats(); Assert.Equal(1, dict.DatStatistics.TotalCount); - Assert.Equal(1, dict.DatStatistics.GetItemCount(ItemType.Rom)); + Assert.Equal(1, dict.DatStatistics.GetItemCount(Data.Models.Metadata.ItemType.Rom)); Assert.Equal(12345, dict.DatStatistics.TotalSize); Assert.Equal(1, dict.DatStatistics.GetHashCount(HashType.CRC32)); Assert.Equal(1, dict.DatStatistics.GetHashCount(HashType.MD5)); diff --git a/SabreTools.Metadata.DatFiles.Test/ItemDictionaryTests.cs b/SabreTools.Metadata.DatFiles.Test/ItemDictionaryTests.cs index 6c78640f..d256b23a 100644 --- a/SabreTools.Metadata.DatFiles.Test/ItemDictionaryTests.cs +++ b/SabreTools.Metadata.DatFiles.Test/ItemDictionaryTests.cs @@ -16,18 +16,21 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem disk = new Disk(); - disk.SetName("item"); - disk.Write(Data.Models.Metadata.Disk.SHA1Key, "deadbeef"); - disk.Write(DatItem.SourceKey, source); - disk.Write(DatItem.MachineKey, machine); + DatItem disk = new Disk + { + Name = "item", + SHA1 = "deadbeef", + Source = source, + Machine = machine, + }; var dict = new ItemDictionary(); _ = dict.AddItem(disk, statsOnly: false); DatItem actual = Assert.Single(dict.GetItemsForBucket("default")); - Assert.True(actual is Disk); - Assert.Equal("none", actual.ReadString(Data.Models.Metadata.Disk.StatusKey)); + Disk? actualDisk = actual as Disk; + Assert.NotNull(actualDisk); + Assert.Equal(Data.Models.Metadata.ItemStatus.None, actualDisk.Status); } [Fact] @@ -36,17 +39,20 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem disk = new Disk(); - disk.SetName("item"); - disk.Write(DatItem.SourceKey, source); - disk.Write(DatItem.MachineKey, machine); + DatItem disk = new Disk + { + Name = "item", + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(disk, statsOnly: false); DatItem actual = Assert.Single(dict.GetItemsForBucket("default")); - Assert.True(actual is Disk); - Assert.Equal("nodump", actual.ReadString(Data.Models.Metadata.Disk.StatusKey)); + Disk? actualDisk = actual as Disk; + Assert.NotNull(actualDisk); + Assert.Equal(Data.Models.Metadata.ItemStatus.Nodump, actualDisk.Status); } [Fact] @@ -55,18 +61,19 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - var file = new File(); - file.SetName("item"); - file.SHA1 = "deadbeef"; - file.Write(DatItem.SourceKey, source); - file.Write(DatItem.MachineKey, machine); + var file = new File + { + SHA1 = "deadbeef", + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(file, statsOnly: false); DatItem actual = Assert.Single(dict.GetItemsForBucket("default")); Assert.True(actual is File); - //Assert.Equal("none", actual.GetStringFieldValue(File.StatusKey)); + //Assert.Equal(ItemStatus.None, actual.GetStringFieldValue(File.StatusKey)); } [Fact] @@ -75,17 +82,18 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem file = new File(); - file.SetName("item"); - file.Write(DatItem.SourceKey, source); - file.Write(DatItem.MachineKey, machine); + DatItem file = new File + { + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(file, statsOnly: false); DatItem actual = Assert.Single(dict.GetItemsForBucket("default")); Assert.True(actual is File); - //Assert.Equal("nodump", actual.GetStringFieldValue(File.StatusKey)); + //Assert.Equal(Data.Models.Metadata.ItemStatus.Nodump, actual.GetStringFieldValue(File.StatusKey)); } [Fact] @@ -94,18 +102,20 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem media = new Media(); - media.SetName("item"); - media.Write(Data.Models.Metadata.Media.SHA1Key, "deadbeef"); - media.Write(DatItem.SourceKey, source); - media.Write(DatItem.MachineKey, machine); + DatItem media = new Media + { + Name = "item", + SHA1 = "deadbeef", + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(media, statsOnly: false); DatItem actual = Assert.Single(dict.GetItemsForBucket("default")); Assert.True(actual is Media); - //Assert.Equal("none", actual.GetStringFieldValue(Data.Models.Metadata.Media.StatusKey)); + //Assert.Equal(ItemStatus.None, actual.GetStringFieldValue(Data.Models.Metadata.Media.StatusKey)); } [Fact] @@ -114,17 +124,19 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem media = new Media(); - media.SetName("item"); - media.Write(DatItem.SourceKey, source); - media.Write(DatItem.MachineKey, machine); + DatItem media = new Media + { + Name = "item", + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(media, statsOnly: false); DatItem actual = Assert.Single(dict.GetItemsForBucket("default")); Assert.True(actual is Media); - //Assert.Equal("nodump", actual.GetStringFieldValue(Data.Models.Metadata.Media.StatusKey)); + //Assert.Equal(Data.Models.Metadata.ItemStatus.Nodump, actual.GetStringFieldValue(Data.Models.Metadata.Media.StatusKey)); } [Fact] @@ -133,21 +145,24 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem rom = new Rom(); - rom.SetName("item"); - rom.Write(Data.Models.Metadata.Rom.SizeKey, 12345); - rom.Write(Data.Models.Metadata.Rom.SHA1Key, "deadbeef"); - rom.Write(DatItem.SourceKey, source); - rom.Write(DatItem.MachineKey, machine); + DatItem rom = new Rom + { + Name = "item", + Size = 12345, + SHA1 = "deadbeef", + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(rom, statsOnly: false); DatItem actual = Assert.Single(dict.GetItemsForBucket("default")); - Assert.True(actual is Rom); - Assert.Equal(12345, actual.ReadLong(Data.Models.Metadata.Rom.SizeKey)); - Assert.Equal("deadbeef", actual.ReadString(Data.Models.Metadata.Rom.SHA1Key)); - Assert.Equal("none", actual.ReadString(Data.Models.Metadata.Rom.StatusKey)); + Rom? actualRom = actual as Rom; + Assert.NotNull(actualRom); + Assert.Equal(12345, actualRom.Size); + Assert.Equal("deadbeef", actualRom.SHA1); + Assert.Equal(Data.Models.Metadata.ItemStatus.None, actualRom.Status); } [Fact] @@ -156,20 +171,23 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem rom = new Rom(); - rom.SetName("item"); - rom.Write(Data.Models.Metadata.Rom.SizeKey, 12345); - rom.Write(DatItem.SourceKey, source); - rom.Write(DatItem.MachineKey, machine); + DatItem rom = new Rom + { + Name = "item", + Size = 12345, + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(rom, statsOnly: false); DatItem actual = Assert.Single(dict.GetItemsForBucket("default")); - Assert.True(actual is Rom); - Assert.Equal(12345, actual.ReadLong(Data.Models.Metadata.Rom.SizeKey)); - Assert.Null(actual.ReadString(Data.Models.Metadata.Rom.SHA1Key)); - Assert.Equal("nodump", actual.ReadString(Data.Models.Metadata.Rom.StatusKey)); + Rom? actualRom = actual as Rom; + Assert.NotNull(actualRom); + Assert.Equal(12345, actualRom.Size); + Assert.Null(actualRom.SHA1); + Assert.Equal(Data.Models.Metadata.ItemStatus.Nodump, actualRom.Status); } [Fact] @@ -178,20 +196,23 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem rom = new Rom(); - rom.SetName("item"); - rom.Write(Data.Models.Metadata.Rom.SHA1Key, "deadbeef"); - rom.Write(DatItem.SourceKey, source); - rom.Write(DatItem.MachineKey, machine); + DatItem rom = new Rom + { + Name = "item", + SHA1 = "deadbeef", + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(rom, statsOnly: false); DatItem actual = Assert.Single(dict.GetItemsForBucket("default")); - Assert.True(actual is Rom); - Assert.Null(actual.ReadLong(Data.Models.Metadata.Rom.SizeKey)); - Assert.Equal("deadbeef", actual.ReadString(Data.Models.Metadata.Rom.SHA1Key)); - Assert.Equal("none", actual.ReadString(Data.Models.Metadata.Rom.StatusKey)); + Rom? actualRom = actual as Rom; + Assert.NotNull(actualRom); + Assert.Null(actualRom.Size); + Assert.Equal("deadbeef", actualRom.SHA1); + Assert.Equal(Data.Models.Metadata.ItemStatus.None, actualRom.Status); } [Fact] @@ -200,19 +221,22 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem rom = new Rom(); - rom.SetName("item"); - rom.Write(DatItem.SourceKey, source); - rom.Write(DatItem.MachineKey, machine); + DatItem rom = new Rom + { + Name = "item", + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(rom, statsOnly: false); DatItem actual = Assert.Single(dict.GetItemsForBucket("default")); - Assert.True(actual is Rom); - Assert.Equal(0, actual.ReadLong(Data.Models.Metadata.Rom.SizeKey)); - Assert.Equal(HashType.SHA1.ZeroString, actual.ReadString(Data.Models.Metadata.Rom.SHA1Key)); - Assert.Equal("none", actual.ReadString(Data.Models.Metadata.Rom.StatusKey)); + Rom? actualRom = actual as Rom; + Assert.NotNull(actualRom); + Assert.Equal(0, actualRom.Size); + Assert.Equal(HashType.SHA1.ZeroString, actualRom.SHA1); + Assert.Equal(Data.Models.Metadata.ItemStatus.None, actualRom.Status); } [Fact] @@ -221,10 +245,12 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem item = new Rom(); - item.SetName("item"); - item.Write(DatItem.SourceKey, source); - item.Write(DatItem.MachineKey, machine); + DatItem item = new Rom + { + Name = "item", + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(item, statsOnly: true); @@ -238,10 +264,12 @@ namespace SabreTools.Metadata.DatFiles.Test Source source = new Source(0, source: null); Machine machine = new Machine(); - DatItem item = new Rom(); - item.SetName("item"); - item.Write(DatItem.SourceKey, source); - item.Write(DatItem.MachineKey, machine); + DatItem item = new Rom + { + Name = "item", + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(item, statsOnly: false); @@ -257,22 +285,25 @@ namespace SabreTools.Metadata.DatFiles.Test public void ClearMarkedTest() { // Setup the items - Machine machine = new Machine(); - machine.SetName("game-1"); + Machine machine = new Machine { Name = "game-1" }; - DatItem rom1 = new Rom(); - rom1.SetName("rom-1"); - rom1.Write(Data.Models.Metadata.Rom.CRCKey, "DEAEEF"); - rom1.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom1.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom1 = new Rom + { + Name = "rom-1", + Size = 1024, + CRC32 = "DEAEEF", + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; rom1.CopyMachineInformation(machine); - DatItem rom2 = new Rom(); - rom2.SetName("rom-2"); - rom2.Write(Data.Models.Metadata.Rom.CRCKey, "DEAEEF"); - rom2.Write(DatItem.RemoveKey, true); - rom2.Write(Data.Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); - rom2.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom2 = new Rom + { + Name = "rom-2", + Size = 1024, + CRC32 = "DEAEEF", + RemoveFlag = true, + SHA1 = "000000e948edcb4f7704b8af85a77a3339ecce44" + }; rom2.CopyMachineInformation(machine); // Setup the dictionary @@ -295,12 +326,13 @@ namespace SabreTools.Metadata.DatFiles.Test { Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("machine"); + Machine machine = new Machine { Name = "machine" }; - DatItem item = new Rom(); - item.Write(DatItem.SourceKey, source); - item.Write(DatItem.MachineKey, machine); + DatItem item = new Rom + { + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(item, statsOnly: false); @@ -315,12 +347,13 @@ namespace SabreTools.Metadata.DatFiles.Test { Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("machine"); + Machine machine = new Machine { Name = "machine" }; - DatItem item = new Rom(); - item.Write(DatItem.SourceKey, source); - item.Write(DatItem.MachineKey, machine); + DatItem item = new Rom + { + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(item, statsOnly: false); @@ -335,13 +368,14 @@ namespace SabreTools.Metadata.DatFiles.Test { Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("machine"); + Machine machine = new Machine { Name = "machine" }; - DatItem item = new Rom(); - item.Write(DatItem.RemoveKey, true); - item.Write(DatItem.SourceKey, source); - item.Write(DatItem.MachineKey, machine); + DatItem item = new Rom + { + RemoveFlag = true, + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(item, statsOnly: false); @@ -356,13 +390,14 @@ namespace SabreTools.Metadata.DatFiles.Test { Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("machine"); + Machine machine = new Machine { Name = "machine" }; - DatItem item = new Rom(); - item.Write(DatItem.RemoveKey, true); - item.Write(DatItem.SourceKey, source); - item.Write(DatItem.MachineKey, machine); + DatItem item = new Rom + { + RemoveFlag = true, + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(item, statsOnly: false); @@ -377,12 +412,13 @@ namespace SabreTools.Metadata.DatFiles.Test { Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("machine"); + Machine machine = new Machine { Name = "machine" }; - DatItem item = new Rom(); - item.Write(DatItem.SourceKey, source); - item.Write(DatItem.MachineKey, machine); + DatItem item = new Rom + { + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(item, statsOnly: false); @@ -399,14 +435,15 @@ namespace SabreTools.Metadata.DatFiles.Test [Fact] public void RemoveBucketTest() { - Machine machine = new Machine(); - machine.SetName("game-1"); + Machine machine = new Machine { Name = "game-1" }; - DatItem datItem = new Rom(); - datItem.SetName("rom-1"); - datItem.Write(Data.Models.Metadata.Rom.CRCKey, "DEAEEF"); - datItem.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - datItem.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem datItem = new Rom + { + Size = 1024, + Name = "rom-1", + CRC32 = "DEAEEF", + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; datItem.CopyMachineInformation(machine); var dict = new ItemDictionary(); @@ -425,14 +462,15 @@ namespace SabreTools.Metadata.DatFiles.Test [Fact] public void RemoveItemTest() { - Machine machine = new Machine(); - machine.SetName("game-1"); + Machine machine = new Machine { Name = "game-1" }; - DatItem datItem = new Rom(); - datItem.SetName("rom-1"); - datItem.Write(Data.Models.Metadata.Rom.CRCKey, "DEAEEF"); - datItem.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - datItem.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem datItem = new Rom + { + Size = 1024, + Name = "rom-1", + CRC32 = "DEAEEF", + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; datItem.CopyMachineInformation(machine); var dict = new ItemDictionary(); @@ -451,43 +489,49 @@ namespace SabreTools.Metadata.DatFiles.Test [Theory] [InlineData(ItemKey.NULL, 2)] [InlineData(ItemKey.Machine, 2)] - [InlineData(ItemKey.CRC, 1)] + [InlineData(ItemKey.CRC32, 1)] [InlineData(ItemKey.SHA1, 4)] public void BucketByTest(ItemKey itemKey, int expected) { // Setup the items - Machine machine1 = new Machine(); - machine1.SetName("game-1"); + Machine machine1 = new Machine { Name = "game-1" }; - Machine machine2 = new Machine(); - machine2.SetName("game-2"); + Machine machine2 = new Machine { Name = "game-2" }; - DatItem rom1 = new Rom(); - rom1.SetName("rom-1"); - rom1.Write(Data.Models.Metadata.Rom.CRCKey, "DEAEEF"); - rom1.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom1.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom1 = new Rom + { + Name = "rom-1", + Size = 1024, + CRC32 = "DEAEEF", + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; rom1.CopyMachineInformation(machine1); - DatItem rom2 = new Rom(); - rom2.SetName("rom-2"); - rom2.Write(Data.Models.Metadata.Rom.CRCKey, "DEAEEF"); - rom2.Write(Data.Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); - rom2.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom2 = new Rom + { + Name = "rom-2", + Size = 1024, + CRC32 = "DEAEEF", + SHA1 = "000000e948edcb4f7704b8af85a77a3339ecce44" + }; rom1.CopyMachineInformation(machine1); - DatItem rom3 = new Rom(); - rom3.SetName("rom-3"); - rom3.Write(Data.Models.Metadata.Rom.CRCKey, "DEAEEF"); - rom3.Write(Data.Models.Metadata.Rom.SHA1Key, "00000ea4014ce66679e7e17d56ac510f67e39e26"); - rom3.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom3 = new Rom + { + Name = "rom-3", + Size = 1024, + CRC32 = "DEAEEF", + SHA1 = "00000ea4014ce66679e7e17d56ac510f67e39e26" + }; rom1.CopyMachineInformation(machine2); - DatItem rom4 = new Rom(); - rom4.SetName("rom-4"); - rom4.Write(Data.Models.Metadata.Rom.CRCKey, "DEAEEF"); - rom4.Write(Data.Models.Metadata.Rom.SHA1Key, "00000151d437442e74e5134023fab8bf694a2487"); - rom4.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom4 = new Rom + { + Name = "rom-4", + Size = 1024, + CRC32 = "DEAEEF", + SHA1 = "00000151d437442e74e5134023fab8bf694a2487" + }; rom1.CopyMachineInformation(machine2); // Setup the dictionary @@ -509,19 +553,22 @@ namespace SabreTools.Metadata.DatFiles.Test public void DeduplicateTest() { // Setup the items - Machine machine = new Machine(); - machine.SetName("game-1"); + Machine machine = new Machine { Name = "game-1" }; - DatItem rom1 = new Rom(); - rom1.SetName("rom-1"); - rom1.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom1.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom1 = new Rom + { + Name = "rom-1", + Size = 1024, + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; rom1.CopyMachineInformation(machine); - DatItem rom2 = new Rom(); - rom2.SetName("rom-2"); - rom2.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom2.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom2 = new Rom + { + Name = "rom-2", + Size = 1024, + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; rom2.CopyMachineInformation(machine); // Setup the dictionary @@ -562,22 +609,24 @@ namespace SabreTools.Metadata.DatFiles.Test { var dict = new ItemDictionary(); - Machine? machineA = new Machine(); - machineA.SetName("name-same"); + Machine? machineA = new Machine { Name = "name-same" }; - Machine? machineB = new Machine(); - machineB.SetName("name-same"); + Machine? machineB = new Machine { Name = "name-same" }; - var romA = new Rom(); - romA.SetName("same-name"); - romA.Write(Data.Models.Metadata.Rom.CRCKey, "BEEFDEAD"); - romA.Write(DatItem.SourceKey, new Source(0)); + var romA = new Rom + { + Name = "same-name", + CRC32 = "BEEFDEAD", + Source = new Source(0) + }; romA.CopyMachineInformation(machineA); - var romB = new Rom(); - romB.SetName("same-name"); - romB.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - romB.Write(DatItem.SourceKey, new Source(1)); + var romB = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF", + Source = new Source(1) + }; romB.CopyMachineInformation(machineB); var actual = dict.GetDuplicateStatus(romA, romB); @@ -589,22 +638,24 @@ namespace SabreTools.Metadata.DatFiles.Test { var dict = new ItemDictionary(); - Machine? machineA = new Machine(); - machineA.SetName("name-same"); + Machine? machineA = new Machine { Name = "name-same" }; - Machine? machineB = new Machine(); - machineB.SetName("name-same"); + Machine? machineB = new Machine { Name = "name-same" }; - var romA = new Rom(); - romA.SetName("same-name"); - romA.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - romA.Write(DatItem.SourceKey, new Source(0)); + var romA = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF", + Source = new Source(0) + }; romA.CopyMachineInformation(machineA); - var romB = new Rom(); - romB.SetName("same-name"); - romB.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - romB.Write(DatItem.SourceKey, new Source(1)); + var romB = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF", + Source = new Source(1) + }; romB.CopyMachineInformation(machineB); var actual = dict.GetDuplicateStatus(romA, romB); @@ -616,22 +667,24 @@ namespace SabreTools.Metadata.DatFiles.Test { var dict = new ItemDictionary(); - Machine? machineA = new Machine(); - machineA.SetName("name-same"); + Machine? machineA = new Machine { Name = "name-same" }; - Machine? machineB = new Machine(); - machineB.SetName("not-name-same"); + Machine? machineB = new Machine { Name = "not-name-same" }; - var romA = new Rom(); - romA.SetName("same-name"); - romA.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - romA.Write(DatItem.SourceKey, new Source(0)); + var romA = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF", + Source = new Source(0) + }; romA.CopyMachineInformation(machineA); - var romB = new Rom(); - romB.SetName("same-name"); - romB.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - romB.Write(DatItem.SourceKey, new Source(1)); + var romB = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF", + Source = new Source(1) + }; romB.CopyMachineInformation(machineB); var actual = dict.GetDuplicateStatus(romA, romB); @@ -643,22 +696,24 @@ namespace SabreTools.Metadata.DatFiles.Test { var dict = new ItemDictionary(); - Machine? machineA = new Machine(); - machineA.SetName("name-same"); + Machine? machineA = new Machine { Name = "name-same" }; - Machine? machineB = new Machine(); - machineB.SetName("name-same"); + Machine? machineB = new Machine { Name = "name-same" }; - var romA = new Rom(); - romA.SetName("same-name"); - romA.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - romA.Write(DatItem.SourceKey, new Source(0)); + var romA = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF", + Source = new Source(0) + }; romA.CopyMachineInformation(machineA); - var romB = new Rom(); - romB.SetName("same-name"); - romB.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - romB.Write(DatItem.SourceKey, new Source(0)); + var romB = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF", + Source = new Source(0) + }; romB.CopyMachineInformation(machineB); var actual = dict.GetDuplicateStatus(romA, romB); @@ -670,22 +725,24 @@ namespace SabreTools.Metadata.DatFiles.Test { var dict = new ItemDictionary(); - Machine? machineA = new Machine(); - machineA.SetName("name-same"); + Machine? machineA = new Machine { Name = "name-same" }; - Machine? machineB = new Machine(); - machineB.SetName("not-name-same"); + Machine? machineB = new Machine { Name = "not-name-same" }; - var romA = new Rom(); - romA.SetName("same-name"); - romA.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - romA.Write(DatItem.SourceKey, new Source(0)); + var romA = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF", + Source = new Source(0) + }; romA.CopyMachineInformation(machineA); - var romB = new Rom(); - romB.SetName("same-name"); - romB.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - romB.Write(DatItem.SourceKey, new Source(0)); + var romB = new Rom + { + Name = "same-name", + CRC32 = "DEADBEEF", + Source = new Source(0) + }; romB.CopyMachineInformation(machineB); var actual = dict.GetDuplicateStatus(romA, romB); @@ -702,19 +759,22 @@ namespace SabreTools.Metadata.DatFiles.Test public void GetDuplicatesTest(bool hasDuplicate, int expected) { // Setup the items - Machine machine = new Machine(); - machine.SetName("game-1"); + Machine machine = new Machine { Name = "game-1" }; - DatItem rom1 = new Rom(); - rom1.SetName("rom-1"); - rom1.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom1.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom1 = new Rom + { + Name = "rom-1", + Size = 1024, + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; rom1.CopyMachineInformation(machine); - DatItem rom2 = new Rom(); - rom2.SetName("rom-2"); - rom2.Write(Data.Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); - rom2.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom2 = new Rom + { + Name = "rom-2", + Size = 1024, + SHA1 = "000000e948edcb4f7704b8af85a77a3339ecce44" + }; rom2.CopyMachineInformation(machine); // Setup the dictionary @@ -723,10 +783,12 @@ namespace SabreTools.Metadata.DatFiles.Test dict.AddItem(rom2, statsOnly: false); // Setup the test item - DatItem rom = new Rom(); - rom.SetName("rom-1"); - rom.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom.Write(Data.Models.Metadata.Rom.SizeKey, hasDuplicate ? "1024" : "2048"); + DatItem rom = new Rom + { + Name = "rom-1", + Size = hasDuplicate ? 1024 : 2048, + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; rom.CopyMachineInformation(machine); var actual = dict.GetDuplicates(rom); @@ -743,19 +805,22 @@ namespace SabreTools.Metadata.DatFiles.Test public void HasDuplicatesTest(bool expected) { // Setup the items - Machine machine = new Machine(); - machine.SetName("game-1"); + Machine machine = new Machine { Name = "game-1" }; - DatItem rom1 = new Rom(); - rom1.SetName("rom-1"); - rom1.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom1.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom1 = new Rom + { + Name = "rom-1", + Size = 1024, + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; rom1.CopyMachineInformation(machine); - DatItem rom2 = new Rom(); - rom2.SetName("rom-2"); - rom2.Write(Data.Models.Metadata.Rom.SHA1Key, "000000e948edcb4f7704b8af85a77a3339ecce44"); - rom2.Write(Data.Models.Metadata.Rom.SizeKey, "1024"); + DatItem rom2 = new Rom + { + Name = "rom-2", + Size = 1024, + SHA1 = "000000e948edcb4f7704b8af85a77a3339ecce44" + }; rom1.CopyMachineInformation(machine); // Setup the dictionary @@ -764,10 +829,12 @@ namespace SabreTools.Metadata.DatFiles.Test dict.AddItem("game-1", rom2); // Setup the test item - DatItem rom = new Rom(); - rom.SetName("rom-1"); - rom.Write(Data.Models.Metadata.Rom.SHA1Key, "0000000fbbb37f8488100b1b4697012de631a5e6"); - rom.Write(Data.Models.Metadata.Rom.SizeKey, expected ? "1024" : "2048"); + DatItem rom = new Rom + { + Name = "rom-1", + Size = expected ? 1024 : 2048, + SHA1 = "0000000fbbb37f8488100b1b4697012de631a5e6" + }; rom1.CopyMachineInformation(machine); bool actual = dict.HasDuplicates(rom); @@ -783,31 +850,32 @@ namespace SabreTools.Metadata.DatFiles.Test { Source source = new Source(0, source: null); - Machine machine = new Machine(); - machine.SetName("machine"); + Machine machine = new Machine { Name = "machine" }; - DatItem item = new Rom(); - item.SetName("rom"); - item.Write(Data.Models.Metadata.Rom.SizeKey, 12345); - item.Write(Data.Models.Metadata.Rom.CRCKey, "deadbeef"); - item.Write(DatItem.SourceKey, source); - item.Write(DatItem.MachineKey, machine); + var item = new Rom + { + Name = "rom", + Size = 12345, + CRC32 = "deadbeef", + Source = source, + Machine = machine + }; var dict = new ItemDictionary(); _ = dict.AddItem(item, statsOnly: false); Assert.Equal(1, dict.DatStatistics.TotalCount); - Assert.Equal(1, dict.DatStatistics.GetItemCount(ItemType.Rom)); + Assert.Equal(1, dict.DatStatistics.GetItemCount(Data.Models.Metadata.ItemType.Rom)); Assert.Equal(12345, dict.DatStatistics.TotalSize); Assert.Equal(1, dict.DatStatistics.GetHashCount(HashType.CRC32)); Assert.Equal(0, dict.DatStatistics.GetHashCount(HashType.MD5)); - item.Write(Data.Models.Metadata.Rom.MD5Key, "deadbeef"); + item.MD5 = "deadbeef"; dict.RecalculateStats(); Assert.Equal(1, dict.DatStatistics.TotalCount); - Assert.Equal(1, dict.DatStatistics.GetItemCount(ItemType.Rom)); + Assert.Equal(1, dict.DatStatistics.GetItemCount(Data.Models.Metadata.ItemType.Rom)); Assert.Equal(12345, dict.DatStatistics.TotalSize); Assert.Equal(1, dict.DatStatistics.GetHashCount(HashType.CRC32)); Assert.Equal(1, dict.DatStatistics.GetHashCount(HashType.MD5)); diff --git a/SabreTools.Metadata.DatFiles.Test/SabreTools.Metadata.DatFiles.Test.csproj b/SabreTools.Metadata.DatFiles.Test/SabreTools.Metadata.DatFiles.Test.csproj index 959644aa..1699dd34 100644 --- a/SabreTools.Metadata.DatFiles.Test/SabreTools.Metadata.DatFiles.Test.csproj +++ b/SabreTools.Metadata.DatFiles.Test/SabreTools.Metadata.DatFiles.Test.csproj @@ -16,7 +16,6 @@ - diff --git a/SabreTools.Metadata.DatFiles/DatFile.Filtering.cs b/SabreTools.Metadata.DatFiles/DatFile.Filtering.cs index 03721f99..e23f2e9a 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.Filtering.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.Filtering.cs @@ -119,13 +119,13 @@ namespace SabreTools.Metadata.DatFiles foreach (DatItem item in items) { // Get the current machine - var machine = item.GetMachine(); + var machine = item.Machine; if (machine is null) continue; // Get the values to check against - string? machineName = machine.GetName(); - string? machineDesc = machine.ReadString(Data.Models.Metadata.Machine.DescriptionKey); + string? machineName = machine.Name; + string? machineDesc = machine.Description; if (machineName is null || machineDesc is null) continue; @@ -165,8 +165,8 @@ namespace SabreTools.Metadata.DatFiles continue; // Get the values to check against - string? machineName = machine.Value.GetName(); - string? machineDesc = machine.Value.ReadString(Data.Models.Metadata.Machine.DescriptionKey); + string? machineName = machine.Value.Name; + string? machineDesc = machine.Value.Description; if (machineName is null || machineDesc is null) continue; @@ -242,7 +242,7 @@ namespace SabreTools.Metadata.DatFiles foreach (var item in items) { if (!item.PassesFilter(filterRunner)) - item.Write(DatItem.RemoveKey, true); + item.RemoveFlag = true; } } @@ -263,7 +263,7 @@ namespace SabreTools.Metadata.DatFiles foreach (var item in items) { if (!item.Value.PassesFilterDB(filterRunner)) - item.Value.Write(DatItem.RemoveKey, true); + item.Value.RemoveFlag = true; } } @@ -326,14 +326,14 @@ namespace SabreTools.Metadata.DatFiles DatItem item = GetItemsForBucket(key)[0]; // Get machine information - Machine? machine = item.GetMachine(); - string? machineName = machine?.GetName()?.ToLowerInvariant(); + Machine? machine = item.Machine; + string? machineName = machine?.Name?.ToLowerInvariant(); if (machine is null || machineName is null) continue; // Get the string values - string? cloneOf = machine.ReadString(Data.Models.Metadata.Machine.CloneOfKey)?.ToLowerInvariant(); - string? romOf = machine.ReadString(Data.Models.Metadata.Machine.RomOfKey)?.ToLowerInvariant(); + string? cloneOf = machine.CloneOf?.ToLowerInvariant(); + string? romOf = machine.RomOf?.ToLowerInvariant(); // Match on CloneOf first if (!string.IsNullOrEmpty(cloneOf)) @@ -406,13 +406,13 @@ namespace SabreTools.Metadata.DatFiles // Get machine information Machine? machineObj = machine.Value; - string? machineName = machineObj?.GetName()?.ToLowerInvariant(); + string? machineName = machineObj?.Name?.ToLowerInvariant(); if (machineObj is null || machineName is null) continue; // Get the string values - string? cloneOf = machineObj.ReadString(Data.Models.Metadata.Machine.CloneOfKey)?.ToLowerInvariant(); - string? romOf = machineObj.ReadString(Data.Models.Metadata.Machine.RomOfKey)?.ToLowerInvariant(); + string? cloneOf = machineObj.CloneOf?.ToLowerInvariant(); + string? romOf = machineObj.RomOf?.ToLowerInvariant(); // Match on CloneOf first if (!string.IsNullOrEmpty(cloneOf)) @@ -514,7 +514,7 @@ namespace SabreTools.Metadata.DatFiles return; // Get the current machine - var machine = datItem.GetMachine(); + var machine = datItem.Machine; if (machine is null) return; @@ -522,25 +522,25 @@ namespace SabreTools.Metadata.DatFiles machine = (Machine)machine.Clone(); // Reassign the item to the new machine - datItem.Write(DatItem.MachineKey, machine); + datItem.Machine = machine; // Remove extensions from File and Rom items if (datItem is DatItems.Formats.File || datItem is Rom) { string[] splitname = itemName.Split('.'); - itemName = machine.GetName() + itemName = machine.Name + $"/{string.Join(".", splitname, 0, splitname.Length > 1 ? splitname.Length - 1 : 1)}"; } else { - itemName = machine.GetName() + $"/{itemName}"; + itemName = machine.Name + $"/{itemName}"; } // Strip off "Default" prefix only for ORPG if (itemName.StartsWith("Default")) itemName = itemName.Substring("Default".Length + 1); - machine.SetName(itemName); + machine.Name = itemName; datItem.SetName(Path.GetFileName(datItem.GetName())); } @@ -606,19 +606,19 @@ namespace SabreTools.Metadata.DatFiles if (datItem.Value is DatItems.Formats.File || datItem.Value is Rom) { string[] splitname = itemName.Split('.'); - itemName = machine.Value.GetName() + itemName = machine.Value.Name + $"/{string.Join(".", splitname, 0, splitname.Length > 1 ? splitname.Length - 1 : 1)}"; } else { - itemName = machine.Value.GetName() + $"/{itemName}"; + itemName = machine.Value.Name + $"/{itemName}"; } // Strip off "Default" prefix only for ORPG if (itemName.StartsWith("Default")) itemName = itemName.Substring("Default".Length + 1); - machine.Value.SetName(itemName); + machine.Value.Name = itemName; datItem.Value.SetName(Path.GetFileName(datItem.Value.GetName())); } @@ -646,19 +646,19 @@ namespace SabreTools.Metadata.DatFiles foreach (DatItem item in items) { // Get the current machine - var machine = item.GetMachine(); + var machine = item.Machine; if (machine is null) continue; // Get the values to check against - string? machineName = machine.GetName(); - string? machineDesc = machine.ReadString(Data.Models.Metadata.Machine.DescriptionKey); + string? machineName = machine.Name; + string? machineDesc = machine.Description; if (machineName is not null && Regex.IsMatch(machineName, SceneNamePattern)) - item.GetMachine()!.SetName(Regex.Replace(machineName, SceneNamePattern, "$2")); + item.Machine!.Name = Regex.Replace(machineName, SceneNamePattern, "$2"); if (machineDesc is not null && Regex.IsMatch(machineDesc, SceneNamePattern)) - item.GetMachine()!.Write(Data.Models.Metadata.Machine.DescriptionKey, Regex.Replace(machineDesc, SceneNamePattern, "$2")); + item.Machine!.Description = Regex.Replace(machineDesc, SceneNamePattern, "$2"); } #if NET40_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER }); @@ -689,14 +689,14 @@ namespace SabreTools.Metadata.DatFiles #endif // Get the values to check against - string? machineName = machine.Value.GetName(); - string? machineDesc = machine.Value.ReadString(Data.Models.Metadata.Machine.DescriptionKey); + string? machineName = machine.Value.Name; + string? machineDesc = machine.Value.Description; if (machineName is not null && Regex.IsMatch(machineName, SceneNamePattern)) - machine.Value.SetName(Regex.Replace(machineName, SceneNamePattern, "$2")); + machine.Value.Name = Regex.Replace(machineName, SceneNamePattern, "$2"); if (machineDesc is not null && Regex.IsMatch(machineDesc, SceneNamePattern)) - machine.Value.Write(Data.Models.Metadata.Machine.DescriptionKey, Regex.Replace(machineDesc, SceneNamePattern, "$2")); + machine.Value.Description = Regex.Replace(machineDesc, SceneNamePattern, "$2"); #if NET40_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER }); #else @@ -727,31 +727,31 @@ namespace SabreTools.Metadata.DatFiles foreach (DatItem item in items) { // Get the current machine - var machine = item.GetMachine(); + var machine = item.Machine; if (machine is null) continue; // Get the values to check against - string? machineName = machine.GetName(); - string? cloneOf = machine.ReadString(Data.Models.Metadata.Machine.CloneOfKey); - string? romOf = machine.ReadString(Data.Models.Metadata.Machine.RomOfKey); - string? sampleOf = machine.ReadString(Data.Models.Metadata.Machine.SampleOfKey); + string? machineName = machine.Name; + string? cloneOf = machine.CloneOf; + string? romOf = machine.RomOf; + string? sampleOf = machine.SampleOf; // Update machine name if (machineName is not null && mapping.TryGetValue(machineName, out string? mappedMachineName)) - machine.SetName(mappedMachineName); + machine.Name = mappedMachineName; // Update cloneof if (cloneOf is not null && mapping.TryGetValue(cloneOf, out string? mappedCloneOf)) - machine.Write(Data.Models.Metadata.Machine.CloneOfKey, mappedCloneOf); + machine.CloneOf = mappedCloneOf; // Update romof if (romOf is not null && mapping.TryGetValue(romOf, out string? mappedRomOf)) - machine.Write(Data.Models.Metadata.Machine.RomOfKey, mappedRomOf); + machine.RomOf = mappedRomOf; // Update sampleof if (sampleOf is not null && mapping.TryGetValue(sampleOf, out string? mappedSampleOf)) - machine.Write(Data.Models.Metadata.Machine.SampleOfKey, mappedSampleOf); + machine.SampleOf = mappedSampleOf; } #if NET40_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER }); @@ -773,26 +773,26 @@ namespace SabreTools.Metadata.DatFiles continue; // Get the values to check against - string? machineName = machine.Value.GetName(); - string? cloneOf = machine.Value.ReadString(Data.Models.Metadata.Machine.CloneOfKey); - string? romOf = machine.Value.ReadString(Data.Models.Metadata.Machine.RomOfKey); - string? sampleOf = machine.Value.ReadString(Data.Models.Metadata.Machine.SampleOfKey); + string? machineName = machine.Value.Name; + string? cloneOf = machine.Value.CloneOf; + string? romOf = machine.Value.RomOf; + string? sampleOf = machine.Value.SampleOf; // Update machine name if (machineName is not null && mapping.TryGetValue(machineName, out string? mappedMachineName)) - machine.Value.SetName(mappedMachineName); + machine.Value.Name = mappedMachineName; // Update cloneof if (cloneOf is not null && mapping.TryGetValue(cloneOf, out string? mappedCloneOf)) - machine.Value.Write(Data.Models.Metadata.Machine.CloneOfKey, mappedCloneOf); + machine.Value.CloneOf = mappedCloneOf; // Update romof if (romOf is not null && mapping.TryGetValue(romOf, out string? mappedRomOf)) - machine.Value.Write(Data.Models.Metadata.Machine.RomOfKey, mappedRomOf); + machine.Value.RomOf = mappedRomOf; // Update sampleof if (sampleOf is not null && mapping.TryGetValue(sampleOf, out string? mappedSampleOf)) - machine.Value.Write(Data.Models.Metadata.Machine.SampleOfKey, mappedSampleOf); + machine.Value.SampleOf = mappedSampleOf; } } diff --git a/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs b/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs index e3704e9d..f2e8890d 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs @@ -6,7 +6,6 @@ using System.Threading.Tasks; using SabreTools.Metadata.Filter; using SabreTools.Metadata.DatItems; using SabreTools.Metadata.DatItems.Formats; -using SabreTools.Data.Extensions; using MergingFlag = SabreTools.Data.Models.Metadata.MergingFlag; using NodumpFlag = SabreTools.Data.Models.Metadata.NodumpFlag; using PackingFlag = SabreTools.Data.Models.Metadata.PackingFlag; @@ -36,7 +35,7 @@ namespace SabreTools.Metadata.DatFiles FilterRunner? filterRunner) { // If the metadata file is invalid, we can't do anything - if (item is null || item.Count == 0) + if (item is null) return; // Create an internal source and add to the dictionary @@ -44,12 +43,12 @@ namespace SabreTools.Metadata.DatFiles // long sourceIndex = AddSourceDB(source); // Get the header from the metadata - var header = item.Read(Data.Models.Metadata.MetadataFile.HeaderKey); + var header = item.Header; if (header is not null) ConvertHeader(header, keep); // Get the machines from the metadata - var machines = item.ReadArray(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = item.Machine; if (machines is not null) ConvertMachines(machines, source, sourceIndex: 0, statsOnly, filterRunner); } @@ -62,118 +61,119 @@ namespace SabreTools.Metadata.DatFiles private void ConvertHeader(Data.Models.Metadata.Header? item, bool keep) { // If the header is invalid, we can't do anything - if (item is null || item.Count == 0) + if (item is null) return; // Create an internal header var header = new DatHeader(item); + Header.Name = header.Name; // Convert subheader values - var canOpen = item.Read(Data.Models.Metadata.Header.CanOpenKey); + var canOpen = item.CanOpen; if (canOpen?.Extension is not null) - Header.Write(Data.Models.Metadata.Header.CanOpenKey, canOpen.Extension); + Header.CanOpen = canOpen; - var images = item.Read(Data.Models.Metadata.Header.ImagesKey); + var images = item.Images; if (images is not null) - Header.Write(Data.Models.Metadata.Header.ImagesKey, images); + Header.Images = images; - var infos = item.Read(Data.Models.Metadata.Header.InfosKey); + var infos = item.Infos; if (infos is not null) - Header.Write(Data.Models.Metadata.Header.InfosKey, infos); + Header.Infos = infos; - var newDat = item.Read(Data.Models.Metadata.Header.NewDatKey); + var newDat = item.NewDat; if (newDat is not null) - Header.Write(Data.Models.Metadata.Header.NewDatKey, newDat); + Header.NewDat = newDat; - var search = item.Read(Data.Models.Metadata.Header.SearchKey); + var search = item.Search; if (search is not null) - Header.Write(Data.Models.Metadata.Header.SearchKey, search); + Header.Search = search; // Selectively set all possible fields -- TODO: Figure out how to make this less manual - if (Header.ReadString(Data.Models.Metadata.Header.AuthorKey) is null) - Header.Write(Data.Models.Metadata.Header.AuthorKey, header.ReadString(Data.Models.Metadata.Header.AuthorKey)); - if (Header.ReadString(Data.Models.Metadata.Header.BiosModeKey).AsMergingFlag() == MergingFlag.None) - Header.Write(Data.Models.Metadata.Header.BiosModeKey, header.ReadString(Data.Models.Metadata.Header.BiosModeKey).AsMergingFlag().AsStringValue()); - if (Header.ReadString(Data.Models.Metadata.Header.BuildKey) is null) - Header.Write(Data.Models.Metadata.Header.BuildKey, header.ReadString(Data.Models.Metadata.Header.BuildKey)); - if (Header.ReadString(Data.Models.Metadata.Header.CategoryKey) is null) - Header.Write(Data.Models.Metadata.Header.CategoryKey, header.ReadString(Data.Models.Metadata.Header.CategoryKey)); - if (Header.ReadString(Data.Models.Metadata.Header.CommentKey) is null) - Header.Write(Data.Models.Metadata.Header.CommentKey, header.ReadString(Data.Models.Metadata.Header.CommentKey)); - if (Header.ReadString(Data.Models.Metadata.Header.DateKey) is null) - Header.Write(Data.Models.Metadata.Header.DateKey, header.ReadString(Data.Models.Metadata.Header.DateKey)); - if (Header.ReadString(Data.Models.Metadata.Header.DatVersionKey) is null) - Header.Write(Data.Models.Metadata.Header.DatVersionKey, header.ReadString(Data.Models.Metadata.Header.DatVersionKey)); - if (Header.ReadBool(Data.Models.Metadata.Header.DebugKey) is null) - Header.Write(Data.Models.Metadata.Header.DebugKey, header.ReadBool(Data.Models.Metadata.Header.DebugKey)); - if (Header.ReadString(Data.Models.Metadata.Header.DescriptionKey) is null) - Header.Write(Data.Models.Metadata.Header.DescriptionKey, header.ReadString(Data.Models.Metadata.Header.DescriptionKey)); - if (Header.ReadString(Data.Models.Metadata.Header.EmailKey) is null) - Header.Write(Data.Models.Metadata.Header.EmailKey, header.ReadString(Data.Models.Metadata.Header.EmailKey)); - if (Header.ReadString(Data.Models.Metadata.Header.EmulatorVersionKey) is null) - Header.Write(Data.Models.Metadata.Header.EmulatorVersionKey, header.ReadString(Data.Models.Metadata.Header.EmulatorVersionKey)); - if (Header.ReadString(Data.Models.Metadata.Header.ForceMergingKey).AsMergingFlag() == MergingFlag.None) - Header.Write(Data.Models.Metadata.Header.ForceMergingKey, header.ReadString(Data.Models.Metadata.Header.ForceMergingKey).AsMergingFlag().AsStringValue()); - if (Header.ReadString(Data.Models.Metadata.Header.ForceNodumpKey).AsNodumpFlag() == NodumpFlag.None) - Header.Write(Data.Models.Metadata.Header.ForceNodumpKey, header.ReadString(Data.Models.Metadata.Header.ForceNodumpKey).AsNodumpFlag().AsStringValue()); - if (Header.ReadString(Data.Models.Metadata.Header.ForcePackingKey).AsPackingFlag() == PackingFlag.None) - Header.Write(Data.Models.Metadata.Header.ForcePackingKey, header.ReadString(Data.Models.Metadata.Header.ForcePackingKey).AsPackingFlag().AsStringValue()); - if (Header.ReadBool(Data.Models.Metadata.Header.ForceZippingKey) is null) - Header.Write(Data.Models.Metadata.Header.ForceZippingKey, header.ReadBool(Data.Models.Metadata.Header.ForceZippingKey)); - if (Header.ReadString(Data.Models.Metadata.Header.HeaderKey) is null) - Header.Write(Data.Models.Metadata.Header.HeaderKey, header.ReadString(Data.Models.Metadata.Header.HeaderKey)); - if (Header.ReadString(Data.Models.Metadata.Header.HomepageKey) is null) - Header.Write(Data.Models.Metadata.Header.HomepageKey, header.ReadString(Data.Models.Metadata.Header.HomepageKey)); - if (Header.ReadString(Data.Models.Metadata.Header.IdKey) is null) - Header.Write(Data.Models.Metadata.Header.IdKey, header.ReadString(Data.Models.Metadata.Header.IdKey)); - if (Header.ReadString(Data.Models.Metadata.Header.ImFolderKey) is null) - Header.Write(Data.Models.Metadata.Header.ImFolderKey, header.ReadString(Data.Models.Metadata.Header.ImFolderKey)); - if (Header.ReadBool(Data.Models.Metadata.Header.LockBiosModeKey) is null) - Header.Write(Data.Models.Metadata.Header.LockBiosModeKey, header.ReadBool(Data.Models.Metadata.Header.LockBiosModeKey)); - if (Header.ReadBool(Data.Models.Metadata.Header.LockRomModeKey) is null) - Header.Write(Data.Models.Metadata.Header.LockRomModeKey, header.ReadBool(Data.Models.Metadata.Header.LockRomModeKey)); - if (Header.ReadBool(Data.Models.Metadata.Header.LockSampleModeKey) is null) - Header.Write(Data.Models.Metadata.Header.LockSampleModeKey, header.ReadBool(Data.Models.Metadata.Header.LockSampleModeKey)); - if (Header.ReadString(Data.Models.Metadata.Header.MameConfigKey) is null) - Header.Write(Data.Models.Metadata.Header.MameConfigKey, header.ReadString(Data.Models.Metadata.Header.MameConfigKey)); - if (Header.ReadString(Data.Models.Metadata.Header.NameKey) is null) - Header.Write(Data.Models.Metadata.Header.NameKey, header.ReadString(Data.Models.Metadata.Header.NameKey)); - if (Header.ReadString(Data.Models.Metadata.Header.NotesKey) is null) - Header.Write(Data.Models.Metadata.Header.NotesKey, header.ReadString(Data.Models.Metadata.Header.NotesKey)); - if (Header.ReadString(Data.Models.Metadata.Header.PluginKey) is null) - Header.Write(Data.Models.Metadata.Header.PluginKey, header.ReadString(Data.Models.Metadata.Header.PluginKey)); - if (Header.ReadString(Data.Models.Metadata.Header.RefNameKey) is null) - Header.Write(Data.Models.Metadata.Header.RefNameKey, header.ReadString(Data.Models.Metadata.Header.RefNameKey)); - if (Header.ReadString(Data.Models.Metadata.Header.RomModeKey).AsMergingFlag() == MergingFlag.None) - Header.Write(Data.Models.Metadata.Header.RomModeKey, header.ReadString(Data.Models.Metadata.Header.RomModeKey).AsMergingFlag().AsStringValue()); - if (Header.ReadString(Data.Models.Metadata.Header.RomTitleKey) is null) - Header.Write(Data.Models.Metadata.Header.RomTitleKey, header.ReadString(Data.Models.Metadata.Header.RomTitleKey)); - if (Header.ReadString(Data.Models.Metadata.Header.RootDirKey) is null) - Header.Write(Data.Models.Metadata.Header.RootDirKey, header.ReadString(Data.Models.Metadata.Header.RootDirKey)); - if (Header.ReadString(Data.Models.Metadata.Header.SampleModeKey).AsMergingFlag() == MergingFlag.None) - Header.Write(Data.Models.Metadata.Header.SampleModeKey, header.ReadString(Data.Models.Metadata.Header.SampleModeKey).AsMergingFlag().AsStringValue()); - if (Header.ReadString(Data.Models.Metadata.Header.SchemaLocationKey) is null) - Header.Write(Data.Models.Metadata.Header.SchemaLocationKey, header.ReadString(Data.Models.Metadata.Header.SchemaLocationKey)); - if (Header.ReadString(Data.Models.Metadata.Header.ScreenshotsHeightKey) is null) - Header.Write(Data.Models.Metadata.Header.ScreenshotsHeightKey, header.ReadString(Data.Models.Metadata.Header.ScreenshotsHeightKey)); - if (Header.ReadString(Data.Models.Metadata.Header.ScreenshotsWidthKey) is null) - Header.Write(Data.Models.Metadata.Header.ScreenshotsWidthKey, header.ReadString(Data.Models.Metadata.Header.ScreenshotsWidthKey)); - if (Header.ReadString(Data.Models.Metadata.Header.SystemKey) is null) - Header.Write(Data.Models.Metadata.Header.SystemKey, header.ReadString(Data.Models.Metadata.Header.SystemKey)); - if (Header.ReadString(Data.Models.Metadata.Header.TimestampKey) is null) - Header.Write(Data.Models.Metadata.Header.TimestampKey, header.ReadString(Data.Models.Metadata.Header.TimestampKey)); - if (Header.ReadString(Data.Models.Metadata.Header.TypeKey) is null) - Header.Write(Data.Models.Metadata.Header.TypeKey, header.ReadString(Data.Models.Metadata.Header.TypeKey)); - if (Header.ReadString(Data.Models.Metadata.Header.UrlKey) is null) - Header.Write(Data.Models.Metadata.Header.UrlKey, header.ReadString(Data.Models.Metadata.Header.UrlKey)); - if (Header.ReadString(Data.Models.Metadata.Header.VersionKey) is null) - Header.Write(Data.Models.Metadata.Header.VersionKey, header.ReadString(Data.Models.Metadata.Header.VersionKey)); + if (Header.Author is null) + Header.Author = header.Author; + if (Header.BiosMode == MergingFlag.None) + Header.BiosMode = header.BiosMode; + if (Header.Build is null) + Header.Build = header.Build; + if (Header.Category is null) + Header.Category = header.Category; + if (Header.Comment is null) + Header.Comment = header.Comment; + if (Header.Date is null) + Header.Date = header.Date; + if (Header.DatVersion is null) + Header.DatVersion = header.DatVersion; + if (Header.Debug is null) + Header.Debug = header.Debug; + if (Header.Description is null) + Header.Description = header.Description; + if (Header.Email is null) + Header.Email = header.Email; + if (Header.EmulatorVersion is null) + Header.EmulatorVersion = header.EmulatorVersion; + if (Header.ForceMerging == MergingFlag.None) + Header.ForceMerging = header.ForceMerging; + if (Header.ForceNodump == NodumpFlag.None) + Header.ForceNodump = header.ForceNodump; + if (Header.ForcePacking == PackingFlag.None) + Header.ForcePacking = header.ForcePacking; + if (Header.ForceZipping is null) + Header.ForceZipping = header.ForceZipping; + if (Header.HeaderSkipper is null) + Header.HeaderSkipper = header.HeaderSkipper; + if (Header.Homepage is null) + Header.Homepage = header.Homepage; + if (Header.Id is null) + Header.Id = header.Id; + if (Header.ImFolder is null) + Header.ImFolder = header.ImFolder; + if (Header.LockBiosMode is null) + Header.LockBiosMode = header.LockBiosMode; + if (Header.LockRomMode is null) + Header.LockRomMode = header.LockRomMode; + if (Header.LockSampleMode is null) + Header.LockSampleMode = header.LockSampleMode; + if (Header.MameConfig is null) + Header.MameConfig = header.MameConfig; + if (Header.Name is null) + Header.Name = header.Name; + if (Header.Notes is null) + Header.Notes = header.Notes; + if (Header.Plugin is null) + Header.Plugin = header.Plugin; + if (Header.RefName is null) + Header.RefName = header.RefName; + if (Header.RomMode == MergingFlag.None) + Header.RomMode = header.RomMode; + if (Header.RomTitle is null) + Header.RomTitle = header.RomTitle; + if (Header.RootDir is null) + Header.RootDir = header.RootDir; + if (Header.SampleMode == MergingFlag.None) + Header.SampleMode = header.SampleMode; + if (Header.SchemaLocation is null) + Header.SchemaLocation = header.SchemaLocation; + if (Header.ScreenshotsHeight is null) + Header.ScreenshotsHeight = header.ScreenshotsHeight; + if (Header.ScreenshotsWidth is null) + Header.ScreenshotsWidth = header.ScreenshotsWidth; + if (Header.System is null) + Header.System = header.System; + if (Header.Timestamp is null) + Header.Timestamp = header.Timestamp; + if (Header.Type is null) + Header.Type = header.Type; + if (Header.Url is null) + Header.Url = header.Url; + if (Header.Version is null) + Header.Version = header.Version; // Handle implied SuperDAT - if (Header.ReadString(Data.Models.Metadata.Header.NameKey)?.Contains(" - SuperDAT") == true && keep) + if (Header.Name?.Contains(" - SuperDAT") == true && keep) { - if (Header.ReadString(Data.Models.Metadata.Header.TypeKey) is null) - Header.Write(Data.Models.Metadata.Header.TypeKey, "SuperDAT"); + if (Header.Type is null) + Header.Type = "SuperDAT"; } } @@ -225,7 +225,7 @@ namespace SabreTools.Metadata.DatFiles FilterRunner? filterRunner) { // If the machine is invalid, we can't do anything - if (item is null || item.Count == 0) + if (item is null) return; // If the machine doesn't pass the filter @@ -237,9 +237,9 @@ namespace SabreTools.Metadata.DatFiles // long machineIndex = AddMachineDB(machine); // Convert items in the machine - if (item.ContainsKey(Data.Models.Metadata.Machine.AdjusterKey)) + if (item.Adjuster is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.AdjusterKey) ?? []; + var items = item.Adjuster; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -249,9 +249,9 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.ArchiveKey)) + if (item.Archive is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.ArchiveKey) ?? []; + var items = item.Archive; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -261,9 +261,9 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.BiosSetKey)) + if (item.BiosSet is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.BiosSetKey) ?? []; + var items = item.BiosSet; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -273,9 +273,9 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.ChipKey)) + if (item.Chip is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.ChipKey) ?? []; + var items = item.Chip; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -285,9 +285,9 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.ConfigurationKey)) + if (item.Configuration is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.ConfigurationKey) ?? []; + var items = item.Configuration; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -297,9 +297,9 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.DeviceKey)) + if (item.Device is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.DeviceKey) ?? []; + var items = item.Device; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -309,9 +309,9 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.DeviceRefKey)) + if (item.DeviceRef is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.DeviceRefKey) ?? []; + var items = item.DeviceRef; // Do not filter these due to later use Array.ForEach(items, item => { @@ -321,9 +321,9 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.DipSwitchKey)) + if (item.DipSwitch is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.DipSwitchKey) ?? []; + var items = item.DipSwitch; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -333,9 +333,9 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.DiskKey)) + if (item.Disk is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.DiskKey) ?? []; + var items = item.Disk; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -345,9 +345,9 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.DisplayKey)) + if (item.Display is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.DisplayKey) ?? []; + var items = item.Display; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -357,25 +357,31 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.DriverKey)) + if (item.Driver is not null && filterRunner?.Run(item.Driver) != false) { - var items = item.ReadArray(Data.Models.Metadata.Machine.DriverKey) ?? []; - var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); - Array.ForEach(filtered, item => - { - var datItem = new Driver(item, machine, source); - AddItem(datItem, statsOnly); - // AddItemDB(datItem, machineIndex, sourceIndex, statsOnly); - }); + var datItem = new Driver(item.Driver, machine, source); + AddItem(datItem, statsOnly); + // AddItemDB(datItem, machineIndex, sourceIndex, statsOnly); } - if (item.ContainsKey(Data.Models.Metadata.Machine.DumpKey)) + if (item.Dump is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.DumpKey) ?? []; + var items = item.Dump; for (int i = 0; i < items.Length; i++) { var datItem = new Rom(items[i], machine, source, i); - if (datItem.GetName() is not null) + + var original = items[i].Original; + if (original is not null) + { + datItem.Original = new Original + { + Value = original.Value, + Content = original.Content, + }; + } + + if (datItem.Name is not null) { AddItem(datItem, statsOnly); // AddItemDB(datItem, machineIndex, sourceIndex, statsOnly); @@ -383,9 +389,9 @@ namespace SabreTools.Metadata.DatFiles } } - if (item.ContainsKey(Data.Models.Metadata.Machine.FeatureKey)) + if (item.Feature is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.FeatureKey) ?? []; + var items = item.Feature; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -395,9 +401,9 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.InfoKey)) + if (item.Info is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.InfoKey) ?? []; + var items = item.Info; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -407,21 +413,16 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.InputKey)) + if (item.Input is not null && filterRunner?.Run(item.Input) != false) { - var items = item.ReadArray(Data.Models.Metadata.Machine.InputKey) ?? []; - var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); - Array.ForEach(filtered, item => - { - var datItem = new Input(item, machine, source); - AddItem(datItem, statsOnly); - // AddItemDB(datItem, machineIndex, sourceIndex, statsOnly); - }); + var datItem = new Input(item.Input, machine, source); + AddItem(datItem, statsOnly); + // AddItemDB(datItem, machineIndex, sourceIndex, statsOnly); } - if (item.ContainsKey(Data.Models.Metadata.Machine.MediaKey)) + if (item.Media is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.MediaKey) ?? []; + var items = item.Media; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -431,15 +432,15 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.PartKey)) + if (item.Part is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.PartKey) ?? []; + var items = item.Part; ProcessItems(items, machine, machineIndex: 0, source, sourceIndex, statsOnly, filterRunner); } - if (item.ContainsKey(Data.Models.Metadata.Machine.PortKey)) + if (item.Port is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.PortKey) ?? []; + var items = item.Port; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -449,9 +450,9 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.RamOptionKey)) + if (item.RamOption is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.RamOptionKey) ?? []; + var items = item.RamOption; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -461,9 +462,9 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.ReleaseKey)) + if (item.Release is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.ReleaseKey) ?? []; + var items = item.Release; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -473,14 +474,14 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.RomKey)) + if (item.Rom is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.RomKey) ?? []; + var items = item.Rom; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { var datItem = new Rom(item, machine, source); - datItem.Write(DatItem.SourceKey, source); + datItem.Source = source; datItem.CopyMachineInformation(machine); AddItem(datItem, statsOnly); @@ -488,9 +489,9 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.SampleKey)) + if (item.Sample is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.SampleKey) ?? []; + var items = item.Sample; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -500,9 +501,9 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.SharedFeatKey)) + if (item.SharedFeat is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.SharedFeatKey) ?? []; + var items = item.SharedFeat; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -512,9 +513,9 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.SlotKey)) + if (item.Slot is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.SlotKey) ?? []; + var items = item.Slot; // Do not filter these due to later use Array.ForEach(items, item => { @@ -524,9 +525,9 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.SoftwareListKey)) + if (item.SoftwareList is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.SoftwareListKey) ?? []; + var items = item.SoftwareList; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -536,21 +537,16 @@ namespace SabreTools.Metadata.DatFiles }); } - if (item.ContainsKey(Data.Models.Metadata.Machine.SoundKey)) + if (item.Sound is not null && filterRunner?.Run(item.Sound) != false) { - var items = item.ReadArray(Data.Models.Metadata.Machine.SoundKey) ?? []; - var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); - Array.ForEach(filtered, item => - { - var datItem = new Sound(item, machine, source); - AddItem(datItem, statsOnly); - // AddItemDB(datItem, machineIndex, sourceIndex, statsOnly); - }); + var datItem = new Sound(item.Sound, machine, source); + AddItem(datItem, statsOnly); + // AddItemDB(datItem, machineIndex, sourceIndex, statsOnly); } - if (item.ContainsKey(Data.Models.Metadata.Machine.VideoKey)) + if (item.Video is not null) { - var items = item.ReadArray(Data.Models.Metadata.Machine.VideoKey) ?? []; + var items = item.Video; var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item)); Array.ForEach(filtered, item => { @@ -589,13 +585,13 @@ namespace SabreTools.Metadata.DatFiles var partItem = new Part(item, machine, source); // Handle subitems - var dataAreas = item.ReadArray(Data.Models.Metadata.Part.DataAreaKey); + var dataAreas = item.DataArea; if (dataAreas is not null) { foreach (var dataArea in dataAreas) { var dataAreaItem = new DataArea(dataArea, machine, source); - var roms = dataArea.ReadArray(Data.Models.Metadata.DataArea.RomKey); + var roms = dataArea.Rom; if (roms is null) continue; @@ -609,22 +605,22 @@ namespace SabreTools.Metadata.DatFiles // Convert the item var romItem = new Rom(rom, machine, source); - long? size = romItem.ReadLong(Data.Models.Metadata.Rom.SizeKey); + long? size = romItem.Size; // If the rom is a continue or ignore - string? loadFlag = rom.ReadString(Data.Models.Metadata.Rom.LoadFlagKey); + Data.Models.Metadata.LoadFlag? loadFlag = rom.LoadFlag; if (loadFlag is not null - && (loadFlag.Equals("continue", StringComparison.OrdinalIgnoreCase) - || loadFlag.Equals("ignore", StringComparison.OrdinalIgnoreCase))) + && (loadFlag == Data.Models.Metadata.LoadFlag.Continue + || loadFlag == Data.Models.Metadata.LoadFlag.Ignore)) { var lastRom = addRoms[addRoms.Count - 1]; - long? lastSize = lastRom.ReadLong(Data.Models.Metadata.Rom.SizeKey); - lastRom.Write(Data.Models.Metadata.Rom.SizeKey, lastSize + size); + long? lastSize = lastRom.Size; + lastRom.Size = lastSize + size; continue; } - romItem.Write(Rom.DataAreaKey, dataAreaItem); - romItem.Write(Rom.PartKey, partItem); + romItem.DataArea = dataAreaItem; + romItem.Part = partItem; addRoms.Add(romItem); } @@ -638,13 +634,13 @@ namespace SabreTools.Metadata.DatFiles } } - var diskAreas = item.ReadArray(Data.Models.Metadata.Part.DiskAreaKey); + var diskAreas = item.DiskArea; if (diskAreas is not null) { foreach (var diskArea in diskAreas) { var diskAreaitem = new DiskArea(diskArea, machine, source); - var disks = diskArea.ReadArray(Data.Models.Metadata.DiskArea.DiskKey); + var disks = diskArea.Disk; if (disks is null) continue; @@ -654,9 +650,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); @@ -664,7 +662,7 @@ namespace SabreTools.Metadata.DatFiles } } - var dipSwitches = item.ReadArray(Data.Models.Metadata.Part.DipSwitchKey); + var dipSwitches = item.DipSwitch; if (dipSwitches is not null) { foreach (var dipSwitch in dipSwitches) @@ -673,15 +671,14 @@ namespace SabreTools.Metadata.DatFiles if (filterRunner is not null && !filterRunner.Run(dipSwitch)) continue; - var dipSwitchItem = new DipSwitch(dipSwitch, machine, source); - dipSwitchItem.Write(DipSwitch.PartKey, partItem); + var dipSwitchItem = new DipSwitch(dipSwitch, machine, source) { Part = partItem }; AddItem(dipSwitchItem, statsOnly); // AddItemDB(dipSwitchItem, machineIndex, sourceIndex, statsOnly); } } - var partFeatures = item.ReadArray(Data.Models.Metadata.Part.FeatureKey); + var partFeatures = item.Feature; if (partFeatures is not null) { foreach (var partFeature in partFeatures) @@ -690,9 +687,11 @@ namespace SabreTools.Metadata.DatFiles if (filterRunner is not null && !filterRunner.Run(partFeature)) continue; - var partFeatureItem = new PartFeature(partFeature); - partFeatureItem.Write(DipSwitch.PartKey, partItem); - partFeatureItem.Write(DatItem.SourceKey, source); + var partFeatureItem = new PartFeature(partFeature) + { + Part = partItem, + Source = source, + }; partFeatureItem.CopyMachineInformation(machine); AddItem(partFeatureItem, statsOnly); diff --git a/SabreTools.Metadata.DatFiles/DatFile.Splitting.cs b/SabreTools.Metadata.DatFiles/DatFile.Splitting.cs index 79ba0702..45637c1e 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.Splitting.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.Splitting.cs @@ -268,12 +268,12 @@ namespace SabreTools.Metadata.DatFiles continue; // Get the machine - var machine = items[0].GetMachine(); + var machine = items[0].Machine; if (machine is null) continue; // Get the cloneof parent items - string? cloneOf = machine.ReadString(Data.Models.Metadata.Machine.CloneOfKey); + string? cloneOf = machine.CloneOf; List parentItems = GetItemsForBucket(cloneOf); if (cloneOf is null) continue; @@ -283,8 +283,8 @@ namespace SabreTools.Metadata.DatFiles if (parentItems.Count == 0) { copyFrom = new Rom(); - copyFrom.GetMachine()!.SetName(cloneOf); - copyFrom.GetMachine()!.Write(Data.Models.Metadata.Machine.DescriptionKey, cloneOf); + copyFrom.Machine!.Name = cloneOf; + copyFrom.Machine!.Description = cloneOf; } else { @@ -297,12 +297,12 @@ 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) .FindAll(i => i is Disk) - .ConvertAll(i => (i as Disk)!.GetName()) + .ConvertAll(i => (i as Disk)!.Name) .Contains(mergeTag)) { continue; @@ -311,7 +311,7 @@ namespace SabreTools.Metadata.DatFiles // If the merge tag exists but the parent doesn't contain it, add to parent else if (mergeTag is not null && !GetItemsForBucket(cloneOf) .FindAll(i => i is Disk) - .ConvertAll(i => (i as Disk)!.GetName()) + .ConvertAll(i => (i as Disk)!.Name) .Contains(mergeTag)) { disk.CopyMachineInformation(copyFrom); @@ -321,8 +321,8 @@ namespace SabreTools.Metadata.DatFiles // If there is no merge tag, add to parent else if (mergeTag is null && !GetItemsForBucket(cloneOf) .FindAll(i => i is Disk) - .ConvertAll(i => (i as Disk)!.GetName()) - .Contains(disk.GetName())) + .ConvertAll(i => (i as Disk)!.Name) + .Contains(disk.Name)) { disk.CopyMachineInformation(copyFrom); AddItem(disk, statsOnly: false); @@ -332,12 +332,12 @@ namespace SabreTools.Metadata.DatFiles // Special rom handling else if (item is Rom rom) { - string? mergeTag = rom.ReadString(Data.Models.Metadata.Rom.MergeKey); + string? mergeTag = rom.Merge; // If the merge tag exists and the parent already contains it, skip if (mergeTag is not null && GetItemsForBucket(cloneOf) .FindAll(i => i is Rom) - .ConvertAll(i => (i as Rom)!.GetName()) + .ConvertAll(i => (i as Rom)!.Name) .Contains(mergeTag)) { continue; @@ -346,11 +346,11 @@ namespace SabreTools.Metadata.DatFiles // If the merge tag exists but the parent doesn't contain it, add to subfolder of parent else if (mergeTag is not null && !GetItemsForBucket(cloneOf) .FindAll(i => i is Rom) - .ConvertAll(i => (i as Rom)!.GetName()) + .ConvertAll(i => (i as Rom)!.Name) .Contains(mergeTag)) { if (subfolder) - rom.SetName($"{rom.GetMachine()!.GetName()}\\{rom.GetName()}"); + rom.Name = $"{rom.Machine!.Name}\\{rom.Name}"; rom.CopyMachineInformation(copyFrom); AddItem(rom, statsOnly: false); @@ -360,7 +360,7 @@ namespace SabreTools.Metadata.DatFiles else if (!GetItemsForBucket(cloneOf).Exists(i => i.Equals(item)) || skipDedup) { if (subfolder) - rom.SetName($"{item.GetMachine()!.GetName()}\\{rom.GetName()}"); + rom.Name = $"{item.Machine!.Name}\\{rom.Name}"; rom.CopyMachineInformation(copyFrom); AddItem(rom, statsOnly: false); @@ -371,7 +371,7 @@ namespace SabreTools.Metadata.DatFiles else if (!GetItemsForBucket(cloneOf).Exists(i => i.Equals(item))) { if (subfolder) - item.SetName($"{item.GetMachine()!.GetName()}\\{item.GetName()}"); + item.SetName($"{item.Machine!.Name}\\{item.GetName()}"); item.CopyMachineInformation(copyFrom); AddItem(item, statsOnly: false); @@ -408,7 +408,7 @@ namespace SabreTools.Metadata.DatFiles continue; // Get the clone parent - string? cloneOf = machine.Value.ReadString(Data.Models.Metadata.Machine.CloneOfKey); + string? cloneOf = machine.Value.CloneOf; if (string.IsNullOrEmpty(cloneOf)) continue; @@ -428,18 +428,17 @@ namespace SabreTools.Metadata.DatFiles if (parentItems.Count == 0) continue; - string? machineName = GetMachineForItemDB(item.Key).Value? - .GetName(); + string? machineName = GetMachineForItemDB(item.Key).Value?.Name; // 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 .Where(i => i is Disk) - .Select(i => (i as Disk)!.GetName()) + .Select(i => (i as Disk)!.Name) .Contains(mergeTag)) { continue; @@ -448,7 +447,7 @@ namespace SabreTools.Metadata.DatFiles // If the merge tag exists but the parent doesn't contain it, add to parent else if (mergeTag is not null && !GetItemsForBucketDB(cloneOf).Values .Where(i => i is Disk) - .Select(i => (i as Disk)!.GetName()) + .Select(i => (i as Disk)!.Name) .Contains(mergeTag)) { ItemsDB.RemapDatItemToMachine(item.Key, cloneOfMachine.Key); @@ -458,8 +457,8 @@ namespace SabreTools.Metadata.DatFiles // If there is no merge tag, add to parent else if (mergeTag is null && !GetItemsForBucketDB(cloneOf).Values .Where(i => i is Disk) - .Select(i => (i as Disk)!.GetName()) - .Contains(disk.GetName())) + .Select(i => (i as Disk)!.Name) + .Contains(disk.Name)) { ItemsDB.RemapDatItemToMachine(item.Key, cloneOfMachine.Key); ItemsDB.AddItem(item.Value, cloneOfMachine.Key, source.Key); @@ -469,12 +468,12 @@ namespace SabreTools.Metadata.DatFiles // Special rom handling else if (item.Value is Rom rom) { - string? mergeTag = rom.ReadString(Data.Models.Metadata.Rom.MergeKey); + string? mergeTag = rom.Merge; // If the merge tag exists and the parent already contains it, skip if (mergeTag is not null && GetItemsForBucketDB(cloneOf).Values .Where(i => i is Rom) - .Select(i => (i as Rom)!.GetName()) + .Select(i => (i as Rom)!.Name) .Contains(mergeTag)) { continue; @@ -483,11 +482,11 @@ namespace SabreTools.Metadata.DatFiles // If the merge tag exists but the parent doesn't contain it, add to subfolder of parent else if (mergeTag is not null && !GetItemsForBucketDB(cloneOf).Values .Where(i => i is Rom) - .Select(i => (i as Rom)!.GetName()) + .Select(i => (i as Rom)!.Name) .Contains(mergeTag)) { if (subfolder) - rom.SetName($"{machineName}\\{rom.GetName()}"); + rom.Name = $"{machineName}\\{rom.Name}"; ItemsDB.RemapDatItemToMachine(item.Key, machineIndex: cloneOfMachine.Key); ItemsDB.AddItem(item.Value, cloneOfMachine.Key, source.Key); @@ -497,7 +496,7 @@ namespace SabreTools.Metadata.DatFiles else if (!GetItemsForBucketDB(cloneOf).ContainsValue(item.Value) || skipDedup) { if (subfolder) - rom.SetName($"{machineName}\\{rom.GetName()}"); + rom.Name = $"{machineName}\\{rom.Name}"; ItemsDB.RemapDatItemToMachine(item.Key, cloneOfMachine.Key); ItemsDB.AddItem(item.Value, cloneOfMachine.Key, source.Key); @@ -538,12 +537,12 @@ namespace SabreTools.Metadata.DatFiles continue; // Get the machine - var machine = items[0].GetMachine(); + var machine = items[0].Machine; if (machine is null) continue; // Get the cloneof parent items - string? cloneOf = machine.ReadString(Data.Models.Metadata.Machine.CloneOfKey); + string? cloneOf = machine.CloneOf; List parentItems = GetItemsForBucket(cloneOf); if (parentItems.Count == 0) continue; @@ -563,10 +562,10 @@ namespace SabreTools.Metadata.DatFiles // Now we want to get the parent romof tag and put it in each of the items items = GetItemsForBucket(bucket); - string? romof = GetItemsForBucket(cloneOf)[0].GetMachine()!.ReadString(Data.Models.Metadata.Machine.RomOfKey); + string? romof = GetItemsForBucket(cloneOf)[0].Machine!.RomOf; foreach (DatItem item in items) { - item.GetMachine()!.Write(Data.Models.Metadata.Machine.RomOfKey, romof); + item.Machine!.RomOf = romof; } } } @@ -597,7 +596,7 @@ namespace SabreTools.Metadata.DatFiles continue; // Get the clone parent - string? cloneOf = machine.Value.ReadString(Data.Models.Metadata.Machine.CloneOfKey); + string? cloneOf = machine.Value.CloneOf; if (string.IsNullOrEmpty(cloneOf)) continue; @@ -624,7 +623,7 @@ namespace SabreTools.Metadata.DatFiles // Now we want to get the parent romof tag and put it in each of the items items = GetItemsForBucketDB(bucket); - string? romof = parentMachine.Value.ReadString(Data.Models.Metadata.Machine.RomOfKey); + string? romof = parentMachine.Value.RomOf; foreach (var key in items.Keys) { var itemMachine = GetMachineForItemDB(key); @@ -632,7 +631,7 @@ namespace SabreTools.Metadata.DatFiles continue; // TODO: Remove merge tags here - itemMachine.Value.Write(Data.Models.Metadata.Machine.RomOfKey, romof); + itemMachine.Value.RomOf = romof; } } } @@ -660,7 +659,7 @@ namespace SabreTools.Metadata.DatFiles continue; // If the machine (is/is not) a device, we want to continue - if (deviceOnly ^ (datItems[0].GetMachine()!.ReadBool(Data.Models.Metadata.Machine.IsDeviceKey) == true)) + if (deviceOnly ^ (datItems[0].Machine!.IsDevice == true)) continue; // Get the first item from the bucket @@ -671,16 +670,16 @@ namespace SabreTools.Metadata.DatFiles deviceReferences.UnionWith(datItems .FindAll(i => i is DeviceRef) .ConvertAll(i => i as DeviceRef) - .ConvertAll(dr => dr!.GetName())); + .ConvertAll(dr => dr!.Name)); // Get all slot option names from the current machine HashSet slotOptions = []; slotOptions.UnionWith(datItems .FindAll(i => i is Slot) .ConvertAll(i => i as Slot) - .FindAll(s => s!.SlotOptionsSpecified) - .SelectMany(s => s!.Read(Data.Models.Metadata.Slot.SlotOptionKey)!) - .Select(so => so.ReadString(Data.Models.Metadata.SlotOption.DevNameKey))); + .FindAll(s => s!.SlotOptionSpecified) + .SelectMany(s => s!.SlotOption!) + .Select(so => so.DevName)); // If we're checking device references if (deviceReferences.Count > 0) @@ -696,13 +695,13 @@ namespace SabreTools.Metadata.DatFiles newDeviceReferences.UnionWith(devItems .FindAll(i => i is DeviceRef) - .ConvertAll(i => (i as DeviceRef)!.GetName()!)); + .ConvertAll(i => (i as DeviceRef)!.Name!)); // Set new machine information and add to the current machine foreach (DatItem item in devItems) { // If the parent machine doesn't already contain this item, add it - if (!datItems.Exists(i => i.ReadString(Data.Models.Metadata.DatItem.TypeKey) == item.ReadString(Data.Models.Metadata.DatItem.TypeKey) && i.GetName() == item.GetName())) + if (!datItems.Exists(i => i.ItemType == item.ItemType && i.GetName() == item.GetName())) { // Set that we found new items foundnew = true; @@ -723,8 +722,7 @@ namespace SabreTools.Metadata.DatFiles continue; deviceReferences.Add(deviceReference); - var deviceRef = new DeviceRef(); - deviceRef.SetName(deviceReference); + var deviceRef = new DeviceRef { Name = deviceReference }; deviceRef.CopyMachineInformation(copyFrom); Items.AddItem(deviceRef, statsOnly: false); } @@ -744,15 +742,15 @@ namespace SabreTools.Metadata.DatFiles newSlotOptions.UnionWith(slotItems .FindAll(i => i is Slot) - .FindAll(s => (s as Slot)!.SlotOptionsSpecified) - .SelectMany(s => (s as Slot)!.Read(Data.Models.Metadata.Slot.SlotOptionKey)!) - .Select(o => o.ReadString(Data.Models.Metadata.SlotOption.DevNameKey)!)); + .FindAll(s => (s as Slot)!.SlotOptionSpecified) + .SelectMany(s => (s as Slot)!.SlotOption!) + .Select(o => o.DevName!)); // Set new machine information and add to the current machine foreach (DatItem item in slotItems) { // If the parent machine doesn't already contain this item, add it - if (!datItems.Exists(i => i.ReadString(Data.Models.Metadata.DatItem.TypeKey) == item.ReadString(Data.Models.Metadata.DatItem.TypeKey) && i.GetName() == item.GetName())) + if (!datItems.Exists(i => i.ItemType == item.ItemType && i.GetName() == item.GetName())) { // Set that we found new items foundnew = true; @@ -773,12 +771,10 @@ namespace SabreTools.Metadata.DatFiles continue; slotOptions.Add(slotOption); - var slotOptionItem = new SlotOption(); - slotOptionItem.Write(Data.Models.Metadata.SlotOption.DevNameKey, slotOption); + var slotOptionItem = new SlotOption { DevName = slotOption }; slotOptionItem.CopyMachineInformation(copyFrom); - var slotItem = new Slot(); - slotItem.Write(Data.Models.Metadata.Slot.SlotOptionKey, [slotOptionItem]); + var slotItem = new Slot { SlotOption = [slotOptionItem] }; slotItem.CopyMachineInformation(copyFrom); Items.AddItem(slotItem, statsOnly: false); @@ -820,14 +816,14 @@ namespace SabreTools.Metadata.DatFiles continue; // If the machine (is/is not) a device, we want to continue - if (deviceOnly ^ (machine.Value.ReadBool(Data.Models.Metadata.Machine.IsDeviceKey) == true)) + if (deviceOnly ^ (machine.Value.IsDevice == true)) continue; // Get all device reference names from the current machine List deviceReferences = items.Values .Where(i => i is DeviceRef) .Select(i => i as DeviceRef) - .Select(dr => dr!.GetName()) + .Select(dr => dr!.Name) .Distinct() .ToList(); @@ -835,9 +831,9 @@ namespace SabreTools.Metadata.DatFiles List slotOptions = items.Values .Where(i => i is Slot) .Select(i => i as Slot) - .Where(s => s!.SlotOptionsSpecified) - .SelectMany(s => s!.Read(Data.Models.Metadata.Slot.SlotOptionKey)!) - .Select(so => so.ReadString(Data.Models.Metadata.SlotOption.DevNameKey)) + .Where(s => s!.SlotOptionSpecified) + .SelectMany(s => s!.SlotOption!) + .Select(so => so.DevName) .Distinct() .ToList(); @@ -860,7 +856,7 @@ namespace SabreTools.Metadata.DatFiles // Add to the list of new device reference names newDeviceReferences.UnionWith(devItems.Values .Where(i => i is DeviceRef) - .Select(i => (i as DeviceRef)!.GetName()!)); + .Select(i => (i as DeviceRef)!.Name!)); // Set new machine information and add to the current machine var copyFrom = GetMachineForItemDB(items.First().Key); @@ -870,7 +866,7 @@ namespace SabreTools.Metadata.DatFiles foreach (var item in devItems.Values) { // If the parent machine doesn't already contain this item, add it - if (!items.Values.Any(i => i.ReadString(Data.Models.Metadata.DatItem.TypeKey) == item.ReadString(Data.Models.Metadata.DatItem.TypeKey) + if (!items.Values.Any(i => i.ItemType == item.ItemType && i.GetName() == item.GetName())) { // Set that we found new items @@ -888,8 +884,7 @@ namespace SabreTools.Metadata.DatFiles { if (!deviceReferences.Contains(deviceReference)) { - var deviceRef = new DeviceRef(); - deviceRef.SetName(deviceReference); + var deviceRef = new DeviceRef { Name = deviceReference }; ItemsDB.AddItem(deviceRef, machine.Key, source.Key); } } @@ -914,9 +909,9 @@ namespace SabreTools.Metadata.DatFiles // Add to the list of new slot option names newSlotOptions.UnionWith(slotItems.Values .Where(i => i is Slot) - .Where(s => (s as Slot)!.SlotOptionsSpecified) - .SelectMany(s => (s as Slot)!.Read(Data.Models.Metadata.Slot.SlotOptionKey)!) - .Select(o => o.ReadString(Data.Models.Metadata.SlotOption.DevNameKey)!)); + .Where(s => (s as Slot)!.SlotOptionSpecified) + .SelectMany(s => (s as Slot)!.SlotOption!) + .Select(o => o.DevName!)); // Set new machine information and add to the current machine var copyFrom = GetMachineForItemDB(GetItemsForBucketDB(bucket).First().Key); @@ -926,7 +921,7 @@ namespace SabreTools.Metadata.DatFiles foreach (var item in slotItems.Values) { // If the parent machine doesn't already contain this item, add it - if (!items.Values.Any(i => i.ReadString(Data.Models.Metadata.DatItem.TypeKey) == item.ReadString(Data.Models.Metadata.DatItem.TypeKey) + if (!items.Values.Any(i => i.ItemType == item.ItemType && i.GetName() == item.GetName())) { // Set that we found new items @@ -944,11 +939,9 @@ namespace SabreTools.Metadata.DatFiles { if (!slotOptions.Contains(slotOption)) { - var slotOptionItem = new SlotOption(); - slotOptionItem.Write(Data.Models.Metadata.SlotOption.DevNameKey, slotOption); + var slotOptionItem = new SlotOption { DevName = slotOption }; - var slotItem = new Slot(); - slotItem.Write(Data.Models.Metadata.Slot.SlotOptionKey, [slotOptionItem]); + var slotItem = new Slot { SlotOption = [slotOptionItem] }; ItemsDB.AddItem(slotItem, machine.Key, source.Key); } @@ -977,12 +970,12 @@ namespace SabreTools.Metadata.DatFiles continue; // Get the machine - var machine = items[0].GetMachine(); + var machine = items[0].Machine; if (machine is null) continue; // Get the romof parent items - string? romOf = machine.ReadString(Data.Models.Metadata.Machine.RomOfKey); + string? romOf = machine.RomOf; List parentItems = GetItemsForBucket(romOf); if (parentItems.Count == 0) continue; @@ -1025,7 +1018,7 @@ namespace SabreTools.Metadata.DatFiles continue; // Get the romof parent items - string? romOf = machine.Value.ReadString(Data.Models.Metadata.Machine.RomOfKey); + string? romOf = machine.Value.RomOf; Dictionary parentItems = GetItemsForBucketDB(romOf); if (parentItems.Count == 0) continue; @@ -1070,7 +1063,7 @@ namespace SabreTools.Metadata.DatFiles #endif // Get the machine - var machine = items[0].GetMachine(); + var machine = items[0].Machine; if (machine is null) #if NET40_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER return; @@ -1079,11 +1072,8 @@ namespace SabreTools.Metadata.DatFiles #endif // Remove flagged items - if ((machine.ReadBool(Data.Models.Metadata.Machine.IsBiosKey) == true) - || (machine.ReadBool(Data.Models.Metadata.Machine.IsDeviceKey) == true)) - { + if ((machine.IsBios == true) || (machine.IsDevice == true)) RemoveBucket(bucket); - } #if NET40_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER }); #else @@ -1127,8 +1117,7 @@ namespace SabreTools.Metadata.DatFiles #endif // Remove flagged items - if ((machine.Value.ReadBool(Data.Models.Metadata.Machine.IsBiosKey) == true) - || (machine.Value.ReadBool(Data.Models.Metadata.Machine.IsDeviceKey) == true)) + if ((machine.Value.IsBios == true) || (machine.Value.IsDevice == true)) { foreach (var key in items.Keys) { @@ -1163,12 +1152,12 @@ namespace SabreTools.Metadata.DatFiles continue; // Get the machine - var machine = items[0].GetMachine(); + var machine = items[0].Machine; if (machine is null) continue; // Get the cloneof parent items - string? cloneOf = machine.ReadString(Data.Models.Metadata.Machine.CloneOfKey); + string? cloneOf = machine.CloneOf; List parentItems = GetItemsForBucket(cloneOf); if (parentItems.Count == 0) continue; @@ -1191,10 +1180,10 @@ namespace SabreTools.Metadata.DatFiles // Now we want to get the parent romof tag and put it in each of the remaining items items = GetItemsForBucket(bucket); - string? romof = GetItemsForBucket(cloneOf)[0].GetMachine()!.ReadString(Data.Models.Metadata.Machine.RomOfKey); + string? romof = GetItemsForBucket(cloneOf)[0].Machine!.RomOf; foreach (DatItem item in items) { - item.GetMachine()!.Write(Data.Models.Metadata.Machine.RomOfKey, romof); + item.Machine!.RomOf = romof; } } } @@ -1222,7 +1211,7 @@ namespace SabreTools.Metadata.DatFiles continue; // Get the cloneof parent items - string? cloneOf = machine.Value.ReadString(Data.Models.Metadata.Machine.CloneOfKey); + string? cloneOf = machine.Value.CloneOf; Dictionary parentItems = GetItemsForBucketDB(cloneOf); if (parentItems is null || parentItems.Count == 0) continue; @@ -1243,14 +1232,14 @@ namespace SabreTools.Metadata.DatFiles if (machine.Value is null) continue; - string? romof = machine.Value.ReadString(Data.Models.Metadata.Machine.RomOfKey); + string? romof = machine.Value.RomOf; foreach (var item in items) { machine = GetMachineForItemDB(item.Key); if (machine.Value is null) continue; - machine.Value.Write(Data.Models.Metadata.Machine.RomOfKey, romof); + machine.Value.RomOf = romof; } } } @@ -1273,12 +1262,12 @@ namespace SabreTools.Metadata.DatFiles continue; // Get the machine - var machine = items[0].GetMachine(); + var machine = items[0].Machine; if (machine is null) continue; // Get the romof parent items - string? romOf = machine.ReadString(Data.Models.Metadata.Machine.RomOfKey); + string? romOf = machine.RomOf; List parentItems = GetItemsForBucket(romOf); if (parentItems.Count == 0) continue; @@ -1325,7 +1314,7 @@ namespace SabreTools.Metadata.DatFiles continue; // Get the romof parent items - string? romOf = machine.Value.ReadString(Data.Models.Metadata.Machine.RomOfKey); + string? romOf = machine.Value.RomOf; Dictionary parentItems = GetItemsForBucketDB(romOf); if (parentItems.Count == 0) continue; @@ -1368,16 +1357,19 @@ namespace SabreTools.Metadata.DatFiles foreach (DatItem item in items) { // Remove the merge tag - item.Remove(Data.Models.Metadata.Rom.MergeKey); + if (item is Disk disk) + disk.Merge = null; + else if (item is Rom rom) + rom.Merge = null; // Get the machine - var machine = item.GetMachine(); + var machine = item.Machine; if (machine is null) continue; - machine.Write(Data.Models.Metadata.Machine.CloneOfKey, null); - machine.Write(Data.Models.Metadata.Machine.RomOfKey, null); - machine.Write(Data.Models.Metadata.Machine.SampleOfKey, null); + machine.CloneOf = null; + machine.RomOf = null; + machine.SampleOf = null; } #if NET40_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER }); @@ -1409,9 +1401,9 @@ namespace SabreTools.Metadata.DatFiles continue; #endif - machine.Value.Write(Data.Models.Metadata.Machine.CloneOfKey, null); - machine.Value.Write(Data.Models.Metadata.Machine.RomOfKey, null); - machine.Value.Write(Data.Models.Metadata.Machine.SampleOfKey, null); + machine.Value.CloneOf = null; + machine.Value.RomOf = null; + machine.Value.SampleOf = null; #if NET40_OR_GREATER || NETCOREAPP || NETSTANDARD2_0_OR_GREATER }); #else diff --git a/SabreTools.Metadata.DatFiles/DatFile.ToMetadata.cs b/SabreTools.Metadata.DatFiles/DatFile.ToMetadata.cs index 536c5cb4..8f1aab16 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.ToMetadata.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.ToMetadata.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using System.Linq; -using SabreTools.Data.Extensions; using SabreTools.Metadata.DatItems; using OpenMSXSubType = SabreTools.Data.Models.Metadata.OpenMSXSubType; @@ -25,12 +24,12 @@ namespace SabreTools.Metadata.DatFiles // Convert and assign the header var header = Header.GetInternalClone(); if (header is not null) - metadataFile[Data.Models.Metadata.MetadataFile.HeaderKey] = header; + metadataFile.Header = header; // Convert and assign the machines var machines = ConvertMachines(ignoreblanks); if (machines is not null) - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] = machines; + metadataFile.Machine = machines; return metadataFile; } @@ -50,12 +49,12 @@ namespace SabreTools.Metadata.DatFiles // Convert and assign the header var header = Header.GetInternalClone(); if (header is not null) - metadataFile[Data.Models.Metadata.MetadataFile.HeaderKey] = header; + metadataFile.Header = header; // Convert and assign the machines var machines = ConvertMachinesDB(ignoreblanks); if (machines is not null) - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] = machines; + metadataFile.Machine = machines; return metadataFile; } @@ -76,23 +75,7 @@ namespace SabreTools.Metadata.DatFiles continue; // Create a machine to hold everything - var machine = items[0].GetMachine()!.GetInternalClone(); - - // Handle Trurip object, if it exists - if (machine.ContainsKey(Data.Models.Metadata.Machine.TruripKey)) - { - var trurip = machine.Read(Data.Models.Metadata.Machine.TruripKey); - if (trurip is not null) - { - var truripItem = trurip.ConvertToLogiqx(); - truripItem.Publisher = machine.ReadString(Data.Models.Metadata.Machine.PublisherKey); - truripItem.Year = machine.ReadString(Data.Models.Metadata.Machine.YearKey); - truripItem.Players = machine.ReadString(Data.Models.Metadata.Machine.PlayersKey); - truripItem.Source = machine.ReadString(Data.Models.Metadata.Machine.SourceFileKey); - truripItem.CloneOf = machine.ReadString(Data.Models.Metadata.Machine.CloneOfKey); - machine[Data.Models.Metadata.Machine.TruripKey] = truripItem; - } - } + var machine = items[0].Machine!.GetInternalClone(); // Create mapping dictionaries for the Parts, DataAreas, and DiskAreas associated with this machine Dictionary partMappings = []; @@ -116,184 +99,150 @@ namespace SabreTools.Metadata.DatFiles { case DatItems.Formats.Adjuster adjuster: var adjusterItem = adjuster.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.AdjusterKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.AdjusterKey, adjusterItem); + machine.Adjuster ??= []; + machine.Adjuster = [.. machine.Adjuster, adjusterItem]; break; case DatItems.Formats.Archive archive: var archiveItem = archive.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.ArchiveKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.ArchiveKey, archiveItem); + machine.Archive ??= []; + machine.Archive = [.. machine.Archive, archiveItem]; break; case DatItems.Formats.BiosSet biosSet: var biosSetItem = biosSet.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.BiosSetKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.BiosSetKey, biosSetItem); + machine.BiosSet ??= []; + machine.BiosSet = [.. machine.BiosSet, biosSetItem]; break; case DatItems.Formats.Chip chip: var chipItem = chip.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.ChipKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.ChipKey, chipItem); + machine.Chip ??= []; + machine.Chip = [.. machine.Chip, chipItem]; break; case DatItems.Formats.Configuration configuration: var configurationItem = configuration.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.ConfigurationKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.ConfigurationKey, configurationItem); + machine.Configuration ??= []; + machine.Configuration = [.. machine.Configuration, configurationItem]; break; case DatItems.Formats.Device device: var deviceItem = device.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.DeviceKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.DeviceKey, deviceItem); + machine.Device ??= []; + machine.Device = [.. machine.Device, deviceItem]; break; case DatItems.Formats.DeviceRef deviceRef: var deviceRefItem = deviceRef.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.DeviceRefKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.DeviceRefKey, deviceRefItem); + machine.DeviceRef ??= []; + machine.DeviceRef = [.. machine.DeviceRef, deviceRefItem]; break; case DatItems.Formats.DipSwitch dipSwitch: var dipSwitchItem = dipSwitch.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.DipSwitchKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.DipSwitchKey, dipSwitchItem); + machine.DipSwitch ??= []; + machine.DipSwitch = [.. machine.DipSwitch, dipSwitchItem]; // Add Part mapping - bool dipSwitchContainsPart = dipSwitchItem.ContainsKey(DatItems.Formats.DipSwitch.PartKey); - if (dipSwitchContainsPart) - { - var partItem = dipSwitchItem.Read(DatItems.Formats.DipSwitch.PartKey); - if (partItem is not null) - partMappings[partItem.GetInternalClone()] = dipSwitchItem; - } + if (dipSwitch.Part is not null) + partMappings[dipSwitch.Part.GetInternalClone()] = dipSwitchItem; break; case DatItems.Formats.Disk disk: var diskItem = disk.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.DiskKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.DiskKey, diskItem); + machine.Disk ??= []; + machine.Disk = [.. machine.Disk, diskItem]; // Add Part and DiskArea mappings - bool diskContainsPart = diskItem.ContainsKey(DatItems.Formats.Disk.PartKey); - bool diskContainsDiskArea = diskItem.ContainsKey(DatItems.Formats.Disk.DiskAreaKey); - if (diskContainsPart && diskContainsDiskArea) + if (disk.Part is not null && disk.DiskArea is not null) { - var partItem = diskItem.Read(DatItems.Formats.Disk.PartKey); - if (partItem is not null) - { - var partItemInternal = partItem.GetInternalClone(); - partMappings[partItemInternal] = diskItem; - - var diskAreaItem = diskItem.Read(DatItems.Formats.Disk.DiskAreaKey); - if (diskAreaItem is not null) - diskAreaMappings[partItemInternal] = (diskAreaItem.GetInternalClone(), diskItem); - } + var partItemInternal = disk.Part.GetInternalClone(); + partMappings[partItemInternal] = diskItem; + diskAreaMappings[partItemInternal] = (disk.DiskArea.GetInternalClone(), diskItem); } break; case DatItems.Formats.Display display: var displayItem = ProcessItem(display, machine); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.DisplayKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.DisplayKey, displayItem); + machine.Display ??= []; + machine.Display = [.. machine.Display, displayItem]; break; case DatItems.Formats.Driver driver: - var driverItem = driver.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.DriverKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.DriverKey, driverItem); + machine.Driver = driver.GetInternalClone(); break; case DatItems.Formats.Feature feature: var featureItem = feature.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.FeatureKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.FeatureKey, featureItem); + machine.Feature ??= []; + machine.Feature = [.. machine.Feature, featureItem]; break; case DatItems.Formats.Info info: var infoItem = info.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.InfoKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.InfoKey, infoItem); + machine.Info ??= []; + machine.Info = [.. machine.Info, infoItem]; break; case DatItems.Formats.Input input: - var inputItem = input.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.InputKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.InputKey, inputItem); + machine.Input = input.GetInternalClone(); break; case DatItems.Formats.Media media: var mediaItem = media.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.MediaKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.MediaKey, mediaItem); + machine.Media ??= []; + machine.Media = [.. machine.Media, mediaItem]; break; case DatItems.Formats.PartFeature partFeature: var partFeatureItem = partFeature.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.FeatureKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.FeatureKey, partFeatureItem); + machine.Feature ??= []; + machine.Feature = [.. machine.Feature, partFeatureItem]; // Add Part mapping - bool partFeatureContainsPart = partFeatureItem.ContainsKey(DatItems.Formats.PartFeature.PartKey); - if (partFeatureContainsPart) - { - var partItem = partFeatureItem.Read(DatItems.Formats.PartFeature.PartKey); - if (partItem is not null) - partMappings[partItem.GetInternalClone()] = partFeatureItem; - } + if (partFeature.Part is not null) + partMappings[partFeature.Part.GetInternalClone()] = partFeatureItem; break; case DatItems.Formats.Port port: var portItem = port.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.PortKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.PortKey, portItem); + machine.Port ??= []; + machine.Port = [.. machine.Port, portItem]; break; case DatItems.Formats.RamOption ramOption: var ramOptionItem = ramOption.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.RamOptionKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.RamOptionKey, ramOptionItem); + machine.RamOption ??= []; + machine.RamOption = [.. machine.RamOption, ramOptionItem]; break; case DatItems.Formats.Release release: var releaseItem = release.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.ReleaseKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.ReleaseKey, releaseItem); + machine.Release ??= []; + machine.Release = [.. machine.Release, releaseItem]; break; case DatItems.Formats.Rom rom: - var romItem = ProcessItem(rom, machine); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.RomKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.RomKey, romItem); + var romItem = ProcessItem(rom, machine, rom.Original); + machine.Rom ??= []; + machine.Rom = [.. machine.Rom, romItem]; // Add Part and DataArea mappings - bool romContainsPart = romItem.ContainsKey(DatItems.Formats.Rom.PartKey); - bool romContainsDataArea = romItem.ContainsKey(DatItems.Formats.Rom.DataAreaKey); - if (romContainsPart && romContainsDataArea) + if (rom.Part is not null && rom.DataArea is not null) { - var partItem = romItem.Read(DatItems.Formats.Rom.PartKey); - if (partItem is not null) - { - var partItemInternal = partItem.GetInternalClone(); - partMappings[partItemInternal] = romItem; - - var dataAreaItem = romItem.Read(DatItems.Formats.Rom.DataAreaKey); - if (dataAreaItem is not null) - dataAreaMappings[partItemInternal] = (dataAreaItem.GetInternalClone(), romItem); - } + var partItemInternal = rom.Part.GetInternalClone(); + partMappings[partItemInternal] = romItem; + dataAreaMappings[partItemInternal] = (rom.DataArea.GetInternalClone(), romItem); } break; case DatItems.Formats.Sample sample: var sampleItem = sample.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.SampleKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.SampleKey, sampleItem); + machine.Sample ??= []; + machine.Sample = [.. machine.Sample, sampleItem]; break; case DatItems.Formats.SharedFeat sharedFeat: var sharedFeatItem = sharedFeat.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.SharedFeatKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.SharedFeatKey, sharedFeatItem); + machine.SharedFeat ??= []; + machine.SharedFeat = [.. machine.SharedFeat, sharedFeatItem]; break; case DatItems.Formats.Slot slot: var slotItem = slot.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.SlotKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.SlotKey, slotItem); + machine.Slot ??= []; + machine.Slot = [.. machine.Slot, slotItem]; break; case DatItems.Formats.SoftwareList softwareList: var softwareListItem = softwareList.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.SoftwareListKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.SoftwareListKey, softwareListItem); + machine.SoftwareList ??= []; + machine.SoftwareList = [.. machine.SoftwareList, softwareListItem]; break; case DatItems.Formats.Sound sound: - var soundItem = sound.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.SoundKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.SoundKey, soundItem); + machine.Sound = sound.GetInternalClone(); break; default: // This should never happen @@ -315,21 +264,18 @@ namespace SabreTools.Metadata.DatFiles var datItem = partMapping.Value; // Get the part name and skip if there's none - string? partName = partItem.ReadString(Data.Models.Metadata.Part.NameKey); + string? partName = partItem.Name; if (partName is null) continue; // Create the part in the dictionary, if needed if (!partItems.ContainsKey(partName)) - partItems[partName] = []; + partItems[partName] = new(); // Copy over string values - partItems[partName][Data.Models.Metadata.Part.NameKey] = partName; - if (!partItems[partName].ContainsKey(Data.Models.Metadata.Part.InterfaceKey)) - partItems[partName][Data.Models.Metadata.Part.InterfaceKey] = partItem.ReadString(Data.Models.Metadata.Part.InterfaceKey); - - // Clear any empty fields - ClearEmptyKeys(partItems[partName]); + partItems[partName].Name = partName; + if (partItems[partName].Interface == null) + partItems[partName].Interface = partItem.Interface; // If the item has a DataArea mapping if (dataAreaMappings.TryGetValue(partItem, out (Data.Models.Metadata.DataArea, Data.Models.Metadata.Rom) dataAreaMap)) @@ -337,19 +283,16 @@ namespace SabreTools.Metadata.DatFiles // Get the mapped items var (dataArea, romItem) = dataAreaMap; - // Clear any empty fields - ClearEmptyKeys(romItem); - // Get the data area name and skip if there's none - string? dataAreaName = dataArea.ReadString(Data.Models.Metadata.DataArea.NameKey); + string? dataAreaName = dataArea.Name; if (dataAreaName is not null) { // Get existing data areas as a list - var dataAreasArr = partItems[partName].Read(Data.Models.Metadata.Part.DataAreaKey) ?? []; + var dataAreasArr = partItems[partName].DataArea ?? []; List dataAreas = [.. dataAreasArr]; // Find the existing disk area to append to, otherwise create a new disk area - int dataAreaIndex = dataAreas.FindIndex(da => da.ReadString(Data.Models.Metadata.DataArea.NameKey) == dataAreaName); + int dataAreaIndex = dataAreas.FindIndex(da => da.Name == dataAreaName); Data.Models.Metadata.DataArea aggregateDataArea; if (dataAreaIndex > -1) { @@ -357,25 +300,18 @@ namespace SabreTools.Metadata.DatFiles } else { - aggregateDataArea = []; - aggregateDataArea[Data.Models.Metadata.DataArea.EndiannessKey] = dataArea.ReadString(Data.Models.Metadata.DataArea.EndiannessKey); - aggregateDataArea[Data.Models.Metadata.DataArea.NameKey] = dataArea.ReadString(Data.Models.Metadata.DataArea.NameKey); - aggregateDataArea[Data.Models.Metadata.DataArea.SizeKey] = dataArea.ReadString(Data.Models.Metadata.DataArea.SizeKey); - aggregateDataArea[Data.Models.Metadata.DataArea.WidthKey] = dataArea.ReadString(Data.Models.Metadata.DataArea.WidthKey); + aggregateDataArea = new() + { + Endianness = dataArea.Endianness, + Name = dataArea.Name, + Size = dataArea.Size, + Width = dataArea.Width, + }; } - // Clear any empty fields - ClearEmptyKeys(aggregateDataArea); - - // Get existing roms as a list - var romsArr = aggregateDataArea.Read(Data.Models.Metadata.DataArea.RomKey) ?? []; - List roms = [.. romsArr]; - // Add the rom to the data area - roms.Add(romItem); - - // Assign back the roms - aggregateDataArea[Data.Models.Metadata.DataArea.RomKey] = roms.ToArray(); + aggregateDataArea.Rom ??= []; + aggregateDataArea.Rom = [.. aggregateDataArea.Rom, romItem]; // Assign back the data area if (dataAreaIndex > -1) @@ -384,7 +320,7 @@ namespace SabreTools.Metadata.DatFiles dataAreas.Add(aggregateDataArea); // Assign back the data areas array - partItems[partName][Data.Models.Metadata.Part.DataAreaKey] = dataAreas.ToArray(); + partItems[partName].DataArea = [.. dataAreas]; } } @@ -394,19 +330,16 @@ namespace SabreTools.Metadata.DatFiles // Get the mapped items var (diskArea, diskItem) = diskAreaMap; - // Clear any empty fields - ClearEmptyKeys(diskItem); - // Get the disk area name and skip if there's none - string? diskAreaName = diskArea.ReadString(Data.Models.Metadata.DiskArea.NameKey); + string? diskAreaName = diskArea.Name; if (diskAreaName is not null) { // Get existing disk areas as a list - var diskAreasArr = partItems[partName].Read(Data.Models.Metadata.Part.DiskAreaKey) ?? []; + var diskAreasArr = partItems[partName].DiskArea ?? []; List diskAreas = [.. diskAreasArr]; // Find the existing disk area to append to, otherwise create a new disk area - int diskAreaIndex = diskAreas.FindIndex(da => da.ReadString(Data.Models.Metadata.DiskArea.NameKey) == diskAreaName); + int diskAreaIndex = diskAreas.FindIndex(da => da.Name == diskAreaName); Data.Models.Metadata.DiskArea aggregateDiskArea; if (diskAreaIndex > -1) { @@ -414,22 +347,12 @@ namespace SabreTools.Metadata.DatFiles } else { - aggregateDiskArea = []; - aggregateDiskArea[Data.Models.Metadata.DiskArea.NameKey] = diskArea.ReadString(Data.Models.Metadata.DiskArea.NameKey); + aggregateDiskArea = new Data.Models.Metadata.DiskArea { Name = diskArea.Name }; } - // Clear any empty fields - ClearEmptyKeys(aggregateDiskArea); - - // Get existing disks as a list - var disksArr = aggregateDiskArea.Read(Data.Models.Metadata.DiskArea.DiskKey) ?? []; - List disks = [.. disksArr]; - - // Add the disk to the data area - disks.Add(diskItem); - - // Assign back the disks - aggregateDiskArea[Data.Models.Metadata.DiskArea.DiskKey] = disks.ToArray(); + // Add the disk to the disk area + aggregateDiskArea.Disk ??= []; + aggregateDiskArea.Disk = [.. aggregateDiskArea.Disk, diskItem]; // Assign back the disk area if (diskAreaIndex > -1) @@ -438,47 +361,27 @@ namespace SabreTools.Metadata.DatFiles diskAreas.Add(aggregateDiskArea); // Assign back the disk areas array - partItems[partName][Data.Models.Metadata.Part.DiskAreaKey] = diskAreas.ToArray(); + partItems[partName].DiskArea = [.. diskAreas]; } } // If the item is a DipSwitch if (datItem is Data.Models.Metadata.DipSwitch dipSwitchItem) { - // Get existing dipswitches as a list - var dipSwitchesArr = partItems[partName].Read(Data.Models.Metadata.Part.DipSwitchKey) ?? []; - List dipSwitches = [.. dipSwitchesArr]; - - // Clear any empty fields - ClearEmptyKeys(dipSwitchItem); - - // Add the dipswitch - dipSwitches.Add(dipSwitchItem); - - // Assign back the dipswitches - partItems[partName][Data.Models.Metadata.Part.DipSwitchKey] = dipSwitches.ToArray(); + partItems[partName].DipSwitch ??= []; + partItems[partName].DipSwitch = [.. partItems[partName].DipSwitch!, dipSwitchItem]; } // If the item is a Feature else if (datItem is Data.Models.Metadata.Feature featureItem) { - // Get existing features as a list - var featuresArr = partItems[partName].Read(Data.Models.Metadata.Part.FeatureKey) ?? []; - List features = [.. featuresArr]; - - // Clear any empty fields - ClearEmptyKeys(featureItem); - - // Add the feature - features.Add(featureItem); - - // Assign back the features - partItems[partName][Data.Models.Metadata.Part.FeatureKey] = features.ToArray(); + partItems[partName].Feature ??= []; + partItems[partName].Feature = [.. partItems[partName].Feature!, featureItem]; } } // Assign the part array to the machine - machine[Data.Models.Metadata.Machine.PartKey] = (Data.Models.Metadata.Part[])[.. partItems.Values]; + machine.Part = [.. partItems.Values]; } // Add the machine to the list @@ -507,22 +410,6 @@ namespace SabreTools.Metadata.DatFiles // Create a machine to hold everything var machine = GetMachineForItemDB(items.First().Key).Value!.GetInternalClone(); - // Handle Trurip object, if it exists - if (machine.ContainsKey(Data.Models.Metadata.Machine.TruripKey)) - { - var trurip = machine.Read(Data.Models.Metadata.Machine.TruripKey); - if (trurip is not null) - { - var truripItem = trurip.ConvertToLogiqx(); - truripItem.Publisher = machine.ReadString(Data.Models.Metadata.Machine.PublisherKey); - truripItem.Year = machine.ReadString(Data.Models.Metadata.Machine.YearKey); - truripItem.Players = machine.ReadString(Data.Models.Metadata.Machine.PlayersKey); - truripItem.Source = machine.ReadString(Data.Models.Metadata.Machine.SourceFileKey); - truripItem.CloneOf = machine.ReadString(Data.Models.Metadata.Machine.CloneOfKey); - machine[Data.Models.Metadata.Machine.TruripKey] = truripItem; - } - } - // Create mapping dictionaries for the Parts, DataAreas, and DiskAreas associated with this machine Dictionary partMappings = []; Dictionary dataAreaMappings = []; @@ -542,184 +429,150 @@ namespace SabreTools.Metadata.DatFiles { case DatItems.Formats.Adjuster adjuster: var adjusterItem = adjuster.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.AdjusterKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.AdjusterKey, adjusterItem); + machine.Adjuster ??= []; + machine.Adjuster = [.. machine.Adjuster, adjusterItem]; break; case DatItems.Formats.Archive archive: var archiveItem = archive.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.ArchiveKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.ArchiveKey, archiveItem); + machine.Archive ??= []; + machine.Archive = [.. machine.Archive, archiveItem]; break; case DatItems.Formats.BiosSet biosSet: var biosSetItem = biosSet.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.BiosSetKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.BiosSetKey, biosSetItem); + machine.BiosSet ??= []; + machine.BiosSet = [.. machine.BiosSet, biosSetItem]; break; case DatItems.Formats.Chip chip: var chipItem = chip.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.ChipKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.ChipKey, chipItem); + machine.Chip ??= []; + machine.Chip = [.. machine.Chip, chipItem]; break; case DatItems.Formats.Configuration configuration: var configurationItem = configuration.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.ConfigurationKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.ConfigurationKey, configurationItem); + machine.Configuration ??= []; + machine.Configuration = [.. machine.Configuration, configurationItem]; break; case DatItems.Formats.Device device: var deviceItem = device.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.DeviceKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.DeviceKey, deviceItem); + machine.Device ??= []; + machine.Device = [.. machine.Device, deviceItem]; break; case DatItems.Formats.DeviceRef deviceRef: var deviceRefItem = deviceRef.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.DeviceRefKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.DeviceRefKey, deviceRefItem); + machine.DeviceRef ??= []; + machine.DeviceRef = [.. machine.DeviceRef, deviceRefItem]; break; case DatItems.Formats.DipSwitch dipSwitch: var dipSwitchItem = dipSwitch.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.DipSwitchKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.DipSwitchKey, dipSwitchItem); + machine.DipSwitch ??= []; + machine.DipSwitch = [.. machine.DipSwitch, dipSwitchItem]; // Add Part mapping - bool dipSwitchContainsPart = dipSwitchItem.ContainsKey(DatItems.Formats.DipSwitch.PartKey); - if (dipSwitchContainsPart) - { - var partItem = dipSwitchItem.Read(DatItems.Formats.DipSwitch.PartKey); - if (partItem is not null) - partMappings[partItem.GetInternalClone()] = dipSwitchItem; - } + if (dipSwitch.Part is not null) + partMappings[dipSwitch.Part.GetInternalClone()] = dipSwitchItem; break; case DatItems.Formats.Disk disk: var diskItem = disk.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.DiskKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.DiskKey, diskItem); + machine.Disk ??= []; + machine.Disk = [.. machine.Disk, diskItem]; // Add Part and DiskArea mappings - bool diskContainsPart = diskItem.ContainsKey(DatItems.Formats.Disk.PartKey); - bool diskContainsDiskArea = diskItem.ContainsKey(DatItems.Formats.Disk.DiskAreaKey); - if (diskContainsPart && diskContainsDiskArea) + if (disk.Part is not null && disk.DiskArea is not null) { - var partItem = diskItem.Read(DatItems.Formats.Disk.PartKey); - if (partItem is not null) - { - var partItemInternal = partItem.GetInternalClone(); - partMappings[partItemInternal] = diskItem; - - var diskAreaItem = diskItem.Read(DatItems.Formats.Disk.DiskAreaKey); - if (diskAreaItem is not null) - diskAreaMappings[partItemInternal] = (diskAreaItem.GetInternalClone(), diskItem); - } + var partItemInternal = disk.Part.GetInternalClone(); + partMappings[partItemInternal] = diskItem; + diskAreaMappings[partItemInternal] = (disk.DiskArea.GetInternalClone(), diskItem); } break; case DatItems.Formats.Display display: var displayItem = ProcessItem(display, machine); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.DisplayKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.DisplayKey, displayItem); + machine.Display ??= []; + machine.Display = [.. machine.Display, displayItem]; break; case DatItems.Formats.Driver driver: - var driverItem = driver.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.DriverKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.DriverKey, driverItem); + machine.Driver = driver.GetInternalClone(); break; case DatItems.Formats.Feature feature: var featureItem = feature.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.FeatureKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.FeatureKey, featureItem); + machine.Feature ??= []; + machine.Feature = [.. machine.Feature, featureItem]; break; case DatItems.Formats.Info info: var infoItem = info.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.InfoKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.InfoKey, infoItem); + machine.Info ??= []; + machine.Info = [.. machine.Info, infoItem]; break; case DatItems.Formats.Input input: - var inputItem = input.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.InputKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.InputKey, inputItem); + machine.Input = input.GetInternalClone(); break; case DatItems.Formats.Media media: var mediaItem = media.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.MediaKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.MediaKey, mediaItem); + machine.Media ??= []; + machine.Media = [.. machine.Media, mediaItem]; break; case DatItems.Formats.PartFeature partFeature: var partFeatureItem = partFeature.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.FeatureKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.FeatureKey, partFeatureItem); + machine.Feature ??= []; + machine.Feature = [.. machine.Feature, partFeatureItem]; // Add Part mapping - bool partFeatureContainsPart = partFeatureItem.ContainsKey(DatItems.Formats.PartFeature.PartKey); - if (partFeatureContainsPart) - { - var partItem = partFeatureItem.Read(DatItems.Formats.PartFeature.PartKey); - if (partItem is not null) - partMappings[partItem.GetInternalClone()] = partFeatureItem; - } + if (partFeature.Part is not null) + partMappings[partFeature.Part.GetInternalClone()] = partFeatureItem; break; case DatItems.Formats.Port port: var portItem = port.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.PortKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.PortKey, portItem); + machine.Port ??= []; + machine.Port = [.. machine.Port, portItem]; break; case DatItems.Formats.RamOption ramOption: var ramOptionItem = ramOption.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.RamOptionKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.RamOptionKey, ramOptionItem); + machine.RamOption ??= []; + machine.RamOption = [.. machine.RamOption, ramOptionItem]; break; case DatItems.Formats.Release release: var releaseItem = release.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.ReleaseKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.ReleaseKey, releaseItem); + machine.Release ??= []; + machine.Release = [.. machine.Release, releaseItem]; break; case DatItems.Formats.Rom rom: - var romItem = ProcessItem(rom, machine); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.RomKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.RomKey, romItem); + var romItem = ProcessItem(rom, machine, rom.Original); + machine.Rom ??= []; + machine.Rom = [.. machine.Rom, romItem]; // Add Part and DataArea mappings - bool romContainsPart = romItem.ContainsKey(DatItems.Formats.Rom.PartKey); - bool romContainsDataArea = romItem.ContainsKey(DatItems.Formats.Rom.DataAreaKey); - if (romContainsPart && romContainsDataArea) + if (rom.Part is not null && rom.DataArea is not null) { - var partItem = romItem.Read(DatItems.Formats.Rom.PartKey); - if (partItem is not null) - { - var partItemInternal = partItem.GetInternalClone(); - partMappings[partItemInternal] = romItem; - - var dataAreaItem = romItem.Read(DatItems.Formats.Rom.DataAreaKey); - if (dataAreaItem is not null) - dataAreaMappings[partItemInternal] = (dataAreaItem.GetInternalClone(), romItem); - } + var partItemInternal = rom.Part.GetInternalClone(); + partMappings[partItemInternal] = romItem; + dataAreaMappings[partItemInternal] = (rom.DataArea.GetInternalClone(), romItem); } break; case DatItems.Formats.Sample sample: var sampleItem = sample.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.SampleKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.SampleKey, sampleItem); + machine.Sample ??= []; + machine.Sample = [.. machine.Sample, sampleItem]; break; case DatItems.Formats.SharedFeat sharedFeat: var sharedFeatItem = sharedFeat.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.SharedFeatKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.SharedFeatKey, sharedFeatItem); + machine.SharedFeat ??= []; + machine.SharedFeat = [.. machine.SharedFeat, sharedFeatItem]; break; case DatItems.Formats.Slot slot: var slotItem = slot.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.SlotKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.SlotKey, slotItem); + machine.Slot ??= []; + machine.Slot = [.. machine.Slot, slotItem]; break; case DatItems.Formats.SoftwareList softwareList: var softwareListItem = softwareList.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.SoftwareListKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.SoftwareListKey, softwareListItem); + machine.SoftwareList ??= []; + machine.SoftwareList = [.. machine.SoftwareList, softwareListItem]; break; case DatItems.Formats.Sound sound: - var soundItem = sound.GetInternalClone(); - EnsureMachineKey(machine, Data.Models.Metadata.Machine.SoundKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.SoundKey, soundItem); + machine.Sound = sound.GetInternalClone(); break; default: // This should never happen @@ -741,21 +594,18 @@ namespace SabreTools.Metadata.DatFiles var datItem = partMapping.Value; // Get the part name and skip if there's none - string? partName = partItem.ReadString(Data.Models.Metadata.Part.NameKey); + string? partName = partItem.Name; if (partName is null) continue; // Create the part in the dictionary, if needed if (!partItems.ContainsKey(partName)) - partItems[partName] = []; + partItems[partName] = new(); // Copy over string values - partItems[partName][Data.Models.Metadata.Part.NameKey] = partName; - if (!partItems[partName].ContainsKey(Data.Models.Metadata.Part.InterfaceKey)) - partItems[partName][Data.Models.Metadata.Part.InterfaceKey] = partItem.ReadString(Data.Models.Metadata.Part.InterfaceKey); - - // Clear any empty fields - ClearEmptyKeys(partItems[partName]); + partItems[partName].Name = partName; + if (partItems[partName].Interface == null) + partItems[partName].Interface = partItem.Interface; // If the item has a DataArea mapping if (dataAreaMappings.TryGetValue(partItem, out (Data.Models.Metadata.DataArea, Data.Models.Metadata.Rom) dataAreaMap)) @@ -763,19 +613,16 @@ namespace SabreTools.Metadata.DatFiles // Get the mapped items var (dataArea, romItem) = dataAreaMap; - // Clear any empty fields - ClearEmptyKeys(romItem); - // Get the data area name and skip if there's none - string? dataAreaName = dataArea.ReadString(Data.Models.Metadata.DataArea.NameKey); + string? dataAreaName = dataArea.Name; if (dataAreaName is not null) { // Get existing data areas as a list - var dataAreasArr = partItems[partName].Read(Data.Models.Metadata.Part.DataAreaKey) ?? []; + var dataAreasArr = partItems[partName].DataArea ?? []; List dataAreas = [.. dataAreasArr]; // Find the existing disk area to append to, otherwise create a new disk area - int dataAreaIndex = dataAreas.FindIndex(da => da.ReadString(Data.Models.Metadata.DataArea.NameKey) == dataAreaName); + int dataAreaIndex = dataAreas.FindIndex(da => da.Name == dataAreaName); Data.Models.Metadata.DataArea aggregateDataArea; if (dataAreaIndex > -1) { @@ -783,25 +630,18 @@ namespace SabreTools.Metadata.DatFiles } else { - aggregateDataArea = []; - aggregateDataArea[Data.Models.Metadata.DataArea.EndiannessKey] = dataArea.ReadString(Data.Models.Metadata.DataArea.EndiannessKey); - aggregateDataArea[Data.Models.Metadata.DataArea.NameKey] = dataArea.ReadString(Data.Models.Metadata.DataArea.NameKey); - aggregateDataArea[Data.Models.Metadata.DataArea.SizeKey] = dataArea.ReadString(Data.Models.Metadata.DataArea.SizeKey); - aggregateDataArea[Data.Models.Metadata.DataArea.WidthKey] = dataArea.ReadString(Data.Models.Metadata.DataArea.WidthKey); + aggregateDataArea = new Data.Models.Metadata.DataArea + { + Endianness = dataArea.Endianness, + Name = dataArea.Name, + Size = dataArea.Size, + Width = dataArea.Width, + }; } - // Clear any empty fields - ClearEmptyKeys(aggregateDataArea); - - // Get existing roms as a list - var romsArr = aggregateDataArea.Read(Data.Models.Metadata.DataArea.RomKey) ?? []; - List roms = [.. romsArr]; - // Add the rom to the data area - roms.Add(romItem); - - // Assign back the roms - aggregateDataArea[Data.Models.Metadata.DataArea.RomKey] = roms.ToArray(); + aggregateDataArea.Rom ??= []; + aggregateDataArea.Rom = [.. aggregateDataArea.Rom, romItem]; // Assign back the data area if (dataAreaIndex > -1) @@ -810,7 +650,7 @@ namespace SabreTools.Metadata.DatFiles dataAreas.Add(aggregateDataArea); // Assign back the data areas array - partItems[partName][Data.Models.Metadata.Part.DataAreaKey] = dataAreas.ToArray(); + partItems[partName].DataArea = [.. dataAreas]; } } @@ -820,19 +660,16 @@ namespace SabreTools.Metadata.DatFiles // Get the mapped items var (diskArea, diskItem) = diskAreaMap; - // Clear any empty fields - ClearEmptyKeys(diskItem); - // Get the disk area name and skip if there's none - string? diskAreaName = diskArea.ReadString(Data.Models.Metadata.DiskArea.NameKey); + string? diskAreaName = diskArea.Name; if (diskAreaName is not null) { // Get existing disk areas as a list - var diskAreasArr = partItems[partName].Read(Data.Models.Metadata.Part.DiskAreaKey) ?? []; + var diskAreasArr = partItems[partName].DiskArea ?? []; List diskAreas = [.. diskAreasArr]; // Find the existing disk area to append to, otherwise create a new disk area - int diskAreaIndex = diskAreas.FindIndex(da => da.ReadString(Data.Models.Metadata.DiskArea.NameKey) == diskAreaName); + int diskAreaIndex = diskAreas.FindIndex(da => da.Name == diskAreaName); Data.Models.Metadata.DiskArea aggregateDiskArea; if (diskAreaIndex > -1) { @@ -840,22 +677,12 @@ namespace SabreTools.Metadata.DatFiles } else { - aggregateDiskArea = []; - aggregateDiskArea[Data.Models.Metadata.DiskArea.NameKey] = diskArea.ReadString(Data.Models.Metadata.DiskArea.NameKey); + aggregateDiskArea = new Data.Models.Metadata.DiskArea { Name = diskArea.Name }; } - // Clear any empty fields - ClearEmptyKeys(aggregateDiskArea); - - // Get existing disks as a list - var disksArr = aggregateDiskArea.Read(Data.Models.Metadata.DiskArea.DiskKey) ?? []; - List disks = [.. disksArr]; - - // Add the disk to the data area - disks.Add(diskItem); - - // Assign back the disks - aggregateDiskArea[Data.Models.Metadata.DiskArea.DiskKey] = disks.ToArray(); + // Add the disk to the disk area + aggregateDiskArea.Disk ??= []; + aggregateDiskArea.Disk = [.. aggregateDiskArea.Disk, diskItem]; // Assign back the disk area if (diskAreaIndex > -1) @@ -864,47 +691,27 @@ namespace SabreTools.Metadata.DatFiles diskAreas.Add(aggregateDiskArea); // Assign back the disk areas array - partItems[partName][Data.Models.Metadata.Part.DiskAreaKey] = diskAreas.ToArray(); + partItems[partName].DiskArea = [.. diskAreas]; } } // If the item is a DipSwitch if (datItem is Data.Models.Metadata.DipSwitch dipSwitchItem) { - // Get existing dipswitches as a list - var dipSwitchesArr = partItems[partName].Read(Data.Models.Metadata.Part.DipSwitchKey) ?? []; - List dipSwitches = [.. dipSwitchesArr]; - - // Clear any empty fields - ClearEmptyKeys(dipSwitchItem); - - // Add the dipswitch - dipSwitches.Add(dipSwitchItem); - - // Assign back the dipswitches - partItems[partName][Data.Models.Metadata.Part.DipSwitchKey] = dipSwitches.ToArray(); + partItems[partName].DipSwitch ??= []; + partItems[partName].DipSwitch = [.. partItems[partName].DipSwitch!, dipSwitchItem]; } // If the item is a Feature else if (datItem is Data.Models.Metadata.Feature featureItem) { - // Get existing features as a list - var featuresArr = partItems[partName].Read(Data.Models.Metadata.Part.FeatureKey) ?? []; - List features = [.. featuresArr]; - - // Clear any empty fields - ClearEmptyKeys(featureItem); - - // Add the feature - features.Add(featureItem); - - // Assign back the features - partItems[partName][Data.Models.Metadata.Part.FeatureKey] = features.ToArray(); + partItems[partName].Feature ??= []; + partItems[partName].Feature = [.. partItems[partName].Feature!, featureItem]; } } // Assign the part array to the machine - machine[Data.Models.Metadata.Machine.PartKey] = (Data.Models.Metadata.Part[])[.. partItems.Values]; + machine.Part = [.. partItems.Values]; } // Add the machine to the list @@ -929,35 +736,21 @@ namespace SabreTools.Metadata.DatFiles var displayItem = item.GetInternalClone(); // Create a Video for any item that has specific fields - if (displayItem.ContainsKey(Data.Models.Metadata.Video.AspectXKey)) + if (displayItem.AspectX != null) { var videoItem = new Data.Models.Metadata.Video { - [Data.Models.Metadata.Video.AspectXKey] = displayItem.ReadLong(Data.Models.Metadata.Video.AspectXKey).ToString(), - [Data.Models.Metadata.Video.AspectYKey] = displayItem.ReadLong(Data.Models.Metadata.Video.AspectYKey).ToString(), - [Data.Models.Metadata.Video.HeightKey] = displayItem.ReadLong(Data.Models.Metadata.Display.HeightKey).ToString(), - [Data.Models.Metadata.Video.RefreshKey] = displayItem.ReadDouble(Data.Models.Metadata.Display.RefreshKey).ToString(), - [Data.Models.Metadata.Video.ScreenKey] = displayItem.ReadString(Data.Models.Metadata.Display.DisplayTypeKey).AsDisplayType()?.AsStringValue(), - [Data.Models.Metadata.Video.WidthKey] = displayItem.ReadLong(Data.Models.Metadata.Display.WidthKey).ToString() + AspectX = displayItem.AspectX, + AspectY = displayItem.AspectY, + Height = displayItem.Height, + Orientation = displayItem.Rotate, + Refresh = displayItem.Refresh, + Screen = displayItem.DisplayType, + Width = displayItem.Width, }; - switch (displayItem.ReadLong(Data.Models.Metadata.Display.RotateKey)) - { - case 0: - case 180: - videoItem[Data.Models.Metadata.Video.OrientationKey] = "horizontal"; - break; - case 90: - case 270: - videoItem[Data.Models.Metadata.Video.OrientationKey] = "vertical"; - break; - default: - // This should never happen - break; - } - - EnsureMachineKey(machine, Data.Models.Metadata.Machine.VideoKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.VideoKey, videoItem); + machine.Video ??= []; + machine.Video = [.. machine.Video, videoItem]; } return displayItem; @@ -968,99 +761,94 @@ namespace SabreTools.Metadata.DatFiles /// /// Item to convert /// Machine to use for Part and DataArea + /// Original for OpenMSX /// /// This method is required because both a Rom and a Dump /// item might be created and added for a given Rom input. /// - private static Data.Models.Metadata.Rom ProcessItem(DatItems.Formats.Rom item, Data.Models.Metadata.Machine machine) + private static Data.Models.Metadata.Rom ProcessItem(DatItems.Formats.Rom item, Data.Models.Metadata.Machine machine, DatItems.Formats.Original? original) { var romItem = item.GetInternalClone(); // Create a Dump for every Rom that has a subtype - switch (romItem.ReadString(Data.Models.Metadata.Rom.OpenMSXMediaType).AsOpenMSXSubType()) + switch (romItem.OpenMSXMediaType) { case OpenMSXSubType.Rom: - var dumpRom = new Data.Models.Metadata.Dump(); - var rom = new Data.Models.Metadata.Rom(); + var rom = new Data.Models.Metadata.Rom + { + Name = romItem.Name, + Offset = romItem.Start ?? romItem.Offset, + OpenMSXType = romItem.OpenMSXType, + Remark = romItem.Remark, + SHA1 = romItem.SHA1, + Start = romItem.Start ?? romItem.Offset, + }; - rom[Data.Models.Metadata.Rom.NameKey] = romItem.ReadString(Data.Models.Metadata.Rom.NameKey); - rom[Data.Models.Metadata.Rom.OffsetKey] = romItem.ReadString(Data.Models.Metadata.Rom.StartKey) ?? romItem.ReadString(Data.Models.Metadata.Rom.OffsetKey); - rom[Data.Models.Metadata.Rom.OpenMSXType] = romItem.ReadString(Data.Models.Metadata.Rom.OpenMSXType); - rom[Data.Models.Metadata.Rom.RemarkKey] = romItem.ReadString(Data.Models.Metadata.Rom.RemarkKey); - rom[Data.Models.Metadata.Rom.SHA1Key] = romItem.ReadString(Data.Models.Metadata.Rom.SHA1Key); - rom[Data.Models.Metadata.Rom.StartKey] = romItem.ReadString(Data.Models.Metadata.Rom.StartKey) ?? romItem.ReadString(Data.Models.Metadata.Rom.OffsetKey); - - dumpRom[Data.Models.Metadata.Dump.RomKey] = rom; - - var romOriginal = romItem.Read("ORIGINAL"); - if (romOriginal is not null) + var dumpRom = new Data.Models.Metadata.Dump { Rom = rom }; + if (original is not null) { var newOriginal = new Data.Models.Metadata.Original { - [Data.Models.Metadata.Original.ValueKey] = romOriginal.Value.FromYesNo(), - [Data.Models.Metadata.Original.ContentKey] = romOriginal.Content, + Value = original.Value, + Content = original.Content, }; - dumpRom[Data.Models.Metadata.Dump.OriginalKey] = newOriginal; + dumpRom.Original = newOriginal; } - EnsureMachineKey(machine, Data.Models.Metadata.Machine.DumpKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.DumpKey, dumpRom); + machine.Dump ??= []; + machine.Dump = [.. machine.Dump, dumpRom]; break; case OpenMSXSubType.MegaRom: - var dumpMegaRom = new Data.Models.Metadata.Dump(); - var megaRom = new Data.Models.Metadata.Rom(); + var megaRom = new Data.Models.Metadata.Rom + { + Name = romItem.Name, + Offset = romItem.Start ?? romItem.Offset, + OpenMSXType = romItem.OpenMSXType, + Remark = romItem.Remark, + SHA1 = romItem.SHA1, + Start = romItem.Start ?? romItem.Offset, + }; - megaRom[Data.Models.Metadata.Rom.NameKey] = romItem.ReadString(Data.Models.Metadata.Rom.NameKey); - megaRom[Data.Models.Metadata.Rom.OffsetKey] = romItem.ReadString(Data.Models.Metadata.Rom.StartKey) ?? romItem.ReadString(Data.Models.Metadata.Rom.OffsetKey); - megaRom[Data.Models.Metadata.Rom.OpenMSXType] = romItem.ReadString(Data.Models.Metadata.Rom.OpenMSXType); - megaRom[Data.Models.Metadata.Rom.RemarkKey] = romItem.ReadString(Data.Models.Metadata.Rom.RemarkKey); - megaRom[Data.Models.Metadata.Rom.SHA1Key] = romItem.ReadString(Data.Models.Metadata.Rom.SHA1Key); - megaRom[Data.Models.Metadata.Rom.StartKey] = romItem.ReadString(Data.Models.Metadata.Rom.StartKey) ?? romItem.ReadString(Data.Models.Metadata.Rom.OffsetKey); - - dumpMegaRom[Data.Models.Metadata.Dump.MegaRomKey] = megaRom; - - var megaRomOriginal = romItem.Read("ORIGINAL"); - if (megaRomOriginal is not null) + var dumpMegaRom = new Data.Models.Metadata.Dump { MegaRom = megaRom }; + if (original is not null) { var newOriginal = new Data.Models.Metadata.Original { - [Data.Models.Metadata.Original.ValueKey] = megaRomOriginal.Value.FromYesNo(), - [Data.Models.Metadata.Original.ContentKey] = megaRomOriginal.Content, + Value = original.Value, + Content = original.Content, }; - dumpMegaRom[Data.Models.Metadata.Dump.OriginalKey] = newOriginal; + dumpMegaRom.Original = newOriginal; } - EnsureMachineKey(machine, Data.Models.Metadata.Machine.DumpKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.DumpKey, dumpMegaRom); + machine.Dump ??= []; + machine.Dump = [.. machine.Dump, dumpMegaRom]; break; case OpenMSXSubType.SCCPlusCart: - var dumpSccPlusCart = new Data.Models.Metadata.Dump(); - var sccPlusCart = new Data.Models.Metadata.Rom(); + var sccPlusCart = new Data.Models.Metadata.Rom + { + Name = romItem.Name, + Offset = romItem.Start ?? romItem.Offset, + OpenMSXType = romItem.OpenMSXType, + Remark = romItem.Remark, + SHA1 = romItem.SHA1, + Start = romItem.Start ?? romItem.Offset, + }; - sccPlusCart[Data.Models.Metadata.Rom.NameKey] = romItem.ReadString(Data.Models.Metadata.Rom.NameKey); - sccPlusCart[Data.Models.Metadata.Rom.OffsetKey] = romItem.ReadString(Data.Models.Metadata.Rom.StartKey) ?? romItem.ReadString(Data.Models.Metadata.Rom.OffsetKey); - sccPlusCart[Data.Models.Metadata.Rom.OpenMSXType] = romItem.ReadString(Data.Models.Metadata.Rom.OpenMSXType); - sccPlusCart[Data.Models.Metadata.Rom.RemarkKey] = romItem.ReadString(Data.Models.Metadata.Rom.RemarkKey); - sccPlusCart[Data.Models.Metadata.Rom.SHA1Key] = romItem.ReadString(Data.Models.Metadata.Rom.SHA1Key); - sccPlusCart[Data.Models.Metadata.Rom.StartKey] = romItem.ReadString(Data.Models.Metadata.Rom.StartKey) ?? romItem.ReadString(Data.Models.Metadata.Rom.OffsetKey); - - dumpSccPlusCart[Data.Models.Metadata.Dump.RomKey] = sccPlusCart; - - var sccPlusCartOriginal = romItem.Read("ORIGINAL"); - if (sccPlusCartOriginal is not null) + var dumpSccPlusCart = new Data.Models.Metadata.Dump { SCCPlusCart = sccPlusCart }; + if (original is not null) { var newOriginal = new Data.Models.Metadata.Original { - [Data.Models.Metadata.Original.ValueKey] = sccPlusCartOriginal.Value.FromYesNo(), - [Data.Models.Metadata.Original.ContentKey] = sccPlusCartOriginal.Content, + Value = original.Value, + Content = original.Content, }; - dumpSccPlusCart[Data.Models.Metadata.Dump.OriginalKey] = newOriginal; + dumpSccPlusCart.Original = newOriginal; } - EnsureMachineKey(machine, Data.Models.Metadata.Machine.DumpKey); - AppendToMachineKey(machine, Data.Models.Metadata.Machine.DumpKey, dumpSccPlusCart); + machine.Dump ??= []; + machine.Dump = [.. machine.Dump, dumpSccPlusCart]; break; default: // This should never happen @@ -1070,51 +858,6 @@ namespace SabreTools.Metadata.DatFiles return romItem; } - /// - /// Ensure a key in a machine - /// - private static void EnsureMachineKey(Data.Models.Metadata.Machine machine, string key) - { - if (machine.Read(key) is null) -#if NET20 || NET35 || NET40 || NET452 - machine[key] = new T[0]; -#else - machine[key] = System.Array.Empty(); -#endif - } - - /// - /// Append to a machine key as if its an array - /// - private static void AppendToMachineKey(Data.Models.Metadata.Machine machine, string key, T value) where T : Data.Models.Metadata.DatItem - { - // Get the existing array - var arr = machine.Read(key); - if (arr is null) - return; - - // Trim all null fields - ClearEmptyKeys(value); - - // Add to the array - List list = [.. arr]; - list.Add(value); - machine[key] = list.ToArray(); - } - - /// - /// Clear empty keys from a DictionaryBase object - /// - private static void ClearEmptyKeys(Data.Models.Metadata.DictionaryBase obj) - { - string[] fieldNames = [.. obj.Keys]; - foreach (string fieldName in fieldNames) - { - if (obj[fieldName] is null) - obj.Remove(fieldName); - } - } - #endregion } } diff --git a/SabreTools.Metadata.DatFiles/DatFile.cs b/SabreTools.Metadata.DatFiles/DatFile.cs index 757c2fcd..4cf55e40 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; using SabreTools.Hashing; using SabreTools.Logging; using SabreTools.Metadata.DatItems; @@ -19,7 +20,7 @@ namespace SabreTools.Metadata.DatFiles [JsonObject("datfile"), XmlRoot("datfile")] public abstract partial class DatFile { - #region Fields + #region Properties /// /// Header values @@ -55,7 +56,7 @@ namespace SabreTools.Metadata.DatFiles /// /// List of supported types for writing /// - public abstract ItemType[] SupportedTypes { get; } + public abstract Data.Models.Metadata.ItemType[] SupportedTypes { get; } #endregion @@ -95,9 +96,9 @@ namespace SabreTools.Metadata.DatFiles public void FillHeaderFromPath(string path, bool bare) { // Get the header strings - string? name = Header.ReadString(Data.Models.Metadata.Header.NameKey); - string? description = Header.ReadString(Data.Models.Metadata.Header.DescriptionKey); - string? date = Header.ReadString(Data.Models.Metadata.Header.DateKey); + string? name = Header.Name; + string? description = Header.Description; + string? date = Header.Date; // If the description is defined but not the name, set the name from the description if (string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(description)) @@ -116,7 +117,7 @@ namespace SabreTools.Metadata.DatFiles { string[] splitpath = path.TrimEnd(Path.DirectorySeparatorChar).Split(Path.DirectorySeparatorChar); #if NETFRAMEWORK || NETSTANDARD - name = splitpath[splitpath.Length - 1]; + name = splitpath[splitpath.Length - 1] + (bare ? string.Empty : $" ({date})"); description = splitpath[splitpath.Length - 1] + (bare ? string.Empty : $" ({date})"); #else name = splitpath[^1] + (bare ? string.Empty : $" ({date})"); @@ -129,8 +130,8 @@ namespace SabreTools.Metadata.DatFiles description = description?.Trim(); // Set the fields back - Header.Write(Data.Models.Metadata.Header.NameKey, name); - Header.Write(Data.Models.Metadata.Header.DescriptionKey, description); + Header.Name = name; + Header.Description = description; } #endregion @@ -495,7 +496,7 @@ namespace SabreTools.Metadata.DatFiles // Get the name to update string? name = (useRomName ? item.GetName() - : machine?.GetName()) ?? string.Empty; + : machine?.Name) ?? string.Empty; // If we're in Depot mode, take care of that instead if (Modifiers.OutputDepot?.IsActive == true) @@ -503,41 +504,31 @@ 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('\\', '/'); - item.SetName($"{pre}{name}{post}"); - } - } - else if (item is DatItems.Formats.File file) - { - // We can only write out if there's a SHA-1 - string? sha1 = file.SHA1; - if (!string.IsNullOrEmpty(sha1)) - { - name = Utilities.GetDepotPath(sha1, Modifiers.OutputDepot.Depth)?.Replace('\\', '/'); - item.SetName($"{pre}{name}{post}"); + name = Modifiers.OutputDepot.GetDepotPath(sha1)?.Replace('\\', '/'); + disk.Name = $"{pre}{name}{post}"; } } else if (item is Media media) { // We can only write out if there's a SHA-1 - string? sha1 = media.ReadString(Data.Models.Metadata.Media.SHA1Key); + string? sha1 = media.SHA1; if (!string.IsNullOrEmpty(sha1)) { - name = Utilities.GetDepotPath(sha1, Modifiers.OutputDepot.Depth)?.Replace('\\', '/'); - item.SetName($"{pre}{name}{post}"); + name = Modifiers.OutputDepot.GetDepotPath(sha1)?.Replace('\\', '/'); + media.Name = $"{pre}{name}{post}"; } } else if (item is Rom rom) { // We can only write out if there's a SHA-1 - string? sha1 = rom.ReadString(Data.Models.Metadata.Rom.SHA1Key); + string? sha1 = rom.SHA1; if (!string.IsNullOrEmpty(sha1)) { - name = Utilities.GetDepotPath(sha1, Modifiers.OutputDepot.Depth)?.Replace('\\', '/'); - item.SetName($"{pre}{name}{post}"); + name = Modifiers.OutputDepot.GetDepotPath(sha1)?.Replace('\\', '/'); + rom.Name = $"{pre}{name}{post}"; } } @@ -561,14 +552,14 @@ namespace SabreTools.Metadata.DatFiles name += Modifiers.AddExtension; if (useRomName && Modifiers.GameName) - name = Path.Combine(machine?.GetName() ?? string.Empty, name); + name = Path.Combine(machine?.Name ?? string.Empty, name); // Now assign back the formatted name name = $"{pre}{name}{post}"; if (useRomName) item.SetName(name); else - machine?.SetName(name); + machine?.Name = name; } /// @@ -581,15 +572,15 @@ namespace SabreTools.Metadata.DatFiles protected internal static string FormatPrefixPostfix(DatItem item, Machine? machine, string fix) { // Initialize strings - string? type = item.ReadString(Data.Models.Metadata.DatItem.TypeKey); + Data.Models.Metadata.ItemType type = item.ItemType; string - game = machine?.GetName() ?? string.Empty, - manufacturer = machine?.ReadString(Data.Models.Metadata.Machine.ManufacturerKey) ?? string.Empty, - publisher = machine?.ReadString(Data.Models.Metadata.Machine.PublisherKey) ?? string.Empty, - category = machine?.ReadString(Data.Models.Metadata.Machine.CategoryKey) ?? string.Empty, - name = item.GetName() ?? type.AsItemType().AsStringValue() ?? string.Empty, + game = machine?.Name ?? string.Empty, + manufacturer = machine?.Manufacturer ?? string.Empty, + publisher = machine?.Publisher ?? string.Empty, + category = machine?.Category is null ? string.Empty : string.Join(", ", machine.Category), + name = item.GetName() ?? type.AsStringValue() ?? string.Empty, crc16 = string.Empty, - crc = string.Empty, + crc32 = string.Empty, crc64 = string.Empty, md2 = string.Empty, md4 = string.Empty, @@ -606,41 +597,41 @@ 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) { name = $"{file.Id}.{file.Extension}"; size = file.Size.ToString() ?? string.Empty; - crc = file.CRC ?? string.Empty; + crc32 = file.CRC ?? string.Empty; md5 = file.MD5 ?? string.Empty; sha1 = file.SHA1 ?? string.Empty; sha256 = file.SHA256 ?? string.Empty; } else if (item is Media media) { - md5 = media.ReadString(Data.Models.Metadata.Media.MD5Key) ?? string.Empty; - sha1 = media.ReadString(Data.Models.Metadata.Media.SHA1Key) ?? string.Empty; - sha256 = media.ReadString(Data.Models.Metadata.Media.SHA256Key) ?? string.Empty; - spamsum = media.ReadString(Data.Models.Metadata.Media.SpamSumKey) ?? string.Empty; + md5 = media.MD5 ?? string.Empty; + sha1 = media.SHA1 ?? string.Empty; + sha256 = media.SHA256 ?? string.Empty; + spamsum = media.SpamSum ?? string.Empty; } else if (item is Rom rom) { - crc16 = rom.ReadString(Data.Models.Metadata.Rom.CRC16Key) ?? string.Empty; - crc = rom.ReadString(Data.Models.Metadata.Rom.CRCKey) ?? string.Empty; - crc64 = rom.ReadString(Data.Models.Metadata.Rom.CRC64Key) ?? string.Empty; - md2 = rom.ReadString(Data.Models.Metadata.Rom.MD2Key) ?? string.Empty; - md4 = rom.ReadString(Data.Models.Metadata.Rom.MD4Key) ?? string.Empty; - md5 = rom.ReadString(Data.Models.Metadata.Rom.MD5Key) ?? string.Empty; - ripemd128 = rom.ReadString(Data.Models.Metadata.Rom.RIPEMD128Key) ?? string.Empty; - ripemd160 = rom.ReadString(Data.Models.Metadata.Rom.RIPEMD160Key) ?? string.Empty; - sha1 = rom.ReadString(Data.Models.Metadata.Rom.SHA1Key) ?? string.Empty; - sha256 = rom.ReadString(Data.Models.Metadata.Rom.SHA256Key) ?? string.Empty; - sha384 = rom.ReadString(Data.Models.Metadata.Rom.SHA384Key) ?? string.Empty; - sha512 = rom.ReadString(Data.Models.Metadata.Rom.SHA512Key) ?? string.Empty; - size = rom.ReadLong(Data.Models.Metadata.Rom.SizeKey).ToString() ?? string.Empty; - spamsum = rom.ReadString(Data.Models.Metadata.Rom.SpamSumKey) ?? string.Empty; + crc16 = rom.CRC16 ?? string.Empty; + crc32 = rom.CRC32 ?? string.Empty; + crc64 = rom.CRC64 ?? string.Empty; + md2 = rom.MD2 ?? string.Empty; + md4 = rom.MD4 ?? string.Empty; + md5 = rom.MD5 ?? string.Empty; + ripemd128 = rom.RIPEMD128 ?? string.Empty; + ripemd160 = rom.RIPEMD160 ?? string.Empty; + sha1 = rom.SHA1 ?? string.Empty; + sha256 = rom.SHA256 ?? string.Empty; + sha384 = rom.SHA384 ?? string.Empty; + sha512 = rom.SHA512 ?? string.Empty; + size = rom.Size.ToString() ?? string.Empty; + spamsum = rom.SpamSum ?? string.Empty; } // Now do bulk replacement where possible @@ -652,7 +643,8 @@ namespace SabreTools.Metadata.DatFiles .Replace("%publisher%", publisher) .Replace("%category%", category) .Replace("%crc16%", crc16) - .Replace("%crc%", crc) + .Replace("%crc%", crc32) + .Replace("%crc32%", crc32) .Replace("%crc64%", crc64) .Replace("%md2%", md2) .Replace("%md4%", md4) @@ -681,42 +673,29 @@ namespace SabreTools.Metadata.DatFiles return item; // If the item has a size - if (rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) is not null) + if (rom.Size is not null) return rom; // If the item CRC isn't "null" - if (rom.ReadString(Data.Models.Metadata.Rom.CRCKey) != "null") + if (rom.CRC32 != "null") return rom; // If the Rom has "null" characteristics, ensure all fields - rom.SetName(rom.GetName() == "null" ? "-" : rom.GetName()); - rom.Write(Data.Models.Metadata.Rom.SizeKey, "0"); - rom.Write(Data.Models.Metadata.Rom.CRC16Key, - rom.ReadString(Data.Models.Metadata.Rom.CRC16Key) == "null" ? HashType.CRC16.ZeroString : null); - rom.Write(Data.Models.Metadata.Rom.CRCKey, - rom.ReadString(Data.Models.Metadata.Rom.CRCKey) == "null" ? HashType.CRC32.ZeroString : null); - rom.Write(Data.Models.Metadata.Rom.CRC64Key, - rom.ReadString(Data.Models.Metadata.Rom.CRC64Key) == "null" ? HashType.CRC64.ZeroString : null); - rom.Write(Data.Models.Metadata.Rom.MD2Key, - rom.ReadString(Data.Models.Metadata.Rom.MD2Key) == "null" ? HashType.MD2.ZeroString : null); - rom.Write(Data.Models.Metadata.Rom.MD4Key, - rom.ReadString(Data.Models.Metadata.Rom.MD4Key) == "null" ? HashType.MD4.ZeroString : null); - rom.Write(Data.Models.Metadata.Rom.MD5Key, - rom.ReadString(Data.Models.Metadata.Rom.MD5Key) == "null" ? HashType.MD5.ZeroString : null); - rom.Write(Data.Models.Metadata.Rom.RIPEMD128Key, - rom.ReadString(Data.Models.Metadata.Rom.RIPEMD128Key) == "null" ? HashType.RIPEMD128.ZeroString : null); - rom.Write(Data.Models.Metadata.Rom.RIPEMD160Key, - rom.ReadString(Data.Models.Metadata.Rom.RIPEMD160Key) == "null" ? HashType.RIPEMD160.ZeroString : null); - rom.Write(Data.Models.Metadata.Rom.SHA1Key, - rom.ReadString(Data.Models.Metadata.Rom.SHA1Key) == "null" ? HashType.SHA1.ZeroString : null); - rom.Write(Data.Models.Metadata.Rom.SHA256Key, - rom.ReadString(Data.Models.Metadata.Rom.SHA256Key) == "null" ? HashType.SHA256.ZeroString : null); - rom.Write(Data.Models.Metadata.Rom.SHA384Key, - rom.ReadString(Data.Models.Metadata.Rom.SHA384Key) == "null" ? HashType.SHA384.ZeroString : null); - rom.Write(Data.Models.Metadata.Rom.SHA512Key, - rom.ReadString(Data.Models.Metadata.Rom.SHA512Key) == "null" ? HashType.SHA512.ZeroString : null); - rom.Write(Data.Models.Metadata.Rom.SpamSumKey, - rom.ReadString(Data.Models.Metadata.Rom.SpamSumKey) == "null" ? HashType.SpamSum.ZeroString : null); + rom.Name = rom.Name == "null" ? "-" : rom.Name; + rom.Size = 0; + rom.CRC16 = rom.CRC16 == "null" ? HashType.CRC16.ZeroString : null; + rom.CRC32 = rom.CRC32 == "null" ? HashType.CRC32.ZeroString : null; + rom.CRC64 = rom.CRC64 == "null" ? HashType.CRC64.ZeroString : null; + rom.MD2 = rom.MD2 == "null" ? HashType.MD2.ZeroString : null; + rom.MD4 = rom.MD4 == "null" ? HashType.MD4.ZeroString : null; + rom.MD5 = rom.MD5 == "null" ? HashType.MD5.ZeroString : null; + rom.RIPEMD128 = rom.RIPEMD128 == "null" ? HashType.RIPEMD128.ZeroString : null; + rom.RIPEMD160 = rom.RIPEMD160 == "null" ? HashType.RIPEMD160.ZeroString : null; + rom.SHA1 = rom.SHA1 == "null" ? HashType.SHA1.ZeroString : null; + rom.SHA256 = rom.SHA256 == "null" ? HashType.SHA256.ZeroString : null; + rom.SHA384 = rom.SHA384 == "null" ? HashType.SHA384.ZeroString : null; + rom.SHA512 = rom.SHA512 == "null" ? HashType.SHA512.ZeroString : null; + rom.SpamSum = rom.SpamSum == "null" ? HashType.SpamSum.ZeroString : null; return rom; } @@ -741,7 +720,7 @@ namespace SabreTools.Metadata.DatFiles foreach (DatItem datItem in datItems) { - ItemType itemType = datItem.ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType(); + Data.Models.Metadata.ItemType itemType = datItem.ItemType; if (Array.Exists(SupportedTypes, t => t == itemType)) return true; } @@ -800,12 +779,12 @@ namespace SabreTools.Metadata.DatFiles // Get the last item name, if applicable string lastItemName = lastItem.GetName() - ?? lastItem.ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue() + ?? lastItem.ItemType.AsStringValue() ?? string.Empty; // Get the current item name, if applicable string datItemName = datItem.GetName() - ?? datItem.ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue() + ?? datItem.ItemType.AsStringValue() ?? string.Empty; // If the current item exactly matches the last item, then we don't add it @@ -844,7 +823,6 @@ namespace SabreTools.Metadata.DatFiles // Set the item name back to the datItem datItem.SetName(datItemName); - output.Add(datItem); } @@ -897,12 +875,12 @@ namespace SabreTools.Metadata.DatFiles // Get the last item name, if applicable string lastItemName = lastItem.Value.Value.GetName() - ?? lastItem.Value.Value.ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue() + ?? lastItem.Value.Value.ItemType.AsStringValue() ?? string.Empty; // Get the current item name, if applicable string datItemName = datItem.Value.GetName() - ?? datItem.Value.ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue() + ?? datItem.Value.ItemType.AsStringValue() ?? string.Empty; // Get sources for both items @@ -980,7 +958,7 @@ namespace SabreTools.Metadata.DatFiles } // If the item is supposed to be removed, we ignore - if (datItem.ReadBool(DatItem.RemoveKey) == true) + if (datItem.RemoveFlag) { string itemString = JsonConvert.SerializeObject(datItem, Formatting.None); _logger.Verbose($"Item '{itemString}' was skipped because it was marked for removal"); @@ -999,7 +977,7 @@ namespace SabreTools.Metadata.DatFiles if (ignoreBlanks && datItem is Rom rom) { // If we have a 0-size or blank rom, then we ignore - long? size = rom.ReadLong(Data.Models.Metadata.Rom.SizeKey); + long? size = rom.Size; if (size == 0 || size is null) { string itemString = JsonConvert.SerializeObject(datItem, Formatting.None); @@ -1009,7 +987,7 @@ namespace SabreTools.Metadata.DatFiles } // If we have an item type not in the list of supported values - ItemType itemType = datItem.ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType(); + Data.Models.Metadata.ItemType itemType = datItem.ItemType; if (!Array.Exists(SupportedTypes, t => t == itemType)) { string itemString = JsonConvert.SerializeObject(datItem, Formatting.None); @@ -1038,11 +1016,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}"; @@ -1072,19 +1050,19 @@ namespace SabreTools.Metadata.DatFiles /// private static string GetDuplicateSuffix(Media datItem) { - string? md5 = datItem.ReadString(Data.Models.Metadata.Media.MD5Key); + string? md5 = datItem.MD5; if (!string.IsNullOrEmpty(md5)) return $"_{md5}"; - string? sha1 = datItem.ReadString(Data.Models.Metadata.Media.SHA1Key); + string? sha1 = datItem.SHA1; if (!string.IsNullOrEmpty(sha1)) return $"_{sha1}"; - string? sha256 = datItem.ReadString(Data.Models.Metadata.Media.SHA256Key); + string? sha256 = datItem.SHA256; if (!string.IsNullOrEmpty(sha256)) return $"_{sha256}"; - string? spamSum = datItem.ReadString(Data.Models.Metadata.Media.SpamSumKey); + string? spamSum = datItem.SpamSum; if (!string.IsNullOrEmpty(spamSum)) return $"_{spamSum}"; @@ -1096,55 +1074,55 @@ namespace SabreTools.Metadata.DatFiles /// private static string GetDuplicateSuffix(Rom datItem) { - string? crc16 = datItem.ReadString(Data.Models.Metadata.Rom.CRC16Key); + string? crc16 = datItem.CRC16; if (!string.IsNullOrEmpty(crc16)) return $"_{crc16}"; - string? crc = datItem.ReadString(Data.Models.Metadata.Rom.CRCKey); - if (!string.IsNullOrEmpty(crc)) - return $"_{crc}"; + string? crc32 = datItem.CRC32; + if (!string.IsNullOrEmpty(crc32)) + return $"_{crc32}"; - string? crc64 = datItem.ReadString(Data.Models.Metadata.Rom.CRC64Key); + string? crc64 = datItem.CRC64; if (!string.IsNullOrEmpty(crc64)) return $"_{crc64}"; - string? md2 = datItem.ReadString(Data.Models.Metadata.Rom.MD2Key); + string? md2 = datItem.MD2; if (!string.IsNullOrEmpty(md2)) return $"_{md2}"; - string? md4 = datItem.ReadString(Data.Models.Metadata.Rom.MD4Key); + string? md4 = datItem.MD4; if (!string.IsNullOrEmpty(md4)) return $"_{md4}"; - string? md5 = datItem.ReadString(Data.Models.Metadata.Rom.MD5Key); + string? md5 = datItem.MD5; if (!string.IsNullOrEmpty(md5)) return $"_{md5}"; - string? ripemd128 = datItem.ReadString(Data.Models.Metadata.Rom.RIPEMD128Key); + string? ripemd128 = datItem.RIPEMD128; if (!string.IsNullOrEmpty(ripemd128)) return $"_{ripemd128}"; - string? ripemd160 = datItem.ReadString(Data.Models.Metadata.Rom.RIPEMD160Key); + string? ripemd160 = datItem.RIPEMD160; if (!string.IsNullOrEmpty(ripemd160)) return $"_{ripemd160}"; - string? sha1 = datItem.ReadString(Data.Models.Metadata.Rom.SHA1Key); + string? sha1 = datItem.SHA1; if (!string.IsNullOrEmpty(sha1)) return $"_{sha1}"; - string? sha256 = datItem.ReadString(Data.Models.Metadata.Rom.SHA256Key); + string? sha256 = datItem.SHA256; if (!string.IsNullOrEmpty(sha256)) return $"_{sha256}"; - string? sha384 = datItem.ReadString(Data.Models.Metadata.Rom.SHA384Key); + string? sha384 = datItem.SHA384; if (!string.IsNullOrEmpty(sha384)) return $"_{sha384}"; - string? sha512 = datItem.ReadString(Data.Models.Metadata.Rom.SHA512Key); + string? sha512 = datItem.SHA512; if (!string.IsNullOrEmpty(sha512)) return $"_{sha512}"; - string? spamSum = datItem.ReadString(Data.Models.Metadata.Rom.SpamSumKey); + string? spamSum = datItem.SpamSum; if (!string.IsNullOrEmpty(spamSum)) return $"_{spamSum}"; @@ -1169,21 +1147,21 @@ namespace SabreTools.Metadata.DatFiles // Compare on source if renaming if (!norename) { - int xSourceIndex = x.Read(DatItem.SourceKey)?.Index ?? 0; - int ySourceIndex = y.Read(DatItem.SourceKey)?.Index ?? 0; + int xSourceIndex = x.Source?.Index ?? 0; + int ySourceIndex = y.Source?.Index ?? 0; if (xSourceIndex != ySourceIndex) return xSourceIndex - ySourceIndex; } // If machine names don't match - string? xMachineName = x.GetMachine()?.GetName(); - string? yMachineName = y.GetMachine()?.GetName(); + string? xMachineName = x.Machine?.Name; + string? yMachineName = y.Machine?.Name; if (xMachineName != yMachineName) return nc.Compare(xMachineName, yMachineName); // If types don't match - string? xType = x.ReadString(Data.Models.Metadata.DatItem.TypeKey); - string? yType = y.ReadString(Data.Models.Metadata.DatItem.TypeKey); + string? xType = x.ItemType.AsStringValue(); + string? yType = y.ItemType.AsStringValue(); if (xType != yType) return xType.AsItemType() - yType.AsItemType(); @@ -1233,14 +1211,14 @@ namespace SabreTools.Metadata.DatFiles } // If machine names don't match - string? xMachineName = ItemsDB.GetMachineForItem(x.Key).Value?.GetName(); - string? yMachineName = ItemsDB.GetMachineForItem(y.Key).Value?.GetName(); + string? xMachineName = ItemsDB.GetMachineForItem(x.Key).Value?.Name; + string? yMachineName = ItemsDB.GetMachineForItem(y.Key).Value?.Name; if (xMachineName != yMachineName) return nc.Compare(xMachineName, yMachineName); // If types don't match - string? xType = x.Value.ReadString(Data.Models.Metadata.DatItem.TypeKey); - string? yType = y.Value.ReadString(Data.Models.Metadata.DatItem.TypeKey); + string? xType = x.Value.ItemType.AsStringValue(); + string? yType = y.Value.ItemType.AsStringValue(); if (xType != yType) return xType.AsItemType() - yType.AsItemType(); diff --git a/SabreTools.Metadata.DatFiles/DatHeader.cs b/SabreTools.Metadata.DatFiles/DatHeader.cs index c61c7e1d..9a9ffe06 100644 --- a/SabreTools.Metadata.DatFiles/DatHeader.cs +++ b/SabreTools.Metadata.DatFiles/DatHeader.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; using SabreTools.Metadata.Filter; using MergingFlag = SabreTools.Data.Models.Metadata.MergingFlag; using NodumpFlag = SabreTools.Data.Models.Metadata.NodumpFlag; @@ -13,75 +12,323 @@ namespace SabreTools.Metadata.DatFiles /// Represents all possible DAT header information /// [JsonObject("header"), XmlRoot("header")] - public sealed class DatHeader : ModelBackedItem, ICloneable + public sealed class DatHeader : ICloneable, IEquatable { - #region Constants + #region Properties + + public string? Author + { + get => _internal.Author; + set => _internal.Author = value; + } + + public MergingFlag BiosMode + { + get => _internal.BiosMode; + set => _internal.BiosMode = value; + } + + public string? Build + { + get => _internal.Build; + set => _internal.Build = value; + } + + public Data.Models.OfflineList.CanOpen? CanOpen + { + get => _internal.CanOpen; + set => _internal.CanOpen = value; + } + + [JsonIgnore] + public bool CanOpenSpecified => CanOpen is not null; + + public string? Category + { + get => _internal.Category; + set => _internal.Category = value; + } + + public string? Comment + { + get => _internal.Comment; + set => _internal.Comment = value; + } + + public string? Date + { + get => _internal.Date; + set => _internal.Date = value; + } /// /// Read or write format /// - public const string DatFormatKey = "DATFORMAT"; + public DatFormat? DatFormat { get; set; } - /// - /// External name of the DAT - /// - public const string FileNameKey = "FILENAME"; + public string? DatVersion + { + get => _internal.DatVersion; + set => _internal.DatVersion = value; + } + + public bool? Debug + { + get => _internal.Debug; + set => _internal.Debug = value; + } + + public string? Description + { + get => _internal.Description; + set => _internal.Description = value; + } + + public string? Email + { + get => _internal.Email; + set => _internal.Email = value; + } + + public string? EmulatorVersion + { + get => _internal.EmulatorVersion; + set => _internal.EmulatorVersion = value; + } + + public string? FileName + { + get => _internal.FileName; + set => _internal.FileName = value; + } + + public MergingFlag ForceMerging + { + get => _internal.ForceMerging; + set => _internal.ForceMerging = value; + } + + public NodumpFlag ForceNodump + { + get => _internal.ForceNodump; + set => _internal.ForceNodump = value; + } + + public PackingFlag ForcePacking + { + get => _internal.ForcePacking; + set => _internal.ForcePacking = value; + } + + public bool? ForceZipping + { + get => _internal.ForceZipping; + set => _internal.ForceZipping = value; + } + + public string[]? HeaderRow + { + get => _internal.HeaderRow; + set => _internal.HeaderRow = value; + } + + public string? HeaderSkipper + { + get => _internal.HeaderSkipper; + set => _internal.HeaderSkipper = value; + } + + public string? Homepage + { + get => _internal.Homepage; + set => _internal.Homepage = value; + } + + public string? Id + { + get => _internal.Id; + set => _internal.Id = value; + } + + public Data.Models.OfflineList.Images? Images + { + get => _internal.Images; + set => _internal.Images = value; + } + + [JsonIgnore] + public bool ImagesSpecified => Images is not null; + + public string? ImFolder + { + get => _internal.ImFolder; + set => _internal.ImFolder = value; + } + + public Data.Models.OfflineList.Infos? Infos + { + get => _internal.Infos; + set => _internal.Infos = value; + } + + [JsonIgnore] + public bool InfosSpecified => Infos is not null; + + public bool? LockBiosMode + { + get => _internal.LockBiosMode; + set => _internal.LockBiosMode = value; + } + + public bool? LockRomMode + { + get => _internal.LockRomMode; + set => _internal.LockRomMode = value; + } + + public bool? LockSampleMode + { + get => _internal.LockSampleMode; + set => _internal.LockSampleMode = value; + } + + public string? MameConfig + { + get => _internal.MameConfig; + set => _internal.MameConfig = value; + } + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public Data.Models.OfflineList.NewDat? NewDat + { + get => _internal.NewDat; + set => _internal.NewDat = value; + } + + [JsonIgnore] + public bool NewDatSpecified => NewDat is not null; + + public string? Notes + { + get => _internal.Notes; + set => _internal.Notes = value; + } + + public string? Plugin + { + get => _internal.Plugin; + set => _internal.Plugin = value; + } + + public string? RefName + { + get => _internal.RefName; + set => _internal.RefName = value; + } + + public MergingFlag RomMode + { + get => _internal.RomMode; + set => _internal.RomMode = value; + } + + public string? RomTitle + { + get => _internal.RomTitle; + set => _internal.RomTitle = value; + } + + public string? RootDir + { + get => _internal.RootDir; + set => _internal.RootDir = value; + } + + public MergingFlag SampleMode + { + get => _internal.SampleMode; + set => _internal.SampleMode = value; + } + + public string? SchemaLocation + { + get => _internal.SchemaLocation; + set => _internal.SchemaLocation = value; + } + + public string? ScreenshotsHeight + { + get => _internal.ScreenshotsHeight; + set => _internal.ScreenshotsHeight = value; + } + + public string? ScreenshotsWidth + { + get => _internal.ScreenshotsWidth; + set => _internal.ScreenshotsWidth = value; + } + + public Data.Models.OfflineList.Search? Search + { + get => _internal.Search; + set => _internal.Search = value; + } + + [JsonIgnore] + public bool SearchSpecified => Search is not null; + + public string? System + { + get => _internal.System; + set => _internal.System = value; + } + + public string? Timestamp + { + get => _internal.Timestamp; + set => _internal.Timestamp = value; + } + + public string? Type + { + get => _internal.Type; + set => _internal.Type = value; + } + + public string? Url + { + get => _internal.Url; + set => _internal.Url = value; + } + + public string? Version + { + get => _internal.Version; + set => _internal.Version = value; + } #endregion - #region Fields + #region Private Fields - [JsonIgnore] - public bool CanOpenSpecified - { - get - { - var canOpen = ReadStringArray(Data.Models.Metadata.Header.CanOpenKey); - return canOpen is not null && canOpen.Length > 0; - } - } - - [JsonIgnore] - public bool ImagesSpecified - { - get - { - return Read(Data.Models.Metadata.Header.ImagesKey) is not null; - } - } - - [JsonIgnore] - public bool InfosSpecified - { - get - { - return Read(Data.Models.Metadata.Header.InfosKey) is not null; - } - } - - [JsonIgnore] - public bool NewDatSpecified - { - get - { - return Read(Data.Models.Metadata.Header.NewDatKey) is not null; - } - } - - [JsonIgnore] - public bool SearchSpecified - { - get - { - return Read(Data.Models.Metadata.Header.SearchKey) is not null; - } - } + /// + /// Internal model + /// + private readonly Data.Models.Metadata.Header _internal; #endregion #region Constructors - public DatHeader() { } + public DatHeader() + { + _internal = new(); + } public DatHeader(Data.Models.Metadata.Header header) { @@ -95,7 +342,10 @@ namespace SabreTools.Metadata.DatFiles /// /// Clone the current header /// - public object Clone() => new DatHeader(GetInternalClone()); + public object Clone() => new DatHeader(GetInternalClone()) + { + DatFormat = DatFormat, + }; /// /// Clone just the format from the current header @@ -104,7 +354,7 @@ namespace SabreTools.Metadata.DatFiles { var header = new DatHeader(); - header.Write(DatFormatKey, Read(DatFormatKey)); + header.DatFormat = DatFormat; return header; } @@ -116,31 +366,17 @@ namespace SabreTools.Metadata.DatFiles { var header = (_internal.Clone() as Data.Models.Metadata.Header)!; - // Remove fields with default values - if (header.ReadString(Data.Models.Metadata.Header.ForceMergingKey).AsMergingFlag() == MergingFlag.None) - header.Remove(Data.Models.Metadata.Header.ForceMergingKey); - if (header.ReadString(Data.Models.Metadata.Header.ForceNodumpKey).AsNodumpFlag() == NodumpFlag.None) - header.Remove(Data.Models.Metadata.Header.ForceNodumpKey); - if (header.ReadString(Data.Models.Metadata.Header.ForcePackingKey).AsPackingFlag() == PackingFlag.None) - header.Remove(Data.Models.Metadata.Header.ForcePackingKey); - if (header.ReadString(Data.Models.Metadata.Header.BiosModeKey).AsMergingFlag() == MergingFlag.None) - header.Remove(Data.Models.Metadata.Header.BiosModeKey); - if (header.ReadString(Data.Models.Metadata.Header.RomModeKey).AsMergingFlag() == MergingFlag.None) - header.Remove(Data.Models.Metadata.Header.RomModeKey); - if (header.ReadString(Data.Models.Metadata.Header.SampleModeKey).AsMergingFlag() == MergingFlag.None) - header.Remove(Data.Models.Metadata.Header.SampleModeKey); - // Convert subheader values if (CanOpenSpecified) - header[Data.Models.Metadata.Header.CanOpenKey] = new Data.Models.OfflineList.CanOpen { Extension = ReadStringArray(Data.Models.Metadata.Header.CanOpenKey) }; + header.CanOpen = CanOpen; if (ImagesSpecified) - header[Data.Models.Metadata.Header.ImagesKey] = Read(Data.Models.Metadata.Header.ImagesKey); + header.Images = Images; if (InfosSpecified) - header[Data.Models.Metadata.Header.InfosKey] = Read(Data.Models.Metadata.Header.InfosKey); + header.Infos = Infos; if (NewDatSpecified) - header[Data.Models.Metadata.Header.NewDatKey] = Read(Data.Models.Metadata.Header.NewDatKey); + header.NewDat = NewDat; if (SearchSpecified) - header[Data.Models.Metadata.Header.SearchKey] = Read(Data.Models.Metadata.Header.SearchKey); + header.Search = Search; return header; } @@ -150,33 +386,14 @@ namespace SabreTools.Metadata.DatFiles #region Comparision Methods /// - public override bool Equals(ModelBackedItem? other) + public bool Equals(DatHeader? other) { // If other is null if (other is null) return false; - // If the type is mismatched - if (other is not DatHeader otherItem) - return false; - // Compare internal models - return _internal.EqualTo(otherItem._internal); - } - - /// - public override bool Equals(ModelBackedItem? other) - { - // If other is null - if (other is null) - return false; - - // If the type is mismatched - if (other is not DatHeader otherItem) - return false; - - // Compare internal models - return _internal.EqualTo(otherItem._internal); + return _internal.Equals(other._internal); } #endregion diff --git a/SabreTools.Metadata.DatFiles/DatModifiers.cs b/SabreTools.Metadata.DatFiles/DatModifiers.cs index f6ec9253..e10b2b7b 100644 --- a/SabreTools.Metadata.DatFiles/DatModifiers.cs +++ b/SabreTools.Metadata.DatFiles/DatModifiers.cs @@ -7,7 +7,7 @@ namespace SabreTools.Metadata.DatFiles /// public sealed class DatModifiers : ICloneable { - #region Fields + #region Properties /// /// Text to prepend to all outputted lines diff --git a/SabreTools.Metadata.DatFiles/DatStatistics.cs b/SabreTools.Metadata.DatFiles/DatStatistics.cs index 63eb73e9..e07673c4 100644 --- a/SabreTools.Metadata.DatFiles/DatStatistics.cs +++ b/SabreTools.Metadata.DatFiles/DatStatistics.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using SabreTools.Data.Extensions; using SabreTools.Hashing; using SabreTools.Metadata.DatItems; using SabreTools.Metadata.DatItems.Formats; @@ -22,7 +21,7 @@ namespace SabreTools.Metadata.DatFiles /// /// Number of items for each item type /// - private readonly Dictionary _itemCounts = []; + private readonly Dictionary _itemCounts = []; /// /// Number of items for each item status @@ -40,7 +39,7 @@ namespace SabreTools.Metadata.DatFiles #endregion - #region Fields + #region Properties /// /// Overall item count @@ -118,11 +117,11 @@ namespace SabreTools.Metadata.DatFiles TotalCount++; // Increment removal count - if (item.ReadBool(DatItem.RemoveKey) == true) + if (item.RemoveFlag) RemovedCount++; // Increment the item count for the type - AddItemCount(item.ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType()); + ModifyItemCount(item.ItemType, 1); // Some item types require special processing switch (item) @@ -145,44 +144,6 @@ namespace SabreTools.Metadata.DatFiles } } - /// - /// Add to the statistics for a given DatItem - /// - /// Item to add info from - public void AddItemStatistics(Data.Models.Metadata.DatItem item) - { - lock (statsLock) - { - // No matter what the item is, we increment the count - TotalCount++; - - // Increment removal count - if (item.ReadBool(DatItem.RemoveKey) == true) - RemovedCount++; - - // Increment the item count for the type - AddItemCount(item.ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType()); - - // Some item types require special processing - switch (item) - { - case Data.Models.Metadata.Disk disk: - AddItemStatistics(disk); - break; - case Data.Models.Metadata.Media media: - AddItemStatistics(media); - break; - case Data.Models.Metadata.Rom rom: - AddItemStatistics(rom); - break; - - default: - // Item type requires no special processing - break; - } - } - } - /// /// Add statistics from another DatStatistics object /// @@ -194,7 +155,7 @@ namespace SabreTools.Metadata.DatFiles // Loop through and add stats for all items foreach (var itemCountKvp in stats._itemCounts) { - AddItemCount(itemCountKvp.Key, itemCountKvp.Value); + ModifyItemCount(itemCountKvp.Key, itemCountKvp.Value); } GameCount += stats.GameCount; @@ -204,13 +165,13 @@ namespace SabreTools.Metadata.DatFiles // Individual hash counts foreach (var hashCountKvp in stats._hashCounts) { - AddHashCount(hashCountKvp.Key, hashCountKvp.Value); + ModifyHashCount(hashCountKvp.Key, hashCountKvp.Value); } // Individual status counts foreach (var statusCountKvp in stats._statusCounts) { - AddStatusCount(statusCountKvp.Key, statusCountKvp.Value); + ModifyStatusCount(statusCountKvp.Key, statusCountKvp.Value); } RemovedCount += stats.RemovedCount; @@ -237,7 +198,7 @@ namespace SabreTools.Metadata.DatFiles /// /// Item type to retrieve /// The number of items of that type, if it exists - public long GetItemCount(ItemType itemType) + public long GetItemCount(Data.Models.Metadata.ItemType itemType) { lock (_itemCounts) { @@ -280,11 +241,11 @@ namespace SabreTools.Metadata.DatFiles TotalCount--; // Decrement removal count - if (item.ReadBool(DatItem.RemoveKey) == true) + if (item.RemoveFlag) RemovedCount--; // Decrement the item count for the type - RemoveItemCount(item.ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType()); + ModifyItemCount(item.ItemType, -1); // Some item types require special processing switch (item) @@ -309,48 +270,6 @@ namespace SabreTools.Metadata.DatFiles } } - /// - /// Remove from the statistics given a DatItem - /// - /// Item to remove info for - public void RemoveItemStatistics(Data.Models.Metadata.DatItem item) - { - // If we have a null item, we can't do anything - if (item is null) - return; - - lock (statsLock) - { - // No matter what the item is, we decrease the count - TotalCount--; - - // Decrement removal count - if (item.ReadBool(DatItem.RemoveKey) == true) - RemovedCount--; - - // Decrement the item count for the type - RemoveItemCount(item.ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType()); - - // Some item types require special processing - switch (item) - { - case Data.Models.Metadata.Disk disk: - RemoveItemStatistics(disk); - break; - case Data.Models.Metadata.Media media: - RemoveItemStatistics(media); - break; - case Data.Models.Metadata.Rom rom: - RemoveItemStatistics(rom); - break; - - default: - // Item type requires no special processing - break; - } - } - } - /// /// Reset all statistics /// @@ -367,12 +286,170 @@ namespace SabreTools.Metadata.DatFiles } /// - /// Increment the hash count for a given hash type + /// Add to the statistics for a given Disk /// - /// Hash type to increment - /// Amount to increment by, defaults to 1 - private void AddHashCount(HashType hashType, long interval = 1) + /// Item to add info from + private void AddItemStatistics(Disk disk) { + ItemStatus? status = disk.Status; + if (status != ItemStatus.Nodump) + { + ModifyHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : 1); + ModifyHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : 1); + } + + ModifyStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); + ModifyStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); + ModifyStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); + ModifyStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); + ModifyStatusCount(ItemStatus.Deduped, status == ItemStatus.Deduped ? 1 : 0); + } + + /// + /// Add to the statistics for a given File + /// + /// Item to add info from + private void AddItemStatistics(File file) + { + TotalSize += file.Size ?? 0; + ModifyHashCount(HashType.CRC32, string.IsNullOrEmpty(file.CRC) ? 0 : 1); + ModifyHashCount(HashType.MD5, string.IsNullOrEmpty(file.MD5) ? 0 : 1); + ModifyHashCount(HashType.SHA1, string.IsNullOrEmpty(file.SHA1) ? 0 : 1); + ModifyHashCount(HashType.SHA256, string.IsNullOrEmpty(file.SHA256) ? 0 : 1); + } + + /// + /// Add to the statistics for a given Media + /// + /// Item to add info from + private void AddItemStatistics(Media media) + { + ModifyHashCount(HashType.MD5, string.IsNullOrEmpty(media.MD5) ? 0 : 1); + ModifyHashCount(HashType.SHA1, string.IsNullOrEmpty(media.SHA1) ? 0 : 1); + ModifyHashCount(HashType.SHA256, string.IsNullOrEmpty(media.SHA256) ? 0 : 1); + ModifyHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.SpamSum) ? 0 : 1); + } + + /// + /// Add to the statistics for a given Rom + /// + /// Item to add info from + private void AddItemStatistics(Rom rom) + { + ItemStatus? status = rom.Status; + if (status != ItemStatus.Nodump) + { + TotalSize += rom.Size ?? 0; + ModifyHashCount(HashType.CRC16, string.IsNullOrEmpty(rom.CRC16) ? 0 : 1); + ModifyHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.CRC32) ? 0 : 1); + ModifyHashCount(HashType.CRC64, string.IsNullOrEmpty(rom.CRC64) ? 0 : 1); + ModifyHashCount(HashType.MD2, string.IsNullOrEmpty(rom.MD2) ? 0 : 1); + ModifyHashCount(HashType.MD4, string.IsNullOrEmpty(rom.MD4) ? 0 : 1); + ModifyHashCount(HashType.MD5, string.IsNullOrEmpty(rom.MD5) ? 0 : 1); + ModifyHashCount(HashType.RIPEMD128, string.IsNullOrEmpty(rom.RIPEMD128) ? 0 : 1); + ModifyHashCount(HashType.RIPEMD160, string.IsNullOrEmpty(rom.RIPEMD160) ? 0 : 1); + ModifyHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.SHA1) ? 0 : 1); + ModifyHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.SHA256) ? 0 : 1); + ModifyHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.SHA384) ? 0 : 1); + ModifyHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.SHA512) ? 0 : 1); + ModifyHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.SpamSum) ? 0 : 1); + } + + ModifyStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); + ModifyStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); + ModifyStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); + ModifyStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); + ModifyStatusCount(ItemStatus.Deduped, status == ItemStatus.Deduped ? 1 : 0); + } + + /// + /// Remove from the statistics given a Disk + /// + /// Item to remove info for + private void RemoveItemStatistics(Disk disk) + { + ItemStatus? status = disk.Status; + if (status != ItemStatus.Nodump) + { + ModifyHashCount(HashType.MD5, string.IsNullOrEmpty(disk.MD5) ? 0 : -1); + ModifyHashCount(HashType.SHA1, string.IsNullOrEmpty(disk.SHA1) ? 0 : -1); + } + + ModifyStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? -1 : 0); + ModifyStatusCount(ItemStatus.Good, status == ItemStatus.Good ? -1 : 0); + ModifyStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? -1 : 0); + ModifyStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? -1 : 0); + ModifyStatusCount(ItemStatus.Deduped, status == ItemStatus.Deduped ? -1 : 0); + } + + /// + /// Remove from the statistics given a File + /// + /// Item to remove info for + private void RemoveItemStatistics(File file) + { + TotalSize -= file.Size ?? 0; + ModifyHashCount(HashType.CRC32, string.IsNullOrEmpty(file.CRC) ? 0 : -1); + ModifyHashCount(HashType.MD5, string.IsNullOrEmpty(file.MD5) ? 0 : -1); + ModifyHashCount(HashType.SHA1, string.IsNullOrEmpty(file.SHA1) ? 0 : -1); + ModifyHashCount(HashType.SHA256, string.IsNullOrEmpty(file.SHA256) ? 0 : -1); + } + + /// + /// Remove from the statistics given a Media + /// + /// Item to remove info for + private void RemoveItemStatistics(Media media) + { + ModifyHashCount(HashType.MD5, string.IsNullOrEmpty(media.MD5) ? 0 : -1); + ModifyHashCount(HashType.SHA1, string.IsNullOrEmpty(media.SHA1) ? 0 : -1); + ModifyHashCount(HashType.SHA256, string.IsNullOrEmpty(media.SHA256) ? 0 : -1); + ModifyHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.SpamSum) ? 0 : -1); + } + + /// + /// Remove from the statistics given a Rom + /// + /// Item to remove info for + private void RemoveItemStatistics(Rom rom) + { + ItemStatus? status = rom.Status; + if (status != ItemStatus.Nodump) + { + TotalSize -= rom.Size ?? 0; + ModifyHashCount(HashType.CRC16, string.IsNullOrEmpty(rom.CRC16) ? 0 : -1); + ModifyHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.CRC32) ? 0 : -1); + ModifyHashCount(HashType.CRC64, string.IsNullOrEmpty(rom.CRC64) ? 0 : -1); + ModifyHashCount(HashType.MD2, string.IsNullOrEmpty(rom.MD2) ? 0 : -1); + ModifyHashCount(HashType.MD4, string.IsNullOrEmpty(rom.MD4) ? 0 : -1); + ModifyHashCount(HashType.MD5, string.IsNullOrEmpty(rom.MD5) ? 0 : -1); + ModifyHashCount(HashType.RIPEMD128, string.IsNullOrEmpty(rom.RIPEMD128) ? 0 : -1); + ModifyHashCount(HashType.RIPEMD160, string.IsNullOrEmpty(rom.RIPEMD160) ? 0 : -1); + ModifyHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.SHA1) ? 0 : -1); + ModifyHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.SHA256) ? 0 : -1); + ModifyHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.SHA384) ? 0 : -1); + ModifyHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.SHA512) ? 0 : -1); + ModifyHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.SpamSum) ? 0 : -1); + } + + ModifyStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? -1 : 0); + ModifyStatusCount(ItemStatus.Good, status == ItemStatus.Good ? -1 : 0); + ModifyStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? -1 : 0); + ModifyStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? -1 : 0); + ModifyStatusCount(ItemStatus.Deduped, status == ItemStatus.Deduped ? -1 : 0); + } + + /// + /// Modify the hash count for a given hash type + /// + /// Hash type to change + /// Amount to change by + private void ModifyHashCount(HashType hashType, long interval) + { + // Skip if the interval is 0 + if (interval == 0) + return; + lock (_hashCounts) { if (!_hashCounts.ContainsKey(hashType)) @@ -387,10 +464,14 @@ namespace SabreTools.Metadata.DatFiles /// /// Increment the item count for a given item type /// - /// Item type to increment - /// Amount to increment by, defaults to 1 - private void AddItemCount(ItemType itemType, long interval = 1) + /// Item type to change + /// Amount to change by + private void ModifyItemCount(Data.Models.Metadata.ItemType itemType, long interval) { + // Skip if the interval is 0 + if (interval == 0) + return; + lock (_itemCounts) { if (!_itemCounts.ContainsKey(itemType)) @@ -402,150 +483,17 @@ namespace SabreTools.Metadata.DatFiles } } - /// - /// Add to the statistics for a given Disk - /// - /// Item to add info from - private void AddItemStatistics(Disk disk) - { - ItemStatus? status = disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus(); - 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); - } - - AddStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); - } - - /// - /// Add to the statistics for a given Disk - /// - /// Item to add info from - private void AddItemStatistics(Data.Models.Metadata.Disk disk) - { - ItemStatus? status = disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus(); - 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); - } - - AddStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); - } - - /// - /// Add to the statistics for a given File - /// - /// Item to add info from - private void AddItemStatistics(File file) - { - TotalSize += file.Size ?? 0; - AddHashCount(HashType.CRC32, string.IsNullOrEmpty(file.CRC) ? 0 : 1); - AddHashCount(HashType.MD5, string.IsNullOrEmpty(file.MD5) ? 0 : 1); - AddHashCount(HashType.SHA1, string.IsNullOrEmpty(file.SHA1) ? 0 : 1); - AddHashCount(HashType.SHA256, string.IsNullOrEmpty(file.SHA256) ? 0 : 1); - } - - /// - /// Add to the statistics for a given Media - /// - /// Item to add info from - private void AddItemStatistics(Media media) - { - AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.MD5Key)) ? 0 : 1); - AddHashCount(HashType.SHA1, string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SHA1Key)) ? 0 : 1); - AddHashCount(HashType.SHA256, string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SHA256Key)) ? 0 : 1); - AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SpamSumKey)) ? 0 : 1); - } - - /// - /// Add to the statistics for a given Media - /// - /// Item to add info from - private void AddItemStatistics(Data.Models.Metadata.Media media) - { - AddHashCount(HashType.MD5, string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.MD5Key)) ? 0 : 1); - AddHashCount(HashType.SHA1, string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SHA1Key)) ? 0 : 1); - AddHashCount(HashType.SHA256, string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SHA256Key)) ? 0 : 1); - AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SpamSumKey)) ? 0 : 1); - } - - /// - /// Add to the statistics for a given Rom - /// - /// Item to add info from - private void AddItemStatistics(Rom rom) - { - ItemStatus? status = rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus(); - if (status != ItemStatus.Nodump) - { - TotalSize += rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) ?? 0; - AddHashCount(HashType.CRC16, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRC16Key)) ? 0 : 1); - AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRCKey)) ? 0 : 1); - AddHashCount(HashType.CRC64, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRC64Key)) ? 0 : 1); - AddHashCount(HashType.MD2, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD2Key)) ? 0 : 1); - AddHashCount(HashType.MD4, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD4Key)) ? 0 : 1); - AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD5Key)) ? 0 : 1); - AddHashCount(HashType.RIPEMD128, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.RIPEMD128Key)) ? 0 : 1); - AddHashCount(HashType.RIPEMD160, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.RIPEMD160Key)) ? 0 : 1); - AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA1Key)) ? 0 : 1); - AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA256Key)) ? 0 : 1); - AddHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA384Key)) ? 0 : 1); - AddHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA512Key)) ? 0 : 1); - AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); - } - - AddStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); - } - - /// - /// Add to the statistics for a given Rom - /// - /// Item to add info from - private void AddItemStatistics(Data.Models.Metadata.Rom rom) - { - ItemStatus? status = rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus(); - if (status != ItemStatus.Nodump) - { - TotalSize += rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) ?? 0; - AddHashCount(HashType.CRC16, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRC16Key)) ? 0 : 1); - AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRCKey)) ? 0 : 1); - AddHashCount(HashType.CRC64, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRC64Key)) ? 0 : 1); - AddHashCount(HashType.MD2, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD2Key)) ? 0 : 1); - AddHashCount(HashType.MD4, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD4Key)) ? 0 : 1); - AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD5Key)) ? 0 : 1); - AddHashCount(HashType.RIPEMD128, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.RIPEMD128Key)) ? 0 : 1); - AddHashCount(HashType.RIPEMD160, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.RIPEMD160Key)) ? 0 : 1); - AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA1Key)) ? 0 : 1); - AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA256Key)) ? 0 : 1); - AddHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA384Key)) ? 0 : 1); - AddHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA512Key)) ? 0 : 1); - AddHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); - } - - AddStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); - AddStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); - AddStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); - AddStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); - } - /// /// Increment the item count for a given item status /// - /// Item type to increment - /// Amount to increment by, defaults to 1 - private void AddStatusCount(ItemStatus itemStatus, long interval = 1) + /// Item type to change + /// Amount to change by + private void ModifyStatusCount(ItemStatus itemStatus, long interval) { + // Skip if the interval is 0 + if (interval == 0) + return; + lock (_statusCounts) { if (!_statusCounts.ContainsKey(itemStatus)) @@ -557,197 +505,6 @@ namespace SabreTools.Metadata.DatFiles } } - /// - /// Decrement the hash count for a given hash type - /// - /// Hash type to increment - /// Amount to increment by, defaults to 1 - private void RemoveHashCount(HashType hashType, long interval = 1) - { - lock (_hashCounts) - { - if (!_hashCounts.ContainsKey(hashType)) - return; - - _hashCounts[hashType] -= interval; - if (_hashCounts[hashType] < 0) - _hashCounts[hashType] = 0; - } - } - - /// - /// Decrement the item count for a given item type - /// - /// Item type to decrement - /// Amount to increment by, defaults to 1 - private void RemoveItemCount(ItemType itemType, long interval = 1) - { - lock (_itemCounts) - { - if (!_itemCounts.ContainsKey(itemType)) - return; - - _itemCounts[itemType] -= interval; - if (_itemCounts[itemType] < 0) - _itemCounts[itemType] = 0; - } - } - - /// - /// Remove from the statistics given a Disk - /// - /// Item to remove info for - private void RemoveItemStatistics(Disk disk) - { - ItemStatus? status = disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus(); - 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); - } - - RemoveStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); - } - - /// - /// Remove from the statistics given a Disk - /// - /// Item to remove info for - private void RemoveItemStatistics(Data.Models.Metadata.Disk disk) - { - ItemStatus? status = disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus(); - 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); - } - - RemoveStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); - } - - /// - /// Remove from the statistics given a File - /// - /// Item to remove info for - private void RemoveItemStatistics(File file) - { - TotalSize -= file.Size ?? 0; - RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(file.CRC) ? 0 : 1); - RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(file.MD5) ? 0 : 1); - RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(file.SHA1) ? 0 : 1); - RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(file.SHA256) ? 0 : 1); - } - - /// - /// Remove from the statistics given a Media - /// - /// Item to remove info for - private void RemoveItemStatistics(Media media) - { - RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.MD5Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SHA1Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SHA256Key)) ? 0 : 1); - RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SpamSumKey)) ? 0 : 1); - } - - /// - /// Remove from the statistics given a Media - /// - /// Item to remove info for - private void RemoveItemStatistics(Data.Models.Metadata.Media media) - { - RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.MD5Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SHA1Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SHA256Key)) ? 0 : 1); - RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SpamSumKey)) ? 0 : 1); - } - - /// - /// Remove from the statistics given a Rom - /// - /// Item to remove info for - private void RemoveItemStatistics(Rom rom) - { - ItemStatus? status = rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus(); - if (status != ItemStatus.Nodump) - { - TotalSize -= rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) ?? 0; - RemoveHashCount(HashType.CRC16, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRC16Key)) ? 0 : 1); - RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRCKey)) ? 0 : 1); - RemoveHashCount(HashType.CRC64, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRC64Key)) ? 0 : 1); - RemoveHashCount(HashType.MD2, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD2Key)) ? 0 : 1); - RemoveHashCount(HashType.MD4, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD4Key)) ? 0 : 1); - RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD5Key)) ? 0 : 1); - RemoveHashCount(HashType.RIPEMD128, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.RIPEMD128Key)) ? 0 : 1); - RemoveHashCount(HashType.RIPEMD160, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.RIPEMD160Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA1Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA256Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA384Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA512Key)) ? 0 : 1); - RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); - } - - RemoveStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); - } - - /// - /// Remove from the statistics given a Rom - /// - /// Item to remove info for - private void RemoveItemStatistics(Data.Models.Metadata.Rom rom) - { - ItemStatus? status = rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus(); - if (status != ItemStatus.Nodump) - { - TotalSize -= rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) ?? 0; - RemoveHashCount(HashType.CRC16, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRC16Key)) ? 0 : 1); - RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRCKey)) ? 0 : 1); - RemoveHashCount(HashType.CRC64, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRC64Key)) ? 0 : 1); - RemoveHashCount(HashType.MD2, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD2Key)) ? 0 : 1); - RemoveHashCount(HashType.MD4, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD4Key)) ? 0 : 1); - RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD5Key)) ? 0 : 1); - RemoveHashCount(HashType.RIPEMD128, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.RIPEMD128Key)) ? 0 : 1); - RemoveHashCount(HashType.RIPEMD160, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.RIPEMD160Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA1Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA256Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA384, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA384Key)) ? 0 : 1); - RemoveHashCount(HashType.SHA512, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA512Key)) ? 0 : 1); - RemoveHashCount(HashType.SpamSum, string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SpamSumKey)) ? 0 : 1); - } - - RemoveStatusCount(ItemStatus.BadDump, status == ItemStatus.BadDump ? 1 : 0); - RemoveStatusCount(ItemStatus.Good, status == ItemStatus.Good ? 1 : 0); - RemoveStatusCount(ItemStatus.Nodump, status == ItemStatus.Nodump ? 1 : 0); - RemoveStatusCount(ItemStatus.Verified, status == ItemStatus.Verified ? 1 : 0); - } - - /// - /// Decrement the item count for a given item status - /// - /// Item type to decrement - /// Amount to increment by, defaults to 1 - private void RemoveStatusCount(ItemStatus itemStatus, long interval = 1) - { - lock (_statusCounts) - { - if (!_statusCounts.ContainsKey(itemStatus)) - return; - - _statusCounts[itemStatus] -= interval; - if (_statusCounts[itemStatus] < 0) - _statusCounts[itemStatus] = 0; - } - } - #endregion } } diff --git a/SabreTools.Metadata.DatFiles/DepotInformation.cs b/SabreTools.Metadata.DatFiles/DepotInformation.cs index 219b398d..4188f458 100644 --- a/SabreTools.Metadata.DatFiles/DepotInformation.cs +++ b/SabreTools.Metadata.DatFiles/DepotInformation.cs @@ -1,5 +1,7 @@ using System; +using System.IO; using SabreTools.Hashing; +using SabreTools.Text.Extensions; namespace SabreTools.Metadata.DatFiles { @@ -23,6 +25,11 @@ namespace SabreTools.Metadata.DatFiles /// public int Depth { get; } + /// + /// Maximum depth allowed for path generation + /// + private static readonly int MaximumDepth = HashType.SHA1.ZeroBytes.Length; + /// /// Constructor /// @@ -50,8 +57,8 @@ namespace SabreTools.Metadata.DatFiles Depth = 4; else if (Depth < 0) Depth = 0; - else if (Depth > HashType.SHA1.ZeroBytes.Length) - Depth = HashType.SHA1.ZeroBytes.Length; + else if (Depth > MaximumDepth) + Depth = MaximumDepth; } #region Cloning @@ -62,5 +69,55 @@ namespace SabreTools.Metadata.DatFiles public object Clone() => new DepotInformation(Name, IsActive, Depth); #endregion + + #region Path Generation + + /// + /// Get a proper romba subpath + /// + /// SHA-1 hash to get the path for + /// Positive value representing the depth of the depot + /// Subfolder path for the given hash, including the filename and .gz extension + public string? GetDepotPath(byte[]? hash) + { + string? sha1 = hash.ToHexString(); + return GetDepotPath(sha1); + } + + /// + /// Get a proper romba subpath + /// + /// SHA-1 hash to get the path for + /// Subfolder path for the given hash, including the filename and .gz extension + public string? GetDepotPath(string? hash) + { + // If the hash is null, then we return null + if (hash is null) + return null; + + // If the hash isn't the right size, then we return null + if (hash.Length != HashType.SHA1.ZeroString.Length) + return null; + + // Cap the depth between 0 and 20, for now + int depth = Depth; + if (depth < 0) + depth = 0; + else if (depth > MaximumDepth) + depth = MaximumDepth; + + // Loop through and generate the subdirectory + string path = string.Empty; + for (int i = 0; i < depth; i++) + { + path += hash.Substring(i * 2, 2) + Path.DirectorySeparatorChar; + } + + // Now append the filename + path += $"{hash}.gz"; + return path; + } + + #endregion } } diff --git a/SabreTools.Metadata.DatFiles/Formats/ArchiveDotOrg.cs b/SabreTools.Metadata.DatFiles/Formats/ArchiveDotOrg.cs index 5f20cdcb..f2b70574 100644 --- a/SabreTools.Metadata.DatFiles/Formats/ArchiveDotOrg.cs +++ b/SabreTools.Metadata.DatFiles/Formats/ArchiveDotOrg.cs @@ -1,5 +1,3 @@ -using SabreTools.Metadata.DatItems; - namespace SabreTools.Metadata.DatFiles.Formats { /// @@ -8,9 +6,9 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class ArchiveDotOrg : SerializableDatFile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -19,7 +17,7 @@ namespace SabreTools.Metadata.DatFiles.Formats /// Parent DatFile to copy from public ArchiveDotOrg(DatFile? datFile) : base(datFile) { - Header.Write(DatHeader.DatFormatKey, DatFormat.ArchiveDotOrg); + Header.DatFormat = DatFormat.ArchiveDotOrg; } } } diff --git a/SabreTools.Metadata.DatFiles/Formats/AttractMode.cs b/SabreTools.Metadata.DatFiles/Formats/AttractMode.cs index 90d74b76..7b6747cb 100644 --- a/SabreTools.Metadata.DatFiles/Formats/AttractMode.cs +++ b/SabreTools.Metadata.DatFiles/Formats/AttractMode.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using SabreTools.Metadata.DatItems; namespace SabreTools.Metadata.DatFiles.Formats @@ -9,9 +9,9 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class AttractMode : SerializableDatFile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -20,7 +20,7 @@ namespace SabreTools.Metadata.DatFiles.Formats /// Parent DatFile to copy from public AttractMode(DatFile? datFile) : base(datFile) { - Header.Write(DatHeader.DatFormatKey, DatFormat.AttractMode); + Header.DatFormat = DatFormat.AttractMode; } /// @@ -28,9 +28,17 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); + switch (datItem) + { + case DatItems.Formats.Rom rom: + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + break; + + default: + // Item type is not supported + break; + } return missingFields; } diff --git a/SabreTools.Metadata.DatFiles/Formats/ClrMamePro.cs b/SabreTools.Metadata.DatFiles/Formats/ClrMamePro.cs index 69244997..22f7d359 100644 --- a/SabreTools.Metadata.DatFiles/Formats/ClrMamePro.cs +++ b/SabreTools.Metadata.DatFiles/Formats/ClrMamePro.cs @@ -1,6 +1,5 @@ -using System; +using System; using System.Collections.Generic; -using SabreTools.Data.Extensions; using SabreTools.Metadata.DatItems; using SabreTools.Metadata.DatItems.Formats; using SabreTools.Metadata.Filter; @@ -12,24 +11,24 @@ namespace SabreTools.Metadata.DatFiles.Formats /// public sealed class ClrMamePro : SerializableDatFile { - #region Fields + #region Properties /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Archive, - ItemType.BiosSet, - ItemType.Chip, - ItemType.DipSwitch, - ItemType.Disk, - ItemType.Display, - ItemType.Driver, - ItemType.Input, - ItemType.Media, - ItemType.Release, - ItemType.Rom, - ItemType.Sample, - ItemType.Sound, + Data.Models.Metadata.ItemType.Archive, + Data.Models.Metadata.ItemType.BiosSet, + Data.Models.Metadata.ItemType.Chip, + Data.Models.Metadata.ItemType.DipSwitch, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Display, + Data.Models.Metadata.ItemType.Driver, + Data.Models.Metadata.ItemType.Input, + Data.Models.Metadata.ItemType.Media, + Data.Models.Metadata.ItemType.Release, + Data.Models.Metadata.ItemType.Rom, + Data.Models.Metadata.ItemType.Sample, + Data.Models.Metadata.ItemType.Sound, ]; #endregion @@ -40,7 +39,7 @@ namespace SabreTools.Metadata.DatFiles.Formats /// Parent DatFile to copy from public ClrMamePro(DatFile? datFile) : base(datFile) { - Header.Write(DatHeader.DatFormatKey, DatFormat.ClrMamePro); + Header.DatFormat = DatFormat.ClrMamePro; } /// @@ -75,100 +74,100 @@ namespace SabreTools.Metadata.DatFiles.Formats switch (datItem) { case Release release: - if (string.IsNullOrEmpty(release.GetName())) - missingFields.Add(Data.Models.Metadata.Release.NameKey); - if (string.IsNullOrEmpty(release.ReadString(Data.Models.Metadata.Release.RegionKey))) - missingFields.Add(Data.Models.Metadata.Release.RegionKey); + if (string.IsNullOrEmpty(release.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Release.Name)); + if (string.IsNullOrEmpty(release.Region)) + missingFields.Add(nameof(Data.Models.Metadata.Release.Region)); break; case BiosSet biosset: - if (string.IsNullOrEmpty(biosset.GetName())) - missingFields.Add(Data.Models.Metadata.BiosSet.NameKey); - if (string.IsNullOrEmpty(biosset.ReadString(Data.Models.Metadata.BiosSet.DescriptionKey))) - missingFields.Add(Data.Models.Metadata.BiosSet.DescriptionKey); + if (string.IsNullOrEmpty(biosset.Name)) + missingFields.Add(nameof(Data.Models.Metadata.BiosSet.Name)); + if (string.IsNullOrEmpty(biosset.Description)) + missingFields.Add(nameof(Data.Models.Metadata.BiosSet.Description)); break; case Rom rom: - if (string.IsNullOrEmpty(rom.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - if (rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) is null || rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) < 0) - missingFields.Add(Data.Models.Metadata.Rom.SizeKey); - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRC16Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRCKey)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRC64Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD2Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD4Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD5Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.RIPEMD128Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.RIPEMD160Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA1Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA256Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA384Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA512Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SpamSumKey))) + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (rom.Size is null || rom.Size < 0) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Size)); + if (string.IsNullOrEmpty(rom.CRC16) + && string.IsNullOrEmpty(rom.CRC32) + && string.IsNullOrEmpty(rom.CRC64) + && string.IsNullOrEmpty(rom.MD2) + && string.IsNullOrEmpty(rom.MD4) + && string.IsNullOrEmpty(rom.MD5) + && string.IsNullOrEmpty(rom.RIPEMD128) + && string.IsNullOrEmpty(rom.RIPEMD160) + && string.IsNullOrEmpty(rom.SHA1) + && string.IsNullOrEmpty(rom.SHA256) + && string.IsNullOrEmpty(rom.SHA384) + && string.IsNullOrEmpty(rom.SHA512) + && string.IsNullOrEmpty(rom.SpamSum)) { - missingFields.Add(Data.Models.Metadata.Rom.SHA1Key); + missingFields.Add(nameof(Data.Models.Metadata.Rom.SHA1)); } break; case Disk disk: - if (string.IsNullOrEmpty(disk.GetName())) - missingFields.Add(Data.Models.Metadata.Disk.NameKey); - if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key))) + if (string.IsNullOrEmpty(disk.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Disk.Name)); + 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; case Sample sample: - if (string.IsNullOrEmpty(sample.GetName())) - missingFields.Add(Data.Models.Metadata.Sample.NameKey); + if (string.IsNullOrEmpty(sample.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Sample.Name)); break; case Archive archive: - if (string.IsNullOrEmpty(archive.GetName())) - missingFields.Add(Data.Models.Metadata.Archive.NameKey); + if (string.IsNullOrEmpty(archive.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Archive.Name)); break; case Chip chip: - if (chip.ReadString(Data.Models.Metadata.Chip.ChipTypeKey).AsChipType() is null) - missingFields.Add(Data.Models.Metadata.Chip.ChipTypeKey); - if (string.IsNullOrEmpty(chip.GetName())) - missingFields.Add(Data.Models.Metadata.Chip.NameKey); + if (chip.ChipType is null) + missingFields.Add(nameof(Data.Models.Metadata.Chip.ChipType)); + if (string.IsNullOrEmpty(chip.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Chip.Name)); break; case Display display: - if (display.ReadString(Data.Models.Metadata.Display.DisplayTypeKey).AsDisplayType() is null) - missingFields.Add(Data.Models.Metadata.Display.DisplayTypeKey); - if (display.ReadLong(Data.Models.Metadata.Display.RotateKey) is null) - missingFields.Add(Data.Models.Metadata.Display.RotateKey); + if (display.DisplayType is null) + missingFields.Add(nameof(Data.Models.Metadata.Display.DisplayType)); + if (display.Rotate is null) + missingFields.Add(nameof(Data.Models.Metadata.Display.Rotate)); break; case Sound sound: - if (sound.ReadLong(Data.Models.Metadata.Sound.ChannelsKey) is null) - missingFields.Add(Data.Models.Metadata.Sound.ChannelsKey); + if (sound.Channels is null) + missingFields.Add(nameof(Data.Models.Metadata.Sound.Channels)); break; case Input input: - if (input.ReadLong(Data.Models.Metadata.Input.PlayersKey) is null) - missingFields.Add(Data.Models.Metadata.Input.PlayersKey); - if (!input.ControlsSpecified) - missingFields.Add(Data.Models.Metadata.Input.ControlKey); + if (input.Players is null) + missingFields.Add(nameof(Data.Models.Metadata.Input.Players)); + if (!input.ControlSpecified) + missingFields.Add(nameof(Data.Models.Metadata.Input.Control)); break; case DipSwitch dipswitch: - if (string.IsNullOrEmpty(dipswitch.GetName())) - missingFields.Add(Data.Models.Metadata.DipSwitch.NameKey); + if (string.IsNullOrEmpty(dipswitch.Name)) + missingFields.Add(nameof(Data.Models.Metadata.DipSwitch.Name)); break; case Driver driver: - if (driver.ReadString(Data.Models.Metadata.Driver.StatusKey).AsSupportStatus() is null) - missingFields.Add(Data.Models.Metadata.Driver.StatusKey); - if (driver.ReadString(Data.Models.Metadata.Driver.EmulationKey).AsSupportStatus() is null) - missingFields.Add(Data.Models.Metadata.Driver.EmulationKey); + if (driver.Status is null) + missingFields.Add(nameof(Data.Models.Metadata.Driver.Status)); + if (driver.Emulation is null) + missingFields.Add(nameof(Data.Models.Metadata.Driver.Emulation)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/CommaSeparatedValue.cs b/SabreTools.Metadata.DatFiles/Formats/CommaSeparatedValue.cs index 07498563..12aa2fc1 100644 --- a/SabreTools.Metadata.DatFiles/Formats/CommaSeparatedValue.cs +++ b/SabreTools.Metadata.DatFiles/Formats/CommaSeparatedValue.cs @@ -12,7 +12,7 @@ namespace SabreTools.Metadata.DatFiles.Formats public CommaSeparatedValue(DatFile? datFile) : base(datFile) { _delim = ','; - Header.Write(DatHeader.DatFormatKey, DatFormat.CSV); + Header.DatFormat = DatFormat.CSV; } } } diff --git a/SabreTools.Metadata.DatFiles/Formats/DosCenter.cs b/SabreTools.Metadata.DatFiles/Formats/DosCenter.cs index e193b162..2d1152a6 100644 --- a/SabreTools.Metadata.DatFiles/Formats/DosCenter.cs +++ b/SabreTools.Metadata.DatFiles/Formats/DosCenter.cs @@ -10,9 +10,9 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class DosCenter : SerializableDatFile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -21,7 +21,7 @@ namespace SabreTools.Metadata.DatFiles.Formats /// Parent DatFile to copy from public DosCenter(DatFile? datFile) : base(datFile) { - Header.Write(DatHeader.DatFormatKey, DatFormat.DOSCenter); + Header.DatFormat = DatFormat.DOSCenter; } /// @@ -29,21 +29,19 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - switch (datItem) { case Rom rom: - if (rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) is null || rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) < 0) - missingFields.Add(Data.Models.Metadata.Rom.SizeKey); + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (rom.Size is null || rom.Size < 0) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Size)); // if (string.IsNullOrEmpty(rom.Date)) - // missingFields.Add(Data.Models.Metadata.Rom.DateKey); - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRCKey))) - missingFields.Add(Data.Models.Metadata.Rom.CRCKey); + // missingFields.Add(nameof(Data.Models.Metadata.Rom.Date)); + if (string.IsNullOrEmpty(rom.CRC32)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.CRC32)); // if (string.IsNullOrEmpty(rom.GetStringFieldValue(Data.Models.Metadata.Rom.SHA1Key))) - // missingFields.Add(Data.Models.Metadata.Rom.SHA1Key); + // missingFields.Add(nameof(Data.Models.Metadata.Rom.SHA1)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/EverdriveSmdb.cs b/SabreTools.Metadata.DatFiles/Formats/EverdriveSmdb.cs index 8b10d692..6c019e65 100644 --- a/SabreTools.Metadata.DatFiles/Formats/EverdriveSmdb.cs +++ b/SabreTools.Metadata.DatFiles/Formats/EverdriveSmdb.cs @@ -10,9 +10,9 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class EverdriveSMDB : SerializableDatFile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -21,7 +21,7 @@ namespace SabreTools.Metadata.DatFiles.Formats /// Parent DatFile to copy from public EverdriveSMDB(DatFile? datFile) : base(datFile) { - Header.Write(DatHeader.DatFormatKey, DatFormat.EverdriveSMDB); + Header.DatFormat = DatFormat.EverdriveSMDB; } /// @@ -29,21 +29,19 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - switch (datItem) { case Rom rom: - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA256Key))) - missingFields.Add(Data.Models.Metadata.Rom.SHA256Key); - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA1Key))) - missingFields.Add(Data.Models.Metadata.Rom.SHA1Key); - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD5Key))) - missingFields.Add(Data.Models.Metadata.Rom.MD5Key); - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRCKey))) - missingFields.Add(Data.Models.Metadata.Rom.CRCKey); + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (string.IsNullOrEmpty(rom.SHA256)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.SHA256)); + if (string.IsNullOrEmpty(rom.SHA1)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.SHA1)); + if (string.IsNullOrEmpty(rom.MD5)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.MD5)); + if (string.IsNullOrEmpty(rom.CRC32)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.CRC32)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/Hashfile.cs b/SabreTools.Metadata.DatFiles/Formats/Hashfile.cs index 66f928ef..0e986853 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Hashfile.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Hashfile.cs @@ -10,7 +10,7 @@ namespace SabreTools.Metadata.DatFiles.Formats /// public abstract class Hashfile : SerializableDatFile { - #region Fields + #region Properties // Private instance variables specific to Hashfile DATs protected HashType _hash; diff --git a/SabreTools.Metadata.DatFiles/Formats/Listrom.cs b/SabreTools.Metadata.DatFiles/Formats/Listrom.cs index 5e97faf5..4b2aebf1 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Listrom.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Listrom.cs @@ -10,10 +10,10 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class Listrom : SerializableDatFile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Disk, - ItemType.Rom, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -22,7 +22,7 @@ namespace SabreTools.Metadata.DatFiles.Formats /// Parent DatFile to copy from public Listrom(DatFile? datFile) : base(datFile) { - Header.Write(DatHeader.DatFormatKey, DatFormat.Listrom); + Header.DatFormat = DatFormat.Listrom; } /// @@ -30,28 +30,28 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - 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.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Disk.Name)); + 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; case Rom rom: - if (rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) is null || rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) < 0) - missingFields.Add(Data.Models.Metadata.Rom.SizeKey); - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRCKey))) - missingFields.Add(Data.Models.Metadata.Rom.CRCKey); - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA1Key))) - missingFields.Add(Data.Models.Metadata.Rom.SHA1Key); + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (rom.Size is null || rom.Size < 0) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Size)); + if (string.IsNullOrEmpty(rom.CRC32)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.CRC32)); + if (string.IsNullOrEmpty(rom.SHA1)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.SHA1)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/Listxml.cs b/SabreTools.Metadata.DatFiles/Formats/Listxml.cs index cd20f0c8..4cd7ae9e 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Listxml.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Listxml.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using SabreTools.Data.Extensions; using SabreTools.Metadata.DatItems; using SabreTools.Metadata.DatItems.Formats; using SabreTools.Metadata.Filter; @@ -182,31 +181,31 @@ namespace SabreTools.Metadata.DatFiles.Formats #endregion - #region Fields + #region Properties /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Adjuster, - ItemType.BiosSet, - ItemType.Chip, - ItemType.Condition, - ItemType.Configuration, - ItemType.Device, - ItemType.DeviceRef, - ItemType.DipSwitch, - ItemType.Disk, - ItemType.Display, - ItemType.Driver, - ItemType.Feature, - ItemType.Input, - ItemType.Port, - ItemType.RamOption, - ItemType.Rom, - ItemType.Sample, - ItemType.Slot, - ItemType.SoftwareList, - ItemType.Sound, + Data.Models.Metadata.ItemType.Adjuster, + Data.Models.Metadata.ItemType.BiosSet, + Data.Models.Metadata.ItemType.Chip, + Data.Models.Metadata.ItemType.Condition, + Data.Models.Metadata.ItemType.Configuration, + Data.Models.Metadata.ItemType.Device, + Data.Models.Metadata.ItemType.DeviceRef, + Data.Models.Metadata.ItemType.DipSwitch, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Display, + Data.Models.Metadata.ItemType.Driver, + Data.Models.Metadata.ItemType.Feature, + Data.Models.Metadata.ItemType.Input, + Data.Models.Metadata.ItemType.Port, + Data.Models.Metadata.ItemType.RamOption, + Data.Models.Metadata.ItemType.Rom, + Data.Models.Metadata.ItemType.Sample, + Data.Models.Metadata.ItemType.Slot, + Data.Models.Metadata.ItemType.SoftwareList, + Data.Models.Metadata.ItemType.Sound, ]; #endregion @@ -217,7 +216,7 @@ namespace SabreTools.Metadata.DatFiles.Formats /// Parent DatFile to copy from public Listxml(DatFile? datFile) : base(datFile) { - Header.Write(DatHeader.DatFormatKey, DatFormat.Listxml); + Header.DatFormat = DatFormat.Listxml; } /// @@ -261,132 +260,132 @@ namespace SabreTools.Metadata.DatFiles.Formats switch (datItem) { case BiosSet biosset: - if (string.IsNullOrEmpty(biosset.GetName())) - missingFields.Add(Data.Models.Metadata.BiosSet.NameKey); - if (string.IsNullOrEmpty(biosset.ReadString(Data.Models.Metadata.BiosSet.DescriptionKey))) - missingFields.Add(Data.Models.Metadata.BiosSet.DescriptionKey); + if (string.IsNullOrEmpty(biosset.Name)) + missingFields.Add(nameof(Data.Models.Metadata.BiosSet.Name)); + if (string.IsNullOrEmpty(biosset.Description)) + missingFields.Add(nameof(Data.Models.Metadata.BiosSet.Description)); break; case Rom rom: - if (string.IsNullOrEmpty(rom.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - if (rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) is null || rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) < 0) - missingFields.Add(Data.Models.Metadata.Rom.SizeKey); - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRCKey)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA1Key))) + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (rom.Size is null || rom.Size < 0) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Size)); + if (string.IsNullOrEmpty(rom.CRC32) + && string.IsNullOrEmpty(rom.SHA1)) { - missingFields.Add(Data.Models.Metadata.Rom.SHA1Key); + missingFields.Add(nameof(Data.Models.Metadata.Rom.SHA1)); } break; case Disk disk: - if (string.IsNullOrEmpty(disk.GetName())) - missingFields.Add(Data.Models.Metadata.Disk.NameKey); - if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key))) + if (string.IsNullOrEmpty(disk.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Disk.Name)); + 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; case DeviceRef deviceref: - if (string.IsNullOrEmpty(deviceref.GetName())) - missingFields.Add(Data.Models.Metadata.DeviceRef.NameKey); + if (string.IsNullOrEmpty(deviceref.Name)) + missingFields.Add(nameof(Data.Models.Metadata.DeviceRef.Name)); break; case Sample sample: - if (string.IsNullOrEmpty(sample.GetName())) - missingFields.Add(Data.Models.Metadata.Sample.NameKey); + if (string.IsNullOrEmpty(sample.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Sample.Name)); break; case Chip chip: - if (string.IsNullOrEmpty(chip.GetName())) - missingFields.Add(Data.Models.Metadata.Chip.NameKey); - if (chip.ReadString(Data.Models.Metadata.Chip.ChipTypeKey).AsChipType() is null) - missingFields.Add(Data.Models.Metadata.Chip.ChipTypeKey); + if (string.IsNullOrEmpty(chip.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Chip.Name)); + if (chip.ChipType is null) + missingFields.Add(nameof(Data.Models.Metadata.Chip.ChipType)); break; case Display display: - if (display.ReadString(Data.Models.Metadata.Display.DisplayTypeKey).AsDisplayType() is null) - missingFields.Add(Data.Models.Metadata.Display.DisplayTypeKey); - if (display.ReadDouble(Data.Models.Metadata.Display.RefreshKey) is null) - missingFields.Add(Data.Models.Metadata.Display.RefreshKey); + if (display.DisplayType is null) + missingFields.Add(nameof(Data.Models.Metadata.Display.DisplayType)); + if (display.Refresh is null) + missingFields.Add(nameof(Data.Models.Metadata.Display.Refresh)); break; case Sound sound: - if (sound.ReadLong(Data.Models.Metadata.Sound.ChannelsKey) is null) - missingFields.Add(Data.Models.Metadata.Sound.ChannelsKey); + if (sound.Channels is null) + missingFields.Add(nameof(Data.Models.Metadata.Sound.Channels)); break; case Input input: - if (input.ReadLong(Data.Models.Metadata.Input.PlayersKey) is null) - missingFields.Add(Data.Models.Metadata.Input.PlayersKey); + if (input.Players is null) + missingFields.Add(nameof(Data.Models.Metadata.Input.Players)); break; case DipSwitch dipswitch: - if (string.IsNullOrEmpty(dipswitch.GetName())) - missingFields.Add(Data.Models.Metadata.DipSwitch.NameKey); - if (string.IsNullOrEmpty(dipswitch.ReadString(Data.Models.Metadata.DipSwitch.TagKey))) - missingFields.Add(Data.Models.Metadata.DipSwitch.TagKey); + if (string.IsNullOrEmpty(dipswitch.Name)) + missingFields.Add(nameof(Data.Models.Metadata.DipSwitch.Name)); + if (string.IsNullOrEmpty(dipswitch.Tag)) + missingFields.Add(nameof(Data.Models.Metadata.DipSwitch.Tag)); break; case Configuration configuration: - if (string.IsNullOrEmpty(configuration.GetName())) - missingFields.Add(Data.Models.Metadata.Configuration.NameKey); - if (string.IsNullOrEmpty(configuration.ReadString(Data.Models.Metadata.Configuration.TagKey))) - missingFields.Add(Data.Models.Metadata.Configuration.TagKey); + if (string.IsNullOrEmpty(configuration.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Configuration.Name)); + if (string.IsNullOrEmpty(configuration.Tag)) + missingFields.Add(nameof(Data.Models.Metadata.Configuration.Tag)); break; case Port port: - if (string.IsNullOrEmpty(port.ReadString(Data.Models.Metadata.Port.TagKey))) - missingFields.Add(Data.Models.Metadata.Port.TagKey); + if (string.IsNullOrEmpty(port.Tag)) + missingFields.Add(nameof(Data.Models.Metadata.Port.Tag)); break; case Adjuster adjuster: - if (string.IsNullOrEmpty(adjuster.GetName())) - missingFields.Add(Data.Models.Metadata.Adjuster.NameKey); + if (string.IsNullOrEmpty(adjuster.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Adjuster.Name)); break; case Driver driver: - if (driver.ReadString(Data.Models.Metadata.Driver.StatusKey).AsSupportStatus() is null) - missingFields.Add(Data.Models.Metadata.Driver.StatusKey); - if (driver.ReadString(Data.Models.Metadata.Driver.EmulationKey).AsSupportStatus() is null) - missingFields.Add(Data.Models.Metadata.Driver.EmulationKey); - if (driver.ReadString(Data.Models.Metadata.Driver.CocktailKey).AsSupportStatus() is null) - missingFields.Add(Data.Models.Metadata.Driver.CocktailKey); - if (driver.ReadString(Data.Models.Metadata.Driver.SaveStateKey).AsSupportStatus() is null) - missingFields.Add(Data.Models.Metadata.Driver.SaveStateKey); + if (driver.Status is null) + missingFields.Add(nameof(Data.Models.Metadata.Driver.Status)); + if (driver.Emulation is null) + missingFields.Add(nameof(Data.Models.Metadata.Driver.Emulation)); + if (driver.Cocktail is null) + missingFields.Add(nameof(Data.Models.Metadata.Driver.Cocktail)); + if (driver.SaveState is null) + missingFields.Add(nameof(Data.Models.Metadata.Driver.SaveState)); break; case Feature feature: - if (feature.ReadString(Data.Models.Metadata.Feature.FeatureTypeKey).AsFeatureType() is null) - missingFields.Add(Data.Models.Metadata.Feature.FeatureTypeKey); + if (feature.FeatureType is null) + missingFields.Add(nameof(Data.Models.Metadata.Feature.FeatureType)); break; case Device device: - if (device.ReadString(Data.Models.Metadata.Device.DeviceTypeKey).AsDeviceType() is null) - missingFields.Add(Data.Models.Metadata.Device.DeviceTypeKey); + if (device.DeviceType is null) + missingFields.Add(nameof(Data.Models.Metadata.Device.DeviceType)); break; case Slot slot: - if (string.IsNullOrEmpty(slot.GetName())) - missingFields.Add(Data.Models.Metadata.Slot.NameKey); + if (string.IsNullOrEmpty(slot.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Slot.Name)); break; case DatItems.Formats.SoftwareList softwarelist: - if (string.IsNullOrEmpty(softwarelist.ReadString(Data.Models.Metadata.SoftwareList.TagKey))) - missingFields.Add(Data.Models.Metadata.SoftwareList.TagKey); - if (string.IsNullOrEmpty(softwarelist.GetName())) - missingFields.Add(Data.Models.Metadata.SoftwareList.NameKey); - if (softwarelist.ReadString(Data.Models.Metadata.SoftwareList.StatusKey).AsSoftwareListStatus() == null) - missingFields.Add(Data.Models.Metadata.SoftwareList.StatusKey); + if (string.IsNullOrEmpty(softwarelist.Tag)) + missingFields.Add(nameof(Data.Models.Metadata.SoftwareList.Tag)); + if (string.IsNullOrEmpty(softwarelist.Name)) + missingFields.Add(nameof(Data.Models.Metadata.SoftwareList.Name)); + if (softwarelist.Status == null) + missingFields.Add(nameof(Data.Models.Metadata.SoftwareList.Status)); break; case RamOption ramoption: - if (string.IsNullOrEmpty(ramoption.GetName())) - missingFields.Add(Data.Models.Metadata.RamOption.NameKey); + if (string.IsNullOrEmpty(ramoption.Name)) + missingFields.Add(nameof(Data.Models.Metadata.RamOption.Name)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/Logiqx.cs b/SabreTools.Metadata.DatFiles/Formats/Logiqx.cs index f5b86759..82d809e6 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Logiqx.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Logiqx.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using SabreTools.Data.Extensions; using SabreTools.Metadata.DatItems; using SabreTools.Metadata.DatItems.Formats; @@ -221,21 +220,21 @@ namespace SabreTools.Metadata.DatFiles.Formats #endregion - #region Fields + #region Properties /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Archive, - ItemType.BiosSet, - ItemType.DeviceRef, - ItemType.Disk, - ItemType.Driver, - ItemType.Media, - ItemType.Release, - ItemType.Rom, - ItemType.Sample, - ItemType.SoftwareList, + Data.Models.Metadata.ItemType.Archive, + Data.Models.Metadata.ItemType.BiosSet, + Data.Models.Metadata.ItemType.DeviceRef, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Driver, + Data.Models.Metadata.ItemType.Media, + Data.Models.Metadata.ItemType.Release, + Data.Models.Metadata.ItemType.Rom, + Data.Models.Metadata.ItemType.Sample, + Data.Models.Metadata.ItemType.SoftwareList, ]; /// @@ -254,9 +253,9 @@ namespace SabreTools.Metadata.DatFiles.Formats { _useGame = useGame; if (useGame) - Header.Write(DatHeader.DatFormatKey, DatFormat.LogiqxDeprecated); + Header.DatFormat = DatFormat.LogiqxDeprecated; else - Header.Write(DatHeader.DatFormatKey, DatFormat.Logiqx); + Header.DatFormat = DatFormat.Logiqx; } /// @@ -267,100 +266,100 @@ namespace SabreTools.Metadata.DatFiles.Formats switch (datItem) { case Release release: - if (string.IsNullOrEmpty(release.GetName())) - missingFields.Add(Data.Models.Metadata.Release.NameKey); - if (string.IsNullOrEmpty(release.ReadString(Data.Models.Metadata.Release.RegionKey))) - missingFields.Add(Data.Models.Metadata.Release.RegionKey); + if (string.IsNullOrEmpty(release.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Release.Name)); + if (string.IsNullOrEmpty(release.Region)) + missingFields.Add(nameof(Data.Models.Metadata.Release.Region)); break; case BiosSet biosset: - if (string.IsNullOrEmpty(biosset.GetName())) - missingFields.Add(Data.Models.Metadata.BiosSet.NameKey); - if (string.IsNullOrEmpty(biosset.ReadString(Data.Models.Metadata.BiosSet.DescriptionKey))) - missingFields.Add(Data.Models.Metadata.BiosSet.DescriptionKey); + if (string.IsNullOrEmpty(biosset.Name)) + missingFields.Add(nameof(Data.Models.Metadata.BiosSet.Name)); + if (string.IsNullOrEmpty(biosset.Description)) + missingFields.Add(nameof(Data.Models.Metadata.BiosSet.Description)); break; case Rom rom: - if (string.IsNullOrEmpty(rom.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - if (rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) is null || rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) < 0) - missingFields.Add(Data.Models.Metadata.Rom.SizeKey); - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRC16Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRCKey)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRC64Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD2Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD4Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD5Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.RIPEMD128Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.RIPEMD160Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA1Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA256Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA384Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA512Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SpamSumKey))) + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (rom.Size is null || rom.Size < 0) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Size)); + if (string.IsNullOrEmpty(rom.CRC16) + && string.IsNullOrEmpty(rom.CRC32) + && string.IsNullOrEmpty(rom.CRC64) + && string.IsNullOrEmpty(rom.MD2) + && string.IsNullOrEmpty(rom.MD4) + && string.IsNullOrEmpty(rom.MD5) + && string.IsNullOrEmpty(rom.RIPEMD128) + && string.IsNullOrEmpty(rom.RIPEMD160) + && string.IsNullOrEmpty(rom.SHA1) + && string.IsNullOrEmpty(rom.SHA256) + && string.IsNullOrEmpty(rom.SHA384) + && string.IsNullOrEmpty(rom.SHA512) + && string.IsNullOrEmpty(rom.SpamSum)) { - missingFields.Add(Data.Models.Metadata.Rom.SHA1Key); + missingFields.Add(nameof(Data.Models.Metadata.Rom.SHA1)); } break; case Disk disk: - if (string.IsNullOrEmpty(disk.GetName())) - missingFields.Add(Data.Models.Metadata.Disk.NameKey); - if (string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key))) + if (string.IsNullOrEmpty(disk.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Disk.Name)); + 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; case Media media: - if (string.IsNullOrEmpty(media.GetName())) - missingFields.Add(Data.Models.Metadata.Media.NameKey); - if (string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.MD5Key)) - && string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SHA1Key)) - && string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SHA256Key)) - && string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SpamSumKey))) + if (string.IsNullOrEmpty(media.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Media.Name)); + if (string.IsNullOrEmpty(media.MD5) + && string.IsNullOrEmpty(media.SHA1) + && string.IsNullOrEmpty(media.SHA256) + && string.IsNullOrEmpty(media.SpamSum)) { - missingFields.Add(Data.Models.Metadata.Media.SHA1Key); + missingFields.Add(nameof(Data.Models.Metadata.Media.SHA1)); } break; case DeviceRef deviceref: - if (string.IsNullOrEmpty(deviceref.GetName())) - missingFields.Add(Data.Models.Metadata.DeviceRef.NameKey); + if (string.IsNullOrEmpty(deviceref.Name)) + missingFields.Add(nameof(Data.Models.Metadata.DeviceRef.Name)); break; case Sample sample: - if (string.IsNullOrEmpty(sample.GetName())) - missingFields.Add(Data.Models.Metadata.Sample.NameKey); + if (string.IsNullOrEmpty(sample.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Sample.Name)); break; case Archive archive: - if (string.IsNullOrEmpty(archive.GetName())) - missingFields.Add(Data.Models.Metadata.Archive.NameKey); + if (string.IsNullOrEmpty(archive.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Archive.Name)); break; case Driver driver: - if (driver.ReadString(Data.Models.Metadata.Driver.StatusKey).AsSupportStatus() is null) - missingFields.Add(Data.Models.Metadata.Driver.StatusKey); - if (driver.ReadString(Data.Models.Metadata.Driver.EmulationKey).AsSupportStatus() is null) - missingFields.Add(Data.Models.Metadata.Driver.EmulationKey); - if (driver.ReadString(Data.Models.Metadata.Driver.CocktailKey).AsSupportStatus() is null) - missingFields.Add(Data.Models.Metadata.Driver.CocktailKey); - if (driver.ReadString(Data.Models.Metadata.Driver.SaveStateKey).AsSupportStatus() is null) - missingFields.Add(Data.Models.Metadata.Driver.SaveStateKey); + if (driver.Status is null) + missingFields.Add(nameof(Data.Models.Metadata.Driver.Status)); + if (driver.Emulation is null) + missingFields.Add(nameof(Data.Models.Metadata.Driver.Emulation)); + if (driver.Cocktail is null) + missingFields.Add(nameof(Data.Models.Metadata.Driver.Cocktail)); + if (driver.SaveState is null) + missingFields.Add(nameof(Data.Models.Metadata.Driver.SaveState)); break; case DatItems.Formats.SoftwareList softwarelist: - if (string.IsNullOrEmpty(softwarelist.ReadString(Data.Models.Metadata.SoftwareList.TagKey))) - missingFields.Add(Data.Models.Metadata.SoftwareList.TagKey); - if (string.IsNullOrEmpty(softwarelist.GetName())) - missingFields.Add(Data.Models.Metadata.SoftwareList.NameKey); - if (softwarelist.ReadString(Data.Models.Metadata.SoftwareList.StatusKey).AsSoftwareListStatus() == null) - missingFields.Add(Data.Models.Metadata.SoftwareList.StatusKey); + if (string.IsNullOrEmpty(softwarelist.Tag)) + missingFields.Add(nameof(Data.Models.Metadata.SoftwareList.Tag)); + if (string.IsNullOrEmpty(softwarelist.Name)) + missingFields.Add(nameof(Data.Models.Metadata.SoftwareList.Name)); + if (softwarelist.Status == null) + missingFields.Add(nameof(Data.Models.Metadata.SoftwareList.Status)); break; default: @@ -385,7 +384,7 @@ namespace SabreTools.Metadata.DatFiles.Formats // TODO: Enable No-Intro doctype writing instead of Logiqx // Only write the doctype if we don't have No-Intro data bool success; - if (string.IsNullOrEmpty(Header.ReadString(Data.Models.Metadata.Header.IdKey))) + if (string.IsNullOrEmpty(Header.Id)) success = new Serialization.Writers.Logiqx().SerializeFile(datafile, outfile); else success = new Serialization.Writers.Logiqx().SerializeFile(datafile, outfile); diff --git a/SabreTools.Metadata.DatFiles/Formats/Md2File.cs b/SabreTools.Metadata.DatFiles/Formats/Md2File.cs index 489dbf4e..53f7b99b 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Md2File.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Md2File.cs @@ -11,9 +11,9 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class Md2File : Hashfile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -23,7 +23,7 @@ namespace SabreTools.Metadata.DatFiles.Formats public Md2File(DatFile? datFile) : base(datFile) { _hash = HashType.MD2; - Header.Write(DatHeader.DatFormatKey, DatFormat.RedumpMD2); + Header.DatFormat = DatFormat.RedumpMD2; } /// @@ -31,15 +31,13 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - switch (datItem) { case Rom rom: - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD2Key))) - missingFields.Add(Data.Models.Metadata.Rom.MD2Key); + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (string.IsNullOrEmpty(rom.MD2)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.MD2)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/Md4File.cs b/SabreTools.Metadata.DatFiles/Formats/Md4File.cs index 16e85eb0..953954b3 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Md4File.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Md4File.cs @@ -11,9 +11,9 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class Md4File : Hashfile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -23,7 +23,7 @@ namespace SabreTools.Metadata.DatFiles.Formats public Md4File(DatFile? datFile) : base(datFile) { _hash = HashType.MD4; - Header.Write(DatHeader.DatFormatKey, DatFormat.RedumpMD4); + Header.DatFormat = DatFormat.RedumpMD4; } /// @@ -31,15 +31,13 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - switch (datItem) { case Rom rom: - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD4Key))) - missingFields.Add(Data.Models.Metadata.Rom.MD4Key); + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (string.IsNullOrEmpty(rom.MD4)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.MD4)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/Md5File.cs b/SabreTools.Metadata.DatFiles/Formats/Md5File.cs index ccd4d355..8bac1e5c 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Md5File.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Md5File.cs @@ -11,11 +11,11 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class Md5File : Hashfile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Disk, - ItemType.Media, - ItemType.Rom, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Media, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -25,7 +25,7 @@ namespace SabreTools.Metadata.DatFiles.Formats public Md5File(DatFile? datFile) : base(datFile) { _hash = HashType.MD5; - Header.Write(DatHeader.DatFormatKey, DatFormat.RedumpMD5); + Header.DatFormat = DatFormat.RedumpMD5; } /// @@ -33,25 +33,27 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - 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.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Disk.Name)); + if (string.IsNullOrEmpty(disk.MD5)) + missingFields.Add(nameof(Data.Models.Metadata.Disk.MD5)); break; case Media medium: - if (string.IsNullOrEmpty(medium.ReadString(Data.Models.Metadata.Media.MD5Key))) - missingFields.Add(Data.Models.Metadata.Media.MD5Key); + if (string.IsNullOrEmpty(medium.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Media.Name)); + if (string.IsNullOrEmpty(medium.MD5)) + missingFields.Add(nameof(Data.Models.Metadata.Media.MD5)); break; case Rom rom: - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD5Key))) - missingFields.Add(Data.Models.Metadata.Rom.MD5Key); + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (string.IsNullOrEmpty(rom.MD5)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.MD5)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/Missfile.cs b/SabreTools.Metadata.DatFiles/Formats/Missfile.cs index 4aa8aaca..d05b50a0 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Missfile.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Missfile.cs @@ -13,8 +13,8 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class Missfile : DatFile { /// - public override ItemType[] SupportedTypes - => Enum.GetValues(typeof(ItemType)) as ItemType[] ?? []; + public override Data.Models.Metadata.ItemType[] SupportedTypes + => Enum.GetValues(typeof(Data.Models.Metadata.ItemType)) as Data.Models.Metadata.ItemType[] ?? []; /// /// Constructor designed for casting a base DatFile @@ -22,7 +22,7 @@ namespace SabreTools.Metadata.DatFiles.Formats /// Parent DatFile to copy from public Missfile(DatFile? datFile) : base(datFile) { - Header.Write(DatHeader.DatFormatKey, DatFormat.MissFile); + Header.DatFormat = DatFormat.MissFile; } /// @@ -88,7 +88,7 @@ namespace SabreTools.Metadata.DatFiles.Formats WriteDatItem(sw, datItem, lastgame); // Set the new data to compare against - lastgame = datItem.GetMachine()!.GetName(); + lastgame = datItem.Machine!.Name; } } @@ -149,7 +149,7 @@ namespace SabreTools.Metadata.DatFiles.Formats WriteDatItemDB(sw, datItem, lastgame); // Set the new data to compare against - lastgame = machine.Value!.GetName(); + lastgame = machine.Value!.Name; } } @@ -174,7 +174,7 @@ namespace SabreTools.Metadata.DatFiles.Formats /// The name of the last game to be output private void WriteDatItem(StreamWriter sw, DatItem datItem, string? lastgame) { - var machine = datItem.GetMachine(); + var machine = datItem.Machine; WriteDatItemImpl(sw, datItem, machine!, lastgame); } @@ -205,8 +205,8 @@ namespace SabreTools.Metadata.DatFiles.Formats // Romba mode automatically uses item name if (Modifiers.OutputDepot?.IsActive == true || Modifiers.UseRomName) sw.Write($"{datItem.GetName() ?? string.Empty}\n"); - else if (!Modifiers.UseRomName && machine!.GetName() != lastgame) - sw.Write($"{machine!.GetName() ?? string.Empty}\n"); + else if (!Modifiers.UseRomName && machine!.Name != lastgame) + sw.Write($"{machine!.Name ?? string.Empty}\n"); sw.Flush(); } diff --git a/SabreTools.Metadata.DatFiles/Formats/OfflineList.cs b/SabreTools.Metadata.DatFiles/Formats/OfflineList.cs index 7a1cdd21..34a2ab00 100644 --- a/SabreTools.Metadata.DatFiles/Formats/OfflineList.cs +++ b/SabreTools.Metadata.DatFiles/Formats/OfflineList.cs @@ -10,9 +10,9 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class OfflineList : SerializableDatFile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -21,7 +21,7 @@ namespace SabreTools.Metadata.DatFiles.Formats /// Parent DatFile to copy from public OfflineList(DatFile? datFile) : base(datFile) { - Header.Write(DatHeader.DatFormatKey, DatFormat.OfflineList); + Header.DatFormat = DatFormat.OfflineList; } /// @@ -32,10 +32,10 @@ namespace SabreTools.Metadata.DatFiles.Formats switch (datItem) { case Rom rom: - if (rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) is null || rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) < 0) - missingFields.Add(Data.Models.Metadata.Rom.SizeKey); - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRCKey))) - missingFields.Add(Data.Models.Metadata.Rom.CRCKey); + if (rom.Size is null || rom.Size < 0) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Size)); + if (string.IsNullOrEmpty(rom.CRC32)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.CRC32)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/OpenMSX.cs b/SabreTools.Metadata.DatFiles/Formats/OpenMSX.cs index e8dd9d24..04b72f91 100644 --- a/SabreTools.Metadata.DatFiles/Formats/OpenMSX.cs +++ b/SabreTools.Metadata.DatFiles/Formats/OpenMSX.cs @@ -44,12 +44,12 @@ The softwaredb.xml file contains information about rom mapper types #endregion - #region Fields + #region Properties /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ]; #endregion @@ -60,7 +60,7 @@ The softwaredb.xml file contains information about rom mapper types /// Parent DatFile to copy from public OpenMSX(DatFile? datFile) : base(datFile) { - Header.Write(DatHeader.DatFormatKey, DatFormat.OpenMSX); + Header.DatFormat = DatFormat.OpenMSX; } /// @@ -68,15 +68,13 @@ The softwaredb.xml file contains information about rom mapper types { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - switch (datItem) { case Rom rom: - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA1Key))) - missingFields.Add(Data.Models.Metadata.Rom.SHA1Key); + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (string.IsNullOrEmpty(rom.SHA1)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.SHA1)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/RipeMD128File.cs b/SabreTools.Metadata.DatFiles/Formats/RipeMD128File.cs index d3360791..6dff13cb 100644 --- a/SabreTools.Metadata.DatFiles/Formats/RipeMD128File.cs +++ b/SabreTools.Metadata.DatFiles/Formats/RipeMD128File.cs @@ -11,9 +11,9 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class RipeMD128File : Hashfile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -23,7 +23,7 @@ namespace SabreTools.Metadata.DatFiles.Formats public RipeMD128File(DatFile? datFile) : base(datFile) { _hash = HashType.RIPEMD128; - Header.Write(DatHeader.DatFormatKey, DatFormat.RedumpRIPEMD128); + Header.DatFormat = DatFormat.RedumpRIPEMD128; } /// @@ -31,15 +31,13 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - switch (datItem) { case Rom rom: - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.RIPEMD128Key))) - missingFields.Add(Data.Models.Metadata.Rom.RIPEMD128Key); + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (string.IsNullOrEmpty(rom.RIPEMD128)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.RIPEMD128)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/RipeMD160File.cs b/SabreTools.Metadata.DatFiles/Formats/RipeMD160File.cs index e20483bd..d0226012 100644 --- a/SabreTools.Metadata.DatFiles/Formats/RipeMD160File.cs +++ b/SabreTools.Metadata.DatFiles/Formats/RipeMD160File.cs @@ -11,9 +11,9 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class RipeMD160File : Hashfile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -23,7 +23,7 @@ namespace SabreTools.Metadata.DatFiles.Formats public RipeMD160File(DatFile? datFile) : base(datFile) { _hash = HashType.RIPEMD160; - Header.Write(DatHeader.DatFormatKey, DatFormat.RedumpRIPEMD160); + Header.DatFormat = DatFormat.RedumpRIPEMD160; } /// @@ -31,15 +31,13 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - switch (datItem) { case Rom rom: - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.RIPEMD160Key))) - missingFields.Add(Data.Models.Metadata.Rom.RIPEMD160Key); + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (string.IsNullOrEmpty(rom.RIPEMD160)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.RIPEMD160)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/RomCenter.cs b/SabreTools.Metadata.DatFiles/Formats/RomCenter.cs index fff1933d..7a6b3548 100644 --- a/SabreTools.Metadata.DatFiles/Formats/RomCenter.cs +++ b/SabreTools.Metadata.DatFiles/Formats/RomCenter.cs @@ -10,9 +10,9 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class RomCenter : SerializableDatFile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -21,7 +21,7 @@ namespace SabreTools.Metadata.DatFiles.Formats /// Parent DatFile to copy from public RomCenter(DatFile? datFile) : base(datFile) { - Header.Write(DatHeader.DatFormatKey, DatFormat.RomCenter); + Header.DatFormat = DatFormat.RomCenter; } /// @@ -29,17 +29,15 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - switch (datItem) { case Rom rom: - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRCKey))) - missingFields.Add(Data.Models.Metadata.Rom.CRCKey); - if (rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) is null || rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) < 0) - missingFields.Add(Data.Models.Metadata.Rom.SizeKey); + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (string.IsNullOrEmpty(rom.CRC32)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.CRC32)); + if (rom.Size is null || rom.Size < 0) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Size)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/SabreJSON.cs b/SabreTools.Metadata.DatFiles/Formats/SabreJSON.cs index a2666e43..cbd62453 100644 --- a/SabreTools.Metadata.DatFiles/Formats/SabreJSON.cs +++ b/SabreTools.Metadata.DatFiles/Formats/SabreJSON.cs @@ -6,6 +6,7 @@ using System.Text; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; +using SabreTools.Data.Extensions; using SabreTools.Metadata.DatItems; using SabreTools.Metadata.DatItems.Formats; using SabreTools.Metadata.Filter; @@ -19,8 +20,12 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class SabreJSON : DatFile { /// - public override ItemType[] SupportedTypes - => Enum.GetValues(typeof(ItemType)) as ItemType[] ?? []; + public override Data.Models.Metadata.ItemType[] SupportedTypes +#if NET5_0_OR_GREATER + => Enum.GetValues(); +#else + => Enum.GetValues(typeof(Data.Models.Metadata.ItemType)) as Data.Models.Metadata.ItemType[] ?? []; +#endif /// /// Constructor designed for casting a base DatFile @@ -28,7 +33,7 @@ namespace SabreTools.Metadata.DatFiles.Formats /// Parent DatFile to copy from public SabreJSON(DatFile? datFile) : base(datFile) { - Header.Write(DatHeader.DatFormatKey, DatFormat.SabreJSON); + Header.DatFormat = DatFormat.SabreJSON; } /// @@ -250,140 +255,143 @@ namespace SabreTools.Metadata.DatFiles.Formats switch (datItemObj.Value("type").AsItemType()) { - case ItemType.Adjuster: + case Data.Models.Metadata.ItemType.Adjuster: datItem = datItemObj.ToObject(); break; - case ItemType.Analog: + case Data.Models.Metadata.ItemType.Analog: datItem = datItemObj.ToObject(); break; - case ItemType.Archive: + case Data.Models.Metadata.ItemType.Archive: datItem = datItemObj.ToObject(); break; - case ItemType.BiosSet: + case Data.Models.Metadata.ItemType.BiosSet: datItem = datItemObj.ToObject(); break; - case ItemType.Blank: + case Data.Models.Metadata.ItemType.Blank: datItem = datItemObj.ToObject(); break; - case ItemType.Chip: + case Data.Models.Metadata.ItemType.Chip: datItem = datItemObj.ToObject(); break; - case ItemType.Condition: + case Data.Models.Metadata.ItemType.Condition: datItem = datItemObj.ToObject(); break; - case ItemType.Configuration: + case Data.Models.Metadata.ItemType.Configuration: datItem = datItemObj.ToObject(); break; - case ItemType.ConfLocation: + case Data.Models.Metadata.ItemType.ConfLocation: datItem = datItemObj.ToObject(); break; - case ItemType.ConfSetting: + case Data.Models.Metadata.ItemType.ConfSetting: datItem = datItemObj.ToObject(); break; - case ItemType.Control: + case Data.Models.Metadata.ItemType.Control: datItem = datItemObj.ToObject(); break; - case ItemType.DataArea: + case Data.Models.Metadata.ItemType.DataArea: datItem = datItemObj.ToObject(); break; - case ItemType.Device: + case Data.Models.Metadata.ItemType.Device: datItem = datItemObj.ToObject(); break; - case ItemType.DeviceRef: + case Data.Models.Metadata.ItemType.DeviceRef: datItem = datItemObj.ToObject(); break; - case ItemType.DipLocation: + case Data.Models.Metadata.ItemType.DipLocation: datItem = datItemObj.ToObject(); break; - case ItemType.DipValue: + case Data.Models.Metadata.ItemType.DipValue: datItem = datItemObj.ToObject(); break; - case ItemType.DipSwitch: + case Data.Models.Metadata.ItemType.DipSwitch: datItem = datItemObj.ToObject(); break; - case ItemType.Disk: + case Data.Models.Metadata.ItemType.Disk: datItem = datItemObj.ToObject(); break; - case ItemType.DiskArea: + case Data.Models.Metadata.ItemType.DiskArea: datItem = datItemObj.ToObject(); break; - case ItemType.Display: + case Data.Models.Metadata.ItemType.Display: datItem = datItemObj.ToObject(); break; - case ItemType.Driver: + case Data.Models.Metadata.ItemType.Driver: datItem = datItemObj.ToObject(); break; - case ItemType.Extension: + case Data.Models.Metadata.ItemType.Extension: datItem = datItemObj.ToObject(); break; - case ItemType.Feature: + case Data.Models.Metadata.ItemType.Feature: datItem = datItemObj.ToObject(); break; - case ItemType.File: + case Data.Models.Metadata.ItemType.File: datItem = datItemObj.ToObject(); break; - case ItemType.Info: + case Data.Models.Metadata.ItemType.Info: datItem = datItemObj.ToObject(); break; - case ItemType.Input: + case Data.Models.Metadata.ItemType.Input: datItem = datItemObj.ToObject(); break; - case ItemType.Instance: + case Data.Models.Metadata.ItemType.Instance: datItem = datItemObj.ToObject(); break; - case ItemType.Media: + case Data.Models.Metadata.ItemType.Media: datItem = datItemObj.ToObject(); break; - case ItemType.Original: + case Data.Models.Metadata.ItemType.Original: // Cannot be converted to a DatItem break; - case ItemType.Part: + case Data.Models.Metadata.ItemType.Part: datItem = datItemObj.ToObject(); break; - case ItemType.PartFeature: + case Data.Models.Metadata.ItemType.PartFeature: datItem = datItemObj.ToObject(); break; - case ItemType.Port: + case Data.Models.Metadata.ItemType.Port: datItem = datItemObj.ToObject(); break; - case ItemType.RamOption: + case Data.Models.Metadata.ItemType.RamOption: datItem = datItemObj.ToObject(); break; - case ItemType.Release: + case Data.Models.Metadata.ItemType.Release: datItem = datItemObj.ToObject(); break; - case ItemType.ReleaseDetails: + case Data.Models.Metadata.ItemType.ReleaseDetails: datItem = datItemObj.ToObject(); break; - case ItemType.Rom: + case Data.Models.Metadata.ItemType.Rom: datItem = datItemObj.ToObject(); break; - case ItemType.Sample: + case Data.Models.Metadata.ItemType.Sample: datItem = datItemObj.ToObject(); break; - case ItemType.Serials: + case Data.Models.Metadata.ItemType.Serials: datItem = datItemObj.ToObject(); break; - case ItemType.SharedFeat: + case Data.Models.Metadata.ItemType.SharedFeat: datItem = datItemObj.ToObject(); break; - case ItemType.Slot: + case Data.Models.Metadata.ItemType.Slot: datItem = datItemObj.ToObject(); break; - case ItemType.SlotOption: + case Data.Models.Metadata.ItemType.SlotOption: datItem = datItemObj.ToObject(); break; - case ItemType.SoftwareList: + case Data.Models.Metadata.ItemType.SoftwareList: datItem = datItemObj.ToObject(); break; - case ItemType.Sound: + case Data.Models.Metadata.ItemType.Sound: datItem = datItemObj.ToObject(); break; - case ItemType.SourceDetails: + case Data.Models.Metadata.ItemType.SourceDetails: datItem = datItemObj.ToObject(); break; - case ItemType.NULL: + // TODO: Implement these? + case Data.Models.Metadata.ItemType.Dump: + case Data.Models.Metadata.ItemType.Video: + case Data.Models.Metadata.ItemType.NULL: default: // This should never happen break; @@ -398,7 +406,7 @@ namespace SabreTools.Metadata.DatFiles.Formats return; datItem.CopyMachineInformation(machine); - datItem.Write(DatItem.SourceKey, source); + datItem.Source = source; AddItem(datItem, statsOnly); AddItemDB(datItem, machineIndex, sourceIndex, statsOnly); } @@ -450,11 +458,11 @@ namespace SabreTools.Metadata.DatFiles.Formats DatItem datItem = datItems[index]; // If we have a different game and we're not at the start of the list, output the end of last item - if (lastgame is not null && !string.Equals(lastgame, datItem.GetMachine()!.GetName(), StringComparison.OrdinalIgnoreCase)) + if (lastgame is not null && !string.Equals(lastgame, datItem.Machine!.Name, StringComparison.OrdinalIgnoreCase)) WriteEndGame(jtw); // If we have a new game, output the beginning of the new item - if (lastgame is null || !string.Equals(lastgame, datItem.GetMachine()!.GetName(), StringComparison.OrdinalIgnoreCase)) + if (lastgame is null || !string.Equals(lastgame, datItem.Machine!.Name, StringComparison.OrdinalIgnoreCase)) WriteStartGame(jtw, datItem); // Check for a "null" item @@ -465,7 +473,7 @@ namespace SabreTools.Metadata.DatFiles.Formats WriteDatItem(jtw, datItem); // Set the new data to compare against - lastgame = datItem.GetMachine()!.GetName(); + lastgame = datItem.Machine!.Name; } } @@ -531,11 +539,11 @@ namespace SabreTools.Metadata.DatFiles.Formats var machine = GetMachineForItemDB(kvp.Key); // If we have a different game and we're not at the start of the list, output the end of last item - if (lastgame is not null && !string.Equals(lastgame, machine.Value!.GetName(), StringComparison.OrdinalIgnoreCase)) + if (lastgame is not null && !string.Equals(lastgame, machine.Value!.Name, StringComparison.OrdinalIgnoreCase)) WriteEndGame(jtw); // If we have a new game, output the beginning of the new item - if (lastgame is null || !string.Equals(lastgame, machine.Value!.GetName(), StringComparison.OrdinalIgnoreCase)) + if (lastgame is null || !string.Equals(lastgame, machine.Value!.Name, StringComparison.OrdinalIgnoreCase)) WriteStartGame(jtw, kvp.Value); // Check for a "null" item @@ -546,7 +554,7 @@ namespace SabreTools.Metadata.DatFiles.Formats WriteDatItemDB(jtw, datItem); // Set the new data to compare against - lastgame = machine.Value!.GetName(); + lastgame = machine.Value!.Name; } } @@ -593,8 +601,8 @@ namespace SabreTools.Metadata.DatFiles.Formats private static void WriteStartGame(JsonTextWriter jtw, DatItem datItem) { // No game should start with a path separator - if (!string.IsNullOrEmpty(datItem.GetMachine()!.GetName())) - datItem.GetMachine()!.SetName(datItem.GetMachine()!.GetName()!.TrimStart(Path.DirectorySeparatorChar)); + if (!string.IsNullOrEmpty(datItem.Machine!.Name)) + datItem.Machine!.Name = datItem.Machine!.Name!.TrimStart(Path.DirectorySeparatorChar); // Build the state jtw.WriteStartObject(); @@ -602,7 +610,7 @@ namespace SabreTools.Metadata.DatFiles.Formats // Write the Machine jtw.WritePropertyName("machine"); JsonSerializer js = new() { Formatting = Formatting.Indented }; - js.Serialize(jtw, datItem.GetMachine()!); + js.Serialize(jtw, datItem.Machine!); jtw.WritePropertyName("items"); jtw.WriteStartArray(); @@ -633,7 +641,7 @@ namespace SabreTools.Metadata.DatFiles.Formats private void WriteDatItem(JsonTextWriter jtw, DatItem datItem) { // Get the machine for the item - var machine = datItem.GetMachine(); + var machine = datItem.Machine; // Pre-process the item name ProcessItemName(datItem, machine, forceRemoveQuotes: true, forceRomName: false); diff --git a/SabreTools.Metadata.DatFiles/Formats/SabreXML.cs b/SabreTools.Metadata.DatFiles/Formats/SabreXML.cs index a51ed6df..99c18d65 100644 --- a/SabreTools.Metadata.DatFiles/Formats/SabreXML.cs +++ b/SabreTools.Metadata.DatFiles/Formats/SabreXML.cs @@ -18,11 +18,11 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class SabreXML : DatFile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes #if NET5_0_OR_GREATER - => Enum.GetValues(); + => Enum.GetValues(); #else - => Enum.GetValues(typeof(ItemType)) as ItemType[] ?? []; + => Enum.GetValues(typeof(Data.Models.Metadata.ItemType)) as Data.Models.Metadata.ItemType[] ?? []; #endif /// @@ -31,7 +31,7 @@ namespace SabreTools.Metadata.DatFiles.Formats /// Parent DatFile to copy from public SabreXML(DatFile? datFile) : base(datFile) { - Header.Write(DatHeader.DatFormatKey, DatFormat.SabreXML); + Header.DatFormat = DatFormat.SabreXML; } /// @@ -223,7 +223,7 @@ namespace SabreTools.Metadata.DatFiles.Formats } item.CopyMachineInformation(machine); - item.Write(DatItem.SourceKey, source); + item.Source = source; AddItem(item, statsOnly); // AddItemDB(item, machineIndex, sourceIndex, statsOnly); } @@ -282,11 +282,11 @@ namespace SabreTools.Metadata.DatFiles.Formats DatItem datItem = datItems[index]; // If we have a different game and we're not at the start of the list, output the end of last item - if (lastgame is not null && !string.Equals(lastgame, datItem.GetMachine()!.GetName(), StringComparison.OrdinalIgnoreCase)) + if (lastgame is not null && !string.Equals(lastgame, datItem.Machine!.Name, StringComparison.OrdinalIgnoreCase)) WriteEndGame(xtw); // If we have a new game, output the beginning of the new item - if (lastgame is null || !string.Equals(lastgame, datItem.GetMachine()!.GetName(), StringComparison.OrdinalIgnoreCase)) + if (lastgame is null || !string.Equals(lastgame, datItem.Machine!.Name, StringComparison.OrdinalIgnoreCase)) WriteStartGame(xtw, datItem); // Check for a "null" item @@ -297,7 +297,7 @@ namespace SabreTools.Metadata.DatFiles.Formats WriteDatItem(xtw, datItem); // Set the new data to compare against - lastgame = datItem.GetMachine()!.GetName(); + lastgame = datItem.Machine!.Name; } } @@ -364,11 +364,11 @@ namespace SabreTools.Metadata.DatFiles.Formats var machine = GetMachineForItemDB(kvp.Key); // If we have a different game and we're not at the start of the list, output the end of last item - if (lastgame is not null && !string.Equals(lastgame, machine.Value!.GetName(), StringComparison.OrdinalIgnoreCase)) + if (lastgame is not null && !string.Equals(lastgame, machine.Value!.Name, StringComparison.OrdinalIgnoreCase)) WriteEndGame(xtw); // If we have a new game, output the beginning of the new item - if (lastgame is null || !string.Equals(lastgame, machine.Value!.GetName(), StringComparison.OrdinalIgnoreCase)) + if (lastgame is null || !string.Equals(lastgame, machine.Value!.Name, StringComparison.OrdinalIgnoreCase)) WriteStartGame(xtw, kvp.Value); // Check for a "null" item @@ -379,7 +379,7 @@ namespace SabreTools.Metadata.DatFiles.Formats WriteDatItemDB(xtw, datItem); // Set the new data to compare against - lastgame = machine.Value!.GetName(); + lastgame = machine.Value!.Name; } } @@ -429,14 +429,14 @@ namespace SabreTools.Metadata.DatFiles.Formats private static void WriteStartGame(XmlTextWriter xtw, DatItem datItem) { // No game should start with a path separator - datItem.GetMachine()!.SetName(datItem.GetMachine()!.GetName()?.TrimStart(Path.DirectorySeparatorChar) ?? string.Empty); + datItem.Machine!.Name = datItem.Machine!.Name?.TrimStart(Path.DirectorySeparatorChar) ?? string.Empty; // Write the machine xtw.WriteStartElement("directory"); XmlSerializer xs = new(typeof(Machine)); XmlSerializerNamespaces ns = new(); ns.Add("", ""); - xs.Serialize(xtw, datItem.GetMachine(), ns); + xs.Serialize(xtw, datItem.Machine, ns); xtw.WriteStartElement("files"); @@ -466,7 +466,7 @@ namespace SabreTools.Metadata.DatFiles.Formats private void WriteDatItem(XmlTextWriter xtw, DatItem datItem) { // Get the machine for the item - var machine = datItem.GetMachine(); + var machine = datItem.Machine; // Pre-process the item name ProcessItemName(datItem, machine, forceRemoveQuotes: true, forceRomName: false); diff --git a/SabreTools.Metadata.DatFiles/Formats/SemicolonSeparatedValue.cs b/SabreTools.Metadata.DatFiles/Formats/SemicolonSeparatedValue.cs index 4940b556..42c1660a 100644 --- a/SabreTools.Metadata.DatFiles/Formats/SemicolonSeparatedValue.cs +++ b/SabreTools.Metadata.DatFiles/Formats/SemicolonSeparatedValue.cs @@ -12,7 +12,7 @@ namespace SabreTools.Metadata.DatFiles.Formats public SemicolonSeparatedValue(DatFile? datFile) : base(datFile) { _delim = ';'; - Header.Write(DatHeader.DatFormatKey, DatFormat.SSV); + Header.DatFormat = DatFormat.SSV; } } } diff --git a/SabreTools.Metadata.DatFiles/Formats/SeparatedValue.cs b/SabreTools.Metadata.DatFiles/Formats/SeparatedValue.cs index 7310823b..9fde320b 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; @@ -12,14 +12,14 @@ namespace SabreTools.Metadata.DatFiles.Formats /// public abstract class SeparatedValue : SerializableDatFile { - #region Fields + #region Properties /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Disk, - ItemType.Media, - ItemType.Rom, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Media, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -66,44 +66,46 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - 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.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Disk.Name)); + 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; - case Media media: - if (string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.MD5Key)) - && string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SHA1Key)) - && string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SHA256Key)) - && string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SpamSumKey))) + case Media medium: + if (string.IsNullOrEmpty(medium.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Media.Name)); + if (string.IsNullOrEmpty(medium.MD5) + && string.IsNullOrEmpty(medium.SHA1) + && string.IsNullOrEmpty(medium.SHA256) + && string.IsNullOrEmpty(medium.SpamSum)) { - missingFields.Add(Data.Models.Metadata.Media.SHA1Key); + missingFields.Add(nameof(Data.Models.Metadata.Media.SHA1)); } break; case Rom rom: - if (rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) is null || rom.ReadLong(Data.Models.Metadata.Rom.SizeKey) < 0) - missingFields.Add(Data.Models.Metadata.Rom.SizeKey); - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRCKey)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.MD5Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA1Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA256Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA384Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA512Key)) - && string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SpamSumKey))) + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (rom.Size is null || rom.Size < 0) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Size)); + if (string.IsNullOrEmpty(rom.CRC32) + && string.IsNullOrEmpty(rom.MD5) + && string.IsNullOrEmpty(rom.SHA1) + && string.IsNullOrEmpty(rom.SHA256) + && string.IsNullOrEmpty(rom.SHA384) + && string.IsNullOrEmpty(rom.SHA512) + && string.IsNullOrEmpty(rom.SpamSum)) { - missingFields.Add(Data.Models.Metadata.Rom.SHA1Key); + missingFields.Add(nameof(Data.Models.Metadata.Rom.SHA1)); } break; diff --git a/SabreTools.Metadata.DatFiles/Formats/SfvFile.cs b/SabreTools.Metadata.DatFiles/Formats/SfvFile.cs index 8f577769..af53c640 100644 --- a/SabreTools.Metadata.DatFiles/Formats/SfvFile.cs +++ b/SabreTools.Metadata.DatFiles/Formats/SfvFile.cs @@ -11,9 +11,9 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class SfvFile : Hashfile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -23,7 +23,7 @@ namespace SabreTools.Metadata.DatFiles.Formats public SfvFile(DatFile? datFile) : base(datFile) { _hash = HashType.CRC32; - Header.Write(DatHeader.DatFormatKey, DatFormat.RedumpSFV); + Header.DatFormat = DatFormat.RedumpSFV; } /// @@ -31,15 +31,13 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - switch (datItem) { case Rom rom: - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRCKey))) - missingFields.Add(Data.Models.Metadata.Rom.CRCKey); + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (string.IsNullOrEmpty(rom.CRC32)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.CRC32)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/Sha1File.cs b/SabreTools.Metadata.DatFiles/Formats/Sha1File.cs index 7bbc4e2c..e3f04441 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Sha1File.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Sha1File.cs @@ -11,11 +11,11 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class Sha1File : Hashfile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Disk, - ItemType.Media, - ItemType.Rom, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Media, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -25,7 +25,7 @@ namespace SabreTools.Metadata.DatFiles.Formats public Sha1File(DatFile? datFile) : base(datFile) { _hash = HashType.SHA1; - Header.Write(DatHeader.DatFormatKey, DatFormat.RedumpSHA1); + Header.DatFormat = DatFormat.RedumpSHA1; } /// @@ -33,25 +33,27 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - 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.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Disk.Name)); + if (string.IsNullOrEmpty(disk.SHA1)) + missingFields.Add(nameof(Data.Models.Metadata.Disk.SHA1)); break; case Media medium: - if (string.IsNullOrEmpty(medium.ReadString(Data.Models.Metadata.Media.SHA1Key))) - missingFields.Add(Data.Models.Metadata.Media.SHA1Key); + if (string.IsNullOrEmpty(medium.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Media.Name)); + if (string.IsNullOrEmpty(medium.SHA1)) + missingFields.Add(nameof(Data.Models.Metadata.Media.SHA1)); break; case Rom rom: - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA1Key))) - missingFields.Add(Data.Models.Metadata.Rom.SHA1Key); + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (string.IsNullOrEmpty(rom.SHA1)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.SHA1)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/Sha256File.cs b/SabreTools.Metadata.DatFiles/Formats/Sha256File.cs index b65b4c99..06005494 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Sha256File.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Sha256File.cs @@ -11,10 +11,10 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class Sha256File : Hashfile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Media, - ItemType.Rom, + Data.Models.Metadata.ItemType.Media, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -24,7 +24,7 @@ namespace SabreTools.Metadata.DatFiles.Formats public Sha256File(DatFile? datFile) : base(datFile) { _hash = HashType.SHA256; - Header.Write(DatHeader.DatFormatKey, DatFormat.RedumpSHA256); + Header.DatFormat = DatFormat.RedumpSHA256; } /// @@ -32,20 +32,20 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - switch (datItem) { case Media medium: - if (string.IsNullOrEmpty(medium.ReadString(Data.Models.Metadata.Media.SHA256Key))) - missingFields.Add(Data.Models.Metadata.Media.SHA256Key); + if (string.IsNullOrEmpty(medium.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Media.Name)); + if (string.IsNullOrEmpty(medium.SHA256)) + missingFields.Add(nameof(Data.Models.Metadata.Media.SHA256)); break; case Rom rom: - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA256Key))) - missingFields.Add(Data.Models.Metadata.Rom.SHA256Key); + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (string.IsNullOrEmpty(rom.SHA256)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.SHA256)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/Sha384File.cs b/SabreTools.Metadata.DatFiles/Formats/Sha384File.cs index d3ac102c..29b032e3 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Sha384File.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Sha384File.cs @@ -11,9 +11,9 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class Sha384File : Hashfile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -23,7 +23,7 @@ namespace SabreTools.Metadata.DatFiles.Formats public Sha384File(DatFile? datFile) : base(datFile) { _hash = HashType.SHA384; - Header.Write(DatHeader.DatFormatKey, DatFormat.RedumpSHA384); + Header.DatFormat = DatFormat.RedumpSHA384; } /// @@ -31,15 +31,13 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - switch (datItem) { case Rom rom: - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA384Key))) - missingFields.Add(Data.Models.Metadata.Rom.SHA384Key); + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (string.IsNullOrEmpty(rom.SHA384)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.SHA384)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/Sha512File.cs b/SabreTools.Metadata.DatFiles/Formats/Sha512File.cs index 26f5ab07..8865c4da 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Sha512File.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Sha512File.cs @@ -11,9 +11,9 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class Sha512File : Hashfile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Rom, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -23,7 +23,7 @@ namespace SabreTools.Metadata.DatFiles.Formats public Sha512File(DatFile? datFile) : base(datFile) { _hash = HashType.SHA512; - Header.Write(DatHeader.DatFormatKey, DatFormat.RedumpSHA512); + Header.DatFormat = DatFormat.RedumpSHA512; } /// @@ -31,15 +31,13 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - switch (datItem) { case Rom rom: - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA512Key))) - missingFields.Add(Data.Models.Metadata.Rom.SHA512Key); + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (string.IsNullOrEmpty(rom.SHA512)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.SHA512)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/SoftwareList.cs b/SabreTools.Metadata.DatFiles/Formats/SoftwareList.cs index 64332ce0..03719549 100644 --- a/SabreTools.Metadata.DatFiles/Formats/SoftwareList.cs +++ b/SabreTools.Metadata.DatFiles/Formats/SoftwareList.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using SabreTools.Metadata.DatItems; using SabreTools.Metadata.DatItems.Formats; @@ -75,17 +75,17 @@ namespace SabreTools.Metadata.DatFiles.Formats #endregion - #region Fields + #region Properties /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.DipSwitch, - ItemType.Disk, - ItemType.Info, - ItemType.PartFeature, - ItemType.Rom, - ItemType.SharedFeat, + Data.Models.Metadata.ItemType.DipSwitch, + Data.Models.Metadata.ItemType.Disk, + Data.Models.Metadata.ItemType.Info, + Data.Models.Metadata.ItemType.PartFeature, + Data.Models.Metadata.ItemType.Rom, + Data.Models.Metadata.ItemType.SharedFeat, ]; #endregion @@ -96,7 +96,7 @@ namespace SabreTools.Metadata.DatFiles.Formats /// Parent DatFile to copy from public SoftwareList(DatFile? datFile) : base(datFile) { - Header.Write(DatHeader.DatFormatKey, DatFormat.SoftwareList); + Header.DatFormat = DatFormat.SoftwareList; } /// @@ -109,30 +109,30 @@ namespace SabreTools.Metadata.DatFiles.Formats case DipSwitch dipSwitch: if (!dipSwitch.PartSpecified) { - missingFields.Add(Data.Models.Metadata.Part.NameKey); - missingFields.Add(Data.Models.Metadata.Part.InterfaceKey); + missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); + missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); } else { - if (string.IsNullOrEmpty(dipSwitch.Read(DipSwitch.PartKey)!.GetName())) - missingFields.Add(Data.Models.Metadata.Part.NameKey); - if (string.IsNullOrEmpty(dipSwitch.Read(DipSwitch.PartKey)!.ReadString(Data.Models.Metadata.Part.InterfaceKey))) - missingFields.Add(Data.Models.Metadata.Part.InterfaceKey); + if (string.IsNullOrEmpty(dipSwitch.Part!.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); + if (string.IsNullOrEmpty(dipSwitch.Part!.Interface)) + missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); } - if (string.IsNullOrEmpty(dipSwitch.GetName())) - missingFields.Add(Data.Models.Metadata.DipSwitch.NameKey); - if (string.IsNullOrEmpty(dipSwitch.ReadString(Data.Models.Metadata.DipSwitch.TagKey))) - missingFields.Add(Data.Models.Metadata.DipSwitch.TagKey); - if (string.IsNullOrEmpty(dipSwitch.ReadString(Data.Models.Metadata.DipSwitch.MaskKey))) - missingFields.Add(Data.Models.Metadata.DipSwitch.MaskKey); - if (dipSwitch.ValuesSpecified) + if (string.IsNullOrEmpty(dipSwitch.Name)) + missingFields.Add(nameof(Data.Models.Metadata.DipSwitch.Name)); + if (string.IsNullOrEmpty(dipSwitch.Tag)) + missingFields.Add(nameof(Data.Models.Metadata.DipSwitch.Tag)); + if (string.IsNullOrEmpty(dipSwitch.Mask)) + missingFields.Add(nameof(Data.Models.Metadata.DipSwitch.Mask)); + if (dipSwitch.DipValueSpecified) { - var dipValues = dipSwitch.Read(Data.Models.Metadata.DipSwitch.DipValueKey); - if (Array.Find(dipValues!, dv => string.IsNullOrEmpty(dv.GetName())) is not null) - missingFields.Add(Data.Models.Metadata.DipValue.NameKey); - if (Array.Find(dipValues!, dv => string.IsNullOrEmpty(dv.ReadString(Data.Models.Metadata.DipValue.ValueKey))) is not null) - missingFields.Add(Data.Models.Metadata.DipValue.ValueKey); + var dipValues = dipSwitch.DipValue; + if (Array.Find(dipValues!, dv => string.IsNullOrEmpty(dv.Name)) is not null) + missingFields.Add(nameof(Data.Models.Metadata.DipValue.Name)); + if (Array.Find(dipValues!, dv => string.IsNullOrEmpty(dv.Value)) is not null) + missingFields.Add(nameof(Data.Models.Metadata.DipValue.Value)); } break; @@ -140,68 +140,68 @@ namespace SabreTools.Metadata.DatFiles.Formats case Disk disk: if (!disk.PartSpecified) { - missingFields.Add(Data.Models.Metadata.Part.NameKey); - missingFields.Add(Data.Models.Metadata.Part.InterfaceKey); + missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); + missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); } else { - if (string.IsNullOrEmpty(disk.Read(Disk.PartKey)!.GetName())) - missingFields.Add(Data.Models.Metadata.Part.NameKey); - if (string.IsNullOrEmpty(disk.Read(Disk.PartKey)!.ReadString(Data.Models.Metadata.Part.InterfaceKey))) - missingFields.Add(Data.Models.Metadata.Part.InterfaceKey); + if (string.IsNullOrEmpty(disk.Part!.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); + if (string.IsNullOrEmpty(disk.Part.Interface)) + missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); } if (!disk.DiskAreaSpecified) { - missingFields.Add(Data.Models.Metadata.DiskArea.NameKey); + missingFields.Add(nameof(Data.Models.Metadata.DiskArea.Name)); } else { - if (string.IsNullOrEmpty(disk.Read(Disk.DiskAreaKey)!.GetName())) - missingFields.Add(Data.Models.Metadata.DiskArea.NameKey); + if (string.IsNullOrEmpty(disk.DiskArea!.Name)) + missingFields.Add(nameof(Data.Models.Metadata.DiskArea.Name)); } - if (string.IsNullOrEmpty(disk.GetName())) - missingFields.Add(Data.Models.Metadata.Disk.NameKey); + if (string.IsNullOrEmpty(disk.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Disk.Name)); break; case Info info: - if (string.IsNullOrEmpty(info.GetName())) - missingFields.Add(Data.Models.Metadata.Info.NameKey); + if (string.IsNullOrEmpty(info.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Info.Name)); break; case Rom rom: if (!rom.PartSpecified) { - missingFields.Add(Data.Models.Metadata.Part.NameKey); - missingFields.Add(Data.Models.Metadata.Part.InterfaceKey); + missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); + missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); } else { - if (string.IsNullOrEmpty(rom.Read(Rom.PartKey)!.GetName())) - missingFields.Add(Data.Models.Metadata.Part.NameKey); - if (string.IsNullOrEmpty(rom.Read(Rom.PartKey)!.ReadString(Data.Models.Metadata.Part.InterfaceKey))) - missingFields.Add(Data.Models.Metadata.Part.InterfaceKey); + if (string.IsNullOrEmpty(rom.Part!.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); + if (string.IsNullOrEmpty(rom.Part!.Interface)) + missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); } if (!rom.DataAreaSpecified) { - missingFields.Add(Data.Models.Metadata.DataArea.NameKey); - missingFields.Add(Data.Models.Metadata.DataArea.SizeKey); + missingFields.Add(nameof(Data.Models.Metadata.DataArea.Name)); + missingFields.Add(nameof(Data.Models.Metadata.DataArea.Size)); } else { - if (string.IsNullOrEmpty(rom.Read(Rom.DataAreaKey)!.GetName())) - missingFields.Add(Data.Models.Metadata.DataArea.NameKey); - if (rom.Read(Rom.DataAreaKey)!.ReadLong(Data.Models.Metadata.DataArea.SizeKey) is null) - missingFields.Add(Data.Models.Metadata.DataArea.SizeKey); + if (string.IsNullOrEmpty(rom.DataArea!.Name)) + missingFields.Add(nameof(Data.Models.Metadata.DataArea.Name)); + if (rom.DataArea!.Size is null) + missingFields.Add(nameof(Data.Models.Metadata.DataArea.Size)); } break; case SharedFeat sharedFeat: - if (string.IsNullOrEmpty(sharedFeat.GetName())) - missingFields.Add(Data.Models.Metadata.SharedFeat.NameKey); + if (string.IsNullOrEmpty(sharedFeat.Name)) + missingFields.Add(nameof(Data.Models.Metadata.SharedFeat.Name)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/SpamSumFile.cs b/SabreTools.Metadata.DatFiles/Formats/SpamSumFile.cs index eb4f30f4..adb97965 100644 --- a/SabreTools.Metadata.DatFiles/Formats/SpamSumFile.cs +++ b/SabreTools.Metadata.DatFiles/Formats/SpamSumFile.cs @@ -11,10 +11,10 @@ namespace SabreTools.Metadata.DatFiles.Formats public sealed class SpamSumFile : Hashfile { /// - public override ItemType[] SupportedTypes + public override Data.Models.Metadata.ItemType[] SupportedTypes => [ - ItemType.Media, - ItemType.Rom, + Data.Models.Metadata.ItemType.Media, + Data.Models.Metadata.ItemType.Rom, ]; /// @@ -24,7 +24,7 @@ namespace SabreTools.Metadata.DatFiles.Formats public SpamSumFile(DatFile? datFile) : base(datFile) { _hash = HashType.SpamSum; - Header.Write(DatHeader.DatFormatKey, DatFormat.RedumpSpamSum); + Header.DatFormat = DatFormat.RedumpSpamSum; } /// @@ -32,20 +32,20 @@ namespace SabreTools.Metadata.DatFiles.Formats { List missingFields = []; - // Check item name - if (string.IsNullOrEmpty(datItem.GetName())) - missingFields.Add(Data.Models.Metadata.Rom.NameKey); - switch (datItem) { case Media medium: - if (string.IsNullOrEmpty(medium.ReadString(Data.Models.Metadata.Media.SpamSumKey))) - missingFields.Add(Data.Models.Metadata.Media.SpamSumKey); + if (string.IsNullOrEmpty(medium.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Media.Name)); + if (string.IsNullOrEmpty(medium.SpamSum)) + missingFields.Add(nameof(Data.Models.Metadata.Media.SpamSum)); break; case Rom rom: - if (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SpamSumKey))) - missingFields.Add(Data.Models.Metadata.Rom.SpamSumKey); + if (string.IsNullOrEmpty(rom.Name)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.Name)); + if (string.IsNullOrEmpty(rom.SpamSum)) + missingFields.Add(nameof(Data.Models.Metadata.Rom.SpamSum)); break; default: diff --git a/SabreTools.Metadata.DatFiles/Formats/TabSeparatedValue.cs b/SabreTools.Metadata.DatFiles/Formats/TabSeparatedValue.cs index ce31ed81..369ad80b 100644 --- a/SabreTools.Metadata.DatFiles/Formats/TabSeparatedValue.cs +++ b/SabreTools.Metadata.DatFiles/Formats/TabSeparatedValue.cs @@ -12,7 +12,7 @@ namespace SabreTools.Metadata.DatFiles.Formats public TabSeparatedValue(DatFile? datFile) : base(datFile) { _delim = '\t'; - Header.Write(DatHeader.DatFormatKey, DatFormat.TSV); + Header.DatFormat = DatFormat.TSV; } } } diff --git a/SabreTools.Metadata.DatFiles/ItemDictionary.cs b/SabreTools.Metadata.DatFiles/ItemDictionary.cs index 12131826..8bd036a8 100644 --- a/SabreTools.Metadata.DatFiles/ItemDictionary.cs +++ b/SabreTools.Metadata.DatFiles/ItemDictionary.cs @@ -14,7 +14,6 @@ using SabreTools.Hashing; using SabreTools.Logging; using SabreTools.Text.Compare; using SabreTools.Text.Extensions; -using SabreTools.Data.Extensions; using ItemStatus = SabreTools.Data.Models.Metadata.ItemStatus; namespace SabreTools.Metadata.DatFiles @@ -48,7 +47,7 @@ namespace SabreTools.Metadata.DatFiles #endregion - #region Fields + #region Properties /// /// Get the keys in sorted order from the file dictionary @@ -99,12 +98,12 @@ namespace SabreTools.Metadata.DatFiles if (item is Disk disk) { // If the file has aboslutely no hashes, skip and log - if (disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() != ItemStatus.Nodump - && string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key))) + if (disk.Status != ItemStatus.Nodump + && string.IsNullOrEmpty(disk.MD5) + && string.IsNullOrEmpty(disk.SHA1)) { - _logger.Verbose($"Incomplete entry for '{disk.GetName()}' will be output as nodump"); - disk.Write(Data.Models.Metadata.Disk.StatusKey, ItemStatus.Nodump.AsStringValue()); + _logger.Verbose($"Incomplete entry for '{disk.Name}' will be output as nodump"); + disk.Status = ItemStatus.Nodump; } item = disk; @@ -125,61 +124,61 @@ namespace SabreTools.Metadata.DatFiles else if (item is Media media) { // If the file has aboslutely no hashes, skip and log - if (string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.MD5Key)) - && string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SHA1Key)) - && string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SHA256Key)) - && string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SpamSumKey))) + if (string.IsNullOrEmpty(media.MD5) + && string.IsNullOrEmpty(media.SHA1) + && string.IsNullOrEmpty(media.SHA256) + && string.IsNullOrEmpty(media.SpamSum)) { - _logger.Verbose($"Incomplete entry for '{media.GetName()}' will be output as nodump"); + _logger.Verbose($"Incomplete entry for '{media.Name}' will be output as nodump"); } item = media; } else if (item is Rom rom) { - long? size = rom.ReadLong(Data.Models.Metadata.Rom.SizeKey); + long? size = rom.Size; // If we have the case where there is SHA-1 and nothing else, we don't fill in any other part of the data - if (size is null && !string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA1Key))) + if (size is null && !string.IsNullOrEmpty(rom.SHA1)) { // No-op, just catch it so it doesn't go further - //logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Entry with only SHA-1 found - '{rom.GetName()}'"); + //logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Entry with only SHA-1 found - '{rom.Name}'"); } // If we have a rom and it's missing size AND the hashes match a 0-byte file, fill in the rest of the info else if ((size == 0 || size is null) - && (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRCKey)) || rom.HasZeroHash())) + && (string.IsNullOrEmpty(rom.CRC32) || rom.HasZeroHash())) { - rom.Write(Data.Models.Metadata.Rom.SizeKey, "0"); - rom.Write(Data.Models.Metadata.Rom.CRC16Key, null); // HashType.CRC16.ZeroString - rom.Write(Data.Models.Metadata.Rom.CRCKey, HashType.CRC32.ZeroString); - rom.Write(Data.Models.Metadata.Rom.CRC64Key, null); // HashType.CRC64.ZeroString - rom.Write(Data.Models.Metadata.Rom.MD2Key, null); // HashType.MD2.ZeroString - rom.Write(Data.Models.Metadata.Rom.MD4Key, null); // HashType.MD4.ZeroString - rom.Write(Data.Models.Metadata.Rom.MD5Key, HashType.MD5.ZeroString); - rom.Write(Data.Models.Metadata.Rom.RIPEMD128Key, null); // HashType.RIPEMD128.ZeroString - rom.Write(Data.Models.Metadata.Rom.RIPEMD160Key, null); // HashType.RIPEMD160.ZeroString - rom.Write(Data.Models.Metadata.Rom.SHA1Key, HashType.SHA1.ZeroString); - rom.Write(Data.Models.Metadata.Rom.SHA256Key, null); // HashType.SHA256.ZeroString; - rom.Write(Data.Models.Metadata.Rom.SHA384Key, null); // HashType.SHA384.ZeroString; - rom.Write(Data.Models.Metadata.Rom.SHA512Key, null); // HashType.SHA512.ZeroString; - rom.Write(Data.Models.Metadata.Rom.SpamSumKey, null); // HashType.SpamSum.ZeroString; + rom.Size = 0; + rom.CRC16 = null; // HashType.CRC16.ZeroString + rom.CRC32 = HashType.CRC32.ZeroString; + rom.CRC64 = null; // HashType.CRC64.ZeroString + rom.MD2 = null; // HashType.MD2.ZeroString + rom.MD4 = null; // HashType.MD4.ZeroString + rom.MD5 = HashType.MD5.ZeroString; + rom.RIPEMD128 = null; // HashType.RIPEMD128.ZeroString + rom.RIPEMD160 = null; // HashType.RIPEMD160.ZeroString + rom.SHA1 = HashType.SHA1.ZeroString; + rom.SHA256 = null; // HashType.SHA256.ZeroString; + rom.SHA384 = null; // HashType.SHA384.ZeroString; + rom.SHA512 = null; // HashType.SHA512.ZeroString; + rom.SpamSum = null; // HashType.SpamSum.ZeroString; } // If the file has no size and it's not the above case, skip and log - else if (rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() != ItemStatus.Nodump && (size == 0 || size is null)) + else if (rom.Status != ItemStatus.Nodump && (size == 0 || size is null)) { - //logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.GetName()}' will be output as nodump"); - rom.Write(Data.Models.Metadata.Rom.StatusKey, ItemStatus.Nodump.AsStringValue()); + //logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.Name}' will be output as nodump"); + rom.Status = ItemStatus.Nodump; } // If the file has a size but aboslutely no hashes, skip and log - else if (rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() != ItemStatus.Nodump + else if (rom.Status != ItemStatus.Nodump && size is not null && size > 0 && !rom.HasHashes()) { - //logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.GetName()}' will be output as nodump"); - rom.Write(Data.Models.Metadata.Rom.StatusKey, ItemStatus.Nodump.AsStringValue()); + //logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.Name}' will be output as nodump"); + rom.Status = ItemStatus.Nodump; } item = rom; @@ -228,7 +227,7 @@ namespace SabreTools.Metadata.DatFiles /// Get the items associated with a bucket name /// /// Name of the bucket to retrive items for - /// Indicates if RemoveKey filtering is performed + /// Indicates if RemoveFlag filtering is performed /// List representing the bucket items, empty on missing public List GetItemsForBucket(string? bucketName, bool filter = false) { @@ -251,7 +250,7 @@ namespace SabreTools.Metadata.DatFiles var datItems = new List(); foreach (DatItem item in items) { - if (item.ReadBool(DatItem.RemoveKey) != true) + if (!item.RemoveFlag) datItems.Add(item); } @@ -434,20 +433,20 @@ namespace SabreTools.Metadata.DatFiles return output; // Get the sources for comparison - var selfSource = self.Read(DatItem.SourceKey); - var lastSource = last.Read(DatItem.SourceKey); + var selfSource = self.Source; + var lastSource = last.Source; // Get the machines for comparison - var selfMachine = self.GetMachine(); - string? selfMachineName = selfMachine?.GetName(); - var lastMachine = last.GetMachine(); - string? lastMachineName = lastMachine?.GetName(); + var selfMachine = self.Machine; + string? selfMachineName = selfMachine?.Name; + var lastMachine = last.Machine; + string? lastMachineName = lastMachine?.Name; // If the duplicate is external already #if NET20 || NET35 - if ((last.Read(DatItem.DupeTypeKey) & DupeType.External) != 0) + if ((last.DupeType & DupeType.External) != 0) #else - if (last.Read(DatItem.DupeTypeKey).HasFlag(DupeType.External)) + if (last.DupeType.HasFlag(DupeType.External)) #endif output |= DupeType.External; @@ -497,13 +496,13 @@ namespace SabreTools.Metadata.DatFiles continue; // If it's a nodump, add and skip - if (datItem is Rom rom && rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Nodump) + if (datItem is Rom rom && rom.Status == ItemStatus.Nodump) { output.Add(datItem); nodumpCount++; continue; } - else if (datItem is Disk disk && disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Nodump) + else if (datItem is Disk disk && disk.Status == ItemStatus.Nodump) { output.Add(datItem); nodumpCount++; @@ -540,27 +539,27 @@ namespace SabreTools.Metadata.DatFiles savedRom.FillMissingInformation(romItem); // Set the duplicate type on the saved item - savedItem.Write(DatItem.DupeTypeKey, dupetype); + savedItem.DupeType = dupetype; // Get the sources associated with the items - var savedSource = savedItem.Read(DatItem.SourceKey); - var itemSource = datItem.Read(DatItem.SourceKey); + var savedSource = savedItem.Source; + var itemSource = datItem.Source; // Get the machines associated with the items - var savedMachine = savedItem.GetMachine(); - var itemMachine = datItem.GetMachine(); + var savedMachine = savedItem.Machine; + var itemMachine = datItem.Machine; // If the current source has a lower ID than the saved, use the saved source if (itemSource?.Index < savedSource?.Index) { - datItem.Write(DatItem.SourceKey, savedSource.Clone() as Source); + datItem.Source = savedSource.Clone() as Source; savedItem.CopyMachineInformation(datItem); savedItem.SetName(datItem.GetName()); } // If the saved machine is a child of the current machine, use the current machine instead - if (savedMachine?.ReadString(Data.Models.Metadata.Machine.CloneOfKey) == itemMachine?.GetName() - || savedMachine?.ReadString(Data.Models.Metadata.Machine.RomOfKey) == itemMachine?.GetName()) + if (savedMachine?.CloneOf == itemMachine?.Name + || savedMachine?.RomOf == itemMachine?.Name) { savedItem.CopyMachineInformation(datItem); savedItem.SetName(datItem.GetName()); @@ -602,13 +601,13 @@ namespace SabreTools.Metadata.DatFiles foreach (DatItem other in items) { // Skip items marked for removal - if (other.ReadBool(DatItem.RemoveKey) == true) + if (other.RemoveFlag) continue; // Mark duplicates for future removal if (datItem.Equals(other)) { - other.Write(DatItem.RemoveKey, true); + other.RemoveFlag = true; output.Add(other); } } @@ -661,9 +660,9 @@ namespace SabreTools.Metadata.DatFiles private ItemKey GetBestAvailable() { // Get the required counts - long diskCount = DatStatistics.GetItemCount(ItemType.Disk); - long mediaCount = DatStatistics.GetItemCount(ItemType.Media); - long romCount = DatStatistics.GetItemCount(ItemType.Rom); + long diskCount = DatStatistics.GetItemCount(Data.Models.Metadata.ItemType.Disk); + long mediaCount = DatStatistics.GetItemCount(Data.Models.Metadata.ItemType.Media); + long romCount = DatStatistics.GetItemCount(Data.Models.Metadata.ItemType.Rom); long nodumpCount = DatStatistics.GetStatusCount(ItemStatus.Nodump); // If all items are supposed to have a SHA-512, we bucket by that @@ -711,9 +710,9 @@ namespace SabreTools.Metadata.DatFiles else if (diskCount + mediaCount + romCount - nodumpCount == DatStatistics.GetHashCount(HashType.CRC16)) return ItemKey.CRC16; - // Otherwise, we bucket by CRC + // Otherwise, we bucket by CRC32 else - return ItemKey.CRC; + return ItemKey.CRC32; } /// @@ -733,8 +732,8 @@ namespace SabreTools.Metadata.DatFiles bucketBy = ItemKey.Machine; // Get the machine and source - var machine = datItem.GetMachine(); - var source = datItem.Read(DatItem.SourceKey); + var machine = datItem.Machine; + var source = datItem.Source; // Get the bucket key return datItem.GetKey(bucketBy, machine, source, lower, norename); @@ -768,12 +767,12 @@ namespace SabreTools.Metadata.DatFiles for (int i = 0; i < GetItemsForBucket(key).Count; i++) { DatItem item = GetItemsForBucket(key)[i]; - if (item is null || item.ReadBool(DatItem.RemoveKey) == true) + if (item is null || item.RemoveFlag) continue; // Get the machine and source - var machine = item.GetMachine(); - var source = item.Read(DatItem.SourceKey); + var machine = item.Machine; + var source = item.Source; // We want to get the key most appropriate for the given sorting type string newkey = item.GetKey(bucketBy, machine, source, lower, norename); @@ -846,27 +845,27 @@ namespace SabreTools.Metadata.DatFiles // Compare on source if renaming if (!norename) { - int xSourceIndex = x.Read(DatItem.SourceKey)?.Index ?? 0; - int ySourceIndex = y.Read(DatItem.SourceKey)?.Index ?? 0; + int xSourceIndex = x.Source?.Index ?? 0; + int ySourceIndex = y.Source?.Index ?? 0; if (xSourceIndex != ySourceIndex) return xSourceIndex - ySourceIndex; } // Get the machines - Machine? xMachine = x.GetMachine(); - Machine? yMachine = y.GetMachine(); + Machine? xMachine = x.Machine; + Machine? yMachine = y.Machine; // If machine names don't match - string? xMachineName = xMachine?.GetName(); - string? yMachineName = yMachine?.GetName(); + string? xMachineName = xMachine?.Name; + string? yMachineName = yMachine?.Name; if (xMachineName != yMachineName) return nc.Compare(xMachineName, yMachineName); // If types don't match - string? xType = x.ReadString(Data.Models.Metadata.DatItem.TypeKey); - string? yType = y.ReadString(Data.Models.Metadata.DatItem.TypeKey); + Data.Models.Metadata.ItemType xType = x.ItemType; + Data.Models.Metadata.ItemType yType = y.ItemType; if (xType != yType) - return xType.AsItemType() - yType.AsItemType(); + return xType - yType; // If directory names don't match string? xDirectoryName = Path.GetDirectoryName(TextHelper.RemovePathUnsafeCharacters(x.GetName() ?? string.Empty)); diff --git a/SabreTools.Metadata.DatFiles/ItemDictionaryDB.cs b/SabreTools.Metadata.DatFiles/ItemDictionaryDB.cs index cd9161ff..bb024f69 100644 --- a/SabreTools.Metadata.DatFiles/ItemDictionaryDB.cs +++ b/SabreTools.Metadata.DatFiles/ItemDictionaryDB.cs @@ -16,7 +16,6 @@ using SabreTools.Hashing; using SabreTools.Logging; using SabreTools.Text.Compare; using SabreTools.Text.Extensions; -using SabreTools.Data.Extensions; using ItemStatus = SabreTools.Data.Models.Metadata.ItemStatus; /* @@ -135,7 +134,7 @@ namespace SabreTools.Metadata.DatFiles #endregion - #region Fields + #region Properties /// /// Get the keys in sorted order from the file dictionary @@ -188,12 +187,12 @@ namespace SabreTools.Metadata.DatFiles if (item is Disk disk) { // If the file has aboslutely no hashes, skip and log - if (disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() != ItemStatus.Nodump - && string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.MD5Key)) - && string.IsNullOrEmpty(disk.ReadString(Data.Models.Metadata.Disk.SHA1Key))) + if (disk.Status != ItemStatus.Nodump + && string.IsNullOrEmpty(disk.MD5) + && string.IsNullOrEmpty(disk.SHA1)) { - _logger.Verbose($"Incomplete entry for '{disk.GetName()}' will be output as nodump"); - disk.Write(Data.Models.Metadata.Disk.StatusKey, ItemStatus.Nodump.AsStringValue()); + _logger.Verbose($"Incomplete entry for '{disk.Name}' will be output as nodump"); + disk.Status = ItemStatus.Nodump; } item = disk; @@ -214,61 +213,61 @@ namespace SabreTools.Metadata.DatFiles else if (item is Media media) { // If the file has aboslutely no hashes, skip and log - if (string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.MD5Key)) - && string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SHA1Key)) - && string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SHA256Key)) - && string.IsNullOrEmpty(media.ReadString(Data.Models.Metadata.Media.SpamSumKey))) + if (string.IsNullOrEmpty(media.MD5) + && string.IsNullOrEmpty(media.SHA1) + && string.IsNullOrEmpty(media.SHA256) + && string.IsNullOrEmpty(media.SpamSum)) { - _logger.Verbose($"Incomplete entry for '{media.GetName()}' will be output as nodump"); + _logger.Verbose($"Incomplete entry for '{media.Name}' will be output as nodump"); } item = media; } else if (item is Rom rom) { - long? size = rom.ReadLong(Data.Models.Metadata.Rom.SizeKey); + long? size = rom.Size; // If we have the case where there is SHA-1 and nothing else, we don't fill in any other part of the data - if (size is null && !string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.SHA1Key))) + if (size is null && !string.IsNullOrEmpty(rom.SHA1)) { // No-op, just catch it so it doesn't go further - //logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Entry with only SHA-1 found - '{rom.GetName()}'"); + //logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Entry with only SHA-1 found - '{rom.Name}'"); } // If we have a rom and it's missing size AND the hashes match a 0-byte file, fill in the rest of the info else if ((size == 0 || size is null) - && (string.IsNullOrEmpty(rom.ReadString(Data.Models.Metadata.Rom.CRCKey)) || rom.HasZeroHash())) + && (string.IsNullOrEmpty(rom.CRC32) || rom.HasZeroHash())) { - rom.Write(Data.Models.Metadata.Rom.SizeKey, "0"); - rom.Write(Data.Models.Metadata.Rom.CRC16Key, null); // HashType.CRC16.ZeroString - rom.Write(Data.Models.Metadata.Rom.CRCKey, HashType.CRC32.ZeroString); - rom.Write(Data.Models.Metadata.Rom.CRC64Key, null); // HashType.CRC64.ZeroString - rom.Write(Data.Models.Metadata.Rom.MD2Key, null); // HashType.MD2.ZeroString - rom.Write(Data.Models.Metadata.Rom.MD4Key, null); // HashType.MD4.ZeroString - rom.Write(Data.Models.Metadata.Rom.MD5Key, HashType.MD5.ZeroString); - rom.Write(Data.Models.Metadata.Rom.RIPEMD128Key, null); // HashType.RIPEMD128.ZeroString - rom.Write(Data.Models.Metadata.Rom.RIPEMD160Key, null); // HashType.RIPEMD160.ZeroString - rom.Write(Data.Models.Metadata.Rom.SHA1Key, HashType.SHA1.ZeroString); - rom.Write(Data.Models.Metadata.Rom.SHA256Key, null); // HashType.SHA256.ZeroString; - rom.Write(Data.Models.Metadata.Rom.SHA384Key, null); // HashType.SHA384.ZeroString; - rom.Write(Data.Models.Metadata.Rom.SHA512Key, null); // HashType.SHA512.ZeroString; - rom.Write(Data.Models.Metadata.Rom.SpamSumKey, null); // HashType.SpamSum.ZeroString; + rom.Size = 0; + rom.CRC16 = null; // HashType.CRC16.ZeroString + rom.CRC32 = HashType.CRC32.ZeroString; + rom.CRC64 = null; // HashType.CRC64.ZeroString + rom.MD2 = null; // HashType.MD2.ZeroString + rom.MD4 = null; // HashType.MD4.ZeroString + rom.MD5 = HashType.MD5.ZeroString; + rom.RIPEMD128 = null; // HashType.RIPEMD128.ZeroString + rom.RIPEMD160 = null; // HashType.RIPEMD160.ZeroString + rom.SHA1 = HashType.SHA1.ZeroString; + rom.SHA256 = null; // HashType.SHA256.ZeroString; + rom.SHA384 = null; // HashType.SHA384.ZeroString; + rom.SHA512 = null; // HashType.SHA512.ZeroString; + rom.SpamSum = null; // HashType.SpamSum.ZeroString; } // If the file has no size and it's not the above case, skip and log - else if (rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() != ItemStatus.Nodump && (size == 0 || size is null)) + else if (rom.Status != ItemStatus.Nodump && (size == 0 || size is null)) { - //logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.GetName()}' will be output as nodump"); - rom.Write(Data.Models.Metadata.Rom.StatusKey, ItemStatus.Nodump.AsStringValue()); + //logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.Name}' will be output as nodump"); + rom.Status = ItemStatus.Nodump; } // If the file has a size but aboslutely no hashes, skip and log - else if (rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() != ItemStatus.Nodump + else if (rom.Status != ItemStatus.Nodump && size is not null && size > 0 && !rom.HasHashes()) { - //logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.GetName()}' will be output as nodump"); - rom.Write(Data.Models.Metadata.Rom.StatusKey, ItemStatus.Nodump.AsStringValue()); + //logger.Verbose($"{Header.GetStringFieldValue(DatHeader.FileNameKey)}: Incomplete entry for '{rom.Name}' will be output as nodump"); + rom.Status = ItemStatus.Nodump; } item = rom; @@ -333,7 +332,7 @@ namespace SabreTools.Metadata.DatFiles var datItem = _items[itemIndex]; #endif - if (datItem.ReadBool(DatItem.RemoveKey) != true) + if (!datItem.RemoveFlag) continue; RemoveItem(itemIndex); @@ -379,7 +378,7 @@ namespace SabreTools.Metadata.DatFiles continue; #endif - if (!filter || datItem.ReadBool(DatItem.RemoveKey) != true) + if (!filter || !datItem.RemoveFlag) datItems[itemId] = datItem; } @@ -413,7 +412,7 @@ namespace SabreTools.Metadata.DatFiles if (string.IsNullOrEmpty(name)) return new KeyValuePair(-1, null); - var machine = _machines.FirstOrDefault(m => m.Value.GetName() == name); + var machine = _machines.FirstOrDefault(m => m.Value.Name == name); return new KeyValuePair(machine.Key, machine.Value); } @@ -618,7 +617,7 @@ namespace SabreTools.Metadata.DatFiles if (string.IsNullOrEmpty(machineName)) return false; - var machine = _machines.FirstOrDefault(m => m.Value.GetName() == machineName); + var machine = _machines.FirstOrDefault(m => m.Value.Name == machineName); return RemoveMachine(machine.Key); } @@ -745,15 +744,15 @@ namespace SabreTools.Metadata.DatFiles // Get the machines for comparison var selfMachine = GetMachineForItem(selfItem.Value.Key).Value; - string? selfMachineName = selfMachine?.GetName(); + string? selfMachineName = selfMachine?.Name; var lastMachine = GetMachineForItem(lastItem.Value.Key).Value; - string? lastMachineName = lastMachine?.GetName(); + string? lastMachineName = lastMachine?.Name; // If the duplicate is external already #if NET20 || NET35 - if ((lastItem.Value.Value.Read(DatItem.DupeTypeKey) & DupeType.External) != 0) + if ((lastItem.Value.Value.DupeType & DupeType.External) != 0) #else - if (lastItem.Value.Value.Read(DatItem.DupeTypeKey).HasFlag(DupeType.External)) + if (lastItem.Value.Value.DupeType.HasFlag(DupeType.External)) #endif output |= DupeType.External; @@ -806,13 +805,13 @@ namespace SabreTools.Metadata.DatFiles foreach (var rom in items) { // Skip items marked for removal - if (rom.Value.ReadBool(DatItem.RemoveKey) == true) + if (rom.Value.RemoveFlag) continue; // Mark duplicates for future removal if (datItem.Value.Equals(rom.Value)) { - rom.Value.Write(DatItem.RemoveKey, true); + rom.Value.RemoveFlag = true; output[rom.Key] = rom.Value; } } @@ -873,13 +872,13 @@ namespace SabreTools.Metadata.DatFiles continue; // If it's a nodump, add and skip - if (datItem is Rom rom && rom.ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus() == ItemStatus.Nodump) + if (datItem is Rom rom && rom.Status == ItemStatus.Nodump) { output.Add(new KeyValuePair(itemIndex, datItem)); nodumpCount++; continue; } - else if (datItem is Disk disk && disk.ReadString(Data.Models.Metadata.Disk.StatusKey).AsItemStatus() == ItemStatus.Nodump) + else if (datItem is Disk disk && disk.Status == ItemStatus.Nodump) { output.Add(new KeyValuePair(itemIndex, datItem)); nodumpCount++; @@ -922,7 +921,7 @@ namespace SabreTools.Metadata.DatFiles else if (datItem is Rom romItem && savedItem is Rom savedRom) savedRom.FillMissingInformation(romItem); - savedItem.Write(DatItem.DupeTypeKey, dupetype); + savedItem.DupeType = dupetype; // Get the sources associated with the items var savedSource = _sources[_itemToSourceMapping[savedIndex]]; @@ -941,8 +940,8 @@ namespace SabreTools.Metadata.DatFiles } // If the saved machine is a child of the current machine, use the current machine instead - if (savedMachine.ReadString(Data.Models.Metadata.Machine.CloneOfKey) == itemMachine.GetName() - || savedMachine.ReadString(Data.Models.Metadata.Machine.RomOfKey) == itemMachine.GetName()) + if (savedMachine.CloneOf == itemMachine.Name + || savedMachine.RomOf == itemMachine.Name) { _machines[_itemToMachineMapping[savedIndex]] = (itemMachine.Clone() as Machine)!; savedItem.SetName(datItem.GetName()); @@ -976,9 +975,9 @@ namespace SabreTools.Metadata.DatFiles private ItemKey GetBestAvailable() { // Get the required counts - long diskCount = DatStatistics.GetItemCount(ItemType.Disk); - long mediaCount = DatStatistics.GetItemCount(ItemType.Media); - long romCount = DatStatistics.GetItemCount(ItemType.Rom); + long diskCount = DatStatistics.GetItemCount(Data.Models.Metadata.ItemType.Disk); + long mediaCount = DatStatistics.GetItemCount(Data.Models.Metadata.ItemType.Media); + long romCount = DatStatistics.GetItemCount(Data.Models.Metadata.ItemType.Rom); long nodumpCount = DatStatistics.GetStatusCount(ItemStatus.Nodump); // If all items are supposed to have a SHA-512, we bucket by that @@ -1026,9 +1025,9 @@ namespace SabreTools.Metadata.DatFiles else if (diskCount + mediaCount + romCount - nodumpCount == DatStatistics.GetHashCount(HashType.CRC16)) return ItemKey.CRC16; - // Otherwise, we bucket by CRC + // Otherwise, we bucket by CRC32 else - return ItemKey.CRC; + return ItemKey.CRC32; } /// @@ -1191,16 +1190,16 @@ namespace SabreTools.Metadata.DatFiles Machine? yMachine = _machines[_itemToMachineMapping[y.Key]]; // If machine names don't match - string? xMachineName = xMachine?.GetName(); - string? yMachineName = yMachine?.GetName(); + string? xMachineName = xMachine?.Name; + string? yMachineName = yMachine?.Name; if (xMachineName != yMachineName) return nc.Compare(xMachineName, yMachineName); // If types don't match - string? xType = x.Value.ReadString(Data.Models.Metadata.DatItem.TypeKey); - string? yType = y.Value.ReadString(Data.Models.Metadata.DatItem.TypeKey); + Data.Models.Metadata.ItemType xType = x.Value.ItemType; + Data.Models.Metadata.ItemType yType = y.Value.ItemType; if (xType != yType) - return xType.AsItemType() - yType.AsItemType(); + return xType - yType; // If directory names don't match string? xDirectoryName = Path.GetDirectoryName(TextHelper.RemovePathUnsafeCharacters(x.Value.GetName())); diff --git a/SabreTools.Metadata.DatFiles/SabreTools.Metadata.DatFiles.csproj b/SabreTools.Metadata.DatFiles/SabreTools.Metadata.DatFiles.csproj index 456ff794..6e3aa439 100644 --- a/SabreTools.Metadata.DatFiles/SabreTools.Metadata.DatFiles.csproj +++ b/SabreTools.Metadata.DatFiles/SabreTools.Metadata.DatFiles.csproj @@ -36,7 +36,6 @@ - diff --git a/SabreTools.Metadata.DatItems.Test/DatItemTests.cs b/SabreTools.Metadata.DatItems.Test/DatItemTests.cs index 36c66ca4..1dceb862 100644 --- a/SabreTools.Metadata.DatItems.Test/DatItemTests.cs +++ b/SabreTools.Metadata.DatItems.Test/DatItemTests.cs @@ -1,4 +1,4 @@ -using SabreTools.Data.Extensions; +using System; using SabreTools.Metadata.DatItems.Formats; using Xunit; @@ -11,9 +11,21 @@ namespace SabreTools.Metadata.DatItems.Test /// /// Testing implementation of Data.Models.Metadata.DatItem /// - private class TestDatItemModel : Data.Models.Metadata.DatItem + private class TestDatItemModel : Data.Models.Metadata.DatItem, ICloneable, IEquatable { - public const string NameKey = "__NAME__"; + public string? Name { get; set; } + + /// + public object Clone() => new TestDatItemModel { Name = Name }; + + /// + public bool Equals(TestDatItemModel? other) + { + if (other is null) + return false; + + return string.Equals(Name, other.Name, StringComparison.OrdinalIgnoreCase); + } } /// @@ -21,28 +33,47 @@ namespace SabreTools.Metadata.DatItems.Test /// private class TestDatItem : DatItem { - private readonly string? _nameKey; + public override Data.Models.Metadata.ItemType ItemType => Data.Models.Metadata.ItemType.Blank; - protected override ItemType ItemType => ItemType.Blank; + public string? Name + { + get => _internal?.Name; + set => _internal?.Name = value; + } - public TestDatItem() => _nameKey = TestDatItemModel.NameKey; - - public TestDatItem(string? nameKey) => _nameKey = nameKey; + public TestDatItem() { } /// public override object Clone() => new TestDatItem() { - _internal = _internal.Clone() as TestDatItemModel ?? [] + _internal = GetInternalClone(), }; /// - public override string? GetName() => _nameKey is not null ? _internal.ReadString(_nameKey) : null; + public override TestDatItemModel GetInternalClone() + { + return _internal?.Clone() as TestDatItemModel ?? new(); + } /// - public override void SetName(string? name) + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + /// + public override bool Equals(DatItem? other) { - if (_nameKey is not null) - _internal[_nameKey] = name; + // If the other value is invalid + if (other is null) + return false; + + // If the type matches + if (other is TestDatItem otherTestDatItem) + return _internal.Equals(otherTestDatItem._internal); + + // Everything else fails + return false; } } @@ -53,176 +84,97 @@ namespace SabreTools.Metadata.DatItems.Test [Fact] public void CopyMachineInformation_NewItem_Overwrite() { - Machine? machineA = new Machine(); - machineA.SetName("machineA"); - var romA = new Rom(); - var romB = new Rom(); - romB.Remove(DatItem.MachineKey); + var romB = new Rom { Machine = null }; romA.CopyMachineInformation(romB); - var actualMachineA = romA.GetMachine(); + var actualMachineA = romA.Machine; Assert.NotNull(actualMachineA); - Assert.Null(actualMachineA.GetName()); + Assert.Null(actualMachineA.Name); } [Fact] public void CopyMachineInformation_EmptyItem_NoChange() { - Machine? machineA = new Machine(); - machineA.SetName("machineA"); + Machine? machineA = new Machine { Name = "machineA" }; - var romA = new Rom(); - romA.Write(DatItem.MachineKey, machineA); + var romA = new Rom { Machine = machineA }; - var romB = new Rom(); - romB.Remove(DatItem.MachineKey); + var romB = new Rom { Machine = null }; romA.CopyMachineInformation(romB); - var actualMachineA = romA.GetMachine(); + var actualMachineA = romA.Machine; Assert.NotNull(actualMachineA); - Assert.Equal("machineA", actualMachineA.GetName()); + Assert.Equal("machineA", actualMachineA.Name); } [Fact] public void CopyMachineInformation_NullMachine_NoChange() { - Machine? machineA = new Machine(); - machineA.SetName("machineA"); + Machine? machineA = new Machine { Name = "machineA" }; Machine? machineB = null; - var romA = new Rom(); - romA.Write(DatItem.MachineKey, machineA); + var romA = new Rom { Machine = machineA }; - var romB = new Rom(); - romB.Write(DatItem.MachineKey, machineB); + var romB = new Rom { Machine = machineB }; romA.CopyMachineInformation(romB); - var actualMachineA = romA.GetMachine(); + var actualMachineA = romA.Machine; Assert.NotNull(actualMachineA); - Assert.Equal("machineA", actualMachineA.GetName()); + Assert.Equal("machineA", actualMachineA.Name); } [Fact] public void CopyMachineInformation_EmptyMachine_Overwrite() { - Machine? machineA = new Machine(); - machineA.SetName("machineA"); + Machine? machineA = new Machine { Name = "machineA" }; Machine? machineB = new Machine(); - var romA = new Rom(); - romA.Write(DatItem.MachineKey, machineA); + var romA = new Rom { Machine = machineA }; - var romB = new Rom(); - romB.Write(DatItem.MachineKey, machineB); + var romB = new Rom { Machine = machineB }; romA.CopyMachineInformation(romB); - var actualMachineA = romA.GetMachine(); + var actualMachineA = romA.Machine; Assert.NotNull(actualMachineA); - Assert.Null(actualMachineA.GetName()); + Assert.Null(actualMachineA.Name); } [Fact] public void CopyMachineInformation_FilledMachine_Overwrite() { - Machine? machineA = new Machine(); - machineA.SetName("machineA"); + Machine? machineA = new Machine { Name = "machineA" }; - Machine? machineB = new Machine(); - machineB.SetName("machineB"); + Machine? machineB = new Machine { Name = "machineB" }; - var romA = new Rom(); - romA.Write(DatItem.MachineKey, machineA); + var romA = new Rom { Machine = machineA }; - var romB = new Rom(); - romB.Write(DatItem.MachineKey, machineB); + var romB = new Rom { Machine = machineB }; romA.CopyMachineInformation(romB); - var actualMachineA = romA.GetMachine(); + var actualMachineA = romA.Machine; Assert.NotNull(actualMachineA); - Assert.Equal("machineB", actualMachineA.GetName()); + Assert.Equal("machineB", actualMachineA.Name); } [Fact] public void CopyMachineInformation_MismatchedType_Overwrite() { - Machine? machineA = new Machine(); - machineA.SetName("machineA"); + Machine? machineA = new Machine { Name = "machineA" }; - Machine? machineB = new Machine(); - machineB.SetName("machineB"); + Machine? machineB = new Machine { Name = "machineB" }; - var romA = new Rom(); - romA.Write(DatItem.MachineKey, machineA); + var romA = new Rom { Machine = machineA }; - var diskB = new Disk(); - diskB.Write(DatItem.MachineKey, machineB); + var diskB = new Disk { Machine = machineB }; romA.CopyMachineInformation(diskB); - var actualMachineA = romA.GetMachine(); + var actualMachineA = romA.Machine; Assert.NotNull(actualMachineA); - Assert.Equal("machineB", actualMachineA.GetName()); - } - - #endregion - - #region CompareTo - - [Fact] - public void CompareTo_NullOther_Returns1() - { - DatItem self = new Rom(); - DatItem? other = null; - - int actual = self.CompareTo(other); - Assert.Equal(1, actual); - } - - [Fact] - public void CompareTo_DifferentOther_Returns1() - { - DatItem self = new Rom(); - self.SetName("name"); - - DatItem? other = new Disk(); - other.SetName("name"); - - int actual = self.CompareTo(other); - Assert.Equal(1, actual); - } - - [Fact] - public void CompareTo_Empty_Returns1() - { - DatItem self = new Rom(); - DatItem? other = new Rom(); - - int actual = self.CompareTo(other); - Assert.Equal(1, actual); - } - - [Theory] - [InlineData(null, null, 0)] - [InlineData("name", null, 1)] - [InlineData("name", "other", -1)] - [InlineData(null, "name", -1)] - [InlineData("other", "name", 1)] - [InlineData("name", "name", 0)] - public void CompareTo_NamesOnly(string? selfName, string? otherName, int expected) - { - DatItem self = new Rom(); - self.SetName(selfName); - self.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - - DatItem? other = new Rom(); - other.SetName(otherName); - other.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - - int actual = self.CompareTo(other); - Assert.Equal(expected, actual); + Assert.Equal("machineB", actualMachineA.Name); } #endregion @@ -259,19 +211,6 @@ namespace SabreTools.Metadata.DatItems.Test Assert.True(actual); } - [Fact] - public void Equals_MismatchedInternal_False() - { - DatItem self = new TestDatItem(); - self.SetName("self"); - - DatItem? other = new TestDatItem(); - other.SetName("other"); - - bool actual = self.Equals(other); - Assert.False(actual); - } - [Fact] public void Equals_EqualInternal_True() { @@ -303,10 +242,10 @@ namespace SabreTools.Metadata.DatItems.Test [InlineData(ItemKey.CRC16, false, true, "0000")] [InlineData(ItemKey.CRC16, true, false, "0000")] [InlineData(ItemKey.CRC16, true, true, "0000")] - [InlineData(ItemKey.CRC, false, false, "00000000")] - [InlineData(ItemKey.CRC, false, true, "00000000")] - [InlineData(ItemKey.CRC, true, false, "00000000")] - [InlineData(ItemKey.CRC, true, true, "00000000")] + [InlineData(ItemKey.CRC32, false, false, "00000000")] + [InlineData(ItemKey.CRC32, false, true, "00000000")] + [InlineData(ItemKey.CRC32, true, false, "00000000")] + [InlineData(ItemKey.CRC32, true, true, "00000000")] [InlineData(ItemKey.CRC64, false, false, "0000000000000000")] [InlineData(ItemKey.CRC64, false, true, "0000000000000000")] [InlineData(ItemKey.CRC64, true, false, "0000000000000000")] @@ -355,8 +294,7 @@ namespace SabreTools.Metadata.DatItems.Test { Source source = new Source(0); - Machine machine = new Machine(); - machine.Write(Data.Models.Metadata.Machine.NameKey, "Machine"); + Machine machine = new Machine { Name = "Machine" }; DatItem datItem = new Blank(); @@ -377,10 +315,10 @@ namespace SabreTools.Metadata.DatItems.Test [InlineData(ItemKey.CRC16, false, true, "DEADBEEF")] [InlineData(ItemKey.CRC16, true, false, "deadbeef")] [InlineData(ItemKey.CRC16, true, true, "deadbeef")] - [InlineData(ItemKey.CRC, false, false, "DEADBEEF")] - [InlineData(ItemKey.CRC, false, true, "DEADBEEF")] - [InlineData(ItemKey.CRC, true, false, "deadbeef")] - [InlineData(ItemKey.CRC, true, true, "deadbeef")] + [InlineData(ItemKey.CRC32, false, false, "DEADBEEF")] + [InlineData(ItemKey.CRC32, false, true, "DEADBEEF")] + [InlineData(ItemKey.CRC32, true, false, "deadbeef")] + [InlineData(ItemKey.CRC32, true, true, "deadbeef")] [InlineData(ItemKey.CRC64, false, false, "DEADBEEF")] [InlineData(ItemKey.CRC64, false, true, "DEADBEEF")] [InlineData(ItemKey.CRC64, true, false, "deadbeef")] @@ -429,23 +367,24 @@ namespace SabreTools.Metadata.DatItems.Test { Source source = new Source(0); - Machine machine = new Machine(); - machine.Write(Data.Models.Metadata.Machine.NameKey, "Machine"); + Machine machine = new Machine { Name = "Machine" }; - DatItem datItem = new Rom(); - datItem.Write(Data.Models.Metadata.Rom.CRC16Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.CRC64Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.MD2Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.MD4Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.MD5Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.RIPEMD128Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.RIPEMD160Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.SHA1Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.SHA256Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.SHA384Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.SHA512Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.SpamSumKey, "BASE64"); + DatItem datItem = new Rom + { + CRC16 = "DEADBEEF", + CRC32 = "DEADBEEF", + CRC64 = "DEADBEEF", + MD2 = "DEADBEEF", + MD4 = "DEADBEEF", + MD5 = "DEADBEEF", + RIPEMD128 = "DEADBEEF", + RIPEMD160 = "DEADBEEF", + SHA1 = "DEADBEEF", + SHA256 = "DEADBEEF", + SHA384 = "DEADBEEF", + SHA512 = "DEADBEEF", + SpamSum = "BASE64" + }; string actual = datItem.GetKey(bucketedBy, machine, source, lower, norename); Assert.Equal(expected, actual); @@ -453,96 +392,17 @@ namespace SabreTools.Metadata.DatItems.Test #endregion - #region GetName - - [Fact] - public void GetName_NoNameKey_Null() - { - DatItem item = new TestDatItem(nameKey: null); - item.Write(TestDatItemModel.NameKey, "name"); - - string? actual = item.GetName(); - Assert.Null(actual); - } - - [Fact] - public void GetName_EmptyNameKey_Null() - { - DatItem item = new TestDatItem(nameKey: string.Empty); - item.Write(TestDatItemModel.NameKey, "name"); - - string? actual = item.GetName(); - Assert.Null(actual); - } - - [Fact] - public void GetName_NameKeyNotExists_Null() - { - DatItem item = new TestDatItem(nameKey: "INVALID"); - item.Write(TestDatItemModel.NameKey, "name"); - - string? actual = item.GetName(); - Assert.Null(actual); - } - - [Fact] - public void GetName_NameKeyExists_Filled() - { - DatItem item = new TestDatItem(nameKey: TestDatItemModel.NameKey); - item.Write(TestDatItemModel.NameKey, "name"); - - string? actual = item.GetName(); - Assert.Equal("name", actual); - } - - #endregion - - #region SetName - - [Fact] - public void SetName_NoNameKey_Null() - { - DatItem item = new TestDatItem(nameKey: null); - item.SetName("name"); - - string? actual = item.GetName(); - Assert.Null(actual); - } - - [Fact] - public void SetName_EmptyNameKey_Null() - { - DatItem item = new TestDatItem(nameKey: string.Empty); - item.SetName("name"); - - string? actual = item.GetName(); - Assert.Null(actual); - } - - [Fact] - public void SetName_NameKeyNonEmpty_Filled() - { - DatItem item = new TestDatItem(nameKey: TestDatItemModel.NameKey); - item.SetName("name"); - - string? actual = item.GetName(); - Assert.Equal("name", actual); - } - - #endregion - #region Clone [Fact] public void CloneTest() { - DatItem item = new Sample(); - item.SetName("name"); + DatItem item = new Sample { Name = "name" }; object clone = item.Clone(); Sample? actual = clone as Sample; Assert.NotNull(actual); - Assert.Equal("name", actual.GetName()); + Assert.Equal("name", actual.Name); } #endregion @@ -552,11 +412,9 @@ namespace SabreTools.Metadata.DatItems.Test [Fact] public void GetInternalCloneTest() { - DatItem item = new TestDatItem(); - item.SetName("name"); - + DatItem item = new TestDatItem { Name = "name" }; TestDatItemModel actual = item.GetInternalClone(); - Assert.Equal("name", actual[TestDatItemModel.NameKey]); + Assert.Equal("name", actual.Name); } #endregion diff --git a/SabreTools.Metadata.DatItems.Test/ExtensionsTests.cs b/SabreTools.Metadata.DatItems.Test/ExtensionsTests.cs index dfb28c81..fa2c4e86 100644 --- a/SabreTools.Metadata.DatItems.Test/ExtensionsTests.cs +++ b/SabreTools.Metadata.DatItems.Test/ExtensionsTests.cs @@ -6,67 +6,6 @@ namespace SabreTools.Metadata.DatItems.Test { #region String to Enum - [Theory] - [InlineData(null, ItemType.NULL)] - [InlineData("adjuster", ItemType.Adjuster)] - [InlineData("analog", ItemType.Analog)] - [InlineData("archive", ItemType.Archive)] - [InlineData("biosset", ItemType.BiosSet)] - [InlineData("blank", ItemType.Blank)] - [InlineData("chip", ItemType.Chip)] - [InlineData("condition", ItemType.Condition)] - [InlineData("configuration", ItemType.Configuration)] - [InlineData("conflocation", ItemType.ConfLocation)] - [InlineData("confsetting", ItemType.ConfSetting)] - [InlineData("control", ItemType.Control)] - [InlineData("dataarea", ItemType.DataArea)] - [InlineData("device", ItemType.Device)] - [InlineData("deviceref", ItemType.DeviceRef)] - [InlineData("device_ref", ItemType.DeviceRef)] - [InlineData("diplocation", ItemType.DipLocation)] - [InlineData("dipswitch", ItemType.DipSwitch)] - [InlineData("dipvalue", ItemType.DipValue)] - [InlineData("disk", ItemType.Disk)] - [InlineData("diskarea", ItemType.DiskArea)] - [InlineData("display", ItemType.Display)] - [InlineData("driver", ItemType.Driver)] - [InlineData("extension", ItemType.Extension)] - [InlineData("feature", ItemType.Feature)] - [InlineData("file", ItemType.File)] - [InlineData("info", ItemType.Info)] - [InlineData("input", ItemType.Input)] - [InlineData("instance", ItemType.Instance)] - [InlineData("media", ItemType.Media)] - [InlineData("part", ItemType.Part)] - [InlineData("partfeature", ItemType.PartFeature)] - [InlineData("part_feature", ItemType.PartFeature)] - [InlineData("port", ItemType.Port)] - [InlineData("ramoption", ItemType.RamOption)] - [InlineData("ram_option", ItemType.RamOption)] - [InlineData("release", ItemType.Release)] - [InlineData("releasedetails", ItemType.ReleaseDetails)] - [InlineData("release_details", ItemType.ReleaseDetails)] - [InlineData("rom", ItemType.Rom)] - [InlineData("sample", ItemType.Sample)] - [InlineData("serials", ItemType.Serials)] - [InlineData("sharedfeat", ItemType.SharedFeat)] - [InlineData("shared_feat", ItemType.SharedFeat)] - [InlineData("sharedfeature", ItemType.SharedFeat)] - [InlineData("shared_feature", ItemType.SharedFeat)] - [InlineData("slot", ItemType.Slot)] - [InlineData("slotoption", ItemType.SlotOption)] - [InlineData("slot_option", ItemType.SlotOption)] - [InlineData("softwarelist", ItemType.SoftwareList)] - [InlineData("software_list", ItemType.SoftwareList)] - [InlineData("sound", ItemType.Sound)] - [InlineData("sourcedetails", ItemType.SourceDetails)] - [InlineData("source_details", ItemType.SourceDetails)] - public void AsItemTypeTest(string? field, ItemType expected) - { - ItemType actual = field.AsItemType(); - Assert.Equal(expected, actual); - } - [Theory] [InlineData(null, MachineType.None)] [InlineData("none", MachineType.None)] @@ -82,60 +21,5 @@ namespace SabreTools.Metadata.DatItems.Test } #endregion - - #region Enum to String - - [Theory] - [InlineData(ItemType.NULL, null)] - [InlineData(ItemType.Adjuster, "adjuster")] - [InlineData(ItemType.Analog, "analog")] - [InlineData(ItemType.Archive, "archive")] - [InlineData(ItemType.BiosSet, "biosset")] - [InlineData(ItemType.Blank, "blank")] - [InlineData(ItemType.Chip, "chip")] - [InlineData(ItemType.Condition, "condition")] - [InlineData(ItemType.Configuration, "configuration")] - [InlineData(ItemType.ConfLocation, "conflocation")] - [InlineData(ItemType.ConfSetting, "confsetting")] - [InlineData(ItemType.Control, "control")] - [InlineData(ItemType.DataArea, "dataarea")] - [InlineData(ItemType.Device, "device")] - [InlineData(ItemType.DeviceRef, "device_ref")] - [InlineData(ItemType.DipLocation, "diplocation")] - [InlineData(ItemType.DipSwitch, "dipswitch")] - [InlineData(ItemType.DipValue, "dipvalue")] - [InlineData(ItemType.Disk, "disk")] - [InlineData(ItemType.DiskArea, "diskarea")] - [InlineData(ItemType.Display, "display")] - [InlineData(ItemType.Driver, "driver")] - [InlineData(ItemType.Extension, "extension")] - [InlineData(ItemType.Feature, "feature")] - [InlineData(ItemType.File, "file")] - [InlineData(ItemType.Info, "info")] - [InlineData(ItemType.Input, "input")] - [InlineData(ItemType.Instance, "instance")] - [InlineData(ItemType.Media, "media")] - [InlineData(ItemType.Part, "part")] - [InlineData(ItemType.PartFeature, "part_feature")] - [InlineData(ItemType.Port, "port")] - [InlineData(ItemType.RamOption, "ramoption")] - [InlineData(ItemType.Release, "release")] - [InlineData(ItemType.ReleaseDetails, "release_details")] - [InlineData(ItemType.Rom, "rom")] - [InlineData(ItemType.Sample, "sample")] - [InlineData(ItemType.Serials, "serials")] - [InlineData(ItemType.SharedFeat, "sharedfeat")] - [InlineData(ItemType.Slot, "slot")] - [InlineData(ItemType.SlotOption, "slotoption")] - [InlineData(ItemType.SoftwareList, "softwarelist")] - [InlineData(ItemType.Sound, "sound")] - [InlineData(ItemType.SourceDetails, "source_details")] - public void FromItemTypeTest(ItemType field, string? expected) - { - string? actual = field.AsStringValue(); - Assert.Equal(expected, actual); - } - - #endregion } } diff --git a/SabreTools.Metadata.DatItems.Test/Formats/DiskTests.cs b/SabreTools.Metadata.DatItems.Test/Formats/DiskTests.cs index 63372540..f449b974 100644 --- a/SabreTools.Metadata.DatItems.Test/Formats/DiskTests.cs +++ b/SabreTools.Metadata.DatItems.Test/Formats/DiskTests.cs @@ -10,61 +10,60 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void ConvertToRomTest() { - DiskArea diskArea = new DiskArea(); - diskArea.SetName("XXXXXX"); + DiskArea diskArea = new DiskArea { Name = "name" }; - Machine machine = new Machine(); - machine.Write(Data.Models.Metadata.Machine.NameKey, "XXXXXX"); + Machine machine = new Machine { Name = "name" }; - Part part = new Part(); - part.SetName("XXXXXX"); + Part part = new Part { Name = "name" }; - Source source = new Source(0, "XXXXXX"); + Source source = new Source(0, "source"); - Disk disk = new Disk(); - disk.SetName("XXXXXX"); - disk.Write(Disk.DiskAreaKey, diskArea); - disk.Write(Data.Models.Metadata.Disk.MergeKey, "XXXXXX"); - disk.Write(Data.Models.Metadata.Disk.RegionKey, "XXXXXX"); - disk.Write(Data.Models.Metadata.Disk.StatusKey, "good"); - disk.Write(Data.Models.Metadata.Disk.OptionalKey, "XXXXXX"); - disk.Write(Data.Models.Metadata.Disk.MD5Key, HashType.MD5.ZeroString); - disk.Write(Data.Models.Metadata.Disk.SHA1Key, HashType.SHA1.ZeroString); - disk.Write(DatItem.DupeTypeKey, DupeType.All | DupeType.External); - disk.Write(DatItem.MachineKey, machine); - disk.Write(Disk.PartKey, part); - disk.Write(DatItem.RemoveKey, (bool?)false); - disk.Write(DatItem.SourceKey, source); + Disk disk = new Disk + { + 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, + }; Rom actual = disk.ConvertToRom(); - Assert.Equal("XXXXXX.chd", actual.GetName()); - Assert.Equal("XXXXXX", actual.ReadString(Data.Models.Metadata.Rom.MergeKey)); - Assert.Equal("XXXXXX", actual.ReadString(Data.Models.Metadata.Rom.RegionKey)); - Assert.Equal("good", actual.ReadString(Data.Models.Metadata.Rom.StatusKey)); - Assert.Equal("XXXXXX", actual.ReadString(Data.Models.Metadata.Rom.OptionalKey)); - Assert.Equal(HashType.MD5.ZeroString, actual.ReadString(Data.Models.Metadata.Rom.MD5Key)); - Assert.Equal(HashType.SHA1.ZeroString, actual.ReadString(Data.Models.Metadata.Rom.SHA1Key)); - Assert.Equal(DupeType.All | DupeType.External, actual.Read(DatItem.DupeTypeKey)); + Assert.Equal("name.chd", actual.Name); + Assert.Equal("merge", actual.Merge); + Assert.Equal("region", actual.Region); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, actual.Status); + Assert.Equal(true, actual.Optional); + Assert.Equal(HashType.MD5.ZeroString, actual.MD5); + Assert.Equal(HashType.SHA1.ZeroString, actual.SHA1); + Assert.Equal(DupeType.All | DupeType.External, actual.DupeType); - DataArea? actualDataArea = actual.Read(Rom.DataAreaKey); + DataArea? actualDataArea = actual.DataArea; Assert.NotNull(actualDataArea); - Assert.Equal("XXXXXX", actualDataArea.ReadString(Data.Models.Metadata.DataArea.NameKey)); + Assert.Equal("name", actualDataArea.Name); - Machine? actualMachine = actual.GetMachine(); + Machine? actualMachine = actual.Machine; Assert.NotNull(actualMachine); - Assert.Equal("XXXXXX", actualMachine.GetName()); + Assert.Equal("name", actualMachine.Name); - Assert.Equal(false, actual.ReadBool(DatItem.RemoveKey)); + Assert.False(actual.RemoveFlag); - Part? actualPart = actual.Read(Rom.PartKey); + Part? actualPart = actual.Part; Assert.NotNull(actualPart); - Assert.Equal("XXXXXX", actualPart.ReadString(Data.Models.Metadata.Part.NameKey)); + Assert.Equal("name", actualPart.Name); - Source? actualSource = actual.Read(DatItem.SourceKey); + Source? actualSource = actual.Source; Assert.NotNull(actualSource); Assert.Equal(0, actualSource.Index); - Assert.Equal("XXXXXX", actualSource.Name); + Assert.Equal("source", actualSource.Name); } #endregion @@ -79,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] @@ -88,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 @@ -113,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); @@ -124,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); @@ -135,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); @@ -158,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); @@ -169,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); @@ -180,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); @@ -191,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); @@ -213,10 +228,10 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [InlineData(ItemKey.Machine, false, true, "Machine")] [InlineData(ItemKey.Machine, true, false, "0000000000-machine")] [InlineData(ItemKey.Machine, true, true, "machine")] - [InlineData(ItemKey.CRC, false, false, "00000000")] - [InlineData(ItemKey.CRC, false, true, "00000000")] - [InlineData(ItemKey.CRC, true, false, "00000000")] - [InlineData(ItemKey.CRC, true, true, "00000000")] + [InlineData(ItemKey.CRC32, false, false, "00000000")] + [InlineData(ItemKey.CRC32, false, true, "00000000")] + [InlineData(ItemKey.CRC32, true, false, "00000000")] + [InlineData(ItemKey.CRC32, true, true, "00000000")] [InlineData(ItemKey.MD2, false, false, "8350e5a3e24c153df2275c9f80692773")] [InlineData(ItemKey.MD2, false, true, "8350e5a3e24c153df2275c9f80692773")] [InlineData(ItemKey.MD2, true, false, "8350e5a3e24c153df2275c9f80692773")] @@ -253,12 +268,13 @@ namespace SabreTools.Metadata.DatItems.Formats.Test { Source source = new Source(0); - Machine machine = new Machine(); - machine.Write(Data.Models.Metadata.Machine.NameKey, "Machine"); + 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.Test/Formats/FileTests.cs b/SabreTools.Metadata.DatItems.Test/Formats/FileTests.cs index d31ccce8..fc9c29bb 100644 --- a/SabreTools.Metadata.DatItems.Test/Formats/FileTests.cs +++ b/SabreTools.Metadata.DatItems.Test/Formats/FileTests.cs @@ -10,8 +10,7 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void ConvertToRomTest() { - Machine machine = new Machine(); - machine.Write(Data.Models.Metadata.Machine.NameKey, "XXXXXX"); + Machine machine = new Machine { Name = "name" }; Source source = new Source(0, "XXXXXX"); @@ -24,32 +23,32 @@ namespace SabreTools.Metadata.DatItems.Formats.Test MD5 = "DEADBEEF", SHA1 = "DEADBEEF", SHA256 = "DEADBEEF", - Format = "XXXXXX" + Format = "XXXXXX", + DupeType = DupeType.All | DupeType.External, + Machine = machine, + RemoveFlag = false, + Source = source }; - file.Write(DatItem.DupeTypeKey, DupeType.All | DupeType.External); - file.Write(DatItem.MachineKey, machine); - file.Write(DatItem.RemoveKey, (bool?)false); - file.Write(DatItem.SourceKey, source); - file.Write(DatItem.MachineKey, machine); - file.Write(DatItem.SourceKey, source); + file.Machine = machine; + file.Source = source; Rom actual = file.ConvertToRom(); - Assert.Equal("XXXXXX.XXXXXX", actual.GetName()); - Assert.Equal(12345, actual.ReadLong(Data.Models.Metadata.Rom.SizeKey)); - Assert.Equal("deadbeef", actual.ReadString(Data.Models.Metadata.Rom.CRCKey)); - Assert.Equal("000000000000000000000000deadbeef", actual.ReadString(Data.Models.Metadata.Rom.MD5Key)); - Assert.Equal("00000000000000000000000000000000deadbeef", actual.ReadString(Data.Models.Metadata.Rom.SHA1Key)); - Assert.Equal("00000000000000000000000000000000000000000000000000000000deadbeef", actual.ReadString(Data.Models.Metadata.Rom.SHA256Key)); - Assert.Equal(DupeType.All | DupeType.External, actual.Read(DatItem.DupeTypeKey)); + Assert.Equal("XXXXXX.XXXXXX", actual.Name); + Assert.Equal(12345, actual.Size); + Assert.Equal("deadbeef", actual.CRC32); + Assert.Equal("000000000000000000000000deadbeef", actual.MD5); + Assert.Equal("00000000000000000000000000000000deadbeef", actual.SHA1); + Assert.Equal("00000000000000000000000000000000000000000000000000000000deadbeef", actual.SHA256); + Assert.Equal(DupeType.All | DupeType.External, actual.DupeType); - Machine? actualMachine = actual.GetMachine(); + Machine? actualMachine = actual.Machine; Assert.NotNull(actualMachine); - Assert.Equal("XXXXXX", actualMachine.GetName()); + Assert.Equal("name", actualMachine.Name); - Assert.Equal(false, actual.ReadBool(DatItem.RemoveKey)); + Assert.False(actual.RemoveFlag); - Source? actualSource = actual.Read(DatItem.SourceKey); + Source? actualSource = actual.Source; Assert.NotNull(actualSource); Assert.Equal(0, actualSource.Index); Assert.Equal("XXXXXX", actualSource.Name); @@ -300,10 +299,10 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [InlineData(ItemKey.Machine, false, true, "Machine")] [InlineData(ItemKey.Machine, true, false, "0000000000-machine")] [InlineData(ItemKey.Machine, true, true, "machine")] - [InlineData(ItemKey.CRC, false, false, "deadbeef")] - [InlineData(ItemKey.CRC, false, true, "deadbeef")] - [InlineData(ItemKey.CRC, true, false, "deadbeef")] - [InlineData(ItemKey.CRC, true, true, "deadbeef")] + [InlineData(ItemKey.CRC32, false, false, "deadbeef")] + [InlineData(ItemKey.CRC32, false, true, "deadbeef")] + [InlineData(ItemKey.CRC32, true, false, "deadbeef")] + [InlineData(ItemKey.CRC32, true, true, "deadbeef")] [InlineData(ItemKey.MD2, false, false, "8350e5a3e24c153df2275c9f80692773")] [InlineData(ItemKey.MD2, false, true, "8350e5a3e24c153df2275c9f80692773")] [InlineData(ItemKey.MD2, true, false, "8350e5a3e24c153df2275c9f80692773")] @@ -340,8 +339,7 @@ namespace SabreTools.Metadata.DatItems.Formats.Test { Source source = new Source(0); - Machine machine = new Machine(); - machine.Write(Data.Models.Metadata.Machine.NameKey, "Machine"); + Machine machine = new Machine { Name = "Machine" }; DatItem datItem = new File { diff --git a/SabreTools.Metadata.DatItems.Test/Formats/MediaTests.cs b/SabreTools.Metadata.DatItems.Test/Formats/MediaTests.cs index d2636b5f..11840acc 100644 --- a/SabreTools.Metadata.DatItems.Test/Formats/MediaTests.cs +++ b/SabreTools.Metadata.DatItems.Test/Formats/MediaTests.cs @@ -10,38 +10,39 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void ConvertToRomTest() { - Machine machine = new Machine(); - machine.Write(Data.Models.Metadata.Machine.NameKey, "XXXXXX"); + Machine machine = new Machine { Name = "name" }; Source source = new Source(0, "XXXXXX"); - Media media = new Media(); - media.SetName("XXXXXX"); - media.Write(Data.Models.Metadata.Media.MD5Key, HashType.MD5.ZeroString); - media.Write(Data.Models.Metadata.Media.SHA1Key, HashType.SHA1.ZeroString); - media.Write(Data.Models.Metadata.Media.SHA256Key, HashType.SHA256.ZeroString); - media.Write(Data.Models.Metadata.Media.SpamSumKey, HashType.SpamSum.ZeroString); - media.Write(DatItem.DupeTypeKey, DupeType.All | DupeType.External); - media.Write(DatItem.MachineKey, machine); - media.Write(DatItem.RemoveKey, (bool?)false); - media.Write(DatItem.SourceKey, source); + Media media = new Media + { + Name = "name", + MD5 = HashType.MD5.ZeroString, + SHA1 = HashType.SHA1.ZeroString, + SHA256 = HashType.SHA256.ZeroString, + SpamSum = HashType.SpamSum.ZeroString, + DupeType = DupeType.All | DupeType.External, + Machine = machine, + RemoveFlag = false, + Source = source + }; Rom actual = media.ConvertToRom(); - Assert.Equal("XXXXXX.aaruf", actual.GetName()); - Assert.Equal(HashType.MD5.ZeroString, actual.ReadString(Data.Models.Metadata.Rom.MD5Key)); - Assert.Equal(HashType.SHA1.ZeroString, actual.ReadString(Data.Models.Metadata.Rom.SHA1Key)); - Assert.Equal(HashType.SHA256.ZeroString, actual.ReadString(Data.Models.Metadata.Rom.SHA256Key)); - Assert.Equal(HashType.SpamSum.ZeroString, actual.ReadString(Data.Models.Metadata.Rom.SpamSumKey)); - Assert.Equal(DupeType.All | DupeType.External, actual.Read(DatItem.DupeTypeKey)); + Assert.Equal("name.aaruf", actual.Name); + Assert.Equal(HashType.MD5.ZeroString, actual.MD5); + Assert.Equal(HashType.SHA1.ZeroString, actual.SHA1); + Assert.Equal(HashType.SHA256.ZeroString, actual.SHA256); + Assert.Equal(HashType.SpamSum.ZeroString, actual.SpamSum); + Assert.Equal(DupeType.All | DupeType.External, actual.DupeType); - Machine? actualMachine = actual.GetMachine(); + Machine? actualMachine = actual.Machine; Assert.NotNull(actualMachine); - Assert.Equal("XXXXXX", actualMachine.GetName()); + Assert.Equal("name", actualMachine.Name); - Assert.Equal(false, actual.ReadBool(DatItem.RemoveKey)); + Assert.False(actual.RemoveFlag); - Source? actualSource = actual.Read(DatItem.SourceKey); + Source? actualSource = actual.Source; Assert.NotNull(actualSource); Assert.Equal(0, actualSource.Index); Assert.Equal("XXXXXX", actualSource.Name); @@ -59,10 +60,10 @@ namespace SabreTools.Metadata.DatItems.Formats.Test self.FillMissingInformation(other); - Assert.Null(self.ReadString(Data.Models.Metadata.Media.MD5Key)); - Assert.Null(self.ReadString(Data.Models.Metadata.Media.SHA1Key)); - Assert.Null(self.ReadString(Data.Models.Metadata.Media.SHA256Key)); - Assert.Null(self.ReadString(Data.Models.Metadata.Media.SpamSumKey)); + Assert.Null(self.MD5); + Assert.Null(self.SHA1); + Assert.Null(self.SHA256); + Assert.Null(self.SpamSum); } [Fact] @@ -70,18 +71,20 @@ namespace SabreTools.Metadata.DatItems.Formats.Test { Media self = new Media(); - Media other = new Media(); - other.Write(Data.Models.Metadata.Media.MD5Key, "XXXXXX"); - other.Write(Data.Models.Metadata.Media.SHA1Key, "XXXXXX"); - other.Write(Data.Models.Metadata.Media.SHA256Key, "XXXXXX"); - other.Write(Data.Models.Metadata.Media.SpamSumKey, "XXXXXX"); + Media other = new Media + { + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX" + }; self.FillMissingInformation(other); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Media.MD5Key)); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Media.SHA1Key)); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Media.SHA256Key)); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Media.SpamSumKey)); + Assert.Equal("XXXXXX", self.MD5); + Assert.Equal("XXXXXX", self.SHA1); + Assert.Equal("XXXXXX", self.SHA256); + Assert.Equal("XXXXXX", self.SpamSum); } #endregion @@ -99,11 +102,13 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_MD5_True() { - Media self = new Media(); - self.Write(Data.Models.Metadata.Media.MD5Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Media.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SpamSumKey, string.Empty); + Media self = new Media + { + MD5 = "XXXXXX", + SHA1 = string.Empty, + SHA256 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -112,11 +117,13 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_SHA1_True() { - Media self = new Media(); - self.Write(Data.Models.Metadata.Media.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SHA1Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Media.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SpamSumKey, string.Empty); + Media self = new Media + { + MD5 = string.Empty, + SHA1 = "XXXXXX", + SHA256 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -125,11 +132,13 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_SHA256_True() { - Media self = new Media(); - self.Write(Data.Models.Metadata.Media.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SHA256Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Media.SpamSumKey, string.Empty); + Media self = new Media + { + MD5 = string.Empty, + SHA1 = string.Empty, + SHA256 = "XXXXXX", + SpamSum = string.Empty + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -138,11 +147,13 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_SpamSum_True() { - Media self = new Media(); - self.Write(Data.Models.Metadata.Media.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SpamSumKey, "XXXXXX"); + Media self = new Media + { + MD5 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SpamSum = "XXXXXX" + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -151,11 +162,13 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_All_True() { - Media self = new Media(); - self.Write(Data.Models.Metadata.Media.MD5Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Media.SHA1Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Media.SHA256Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Media.SpamSumKey, "XXXXXX"); + Media self = new Media + { + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX" + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -176,11 +189,13 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_NonZeroHash_False() { - Media self = new Media(); - self.Write(Data.Models.Metadata.Media.MD5Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Media.SHA1Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Media.SHA256Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Media.SpamSumKey, "XXXXXX"); + Media self = new Media + { + MD5 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SpamSum = "XXXXXX" + }; bool actual = self.HasZeroHash(); Assert.False(actual); @@ -189,11 +204,13 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroMD5_True() { - Media self = new Media(); - self.Write(Data.Models.Metadata.Media.MD5Key, HashType.MD5.ZeroString); - self.Write(Data.Models.Metadata.Media.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SpamSumKey, string.Empty); + Media self = new Media + { + MD5 = HashType.MD5.ZeroString, + SHA1 = string.Empty, + SHA256 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -202,11 +219,13 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroSHA1_True() { - Media self = new Media(); - self.Write(Data.Models.Metadata.Media.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SHA1Key, HashType.SHA1.ZeroString); - self.Write(Data.Models.Metadata.Media.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SpamSumKey, string.Empty); + Media self = new Media + { + MD5 = string.Empty, + SHA1 = HashType.SHA1.ZeroString, + SHA256 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -215,11 +234,13 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroSHA256_True() { - Media self = new Media(); - self.Write(Data.Models.Metadata.Media.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SHA256Key, HashType.SHA256.ZeroString); - self.Write(Data.Models.Metadata.Media.SpamSumKey, string.Empty); + Media self = new Media + { + MD5 = string.Empty, + SHA1 = string.Empty, + SHA256 = HashType.SHA256.ZeroString, + SpamSum = string.Empty + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -228,11 +249,13 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroSpamSum_True() { - Media self = new Media(); - self.Write(Data.Models.Metadata.Media.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Media.SpamSumKey, HashType.SpamSum.ZeroString); + Media self = new Media + { + MD5 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SpamSum = HashType.SpamSum.ZeroString + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -241,11 +264,13 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroAll_True() { - Media self = new Media(); - self.Write(Data.Models.Metadata.Media.MD5Key, HashType.MD5.ZeroString); - self.Write(Data.Models.Metadata.Media.SHA1Key, HashType.SHA1.ZeroString); - self.Write(Data.Models.Metadata.Media.SHA256Key, HashType.SHA256.ZeroString); - self.Write(Data.Models.Metadata.Media.SpamSumKey, HashType.SpamSum.ZeroString); + Media self = new Media + { + MD5 = HashType.MD5.ZeroString, + SHA1 = HashType.SHA1.ZeroString, + SHA256 = HashType.SHA256.ZeroString, + SpamSum = HashType.SpamSum.ZeroString + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -265,10 +290,10 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [InlineData(ItemKey.Machine, false, true, "Machine")] [InlineData(ItemKey.Machine, true, false, "0000000000-machine")] [InlineData(ItemKey.Machine, true, true, "machine")] - [InlineData(ItemKey.CRC, false, false, "00000000")] - [InlineData(ItemKey.CRC, false, true, "00000000")] - [InlineData(ItemKey.CRC, true, false, "00000000")] - [InlineData(ItemKey.CRC, true, true, "00000000")] + [InlineData(ItemKey.CRC32, false, false, "00000000")] + [InlineData(ItemKey.CRC32, false, true, "00000000")] + [InlineData(ItemKey.CRC32, true, false, "00000000")] + [InlineData(ItemKey.CRC32, true, true, "00000000")] [InlineData(ItemKey.MD2, false, false, "8350e5a3e24c153df2275c9f80692773")] [InlineData(ItemKey.MD2, false, true, "8350e5a3e24c153df2275c9f80692773")] [InlineData(ItemKey.MD2, true, false, "8350e5a3e24c153df2275c9f80692773")] @@ -305,15 +330,15 @@ namespace SabreTools.Metadata.DatItems.Formats.Test { Source source = new Source(0); - Machine machine = new Machine(); - machine.Write(Data.Models.Metadata.Machine.NameKey, "Machine"); - - DatItem datItem = new Media(); - datItem.Write(Data.Models.Metadata.Media.MD5Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Media.SHA1Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Media.SHA256Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Media.SpamSumKey, "DEADBEEF"); + Machine machine = new Machine { Name = "Machine" }; + DatItem datItem = new Media + { + MD5 = "DEADBEEF", + SHA1 = "DEADBEEF", + SHA256 = "DEADBEEF", + SpamSum = "DEADBEEF" + }; string actual = datItem.GetKey(bucketedBy, machine, source, lower, norename); Assert.Equal(expected, actual); } diff --git a/SabreTools.Metadata.DatItems.Test/Formats/RomTests.cs b/SabreTools.Metadata.DatItems.Test/Formats/RomTests.cs index 704fb1a0..f66a3e91 100644 --- a/SabreTools.Metadata.DatItems.Test/Formats/RomTests.cs +++ b/SabreTools.Metadata.DatItems.Test/Formats/RomTests.cs @@ -15,19 +15,19 @@ namespace SabreTools.Metadata.DatItems.Formats.Test self.FillMissingInformation(other); - Assert.Null(self.ReadString(Data.Models.Metadata.Rom.CRC16Key)); - Assert.Null(self.ReadString(Data.Models.Metadata.Rom.CRCKey)); - Assert.Null(self.ReadString(Data.Models.Metadata.Rom.CRC64Key)); - Assert.Null(self.ReadString(Data.Models.Metadata.Rom.MD2Key)); - Assert.Null(self.ReadString(Data.Models.Metadata.Rom.MD4Key)); - Assert.Null(self.ReadString(Data.Models.Metadata.Rom.MD5Key)); - Assert.Null(self.ReadString(Data.Models.Metadata.Rom.RIPEMD128Key)); - Assert.Null(self.ReadString(Data.Models.Metadata.Rom.RIPEMD160Key)); - Assert.Null(self.ReadString(Data.Models.Metadata.Rom.SHA1Key)); - Assert.Null(self.ReadString(Data.Models.Metadata.Rom.SHA256Key)); - Assert.Null(self.ReadString(Data.Models.Metadata.Rom.SHA384Key)); - Assert.Null(self.ReadString(Data.Models.Metadata.Rom.SHA512Key)); - Assert.Null(self.ReadString(Data.Models.Metadata.Rom.SpamSumKey)); + Assert.Null(self.CRC16); + Assert.Null(self.CRC32); + Assert.Null(self.CRC64); + Assert.Null(self.MD2); + Assert.Null(self.MD4); + Assert.Null(self.MD5); + Assert.Null(self.RIPEMD128); + Assert.Null(self.RIPEMD160); + Assert.Null(self.SHA1); + Assert.Null(self.SHA256); + Assert.Null(self.SHA384); + Assert.Null(self.SHA512); + Assert.Null(self.SpamSum); } [Fact] @@ -35,36 +35,38 @@ namespace SabreTools.Metadata.DatItems.Formats.Test { Rom self = new Rom(); - Rom other = new Rom(); - other.Write(Data.Models.Metadata.Rom.CRC16Key, "XXXXXX"); - other.Write(Data.Models.Metadata.Rom.CRCKey, "XXXXXX"); - other.Write(Data.Models.Metadata.Rom.CRC64Key, "XXXXXX"); - other.Write(Data.Models.Metadata.Rom.MD2Key, "XXXXXX"); - other.Write(Data.Models.Metadata.Rom.MD4Key, "XXXXXX"); - other.Write(Data.Models.Metadata.Rom.MD5Key, "XXXXXX"); - other.Write(Data.Models.Metadata.Rom.RIPEMD128Key, "XXXXXX"); - other.Write(Data.Models.Metadata.Rom.RIPEMD160Key, "XXXXXX"); - other.Write(Data.Models.Metadata.Rom.SHA1Key, "XXXXXX"); - other.Write(Data.Models.Metadata.Rom.SHA256Key, "XXXXXX"); - other.Write(Data.Models.Metadata.Rom.SHA384Key, "XXXXXX"); - other.Write(Data.Models.Metadata.Rom.SHA512Key, "XXXXXX"); - other.Write(Data.Models.Metadata.Rom.SpamSumKey, "XXXXXX"); + Rom other = new Rom + { + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX" + }; self.FillMissingInformation(other); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Rom.CRC16Key)); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Rom.CRCKey)); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Rom.CRC64Key)); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Rom.MD2Key)); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Rom.MD4Key)); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Rom.MD5Key)); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Rom.RIPEMD128Key)); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Rom.RIPEMD160Key)); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Rom.SHA1Key)); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Rom.SHA256Key)); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Rom.SHA384Key)); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Rom.SHA512Key)); - Assert.Equal("XXXXXX", self.ReadString(Data.Models.Metadata.Rom.SpamSumKey)); + Assert.Equal("XXXXXX", self.CRC16); + Assert.Equal("XXXXXX", self.CRC32); + Assert.Equal("XXXXXX", self.CRC64); + Assert.Equal("XXXXXX", self.MD2); + Assert.Equal("XXXXXX", self.MD4); + Assert.Equal("XXXXXX", self.MD5); + Assert.Equal("XXXXXX", self.RIPEMD128); + Assert.Equal("XXXXXX", self.RIPEMD160); + Assert.Equal("XXXXXX", self.SHA1); + Assert.Equal("XXXXXX", self.SHA256); + Assert.Equal("XXXXXX", self.SHA384); + Assert.Equal("XXXXXX", self.SHA512); + Assert.Equal("XXXXXX", self.SpamSum); } #endregion @@ -82,42 +84,46 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_CRC16_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = "XXXXXX", + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasHashes(); Assert.True(actual); } [Fact] - public void HasHashes_CRC_True() + public void HasHashes_CRC32_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = "XXXXXX", + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -126,20 +132,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_CRC64_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = "XXXXXX", + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -148,20 +156,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_MD2_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = "XXXXXX", + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -170,20 +180,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_MD4_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = "XXXXXX", + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -192,20 +204,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_MD5_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = "XXXXXX", + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -214,20 +228,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_RIPEMD128_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = "XXXXXX", + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -236,20 +252,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_RIPEMD160_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = "XXXXXX", + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -258,20 +276,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_SHA1_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = "XXXXXX", + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -280,20 +300,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_SHA256_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = "XXXXXX", + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -302,20 +324,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_SHA384_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = "XXXXXX", + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -324,20 +348,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_SHA512_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = "XXXXXX", + SpamSum = string.Empty + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -346,20 +372,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_SpamSum_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, "XXXXXX"); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = "XXXXXX" + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -368,20 +396,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasHashes_All_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.CRCKey, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.CRC64Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.MD2Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.MD4Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.MD5Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.SHA1Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.SHA256Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.SHA384Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.SHA512Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, "XXXXXX"); + Rom self = new Rom + { + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX" + }; bool actual = self.HasHashes(); Assert.True(actual); @@ -402,20 +432,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_NonZeroHash_False() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.CRCKey, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.CRC64Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.MD2Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.MD4Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.MD5Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.SHA1Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.SHA256Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.SHA384Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.SHA512Key, "XXXXXX"); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, "XXXXXX"); + Rom self = new Rom + { + CRC16 = "XXXXXX", + CRC32 = "XXXXXX", + CRC64 = "XXXXXX", + MD2 = "XXXXXX", + MD4 = "XXXXXX", + MD5 = "XXXXXX", + RIPEMD128 = "XXXXXX", + RIPEMD160 = "XXXXXX", + SHA1 = "XXXXXX", + SHA256 = "XXXXXX", + SHA384 = "XXXXXX", + SHA512 = "XXXXXX", + SpamSum = "XXXXXX" + }; bool actual = self.HasZeroHash(); Assert.False(actual); @@ -424,42 +456,46 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroCRC16_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, HashType.CRC16.ZeroString); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = HashType.CRC16.ZeroString, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasZeroHash(); Assert.True(actual); } [Fact] - public void HasZeroHash_ZeroCRC_True() + public void HasZeroHash_ZeroCRC32_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, HashType.CRC32.ZeroString); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = HashType.CRC32.ZeroString, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -468,20 +504,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroCRC64_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, HashType.CRC64.ZeroString); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = HashType.CRC64.ZeroString, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -490,20 +528,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroMD2_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, HashType.MD2.ZeroString); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = HashType.MD2.ZeroString, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -512,20 +552,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroMD4_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, HashType.MD4.ZeroString); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = HashType.MD4.ZeroString, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -534,20 +576,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroMD5_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, HashType.MD5.ZeroString); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = HashType.MD5.ZeroString, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -556,20 +600,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroRIPEMD128_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, HashType.RIPEMD128.ZeroString); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = HashType.RIPEMD128.ZeroString, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -578,20 +624,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroRIPEMD160_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, HashType.RIPEMD160.ZeroString); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = HashType.RIPEMD160.ZeroString, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -600,20 +648,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroSHA1_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, HashType.SHA1.ZeroString); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = HashType.SHA1.ZeroString, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -622,20 +672,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroSHA256_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, HashType.SHA256.ZeroString); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = HashType.SHA256.ZeroString, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -644,20 +696,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroSHA384_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, HashType.SHA384.ZeroString); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = HashType.SHA384.ZeroString, + SHA512 = string.Empty, + SpamSum = string.Empty + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -666,20 +720,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroSHA512_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, HashType.SHA512.ZeroString); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, string.Empty); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = HashType.SHA512.ZeroString, + SpamSum = string.Empty + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -688,20 +744,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroSpamSum_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRCKey, string.Empty); - self.Write(Data.Models.Metadata.Rom.CRC64Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD2Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD4Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.MD5Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA1Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA256Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA384Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SHA512Key, string.Empty); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, HashType.SpamSum.ZeroString); + Rom self = new Rom + { + CRC16 = string.Empty, + CRC32 = string.Empty, + CRC64 = string.Empty, + MD2 = string.Empty, + MD4 = string.Empty, + MD5 = string.Empty, + RIPEMD128 = string.Empty, + RIPEMD160 = string.Empty, + SHA1 = string.Empty, + SHA256 = string.Empty, + SHA384 = string.Empty, + SHA512 = string.Empty, + SpamSum = HashType.SpamSum.ZeroString + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -710,20 +768,22 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [Fact] public void HasZeroHash_ZeroAll_True() { - Rom self = new Rom(); - self.Write(Data.Models.Metadata.Rom.CRC16Key, HashType.CRC16.ZeroString); - self.Write(Data.Models.Metadata.Rom.CRCKey, HashType.CRC32.ZeroString); - self.Write(Data.Models.Metadata.Rom.CRC64Key, HashType.CRC64.ZeroString); - self.Write(Data.Models.Metadata.Rom.MD2Key, HashType.MD2.ZeroString); - self.Write(Data.Models.Metadata.Rom.MD4Key, HashType.MD4.ZeroString); - self.Write(Data.Models.Metadata.Rom.MD5Key, HashType.MD5.ZeroString); - self.Write(Data.Models.Metadata.Rom.RIPEMD128Key, HashType.RIPEMD128.ZeroString); - self.Write(Data.Models.Metadata.Rom.RIPEMD160Key, HashType.RIPEMD160.ZeroString); - self.Write(Data.Models.Metadata.Rom.SHA1Key, HashType.SHA1.ZeroString); - self.Write(Data.Models.Metadata.Rom.SHA256Key, HashType.SHA256.ZeroString); - self.Write(Data.Models.Metadata.Rom.SHA384Key, HashType.SHA384.ZeroString); - self.Write(Data.Models.Metadata.Rom.SHA512Key, HashType.SHA512.ZeroString); - self.Write(Data.Models.Metadata.Rom.SpamSumKey, HashType.SpamSum.ZeroString); + Rom self = new Rom + { + CRC16 = HashType.CRC16.ZeroString, + CRC32 = HashType.CRC32.ZeroString, + CRC64 = HashType.CRC64.ZeroString, + MD2 = HashType.MD2.ZeroString, + MD4 = HashType.MD4.ZeroString, + MD5 = HashType.MD5.ZeroString, + RIPEMD128 = HashType.RIPEMD128.ZeroString, + RIPEMD160 = HashType.RIPEMD160.ZeroString, + SHA1 = HashType.SHA1.ZeroString, + SHA256 = HashType.SHA256.ZeroString, + SHA384 = HashType.SHA384.ZeroString, + SHA512 = HashType.SHA512.ZeroString, + SpamSum = HashType.SpamSum.ZeroString + }; bool actual = self.HasZeroHash(); Assert.True(actual); @@ -747,10 +807,10 @@ namespace SabreTools.Metadata.DatItems.Formats.Test [InlineData(ItemKey.CRC16, false, true, "DEADBEEF")] [InlineData(ItemKey.CRC16, true, false, "deadbeef")] [InlineData(ItemKey.CRC16, true, true, "deadbeef")] - [InlineData(ItemKey.CRC, false, false, "DEADBEEF")] - [InlineData(ItemKey.CRC, false, true, "DEADBEEF")] - [InlineData(ItemKey.CRC, true, false, "deadbeef")] - [InlineData(ItemKey.CRC, true, true, "deadbeef")] + [InlineData(ItemKey.CRC32, false, false, "DEADBEEF")] + [InlineData(ItemKey.CRC32, false, true, "DEADBEEF")] + [InlineData(ItemKey.CRC32, true, false, "deadbeef")] + [InlineData(ItemKey.CRC32, true, true, "deadbeef")] [InlineData(ItemKey.CRC64, false, false, "DEADBEEF")] [InlineData(ItemKey.CRC64, false, true, "DEADBEEF")] [InlineData(ItemKey.CRC64, true, false, "deadbeef")] @@ -799,23 +859,24 @@ namespace SabreTools.Metadata.DatItems.Formats.Test { Source source = new Source(0); - Machine machine = new Machine(); - machine.Write(Data.Models.Metadata.Machine.NameKey, "Machine"); + Machine machine = new Machine { Name = "Machine" }; - DatItem datItem = new Rom(); - datItem.Write(Data.Models.Metadata.Rom.CRC16Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.CRCKey, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.CRC64Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.MD2Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.MD4Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.MD5Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.RIPEMD128Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.RIPEMD160Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.SHA1Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.SHA256Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.SHA384Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.SHA512Key, "DEADBEEF"); - datItem.Write(Data.Models.Metadata.Rom.SpamSumKey, "DEADBEEF"); + DatItem datItem = new Rom + { + CRC16 = "DEADBEEF", + CRC32 = "DEADBEEF", + CRC64 = "DEADBEEF", + MD2 = "DEADBEEF", + MD4 = "DEADBEEF", + MD5 = "DEADBEEF", + RIPEMD128 = "DEADBEEF", + RIPEMD160 = "DEADBEEF", + SHA1 = "DEADBEEF", + SHA256 = "DEADBEEF", + SHA384 = "DEADBEEF", + SHA512 = "DEADBEEF", + SpamSum = "DEADBEEF" + }; string actual = datItem.GetKey(bucketedBy, machine, source, lower, norename); Assert.Equal(expected, actual); diff --git a/SabreTools.Metadata.DatItems.Test/MachineTests.cs b/SabreTools.Metadata.DatItems.Test/MachineTests.cs index aced0ad8..dec60781 100644 --- a/SabreTools.Metadata.DatItems.Test/MachineTests.cs +++ b/SabreTools.Metadata.DatItems.Test/MachineTests.cs @@ -9,13 +9,12 @@ namespace SabreTools.Metadata.DatItems.Test [Fact] public void CloneTest() { - Machine item = new Machine(); - item.Write(Data.Models.Metadata.Machine.NameKey, "name"); + Machine item = new Machine { Name = "name" }; object clone = item.Clone(); Machine? actual = clone as Machine; Assert.NotNull(actual); - Assert.Equal("name", actual.GetName()); + Assert.Equal("name", actual.Name); } #endregion @@ -25,11 +24,10 @@ namespace SabreTools.Metadata.DatItems.Test [Fact] public void GetInternalCloneTest() { - Machine item = new Machine(); - item.Write(Data.Models.Metadata.Machine.NameKey, "name"); + Machine item = new Machine { Name = "name" }; Data.Models.Metadata.Machine actual = item.GetInternalClone(); - Assert.Equal("name", actual[Data.Models.Metadata.Machine.NameKey]); + Assert.Equal("name", actual.Name); } #endregion @@ -59,11 +57,9 @@ namespace SabreTools.Metadata.DatItems.Test [Fact] public void Equals_MismatchedInternal_False() { - Machine self = new Machine(); - self.Write(Data.Models.Metadata.Machine.NameKey, "self"); + Machine self = new Machine { Name = "self" }; - Machine? other = new Machine(); - other.Write(Data.Models.Metadata.Machine.NameKey, "other"); + Machine? other = new Machine { Name = "other" }; bool actual = self.Equals(other); Assert.False(actual); @@ -72,11 +68,9 @@ namespace SabreTools.Metadata.DatItems.Test [Fact] public void Equals_EqualInternal_True() { - Machine self = new Machine(); - self.Write(Data.Models.Metadata.Machine.NameKey, "name"); + Machine self = new Machine { Name = "name" }; - Machine? other = new Machine(); - other.Write(Data.Models.Metadata.Machine.NameKey, "name"); + Machine? other = new Machine { Name = "name" }; bool actual = self.Equals(other); Assert.True(actual); diff --git a/SabreTools.Metadata.DatItems/DatItem.cs b/SabreTools.Metadata.DatItems/DatItem.cs index e542490d..7b458c6f 100644 --- a/SabreTools.Metadata.DatItems/DatItem.cs +++ b/SabreTools.Metadata.DatItems/DatItem.cs @@ -1,9 +1,7 @@ -using System; +using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; using SabreTools.Hashing; -using SabreTools.Logging; using SabreTools.Metadata.DatItems.Formats; using SabreTools.Metadata.Filter; @@ -54,71 +52,50 @@ namespace SabreTools.Metadata.DatItems [XmlInclude(typeof(SoftwareList))] [XmlInclude(typeof(Sound))] [XmlInclude(typeof(SourceDetails))] - public abstract class DatItem : ModelBackedItem, IEquatable, IComparable, ICloneable + public abstract class DatItem : ICloneable, IEquatable { - #region Constants + #region Properties /// /// Duplicate type when compared to another item /// - public const string DupeTypeKey = "DUPETYPE"; - - /// - /// Machine associated with the item - /// - public const string MachineKey = "MACHINE"; - - /// - /// Flag if item should be removed - /// - public const string RemoveKey = "REMOVE"; - - /// - /// Source information - /// - public const string SourceKey = "SOURCE"; - - #endregion - - #region Fields + public DupeType DupeType { get; set; } = 0x00; /// /// Item type for the object /// - protected abstract ItemType ItemType { get; } - - #endregion - - #region Logging + public abstract Data.Models.Metadata.ItemType ItemType { get; } /// - /// Static logger for static methods + /// Get the machine for a DatItem /// - [JsonIgnore, XmlIgnore] - protected static readonly Logger _staticLogger = new(); + public Machine? Machine { get; set; } + + /// + /// Flag if item should be removed + /// + public bool RemoveFlag { get; set; } = false; + + /// + /// Source information + /// + public Source? Source { get; set; } #endregion #region Accessors - /// - /// Get the machine for a DatItem - /// - /// Machine if available, null otherwise - /// Relies on - public Machine? GetMachine() => Read(MachineKey); - /// /// Gets the name to use for a DatItem /// /// Name if available, null otherwise - public virtual string? GetName() => _internal.GetName(); + public abstract string? GetName(); /// /// Sets the name to use for a DatItem /// /// Name to set for the item - public virtual void SetName(string? name) => _internal.SetName(name); + public abstract void SetName(string? name); #endregion @@ -137,11 +114,10 @@ namespace SabreTools.Metadata.DatItems public void CopyMachineInformation(DatItem item) { // If there is no machine - if (!item._internal.ContainsKey(MachineKey)) + if (item.Machine is null) return; - var machine = item.GetMachine(); - CopyMachineInformation(machine); + CopyMachineInformation(item.Machine); } /// @@ -154,85 +130,19 @@ namespace SabreTools.Metadata.DatItems return; if (machine.Clone() is Machine cloned) - Write(MachineKey, cloned); + Machine = cloned; } #endregion #region Comparision Methods - /// - public int CompareTo(DatItem? other) - { - // If the other item doesn't exist - if (other is null) - return 1; - - // Get the names to avoid changing values - string? selfName = GetName(); - string? otherName = other.GetName(); - - // If the names are equal - if (selfName == otherName) - return Equals(other) ? 0 : 1; - - // If `otherName` is null, Compare will return > 0 - // If `selfName` is null, Compare will return < 0 - return string.Compare(selfName, otherName, StringComparison.Ordinal); - } - - /// - public override bool Equals(ModelBackedItem? other) - { - // If other is null - if (other is null) - return false; - - // If the type is mismatched - if (other is not DatItem otherItem) - return false; - - // Compare internal models - return _internal.Equals(otherItem); - } - - /// - public override bool Equals(ModelBackedItem? other) - { - // If other is null - if (other is null) - return false; - - // If the type is mismatched - if (other is not DatItem otherItem) - return false; - - // Compare internal models - return _internal.Equals(otherItem); - } - /// /// Determine if an item is a duplicate using partial matching logic /// /// DatItem to use as a baseline /// True if the items are duplicates, false otherwise - public virtual bool Equals(DatItem? other) - { - // If the other item is null - if (other is null) - return false; - - // Get the types for comparison - ItemType selfType = ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType(); - ItemType otherType = other.ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType(); - - // If we don't have a matched type, return false - if (selfType != otherType) - return false; - - // Compare the internal models - return _internal.EqualTo(other._internal); - } + public abstract bool Equals(DatItem? other); #endregion @@ -243,22 +153,14 @@ namespace SabreTools.Metadata.DatItems /// /// Filter runner to use for checking /// True if the item and its machine passes the filter, false otherwise - public bool PassesFilter(FilterRunner filterRunner) - { - var machine = GetMachine(); - if (machine is not null && !machine.PassesFilter(filterRunner)) - return false; - - return filterRunner.Run(_internal); - } + public abstract bool PassesFilter(FilterRunner filterRunner); /// /// Runs a filter and determines if it passes or not /// /// Filter runner to use for checking /// True if the item passes the filter, false otherwise - public bool PassesFilterDB(FilterRunner filterRunner) - => filterRunner.Run(_internal); + public abstract bool PassesFilterDB(FilterRunner filterRunner); #endregion @@ -279,7 +181,7 @@ namespace SabreTools.Metadata.DatItems string key = string.Empty; string sourceKeyPadded = source?.Index.ToString().PadLeft(10, '0') + '-'; - string machineName = machine?.GetName() ?? "Default"; + string machineName = machine?.Name ?? "Default"; // Now determine what the key should be based on the bucketedBy value switch (bucketedBy) @@ -288,7 +190,7 @@ namespace SabreTools.Metadata.DatItems key = HashType.CRC16.ZeroString; break; - case ItemKey.CRC: + case ItemKey.CRC32: key = HashType.CRC32.ZeroString; break; diff --git a/SabreTools.Metadata.DatItems/DatItemT.cs b/SabreTools.Metadata.DatItems/DatItemT.cs index f0386246..32f5a2f4 100644 --- a/SabreTools.Metadata.DatItems/DatItemT.cs +++ b/SabreTools.Metadata.DatItems/DatItemT.cs @@ -1,13 +1,23 @@ using System; -using SabreTools.Data.Extensions; +using SabreTools.Metadata.Filter; namespace SabreTools.Metadata.DatItems { /// /// Base class for all items included in a set that are backed by an internal model /// - public abstract class DatItem : DatItem, IEquatable>, IComparable>, ICloneable where T : Data.Models.Metadata.DatItem, new() + public abstract class DatItem : DatItem, ICloneable + where T : Data.Models.Metadata.DatItem, new() { + #region Private Fields + + /// + /// Internal model + /// + protected T _internal; + + #endregion + #region Constructors /// @@ -18,8 +28,7 @@ namespace SabreTools.Metadata.DatItems _internal = new T(); SetName(string.Empty); - Write(Data.Models.Metadata.DatItem.TypeKey, ItemType); - Write(MachineKey, new Machine()); + Machine = new Machine(); } /// @@ -29,8 +38,7 @@ namespace SabreTools.Metadata.DatItems { _internal = item; - Write(Data.Models.Metadata.DatItem.TypeKey, ItemType); - Write(MachineKey, new Machine()); + Machine = new Machine(); } #endregion @@ -40,55 +48,25 @@ namespace SabreTools.Metadata.DatItems /// /// Get a clone of the current internal model /// - public virtual T GetInternalClone() => (_internal.Clone() as T)!; + public abstract T GetInternalClone(); #endregion - #region Comparision Methods + #region Manipulation /// - public int CompareTo(DatItem? other) + public override bool PassesFilter(FilterRunner filterRunner) { - // If the other item doesn't exist - if (other is null) - return 1; - - // Get the names to avoid changing values - string? selfName = GetName(); - string? otherName = other.GetName(); - - // If the names are equal - if (selfName == otherName) - return Equals(other) ? 0 : 1; - - // If `otherName` is null, Compare will return > 0 - // If `selfName` is null, Compare will return < 0 - return string.Compare(selfName, otherName, StringComparison.Ordinal); - } - - /// - /// Determine if an item is a duplicate using partial matching logic - /// - /// DatItem to use as a baseline - /// True if the items are duplicates, false otherwise - public virtual bool Equals(DatItem? other) - { - // If the other value is null - if (other is null) + if (Machine is not null && !Machine.PassesFilter(filterRunner)) return false; - // Get the types for comparison - ItemType selfType = ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType(); - ItemType otherType = other.ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType(); - - // If we don't have a matched type, return false - if (selfType != otherType) - return false; - - // Compare the internal models - return _internal.EqualTo(other._internal); + return filterRunner.Run(_internal); } + /// + public override bool PassesFilterDB(FilterRunner filterRunner) + => filterRunner.Run(_internal); + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Enums.cs b/SabreTools.Metadata.DatItems/Enums.cs index b0427e43..f9575317 100644 --- a/SabreTools.Metadata.DatItems/Enums.cs +++ b/SabreTools.Metadata.DatItems/Enums.cs @@ -27,7 +27,7 @@ namespace SabreTools.Metadata.DatItems Machine, CRC16, - CRC, + CRC32, CRC64, MD2, MD4, @@ -41,153 +41,6 @@ namespace SabreTools.Metadata.DatItems SpamSum, } - /// - /// Determine what type of file an item is - /// - public enum ItemType - { - /// - /// This is a fake flag that is used for filter only - /// - NULL = 0, - - // "Actionable" item types - - /// "rom" - Rom, - - /// "disk" - Disk, - - /// "file" - File, - - /// "media" - Media, - - // "Auxiliary" item types - - /// "adjuster" - Adjuster, - - /// "analog" - Analog, - - /// "archive" - Archive, - - /// "biosset" - BiosSet, - - /// "chip" - Chip, - - /// "condition" - Condition, - - /// "configuration" - Configuration, - - /// "conflocation" - ConfLocation, - - /// "confsetting" - ConfSetting, - - /// "control" - Control, - - /// "dataarea" - DataArea, - - /// "device" - Device, - - /// "device_ref", "deviceref" - DeviceRef, - - /// "diplocation" - DipLocation, - - /// "dipswitch" - DipSwitch, - - /// "dipvalue" - DipValue, - - /// "diskarea" - DiskArea, - - /// "display" - Display, - - /// "driver" - Driver, - - /// "extension" - Extension, - - /// "feature" - Feature, - - /// "info" - Info, - - /// "input" - Input, - - /// "instance" - Instance, - - /// "original" - Original, - - /// "part" - Part, - - /// "part_feature", "partfeature" - PartFeature, - - /// "port" - Port, - - /// "ramoption", "ram_option" - RamOption, - - /// "release" - Release, - - /// "release_details", "releasedetails" - ReleaseDetails, - - /// "sample" - Sample, - - /// "serials" - Serials, - - /// "sharedfeat", "shared_feat", "sharedfeature", "shared_feature" - SharedFeat, - - /// "slot" - Slot, - - /// "slotoption", "slot_option" - SlotOption, - - /// "softwarelist", "software_list" - SoftwareList, - - /// "sound" - Sound, - - /// "source_details", "sourcedetails" - SourceDetails, - - /// "blank" - Blank = 99, // This is not a real type, only used internally - } - /// /// Determine what type of machine it is /// diff --git a/SabreTools.Metadata.DatItems/Extensions.cs b/SabreTools.Metadata.DatItems/Extensions.cs index 1f42603e..4be3682b 100644 --- a/SabreTools.Metadata.DatItems/Extensions.cs +++ b/SabreTools.Metadata.DatItems/Extensions.cs @@ -4,66 +4,6 @@ namespace SabreTools.Metadata.DatItems { #region String to Enum - /// - /// Get the enum value for an input string, if possible - /// - /// String value to parse/param> - /// Enum value representing the input, default on error - public static ItemType AsItemType(this string? value) - { - return value?.ToLowerInvariant() switch - { - // "Actionable" item types - "rom" => ItemType.Rom, - "disk" => ItemType.Disk, - "file" => ItemType.File, - "media" => ItemType.Media, - - // "Auxiliary" item types - "adjuster" => ItemType.Adjuster, - "analog" => ItemType.Analog, - "archive" => ItemType.Archive, - "biosset" => ItemType.BiosSet, - "chip" => ItemType.Chip, - "condition" => ItemType.Condition, - "configuration" => ItemType.Configuration, - "conflocation" => ItemType.ConfLocation, - "confsetting" => ItemType.ConfSetting, - "control" => ItemType.Control, - "dataarea" => ItemType.DataArea, - "device" => ItemType.Device, - "device_ref" or "deviceref" => ItemType.DeviceRef, - "diplocation" => ItemType.DipLocation, - "dipswitch" => ItemType.DipSwitch, - "dipvalue" => ItemType.DipValue, - "diskarea" => ItemType.DiskArea, - "display" => ItemType.Display, - "driver" => ItemType.Driver, - "extension" => ItemType.Extension, - "feature" => ItemType.Feature, - "info" => ItemType.Info, - "input" => ItemType.Input, - "instance" => ItemType.Instance, - "original" => ItemType.Original, - "part" => ItemType.Part, - "part_feature" or "partfeature" => ItemType.PartFeature, - "port" => ItemType.Port, - "ramoption" or "ram_option" => ItemType.RamOption, - "release" => ItemType.Release, - "release_details" or "releasedetails" => ItemType.ReleaseDetails, - "sample" => ItemType.Sample, - "serials" => ItemType.Serials, - "sharedfeat" or "shared_feat" or "sharedfeature" or "shared_feature" => ItemType.SharedFeat, - "slot" => ItemType.Slot, - "slotoption" or "slot_option" => ItemType.SlotOption, - "softwarelist" or "software_list" => ItemType.SoftwareList, - "sound" => ItemType.Sound, - "source_details" or "sourcedetails" => ItemType.SourceDetails, - "blank" => ItemType.Blank, - _ => ItemType.NULL, - }; - } - /// /// Get the enum value for an input string, if possible /// @@ -82,72 +22,5 @@ namespace SabreTools.Metadata.DatItems } #endregion - - #region Enum to String - - /// - /// Get the string value for an input enum, if possible - /// - /// Enum value to parse/param> - /// String value representing the input, default on error - public static string? AsStringValue(this ItemType value) - { - return value switch - { - // "Actionable" item types - ItemType.Rom => "rom", - ItemType.Disk => "disk", - ItemType.File => "file", - ItemType.Media => "media", - - // "Auxiliary" item types - - ItemType.Adjuster => "adjuster", - ItemType.Analog => "analog", - ItemType.Archive => "archive", - ItemType.BiosSet => "biosset", - ItemType.Chip => "chip", - ItemType.Condition => "condition", - ItemType.Configuration => "configuration", - ItemType.ConfLocation => "conflocation", - ItemType.ConfSetting => "confsetting", - ItemType.Control => "control", - ItemType.DataArea => "dataarea", - ItemType.Device => "device", - ItemType.DeviceRef => "device_ref", - ItemType.DipLocation => "diplocation", - ItemType.DipSwitch => "dipswitch", - ItemType.DipValue => "dipvalue", - ItemType.DiskArea => "diskarea", - ItemType.Display => "display", - ItemType.Driver => "driver", - ItemType.Extension => "extension", - ItemType.Feature => "feature", - ItemType.Info => "info", - ItemType.Input => "input", - ItemType.Instance => "instance", - ItemType.Original => "original", - ItemType.Part => "part", - ItemType.PartFeature => "part_feature", - ItemType.Port => "port", - ItemType.RamOption => "ramoption", - ItemType.Release => "release", - ItemType.ReleaseDetails => "release_details", - ItemType.Sample => "sample", - ItemType.Serials => "serials", - ItemType.SharedFeat => "sharedfeat", - ItemType.Slot => "slot", - ItemType.SlotOption => "slotoption", - ItemType.SoftwareList => "softwarelist", - ItemType.Sound => "sound", - ItemType.SourceDetails => "source_details", - ItemType.Blank => "blank", - - ItemType.NULL => null, - _ => null, - }; - } - - #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Adjuster.cs b/SabreTools.Metadata.DatItems/Formats/Adjuster.cs index fa62b24d..4ec34bca 100644 --- a/SabreTools.Metadata.DatItems/Formats/Adjuster.cs +++ b/SabreTools.Metadata.DatItems/Formats/Adjuster.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,19 +9,27 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("adjuster"), XmlRoot("adjuster")] public sealed class Adjuster : DatItem { - #region Fields + #region Properties - /// /> - protected override ItemType ItemType => ItemType.Adjuster; + public Condition? Condition { get; set; } [JsonIgnore] - public bool ConditionsSpecified + public bool ConditionSpecified => Condition is not null; + + public bool? Default { - get - { - var conditions = Read(Data.Models.Metadata.Adjuster.ConditionKey); - return conditions is not null && conditions.Length > 0; - } + get => _internal.Default; + set => _internal.Default = value; + } + + /// /> + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Adjuster; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; } #endregion @@ -33,42 +40,64 @@ namespace SabreTools.Metadata.DatItems.Formats public Adjuster(Data.Models.Metadata.Adjuster item) : base(item) { - // Process flag values - bool? defaultValue = ReadBool(Data.Models.Metadata.Adjuster.DefaultKey); - if (defaultValue is not null) - Write(Data.Models.Metadata.Adjuster.DefaultKey, defaultValue.FromYesNo()); - // Handle subitems - var condition = item.Read(Data.Models.Metadata.Adjuster.ConditionKey); - if (condition is not null) - Write(Data.Models.Metadata.Adjuster.ConditionKey, new Condition(condition)); + if (item.Condition is not null) + Condition = new Condition(item.Condition); } public Adjuster(Data.Models.Metadata.Adjuster item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new Adjuster(_internal.Clone() as Data.Models.Metadata.Adjuster ?? []); + public override object Clone() => new Adjuster(GetInternalClone()); /// public override Data.Models.Metadata.Adjuster GetInternalClone() { - var adjusterItem = base.GetInternalClone(); + var adjusterItem = _internal.Clone() as Data.Models.Metadata.Adjuster ?? new(); - var condition = Read(Data.Models.Metadata.Adjuster.ConditionKey); - if (condition is not null) - adjusterItem[Data.Models.Metadata.Adjuster.ConditionKey] = condition.GetInternalClone(); + if (Condition is not null) + adjusterItem.Condition = Condition.GetInternalClone(); return adjusterItem; } #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Adjuster otherAdjuster) + return _internal.Equals(otherAdjuster._internal); + + // Everything else fails + return false; + } + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Analog.cs b/SabreTools.Metadata.DatItems/Formats/Analog.cs index 02e9c43f..df3362ff 100644 --- a/SabreTools.Metadata.DatItems/Formats/Analog.cs +++ b/SabreTools.Metadata.DatItems/Formats/Analog.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,17 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("analog"), XmlRoot("analog")] public sealed class Analog : DatItem { - #region Fields + #region Properties /// /> - protected override ItemType ItemType => ItemType.Analog; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Analog; + + public string? Mask + { + get => _internal.Mask; + set => _internal.Mask = value; + } #endregion @@ -25,16 +31,49 @@ namespace SabreTools.Metadata.DatItems.Formats public Analog(Data.Models.Metadata.Analog item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => null; + + /// + public override void SetName(string? name) { } + + #endregion + #region Cloning Methods /// - public override object Clone() => new Analog(_internal.Clone() as Data.Models.Metadata.Analog ?? []); + public override object Clone() => new Analog(GetInternalClone()); + + /// + public override Data.Models.Metadata.Analog GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Analog ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Analog otherAnalog) + return _internal.Equals(otherAnalog._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Archive.cs b/SabreTools.Metadata.DatItems/Formats/Archive.cs index 3cdb978d..ec3ef1e4 100644 --- a/SabreTools.Metadata.DatItems/Formats/Archive.cs +++ b/SabreTools.Metadata.DatItems/Formats/Archive.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,77 +9,208 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("archive"), XmlRoot("archive")] public sealed class Archive : DatItem { - #region Fields + #region Properties + + public string? Additional + { + get => _internal.Additional; + set => _internal.Additional = value; + } + + public bool? Adult + { + get => _internal.Adult; + set => _internal.Adult = value; + } + + public bool? Alt + { + get => _internal.Alt; + set => _internal.Alt = value; + } + + public bool? Bios + { + get => _internal.Bios; + set => _internal.Bios = value; + } + + public string? Categories + { + get => _internal.Categories; + set => _internal.Categories = value; + } + + public string? CloneTag + { + get => _internal.CloneTag; + set => _internal.CloneTag = value; + } + + public bool? Complete + { + get => _internal.Complete; + set => _internal.Complete = value; + } + + public bool? Dat + { + get => _internal.Dat; + set => _internal.Dat = value; + } + + public string? DatterNote + { + get => _internal.DatterNote; + set => _internal.DatterNote = value; + } + public string? Description + { + get => _internal.Description; + set => _internal.Description = value; + } + + public string? DevStatus + { + get => _internal.DevStatus; + set => _internal.DevStatus = value; + } + + public string? GameId1 + { + get => _internal.GameId1; + set => _internal.GameId1 = value; + } + + public string? GameId2 + { + get => _internal.GameId2; + set => _internal.GameId2 = value; + } /// /> - protected override ItemType ItemType => ItemType.Archive; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Archive; - // TODO: None of the following are used or checked + public string? LangChecked + { + get => _internal.LangChecked; + set => _internal.LangChecked = value; + } - /// - /// Archive ID number - /// - /// TODO: No-Intro database export only - [JsonProperty("number"), XmlElement("number")] - public string? Number { get; set; } + public string? Languages + { + get => _internal.Languages; + set => _internal.Languages = value; + } - /// - /// Clone value - /// - /// TODO: No-Intro database export only - [JsonProperty("clone"), XmlElement("clone")] - public string? CloneValue { get; set; } + public bool? Licensed + { + get => _internal.Licensed; + set => _internal.Licensed = value; + } - /// - /// Regional parent value - /// - /// TODO: No-Intro database export only - [JsonProperty("regparent"), XmlElement("regparent")] - public string? RegParent { get; set; } + public bool? Listed + { + get => _internal.Listed; + set => _internal.Listed = value; + } - /// - /// Region value - /// - /// TODO: No-Intro database export only - [JsonProperty("region"), XmlElement("region")] - public string? Region { get; set; } + public string? MergeOf + { + get => _internal.MergeOf; + set => _internal.MergeOf = value; + } - /// - /// Languages value - /// - /// TODO: No-Intro database export only - [JsonProperty("languages"), XmlElement("languages")] - public string? Languages { get; set; } + public string? MergeName + { + get => _internal.MergeName; + set => _internal.MergeName = value; + } - /// - /// Development status value - /// - /// TODO: No-Intro database export only - [JsonProperty("devstatus"), XmlElement("devstatus")] - public string? DevStatus { get; set; } + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } - /// - /// Physical value - /// - /// TODO: No-Intro database export only - /// TODO: Is this numeric or a flag? - [JsonProperty("physical"), XmlElement("physical")] - public string? Physical { get; set; } + public string? NameAlt + { + get => _internal.NameAlt; + set => _internal.NameAlt = value; + } - /// - /// Complete value - /// - /// TODO: No-Intro database export only - /// TODO: Is this numeric or a flag? - [JsonProperty("complete"), XmlElement("complete")] - public string? Complete { get; set; } + public string? Number + { + get => _internal.Number; + set => _internal.Number = value; + } - /// - /// Categories value - /// - /// TODO: No-Intro database export only - [JsonProperty("categories"), XmlElement("categories")] - public string? Categories { get; set; } + public bool? Physical + { + get => _internal.Physical; + set => _internal.Physical = value; + } + + public bool? Pirate + { + get => _internal.Pirate; + set => _internal.Pirate = value; + } + + public bool? Private + { + get => _internal.Private; + set => _internal.Private = value; + } + + public string? Region + { + get => _internal.Region; + set => _internal.Region = value; + } + + public string? RegParent + { + get => _internal.RegParent; + set => _internal.RegParent = value; + } + + public bool? ShowLang + { + get => _internal.ShowLang; + set => _internal.ShowLang = value; + } + + public string? Special1 + { + get => _internal.Special1; + set => _internal.Special1 = value; + } + + public string? Special2 + { + get => _internal.Special2; + set => _internal.Special2 = value; + } + + public string? StickyNote + { + get => _internal.StickyNote; + set => _internal.StickyNote = value; + } + + public string? Version1 + { + get => _internal.Version1; + set => _internal.Version1 = value; + } + + public string? Version2 + { + get => _internal.Version2; + set => _internal.Version2 = value; + } #endregion @@ -92,16 +222,49 @@ namespace SabreTools.Metadata.DatItems.Formats public Archive(Data.Models.Metadata.Archive item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new Archive(_internal.Clone() as Data.Models.Metadata.Archive ?? []); + public override object Clone() => new Archive(GetInternalClone()); + + /// + public override Data.Models.Metadata.Archive GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Archive ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Archive otherArchive) + return _internal.Equals(otherArchive._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/BiosSet.cs b/SabreTools.Metadata.DatItems/Formats/BiosSet.cs index bb47ae1d..011b338b 100644 --- a/SabreTools.Metadata.DatItems/Formats/BiosSet.cs +++ b/SabreTools.Metadata.DatItems/Formats/BiosSet.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,29 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("biosset"), XmlRoot("biosset")] public sealed class BiosSet : DatItem { - #region Fields + #region Properties + + public bool? Default + { + get => _internal.Default; + set => _internal.Default = value; + } + + public string? Description + { + get => _internal.Description; + set => _internal.Description = value; + } /// /> - protected override ItemType ItemType => ItemType.BiosSet; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.BiosSet; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } #endregion @@ -21,26 +39,53 @@ namespace SabreTools.Metadata.DatItems.Formats public BiosSet() : base() { } - public BiosSet(Data.Models.Metadata.BiosSet item) : base(item) - { - // Process flag values - bool? defaultValue = ReadBool(Data.Models.Metadata.BiosSet.DefaultKey); - if (defaultValue is not null) - Write(Data.Models.Metadata.BiosSet.DefaultKey, defaultValue.FromYesNo()); - } + public BiosSet(Data.Models.Metadata.BiosSet item) : base(item) { } public BiosSet(Data.Models.Metadata.BiosSet item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new BiosSet(_internal.Clone() as Data.Models.Metadata.BiosSet ?? []); + public override object Clone() => new BiosSet(GetInternalClone()); + + /// + public override Data.Models.Metadata.BiosSet GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.BiosSet ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is BiosSet otherBiosSet) + return _internal.Equals(otherBiosSet._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Blank.cs b/SabreTools.Metadata.DatItems/Formats/Blank.cs index a5d53525..90b57904 100644 --- a/SabreTools.Metadata.DatItems/Formats/Blank.cs +++ b/SabreTools.Metadata.DatItems/Formats/Blank.cs @@ -7,87 +7,66 @@ namespace SabreTools.Metadata.DatItems.Formats /// Represents a blank set from an input DAT /// [JsonObject("blank"), XmlRoot("blank")] - public sealed class Blank : DatItem + public sealed class Blank : DatItem { - #region Fields + #region Properties /// /> - protected override ItemType ItemType => ItemType.Blank; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Blank; #endregion #region Constructors - /// - /// Create a default, empty Blank object - /// - public Blank() + public Blank() : base() { } + + public Blank(Data.Models.Metadata.Blank item) : base(item) { } + + public Blank(Data.Models.Metadata.Blank item, Machine machine, Source source) : this(item) { - Write(Data.Models.Metadata.DatItem.TypeKey, ItemType); + Source = source; + CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => null; + + /// + public override void SetName(string? name) { } + + #endregion + #region Cloning Methods /// - public override object Clone() - { - var blank = new Blank(); - blank.Write(MachineKey, GetMachine()); - blank.Write(RemoveKey, ReadBool(RemoveKey)); - blank.Write(SourceKey, Read(SourceKey)); - blank.Write(Data.Models.Metadata.DatItem.TypeKey, ReadString(Data.Models.Metadata.DatItem.TypeKey).AsItemType().AsStringValue()); + public override object Clone() => new Blank(GetInternalClone()); - return blank; - } + /// + public override Data.Models.Metadata.Blank GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Blank ?? new(); #endregion #region Comparision Methods - /// - public override bool Equals(ModelBackedItem? other) - { - // If other is null - if (other is null) - return false; - - // If the type is mismatched - if (other is not DatItem otherItem) - return false; - - // Compare internal models - return Equals(otherItem); - } - - /// - public override bool Equals(ModelBackedItem? other) - { - // If other is null - if (other is null) - return false; - - // If the type is mismatched - if (other is not DatItem otherItem) - return false; - - // Compare internal models - return Equals(otherItem); - } - /// public override bool Equals(DatItem? other) { - // If we don't have a blank, return false - if (ReadString(Data.Models.Metadata.DatItem.TypeKey) != other?.ReadString(Data.Models.Metadata.DatItem.TypeKey)) + // If the other item is null + if (other is null) return false; - // Otherwise, treat it as a Blank - Blank? newOther = other as Blank; + // If the type matches + if (other is Blank otherBlank) + return _internal.Equals(otherBlank._internal); - // If the machine information matches - return GetMachine() == newOther!.GetMachine(); + // Everything else fails + return false; } #endregion diff --git a/SabreTools.Metadata.DatItems/Formats/Chip.cs b/SabreTools.Metadata.DatItems/Formats/Chip.cs index 18df99e3..908fc8a0 100644 --- a/SabreTools.Metadata.DatItems/Formats/Chip.cs +++ b/SabreTools.Metadata.DatItems/Formats/Chip.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,47 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("chip"), XmlRoot("chip")] public sealed class Chip : DatItem { - #region Fields + #region Properties + + public Data.Models.Metadata.ChipType? ChipType + { + get => _internal.ChipType; + set => _internal.ChipType = value; + } /// /> - protected override ItemType ItemType => ItemType.Chip; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Chip; + + public long? Clock + { + get => _internal.Clock; + set => _internal.Clock = value; + } + + public string? Flags + { + get => _internal.Flags; + set => _internal.Flags = value; + } + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public bool? SoundOnly + { + get => _internal.SoundOnly; + set => _internal.SoundOnly = value; + } + + public string? Tag + { + get => _internal.Tag; + set => _internal.Tag = value; + } #endregion @@ -21,30 +57,53 @@ namespace SabreTools.Metadata.DatItems.Formats public Chip() : base() { } - public Chip(Data.Models.Metadata.Chip item) : base(item) - { - // Process flag values - bool? soundOnly = ReadBool(Data.Models.Metadata.Chip.SoundOnlyKey); - if (soundOnly is not null) - Write(Data.Models.Metadata.Chip.SoundOnlyKey, soundOnly.FromYesNo()); - - string? chipType = ReadString(Data.Models.Metadata.Chip.ChipTypeKey); - if (chipType is not null) - Write(Data.Models.Metadata.Chip.ChipTypeKey, chipType.AsChipType()?.AsStringValue()); - } + public Chip(Data.Models.Metadata.Chip item) : base(item) { } public Chip(Data.Models.Metadata.Chip item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new Chip(_internal.Clone() as Data.Models.Metadata.Chip ?? []); + public override object Clone() => new Chip(GetInternalClone()); + + /// + public override Data.Models.Metadata.Chip GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Chip ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Chip otherChip) + return _internal.Equals(otherChip._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Condition.cs b/SabreTools.Metadata.DatItems/Formats/Condition.cs index 9d0011bf..6a9b8737 100644 --- a/SabreTools.Metadata.DatItems/Formats/Condition.cs +++ b/SabreTools.Metadata.DatItems/Formats/Condition.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,35 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("condition"), XmlRoot("condition")] public sealed class Condition : DatItem { - #region Fields + #region Properties /// /> - protected override ItemType ItemType => ItemType.Condition; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Condition; + + public string? Mask + { + get => _internal.Mask; + set => _internal.Mask = value; + } + + public Data.Models.Metadata.Relation? Relation + { + get => _internal.Relation; + set => _internal.Relation = value; + } + + public string? Tag + { + get => _internal.Tag; + set => _internal.Tag = value; + } + + public string? Value + { + get => _internal.Value; + set => _internal.Value = value; + } #endregion @@ -21,26 +45,53 @@ namespace SabreTools.Metadata.DatItems.Formats public Condition() : base() { } - public Condition(Data.Models.Metadata.Condition item) : base(item) - { - // Process flag values - string? condition = ReadString(Data.Models.Metadata.Condition.RelationKey); - if (condition is not null) - Write(Data.Models.Metadata.Condition.RelationKey, condition.AsRelation()?.AsStringValue()); - } + public Condition(Data.Models.Metadata.Condition item) : base(item) { } public Condition(Data.Models.Metadata.Condition item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => null; + + /// + public override void SetName(string? name) { } + + #endregion + #region Cloning Methods /// - public override object Clone() => new Condition(_internal.Clone() as Data.Models.Metadata.Condition ?? []); + public override object Clone() => new Condition(GetInternalClone()); + + /// + public override Data.Models.Metadata.Condition GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Condition ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Condition otherCondition) + return _internal.Equals(otherCondition._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs b/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs index 78750d68..86a44ae8 100644 --- a/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs +++ b/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,29 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("conflocation"), XmlRoot("conflocation")] public sealed class ConfLocation : DatItem { - #region Fields + #region Properties /// /> - protected override ItemType ItemType => ItemType.ConfLocation; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.ConfLocation; + + public bool? Inverted + { + get => _internal.Inverted; + set => _internal.Inverted = value; + } + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public long? Number + { + get => _internal.Number; + set => _internal.Number = value; + } #endregion @@ -21,26 +39,53 @@ namespace SabreTools.Metadata.DatItems.Formats public ConfLocation() : base() { } - public ConfLocation(Data.Models.Metadata.ConfLocation item) : base(item) - { - // Process flag values - bool? inverted = ReadBool(Data.Models.Metadata.ConfLocation.InvertedKey); - if (inverted is not null) - Write(Data.Models.Metadata.ConfLocation.InvertedKey, inverted.FromYesNo()); - } + public ConfLocation(Data.Models.Metadata.ConfLocation item) : base(item) { } public ConfLocation(Data.Models.Metadata.ConfLocation item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new ConfLocation(_internal.Clone() as Data.Models.Metadata.ConfLocation ?? []); + public override object Clone() => new ConfLocation(GetInternalClone()); + + /// + public override Data.Models.Metadata.ConfLocation GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.ConfLocation ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is ConfLocation otherConfLocation) + return _internal.Equals(otherConfLocation._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs b/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs index 82804d7a..df73c18d 100644 --- a/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs +++ b/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,19 +9,33 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("confsetting"), XmlRoot("confsetting")] public sealed class ConfSetting : DatItem { - #region Fields + #region Properties - /// /> - protected override ItemType ItemType => ItemType.ConfSetting; + public Condition? Condition { get; set; } [JsonIgnore] - public bool ConditionsSpecified + public bool ConditionSpecified => Condition is not null; + + public bool? Default { - get - { - var conditions = Read(Data.Models.Metadata.ConfSetting.ConditionKey); - return conditions is not null && conditions.Length > 0; - } + get => _internal.Default; + set => _internal.Default = value; + } + + /// /> + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.ConfSetting; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public string? Value + { + get => _internal.Value; + set => _internal.Value = value; } #endregion @@ -33,43 +46,64 @@ namespace SabreTools.Metadata.DatItems.Formats public ConfSetting(Data.Models.Metadata.ConfSetting item) : base(item) { - // Process flag values - bool? defaultValue = ReadBool(Data.Models.Metadata.ConfSetting.DefaultKey); - if (defaultValue is not null) - Write(Data.Models.Metadata.ConfSetting.DefaultKey, defaultValue.FromYesNo()); - // Handle subitems - var condition = Read(Data.Models.Metadata.ConfSetting.ConditionKey); - if (condition is not null) - Write(Data.Models.Metadata.ConfSetting.ConditionKey, new Condition(condition)); + if (item.Condition is not null) + Condition = new Condition(item.Condition); } public ConfSetting(Data.Models.Metadata.ConfSetting item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new ConfSetting(_internal.Clone() as Data.Models.Metadata.ConfSetting ?? []); + public override object Clone() => new ConfSetting(GetInternalClone()); /// public override Data.Models.Metadata.ConfSetting GetInternalClone() { - var confSettingItem = base.GetInternalClone(); + var confSettingItem = _internal.Clone() as Data.Models.Metadata.ConfSetting ?? new(); - // Handle subitems - var condition = Read(Data.Models.Metadata.ConfSetting.ConditionKey); - if (condition is not null) - confSettingItem[Data.Models.Metadata.ConfSetting.ConditionKey] = condition.GetInternalClone(); + if (Condition is not null) + confSettingItem.Condition = Condition.GetInternalClone(); return confSettingItem; } #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is ConfSetting otherConfSetting) + return _internal.Equals(otherConfSetting._internal); + + // Everything else fails + return false; + } + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Configuration.cs b/SabreTools.Metadata.DatItems/Formats/Configuration.cs index 6e1521ce..ab991b74 100644 --- a/SabreTools.Metadata.DatItems/Formats/Configuration.cs +++ b/SabreTools.Metadata.DatItems/Formats/Configuration.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -11,39 +10,43 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("configuration"), XmlRoot("configuration")] public sealed class Configuration : DatItem { - #region Fields + #region Properties + + public Condition? Condition { get; set; } + + [JsonIgnore] + public bool ConditionSpecified => Condition is not null; + + public ConfLocation[]? ConfLocation { get; set; } + + [JsonIgnore] + public bool ConfLocationSpecified => ConfLocation is not null && ConfLocation.Length > 0; + + public ConfSetting[]? ConfSetting { get; set; } + + [JsonIgnore] + public bool ConfSettingSpecified => ConfSetting is not null && ConfSetting.Length > 0; /// /> - protected override ItemType ItemType => ItemType.Configuration; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Configuration; - [JsonIgnore] - public bool ConditionsSpecified + public string? Mask { - get - { - var conditions = Read(Data.Models.Metadata.Configuration.ConditionKey); - return conditions is not null && conditions.Length > 0; - } + get => _internal.Mask; + set => _internal.Mask = value; } - [JsonIgnore] - public bool LocationsSpecified + public string? Name { - get - { - var locations = Read(Data.Models.Metadata.Configuration.ConfLocationKey); - return locations is not null && locations.Length > 0; - } + get => _internal.Name; + set => _internal.Name = value; } - [JsonIgnore] - public bool SettingsSpecified + public string? Tag { - get - { - var settings = Read(Data.Models.Metadata.Configuration.ConfSettingKey); - return settings is not null && settings.Length > 0; - } + get => _internal.Tag; + set => _internal.Tag = value; } #endregion @@ -55,64 +58,75 @@ namespace SabreTools.Metadata.DatItems.Formats public Configuration(Data.Models.Metadata.Configuration item) : base(item) { // Handle subitems - var condition = item.Read(Data.Models.Metadata.Configuration.ConditionKey); - if (condition is not null) - Write(Data.Models.Metadata.Configuration.ConditionKey, new Condition(condition)); + if (item.Condition is not null) + Condition = new Condition(item.Condition); - var confLocations = item.ReadArray(Data.Models.Metadata.Configuration.ConfLocationKey); - if (confLocations is not null) - { - ConfLocation[] confLocationItems = Array.ConvertAll(confLocations, confLocation => new ConfLocation(confLocation)); - Write(Data.Models.Metadata.Configuration.ConfLocationKey, confLocationItems); - } + if (item.ConfLocation is not null) + ConfLocation = Array.ConvertAll(item.ConfLocation, confLocation => new ConfLocation(confLocation)); - var confSettings = item.ReadArray(Data.Models.Metadata.Configuration.ConfSettingKey); - if (confSettings is not null) - { - ConfSetting[] confSettingItems = Array.ConvertAll(confSettings, confSetting => new ConfSetting(confSetting)); - Write(Data.Models.Metadata.Configuration.ConfSettingKey, confSettingItems); - } + if (item.ConfSetting is not null) + ConfSetting = Array.ConvertAll(item.ConfSetting, confSetting => new ConfSetting(confSetting)); } public Configuration(Data.Models.Metadata.Configuration item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new Configuration(_internal.Clone() as Data.Models.Metadata.Configuration ?? []); + public override object Clone() => new Configuration(GetInternalClone()); /// public override Data.Models.Metadata.Configuration GetInternalClone() { - var configurationItem = base.GetInternalClone(); + var configurationItem = _internal.Clone() as Data.Models.Metadata.Configuration ?? new(); - var condition = Read(Data.Models.Metadata.Configuration.ConditionKey); - if (condition is not null) - configurationItem[Data.Models.Metadata.Configuration.ConditionKey] = condition.GetInternalClone(); + if (Condition is not null) + configurationItem.Condition = Condition.GetInternalClone(); - var confLocations = Read(Data.Models.Metadata.Configuration.ConfLocationKey); - if (confLocations is not null) - { - Data.Models.Metadata.ConfLocation[] confLocationItems = Array.ConvertAll(confLocations, confLocation => confLocation.GetInternalClone()); - configurationItem[Data.Models.Metadata.Configuration.ConfLocationKey] = confLocationItems; - } + if (ConfLocation is not null) + configurationItem.ConfLocation = Array.ConvertAll(ConfLocation, confLocation => confLocation.GetInternalClone()); - var confSettings = Read(Data.Models.Metadata.Configuration.ConfSettingKey); - if (confSettings is not null) - { - Data.Models.Metadata.ConfSetting[] confSettingItems = Array.ConvertAll(confSettings, confSetting => confSetting.GetInternalClone()); - configurationItem[Data.Models.Metadata.Configuration.ConfSettingKey] = confSettingItems; - } + if (ConfSetting is not null) + configurationItem.ConfSetting = Array.ConvertAll(ConfSetting, confSetting => confSetting.GetInternalClone()); return configurationItem; } #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Configuration otherConfiguration) + return _internal.Equals(otherConfiguration._internal); + + // Everything else fails + return false; + } + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Control.cs b/SabreTools.Metadata.DatItems/Formats/Control.cs index ca837969..5ae2796e 100644 --- a/SabreTools.Metadata.DatItems/Formats/Control.cs +++ b/SabreTools.Metadata.DatItems/Formats/Control.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,83 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("control"), XmlRoot("control")] public sealed class Control : DatItem { - #region Fields + #region Properties + + public long? Buttons + { + get => _internal.Buttons; + set => _internal.Buttons = value; + } + + public Data.Models.Metadata.ControlType? ControlType + { + get => _internal.ControlType; + set => _internal.ControlType = value; + } /// /> - protected override ItemType ItemType => ItemType.Control; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Control; + + public long? KeyDelta + { + get => _internal.KeyDelta; + set => _internal.KeyDelta = value; + } + + public long? Maximum + { + get => _internal.Maximum; + set => _internal.Maximum = value; + } + + public long? Minimum + { + get => _internal.Minimum; + set => _internal.Minimum = value; + } + + public long? Player + { + get => _internal.Player; + set => _internal.Player = value; + } + + public long? ReqButtons + { + get => _internal.ReqButtons; + set => _internal.ReqButtons = value; + } + + public bool? Reverse + { + get => _internal.Reverse; + set => _internal.Reverse = value; + } + + public long? Sensitivity + { + get => _internal.Sensitivity; + set => _internal.Sensitivity = value; + } + + public string? Ways + { + get => _internal.Ways; + set => _internal.Ways = value; + } + + public string? Ways2 + { + get => _internal.Ways2; + set => _internal.Ways2 = value; + } + + public string? Ways3 + { + get => _internal.Ways3; + set => _internal.Ways3 = value; + } #endregion @@ -21,58 +93,53 @@ namespace SabreTools.Metadata.DatItems.Formats public Control() : base() { } - public Control(Data.Models.Metadata.Control item) : base(item) - { - // Process flag values - long? buttons = ReadLong(Data.Models.Metadata.Control.ButtonsKey); - if (buttons is not null) - Write(Data.Models.Metadata.Control.ButtonsKey, buttons.ToString()); - - long? keyDelta = ReadLong(Data.Models.Metadata.Control.KeyDeltaKey); - if (keyDelta is not null) - Write(Data.Models.Metadata.Control.KeyDeltaKey, keyDelta.ToString()); - - long? maximum = ReadLong(Data.Models.Metadata.Control.MaximumKey); - if (maximum is not null) - Write(Data.Models.Metadata.Control.MaximumKey, maximum.ToString()); - - long? minimum = ReadLong(Data.Models.Metadata.Control.MinimumKey); - if (minimum is not null) - Write(Data.Models.Metadata.Control.MinimumKey, minimum.ToString()); - - long? player = ReadLong(Data.Models.Metadata.Control.PlayerKey); - if (player is not null) - Write(Data.Models.Metadata.Control.PlayerKey, player.ToString()); - - long? reqButtons = ReadLong(Data.Models.Metadata.Control.ReqButtonsKey); - if (reqButtons is not null) - Write(Data.Models.Metadata.Control.ReqButtonsKey, reqButtons.ToString()); - - bool? reverse = ReadBool(Data.Models.Metadata.Control.ReverseKey); - if (reverse is not null) - Write(Data.Models.Metadata.Control.ReverseKey, reverse.FromYesNo()); - - long? sensitivity = ReadLong(Data.Models.Metadata.Control.SensitivityKey); - if (sensitivity is not null) - Write(Data.Models.Metadata.Control.SensitivityKey, sensitivity.ToString()); - - string? controlType = ReadString(Data.Models.Metadata.Control.ControlTypeKey); - if (controlType is not null) - Write(Data.Models.Metadata.Control.ControlTypeKey, controlType.AsControlType()?.AsStringValue()); - } + public Control(Data.Models.Metadata.Control item) : base(item) { } public Control(Data.Models.Metadata.Control item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => null; + + /// + public override void SetName(string? name) { } + + #endregion + #region Cloning Methods /// - public override object Clone() => new Control(_internal.Clone() as Data.Models.Metadata.Control ?? []); + public override object Clone() => new Control(GetInternalClone()); + + /// + public override Data.Models.Metadata.Control GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Control ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Control otherControl) + return _internal.Equals(otherControl._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/DataArea.cs b/SabreTools.Metadata.DatItems/Formats/DataArea.cs index f436a9db..1692e303 100644 --- a/SabreTools.Metadata.DatItems/Formats/DataArea.cs +++ b/SabreTools.Metadata.DatItems/Formats/DataArea.cs @@ -1,6 +1,6 @@ -using System.Xml.Serialization; +using System; +using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -11,10 +11,40 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("dataarea"), XmlRoot("dataarea")] public sealed class DataArea : DatItem { - #region Fields + #region Properties + + public Data.Models.Metadata.Endianness? Endianness + { + get => _internal.Endianness; + set => _internal.Endianness = value; + } /// /> - protected override ItemType ItemType => ItemType.DataArea; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.DataArea; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public Rom[]? Rom { get; set; } + + [JsonIgnore] + public bool RomSpecified => Rom is not null && Rom.Length > 0; + + public long? Size + { + get => _internal.Size; + set => _internal.Size = value; + } + + public Data.Models.Metadata.Width? Width + { + get => _internal.Width; + set => _internal.Width = value; + } #endregion @@ -24,32 +54,62 @@ namespace SabreTools.Metadata.DatItems.Formats public DataArea(Data.Models.Metadata.DataArea item) : base(item) { - // Process flag values - string? endianness = ReadString(Data.Models.Metadata.DataArea.EndiannessKey); - if (endianness is not null) - Write(Data.Models.Metadata.DataArea.EndiannessKey, endianness.AsEndianness()?.AsStringValue()); - - long? size = ReadLong(Data.Models.Metadata.DataArea.SizeKey); - if (size is not null) - Write(Data.Models.Metadata.DataArea.SizeKey, size.ToString()); - - long? width = ReadLong(Data.Models.Metadata.DataArea.WidthKey); - if (width is not null) - Write(Data.Models.Metadata.DataArea.WidthKey, width.ToString()); + // Handle subitems + if (item.Rom is not null) + Rom = Array.ConvertAll(item.Rom, rom => new Rom(rom)); } public DataArea(Data.Models.Metadata.DataArea item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new DataArea(_internal.Clone() as Data.Models.Metadata.DataArea ?? []); + public override object Clone() => new DataArea(GetInternalClone()); + + public override Data.Models.Metadata.DataArea GetInternalClone() + { + var partItem = _internal.Clone() as Data.Models.Metadata.DataArea ?? new(); + + if (Rom is not null) + partItem.Rom = Array.ConvertAll(Rom, rom => rom.GetInternalClone()); + + return partItem; + } + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is DataArea otherDataArea) + return _internal.Equals(otherDataArea._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Device.cs b/SabreTools.Metadata.DatItems/Formats/Device.cs index 80c8e92e..47ed37e0 100644 --- a/SabreTools.Metadata.DatItems/Formats/Device.cs +++ b/SabreTools.Metadata.DatItems/Formats/Device.cs @@ -1,7 +1,6 @@ -using System; +using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -11,29 +10,50 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("device"), XmlRoot("device")] public sealed class Device : DatItem { - #region Fields + #region Properties - /// /> - protected override ItemType ItemType => ItemType.Device; - - [JsonIgnore] - public bool InstancesSpecified + public Data.Models.Metadata.DeviceType? DeviceType { - get - { - var instances = Read(Data.Models.Metadata.Device.InstanceKey); - return instances is not null && instances.Length > 0; - } + get => _internal.DeviceType; + set => _internal.DeviceType = value; } + public Extension[]? Extension { get; set; } + [JsonIgnore] - public bool ExtensionsSpecified + public bool ExtensionSpecified => Extension is not null && Extension.Length > 0; + + public string? FixedImage { - get - { - var extensions = Read(Data.Models.Metadata.Device.ExtensionKey); - return extensions is not null && extensions.Length > 0; - } + get => _internal.FixedImage; + set => _internal.FixedImage = value; + } + + public Instance? Instance { get; set; } + + [JsonIgnore] + public bool InstanceSpecified => Instance is not null; + + public string? Interface + { + get => _internal.Interface; + set => _internal.Interface = value; + } + + /// /> + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Device; + + public bool? Mandatory + { + get => _internal.Mandatory; + set => _internal.Mandatory = value; + } + + public string? Tag + { + get => _internal.Tag; + set => _internal.Tag = value; } #endregion @@ -44,60 +64,76 @@ namespace SabreTools.Metadata.DatItems.Formats public Device(Data.Models.Metadata.Device item) : base(item) { - // Process flag values - bool? mandatory = ReadBool(Data.Models.Metadata.Device.MandatoryKey); - if (mandatory is not null) - Write(Data.Models.Metadata.Device.MandatoryKey, mandatory.FromYesNo()); - - string? deviceType = ReadString(Data.Models.Metadata.Device.DeviceTypeKey); - if (deviceType is not null) - Write(Data.Models.Metadata.Device.DeviceTypeKey, deviceType.AsDeviceType()?.AsStringValue()); - // Handle subitems - var instance = item.Read(Data.Models.Metadata.Device.InstanceKey); - if (instance is not null) - Write(Data.Models.Metadata.Device.InstanceKey, new Instance(instance)); + if (item.Extension is not null) + Extension = Array.ConvertAll(item.Extension, extension => new Extension(extension)); ; - var extensions = item.ReadArray(Data.Models.Metadata.Device.ExtensionKey); - if (extensions is not null) - { - Extension[] extensionItems = Array.ConvertAll(extensions, extension => new Extension(extension)); - Write(Data.Models.Metadata.Device.ExtensionKey, extensionItems); - } + if (item.Instance is not null) + Instance = new Instance(item.Instance); } public Device(Data.Models.Metadata.Device item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => null; + + /// + public override void SetName(string? name) { } + + #endregion + #region Cloning Methods /// - public override object Clone() => new Device(_internal.Clone() as Data.Models.Metadata.Device ?? []); + public override object Clone() => new Device(GetInternalClone()); /// public override Data.Models.Metadata.Device GetInternalClone() { - var deviceItem = base.GetInternalClone(); + var deviceItem = _internal.Clone() as Data.Models.Metadata.Device ?? new(); - var instance = Read(Data.Models.Metadata.Device.InstanceKey); - if (instance is not null) - deviceItem[Data.Models.Metadata.Device.InstanceKey] = instance.GetInternalClone(); + deviceItem.DeviceType = DeviceType; + deviceItem.FixedImage = FixedImage; + deviceItem.Interface = Interface; + deviceItem.Mandatory = Mandatory; + deviceItem.Tag = Tag; - var extensions = Read(Data.Models.Metadata.Device.ExtensionKey); - if (extensions is not null) - { - Data.Models.Metadata.Extension[] extensionItems = Array.ConvertAll(extensions, extension => extension.GetInternalClone()); - deviceItem[Data.Models.Metadata.Device.ExtensionKey] = extensionItems; - } + if (Instance is not null) + deviceItem.Instance = Instance.GetInternalClone(); + + if (Extension is not null) + deviceItem.Extension = Array.ConvertAll(Extension, extension => extension.GetInternalClone()); ; return deviceItem; } #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Device otherDevice) + return _internal.Equals(otherDevice._internal); + + // Everything else fails + return false; + } + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/DeviceRef.cs b/SabreTools.Metadata.DatItems/Formats/DeviceRef.cs index 9814037f..3d8d2668 100644 --- a/SabreTools.Metadata.DatItems/Formats/DeviceRef.cs +++ b/SabreTools.Metadata.DatItems/Formats/DeviceRef.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,17 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("device_ref"), XmlRoot("device_ref")] public sealed class DeviceRef : DatItem { - #region Fields + #region Properties /// /> - protected override ItemType ItemType => ItemType.DeviceRef; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.DeviceRef; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } #endregion @@ -25,16 +31,49 @@ namespace SabreTools.Metadata.DatItems.Formats public DeviceRef(Data.Models.Metadata.DeviceRef item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new DeviceRef(_internal.Clone() as Data.Models.Metadata.DeviceRef ?? []); + public override object Clone() => new DeviceRef(GetInternalClone()); + + /// + public override Data.Models.Metadata.DeviceRef GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.DeviceRef ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is DeviceRef otherDeviceRef) + return _internal.Equals(otherDeviceRef._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/DipLocation.cs b/SabreTools.Metadata.DatItems/Formats/DipLocation.cs index 6e92ee74..e9b31ab1 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipLocation.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipLocation.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,29 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("diplocation"), XmlRoot("diplocation")] public sealed class DipLocation : DatItem { - #region Fields + #region Properties + + public bool? Inverted + { + get => _internal.Inverted; + set => _internal.Inverted = value; + } /// /> - protected override ItemType ItemType => ItemType.DipLocation; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.DipLocation; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public long? Number + { + get => _internal.Number; + set => _internal.Number = value; + } #endregion @@ -21,26 +39,53 @@ namespace SabreTools.Metadata.DatItems.Formats public DipLocation() : base() { } - public DipLocation(Data.Models.Metadata.DipLocation item) : base(item) - { - // Process flag values - bool? inverted = ReadBool(Data.Models.Metadata.DipLocation.InvertedKey); - if (inverted is not null) - Write(Data.Models.Metadata.DipLocation.InvertedKey, inverted.FromYesNo()); - } + public DipLocation(Data.Models.Metadata.DipLocation item) : base(item) { } public DipLocation(Data.Models.Metadata.DipLocation item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new DipLocation(_internal.Clone() as Data.Models.Metadata.DipLocation ?? []); + public override object Clone() => new DipLocation(GetInternalClone()); + + /// + public override Data.Models.Metadata.DipLocation GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.DipLocation ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is DipLocation otherDipLocation) + return _internal.Equals(otherDipLocation._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs index c0f9e1d2..1a505258 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -11,62 +10,69 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("dipswitch"), XmlRoot("dipswitch")] public sealed class DipSwitch : DatItem { - #region Constants + #region Properties - /// - /// Non-standard key for inverted logic - /// - public const string PartKey = "PART"; + public Condition? Condition { get; set; } - #endregion + [JsonIgnore] + public bool ConditionSpecified => Condition is not null; - #region Fields + public bool? Default + { + get => _internal.Default; + set => _internal.Default = value; + } + + public DipLocation[]? DipLocation { get; set; } + + [JsonIgnore] + public bool DipLocationSpecified => DipLocation is not null && DipLocation.Length > 0; + + public DipValue[]? DipValue { get; set; } + + [JsonIgnore] + public bool DipValueSpecified => DipValue is not null && DipValue.Length > 0; + + public string[]? Entry { get; set; } + + [JsonIgnore] + public bool EntrySpecified => Entry is not null && Entry.Length > 0; /// /> - protected override ItemType ItemType => ItemType.DipSwitch; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.DipSwitch; - [JsonIgnore] - public bool ConditionsSpecified + public string? Mask { - get - { - var conditions = Read(Data.Models.Metadata.DipSwitch.ConditionKey); - return conditions is not null && conditions.Length > 0; - } + get => _internal.Mask; + set => _internal.Mask = value; } - [JsonIgnore] - public bool LocationsSpecified + public string? Name { - get - { - var locations = Read(Data.Models.Metadata.DipSwitch.DipLocationKey); - return locations is not null && locations.Length > 0; - } + get => _internal.Name; + set => _internal.Name = value; } - [JsonIgnore] - public bool ValuesSpecified - { - get - { - var values = Read(Data.Models.Metadata.DipSwitch.DipValueKey); - return values is not null && values.Length > 0; - } - } + public Part? Part { get; set; } [JsonIgnore] public bool PartSpecified { get { - var part = Read(PartKey); - return part is not null - && (!string.IsNullOrEmpty(part.GetName()) - || !string.IsNullOrEmpty(part.ReadString(Data.Models.Metadata.Part.InterfaceKey))); + return Part is not null + && (!string.IsNullOrEmpty(Part.Name) + || !string.IsNullOrEmpty(Part.Interface)); } } + public string? Tag + { + get => _internal.Tag; + set => _internal.Tag = value; + } + #endregion #region Constructors @@ -75,70 +81,82 @@ namespace SabreTools.Metadata.DatItems.Formats public DipSwitch(Data.Models.Metadata.DipSwitch item) : base(item) { - // Process flag values - bool? defaultValue = ReadBool(Data.Models.Metadata.DipSwitch.DefaultKey); - if (defaultValue is not null) - Write(Data.Models.Metadata.DipSwitch.DefaultKey, defaultValue.FromYesNo()); - // Handle subitems - var condition = item.Read(Data.Models.Metadata.DipSwitch.ConditionKey); - if (condition is not null) - Write(Data.Models.Metadata.DipSwitch.ConditionKey, new Condition(condition)); + if (item.Condition is not null) + Condition = new Condition(item.Condition); - var dipLocations = item.ReadArray(Data.Models.Metadata.DipSwitch.DipLocationKey); - if (dipLocations is not null) - { - DipLocation[] dipLocationItems = Array.ConvertAll(dipLocations, dipLocation => new DipLocation(dipLocation)); - Write(Data.Models.Metadata.DipSwitch.DipLocationKey, dipLocationItems); - } + if (item.DipLocation is not null) + DipLocation = Array.ConvertAll(item.DipLocation, dipLocation => new DipLocation(dipLocation)); - var dipValues = item.ReadArray(Data.Models.Metadata.DipSwitch.DipValueKey); - if (dipValues is not null) - { - DipValue[] dipValueItems = Array.ConvertAll(dipValues, dipValue => new DipValue(dipValue)); - Write(Data.Models.Metadata.DipSwitch.DipValueKey, dipValueItems); - } + if (item.DipValue is not null) + DipValue = Array.ConvertAll(item.DipValue, dipValue => new DipValue(dipValue)); + + if (item.Entry is not null) + Entry = Array.ConvertAll(item.Entry, entry => entry); } public DipSwitch(Data.Models.Metadata.DipSwitch item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new DipSwitch(_internal.Clone() as Data.Models.Metadata.DipSwitch ?? []); + public override object Clone() => new DipSwitch(GetInternalClone()); /// public override Data.Models.Metadata.DipSwitch GetInternalClone() { - var dipSwitchItem = base.GetInternalClone(); + var dipSwitchItem = _internal.Clone() as Data.Models.Metadata.DipSwitch ?? new(); - var condition = Read(Data.Models.Metadata.DipSwitch.ConditionKey); - if (condition is not null) - dipSwitchItem[Data.Models.Metadata.DipSwitch.ConditionKey] = condition.GetInternalClone(); + if (Condition is not null) + dipSwitchItem.Condition = Condition.GetInternalClone(); - var dipLocations = Read(Data.Models.Metadata.DipSwitch.DipLocationKey); - if (dipLocations is not null) - { - Data.Models.Metadata.DipLocation[] dipLocationItems = Array.ConvertAll(dipLocations, dipLocation => dipLocation.GetInternalClone()); - dipSwitchItem[Data.Models.Metadata.DipSwitch.DipLocationKey] = dipLocationItems; - } + if (DipLocation is not null) + dipSwitchItem.DipLocation = Array.ConvertAll(DipLocation, dipLocation => dipLocation.GetInternalClone()); - var dipValues = Read(Data.Models.Metadata.DipSwitch.DipValueKey); - if (dipValues is not null) - { - Data.Models.Metadata.DipValue[] dipValueItems = Array.ConvertAll(dipValues, dipValue => dipValue.GetInternalClone()); - dipSwitchItem[Data.Models.Metadata.DipSwitch.DipValueKey] = dipValueItems; - } + if (DipValue is not null) + dipSwitchItem.DipValue = Array.ConvertAll(DipValue, dipValue => dipValue.GetInternalClone()); + + if (Entry is not null) + dipSwitchItem.Entry = Array.ConvertAll(Entry, entry => entry); return dipSwitchItem; } #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is DipSwitch otherDipSwitch) + return _internal.Equals(otherDipSwitch._internal); + + // Everything else fails + return false; + } + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/DipValue.cs b/SabreTools.Metadata.DatItems/Formats/DipValue.cs index 6380d250..07e9dda6 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipValue.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipValue.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,19 +9,33 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("dipvalue"), XmlRoot("dipvalue")] public sealed class DipValue : DatItem { - #region Fields + #region Properties - /// /> - protected override ItemType ItemType => ItemType.DipValue; + public Condition? Condition { get; set; } [JsonIgnore] - public bool ConditionsSpecified + public bool ConditionSpecified => Condition is not null; + + public bool? Default { - get - { - var conditions = Read(Data.Models.Metadata.DipValue.ConditionKey); - return conditions is not null && conditions.Length > 0; - } + get => _internal.Default; + set => _internal.Default = value; + } + + /// /> + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.DipValue; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public string? Value + { + get => _internal.Value; + set => _internal.Value = value; } #endregion @@ -33,43 +46,64 @@ namespace SabreTools.Metadata.DatItems.Formats public DipValue(Data.Models.Metadata.DipValue item) : base(item) { - // Process flag values - bool? defaultValue = ReadBool(Data.Models.Metadata.DipValue.DefaultKey); - if (defaultValue is not null) - Write(Data.Models.Metadata.DipValue.DefaultKey, defaultValue.FromYesNo()); - // Handle subitems - var condition = Read(Data.Models.Metadata.DipValue.ConditionKey); - if (condition is not null) - Write(Data.Models.Metadata.DipValue.ConditionKey, new Condition(condition)); + if (item.Condition is not null) + Condition = new Condition(item.Condition); } public DipValue(Data.Models.Metadata.DipValue item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new DipValue(_internal.Clone() as Data.Models.Metadata.DipValue ?? []); + public override object Clone() => new DipValue(GetInternalClone()); /// public override Data.Models.Metadata.DipValue GetInternalClone() { - var dipValueItem = base.GetInternalClone(); + var dipValueItem = _internal.Clone() as Data.Models.Metadata.DipValue ?? new(); - // Handle subitems - var subCondition = Read(Data.Models.Metadata.DipValue.ConditionKey); - if (subCondition is not null) - dipValueItem[Data.Models.Metadata.DipValue.ConditionKey] = subCondition.GetInternalClone(); + if (Condition is not null) + dipValueItem.Condition = Condition.GetInternalClone(); return dipValueItem; } #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is DipValue otherDipValue) + return _internal.Equals(otherDipValue._internal); + + // Everything else fails + return false; + } + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Disk.cs b/SabreTools.Metadata.DatItems/Formats/Disk.cs index fe9e3243..b52dc849 100644 --- a/SabreTools.Metadata.DatItems/Formats/Disk.cs +++ b/SabreTools.Metadata.DatItems/Formats/Disk.cs @@ -1,4 +1,4 @@ -using System.Xml.Serialization; +using System.Xml.Serialization; using Newtonsoft.Json; using SabreTools.Data.Extensions; using SabreTools.Data.Models.Metadata; @@ -12,96 +12,138 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("disk"), XmlRoot("disk")] public sealed class Disk : DatItem { - #region Constants + #region Properties - /// - /// 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 - - /// /> - protected override ItemType ItemType => ItemType.Disk; + 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.GetName()); - } + get => _internal.Flags; + set => _internal.Flags = value; } + public long? Index + { + get => _internal.Index; + set => _internal.Index = value; + } + + /// /> + public override ItemType ItemType => ItemType.Disk; + + public string? MD5 + { + get => _internal.MD5; + set => _internal.MD5 = value; + } + + public string? Merge + { + get => _internal.Merge; + set => _internal.Merge = value; + } + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public bool? Optional + { + get => _internal.Optional; + set => _internal.Optional = value; + } + + public Part? Part { get; set; } + [JsonIgnore] public bool PartSpecified { get { - var part = Read(PartKey); - return part is not null - && (!string.IsNullOrEmpty(part.GetName()) - || !string.IsNullOrEmpty(part.ReadString(Data.Models.Metadata.Part.InterfaceKey))); + return Part is not null + && (!string.IsNullOrEmpty(Part.Name) + || !string.IsNullOrEmpty(Part.Interface)); } } + public string? Region + { + get => _internal.Region; + set => _internal.Region = value; + } + + public string? SHA1 + { + get => _internal.SHA1; + set => _internal.SHA1 = value; + } + + public ItemStatus? Status + { + get => _internal.Status; + set => _internal.Status = value; + } + + public bool? Writable + { + get => _internal.Writable; + set => _internal.Writable = value; + } + #endregion #region Constructors public Disk() : base() { - Write(DupeTypeKey, 0x00); - Write(Data.Models.Metadata.Disk.StatusKey, ItemStatus.None.AsStringValue()); + DupeType = 0x00; + Status = ItemStatus.None; } public Disk(Data.Models.Metadata.Disk item) : base(item) { - Write(DupeTypeKey, 0x00); - - // Process flag values - bool? optional = ReadBool(Data.Models.Metadata.Disk.OptionalKey); - if (optional is not null) - Write(Data.Models.Metadata.Disk.OptionalKey, optional.FromYesNo()); - - string? status = ReadString(Data.Models.Metadata.Disk.StatusKey); - if (status is not null) - Write(Data.Models.Metadata.Disk.StatusKey, status.AsItemStatus()?.AsStringValue()); - - bool? writable = ReadBool(Data.Models.Metadata.Disk.WritableKey); - if (writable is not null) - Write(Data.Models.Metadata.Disk.WritableKey, writable.FromYesNo()); + 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) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new Disk(_internal.Clone() as Data.Models.Metadata.Disk ?? []); + public override object Clone() => new Disk(GetInternalClone()); + + /// + public override Data.Models.Metadata.Disk GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Disk ?? new(); /// /// Convert a disk to the closest Rom approximation @@ -112,22 +154,17 @@ 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(); - - string? diskAreaName = diskArea.ReadString(Data.Models.Metadata.DiskArea.NameKey); - dataArea.Write(Data.Models.Metadata.DataArea.NameKey, diskAreaName); - - rom.Write(Rom.DataAreaKey, dataArea); + var dataArea = new DataArea { Name = DiskArea.Name }; + rom.DataArea = dataArea; } - rom.Write(DupeTypeKey, Read(DupeTypeKey)); - rom.Write(MachineKey, GetMachine()?.Clone() as Machine); - rom.Write(Rom.PartKey, Read(PartKey)?.Clone() as Part); - rom.Write(RemoveKey, ReadBool(RemoveKey)); - rom.Write(SourceKey, Read(SourceKey)?.Clone() as Source); + rom.DupeType = DupeType; + rom.Machine = Machine?.Clone() as Machine; + rom.Part = Part?.Clone() as Part; + rom.RemoveFlag = RemoveFlag; + rom.Source = Source?.Clone() as Source; return rom; } @@ -136,6 +173,21 @@ namespace SabreTools.Metadata.DatItems.Formats #region Comparision Methods + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Disk otherDisk) + return _internal.PartialEquals(otherDisk._internal); + + // Everything else fails + return false; + } + /// /// Fill any missing size and hash information from another Disk /// @@ -170,11 +222,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.DatItems/Formats/DiskArea.cs b/SabreTools.Metadata.DatItems/Formats/DiskArea.cs index 00f13f02..2a173a39 100644 --- a/SabreTools.Metadata.DatItems/Formats/DiskArea.cs +++ b/SabreTools.Metadata.DatItems/Formats/DiskArea.cs @@ -1,6 +1,6 @@ -using System.Xml.Serialization; +using System; +using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -11,10 +11,22 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("diskarea"), XmlRoot("diskarea")] public sealed class DiskArea : DatItem { - #region Fields + #region Properties + + public Disk[]? Disk { get; set; } + + [JsonIgnore] + public bool DiskSpecified => Disk is not null && Disk.Length > 0; /// /> - protected override ItemType ItemType => ItemType.DiskArea; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.DiskArea; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } #endregion @@ -22,20 +34,64 @@ namespace SabreTools.Metadata.DatItems.Formats public DiskArea() : base() { } - public DiskArea(Data.Models.Metadata.DiskArea item) : base(item) { } + public DiskArea(Data.Models.Metadata.DiskArea item) : base(item) + { + // Handle subitems + if (item.Disk is not null) + Disk = Array.ConvertAll(item.Disk, rom => new Disk(rom)); + } public DiskArea(Data.Models.Metadata.DiskArea item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new DiskArea(_internal.Clone() as Data.Models.Metadata.DiskArea ?? []); + public override object Clone() => new DiskArea(GetInternalClone()); + + public override Data.Models.Metadata.DiskArea GetInternalClone() + { + var partItem = _internal.Clone() as Data.Models.Metadata.DiskArea ?? new(); + + if (Disk is not null) + partItem.Disk = Array.ConvertAll(Disk, rom => rom.GetInternalClone()); + + return partItem; + } + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is DiskArea otherDiskArea) + return _internal.Equals(otherDiskArea._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Display.cs b/SabreTools.Metadata.DatItems/Formats/Display.cs index 8b8b836e..d3994ed2 100644 --- a/SabreTools.Metadata.DatItems/Formats/Display.cs +++ b/SabreTools.Metadata.DatItems/Formats/Display.cs @@ -1,7 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; -using SabreTools.Text.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -11,10 +9,107 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("display"), XmlRoot("display")] public sealed class Display : DatItem { - #region Fields + #region Properties + + public long? AspectX + { + get => _internal.AspectX; + set => _internal.AspectX = value; + } + + public long? AspectY + { + get => _internal.AspectY; + set => _internal.AspectY = value; + } + + public Data.Models.Metadata.DisplayType? DisplayType + { + get => _internal.DisplayType; + set => _internal.DisplayType = value; + } + + public bool? FlipX + { + get => _internal.FlipX; + set => _internal.FlipX = value; + } + + public long? HBEnd + { + get => _internal.HBEnd; + set => _internal.HBEnd = value; + } + + public long? HBStart + { + get => _internal.HBStart; + set => _internal.HBStart = value; + } + + public long? Height + { + get => _internal.Height; + set => _internal.Height = value; + } + + public long? HTotal + { + get => _internal.HTotal; + set => _internal.HTotal = value; + } /// /> - protected override ItemType ItemType => ItemType.Display; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Display; + + public long? PixClock + { + get => _internal.PixClock; + set => _internal.PixClock = value; + } + + public double? Refresh + { + get => _internal.Refresh; + set => _internal.Refresh = value; + } + + public Data.Models.Metadata.Rotation? Rotate + { + get => _internal.Rotate; + set => _internal.Rotate = value; + } + + public string? Tag + { + get => _internal.Tag; + set => _internal.Tag = value; + } + + public long? VBEnd + { + get => _internal.VBEnd; + set => _internal.VBEnd = value; + } + + public long? VBStart + { + get => _internal.VBStart; + set => _internal.VBStart = value; + } + + public long? VTotal + { + get => _internal.VTotal; + set => _internal.VTotal = value; + } + + public long? Width + { + get => _internal.Width; + set => _internal.Width = value; + } #endregion @@ -22,129 +117,70 @@ namespace SabreTools.Metadata.DatItems.Formats public Display() : base() { } - public Display(Data.Models.Metadata.Display item) : base(item) - { - // Process flag values - bool? flipX = ReadBool(Data.Models.Metadata.Display.FlipXKey); - if (flipX is not null) - Write(Data.Models.Metadata.Display.FlipXKey, flipX.FromYesNo()); - - long? hbEnd = ReadLong(Data.Models.Metadata.Display.HBEndKey); - if (hbEnd is not null) - Write(Data.Models.Metadata.Display.HBEndKey, hbEnd.ToString()); - - long? hbStart = ReadLong(Data.Models.Metadata.Display.HBStartKey); - if (hbStart is not null) - Write(Data.Models.Metadata.Display.HBStartKey, hbStart.ToString()); - - long? height = ReadLong(Data.Models.Metadata.Display.HeightKey); - if (height is not null) - Write(Data.Models.Metadata.Display.HeightKey, height.ToString()); - - long? hTotal = ReadLong(Data.Models.Metadata.Display.HTotalKey); - if (hTotal is not null) - Write(Data.Models.Metadata.Display.HTotalKey, hTotal.ToString()); - - long? pixClock = ReadLong(Data.Models.Metadata.Display.PixClockKey); - if (pixClock is not null) - Write(Data.Models.Metadata.Display.PixClockKey, pixClock.ToString()); - - double? refresh = ReadDouble(Data.Models.Metadata.Display.RefreshKey); - if (refresh is not null) - Write(Data.Models.Metadata.Display.RefreshKey, refresh.ToString()); - - long? rotate = ReadLong(Data.Models.Metadata.Display.RotateKey); - if (rotate is not null) - Write(Data.Models.Metadata.Display.RotateKey, rotate.ToString()); - - string? displayType = ReadString(Data.Models.Metadata.Display.DisplayTypeKey); - if (displayType is not null) - Write(Data.Models.Metadata.Display.DisplayTypeKey, displayType.AsDisplayType()?.AsStringValue()); - - long? vbEnd = ReadLong(Data.Models.Metadata.Display.VBEndKey); - if (vbEnd is not null) - Write(Data.Models.Metadata.Display.VBEndKey, vbEnd.ToString()); - - long? vbStart = ReadLong(Data.Models.Metadata.Display.VBStartKey); - if (vbStart is not null) - Write(Data.Models.Metadata.Display.VBStartKey, vbStart.ToString()); - - long? vTotal = ReadLong(Data.Models.Metadata.Display.VTotalKey); - if (vTotal is not null) - Write(Data.Models.Metadata.Display.VTotalKey, vTotal.ToString()); - - long? width = ReadLong(Data.Models.Metadata.Display.WidthKey); - if (width is not null) - Write(Data.Models.Metadata.Display.WidthKey, width.ToString()); - } + public Display(Data.Models.Metadata.Display item) : base(item) { } public Display(Data.Models.Metadata.Display item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } public Display(Data.Models.Metadata.Video item) : base() { - // TODO: Convert this block to more traditional set of if/then - Write(Data.Models.Metadata.Video.AspectXKey, NumberHelper.ConvertToInt64(item.ReadString(Data.Models.Metadata.Video.AspectXKey))); - Write(Data.Models.Metadata.Video.AspectYKey, NumberHelper.ConvertToInt64(item.ReadString(Data.Models.Metadata.Video.AspectYKey))); - Write(Data.Models.Metadata.Display.DisplayTypeKey, item.ReadString(Data.Models.Metadata.Video.ScreenKey).AsDisplayType()?.AsStringValue()); - Write(Data.Models.Metadata.Display.HeightKey, NumberHelper.ConvertToInt64(item.ReadString(Data.Models.Metadata.Video.HeightKey))); - Write(Data.Models.Metadata.Display.RefreshKey, NumberHelper.ConvertToDouble(item.ReadString(Data.Models.Metadata.Video.RefreshKey))); - Write(Data.Models.Metadata.Display.WidthKey, NumberHelper.ConvertToInt64(item.ReadString(Data.Models.Metadata.Video.WidthKey))); - - switch (item.ReadString(Data.Models.Metadata.Video.OrientationKey)) - { - case "horizontal": - Write(Data.Models.Metadata.Display.RotateKey, 0); - break; - case "vertical": - Write(Data.Models.Metadata.Display.RotateKey, 90); - break; - default: - // TODO: Log invalid values - break; - } - - // Process flag values - long? aspectX = ReadLong(Data.Models.Metadata.Video.AspectXKey); - if (aspectX is not null) - Write(Data.Models.Metadata.Video.AspectXKey, aspectX.ToString()); - - long? aspectY = ReadLong(Data.Models.Metadata.Video.AspectYKey); - if (aspectY is not null) - Write(Data.Models.Metadata.Video.AspectYKey, aspectY.ToString()); - - long? height = ReadLong(Data.Models.Metadata.Video.HeightKey); - if (height is not null) - Write(Data.Models.Metadata.Display.HeightKey, height.ToString()); - - double? refresh = ReadDouble(Data.Models.Metadata.Video.RefreshKey); - if (refresh is not null) - Write(Data.Models.Metadata.Display.RefreshKey, refresh.ToString()); - - string? screen = ReadString(Data.Models.Metadata.Video.ScreenKey); - if (screen is not null) - Write(Data.Models.Metadata.Display.DisplayTypeKey, screen.AsDisplayType()?.AsStringValue()); - - long? width = ReadLong(Data.Models.Metadata.Video.WidthKey); - if (width is not null) - Write(Data.Models.Metadata.Display.WidthKey, width.ToString()); + AspectX = item.AspectX; + AspectY = item.AspectY; + DisplayType = item.Screen; + Height = item.Height; + Refresh = item.Refresh; + Rotate = item.Orientation; + Width = item.Width; } public Display(Data.Models.Metadata.Video item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => null; + + /// + public override void SetName(string? name) { } + + #endregion + #region Cloning Methods /// - public override object Clone() => new Display(_internal.Clone() as Data.Models.Metadata.Display ?? []); + public override object Clone() => new Display(GetInternalClone()); + + /// + public override Data.Models.Metadata.Display GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Display ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Display otherDisplay) + return _internal.Equals(otherDisplay._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Driver.cs b/SabreTools.Metadata.DatItems/Formats/Driver.cs index 47a01f39..b5f50a83 100644 --- a/SabreTools.Metadata.DatItems/Formats/Driver.cs +++ b/SabreTools.Metadata.DatItems/Formats/Driver.cs @@ -1,6 +1,5 @@ -using System.Xml.Serialization; +using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,83 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("driver"), XmlRoot("driver")] public sealed class Driver : DatItem { - #region Fields + #region Properties + + public Data.Models.Metadata.Blit? Blit + { + get => _internal.Blit; + set => _internal.Blit = value; + } + + public Data.Models.Metadata.SupportStatus? Cocktail + { + get => _internal.Cocktail; + set => _internal.Cocktail = value; + } + + public Data.Models.Metadata.SupportStatus? Color + { + get => _internal.Color; + set => _internal.Color = value; + } + + public Data.Models.Metadata.SupportStatus? Emulation + { + get => _internal.Emulation; + set => _internal.Emulation = value; + } + + public bool? Incomplete + { + get => _internal.Incomplete; + set => _internal.Incomplete = value; + } /// /> - protected override ItemType ItemType => ItemType.Driver; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Driver; + + public bool? NoSoundHardware + { + get => _internal.NoSoundHardware; + set => _internal.NoSoundHardware = value; + } + + public string? PaletteSize + { + get => _internal.PaletteSize; + set => _internal.PaletteSize = value; + } + + public bool? RequiresArtwork + { + get => _internal.RequiresArtwork; + set => _internal.RequiresArtwork = value; + } + + public Data.Models.Metadata.Supported? SaveState + { + get => _internal.SaveState; + set => _internal.SaveState = value; + } + + public Data.Models.Metadata.SupportStatus? Sound + { + get => _internal.Sound; + set => _internal.Sound = value; + } + + public Data.Models.Metadata.SupportStatus? Status + { + get => _internal.Status; + set => _internal.Status = value; + } + + public bool? Unofficial + { + get => _internal.Unofficial; + set => _internal.Unofficial = value; + } #endregion @@ -21,66 +93,53 @@ namespace SabreTools.Metadata.DatItems.Formats public Driver() : base() { } - public Driver(Data.Models.Metadata.Driver item) : base(item) - { - // Process flag values - string? cocktail = ReadString(Data.Models.Metadata.Driver.CocktailKey); - if (cocktail is not null) - Write(Data.Models.Metadata.Driver.CocktailKey, cocktail.AsSupportStatus()?.AsStringValue()); - - string? color = ReadString(Data.Models.Metadata.Driver.ColorKey); - if (color is not null) - Write(Data.Models.Metadata.Driver.ColorKey, color.AsSupportStatus()?.AsStringValue()); - - string? emulation = ReadString(Data.Models.Metadata.Driver.EmulationKey); - if (emulation is not null) - Write(Data.Models.Metadata.Driver.EmulationKey, emulation.AsSupportStatus()?.AsStringValue()); - - bool? incomplete = ReadBool(Data.Models.Metadata.Driver.IncompleteKey); - if (incomplete is not null) - Write(Data.Models.Metadata.Driver.IncompleteKey, incomplete.FromYesNo()); - - bool? noSoundHardware = ReadBool(Data.Models.Metadata.Driver.NoSoundHardwareKey); - if (noSoundHardware is not null) - Write(Data.Models.Metadata.Driver.NoSoundHardwareKey, noSoundHardware.FromYesNo()); - - long? paletteSize = ReadLong(Data.Models.Metadata.Driver.PaletteSizeKey); - if (paletteSize is not null) - Write(Data.Models.Metadata.Driver.PaletteSizeKey, paletteSize.ToString()); - - bool? requiresArtwork = ReadBool(Data.Models.Metadata.Driver.RequiresArtworkKey); - if (requiresArtwork is not null) - Write(Data.Models.Metadata.Driver.RequiresArtworkKey, requiresArtwork.FromYesNo()); - - string? saveState = ReadString(Data.Models.Metadata.Driver.SaveStateKey); - if (saveState is not null) - Write(Data.Models.Metadata.Driver.SaveStateKey, saveState.AsSupported()?.AsStringValue(useSecond: true)); - - string? sound = ReadString(Data.Models.Metadata.Driver.SoundKey); - if (sound is not null) - Write(Data.Models.Metadata.Driver.SoundKey, sound.AsSupportStatus()?.AsStringValue()); - - string? status = ReadString(Data.Models.Metadata.Driver.StatusKey); - if (status is not null) - Write(Data.Models.Metadata.Driver.StatusKey, status.AsSupportStatus()?.AsStringValue()); - - bool? unofficial = ReadBool(Data.Models.Metadata.Driver.UnofficialKey); - if (unofficial is not null) - Write(Data.Models.Metadata.Driver.UnofficialKey, unofficial.FromYesNo()); - } + public Driver(Data.Models.Metadata.Driver item) : base(item) { } public Driver(Data.Models.Metadata.Driver item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => null; + + /// + public override void SetName(string? name) { } + + #endregion + #region Cloning Methods /// - public override object Clone() => new Driver(_internal.Clone() as Data.Models.Metadata.Driver ?? []); + public override object Clone() => new Driver(GetInternalClone()); + + /// + public override Data.Models.Metadata.Driver GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Driver ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Driver otherDriver) + return _internal.Equals(otherDriver._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Extension.cs b/SabreTools.Metadata.DatItems/Formats/Extension.cs index 4f2bfe5f..88ad1a4f 100644 --- a/SabreTools.Metadata.DatItems/Formats/Extension.cs +++ b/SabreTools.Metadata.DatItems/Formats/Extension.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,17 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("extension"), XmlRoot("extension")] public sealed class Extension : DatItem { - #region Fields + #region Properties /// /> - protected override ItemType ItemType => ItemType.Extension; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Extension; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } #endregion @@ -25,16 +31,49 @@ namespace SabreTools.Metadata.DatItems.Formats public Extension(Data.Models.Metadata.Extension item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new Extension(_internal.Clone() as Data.Models.Metadata.Extension ?? []); + public override object Clone() => new Extension(GetInternalClone()); + + /// + public override Data.Models.Metadata.Extension GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Extension ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Extension otherExtension) + return _internal.Equals(otherExtension._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Feature.cs b/SabreTools.Metadata.DatItems/Formats/Feature.cs index 34defc68..e5c95a99 100644 --- a/SabreTools.Metadata.DatItems/Formats/Feature.cs +++ b/SabreTools.Metadata.DatItems/Formats/Feature.cs @@ -1,6 +1,5 @@ -using System.Xml.Serialization; +using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,41 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("feature"), XmlRoot("feature")] public sealed class Feature : DatItem { - #region Fields + #region Properties + + public Data.Models.Metadata.FeatureType? FeatureType + { + get => _internal.FeatureType; + set => _internal.FeatureType = value; + } /// /> - protected override ItemType ItemType => ItemType.Feature; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Feature; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public Data.Models.Metadata.FeatureStatus? Overall + { + get => _internal.Overall; + set => _internal.Overall = value; + } + + public Data.Models.Metadata.FeatureStatus? Status + { + get => _internal.Status; + set => _internal.Status = value; + } + + public string? Value + { + get => _internal.Value; + set => _internal.Value = value; + } #endregion @@ -21,34 +51,53 @@ namespace SabreTools.Metadata.DatItems.Formats public Feature() : base() { } - public Feature(Data.Models.Metadata.Feature item) : base(item) - { - // Process flag values - string? overall = ReadString(Data.Models.Metadata.Feature.OverallKey); - if (overall is not null) - Write(Data.Models.Metadata.Feature.OverallKey, overall.AsFeatureStatus()?.AsStringValue()); - - string? status = ReadString(Data.Models.Metadata.Feature.StatusKey); - if (status is not null) - Write(Data.Models.Metadata.Feature.StatusKey, status.AsFeatureStatus()?.AsStringValue()); - - string? featureType = ReadString(Data.Models.Metadata.Feature.FeatureTypeKey); - if (featureType is not null) - Write(Data.Models.Metadata.Feature.FeatureTypeKey, featureType.AsFeatureType()?.AsStringValue()); - } + public Feature(Data.Models.Metadata.Feature item) : base(item) { } public Feature(Data.Models.Metadata.Feature item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new Feature(_internal.Clone() as Data.Models.Metadata.Feature ?? []); + public override object Clone() => new Feature(GetInternalClone()); + + /// + public override Data.Models.Metadata.Feature GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Feature ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Feature otherFeature) + return _internal.Equals(otherFeature._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/File.cs b/SabreTools.Metadata.DatItems/Formats/File.cs index 33cc0ec1..7125228a 100644 --- a/SabreTools.Metadata.DatItems/Formats/File.cs +++ b/SabreTools.Metadata.DatItems/Formats/File.cs @@ -4,9 +4,11 @@ using Newtonsoft.Json; using SabreTools.Data.Extensions; using SabreTools.Hashing; using SabreTools.IO.Extensions; +using SabreTools.Metadata.Filter; using SabreTools.Text.Extensions; // TODO: Add item mappings for all fields +// TODO: Investigate whether this is the "File" from NIDB namespace SabreTools.Metadata.DatItems.Formats { /// @@ -24,10 +26,10 @@ namespace SabreTools.Metadata.DatItems.Formats #endregion - #region Fields + #region Properties /// /> - protected override ItemType ItemType => ItemType.File; + public override Data.Models.Metadata.ItemType ItemType => Data.Models.Metadata.ItemType.File; /// /// ID value @@ -100,10 +102,17 @@ namespace SabreTools.Metadata.DatItems.Formats /// /// Create a default, empty File object /// - public File() - { - Write(Data.Models.Metadata.DatItem.TypeKey, ItemType); - } + public File() { } + + #endregion + + #region Accessors + + /// + public override string? GetName() => null; + + /// + public override void SetName(string? name) { } #endregion @@ -123,10 +132,10 @@ namespace SabreTools.Metadata.DatItems.Formats _sha256 = this._sha256, Format = this.Format, }; - file.Write(DupeTypeKey, Read(DupeTypeKey)); - file.Write(MachineKey, GetMachine()!.Clone() as Machine ?? new Machine()); - file.Write(RemoveKey, ReadBool(RemoveKey)); - file.Write(SourceKey, Read(SourceKey)); + file.DupeType = DupeType; + file.Machine = Machine!.Clone() as Machine ?? new Machine(); + file.RemoveFlag = RemoveFlag; + file.Source = Source?.Clone() as Source; return file; } @@ -139,17 +148,17 @@ namespace SabreTools.Metadata.DatItems.Formats { var rom = new Rom(); - rom.SetName($"{Id}.{Extension}"); - rom.Write(Data.Models.Metadata.Rom.SizeKey, Size); - rom.Write(Data.Models.Metadata.Rom.CRCKey, CRC); - rom.Write(Data.Models.Metadata.Rom.MD5Key, MD5); - rom.Write(Data.Models.Metadata.Rom.SHA1Key, SHA1); - rom.Write(Data.Models.Metadata.Rom.SHA256Key, SHA256); + rom.Name = $"{Id}.{Extension}"; + rom.Size = Size; + rom.CRC32 = CRC; + rom.MD5 = MD5; + rom.SHA1 = SHA1; + rom.SHA256 = SHA256; - rom.Write(DupeTypeKey, Read(DupeTypeKey)); - rom.Write(MachineKey, GetMachine()?.Clone() as Machine); - rom.Write(RemoveKey, ReadBool(RemoveKey)); - rom.Write(SourceKey, Read(SourceKey)); + rom.DupeType = DupeType; + rom.Machine = Machine?.Clone() as Machine; + rom.RemoveFlag = RemoveFlag; + rom.Source = Source?.Clone() as Source; return rom; } @@ -164,7 +173,7 @@ namespace SabreTools.Metadata.DatItems.Formats bool dupefound = false; // If we don't have a file, return false - if (ReadString(Data.Models.Metadata.DatItem.TypeKey) != other?.ReadString(Data.Models.Metadata.DatItem.TypeKey)) + if (ItemType != other?.ItemType) return dupefound; // Otherwise, treat it as a File @@ -288,7 +297,7 @@ namespace SabreTools.Metadata.DatItems.Formats // Now determine what the key should be based on the bucketedBy value switch (bucketedBy) { - case ItemKey.CRC: + case ItemKey.CRC32: key = CRC; break; @@ -319,5 +328,17 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Manipulation + + /// + /// Not implemented + public override bool PassesFilter(FilterRunner filterRunner) => false; + + /// + /// Not implemented + public override bool PassesFilterDB(FilterRunner filterRunner) => false; + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Info.cs b/SabreTools.Metadata.DatItems/Formats/Info.cs index 4232db88..0524a03f 100644 --- a/SabreTools.Metadata.DatItems/Formats/Info.cs +++ b/SabreTools.Metadata.DatItems/Formats/Info.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,23 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("info"), XmlRoot("info")] public sealed class Info : DatItem { - #region Fields + #region Properties /// /> - protected override ItemType ItemType => ItemType.Info; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Info; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public string? Value + { + get => _internal.Value; + set => _internal.Value = value; + } #endregion @@ -25,16 +37,49 @@ namespace SabreTools.Metadata.DatItems.Formats public Info(Data.Models.Metadata.Info item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new Info(_internal.Clone() as Data.Models.Metadata.Info ?? []); + public override object Clone() => new Info(GetInternalClone()); + + /// + public override Data.Models.Metadata.Info GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Info ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Info otherInfo) + return _internal.Equals(otherInfo._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Input.cs b/SabreTools.Metadata.DatItems/Formats/Input.cs index a44300d0..30af67e2 100644 --- a/SabreTools.Metadata.DatItems/Formats/Input.cs +++ b/SabreTools.Metadata.DatItems/Formats/Input.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -11,19 +10,51 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("input"), XmlRoot("input")] public sealed class Input : DatItem { - #region Fields + #region Properties - /// /> - protected override ItemType ItemType => ItemType.Input; + public long? Buttons + { + get => _internal.Buttons; + set => _internal.Buttons = value; + } + + public long? Coins + { + get => _internal.Coins; + set => _internal.Coins = value; + } + + public Control[]? Control { get; set; } [JsonIgnore] - public bool ControlsSpecified + public bool ControlSpecified => Control is not null && Control.Length > 0; + + public string? ControlAttr { - get - { - var controls = Read(Data.Models.Metadata.Input.ControlKey); - return controls is not null && controls.Length > 0; - } + get => _internal.ControlAttr; + set => _internal.ControlAttr = value; + } + + /// /> + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Input; + + public long? Players + { + get => _internal.Players; + set => _internal.Players = value; + } + + public bool? Service + { + get => _internal.Service; + set => _internal.Service = value; + } + + public bool? Tilt + { + get => _internal.Tilt; + set => _internal.Tilt = value; } #endregion @@ -34,64 +65,64 @@ namespace SabreTools.Metadata.DatItems.Formats public Input(Data.Models.Metadata.Input item) : base(item) { - // Process flag values - long? buttons = ReadLong(Data.Models.Metadata.Input.ButtonsKey); - if (buttons is not null) - Write(Data.Models.Metadata.Input.ButtonsKey, buttons.ToString()); - - long? coins = ReadLong(Data.Models.Metadata.Input.CoinsKey); - if (coins is not null) - Write(Data.Models.Metadata.Input.CoinsKey, coins.ToString()); - - long? players = ReadLong(Data.Models.Metadata.Input.PlayersKey); - if (players is not null) - Write(Data.Models.Metadata.Input.PlayersKey, players.ToString()); - - bool? service = ReadBool(Data.Models.Metadata.Input.ServiceKey); - if (service is not null) - Write(Data.Models.Metadata.Input.ServiceKey, service.FromYesNo()); - - bool? tilt = ReadBool(Data.Models.Metadata.Input.TiltKey); - if (tilt is not null) - Write(Data.Models.Metadata.Input.TiltKey, tilt.FromYesNo()); - // Handle subitems - var controls = item.ReadArray(Data.Models.Metadata.Input.ControlKey); - if (controls is not null) - { - Control[] controlItems = Array.ConvertAll(controls, control => new Control(control)); - Write(Data.Models.Metadata.Input.ControlKey, controlItems); - } + if (item.Control is not null) + Control = Array.ConvertAll(item.Control, control => new Control(control)); } public Input(Data.Models.Metadata.Input item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => null; + + /// + public override void SetName(string? name) { } + + #endregion + #region Cloning Methods /// - public override object Clone() => new Input(_internal.Clone() as Data.Models.Metadata.Input ?? []); + public override object Clone() => new Input(GetInternalClone()); /// public override Data.Models.Metadata.Input GetInternalClone() { - var inputItem = base.GetInternalClone(); + var inputItem = _internal.Clone() as Data.Models.Metadata.Input ?? new(); - var controls = Read(Data.Models.Metadata.Input.ControlKey); - if (controls is not null) - { - Data.Models.Metadata.Control[] controlItems = Array.ConvertAll(controls, control => control.GetInternalClone()); - inputItem[Data.Models.Metadata.Input.ControlKey] = controlItems; - } + if (Control is not null) + inputItem.Control = Array.ConvertAll(Control, control => control.GetInternalClone()); return inputItem; } #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Input otherInput) + return _internal.Equals(otherInput._internal); + + // Everything else fails + return false; + } + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Instance.cs b/SabreTools.Metadata.DatItems/Formats/Instance.cs index f2f7e954..5c1f38dd 100644 --- a/SabreTools.Metadata.DatItems/Formats/Instance.cs +++ b/SabreTools.Metadata.DatItems/Formats/Instance.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,23 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("instance"), XmlRoot("instance")] public sealed class Instance : DatItem { - #region Fields + #region Properties + + public string? BriefName + { + get => _internal.BriefName; + set => _internal.BriefName = value; + } /// /> - protected override ItemType ItemType => ItemType.Instance; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Instance; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } #endregion @@ -25,16 +37,49 @@ namespace SabreTools.Metadata.DatItems.Formats public Instance(Data.Models.Metadata.Instance item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new Instance(_internal.Clone() as Data.Models.Metadata.Instance ?? []); + public override object Clone() => new Instance(GetInternalClone()); + + /// + public override Data.Models.Metadata.Instance GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Instance ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Instance otherInstance) + return _internal.Equals(otherInstance._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Media.cs b/SabreTools.Metadata.DatItems/Formats/Media.cs index 7ab8144d..7eed9a62 100644 --- a/SabreTools.Metadata.DatItems/Formats/Media.cs +++ b/SabreTools.Metadata.DatItems/Formats/Media.cs @@ -11,10 +11,41 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("media"), XmlRoot("media")] public sealed class Media : DatItem { - #region Fields + #region Properties + + public string? MD5 + { + get => _internal.MD5; + set => _internal.MD5 = value; + } /// /> - protected override ItemType ItemType => ItemType.Media; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Media; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public string? SHA1 + { + get => _internal.SHA1; + set => _internal.SHA1 = value; + } + + public string? SHA256 + { + get => _internal.SHA256; + set => _internal.SHA256 = value; + } + + public string? SpamSum + { + get => _internal.SpamSum; + set => _internal.SpamSum = value; + } #endregion @@ -22,39 +53,50 @@ namespace SabreTools.Metadata.DatItems.Formats public Media() : base() { - Write(DupeTypeKey, 0x00); + DupeType = 0x00; } public Media(Data.Models.Metadata.Media item) : base(item) { - Write(DupeTypeKey, 0x00); + DupeType = 0x00; // Process hash values - string? md5 = ReadString(Data.Models.Metadata.Media.MD5Key); - if (md5 is not null) - Write(Data.Models.Metadata.Media.MD5Key, TextHelper.NormalizeMD5(md5)); + if (MD5 is not null) + MD5 = TextHelper.NormalizeMD5(MD5); - string? sha1 = ReadString(Data.Models.Metadata.Media.SHA1Key); - if (sha1 is not null) - Write(Data.Models.Metadata.Media.SHA1Key, TextHelper.NormalizeSHA1(sha1)); + if (SHA1 is not null) + SHA1 = TextHelper.NormalizeSHA1(SHA1); - string? sha256 = ReadString(Data.Models.Metadata.Media.SHA256Key); - if (sha256 is not null) - Write(Data.Models.Metadata.Media.SHA256Key, TextHelper.NormalizeSHA256(sha256)); + if (SHA256 is not null) + SHA256 = TextHelper.NormalizeSHA256(SHA256); } public Media(Data.Models.Metadata.Media item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new Media(_internal.Clone() as Data.Models.Metadata.Media ?? []); + public override object Clone() => new Media(GetInternalClone()); + + /// + public override Data.Models.Metadata.Media GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Media ?? new(); /// /// Convert a media to the closest Rom approximation @@ -64,10 +106,10 @@ namespace SabreTools.Metadata.DatItems.Formats { var rom = new Rom(_internal.ConvertToRom()!); - rom.Write(DupeTypeKey, Read(DupeTypeKey)); - rom.Write(MachineKey, GetMachine()); - rom.Write(RemoveKey, ReadBool(RemoveKey)); - rom.Write(SourceKey, Read(SourceKey)); + rom.DupeType = DupeType; + rom.Machine = Machine?.Clone() as Machine; + rom.RemoveFlag = RemoveFlag; + rom.Source = Source?.Clone() as Source; return rom; } @@ -76,6 +118,21 @@ namespace SabreTools.Metadata.DatItems.Formats #region Comparision Methods + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Media otherMedia) + return _internal.PartialEquals(otherMedia._internal); + + // Everything else fails + return false; + } + /// /// Fill any missing size and hash information from another Media /// @@ -110,19 +167,19 @@ namespace SabreTools.Metadata.DatItems.Formats switch (bucketedBy) { case ItemKey.MD5: - key = ReadString(Data.Models.Metadata.Media.MD5Key); + key = MD5; break; case ItemKey.SHA1: - key = ReadString(Data.Models.Metadata.Media.SHA1Key); + key = SHA1; break; case ItemKey.SHA256: - key = ReadString(Data.Models.Metadata.Media.SHA256Key); + key = SHA256; break; case ItemKey.SpamSum: - key = ReadString(Data.Models.Metadata.Media.SpamSumKey); + key = SpamSum; break; // Let the base handle generic stuff diff --git a/SabreTools.Metadata.DatItems/Formats/Original.cs b/SabreTools.Metadata.DatItems/Formats/Original.cs index 9504719e..fa009098 100644 --- a/SabreTools.Metadata.DatItems/Formats/Original.cs +++ b/SabreTools.Metadata.DatItems/Formats/Original.cs @@ -9,24 +9,32 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("original"), XmlRoot("original")] public sealed class Original { - [JsonProperty("value"), XmlElement("value")] - public bool? Value - { - get => _internal.ReadBool(Data.Models.Metadata.Original.ValueKey); - set => _internal[Data.Models.Metadata.Original.ValueKey] = value; - } + #region Properties [JsonProperty("content"), XmlElement("content")] public string? Content { - get => _internal.ReadString(Data.Models.Metadata.Original.ContentKey); - set => _internal[Data.Models.Metadata.Original.ContentKey] = value; + get => _internal.Content; + set => _internal.Content = value; } + /// /> + public Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Original; + + [JsonProperty("value"), XmlElement("value")] + public bool? Value + { + get => _internal.Value; + set => _internal.Value = value; + } + + #endregion + /// /// Internal Original model /// [JsonIgnore] - private readonly Data.Models.Metadata.Original _internal = []; + private readonly Data.Models.Metadata.Original _internal = new(); } } diff --git a/SabreTools.Metadata.DatItems/Formats/Part.cs b/SabreTools.Metadata.DatItems/Formats/Part.cs index 32c2fed4..c07231d8 100644 --- a/SabreTools.Metadata.DatItems/Formats/Part.cs +++ b/SabreTools.Metadata.DatItems/Formats/Part.cs @@ -1,29 +1,52 @@ -using System.Xml.Serialization; +using System; +using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { /// - /// SoftwareList part information + /// PartList part information /// /// One Part can contain multiple PartFeature, DataArea, DiskArea, and DipSwitch items [JsonObject("part"), XmlRoot("part")] public sealed class Part : DatItem { - #region Fields + #region Properties - /// /> - protected override ItemType ItemType => ItemType.Part; + public DataArea[]? DataArea { get; set; } [JsonIgnore] - public bool FeaturesSpecified + public bool DataAreaSpecified => DataArea is not null && DataArea.Length > 0; + + public DiskArea[]? DiskArea { get; set; } + + [JsonIgnore] + public bool DiskAreaSpecified => DiskArea is not null && DiskArea.Length > 0; + + public DipSwitch[]? DipSwitch { get; set; } + + [JsonIgnore] + public bool DipSwitchSpecified => DipSwitch is not null && DipSwitch.Length > 0; + + public PartFeature[]? Feature { get; set; } + + [JsonIgnore] + public bool FeatureSpecified => Feature is not null && Feature.Length > 0; + + public string? Interface { - get - { - var features = Read(Data.Models.Metadata.Part.FeatureKey); - return features is not null && features.Length > 0; - } + get => _internal.Interface; + set => _internal.Interface = value; + } + + /// /> + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Part; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; } #endregion @@ -32,20 +55,83 @@ namespace SabreTools.Metadata.DatItems.Formats public Part() : base() { } - public Part(Data.Models.Metadata.Part item) : base(item) { } + public Part(Data.Models.Metadata.Part item) : base(item) + { + // Handle subitems + if (item.DataArea is not null) + DataArea = Array.ConvertAll(item.DataArea, dataArea => new DataArea(dataArea)); + + if (item.DiskArea is not null) + DiskArea = Array.ConvertAll(item.DiskArea, diskArea => new DiskArea(diskArea)); + + if (item.DipSwitch is not null) + DipSwitch = Array.ConvertAll(item.DipSwitch, dipSwitch => new DipSwitch(dipSwitch)); + + if (item.Feature is not null) + Feature = Array.ConvertAll(item.Feature, feature => new PartFeature(feature)); + } public Part(Data.Models.Metadata.Part item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new Part(_internal.Clone() as Data.Models.Metadata.Part ?? []); + public override object Clone() => new Part(GetInternalClone()); + + /// + public override Data.Models.Metadata.Part GetInternalClone() + { + var partItem = _internal.Clone() as Data.Models.Metadata.Part ?? new(); + + if (DataArea is not null) + partItem.DataArea = Array.ConvertAll(DataArea, dataArea => dataArea.GetInternalClone()); + + if (DiskArea is not null) + partItem.DiskArea = Array.ConvertAll(DiskArea, diskArea => diskArea.GetInternalClone()); + + if (DipSwitch is not null) + partItem.DipSwitch = Array.ConvertAll(DipSwitch, dipSwitch => dipSwitch.GetInternalClone()); + + if (Feature is not null) + partItem.Feature = Array.ConvertAll(Feature, feature => feature.GetInternalClone()); + + return partItem; + } + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Part otherPart) + return _internal.Equals(otherPart._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/PartFeature.cs b/SabreTools.Metadata.DatItems/Formats/PartFeature.cs index ae4ff5ba..de0c6ae5 100644 --- a/SabreTools.Metadata.DatItems/Formats/PartFeature.cs +++ b/SabreTools.Metadata.DatItems/Formats/PartFeature.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,19 +9,46 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("part_feature"), XmlRoot("part_feature")] public sealed class PartFeature : DatItem { - #region Constants + #region Properties - /// - /// Non-standard key for inverted logic - /// - public const string PartKey = "PART"; - - #endregion - - #region Fields + public Data.Models.Metadata.FeatureType? FeatureType + { + get => _internal.FeatureType; + set => _internal.FeatureType = value; + } /// /> - protected override ItemType ItemType => ItemType.PartFeature; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.PartFeature; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public Data.Models.Metadata.FeatureStatus? Overall + { + get => _internal.Overall; + set => _internal.Overall = value; + } + + public Part? Part { get; set; } + + [JsonIgnore] + public bool PartSpecified => Part is not null; + + public Data.Models.Metadata.FeatureStatus? Status + { + get => _internal.Status; + set => _internal.Status = value; + } + + public string? Value + { + get => _internal.Value; + set => _internal.Value = value; + } #endregion @@ -30,34 +56,53 @@ namespace SabreTools.Metadata.DatItems.Formats public PartFeature() : base() { } - public PartFeature(Data.Models.Metadata.Feature item) : base(item) - { - // Process flag values - string? overall = ReadString(Data.Models.Metadata.Feature.OverallKey); - if (overall is not null) - Write(Data.Models.Metadata.Feature.OverallKey, overall.AsFeatureStatus()?.AsStringValue()); - - string? status = ReadString(Data.Models.Metadata.Feature.StatusKey); - if (status is not null) - Write(Data.Models.Metadata.Feature.StatusKey, status.AsFeatureStatus()?.AsStringValue()); - - string? featureType = ReadString(Data.Models.Metadata.Feature.FeatureTypeKey); - if (featureType is not null) - Write(Data.Models.Metadata.Feature.FeatureTypeKey, featureType.AsFeatureType()?.AsStringValue()); - } + public PartFeature(Data.Models.Metadata.Feature item) : base(item) { } public PartFeature(Data.Models.Metadata.Feature item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new PartFeature(_internal.Clone() as Data.Models.Metadata.Feature ?? []); + public override object Clone() => new PartFeature(GetInternalClone()); + + /// + public override Data.Models.Metadata.Feature GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Feature ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is PartFeature otherPartFeature) + return _internal.Equals(otherPartFeature._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Port.cs b/SabreTools.Metadata.DatItems/Formats/Port.cs index 84eaf426..ea822baf 100644 --- a/SabreTools.Metadata.DatItems/Formats/Port.cs +++ b/SabreTools.Metadata.DatItems/Formats/Port.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -11,19 +10,21 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("port"), XmlRoot("port")] public sealed class Port : DatItem { - #region Fields + #region Properties - /// /> - protected override ItemType ItemType => ItemType.Port; + public Analog[]? Analog { get; set; } [JsonIgnore] - public bool AnalogsSpecified + public bool AnalogSpecified => Analog is not null && Analog.Length > 0; + + /// /> + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Port; + + public string? Tag { - get - { - var analogs = Read(Data.Models.Metadata.Port.AnalogKey); - return analogs is not null && analogs.Length > 0; - } + get => _internal.Tag; + set => _internal.Tag = value; } #endregion @@ -35,42 +36,63 @@ namespace SabreTools.Metadata.DatItems.Formats public Port(Data.Models.Metadata.Port item) : base(item) { // Handle subitems - var analogs = item.ReadArray(Data.Models.Metadata.Port.AnalogKey); - if (analogs is not null) - { - Analog[] analogItems = Array.ConvertAll(analogs, analog => new Analog(analog)); - Write(Data.Models.Metadata.Port.AnalogKey, analogItems); - } + if (item.Analog is not null) + Analog = Array.ConvertAll(item.Analog, analog => new Analog(analog)); ; } public Port(Data.Models.Metadata.Port item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => null; + + /// + public override void SetName(string? name) { } + + #endregion + #region Cloning Methods /// - public override object Clone() => new Port(_internal.Clone() as Data.Models.Metadata.Port ?? []); + public override object Clone() => new Port(GetInternalClone()); /// public override Data.Models.Metadata.Port GetInternalClone() { - var portItem = base.GetInternalClone(); + var portItem = _internal.Clone() as Data.Models.Metadata.Port ?? new(); - var analogs = Read(Data.Models.Metadata.Port.AnalogKey); - if (analogs is not null) - { - Data.Models.Metadata.Analog[] analogItems = Array.ConvertAll(analogs, analog => analog.GetInternalClone()); - portItem[Data.Models.Metadata.Port.AnalogKey] = analogItems; - } + if (Analog is not null) + portItem.Analog = Array.ConvertAll(Analog, analog => analog.GetInternalClone()); return portItem; } #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Port otherPort) + return _internal.Equals(otherPort._internal); + + // Everything else fails + return false; + } + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/RamOption.cs b/SabreTools.Metadata.DatItems/Formats/RamOption.cs index 50e32990..190337aa 100644 --- a/SabreTools.Metadata.DatItems/Formats/RamOption.cs +++ b/SabreTools.Metadata.DatItems/Formats/RamOption.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,29 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("ramoption"), XmlRoot("ramoption")] public sealed class RamOption : DatItem { - #region Fields + #region Properties + + public string? Content + { + get => _internal.Content; + set => _internal.Content = value; + } + + public bool? Default + { + get => _internal.Default; + set => _internal.Default = value; + } /// /> - protected override ItemType ItemType => ItemType.RamOption; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.RamOption; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } #endregion @@ -21,26 +39,53 @@ namespace SabreTools.Metadata.DatItems.Formats public RamOption() : base() { } - public RamOption(Data.Models.Metadata.RamOption item) : base(item) - { - // Process flag values - bool? defaultValue = ReadBool(Data.Models.Metadata.RamOption.DefaultKey); - if (defaultValue is not null) - Write(Data.Models.Metadata.RamOption.DefaultKey, defaultValue.FromYesNo()); - } + public RamOption(Data.Models.Metadata.RamOption item) : base(item) { } public RamOption(Data.Models.Metadata.RamOption item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new RamOption(_internal.Clone() as Data.Models.Metadata.RamOption ?? []); + public override object Clone() => new RamOption(GetInternalClone()); + + /// + public override Data.Models.Metadata.RamOption GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.RamOption ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is RamOption otherRamOption) + return _internal.Equals(otherRamOption._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Release.cs b/SabreTools.Metadata.DatItems/Formats/Release.cs index 2eaf01ab..cf5303d0 100644 --- a/SabreTools.Metadata.DatItems/Formats/Release.cs +++ b/SabreTools.Metadata.DatItems/Formats/Release.cs @@ -1,6 +1,5 @@ -using System.Xml.Serialization; +using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,41 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("release"), XmlRoot("release")] public sealed class Release : DatItem { - #region Fields + #region Properties + + public string? Date + { + get => _internal.Date; + set => _internal.Date = value; + } + + public bool? Default + { + get => _internal.Default; + set => _internal.Default = value; + } /// /> - protected override ItemType ItemType => ItemType.Release; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Release; + + public string? Language + { + get => _internal.Language; + set => _internal.Language = value; + } + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public string? Region + { + get => _internal.Region; + set => _internal.Region = value; + } #endregion @@ -21,26 +51,53 @@ namespace SabreTools.Metadata.DatItems.Formats public Release() : base() { } - public Release(Data.Models.Metadata.Release item) : base(item) - { - // Process flag values - bool? defaultValue = ReadBool(Data.Models.Metadata.Release.DefaultKey); - if (defaultValue is not null) - Write(Data.Models.Metadata.Release.DefaultKey, defaultValue.FromYesNo()); - } + public Release(Data.Models.Metadata.Release item) : base(item) { } public Release(Data.Models.Metadata.Release item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new Release(_internal.Clone() as Data.Models.Metadata.Release ?? []); + public override object Clone() => new Release(GetInternalClone()); + + /// + public override Data.Models.Metadata.Release GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Release ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Release otherRelease) + return _internal.Equals(otherRelease._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/ReleaseDetails.cs b/SabreTools.Metadata.DatItems/Formats/ReleaseDetails.cs index cd39f5ef..29886b5e 100644 --- a/SabreTools.Metadata.DatItems/Formats/ReleaseDetails.cs +++ b/SabreTools.Metadata.DatItems/Formats/ReleaseDetails.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,107 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("release_details"), XmlRoot("release_details")] public sealed class ReleaseDetails : DatItem { - #region Fields + #region Properties + + public string? AppendToNumber + { + get => _internal.AppendToNumber; + set => _internal.AppendToNumber = value; + } + + public string? ArchiveName + { + get => _internal.ArchiveName; + set => _internal.ArchiveName = value; + } + + public string? Category + { + get => _internal.Category; + set => _internal.Category = value; + } + + public string? Comment + { + get => _internal.Comment; + set => _internal.Comment = value; + } + + public string? Date + { + get => _internal.Date; + set => _internal.Date = value; + } + + public string? DirName + { + get => _internal.DirName; + set => _internal.DirName = value; + } + + public string? Group + { + get => _internal.Group; + set => _internal.Group = value; + } + + public string? Id + { + get => _internal.Id; + set => _internal.Id = value; + } /// /> - protected override ItemType ItemType => ItemType.ReleaseDetails; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.ReleaseDetails; + + public string? NfoCRC + { + get => _internal.NfoCRC; + set => _internal.NfoCRC = value; + } + + public string? NfoName + { + get => _internal.NfoName; + set => _internal.NfoName = value; + } + + public string? NfoSize + { + get => _internal.NfoSize; + set => _internal.NfoSize = value; + } + + public string? Origin + { + get => _internal.Origin; + set => _internal.Origin = value; + } + + public string? OriginalFormat + { + get => _internal.OriginalFormat; + set => _internal.OriginalFormat = value; + } + + public string? Region + { + get => _internal.Region; + set => _internal.Region = value; + } + + public string? RomInfo + { + get => _internal.RomInfo; + set => _internal.RomInfo = value; + } + + public string? Tool + { + get => _internal.Tool; + set => _internal.Tool = value; + } #endregion @@ -25,15 +121,48 @@ namespace SabreTools.Metadata.DatItems.Formats public ReleaseDetails(Data.Models.Metadata.ReleaseDetails item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => null; + + /// + public override void SetName(string? name) { } + + #endregion + #region Cloning Methods /// - public override object Clone() => new ReleaseDetails(_internal.Clone() as Data.Models.Metadata.ReleaseDetails ?? []); + public override object Clone() => new ReleaseDetails(GetInternalClone()); + + /// + public override Data.Models.Metadata.ReleaseDetails GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.ReleaseDetails ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is ReleaseDetails otherReleaseDetails) + return _internal.Equals(otherReleaseDetails._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Rom.cs b/SabreTools.Metadata.DatItems/Formats/Rom.cs index f7b20fa0..5d8b22d7 100644 --- a/SabreTools.Metadata.DatItems/Formats/Rom.cs +++ b/SabreTools.Metadata.DatItems/Formats/Rom.cs @@ -12,79 +12,628 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("rom"), XmlRoot("rom")] public sealed class Rom : DatItem { - #region Constants + #region Properties - /// - /// Non-standard key for inverted logic - /// - public const string DataAreaKey = "DATAAREA"; - - /// - /// Non-standard key for inverted logic - /// - public const string PartKey = "PART"; - - #endregion - - #region Fields - - /// /> - protected override ItemType ItemType => ItemType.Rom; - - [JsonIgnore] - public bool ItemStatusSpecified + public string? Album { - get - { - var status = ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus(); - return status is not null && status != ItemStatus.None; - } + get => _internal.Album; + set => _internal.Album = value; } - [JsonIgnore] - public bool OriginalSpecified + public string? AltRomname { - get - { - var original = Read("ORIGINAL"); - return original is not null && original != default; - } + get => _internal.AltRomname; + set => _internal.AltRomname = value; } + public string? AltTitle + { + get => _internal.AltTitle; + set => _internal.AltTitle = value; + } + + public string? Artist + { + get => _internal.Artist; + set => _internal.Artist = value; + } + + public string? ASRDetectedLang + { + get => _internal.ASRDetectedLang; + set => _internal.ASRDetectedLang = value; + } + + public string? ASRDetectedLangConf + { + get => _internal.ASRDetectedLangConf; + set => _internal.ASRDetectedLangConf = value; + } + + public string? ASRTranscribedLang + { + get => _internal.ASRTranscribedLang; + set => _internal.ASRTranscribedLang = value; + } + + public string? Bios + { + get => _internal.Bios; + set => _internal.Bios = value; + } + + public string? Bitrate + { + get => _internal.Bitrate; + set => _internal.Bitrate = value; + } + + public string? BitTorrentMagnetHash + { + get => _internal.BitTorrentMagnetHash; + set => _internal.BitTorrentMagnetHash = value; + } + + public string? ClothCoverDetectionModuleVersion + { + get => _internal.ClothCoverDetectionModuleVersion; + set => _internal.ClothCoverDetectionModuleVersion = value; + } + + public string? CollectionCatalogNumber + { + get => _internal.CollectionCatalogNumber; + set => _internal.CollectionCatalogNumber = value; + } + + public string? Comment + { + get => _internal.Comment; + set => _internal.Comment = value; + } + + public string? CRC16 + { + get => _internal.CRC16; + set => _internal.CRC16 = value; + } + + public string? CRC32 + { + get => _internal.CRC32; + set => _internal.CRC32 = value; + } + + public string? CRC64 + { + get => _internal.CRC64; + set => _internal.CRC64 = value; + } + + public string? Creator + { + get => _internal.Creator; + set => _internal.Creator = value; + } + + public DataArea? DataArea { get; set; } + [JsonIgnore] public bool DataAreaSpecified { get { - var dataArea = Read(DataAreaKey); - return dataArea is not null - && (!string.IsNullOrEmpty(dataArea.GetName()) - || dataArea.ReadLong(Data.Models.Metadata.DataArea.SizeKey) is not null - || dataArea.ReadLong(Data.Models.Metadata.DataArea.WidthKey) is not null - || dataArea.ReadString(Data.Models.Metadata.DataArea.EndiannessKey).AsEndianness() is not null); + return DataArea is not null + && (!string.IsNullOrEmpty(DataArea.Name) + || DataArea.Size is not null + || DataArea.Width is not null + || DataArea.Endianness is not null); } } + public string? Date + { + get => _internal.Date; + set => _internal.Date = value; + } + + public bool? Dispose + { + get => _internal.Dispose; + set => _internal.Dispose = value; + } + + public string? Extension + { + get => _internal.Extension; + set => _internal.Extension = value; + } + + public long? FileCount + { + get => _internal.FileCount; + set => _internal.FileCount = value; + } + + public bool? FileIsAvailable + { + get => _internal.FileIsAvailable; + set => _internal.FileIsAvailable = value; + } + + public string? Flags + { + get => _internal.Flags; + set => _internal.Flags = value; + } + + public string? Format + { + get => _internal.Format; + set => _internal.Format = value; + } + + public string? Header + { + get => _internal.Header; + set => _internal.Header = value; + } + + public string? Height + { + get => _internal.Height; + set => _internal.Height = value; + } + + public string? hOCRCharToWordhOCRVersion + { + get => _internal.hOCRCharToWordhOCRVersion; + set => _internal.hOCRCharToWordhOCRVersion = value; + } + + public string? hOCRCharToWordModuleVersion + { + get => _internal.hOCRCharToWordModuleVersion; + set => _internal.hOCRCharToWordModuleVersion = value; + } + + public string? hOCRFtsTexthOCRVersion + { + get => _internal.hOCRFtsTexthOCRVersion; + set => _internal.hOCRFtsTexthOCRVersion = value; + } + + public string? hOCRFtsTextModuleVersion + { + get => _internal.hOCRFtsTextModuleVersion; + set => _internal.hOCRFtsTextModuleVersion = value; + } + + public string? hOCRPageIndexhOCRVersion + { + get => _internal.hOCRPageIndexhOCRVersion; + set => _internal.hOCRPageIndexhOCRVersion = value; + } + + public string? hOCRPageIndexModuleVersion + { + get => _internal.hOCRPageIndexModuleVersion; + set => _internal.hOCRPageIndexModuleVersion = value; + } + + public bool? Inverted + { + get => _internal.Inverted; + set => _internal.Inverted = value; + } + + public string? LastModifiedTime + { + get => _internal.LastModifiedTime; + set => _internal.LastModifiedTime = value; + } + + /// /> + public override ItemType ItemType => ItemType.Rom; + + public string? Length + { + get => _internal.Length; + set => _internal.Length = value; + } + + public LoadFlag? LoadFlag + { + get => _internal.LoadFlag; + set => _internal.LoadFlag = value; + } + + public string? MatrixNumber + { + get => _internal.MatrixNumber; + set => _internal.MatrixNumber = value; + } + + public string? MD2 + { + get => _internal.MD2; + set => _internal.MD2 = value; + } + + public string? MD4 + { + get => _internal.MD4; + set => _internal.MD4 = value; + } + + public string? MD5 + { + get => _internal.MD5; + set => _internal.MD5 = value; + } + + public string? Merge + { + get => _internal.Merge; + set => _internal.Merge = value; + } + + public bool? MIA + { + get => _internal.MIA; + set => _internal.MIA = value; + } + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public string? Offset + { + get => _internal.Offset; + set => _internal.Offset = value; + } + + public string? OpenMSXType + { + get => _internal.OpenMSXType; + set => _internal.OpenMSXType = value; + } + + public OpenMSXSubType? OpenMSXMediaType + { + get => _internal.OpenMSXMediaType; + set => _internal.OpenMSXMediaType = value; + } + + public Original? Original { get; set; } + + public string? OriginalProperty + { + get => _internal.Original; + set => _internal.Original = value; + } + + [JsonIgnore] + public bool OriginalSpecified => Original is not null; + + public bool? Optional + { + get => _internal.Optional; + set => _internal.Optional = value; + } + + public Part? Part { get; set; } + [JsonIgnore] public bool PartSpecified { get { - var part = Read(PartKey); - return part is not null - && (!string.IsNullOrEmpty(part.GetName()) - || !string.IsNullOrEmpty(part.ReadString(Data.Models.Metadata.Part.InterfaceKey))); + return Part is not null + && (!string.IsNullOrEmpty(Part.Name) + || !string.IsNullOrEmpty(Part.Interface)); } } + public string? PDFModuleVersion + { + get => _internal.PDFModuleVersion; + set => _internal.PDFModuleVersion = value; + } + + public string? PreviewImage + { + get => _internal.PreviewImage; + set => _internal.PreviewImage = value; + } + + public string? Publisher + { + get => _internal.Publisher; + set => _internal.Publisher = value; + } + + public string? Region + { + get => _internal.Region; + set => _internal.Region = value; + } + + public string? Remark + { + get => _internal.Remark; + set => _internal.Remark = value; + } + + public string? RIPEMD128 + { + get => _internal.RIPEMD128; + set => _internal.RIPEMD128 = value; + } + + public string? RIPEMD160 + { + get => _internal.RIPEMD160; + set => _internal.RIPEMD160 = value; + } + + public string? Rotation + { + get => _internal.Rotation; + set => _internal.Rotation = value; + } + + public string? Serial + { + get => _internal.Serial; + set => _internal.Serial = value; + } + + public string? SHA1 + { + get => _internal.SHA1; + set => _internal.SHA1 = value; + } + + public string? SHA256 + { + get => _internal.SHA256; + set => _internal.SHA256 = value; + } + + public string? SHA384 + { + get => _internal.SHA384; + set => _internal.SHA384 = value; + } + + public string? SHA512 + { + get => _internal.SHA512; + set => _internal.SHA512 = value; + } + + public long? Size + { + get => _internal.Size; + set => _internal.Size = value; + } + + public bool? SoundOnly + { + get => _internal.SoundOnly; + set => _internal.SoundOnly = value; + } + + public string? SourceProperty + { + get => _internal.Source; + set => _internal.Source = value; + } + + public string? SpamSum + { + get => _internal.SpamSum; + set => _internal.SpamSum = value; + } + + public string? Start + { + get => _internal.Start; + set => _internal.Start = value; + } + + public ItemStatus? Status + { + get => _internal.Status; + set => _internal.Status = value; + } + + public string? Summation + { + get => _internal.Summation; + set => _internal.Summation = value; + } + + public string? TesseractOCR + { + get => _internal.TesseractOCR; + set => _internal.TesseractOCR = value; + } + + public string? TesseractOCRConverted + { + get => _internal.TesseractOCRConverted; + set => _internal.TesseractOCRConverted = value; + } + + public string? TesseractOCRDetectedLang + { + get => _internal.TesseractOCRDetectedLang; + set => _internal.TesseractOCRDetectedLang = value; + } + + public string? TesseractOCRDetectedLangConf + { + get => _internal.TesseractOCRDetectedLangConf; + set => _internal.TesseractOCRDetectedLangConf = value; + } + + public string? TesseractOCRDetectedScript + { + get => _internal.TesseractOCRDetectedScript; + set => _internal.TesseractOCRDetectedScript = value; + } + + public string? TesseractOCRDetectedScriptConf + { + get => _internal.TesseractOCRDetectedScriptConf; + set => _internal.TesseractOCRDetectedScriptConf = value; + } + + public string? TesseractOCRModuleVersion + { + get => _internal.TesseractOCRModuleVersion; + set => _internal.TesseractOCRModuleVersion = value; + } + + public string? TesseractOCRParameters + { + get => _internal.TesseractOCRParameters; + set => _internal.TesseractOCRParameters = value; + } + + public string? Title + { + get => _internal.Title; + set => _internal.Title = value; + } + + public string? Track + { + get => _internal.Track; + set => _internal.Track = value; + } + + public string? Value + { + get => _internal.Value; + set => _internal.Value = value; + } + + public string? WhisperASRModuleVersion + { + get => _internal.WhisperASRModuleVersion; + set => _internal.WhisperASRModuleVersion = value; + } + + public string? WhisperModelHash + { + get => _internal.WhisperModelHash; + set => _internal.WhisperModelHash = value; + } + + public string? WhisperModelName + { + get => _internal.WhisperModelName; + set => _internal.WhisperModelName = value; + } + + public string? WhisperVersion + { + get => _internal.WhisperVersion; + set => _internal.WhisperVersion = value; + } + + public string? Width + { + get => _internal.Width; + set => _internal.Width = value; + } + + public string? WordConfidenceInterval0To10 + { + get => _internal.WordConfidenceInterval0To10; + set => _internal.WordConfidenceInterval0To10 = value; + } + + public string? WordConfidenceInterval11To20 + { + get => _internal.WordConfidenceInterval11To20; + set => _internal.WordConfidenceInterval11To20 = value; + } + + public string? WordConfidenceInterval21To30 + { + get => _internal.WordConfidenceInterval21To30; + set => _internal.WordConfidenceInterval21To30 = value; + } + + public string? WordConfidenceInterval31To40 + { + get => _internal.WordConfidenceInterval31To40; + set => _internal.WordConfidenceInterval31To40 = value; + } + + public string? WordConfidenceInterval41To50 + { + get => _internal.WordConfidenceInterval41To50; + set => _internal.WordConfidenceInterval41To50 = value; + } + + public string? WordConfidenceInterval51To60 + { + get => _internal.WordConfidenceInterval51To60; + set => _internal.WordConfidenceInterval51To60 = value; + } + + public string? WordConfidenceInterval61To70 + { + get => _internal.WordConfidenceInterval61To70; + set => _internal.WordConfidenceInterval61To70 = value; + } + + public string? WordConfidenceInterval71To80 + { + get => _internal.WordConfidenceInterval71To80; + set => _internal.WordConfidenceInterval71To80 = value; + } + + public string? WordConfidenceInterval81To90 + { + get => _internal.WordConfidenceInterval81To90; + set => _internal.WordConfidenceInterval81To90 = value; + } + + public string? WordConfidenceInterval91To100 + { + get => _internal.WordConfidenceInterval91To100; + set => _internal.WordConfidenceInterval91To100 = value; + } + + public string? xxHash364 + { + get => _internal.xxHash364; + set => _internal.xxHash364 = value; + } + + public string? xxHash3128 + { + get => _internal.xxHash3128; + set => _internal.xxHash3128 = value; + } + #endregion #region Constructors public Rom() : base() { - Write(DupeTypeKey, 0x00); - Write(Data.Models.Metadata.Rom.StatusKey, ItemStatus.None.AsStringValue()); + DupeType = 0x00; + Status = ItemStatus.None; } public Rom(Dump item, Machine machine, Source source, int index) @@ -93,19 +642,19 @@ namespace SabreTools.Metadata.DatItems.Formats Data.Models.Metadata.Rom? rom = null; OpenMSXSubType? subType = null; - if (item.Read(Dump.RomKey) is not null) + if (item.Rom is not null) { - rom = item.Read(Dump.RomKey); + rom = item.Rom; subType = OpenMSXSubType.Rom; } - else if (item.Read(Dump.MegaRomKey) is not null) + else if (item.MegaRom is not null) { - rom = item.Read(Dump.MegaRomKey); + rom = item.MegaRom; subType = OpenMSXSubType.MegaRom; } - else if (item.Read(Dump.SCCPlusCartKey) is not null) + else if (item.SCCPlusCart is not null) { - rom = item.Read(Dump.SCCPlusCartKey); + rom = item.SCCPlusCart; subType = OpenMSXSubType.SCCPlusCart; } @@ -113,181 +662,140 @@ namespace SabreTools.Metadata.DatItems.Formats if (rom is null) return; - string name = $"{machine.GetName()}_{index++}{(!string.IsNullOrEmpty(rom!.ReadString(Data.Models.Metadata.Rom.RemarkKey)) ? $" {rom.ReadString(Data.Models.Metadata.Rom.RemarkKey)}" : string.Empty)}"; + string name = $"{machine.Name}_{index++}{(!string.IsNullOrEmpty(rom!.Remark) ? $" {rom.Remark}" : string.Empty)}"; - SetName(name); - Write(Data.Models.Metadata.Rom.OffsetKey, rom.ReadString(Data.Models.Metadata.Rom.StartKey)); - Write(Data.Models.Metadata.Rom.OpenMSXMediaType, subType?.AsStringValue()); - Write(Data.Models.Metadata.Rom.OpenMSXType, rom.ReadString(Data.Models.Metadata.Rom.OpenMSXType) ?? rom.ReadString(Data.Models.Metadata.DatItem.TypeKey)); - Write(Data.Models.Metadata.Rom.RemarkKey, rom.ReadString(Data.Models.Metadata.Rom.RemarkKey)); - Write(Data.Models.Metadata.Rom.SHA1Key, rom.ReadString(Data.Models.Metadata.Rom.SHA1Key)); - Write(Data.Models.Metadata.Rom.StartKey, rom.ReadString(Data.Models.Metadata.Rom.StartKey)); - Write(SourceKey, source); + Name = name; + Offset = rom.Start; + OpenMSXMediaType = subType; + OpenMSXType = rom.ItemType.ToString(); + Remark = rom.Remark; + SHA1 = rom.SHA1; + Start = rom.Start; + Source = source; - var original = item.Read(Dump.OriginalKey); + var original = item.Original; if (original is not null) { - Write("ORIGINAL", new Original + Original = new Original { - Value = original.ReadBool(Data.Models.Metadata.Original.ValueKey), - Content = original.ReadString(Data.Models.Metadata.Original.ContentKey), - }); + Value = original.Value, + Content = original.Content, + }; } CopyMachineInformation(machine); // Process hash values - long? size = ReadLong(Data.Models.Metadata.Rom.SizeKey); - if (size is not null) - Write(Data.Models.Metadata.Rom.SizeKey, size.ToString()); - // TODO: This should be normalized to CRC-16 - string? crc16 = ReadString(Data.Models.Metadata.Rom.CRC16Key); + string? crc16 = CRC16; if (crc16 is not null) - Write(Data.Models.Metadata.Rom.CRC16Key, NormalizeHashData(crc16, 4)); + CRC16 = NormalizeHashData(crc16, 4); - string? crc = ReadString(Data.Models.Metadata.Rom.CRCKey); - if (crc is not null) - Write(Data.Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(crc)); + string? crc32 = CRC32; + if (crc32 is not null) + CRC32 = TextHelper.NormalizeCRC32(crc32); // TODO: This should be normalized to CRC-64 - string? crc64 = ReadString(Data.Models.Metadata.Rom.CRC64Key); + string? crc64 = CRC64; if (crc64 is not null) - Write(Data.Models.Metadata.Rom.CRC64Key, NormalizeHashData(crc64, 16)); + CRC64 = NormalizeHashData(crc64, 16); - string? md2 = ReadString(Data.Models.Metadata.Rom.MD2Key); + string? md2 = MD2; if (md2 is not null) - Write(Data.Models.Metadata.Rom.MD2Key, TextHelper.NormalizeMD2(md2)); + MD2 = TextHelper.NormalizeMD2(md2); - string? md4 = ReadString(Data.Models.Metadata.Rom.MD4Key); + string? md4 = MD4; if (md4 is not null) - Write(Data.Models.Metadata.Rom.MD4Key, TextHelper.NormalizeMD5(md4)); + MD4 = TextHelper.NormalizeMD5(md4); - string? md5 = ReadString(Data.Models.Metadata.Rom.MD5Key); + string? md5 = MD5; if (md5 is not null) - Write(Data.Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(md5)); + MD5 = TextHelper.NormalizeMD5(md5); - string? ripemd128 = ReadString(Data.Models.Metadata.Rom.RIPEMD128Key); + string? ripemd128 = RIPEMD128; if (ripemd128 is not null) - Write(Data.Models.Metadata.Rom.RIPEMD128Key, TextHelper.NormalizeRIPEMD128(ripemd128)); + RIPEMD128 = TextHelper.NormalizeRIPEMD128(ripemd128); - string? ripemd160 = ReadString(Data.Models.Metadata.Rom.RIPEMD160Key); + string? ripemd160 = RIPEMD160; if (ripemd160 is not null) - Write(Data.Models.Metadata.Rom.RIPEMD160Key, TextHelper.NormalizeRIPEMD160(ripemd160)); + RIPEMD160 = TextHelper.NormalizeRIPEMD160(ripemd160); - string? sha1 = ReadString(Data.Models.Metadata.Rom.SHA1Key); + string? sha1 = SHA1; if (sha1 is not null) - Write(Data.Models.Metadata.Rom.SHA1Key, TextHelper.NormalizeSHA1(sha1)); + SHA1 = TextHelper.NormalizeSHA1(sha1); - string? sha256 = ReadString(Data.Models.Metadata.Rom.SHA256Key); + string? sha256 = SHA256; if (sha256 is not null) - Write(Data.Models.Metadata.Rom.SHA256Key, TextHelper.NormalizeSHA256(sha256)); + SHA256 = TextHelper.NormalizeSHA256(sha256); - string? sha384 = ReadString(Data.Models.Metadata.Rom.SHA384Key); + string? sha384 = SHA384; if (sha384 is not null) - Write(Data.Models.Metadata.Rom.SHA384Key, TextHelper.NormalizeSHA384(sha384)); + SHA384 = TextHelper.NormalizeSHA384(sha384); - string? sha512 = ReadString(Data.Models.Metadata.Rom.SHA512Key); + string? sha512 = SHA512; if (sha512 is not null) - Write(Data.Models.Metadata.Rom.SHA512Key, TextHelper.NormalizeSHA512(sha512)); + SHA512 = TextHelper.NormalizeSHA512(sha512); } public Rom(Data.Models.Metadata.Rom item) : base(item) { - Write(DupeTypeKey, 0x00); - - // Process flag values - bool? dispose = ReadBool(Data.Models.Metadata.Rom.DisposeKey); - if (dispose is not null) - Write(Data.Models.Metadata.Rom.DisposeKey, dispose.FromYesNo()); - - bool? inverted = ReadBool(Data.Models.Metadata.Rom.InvertedKey); - if (inverted is not null) - Write(Data.Models.Metadata.Rom.InvertedKey, inverted.FromYesNo()); - - string? loadFlag = ReadString(Data.Models.Metadata.Rom.LoadFlagKey); - if (loadFlag is not null) - Write(Data.Models.Metadata.Rom.LoadFlagKey, loadFlag.AsLoadFlag()?.AsStringValue()); - - string? openMSXMediaType = ReadString(Data.Models.Metadata.Rom.OpenMSXMediaType); - if (openMSXMediaType is not null) - Write(Data.Models.Metadata.Rom.OpenMSXMediaType, openMSXMediaType.AsOpenMSXSubType()?.AsStringValue()); - - bool? mia = ReadBool(Data.Models.Metadata.Rom.MIAKey); - if (mia is not null) - Write(Data.Models.Metadata.Rom.MIAKey, mia.FromYesNo()); - - bool? optional = ReadBool(Data.Models.Metadata.Rom.OptionalKey); - if (optional is not null) - Write(Data.Models.Metadata.Rom.OptionalKey, optional.FromYesNo()); - - bool? soundOnly = ReadBool(Data.Models.Metadata.Rom.SoundOnlyKey); - if (soundOnly is not null) - Write(Data.Models.Metadata.Rom.SoundOnlyKey, soundOnly.FromYesNo()); - - string? status = ReadString(Data.Models.Metadata.Rom.StatusKey); - if (status is not null) - Write(Data.Models.Metadata.Rom.StatusKey, status.AsItemStatus()?.AsStringValue()); + DupeType = 0x00; // Process hash values - long? size = ReadLong(Data.Models.Metadata.Rom.SizeKey); - if (size is not null) - Write(Data.Models.Metadata.Rom.SizeKey, size.ToString()); - // TODO: This should be normalized to CRC-16 - string? crc16 = ReadString(Data.Models.Metadata.Rom.CRC16Key); + string? crc16 = CRC16; if (crc16 is not null) - Write(Data.Models.Metadata.Rom.CRC16Key, NormalizeHashData(crc16, 4)); + CRC16 = NormalizeHashData(crc16, 4); - string? crc = ReadString(Data.Models.Metadata.Rom.CRCKey); - if (crc is not null) - Write(Data.Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(crc)); + string? crc32 = CRC32; + if (crc32 is not null) + CRC32 = TextHelper.NormalizeCRC32(crc32); // TODO: This should be normalized to CRC-64 - string? crc64 = ReadString(Data.Models.Metadata.Rom.CRC64Key); + string? crc64 = CRC64; if (crc64 is not null) - Write(Data.Models.Metadata.Rom.CRC64Key, NormalizeHashData(crc64, 16)); + CRC64 = NormalizeHashData(crc64, 16); - string? md2 = ReadString(Data.Models.Metadata.Rom.MD2Key); + string? md2 = MD2; if (md2 is not null) - Write(Data.Models.Metadata.Rom.MD2Key, TextHelper.NormalizeMD2(md2)); + MD2 = TextHelper.NormalizeMD2(md2); - string? md4 = ReadString(Data.Models.Metadata.Rom.MD4Key); + string? md4 = MD4; if (md4 is not null) - Write(Data.Models.Metadata.Rom.MD4Key, TextHelper.NormalizeMD5(md4)); + MD4 = TextHelper.NormalizeMD5(md4); - string? md5 = ReadString(Data.Models.Metadata.Rom.MD5Key); + string? md5 = MD5; if (md5 is not null) - Write(Data.Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(md5)); + MD5 = TextHelper.NormalizeMD5(md5); - string? ripemd128 = ReadString(Data.Models.Metadata.Rom.RIPEMD128Key); + string? ripemd128 = RIPEMD128; if (ripemd128 is not null) - Write(Data.Models.Metadata.Rom.RIPEMD128Key, TextHelper.NormalizeRIPEMD128(ripemd128)); + RIPEMD128 = TextHelper.NormalizeRIPEMD128(ripemd128); - string? ripemd160 = ReadString(Data.Models.Metadata.Rom.RIPEMD160Key); + string? ripemd160 = RIPEMD160; if (ripemd160 is not null) - Write(Data.Models.Metadata.Rom.RIPEMD160Key, TextHelper.NormalizeRIPEMD160(ripemd160)); + RIPEMD160 = TextHelper.NormalizeRIPEMD160(ripemd160); - string? sha1 = ReadString(Data.Models.Metadata.Rom.SHA1Key); + string? sha1 = SHA1; if (sha1 is not null) - Write(Data.Models.Metadata.Rom.SHA1Key, TextHelper.NormalizeSHA1(sha1)); + SHA1 = TextHelper.NormalizeSHA1(sha1); - string? sha256 = ReadString(Data.Models.Metadata.Rom.SHA256Key); + string? sha256 = SHA256; if (sha256 is not null) - Write(Data.Models.Metadata.Rom.SHA256Key, TextHelper.NormalizeSHA256(sha256)); + SHA256 = TextHelper.NormalizeSHA256(sha256); - string? sha384 = ReadString(Data.Models.Metadata.Rom.SHA384Key); + string? sha384 = SHA384; if (sha384 is not null) - Write(Data.Models.Metadata.Rom.SHA384Key, TextHelper.NormalizeSHA384(sha384)); + SHA384 = TextHelper.NormalizeSHA384(sha384); - string? sha512 = ReadString(Data.Models.Metadata.Rom.SHA512Key); + string? sha512 = SHA512; if (sha512 is not null) - Write(Data.Models.Metadata.Rom.SHA512Key, TextHelper.NormalizeSHA512(sha512)); + SHA512 = TextHelper.NormalizeSHA512(sha512); } public Rom(Data.Models.Metadata.Rom item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } @@ -374,15 +882,44 @@ namespace SabreTools.Metadata.DatItems.Formats #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new Rom(_internal.Clone() as Data.Models.Metadata.Rom ?? []); + public override object Clone() => new Rom(GetInternalClone()); + + /// + public override Data.Models.Metadata.Rom GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Rom ?? new(); #endregion #region Comparision Methods + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Rom otherRom) + return _internal.PartialEquals(otherRom._internal); + + // Everything else fails + return false; + } + /// /// Fill any missing size and hash information from another Rom /// @@ -417,55 +954,55 @@ namespace SabreTools.Metadata.DatItems.Formats switch (bucketedBy) { case ItemKey.CRC16: - key = ReadString(Data.Models.Metadata.Rom.CRC16Key); + key = CRC16; break; - case ItemKey.CRC: - key = ReadString(Data.Models.Metadata.Rom.CRCKey); + case ItemKey.CRC32: + key = CRC32; break; case ItemKey.CRC64: - key = ReadString(Data.Models.Metadata.Rom.CRC64Key); + key = CRC64; break; case ItemKey.MD2: - key = ReadString(Data.Models.Metadata.Rom.MD2Key); + key = MD2; break; case ItemKey.MD4: - key = ReadString(Data.Models.Metadata.Rom.MD4Key); + key = MD4; break; case ItemKey.MD5: - key = ReadString(Data.Models.Metadata.Rom.MD5Key); + key = MD5; break; case ItemKey.RIPEMD128: - key = ReadString(Data.Models.Metadata.Rom.RIPEMD128Key); + key = RIPEMD128; break; case ItemKey.RIPEMD160: - key = ReadString(Data.Models.Metadata.Rom.RIPEMD160Key); + key = RIPEMD160; break; case ItemKey.SHA1: - key = ReadString(Data.Models.Metadata.Rom.SHA1Key); + key = SHA1; break; case ItemKey.SHA256: - key = ReadString(Data.Models.Metadata.Rom.SHA256Key); + key = SHA256; break; case ItemKey.SHA384: - key = ReadString(Data.Models.Metadata.Rom.SHA384Key); + key = SHA384; break; case ItemKey.SHA512: - key = ReadString(Data.Models.Metadata.Rom.SHA512Key); + key = SHA512; break; case ItemKey.SpamSum: - key = ReadString(Data.Models.Metadata.Rom.SpamSumKey); + key = SpamSum; break; // Let the base handle generic stuff diff --git a/SabreTools.Metadata.DatItems/Formats/Sample.cs b/SabreTools.Metadata.DatItems/Formats/Sample.cs index c1c50baa..6df58395 100644 --- a/SabreTools.Metadata.DatItems/Formats/Sample.cs +++ b/SabreTools.Metadata.DatItems/Formats/Sample.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,17 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("sample"), XmlRoot("sample")] public class Sample : DatItem { - #region Fields + #region Properties /// /> - protected override ItemType ItemType => ItemType.Sample; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Sample; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } #endregion @@ -25,16 +31,49 @@ namespace SabreTools.Metadata.DatItems.Formats public Sample(Data.Models.Metadata.Sample item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new Sample(_internal.Clone() as Data.Models.Metadata.Sample ?? []); + public override object Clone() => new Sample(GetInternalClone()); + + /// + public override Data.Models.Metadata.Sample GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Sample ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Sample otherSample) + return _internal.Equals(otherSample._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Serials.cs b/SabreTools.Metadata.DatItems/Formats/Serials.cs index 344ced23..8fb25cca 100644 --- a/SabreTools.Metadata.DatItems/Formats/Serials.cs +++ b/SabreTools.Metadata.DatItems/Formats/Serials.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,95 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("serials"), XmlRoot("serials")] public sealed class Serials : DatItem { - #region Fields + #region Properties + + public string? BoxBarcode + { + get => _internal.BoxBarcode; + set => _internal.BoxBarcode = value; + } + + public string? BoxSerial + { + get => _internal.BoxSerial; + set => _internal.BoxSerial = value; + } + + public string? ChipSerial + { + get => _internal.ChipSerial; + set => _internal.ChipSerial = value; + } + + public string? DigitalSerial1 + { + get => _internal.DigitalSerial1; + set => _internal.DigitalSerial1 = value; + } + + public string? DigitalSerial2 + { + get => _internal.DigitalSerial2; + set => _internal.DigitalSerial2 = value; + } /// /> - protected override ItemType ItemType => ItemType.Serials; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Serials; + + public string? LockoutSerial + { + get => _internal.LockoutSerial; + set => _internal.LockoutSerial = value; + } + + public string? MediaSerial1 + { + get => _internal.MediaSerial1; + set => _internal.MediaSerial1 = value; + } + + public string? MediaSerial2 + { + get => _internal.MediaSerial2; + set => _internal.MediaSerial2 = value; + } + + public string? MediaSerial3 + { + get => _internal.MediaSerial3; + set => _internal.MediaSerial3 = value; + } + + public string? MediaStamp + { + get => _internal.MediaStamp; + set => _internal.MediaStamp = value; + } + + public string? PCBSerial + { + get => _internal.PCBSerial; + set => _internal.PCBSerial = value; + } + + public string? RomChipSerial1 + { + get => _internal.RomChipSerial1; + set => _internal.RomChipSerial1 = value; + } + + public string? RomChipSerial2 + { + get => _internal.RomChipSerial2; + set => _internal.RomChipSerial2 = value; + } + + public string? SaveChipSerial + { + get => _internal.SaveChipSerial; + set => _internal.SaveChipSerial = value; + } #endregion @@ -25,16 +109,49 @@ namespace SabreTools.Metadata.DatItems.Formats public Serials(Data.Models.Metadata.Serials item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => null; + + /// + public override void SetName(string? name) { } + + #endregion + #region Cloning Methods /// - public override object Clone() => new Serials(_internal.Clone() as Data.Models.Metadata.Serials ?? []); + public override object Clone() => new Serials(GetInternalClone()); + + /// + public override Data.Models.Metadata.Serials GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Serials ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Serials otherSerials) + return _internal.Equals(otherSerials._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/SharedFeat.cs b/SabreTools.Metadata.DatItems/Formats/SharedFeat.cs index 274cb9f7..ee74243c 100644 --- a/SabreTools.Metadata.DatItems/Formats/SharedFeat.cs +++ b/SabreTools.Metadata.DatItems/Formats/SharedFeat.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,23 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("sharedfeat"), XmlRoot("sharedfeat")] public sealed class SharedFeat : DatItem { - #region Fields + #region Properties /// /> - protected override ItemType ItemType => ItemType.SharedFeat; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.SharedFeat; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public string? Value + { + get => _internal.Value; + set => _internal.Value = value; + } #endregion @@ -25,16 +37,49 @@ namespace SabreTools.Metadata.DatItems.Formats public SharedFeat(Data.Models.Metadata.SharedFeat item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new SharedFeat(_internal.Clone() as Data.Models.Metadata.SharedFeat ?? []); + public override object Clone() => new SharedFeat(GetInternalClone()); + + /// + public override Data.Models.Metadata.SharedFeat GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.SharedFeat ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is SharedFeat otherSharedFeat) + return _internal.Equals(otherSharedFeat._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Slot.cs b/SabreTools.Metadata.DatItems/Formats/Slot.cs index 8e8efced..cfab5278 100644 --- a/SabreTools.Metadata.DatItems/Formats/Slot.cs +++ b/SabreTools.Metadata.DatItems/Formats/Slot.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -11,20 +10,22 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("slot"), XmlRoot("slot")] public sealed class Slot : DatItem { - #region Fields + #region Properties /// /> - protected override ItemType ItemType => ItemType.Slot; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Slot; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public SlotOption[]? SlotOption { get; set; } [JsonIgnore] - public bool SlotOptionsSpecified - { - get - { - var slotOptions = Read(Data.Models.Metadata.Slot.SlotOptionKey); - return slotOptions is not null && slotOptions.Length > 0; - } - } + public bool SlotOptionSpecified => SlotOption is not null && SlotOption.Length > 0; #endregion @@ -35,42 +36,63 @@ namespace SabreTools.Metadata.DatItems.Formats public Slot(Data.Models.Metadata.Slot item) : base(item) { // Handle subitems - var slotOptions = item.ReadArray(Data.Models.Metadata.Slot.SlotOptionKey); - if (slotOptions is not null) - { - SlotOption[] slotOptionItems = Array.ConvertAll(slotOptions, slotOption => new SlotOption(slotOption)); - Write(Data.Models.Metadata.Slot.SlotOptionKey, slotOptionItems); - } + if (item.SlotOption is not null) + SlotOption = Array.ConvertAll(item.SlotOption, slotOption => new SlotOption(slotOption)); ; } public Slot(Data.Models.Metadata.Slot item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new Slot(_internal.Clone() as Data.Models.Metadata.Slot ?? []); + public override object Clone() => new Slot(GetInternalClone()); /// public override Data.Models.Metadata.Slot GetInternalClone() { - var slotItem = base.GetInternalClone(); + var slotItem = _internal.Clone() as Data.Models.Metadata.Slot ?? new(); - var slotOptions = Read(Data.Models.Metadata.Slot.SlotOptionKey); - if (slotOptions is not null) - { - Data.Models.Metadata.SlotOption[] slotOptionItems = Array.ConvertAll(slotOptions, slotOption => slotOption.GetInternalClone()); - slotItem[Data.Models.Metadata.Slot.SlotOptionKey] = slotOptionItems; - } + if (SlotOption is not null) + slotItem.SlotOption = Array.ConvertAll(SlotOption, slotOption => slotOption.GetInternalClone()); return slotItem; } #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Slot otherSlot) + return _internal.Equals(otherSlot._internal); + + // Everything else fails + return false; + } + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/SlotOption.cs b/SabreTools.Metadata.DatItems/Formats/SlotOption.cs index 2fa4718c..8bde982e 100644 --- a/SabreTools.Metadata.DatItems/Formats/SlotOption.cs +++ b/SabreTools.Metadata.DatItems/Formats/SlotOption.cs @@ -1,6 +1,5 @@ -using System.Xml.Serialization; +using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,29 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("slotoption"), XmlRoot("slotoption")] public sealed class SlotOption : DatItem { - #region Fields + #region Properties + + public bool? Default + { + get => _internal.Default; + set => _internal.Default = value; + } + + public string? DevName + { + get => _internal.DevName; + set => _internal.DevName = value; + } /// /> - protected override ItemType ItemType => ItemType.SlotOption; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.SlotOption; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } #endregion @@ -21,26 +39,53 @@ namespace SabreTools.Metadata.DatItems.Formats public SlotOption() : base() { } - public SlotOption(Data.Models.Metadata.SlotOption item) : base(item) - { - // Process flag values - bool? defaultValue = ReadBool(Data.Models.Metadata.SlotOption.DefaultKey); - if (defaultValue is not null) - Write(Data.Models.Metadata.SlotOption.DefaultKey, defaultValue.FromYesNo()); - } + public SlotOption(Data.Models.Metadata.SlotOption item) : base(item) { } public SlotOption(Data.Models.Metadata.SlotOption item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new SlotOption(_internal.Clone() as Data.Models.Metadata.SlotOption ?? []); + public override object Clone() => new SlotOption(GetInternalClone()); + + /// + public override Data.Models.Metadata.SlotOption GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.SlotOption ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is SlotOption otherSlotOption) + return _internal.Equals(otherSlotOption._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/SoftwareList.cs b/SabreTools.Metadata.DatItems/Formats/SoftwareList.cs index ddf1ab95..c0823e2f 100644 --- a/SabreTools.Metadata.DatItems/Formats/SoftwareList.cs +++ b/SabreTools.Metadata.DatItems/Formats/SoftwareList.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,35 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("softwarelist"), XmlRoot("softwarelist")] public sealed class SoftwareList : DatItem { - #region Fields + #region Properties + + public string? Filter + { + get => _internal.Filter; + set => _internal.Filter = value; + } /// /> - protected override ItemType ItemType => ItemType.SoftwareList; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.SoftwareList; + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public Data.Models.Metadata.SoftwareListStatus? Status + { + get => _internal.Status; + set => _internal.Status = value; + } + + public string? Tag + { + get => _internal.Tag; + set => _internal.Tag = value; + } #endregion @@ -21,29 +45,53 @@ namespace SabreTools.Metadata.DatItems.Formats public SoftwareList() : base() { } - public SoftwareList(Data.Models.Metadata.SoftwareList item) : base(item) - { - // Process flag values - string? status = ReadString(Data.Models.Metadata.SoftwareList.StatusKey); - if (status is not null) - Write(Data.Models.Metadata.SoftwareList.StatusKey, status.AsSoftwareListStatus()?.AsStringValue()); - - // Handle subitems - // TODO: Handle the Software subitem - } + public SoftwareList(Data.Models.Metadata.SoftwareList item) : base(item) { } public SoftwareList(Data.Models.Metadata.SoftwareList item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => Name; + + /// + public override void SetName(string? name) => Name = name; + + #endregion + #region Cloning Methods /// - public override object Clone() => new SoftwareList(_internal.Clone() as Data.Models.Metadata.SoftwareList ?? []); + public override object Clone() => new SoftwareList(GetInternalClone()); + + /// + public override Data.Models.Metadata.SoftwareList GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.SoftwareList ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is SoftwareList otherSoftwareList) + return _internal.Equals(otherSoftwareList._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/Sound.cs b/SabreTools.Metadata.DatItems/Formats/Sound.cs index 27fbde3a..fb96abf8 100644 --- a/SabreTools.Metadata.DatItems/Formats/Sound.cs +++ b/SabreTools.Metadata.DatItems/Formats/Sound.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,17 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("sound"), XmlRoot("sound")] public sealed class Sound : DatItem { - #region Fields + #region Properties + + public long? Channels + { + get => _internal.Channels; + set => _internal.Channels = value; + } /// /> - protected override ItemType ItemType => ItemType.Sound; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.Sound; #endregion @@ -21,26 +27,53 @@ namespace SabreTools.Metadata.DatItems.Formats public Sound() : base() { } - public Sound(Data.Models.Metadata.Sound item) : base(item) - { - // Process flag values - long? channels = ReadLong(Data.Models.Metadata.Sound.ChannelsKey); - if (channels is not null) - Write(Data.Models.Metadata.Sound.ChannelsKey, channels.ToString()); - } + public Sound(Data.Models.Metadata.Sound item) : base(item) { } public Sound(Data.Models.Metadata.Sound item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => null; + + /// + public override void SetName(string? name) { } + + #endregion + #region Cloning Methods /// - public override object Clone() => new Sound(_internal.Clone() as Data.Models.Metadata.Sound ?? []); + public override object Clone() => new Sound(GetInternalClone()); + + /// + public override Data.Models.Metadata.Sound GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.Sound ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is Sound otherSound) + return _internal.Equals(otherSound._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Formats/SourceDetails.cs b/SabreTools.Metadata.DatItems/Formats/SourceDetails.cs index dcf47068..685ebcce 100644 --- a/SabreTools.Metadata.DatItems/Formats/SourceDetails.cs +++ b/SabreTools.Metadata.DatItems/Formats/SourceDetails.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { @@ -10,10 +9,155 @@ namespace SabreTools.Metadata.DatItems.Formats [JsonObject("source_details"), XmlRoot("source_details")] public sealed class SourceDetails : DatItem { - #region Fields + #region Properties + + public string? AppendToNumber + { + get => _internal.AppendToNumber; + set => _internal.AppendToNumber = value; + } + + public string? Comment1 + { + get => _internal.Comment1; + set => _internal.Comment1 = value; + } + + public string? Comment2 + { + get => _internal.Comment2; + set => _internal.Comment2 = value; + } + + public string? DumpDate + { + get => _internal.DumpDate; + set => _internal.DumpDate = value; + } + + public bool? DumpDateInfo + { + get => _internal.DumpDateInfo; + set => _internal.DumpDateInfo = value; + } + + public string? Dumper + { + get => _internal.Dumper; + set => _internal.Dumper = value; + } + + public string? Id + { + get => _internal.Id; + set => _internal.Id = value; + } /// /> - protected override ItemType ItemType => ItemType.SourceDetails; + public override Data.Models.Metadata.ItemType ItemType + => Data.Models.Metadata.ItemType.SourceDetails; + + public string? Link1 + { + get => _internal.Link1; + set => _internal.Link1 = value; + } + + public bool? Link1Public + { + get => _internal.Link1Public; + set => _internal.Link1Public = value; + } + + public string? Link2 + { + get => _internal.Link2; + set => _internal.Link2 = value; + } + + public bool? Link2Public + { + get => _internal.Link2Public; + set => _internal.Link2Public = value; + } + + public string? Link3 + { + get => _internal.Link3; + set => _internal.Link3 = value; + } + + public bool? Link3Public + { + get => _internal.Link3Public; + set => _internal.Link3Public = value; + } + + public string? MediaTitle + { + get => _internal.MediaTitle; + set => _internal.MediaTitle = value; + } + + public bool? Nodump + { + get => _internal.Nodump; + set => _internal.Nodump = value; + } + + public string? Origin + { + get => _internal.Origin; + set => _internal.Origin = value; + } + + public string? OriginalFormat + { + get => _internal.OriginalFormat; + set => _internal.OriginalFormat = value; + } + + public string? Project + { + get => _internal.Project; + set => _internal.Project = value; + } + + public string? Region + { + get => _internal.Region; + set => _internal.Region = value; + } + + public string? ReleaseDate + { + get => _internal.ReleaseDate; + set => _internal.ReleaseDate = value; + } + + public bool? ReleaseDateInfo + { + get => _internal.ReleaseDateInfo; + set => _internal.ReleaseDateInfo = value; + } + + public string? RomInfo + { + get => _internal.RomInfo; + set => _internal.RomInfo = value; + } + + public string? Section + { + get => _internal.Section; + set => _internal.Section = value; + } + + public string? Tool + { + get => _internal.Tool; + set => _internal.Tool = value; + } #endregion @@ -25,16 +169,49 @@ namespace SabreTools.Metadata.DatItems.Formats public SourceDetails(Data.Models.Metadata.SourceDetails item, Machine machine, Source source) : this(item) { - Write(SourceKey, source); + Source = source; CopyMachineInformation(machine); } #endregion + #region Accessors + + /// + public override string? GetName() => null; + + /// + public override void SetName(string? name) { } + + #endregion + #region Cloning Methods /// - public override object Clone() => new SourceDetails(_internal.Clone() as Data.Models.Metadata.SourceDetails ?? []); + public override object Clone() => new SourceDetails(GetInternalClone()); + + /// + public override Data.Models.Metadata.SourceDetails GetInternalClone() + => _internal.Clone() as Data.Models.Metadata.SourceDetails ?? new(); + + #endregion + + #region Comparision Methods + + /// + public override bool Equals(DatItem? other) + { + // If the other item is null + if (other is null) + return false; + + // If the type matches + if (other is SourceDetails otherSourceDetails) + return _internal.Equals(otherSourceDetails._internal); + + // Everything else fails + return false; + } #endregion } diff --git a/SabreTools.Metadata.DatItems/Machine.cs b/SabreTools.Metadata.DatItems/Machine.cs index 23ca5437..ba2b77cb 100644 --- a/SabreTools.Metadata.DatItems/Machine.cs +++ b/SabreTools.Metadata.DatItems/Machine.cs @@ -1,7 +1,6 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Data.Extensions; using SabreTools.Metadata.Filter; using SabreTools.Text.Extensions; @@ -11,95 +10,434 @@ namespace SabreTools.Metadata.DatItems /// Represents the information specific to a set/game/machine /// [JsonObject("machine"), XmlRoot("machine")] - public sealed class Machine : ModelBackedItem, ICloneable, IEquatable + public sealed class Machine : ICloneable, IEquatable { - #region Constructors + #region Properties - public Machine() + public string? Board { - _internal = []; + get => _internal.Board; + set => _internal.Board = value; } - public Machine(Data.Models.Metadata.Machine machine) + public string? Buttons { - _internal = machine.Clone() as Data.Models.Metadata.Machine ?? []; + get => _internal.Buttons; + set => _internal.Buttons = value; + } - // Remove all inverted fields - Remove(Data.Models.Metadata.Machine.AdjusterKey); - Remove(Data.Models.Metadata.Machine.ArchiveKey); - Remove(Data.Models.Metadata.Machine.BiosSetKey); - Remove(Data.Models.Metadata.Machine.ChipKey); - Remove(Data.Models.Metadata.Machine.ConfigurationKey); - Remove(Data.Models.Metadata.Machine.DeviceKey); - Remove(Data.Models.Metadata.Machine.DeviceRefKey); - Remove(Data.Models.Metadata.Machine.DipSwitchKey); - Remove(Data.Models.Metadata.Machine.DiskKey); - Remove(Data.Models.Metadata.Machine.DisplayKey); - Remove(Data.Models.Metadata.Machine.DriverKey); - Remove(Data.Models.Metadata.Machine.DumpKey); - Remove(Data.Models.Metadata.Machine.FeatureKey); - Remove(Data.Models.Metadata.Machine.InfoKey); - Remove(Data.Models.Metadata.Machine.InputKey); - Remove(Data.Models.Metadata.Machine.MediaKey); - Remove(Data.Models.Metadata.Machine.PartKey); - Remove(Data.Models.Metadata.Machine.PortKey); - Remove(Data.Models.Metadata.Machine.RamOptionKey); - Remove(Data.Models.Metadata.Machine.ReleaseKey); - Remove(Data.Models.Metadata.Machine.RomKey); - Remove(Data.Models.Metadata.Machine.SampleKey); - Remove(Data.Models.Metadata.Machine.SharedFeatKey); - Remove(Data.Models.Metadata.Machine.SlotKey); - Remove(Data.Models.Metadata.Machine.SoftwareListKey); - Remove(Data.Models.Metadata.Machine.SoundKey); - Remove(Data.Models.Metadata.Machine.TruripKey); - Remove(Data.Models.Metadata.Machine.VideoKey); + public string[]? Category + { + get => _internal.Category; + set => _internal.Category = value; + } - // Process flag values - string? im1Crc = ReadString(Data.Models.Metadata.Machine.Im1CRCKey); - if (im1Crc is not null) - Write(Data.Models.Metadata.Machine.Im1CRCKey, TextHelper.NormalizeCRC32(im1Crc)); + public string? CloneOf + { + get => _internal.CloneOf; + set => _internal.CloneOf = value; + } - string? im2Crc = ReadString(Data.Models.Metadata.Machine.Im2CRCKey); - if (im2Crc is not null) - Write(Data.Models.Metadata.Machine.Im2CRCKey, TextHelper.NormalizeCRC32(im2Crc)); + public string? CloneOfId + { + get => _internal.CloneOfId; + set => _internal.CloneOfId = value; + } - bool? isBios = ReadBool(Data.Models.Metadata.Machine.IsBiosKey); - if (isBios is not null) - Write(Data.Models.Metadata.Machine.IsBiosKey, isBios.FromYesNo()); + public string[]? Comment + { + get => _internal.Comment; + set => _internal.Comment = value; + } - bool? isDevice = ReadBool(Data.Models.Metadata.Machine.IsDeviceKey); - if (isDevice is not null) - Write(Data.Models.Metadata.Machine.IsDeviceKey, isDevice.FromYesNo()); + public string? Company + { + get => _internal.Company; + set => _internal.Company = value; + } - bool? isMechanical = ReadBool(Data.Models.Metadata.Machine.IsMechanicalKey); - if (isMechanical is not null) - Write(Data.Models.Metadata.Machine.IsMechanicalKey, isMechanical.FromYesNo()); + public string? Control + { + get => _internal.Control; + set => _internal.Control = value; + } - string? supported = ReadString(Data.Models.Metadata.Machine.SupportedKey); - if (supported is not null) - Write(Data.Models.Metadata.Machine.SupportedKey, supported.AsSupported()?.AsStringValue()); + public string? CRC + { + get => _internal.CRC; + set => _internal.CRC = value; + } - // Handle Trurip object, if it exists - var truripItem = machine.Read(Data.Models.Metadata.Machine.TruripKey); - if (truripItem is not null) - Write(Data.Models.Metadata.Machine.TruripKey, new Trurip(truripItem)); + public string? Country + { + get => _internal.Country; + set => _internal.Country = value; + } + + public string? Description + { + get => _internal.Description; + set => _internal.Description = value; + } + + public string? Developer + { + get => _internal.Developer; + set => _internal.Developer = value; + } + + public string? DirName + { + get => _internal.DirName; + set => _internal.DirName = value; + } + + public string? DisplayCount + { + get => _internal.DisplayCount; + set => _internal.DisplayCount = value; + } + + public string? DisplayType + { + get => _internal.DisplayType; + set => _internal.DisplayType = value; + } + + public string? DuplicateID + { + get => _internal.DuplicateID; + set => _internal.DuplicateID = value; + } + + public string? Emulator + { + get => _internal.Emulator; + set => _internal.Emulator = value; + } + + public string? Enabled + { + get => _internal.Enabled; + set => _internal.Enabled = value; + } + + public string? Extra + { + get => _internal.Extra; + set => _internal.Extra = value; + } + + public string? Favorite + { + get => _internal.Favorite; + set => _internal.Favorite = value; + } + + public string? GenMSXID + { + get => _internal.GenMSXID; + set => _internal.GenMSXID = value; + } + + public string? Genre + { + get => _internal.Genre; + set => _internal.Genre = value; + } + + public string? Hash + { + get => _internal.Hash; + set => _internal.Hash = value; + } + + public string? History + { + get => _internal.History; + set => _internal.History = value; + } + + public string? Id + { + get => _internal.Id; + set => _internal.Id = value; + } + + public string? Im1CRC + { + get => _internal.Im1CRC; + set => _internal.Im1CRC = value; + } + + public string? Im2CRC + { + get => _internal.Im2CRC; + set => _internal.Im2CRC = value; + } + + public string? ImageNumber + { + get => _internal.ImageNumber; + set => _internal.ImageNumber = value; + } + + public bool? IsBios + { + get => _internal.IsBios; + set => _internal.IsBios = value; + } + + public bool? IsDevice + { + get => _internal.IsDevice; + set => _internal.IsDevice = value; + } + + public bool? IsMechanical + { + get => _internal.IsMechanical; + set => _internal.IsMechanical = value; + } + + public string? Language + { + get => _internal.Language; + set => _internal.Language = value; + } + + public string? Location + { + get => _internal.Location; + set => _internal.Location = value; + } + + public string? Manufacturer + { + get => _internal.Manufacturer; + set => _internal.Manufacturer = value; + } + + public string? Name + { + get => _internal.Name; + set => _internal.Name = value; + } + + public string? Notes + { + get => _internal.Notes; + set => _internal.Notes = value; + } + + public string? PlayedCount + { + get => _internal.PlayedCount; + set => _internal.PlayedCount = value; + } + + public string? PlayedTime + { + get => _internal.PlayedTime; + set => _internal.PlayedTime = value; + } + + public string? Players + { + get => _internal.Players; + set => _internal.Players = value; + } + + public string? Publisher + { + get => _internal.Publisher; + set => _internal.Publisher = value; + } + + public string? Ratings + { + get => _internal.Ratings; + set => _internal.Ratings = value; + } + + public string? RebuildTo + { + get => _internal.RebuildTo; + set => _internal.RebuildTo = value; + } + + public string? RelatedTo + { + get => _internal.RelatedTo; + set => _internal.RelatedTo = value; + } + + public string? ReleaseNumber + { + get => _internal.ReleaseNumber; + set => _internal.ReleaseNumber = value; + } + + public string? RomOf + { + get => _internal.RomOf; + set => _internal.RomOf = value; + } + + public string? Rotation + { + get => _internal.Rotation; + set => _internal.Rotation = value; + } + + public Data.Models.Metadata.Runnable? Runnable + { + get => _internal.Runnable; + set => _internal.Runnable = value; + } + + public string? SampleOf + { + get => _internal.SampleOf; + set => _internal.SampleOf = value; + } + + public string? SaveType + { + get => _internal.SaveType; + set => _internal.SaveType = value; + } + + public string? Score + { + get => _internal.Score; + set => _internal.Score = value; + } + + public string? Source + { + get => _internal.Source; + set => _internal.Source = value; + } + + public string? SourceFile + { + get => _internal.SourceFile; + set => _internal.SourceFile = value; + } + + public string? SourceRom + { + get => _internal.SourceRom; + set => _internal.SourceRom = value; + } + + public string? Status + { + get => _internal.Status; + set => _internal.Status = value; + } + + public string? Subgenre + { + get => _internal.Subgenre; + set => _internal.Subgenre = value; + } + + public Data.Models.Metadata.Supported? Supported + { + get => _internal.Supported; + set => _internal.Supported = value; + } + + public string? System + { + get => _internal.System; + set => _internal.System = value; + } + + public string? Tags + { + get => _internal.Tags; + set => _internal.Tags = value; + } + + public string? TitleID + { + get => _internal.TitleID; + set => _internal.TitleID = value; + } + + public string? Url + { + get => _internal.Url; + set => _internal.Url = value; + } + + public string? Year + { + get => _internal.Year; + set => _internal.Year = value; } #endregion - #region Accessors + #region Private Fields /// - /// Gets the name to use for a Machine + /// Internal model /// - /// Name if available, null otherwise - public string? GetName() => _internal.GetName(); + private Data.Models.Metadata.Machine _internal; - /// - /// Sets the name to use for a Machine - /// - /// Name to set for the item - public void SetName(string? name) => _internal.SetName(name); + #endregion + + #region Constructors + + public Machine() + { + _internal = new(); + } + + public Machine(Data.Models.Metadata.Machine machine) + { + _internal = machine.Clone() as Data.Models.Metadata.Machine ?? new(); + + // Clear all lists + _internal.Adjuster = null; + _internal.Archive = null; + _internal.BiosSet = null; + _internal.Chip = null; + _internal.Configuration = null; + _internal.Device = null; + _internal.DeviceRef = null; + _internal.DipSwitch = null; + _internal.Disk = null; + _internal.Display = null; + _internal.Driver = null; + _internal.Dump = null; + _internal.Feature = null; + _internal.Info = null; + _internal.Input = null; + _internal.Media = null; + _internal.Part = null; + _internal.Port = null; + _internal.RamOption = null; + _internal.Release = null; + _internal.Rom = null; + _internal.Sample = null; + _internal.SharedFeat = null; + _internal.Slot = null; + _internal.SoftwareList = null; + _internal.Sound = null; + _internal.Video = null; + + // Process flag values + if (Im1CRC is not null) + Im1CRC = TextHelper.NormalizeCRC32(Im1CRC); + + if (Im2CRC is not null) + Im2CRC = TextHelper.NormalizeCRC32(Im2CRC); + } #endregion @@ -113,49 +451,19 @@ namespace SabreTools.Metadata.DatItems { return new Machine() { - _internal = _internal.Clone() as Data.Models.Metadata.Machine ?? [], + _internal = GetInternalClone(), }; } /// /// Get a clone of the current internal model /// - public Data.Models.Metadata.Machine GetInternalClone() => (_internal.Clone() as Data.Models.Metadata.Machine)!; + public Data.Models.Metadata.Machine GetInternalClone() => (_internal.Clone() as Data.Models.Metadata.Machine) ?? new(); #endregion #region Comparision Methods - /// - public override bool Equals(ModelBackedItem? other) - { - // If other is null - if (other is null) - return false; - - // If the type is mismatched - if (other is not Machine otherItem) - return false; - - // Compare internal models - return _internal.EqualTo(otherItem._internal); - } - - /// - public override bool Equals(ModelBackedItem? other) - { - // If other is null - if (other is null) - return false; - - // If the type is mismatched - if (other is not Machine otherItem) - return false; - - // Compare internal models - return _internal.EqualTo(otherItem._internal); - } - /// public bool Equals(Machine? other) { @@ -164,7 +472,7 @@ namespace SabreTools.Metadata.DatItems return false; // Compare internal models - return _internal.EqualTo(other._internal); + return _internal.Equals(other._internal); } #endregion diff --git a/SabreTools.Metadata.DatItems/SabreTools.Metadata.DatItems.csproj b/SabreTools.Metadata.DatItems/SabreTools.Metadata.DatItems.csproj index 32969615..b9f908bf 100644 --- a/SabreTools.Metadata.DatItems/SabreTools.Metadata.DatItems.csproj +++ b/SabreTools.Metadata.DatItems/SabreTools.Metadata.DatItems.csproj @@ -38,7 +38,6 @@ - diff --git a/SabreTools.Metadata.DatItems/Trurip.cs b/SabreTools.Metadata.DatItems/Trurip.cs deleted file mode 100644 index 0541824c..00000000 --- a/SabreTools.Metadata.DatItems/Trurip.cs +++ /dev/null @@ -1,146 +0,0 @@ -using System; -using System.Xml.Serialization; -using Newtonsoft.Json; -using SabreTools.Data.Extensions; - -namespace SabreTools.Metadata.DatItems -{ - /// - /// Represents TruRip/EmuArc-specific values on a machine - /// - [JsonObject("trurip"), XmlRoot("trurip")] - public sealed class Trurip : ICloneable - { - #region Fields - - /// - /// Title ID - /// - [JsonProperty("titleid", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("titleid")] - public string? TitleID { get; set; } = null; - - /// - /// Machine developer - /// - [JsonProperty("developer", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("developer")] - public string? Developer { get; set; } = null; - - /// - /// Game genre - /// - [JsonProperty("genre", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("genre")] - public string? Genre { get; set; } = null; - - /// - /// Game subgenre - /// - [JsonProperty("subgenre", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("subgenre")] - public string? Subgenre { get; set; } = null; - - /// - /// Game ratings - /// - [JsonProperty("ratings", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("ratings")] - public string? Ratings { get; set; } = null; - - /// - /// Game score - /// - [JsonProperty("score", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("score")] - public string? Score { get; set; } = null; - - /// - /// Is the machine enabled - /// - [JsonProperty("enabled", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("enabled")] - public string? Enabled { get; set; } = null; // bool? - - /// - /// Does the game have a CRC check - /// - [JsonProperty("hascrc", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("hascrc")] - public bool? Crc { get; set; } = null; - - [JsonIgnore] - public bool CrcSpecified { get { return Crc is not null; } } - - /// - /// Machine relations - /// - [JsonProperty("relatedto", DefaultValueHandling = DefaultValueHandling.Ignore)] - [XmlElement("relatedto")] - public string? RelatedTo { get; set; } = null; - - #endregion - - #region Constructors - - public Trurip() { } - - public Trurip(Data.Models.Logiqx.Trurip trurip) - { - TitleID = trurip.TitleID; - Developer = trurip.Developer; - Genre = trurip.Genre; - Subgenre = trurip.Subgenre; - Ratings = trurip.Ratings; - Score = trurip.Score; - Enabled = trurip.Enabled; - Crc = trurip.CRC.AsYesNo(); - RelatedTo = trurip.RelatedTo; - } - - #endregion - - #region Cloning methods - - /// - /// Create a clone of the current object - /// - /// New object with the same values as the current one - public object Clone() - { - return new Trurip() - { - TitleID = this.TitleID, - Developer = this.Developer, - Genre = this.Genre, - Subgenre = this.Subgenre, - Ratings = this.Ratings, - Score = this.Score, - Enabled = this.Enabled, - Crc = this.Crc, - RelatedTo = this.RelatedTo, - }; - } - - /// - /// Convert to the internal Logiqx model - /// - public Data.Models.Logiqx.Trurip ConvertToLogiqx() - { - return new Data.Models.Logiqx.Trurip() - { - TitleID = this.TitleID, - Developer = this.Developer, - Genre = this.Genre, - Subgenre = this.Subgenre, - Ratings = this.Ratings, - Score = this.Score, - Enabled = this.Enabled, - CRC = this.Crc.FromYesNo(), - RelatedTo = this.RelatedTo, - }; - } - - #endregion - } -} diff --git a/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs b/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs index 34b96bf7..069351a8 100644 --- a/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs +++ b/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs @@ -1,5 +1,6 @@ using System; using SabreTools.Data.Models.Metadata; +using SabreTools.Hashing; using Xunit; namespace SabreTools.Metadata.Filter.Test @@ -85,7 +86,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesEqual_NoValue() { - var sample = new Sample { [Sample.NameKey] = null }; + var sample = new Sample { Name = null }; FilterObject filterObject = new FilterObject("Sample.Name", null, Operation.Equals); bool actual = filterObject.Matches(sample); Assert.True(actual); @@ -94,7 +95,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesEqual_BoolValue() { - var sample = new Sample { [Sample.NameKey] = "true" }; + var sample = new Sample { Name = "true" }; FilterObject filterObject = new FilterObject("Sample.Name", "yes", Operation.Equals); bool actual = filterObject.Matches(sample); Assert.True(actual); @@ -103,7 +104,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesEqual_Int64Value() { - var sample = new Sample { [Sample.NameKey] = "12345" }; + var sample = new Sample { Name = "12345" }; FilterObject filterObject = new FilterObject("Sample.Name", "12345", Operation.Equals); bool actual = filterObject.Matches(sample); Assert.True(actual); @@ -112,7 +113,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesEqual_DoubleValue() { - var sample = new Sample { [Sample.NameKey] = "12.345" }; + var sample = new Sample { Name = "12.345" }; FilterObject filterObject = new FilterObject("Sample.Name", "12.345", Operation.Equals); bool actual = filterObject.Matches(sample); Assert.True(actual); @@ -121,8 +122,8 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesEqual_RegexValue() { - var sample = new Sample { [Sample.NameKey] = "XXXXXX" }; - FilterObject filterObject = new FilterObject("Sample.Name", "^XXXXXX$", Operation.Equals); + var sample = new Sample { Name = "name" }; + FilterObject filterObject = new FilterObject("Sample.Name", "^name$", Operation.Equals); bool actual = filterObject.Matches(sample); Assert.True(actual); } @@ -130,8 +131,8 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesEqual_StringValue() { - var sample = new Sample { [Sample.NameKey] = "XXXXXX" }; - FilterObject filterObject = new FilterObject("Sample.Name", "XXXXXX", Operation.Equals); + var sample = new Sample { Name = "name" }; + FilterObject filterObject = new FilterObject("Sample.Name", "name", Operation.Equals); bool actual = filterObject.Matches(sample); Assert.True(actual); } @@ -152,7 +153,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesNotEqual_NoValue() { - var sample = new Sample { [Sample.NameKey] = null }; + var sample = new Sample { Name = null }; FilterObject filterObject = new FilterObject("Sample.Name", null, Operation.NotEquals); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -161,7 +162,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesNotEqual_BoolValue() { - var sample = new Sample { [Sample.NameKey] = "true" }; + var sample = new Sample { Name = "true" }; FilterObject filterObject = new FilterObject("Sample.Name", "yes", Operation.NotEquals); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -170,7 +171,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesNotEqual_Int64Value() { - var sample = new Sample { [Sample.NameKey] = "12345" }; + var sample = new Sample { Name = "12345" }; FilterObject filterObject = new FilterObject("Sample.Name", "12345", Operation.NotEquals); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -179,7 +180,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesNotEqual_DoubleValue() { - var sample = new Sample { [Sample.NameKey] = "12.345" }; + var sample = new Sample { Name = "12.345" }; FilterObject filterObject = new FilterObject("Sample.Name", "12.345", Operation.NotEquals); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -188,8 +189,8 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesNotEqual_RegexValue() { - var sample = new Sample { [Sample.NameKey] = "XXXXXX" }; - FilterObject filterObject = new FilterObject("Sample.Name", "^XXXXXX$", Operation.NotEquals); + var sample = new Sample { Name = "name" }; + FilterObject filterObject = new FilterObject("Sample.Name", "^name$", Operation.NotEquals); bool actual = filterObject.Matches(sample); Assert.False(actual); } @@ -197,8 +198,8 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesNotEqual_StringValue() { - var sample = new Sample { [Sample.NameKey] = "XXXXXX" }; - FilterObject filterObject = new FilterObject("Sample.Name", "XXXXXX", Operation.NotEquals); + var sample = new Sample { Name = "name" }; + FilterObject filterObject = new FilterObject("Sample.Name", "name", Operation.NotEquals); bool actual = filterObject.Matches(sample); Assert.False(actual); } @@ -219,7 +220,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesGreaterThan_NoValue() { - var sample = new Sample { [Sample.NameKey] = null }; + var sample = new Sample { Name = null }; FilterObject filterObject = new FilterObject("Sample.Name", null, Operation.GreaterThan); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -228,7 +229,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesGreaterThan_BoolValue() { - var sample = new Sample { [Sample.NameKey] = "true" }; + var sample = new Sample { Name = "true" }; FilterObject filterObject = new FilterObject("Sample.Name", "yes", Operation.GreaterThan); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -237,7 +238,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesGreaterThan_Int64Value() { - var sample = new Sample { [Sample.NameKey] = "12346" }; + var sample = new Sample { Name = "12346" }; FilterObject filterObject = new FilterObject("Sample.Name", "12345", Operation.GreaterThan); bool actual = filterObject.Matches(sample); Assert.True(actual); @@ -246,7 +247,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesGreaterThan_DoubleValue() { - var sample = new Sample { [Sample.NameKey] = "12.346" }; + var sample = new Sample { Name = "12.346" }; FilterObject filterObject = new FilterObject("Sample.Name", "12.345", Operation.GreaterThan); bool actual = filterObject.Matches(sample); Assert.True(actual); @@ -255,7 +256,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesGreaterThan_RegexValue() { - var sample = new Sample { [Sample.NameKey] = "XXXXXX" }; + var sample = new Sample { Name = "name" }; FilterObject filterObject = new FilterObject("Sample.Name", "^XXXXXX$", Operation.GreaterThan); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -264,7 +265,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesGreaterThan_StringValue() { - var sample = new Sample { [Sample.NameKey] = "XXXXXX" }; + var sample = new Sample { Name = "name" }; FilterObject filterObject = new FilterObject("Sample.Name", "XXXXXX", Operation.GreaterThan); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -286,7 +287,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesGreaterThanOrEqual_NoValue() { - var sample = new Sample { [Sample.NameKey] = null }; + var sample = new Sample { Name = null }; FilterObject filterObject = new FilterObject("Sample.Name", null, Operation.GreaterThanOrEqual); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -295,7 +296,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesGreaterThanOrEqual_BoolValue() { - var sample = new Sample { [Sample.NameKey] = "true" }; + var sample = new Sample { Name = "true" }; FilterObject filterObject = new FilterObject("Sample.Name", "yes", Operation.GreaterThanOrEqual); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -304,7 +305,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesGreaterThanOrEqual_Int64Value() { - var sample = new Sample { [Sample.NameKey] = "12346" }; + var sample = new Sample { Name = "12346" }; FilterObject filterObject = new FilterObject("Sample.Name", "12345", Operation.GreaterThanOrEqual); bool actual = filterObject.Matches(sample); Assert.True(actual); @@ -313,7 +314,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesGreaterThanOrEqual_DoubleValue() { - var sample = new Sample { [Sample.NameKey] = "12.346" }; + var sample = new Sample { Name = "12.346" }; FilterObject filterObject = new FilterObject("Sample.Name", "12.345", Operation.GreaterThanOrEqual); bool actual = filterObject.Matches(sample); Assert.True(actual); @@ -322,7 +323,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesGreaterThanOrEqual_RegexValue() { - var sample = new Sample { [Sample.NameKey] = "XXXXXX" }; + var sample = new Sample { Name = "name" }; FilterObject filterObject = new FilterObject("Sample.Name", "^XXXXXX$", Operation.GreaterThanOrEqual); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -331,7 +332,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesGreaterThanOrEqual_StringValue() { - var sample = new Sample { [Sample.NameKey] = "XXXXXX" }; + var sample = new Sample { Name = "name" }; FilterObject filterObject = new FilterObject("Sample.Name", "XXXXXX", Operation.GreaterThanOrEqual); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -353,7 +354,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesLessThan_NoValue() { - var sample = new Sample { [Sample.NameKey] = null }; + var sample = new Sample { Name = null }; FilterObject filterObject = new FilterObject("Sample.Name", null, Operation.LessThan); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -362,7 +363,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesLessThan_BoolValue() { - var sample = new Sample { [Sample.NameKey] = "true" }; + var sample = new Sample { Name = "true" }; FilterObject filterObject = new FilterObject("Sample.Name", "yes", Operation.LessThan); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -371,7 +372,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesLessThan_Int64Value() { - var sample = new Sample { [Sample.NameKey] = "12344" }; + var sample = new Sample { Name = "12344" }; FilterObject filterObject = new FilterObject("Sample.Name", "12345", Operation.LessThan); bool actual = filterObject.Matches(sample); Assert.True(actual); @@ -380,7 +381,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesLessThan_DoubleValue() { - var sample = new Sample { [Sample.NameKey] = "12.344" }; + var sample = new Sample { Name = "12.344" }; FilterObject filterObject = new FilterObject("Sample.Name", "12.345", Operation.LessThan); bool actual = filterObject.Matches(sample); Assert.True(actual); @@ -389,7 +390,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesLessThan_RegexValue() { - var sample = new Sample { [Sample.NameKey] = "XXXXXX" }; + var sample = new Sample { Name = "name" }; FilterObject filterObject = new FilterObject("Sample.Name", "^XXXXXX$", Operation.LessThan); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -398,7 +399,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesLessThan_StringValue() { - var sample = new Sample { [Sample.NameKey] = "XXXXXX" }; + var sample = new Sample { Name = "name" }; FilterObject filterObject = new FilterObject("Sample.Name", "XXXXXX", Operation.LessThan); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -420,7 +421,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesLessThanOrEqual_NoValue() { - var sample = new Sample { [Sample.NameKey] = null }; + var sample = new Sample { Name = null }; FilterObject filterObject = new FilterObject("Sample.Name", null, Operation.LessThanOrEqual); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -429,7 +430,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesLessThanOrEqual_BoolValue() { - var sample = new Sample { [Sample.NameKey] = "true" }; + var sample = new Sample { Name = "true" }; FilterObject filterObject = new FilterObject("Sample.Name", "yes", Operation.LessThanOrEqual); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -438,7 +439,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesLessThanOrEqual_Int64Value() { - var sample = new Sample { [Sample.NameKey] = "12344" }; + var sample = new Sample { Name = "12344" }; FilterObject filterObject = new FilterObject("Sample.Name", "12345", Operation.LessThanOrEqual); bool actual = filterObject.Matches(sample); Assert.True(actual); @@ -447,7 +448,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesLessThanOrEqual_DoubleValue() { - var sample = new Sample { [Sample.NameKey] = "12.344" }; + var sample = new Sample { Name = "12.344" }; FilterObject filterObject = new FilterObject("Sample.Name", "12.345", Operation.LessThanOrEqual); bool actual = filterObject.Matches(sample); Assert.True(actual); @@ -456,7 +457,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesLessThanOrEqual_RegexValue() { - var sample = new Sample { [Sample.NameKey] = "XXXXXX" }; + var sample = new Sample { Name = "name" }; FilterObject filterObject = new FilterObject("Sample.Name", "^XXXXXX$", Operation.LessThanOrEqual); bool actual = filterObject.Matches(sample); Assert.False(actual); @@ -465,12 +466,1638 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void MatchesLessThanOrEqual_StringValue() { - var sample = new Sample { [Sample.NameKey] = "XXXXXX" }; + var sample = new Sample { Name = "name" }; FilterObject filterObject = new FilterObject("Sample.Name", "XXXXXX", Operation.LessThanOrEqual); bool actual = filterObject.Matches(sample); Assert.False(actual); } #endregion + + #region Adjuster + + [Theory] + [InlineData("adjuster.default", "yes")] + [InlineData("adjuster.name", "name")] + public void Matches_Adjsuter(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Adjuster obj = new Adjuster + { + Default = true, + Name = "name", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Analog + + [Theory] + [InlineData("analog.mask", "mask")] + public void Matches_Analog(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Analog obj = new Analog + { + Mask = "mask", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Archive + + [Theory] + [InlineData("archive.additional", "additional")] + [InlineData("archive.adult", "1")] + [InlineData("archive.alt", "1")] + [InlineData("archive.bios", "1")] + [InlineData("archive.categories", "categories")] + [InlineData("archive.clone", "clone")] + [InlineData("archive.clonetag", "clone")] + [InlineData("archive.complete", "1")] + [InlineData("archive.dat", "1")] + [InlineData("archive.datternote", "datternote")] + [InlineData("archive.description", "description")] + [InlineData("archive.devstatus", "devstatus")] + [InlineData("archive.gameid1", "gameid1")] + [InlineData("archive.gameid2", "gameid2")] + [InlineData("archive.langchecked", "langchecked")] + [InlineData("archive.languages", "languages")] + [InlineData("archive.licensed", "1")] + [InlineData("archive.listed", "1")] + [InlineData("archive.mergeof", "mergeof")] + [InlineData("archive.mergename", "mergename")] + [InlineData("archive.name", "name")] + [InlineData("archive.namealt", "namealt")] + [InlineData("archive.number", "number")] + [InlineData("archive.physical", "1")] + [InlineData("archive.pirate", "1")] + [InlineData("archive.private", "1")] + [InlineData("archive.region", "region")] + [InlineData("archive.regparent", "regparent")] + [InlineData("archive.showlang", "1")] + [InlineData("archive.special1", "special1")] + [InlineData("archive.special2", "special2")] + [InlineData("archive.stickynote", "stickynote")] + [InlineData("archive.version1", "version1")] + [InlineData("archive.version2", "version2")] + public void Matches_Archive(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Archive obj = new Archive + { + Additional = "additional", + Adult = true, + Alt = true, + Bios = true, + Categories = "categories", + CloneTag = "clone", + Complete = true, + Dat = true, + DatterNote = "datternote", + Description = "description", + DevStatus = "devstatus", + GameId1 = "gameid1", + GameId2 = "gameid2", + LangChecked = "langchecked", + Languages = "languages", + Licensed = true, + Listed = true, + MergeOf = "mergeof", + MergeName = "mergename", + Name = "name", + NameAlt = "namealt", + Number = "number", + Physical = true, + Pirate = true, + Private = true, + Region = "region", + RegParent = "regparent", + ShowLang = true, + Special1 = "special1", + Special2 = "special2", + StickyNote = "stickynote", + Version1 = "version1", + Version2 = "version2", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region BiosSet + + [Theory] + [InlineData("biosset.default", "yes")] + [InlineData("biosset.description", "description")] + [InlineData("biosset.name", "name")] + public void Matches_BiosSet(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + BiosSet obj = new BiosSet + { + Default = true, + Description = "description", + Name = "name", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Chip + + [Theory] + [InlineData("chip.chiptype", "audio")] + [InlineData("chip.clock", "12345")] + [InlineData("chip.flags", "flags")] + [InlineData("chip.name", "name")] + [InlineData("chip.soundonly", "yes")] + [InlineData("chip.tag", "tag")] + public void Matches_Chip(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Chip obj = new Chip + { + ChipType = ChipType.Audio, + Clock = 12345, + Flags = "flags", + Name = "name", + SoundOnly = true, + Tag = "tag", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Condition + + [Theory] + [InlineData("condition.mask", "mask")] + [InlineData("condition.relation", "ne")] + [InlineData("condition.tag", "tag")] + [InlineData("condition.value", "value")] + public void Matches_Condition(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Condition obj = new Condition + { + Mask = "mask", + Relation = Relation.NotEqual, + Tag = "tag", + Value = "value", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Configuration + + [Theory] + [InlineData("configuration.mask", "mask")] + [InlineData("configuration.name", "name")] + [InlineData("configuration.tag", "tag")] + public void Matches_Configuration(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Configuration obj = new Configuration + { + Mask = "mask", + Name = "name", + Tag = "tag", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region ConfLocation + + [Theory] + [InlineData("conflocation.inverted", "yes")] + [InlineData("conflocation.name", "name")] + [InlineData("conflocation.number", "12345")] + public void Matches_ConfLocation(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + ConfLocation obj = new ConfLocation + { + Inverted = true, + Name = "name", + Number = 12345, + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region ConfSetting + + [Theory] + [InlineData("confsetting.default", "yes")] + [InlineData("confsetting.name", "name")] + [InlineData("confsetting.value", "value")] + public void Matches_ConfSetting(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + ConfSetting obj = new ConfSetting + { + Default = true, + Name = "name", + Value = "value", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Control + + [Theory] + [InlineData("control.buttons", "12345")] + [InlineData("control.controltype", "lightgun")] + [InlineData("control.keydelta", "12345")] + [InlineData("control.maximum", "12345")] + [InlineData("control.minimum", "12345")] + [InlineData("control.player", "12345")] + [InlineData("control.reqbuttons", "12345")] + [InlineData("control.reverse", "yes")] + [InlineData("control.sensitivity", "12345")] + [InlineData("control.ways", "ways")] + [InlineData("control.ways2", "ways2")] + [InlineData("control.ways3", "ways3")] + public void Matches_Control(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Control obj = new Control + { + Buttons = 12345, + ControlType = ControlType.Lightgun, + KeyDelta = 12345, + Maximum = 12345, + Minimum = 12345, + Player = 12345, + ReqButtons = 12345, + Reverse = true, + Sensitivity = 12345, + Ways = "ways", + Ways2 = "ways2", + Ways3 = "ways3", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region DataArea + + [Theory] + [InlineData("dataarea.endianness", "big")] + [InlineData("dataarea.name", "name")] + [InlineData("dataarea.size", "12345")] + [InlineData("dataarea.width", "16")] + public void Matches_DataArea(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + DataArea obj = new DataArea + { + Endianness = Endianness.Big, + Name = "name", + Size = 12345, + Width = Width.Short, + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Device + + [Theory] + [InlineData("device.devicetype", "punchcard")] + [InlineData("device.fixedimage", "fixedimage")] + [InlineData("device.interface", "interface")] + [InlineData("device.mandatory", "yes")] + [InlineData("device.tag", "tag")] + public void Matches_Device(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Device obj = new Device + { + DeviceType = DeviceType.PunchCard, + FixedImage = "fixedimage", + Interface = "interface", + Mandatory = true, + Tag = "tag", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Device + + [Theory] + [InlineData("deviceref.name", "name")] + public void Matches_DeviceRef(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + DeviceRef obj = new DeviceRef + { + Name = "name", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region DipLocation + + [Theory] + [InlineData("diplocation.inverted", "yes")] + [InlineData("diplocation.name", "name")] + [InlineData("diplocation.number", "12345")] + public void Matches_DipLocation(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + DipLocation obj = new DipLocation + { + Inverted = true, + Name = "name", + Number = 12345, + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region DipSwitch + + [Theory] + [InlineData("dipswitch.default", "yes")] + [InlineData("dipswitch.mask", "mask")] + [InlineData("dipswitch.name", "name")] + [InlineData("dipswitch.tag", "tag")] + public void Matches_DipSwitch(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + DipSwitch obj = new DipSwitch + { + Default = true, + Mask = "mask", + Name = "name", + Tag = "tag", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region DipValue + + [Theory] + [InlineData("dipvalue.default", "yes")] + [InlineData("dipvalue.name", "name")] + [InlineData("dipvalue.value", "value")] + public void Matches_DipValue(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + DipValue obj = new DipValue + { + Default = true, + Name = "name", + Value = "value", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Disk + + [Theory] + [InlineData("disk.flags", "flags")] + [InlineData("disk.index", "12345")] + [InlineData("disk.md5", "md5")] + [InlineData("disk.merge", "merge")] + [InlineData("disk.name", "name")] + [InlineData("disk.optional", "yes")] + [InlineData("disk.region", "region")] + [InlineData("disk.sha1", "sha1")] + [InlineData("disk.status", "nodump")] + [InlineData("disk.writable", "yes")] + public void Matches_Disk(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Disk obj = new Disk + { + Flags = "flags", + Index = 12345, + MD5 = "md5", + Merge = "merge", + Name = "name", + Optional = true, + Region = "region", + SHA1 = "sha1", + Status = ItemStatus.Nodump, + Writable = true, + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region DiskArea + + [Theory] + [InlineData("diskarea.name", "name")] + public void Matches_DiskArea(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + DiskArea obj = new DiskArea + { + Name = "name", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Display + + [Theory] + [InlineData("display.aspectx", "12345")] + [InlineData("display.aspecty", "12345")] + [InlineData("display.displaytype", "vector")] + [InlineData("display.screen", "vector")] + [InlineData("display.flipx", "yes")] + [InlineData("display.hbend", "12345")] + [InlineData("display.hbstart", "12345")] + [InlineData("display.height", "12345")] + [InlineData("display.y", "12345")] + [InlineData("display.htotal", "12345")] + [InlineData("display.pixclock", "12345")] + [InlineData("display.refresh", "123.45")] + [InlineData("display.freq", "123.45")] + [InlineData("display.rotate", "90")] + [InlineData("display.orientation", "90")] + [InlineData("display.tag", "tag")] + [InlineData("display.vbend", "12345")] + [InlineData("display.vbstart", "12345")] + [InlineData("display.vtotal", "12345")] + [InlineData("display.width", "12345")] + [InlineData("display.x", "12345")] + public void Matches_Display(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Display obj = new Display + { + AspectX = 12345, + AspectY = 12345, + DisplayType = DisplayType.Vector, + FlipX = true, + HBEnd = 12345, + HBStart = 12345, + Height = 12345, + HTotal = 12345, + PixClock = 12345, + Refresh = 123.45, + Rotate = Rotation.East, + Tag = "tag", + VBEnd = 12345, + VBStart = 12345, + VTotal = 12345, + Width = 12345, + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Driver + + [Theory] + [InlineData("driver.blit", "dirty")] + [InlineData("driver.cocktail", "test")] + [InlineData("driver.color", "test")] + [InlineData("driver.emulation", "test")] + [InlineData("driver.incomplete", "yes")] + [InlineData("driver.nosoundhardware", "yes")] + [InlineData("driver.palettesize", "palettesize")] + [InlineData("driver.requiresartwork", "yes")] + [InlineData("driver.savestate", "partial")] + [InlineData("driver.sound", "test")] + [InlineData("driver.status", "test")] + [InlineData("driver.unofficial", "yes")] + public void Matches_Driver(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Driver obj = new Driver + { + Blit = Blit.Dirty, + Cocktail = SupportStatus.Test, + Color = SupportStatus.Test, + Emulation = SupportStatus.Test, + Incomplete = true, + NoSoundHardware = true, + PaletteSize = "palettesize", + RequiresArtwork = true, + SaveState = Supported.Partial, + Sound = SupportStatus.Test, + Status = SupportStatus.Test, + Unofficial = true, + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Extension + + [Theory] + [InlineData("extension.name", "name")] + public void Matches_Extension(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Extension obj = new Extension + { + Name = "name", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Feature + + [Theory] + [InlineData("feature.featuretype", "printer")] + [InlineData("feature.name", "name")] + [InlineData("feature.overall", "imperfect")] + [InlineData("feature.status", "imperfect")] + [InlineData("feature.value", "value")] + public void Matches_Feature(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Feature obj = new Feature + { + FeatureType = FeatureType.Printer, + Name = "name", + Overall = FeatureStatus.Imperfect, + Status = FeatureStatus.Imperfect, + Value = "value", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Header + + [Theory] + [InlineData("header.author", "author")] + [InlineData("header.biosmode", "merged")] + [InlineData("header.build", "build")] + [InlineData("header.category", "category")] + [InlineData("header.comment", "comment")] + [InlineData("header.date", "date")] + [InlineData("header.datversion", "datversion")] + [InlineData("header.debug", "yes")] + [InlineData("header.description", "description")] + [InlineData("header.email", "email")] + [InlineData("header.emulatorversion", "emulatorversion")] + [InlineData("header.filename", "filename")] + [InlineData("header.forcemerging", "merged")] + [InlineData("header.forcenodump", "required")] + [InlineData("header.forcepacking", "zip")] + [InlineData("header.forcezipping", "yes")] + [InlineData("header.header", "header")] + [InlineData("header.headerskipper", "header")] + [InlineData("header.skipper", "header")] + [InlineData("header.homepage", "homepage")] + [InlineData("header.id", "id")] + [InlineData("header.imfolder", "imfolder")] + [InlineData("header.lockbiosmode", "yes")] + [InlineData("header.lockrommode", "yes")] + [InlineData("header.locksamplemode", "yes")] + [InlineData("header.mameconfig", "mameconfig")] + [InlineData("header.name", "name")] + [InlineData("header.notes", "notes")] + [InlineData("header.plugin", "plugin")] + [InlineData("header.refname", "refname")] + [InlineData("header.rommode", "merged")] + [InlineData("header.romtitle", "romtitle")] + [InlineData("header.rootdir", "rootdir")] + [InlineData("header.samplemode", "merged")] + [InlineData("header.schemalocation", "schemalocation")] + [InlineData("header.screenshotsheight", "screenshotsheight")] + [InlineData("header.screenshotswidth", "screenshotswidth")] + [InlineData("header.system", "system")] + [InlineData("header.timestamp", "timestamp")] + [InlineData("header.type", "type")] + [InlineData("header.url", "url")] + [InlineData("header.version", "version")] + public void Matches_Header(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Header obj = new Header + { + Author = "author", + BiosMode = MergingFlag.Merged, + Build = "build", + Category = "category", + Comment = "comment", + Date = "date", + DatVersion = "datversion", + Debug = true, + Description = "description", + Email = "email", + EmulatorVersion = "emulatorversion", + FileName = "filename", + ForceMerging = MergingFlag.Merged, + ForceNodump = NodumpFlag.Required, + ForcePacking = PackingFlag.Zip, + ForceZipping = true, + HeaderSkipper = "header", + Homepage = "homepage", + Id = "id", + ImFolder = "imfolder", + LockBiosMode = true, + LockRomMode = true, + LockSampleMode = true, + MameConfig = "mameconfig", + Name = "name", + Notes = "notes", + Plugin = "plugin", + RefName = "refname", + RomMode = MergingFlag.Merged, + RomTitle = "romtitle", + RootDir = "rootdir", + SampleMode = MergingFlag.Merged, + SchemaLocation = "schemalocation", + ScreenshotsHeight = "screenshotsheight", + ScreenshotsWidth = "screenshotswidth", + System = "system", + Timestamp = "timestamp", + Type = "type", + Url = "url", + Version = "version", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Info + + [Theory] + [InlineData("info.name", "name")] + [InlineData("info.value", "value")] + public void Matches_Info(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Info obj = new Info + { + Name = "name", + Value = "value", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Input + + [Theory] + [InlineData("input.buttons", "12345")] + [InlineData("input.coins", "12345")] + [InlineData("input.control", "control")] + [InlineData("input.controlattr", "control")] + [InlineData("input.players", "12345")] + [InlineData("input.service", "yes")] + [InlineData("input.tilt", "yes")] + public void Matches_Input(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Input obj = new Input + { + Buttons = 12345, + Coins = 12345, + ControlAttr = "control", + Players = 12345, + Service = true, + Tilt = true, + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Instance + + [Theory] + [InlineData("instance.name", "name")] + public void Matches_Instance(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Instance obj = new Instance + { + Name = "name", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Machine + + [Theory] + [InlineData("machine.board", "board")] + [InlineData("machine.buttons", "buttons")] + [InlineData("machine.category", "category")] + [InlineData("machine.cloneof", "cloneof")] + [InlineData("machine.comment", "comment")] + [InlineData("machine.company", "company")] + [InlineData("machine.control", "control")] + [InlineData("machine.crc", "crc")] + [InlineData("machine.country", "country")] + [InlineData("machine.description", "description")] + [InlineData("machine.developer", "developer")] + [InlineData("machine.dirname", "dirname")] + [InlineData("machine.displaycount", "displaycount")] + [InlineData("machine.displaytype", "displaytype")] + [InlineData("machine.duplicateid", "duplicateid")] + [InlineData("machine.emulator", "emulator")] + [InlineData("machine.enabled", "enabled")] + [InlineData("machine.extra", "extra")] + [InlineData("machine.favorite", "favorite")] + [InlineData("machine.genmsxid", "genmsxid")] + [InlineData("machine.genre", "genre")] + [InlineData("machine.hash", "hash")] + [InlineData("machine.history", "history")] + [InlineData("machine.id", "id")] + [InlineData("machine.im1crc", "00000000")] + [InlineData("machine.im2crc", "00000000")] + [InlineData("machine.imagenumber", "imagenumber")] + [InlineData("machine.isbios", "yes")] + [InlineData("machine.isdevice", "yes")] + [InlineData("machine.ismechanical", "yes")] + [InlineData("machine.language", "language")] + [InlineData("machine.location", "location")] + [InlineData("machine.manufacturer", "manufacturer")] + [InlineData("machine.name", "name")] + [InlineData("machine.notes", "notes")] + [InlineData("machine.playedcount", "playedcount")] + [InlineData("machine.playedtime", "playedtime")] + [InlineData("machine.players", "players")] + [InlineData("machine.publisher", "publisher")] + [InlineData("machine.ratings", "ratings")] + [InlineData("machine.rebuildto", "rebuildto")] + [InlineData("machine.relatedto", "relatedto")] + [InlineData("machine.releasenumber", "releasenumber")] + [InlineData("machine.romof", "romof")] + [InlineData("machine.rotation", "rotation")] + [InlineData("machine.runnable", "yes")] + [InlineData("machine.sampleof", "sampleof")] + [InlineData("machine.savetype", "savetype")] + [InlineData("machine.score", "score")] + [InlineData("machine.source", "source")] + [InlineData("machine.sourcefile", "sourcefile")] + [InlineData("machine.sourcerom", "sourcerom")] + [InlineData("machine.status", "status")] + [InlineData("machine.subgenre", "subgenre")] + [InlineData("machine.supported", "yes")] + [InlineData("machine.system", "system")] + [InlineData("machine.tags", "tags")] + [InlineData("machine.type", "bios")] + [InlineData("machine.type", "device")] + [InlineData("machine.type", "mechanical")] + [InlineData("machine.titleid", "titleid")] + [InlineData("machine.url", "url")] + [InlineData("machine.year", "year")] + public void Matches_Machine(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Machine obj = new Machine + { + Board = "board", + Buttons = "buttons", + Category = ["category"], + CloneOf = "cloneof", + CloneOfId = "cloneofid", + Comment = ["comment"], + Company = "company", + Control = "control", + CRC = "crc", + Country = "country", + Description = "description", + Developer = "developer", + DirName = "dirname", + DisplayCount = "displaycount", + DisplayType = "displaytype", + DuplicateID = "duplicateid", + Emulator = "emulator", + Enabled = "enabled", + Extra = "extra", + Favorite = "favorite", + GenMSXID = "genmsxid", + Genre = "genre", + Hash = "hash", + History = "history", + Id = "id", + Im1CRC = HashType.CRC32.ZeroString, + Im2CRC = HashType.CRC32.ZeroString, + ImageNumber = "imagenumber", + IsBios = true, + IsDevice = true, + IsMechanical = true, + Language = "language", + Location = "location", + Manufacturer = "manufacturer", + Name = "name", + Notes = "notes", + PlayedCount = "playedcount", + PlayedTime = "playedtime", + Players = "players", + Publisher = "publisher", + Ratings = "ratings", + RebuildTo = "rebuildto", + RelatedTo = "relatedto", + ReleaseNumber = "releasenumber", + RomOf = "romof", + Rotation = "rotation", + Runnable = Runnable.Yes, + SampleOf = "sampleof", + SaveType = "savetype", + Score = "score", + Source = "source", + SourceFile = "sourcefile", + SourceRom = "sourcerom", + Status = "status", + Subgenre = "subgenre", + Supported = Supported.Yes, + System = "system", + Tags = "tags", + TitleID = "titleid", + Url = "url", + Year = "year", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Media + + [Theory] + [InlineData("media.md5", "md5")] + [InlineData("media.name", "name")] + [InlineData("media.sha1", "sha1")] + [InlineData("media.sha256", "sha256")] + [InlineData("media.spamsum", "spamsum")] + public void Matches_Media(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Media obj = new Media + { + MD5 = "md5", + Name = "name", + SHA1 = "sha1", + SHA256 = "sha256", + SpamSum = "spamsum", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Original + + [Theory] + [InlineData("original.content", "content")] + [InlineData("original.value", "yes")] + public void Matches_Original(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Original obj = new Original + { + Content = "content", + Value = true, + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Part + + [Theory] + [InlineData("part.interface", "interface")] + [InlineData("part.name", "name")] + public void Matches_Part(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Part obj = new Part + { + Interface = "interface", + Name = "name", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Port + + [Theory] + [InlineData("port.tag", "tag")] + public void Matches_Port(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Port obj = new Port + { + Tag = "tag", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region RamOption + + [Theory] + [InlineData("ramoption.content", "content")] + [InlineData("ramoption.default", "yes")] + [InlineData("ramoption.name", "name")] + public void Matches_RamOption(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + RamOption obj = new RamOption + { + Content = "content", + Default = true, + Name = "name", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Release + + [Theory] + [InlineData("release.date", "date")] + [InlineData("release.default", "yes")] + [InlineData("release.language", "language")] + [InlineData("release.name", "name")] + [InlineData("release.region", "region")] + public void Matches_Release(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Release obj = new Release + { + Date = "date", + Default = true, + Language = "language", + Name = "name", + Region = "region", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region ReleaseDetails + + [Theory] + [InlineData("releasedetails.appendtonumber", "appendtonumber")] + [InlineData("releasedetails.archivename", "archivename")] + [InlineData("releasedetails.category", "category")] + [InlineData("releasedetails.comment", "comment")] + [InlineData("releasedetails.date", "date")] + [InlineData("releasedetails.dirname", "dirname")] + [InlineData("releasedetails.group", "group")] + [InlineData("releasedetails.id", "id")] + [InlineData("releasedetails.nfocrc", "nfocrc")] + [InlineData("releasedetails.nfoname", "nfoname")] + [InlineData("releasedetails.nfosize", "nfosize")] + [InlineData("releasedetails.origin", "origin")] + [InlineData("releasedetails.originalformat", "originalformat")] + [InlineData("releasedetails.region", "region")] + [InlineData("releasedetails.rominfo", "rominfo")] + [InlineData("releasedetails.tool", "tool")] + public void Matches_ReleaseDetails(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + ReleaseDetails obj = new ReleaseDetails + { + AppendToNumber = "appendtonumber", + ArchiveName = "archivename", + Category = "category", + Comment = "comment", + Date = "date", + DirName = "dirname", + Group = "group", + Id = "id", + NfoCRC = "nfocrc", + NfoName = "nfoname", + NfoSize = "nfosize", + Origin = "origin", + OriginalFormat = "originalformat", + Region = "region", + RomInfo = "rominfo", + Tool = "tool", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Rom + + [Theory] + [InlineData("rom.album", "album")] + [InlineData("rom.alt_romname", "alt_romname")] + [InlineData("rom.altromname", "alt_romname")] + [InlineData("rom.alt_title", "alt_title")] + [InlineData("rom.alttitle", "alt_title")] + [InlineData("rom.artist", "artist")] + [InlineData("rom.asr_detected_lang", "asr_detected_lang")] + [InlineData("rom.asrdetectedlang", "asr_detected_lang")] + [InlineData("rom.asr_detected_lang_conf", "asr_detected_lang_conf")] + [InlineData("rom.asrdetectedlangconf", "asr_detected_lang_conf")] + [InlineData("rom.asr_transcribed_lang", "asr_transcribed_lang")] + [InlineData("rom.asrtranscribedlang", "asr_transcribed_lang")] + [InlineData("rom.bios", "bios")] + [InlineData("rom.bitrate", "bitrate")] + [InlineData("rom.bittorrentmagnethash", "btih")] + [InlineData("rom.btih", "btih")] + [InlineData("rom.cloth_cover_detection_module_version", "cloth_cover_detection_module_version")] + [InlineData("rom.clothcoverdetectionmoduleversion", "cloth_cover_detection_module_version")] + [InlineData("rom.collection-catalog-number", "collection-catalog-number")] + [InlineData("rom.collectioncatalognumber", "collection-catalog-number")] + [InlineData("rom.comment", "comment")] + [InlineData("rom.crc16", "0000")] + [InlineData("rom.crc", "00000000")] + [InlineData("rom.crc32", "00000000")] + [InlineData("rom.crc64", "0000000000000000")] + [InlineData("rom.creator", "creator")] + [InlineData("rom.date", "date")] + [InlineData("rom.dispose", "yes")] + [InlineData("rom.extension", "extension")] + [InlineData("rom.filecount", "12345")] + [InlineData("rom.fileisavailable", "yes")] + [InlineData("rom.flags", "flags")] + [InlineData("rom.format", "format")] + [InlineData("rom.header", "header")] + [InlineData("rom.height", "height")] + [InlineData("rom.hocr_char_to_word_hocr_version", "hocr_char_to_word_hocr_version")] + [InlineData("rom.hocrchartowordhocrversion", "hocr_char_to_word_hocr_version")] + [InlineData("rom.hocr_char_to_word_module_version", "hocr_char_to_word_module_version")] + [InlineData("rom.hocrchartowordmoduleversion", "hocr_char_to_word_module_version")] + [InlineData("rom.hocr_fts_text_hocr_version", "hocr_fts_text_hocr_version")] + [InlineData("rom.hocrftstexthocrversion", "hocr_fts_text_hocr_version")] + [InlineData("rom.hocr_fts_text_module_version", "hocr_fts_text_module_version")] + [InlineData("rom.hocrftstextmoduleversion", "hocr_fts_text_module_version")] + [InlineData("rom.hocr_pageindex_hocr_version", "hocr_pageindex_hocr_version")] + [InlineData("rom.hocrpageindexhocrversion", "hocr_pageindex_hocr_version")] + [InlineData("rom.hocr_pageindex_module_version", "hocr_pageindex_module_version")] + [InlineData("rom.hocrpageindexmoduleversion", "hocr_pageindex_module_version")] + [InlineData("rom.inverted", "yes")] + [InlineData("rom.mtime", "mtime")] + [InlineData("rom.lastmodifiedtime", "mtime")] + [InlineData("rom.length", "length")] + [InlineData("rom.loadflag", "load16_byte")] + [InlineData("rom.matrix_number", "matrix_number")] + [InlineData("rom.matrixnumber", "matrix_number")] + [InlineData("rom.md2", "8350e5a3e24c153df2275c9f80692773")] + [InlineData("rom.md4", "31d6cfe0d16ae931b73c59d7e0c089c0")] + [InlineData("rom.md5", "d41d8cd98f00b204e9800998ecf8427e")] + [InlineData("rom.mediatype", "megarom")] + [InlineData("rom.openmsxmediatype", "megarom")] + [InlineData("rom.merge", "merge")] + [InlineData("rom.mia", "yes")] + [InlineData("rom.name", "name")] + [InlineData("rom.offset", "offset")] + [InlineData("rom.openmsxtype", "type")] + [InlineData("rom.optional", "yes")] + [InlineData("rom.original", "original")] + [InlineData("rom.pdf_module_version", "pdf_module_version")] + [InlineData("rom.pdfmoduleversion", "pdf_module_version")] + [InlineData("rom.preview-image", "preview-image")] + [InlineData("rom.previewimage", "preview-image")] + [InlineData("rom.publisher", "publisher")] + [InlineData("rom.region", "region")] + [InlineData("rom.remark", "remark")] + [InlineData("rom.ripemd128", "cdf26213a150dc3ecb610f18f6b38b46")] + [InlineData("rom.ripemd160", "9c1185a5c5e9fc54612808977ee8f548b2258d31")] + [InlineData("rom.rotation", "rotation")] + [InlineData("rom.serial", "serial")] + [InlineData("rom.sha1", "da39a3ee5e6b4b0d3255bfef95601890afd80709")] + [InlineData("rom.sha256", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")] + [InlineData("rom.sha384", "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b")] + [InlineData("rom.sha512", "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e")] + [InlineData("rom.size", "12345")] + [InlineData("rom.soundonly", "yes")] + [InlineData("rom.source", "source")] + [InlineData("rom.spamsum", "3::")] + [InlineData("rom.start", "start")] + [InlineData("rom.status", "good")] + [InlineData("rom.summation", "summation")] + [InlineData("rom.ocr", "ocr")] + [InlineData("rom.tesseractocr", "ocr")] + [InlineData("rom.ocr_converted", "ocr_converted")] + [InlineData("rom.tesseractocrconverted", "ocr_converted")] + [InlineData("rom.ocr_detected_lang", "ocr_detected_lang")] + [InlineData("rom.tesseractocrdetectedlang", "ocr_detected_lang")] + [InlineData("rom.ocr_detected_lang_conf", "ocr_detected_lang_conf")] + [InlineData("rom.tesseractocrdetectedlangconf", "ocr_detected_lang_conf")] + [InlineData("rom.ocr_detected_script", "ocr_detected_script")] + [InlineData("rom.tesseractocrdetectedscript", "ocr_detected_script")] + [InlineData("rom.ocr_detected_script_conf", "ocr_detected_script_conf")] + [InlineData("rom.tesseractocrdetectedscriptconf", "ocr_detected_script_conf")] + [InlineData("rom.ocr_module_version", "ocr_module_version")] + [InlineData("rom.tesseractocrmoduleversion", "ocr_module_version")] + [InlineData("rom.ocr_parameters", "ocr_parameters")] + [InlineData("rom.tesseractocrparameters", "ocr_parameters")] + [InlineData("rom.title", "title")] + [InlineData("rom.track", "track")] + [InlineData("rom.value", "value")] + [InlineData("rom.whisper_asr_module_version", "whisper_asr_module_version")] + [InlineData("rom.whisperasrmoduleversion", "whisper_asr_module_version")] + [InlineData("rom.whisper_model_hash", "whisper_model_hash")] + [InlineData("rom.whispermodelhash", "whisper_model_hash")] + [InlineData("rom.whisper_model_name", "whisper_model_name")] + [InlineData("rom.whispermodelname", "whisper_model_name")] + [InlineData("rom.whisper_version", "whisper_version")] + [InlineData("rom.whisperversion", "whisper_version")] + [InlineData("rom.width", "width")] + [InlineData("rom.word_conf_0_10", "word_conf_0_10")] + [InlineData("rom.wordconfidenceinterval0to10", "word_conf_0_10")] + [InlineData("rom.word_conf_11_20", "word_conf_11_20")] + [InlineData("rom.wordconfidenceinterval11to20", "word_conf_11_20")] + [InlineData("rom.word_conf_21_30", "word_conf_21_30")] + [InlineData("rom.wordconfidenceinterval21to30", "word_conf_21_30")] + [InlineData("rom.word_conf_31_40", "word_conf_31_40")] + [InlineData("rom.wordconfidenceinterval31to40", "word_conf_31_40")] + [InlineData("rom.word_conf_41_50", "word_conf_41_50")] + [InlineData("rom.wordconfidenceinterval41to50", "word_conf_41_50")] + [InlineData("rom.word_conf_51_60", "word_conf_51_60")] + [InlineData("rom.wordconfidenceinterval51to60", "word_conf_51_60")] + [InlineData("rom.word_conf_61_70", "word_conf_61_70")] + [InlineData("rom.wordconfidenceinterval61to70", "word_conf_61_70")] + [InlineData("rom.word_conf_71_80", "word_conf_71_80")] + [InlineData("rom.wordconfidenceinterval71to80", "word_conf_71_80")] + [InlineData("rom.word_conf_81_90", "word_conf_81_90")] + [InlineData("rom.wordconfidenceinterval81to90", "word_conf_81_90")] + [InlineData("rom.word_conf_91_100", "word_conf_91_100")] + [InlineData("rom.wordconfidenceinterval91to100", "word_conf_91_100")] + [InlineData("rom.xxhash364", "2d06800538d394c2")] + [InlineData("rom.xxhash3128", "99aa06d3014798d86001c324468d497f")] + public void Matches_Rom(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Rom obj = new Rom + { + Album = "album", + AltRomname = "alt_romname", + AltTitle = "alt_title", + Artist = "artist", + ASRDetectedLang = "asr_detected_lang", + ASRDetectedLangConf = "asr_detected_lang_conf", + ASRTranscribedLang = "asr_transcribed_lang", + Bios = "bios", + Bitrate = "bitrate", + BitTorrentMagnetHash = "btih", + ClothCoverDetectionModuleVersion = "cloth_cover_detection_module_version", + CollectionCatalogNumber = "collection-catalog-number", + Comment = "comment", + CRC16 = HashType.CRC16.ZeroString, + CRC32 = HashType.CRC32.ZeroString, + CRC64 = HashType.CRC64.ZeroString, + Creator = "creator", + Date = "date", + Dispose = true, + Extension = "extension", + FileCount = 12345, + FileIsAvailable = true, + Flags = "flags", + Format = "format", + Header = "header", + Height = "height", + hOCRCharToWordhOCRVersion = "hocr_char_to_word_hocr_version", + hOCRCharToWordModuleVersion = "hocr_char_to_word_module_version", + hOCRFtsTexthOCRVersion = "hocr_fts_text_hocr_version", + hOCRFtsTextModuleVersion = "hocr_fts_text_module_version", + hOCRPageIndexhOCRVersion = "hocr_pageindex_hocr_version", + hOCRPageIndexModuleVersion = "hocr_pageindex_module_version", + Inverted = true, + LastModifiedTime = "mtime", + Length = "length", + LoadFlag = LoadFlag.Load16Byte, + MatrixNumber = "matrix_number", + MD2 = HashType.MD2.ZeroString, + MD4 = HashType.MD4.ZeroString, + MD5 = HashType.MD5.ZeroString, + Merge = "merge", + MIA = true, + Name = "name", + Offset = "offset", + OpenMSXMediaType = OpenMSXSubType.MegaRom, + OpenMSXType = "type", + Optional = true, + Original = "original", + PDFModuleVersion = "pdf_module_version", + PreviewImage = "preview-image", + Publisher = "publisher", + Region = "region", + Remark = "remark", + RIPEMD128 = HashType.RIPEMD128.ZeroString, + RIPEMD160 = HashType.RIPEMD160.ZeroString, + Rotation = "rotation", + Serial = "serial", + SHA1 = HashType.SHA1.ZeroString, + SHA256 = HashType.SHA256.ZeroString, + SHA384 = HashType.SHA384.ZeroString, + SHA512 = HashType.SHA512.ZeroString, + Size = 12345, + SoundOnly = true, + Source = "source", + SpamSum = HashType.SpamSum.ZeroString, + Start = "start", + Status = ItemStatus.Good, + Summation = "summation", + TesseractOCR = "ocr", + TesseractOCRConverted = "ocr_converted", + TesseractOCRDetectedLang = "ocr_detected_lang", + TesseractOCRDetectedLangConf = "ocr_detected_lang_conf", + TesseractOCRDetectedScript = "ocr_detected_script", + TesseractOCRDetectedScriptConf = "ocr_detected_script_conf", + TesseractOCRModuleVersion = "ocr_module_version", + TesseractOCRParameters = "ocr_parameters", + Title = "title", + Track = "track", + Value = "value", + WhisperASRModuleVersion = "whisper_asr_module_version", + WhisperModelHash = "whisper_model_hash", + WhisperModelName = "whisper_model_name", + WhisperVersion = "whisper_version", + Width = "width", + WordConfidenceInterval0To10 = "word_conf_0_10", + WordConfidenceInterval11To20 = "word_conf_11_20", + WordConfidenceInterval21To30 = "word_conf_21_30", + WordConfidenceInterval31To40 = "word_conf_31_40", + WordConfidenceInterval41To50 = "word_conf_41_50", + WordConfidenceInterval51To60 = "word_conf_51_60", + WordConfidenceInterval61To70 = "word_conf_61_70", + WordConfidenceInterval71To80 = "word_conf_71_80", + WordConfidenceInterval81To90 = "word_conf_81_90", + WordConfidenceInterval91To100 = "word_conf_91_100", + xxHash364 = HashType.XxHash3.ZeroString, + xxHash3128 = HashType.XxHash128.ZeroString, + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Sample + + [Theory] + [InlineData("sample.name", "name")] + public void Matches_Sample(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Sample obj = new Sample + { + Name = "name", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Serials + + [Theory] + [InlineData("serials.boxbarcode", "boxbarcode")] + [InlineData("serials.boxserial", "boxserial")] + [InlineData("serials.chipserial", "chipserial")] + [InlineData("serials.digitalserial1", "digitalserial1")] + [InlineData("serials.digitalserial2", "digitalserial2")] + [InlineData("serials.lockoutserial", "lockoutserial")] + [InlineData("serials.mediaserial1", "mediaserial1")] + [InlineData("serials.mediaserial2", "mediaserial2")] + [InlineData("serials.mediaserial3", "mediaserial3")] + [InlineData("serials.mediastamp", "mediastamp")] + [InlineData("serials.pcbserial", "pcbserial")] + [InlineData("serials.romchipserial1", "romchipserial1")] + [InlineData("serials.romchipserial2", "romchipserial2")] + [InlineData("serials.savechipserial", "savechipserial")] + public void Matches_Serials(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Serials obj = new Serials + { + BoxBarcode = "boxbarcode", + BoxSerial = "boxserial", + ChipSerial = "chipserial", + DigitalSerial1 = "digitalserial1", + DigitalSerial2 = "digitalserial2", + LockoutSerial = "lockoutserial", + MediaSerial1 = "mediaserial1", + MediaSerial2 = "mediaserial2", + MediaSerial3 = "mediaserial3", + MediaStamp = "mediastamp", + PCBSerial = "pcbserial", + RomChipSerial1 = "romchipserial1", + RomChipSerial2 = "romchipserial2", + SaveChipSerial = "savechipserial", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region SharedFeat + + [Theory] + [InlineData("sharedfeat.name", "name")] + [InlineData("sharedfeat.value", "value")] + public void Matches_SharedFeat(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + SharedFeat obj = new SharedFeat + { + Name = "name", + Value = "value", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Slot + + [Theory] + [InlineData("slot.name", "name")] + public void Matches_Slot(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Slot obj = new Slot + { + Name = "name", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region SlotOption + + [Theory] + [InlineData("slotoption.default", "yes")] + [InlineData("slotoption.devname", "devname")] + [InlineData("slotoption.name", "name")] + public void Matches_SlotOption(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + SlotOption obj = new SlotOption + { + Default = true, + DevName = "devname", + Name = "name", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region SoftwareList + + [Theory] + [InlineData("softwarelist.filter", "filter")] + [InlineData("softwarelist.name", "name")] + [InlineData("softwarelist.status", "original")] + [InlineData("softwarelist.tag", "tag")] + public void Matches_SoftwareList(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + SoftwareList obj = new SoftwareList + { + Filter = "filter", + Name = "name", + Status = SoftwareListStatus.Original, + Tag = "tag", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Sound + + [Theory] + [InlineData("sound.channels", "12345")] + public void Matches_Sound(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Sound obj = new Sound + { + Channels = 12345, + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region SourceDetails + + [Theory] + [InlineData("sourcedetails.appendtonumber", "appendtonumber")] + [InlineData("sourcedetails.comment1", "comment1")] + [InlineData("sourcedetails.comment2", "comment2")] + [InlineData("sourcedetails.dumpdate", "dumpdate")] + [InlineData("sourcedetails.dumpdateinfo", "1")] + [InlineData("sourcedetails.dumper", "dumper")] + [InlineData("sourcedetails.id", "id")] + [InlineData("sourcedetails.link1", "link1")] + [InlineData("sourcedetails.link1public", "1")] + [InlineData("sourcedetails.link2", "link2")] + [InlineData("sourcedetails.link2public", "1")] + [InlineData("sourcedetails.link3", "link3")] + [InlineData("sourcedetails.link3public", "1")] + [InlineData("sourcedetails.mediatitle", "mediatitle")] + [InlineData("sourcedetails.nodump", "1")] + [InlineData("sourcedetails.origin", "origin")] + [InlineData("sourcedetails.originalformat", "originalformat")] + [InlineData("sourcedetails.project", "project")] + [InlineData("sourcedetails.region", "region")] + [InlineData("sourcedetails.releasedate", "releasedate")] + [InlineData("sourcedetails.releasedateinfo", "1")] + [InlineData("sourcedetails.rominfo", "rominfo")] + [InlineData("sourcedetails.section", "section")] + [InlineData("sourcedetails.tool", "tool")] + public void Matches_SourceDetails(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + SourceDetails obj = new SourceDetails + { + AppendToNumber = "appendtonumber", + Comment1 = "comment1", + Comment2 = "comment2", + DumpDate = "dumpdate", + DumpDateInfo = true, + Dumper = "dumper", + Id = "id", + Link1 = "link1", + Link1Public = true, + Link2 = "link2", + Link2Public = true, + Link3 = "link3", + Link3Public = true, + MediaTitle = "mediatitle", + Nodump = true, + Origin = "origin", + OriginalFormat = "originalformat", + Project = "project", + Region = "region", + ReleaseDate = "releasedate", + ReleaseDateInfo = true, + RomInfo = "rominfo", + Section = "section", + Tool = "tool", + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion + + #region Video + + [Theory] + [InlineData("video.aspectx", "12345")] + [InlineData("video.aspecty", "12345")] + [InlineData("video.height", "12345")] + [InlineData("video.y", "12345")] + [InlineData("video.orientation", "horizontal")] + [InlineData("video.rotate", "horizontal")] + [InlineData("video.refresh", "123.45")] + [InlineData("video.freq", "123.45")] + [InlineData("video.displaytype", "vector")] + [InlineData("video.screen", "vector")] + [InlineData("video.width", "12345")] + [InlineData("video.x", "12345")] + public void Matches_Video(string itemField, string value) + { + var filter = new FilterObject(itemField, value, Operation.Equals); + Video obj = new Video + { + AspectX = 12345, + AspectY = 12345, + Height = 12345, + Orientation = Rotation.East, + Refresh = 123.45, + Screen = DisplayType.Vector, + Width = 12345, + }; + + bool actual = filter.Matches(obj); + Assert.True(actual); + } + + #endregion } } diff --git a/SabreTools.Metadata.Filter.Test/FilterRunnerTests.cs b/SabreTools.Metadata.Filter.Test/FilterRunnerTests.cs index cfbaf684..ae901d3d 100644 --- a/SabreTools.Metadata.Filter.Test/FilterRunnerTests.cs +++ b/SabreTools.Metadata.Filter.Test/FilterRunnerTests.cs @@ -33,7 +33,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void Header_Null_False() { - var header = new Header { [Header.AuthorKey] = null }; + var header = new Header { Author = null }; bool actual = _filterRunner.Run(header); Assert.False(actual); } @@ -41,7 +41,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void Header_Empty_False() { - var header = new Header { [Header.AuthorKey] = "" }; + var header = new Header { Author = "" }; bool actual = _filterRunner.Run(header); Assert.False(actual); } @@ -49,7 +49,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void Header_Incorrect_False() { - var header = new Header { [Header.AuthorKey] = "NO_MATCH" }; + var header = new Header { Author = "NO_MATCH" }; bool actual = _filterRunner.Run(header); Assert.False(actual); } @@ -57,7 +57,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void Header_Correct_True() { - var header = new Header { [Header.AuthorKey] = "auth" }; + var header = new Header { Author = "auth" }; bool actual = _filterRunner.Run(header); Assert.True(actual); } @@ -77,7 +77,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void Machine_Null_False() { - var machine = new Machine { [Machine.DescriptionKey] = null }; + var machine = new Machine { Description = null }; bool actual = _filterRunner.Run(machine); Assert.False(actual); } @@ -85,7 +85,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void Machine_Empty_False() { - var machine = new Machine { [Machine.DescriptionKey] = "" }; + var machine = new Machine { Description = "" }; bool actual = _filterRunner.Run(machine); Assert.False(actual); } @@ -93,7 +93,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void Machine_Incorrect_False() { - var machine = new Machine { [Machine.DescriptionKey] = "NO_MATCH" }; + var machine = new Machine { Description = "NO_MATCH" }; bool actual = _filterRunner.Run(machine); Assert.False(actual); } @@ -101,7 +101,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void Machine_Correct_True() { - var machine = new Machine { [Machine.DescriptionKey] = "desc" }; + var machine = new Machine { Description = "desc" }; bool actual = _filterRunner.Run(machine); Assert.True(actual); } @@ -121,7 +121,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void DatItem_Null_False() { - DatItem datItem = new Sample { [Sample.NameKey] = null }; + DatItem datItem = new Sample { Name = null }; bool actual = _filterRunner.Run(datItem); Assert.False(actual); } @@ -129,7 +129,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void DatItem_Empty_False() { - DatItem datItem = new Sample { [Sample.NameKey] = "" }; + DatItem datItem = new Sample { Name = "" }; bool actual = _filterRunner.Run(datItem); Assert.False(actual); } @@ -137,7 +137,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void DatItem_Incorrect_False() { - DatItem datItem = new Sample { [Sample.NameKey] = "NO_MATCH" }; + DatItem datItem = new Sample { Name = "NO_MATCH" }; bool actual = _filterRunner.Run(datItem); Assert.False(actual); } @@ -145,7 +145,7 @@ namespace SabreTools.Metadata.Filter.Test [Fact] public void DatItem_Correct_True() { - DatItem datItem = new Sample { [Sample.NameKey] = "name" }; + DatItem datItem = new Sample { Name = "name" }; bool actual = _filterRunner.Run(datItem); Assert.True(actual); } @@ -167,8 +167,8 @@ namespace SabreTools.Metadata.Filter.Test { DatItem datItem = new Rom { - [Rom.NameKey] = "name", - [Rom.CRCKey] = null, + Name = "name", + CRC32 = null, }; bool actual = _filterRunner.Run(datItem); @@ -180,8 +180,8 @@ namespace SabreTools.Metadata.Filter.Test { DatItem datItem = new Rom { - [Rom.NameKey] = "name", - [Rom.CRCKey] = "", + Name = "name", + CRC32 = "", }; bool actual = _filterRunner.Run(datItem); @@ -193,8 +193,8 @@ namespace SabreTools.Metadata.Filter.Test { DatItem datItem = new Rom { - [Rom.NameKey] = "name", - [Rom.CRCKey] = "NO_MATCH", + Name = "name", + CRC32 = "NO_MATCH", }; bool actual = _filterRunner.Run(datItem); @@ -206,8 +206,8 @@ namespace SabreTools.Metadata.Filter.Test { DatItem datItem = new Rom { - [Rom.NameKey] = "name", - [Rom.CRCKey] = "crc", + Name = "name", + CRC32 = "crc", }; bool actual = _filterRunner.Run(datItem); diff --git a/SabreTools.Metadata.Filter/ExtraIniItem.cs b/SabreTools.Metadata.Filter/ExtraIniItem.cs index adcbac03..d6135d52 100644 --- a/SabreTools.Metadata.Filter/ExtraIniItem.cs +++ b/SabreTools.Metadata.Filter/ExtraIniItem.cs @@ -8,7 +8,7 @@ namespace SabreTools.Metadata.Filter { public class ExtraIniItem { - #region Fields + #region Properties /// /// Item type and field to update with INI information diff --git a/SabreTools.Metadata.Filter/FilterGroup.cs b/SabreTools.Metadata.Filter/FilterGroup.cs index 6987d165..cbc2b98e 100644 --- a/SabreTools.Metadata.Filter/FilterGroup.cs +++ b/SabreTools.Metadata.Filter/FilterGroup.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using System.Text.RegularExpressions; -using SabreTools.Data.Models.Metadata; namespace SabreTools.Metadata.Filter { @@ -65,14 +64,14 @@ namespace SabreTools.Metadata.Filter #region Matching /// - /// Determine if a DictionaryBase object matches the group + /// Determine if a object matches the group /// - public bool Matches(DictionaryBase dictionaryBase) + public bool Matches(object obj) { return GroupType switch { - GroupType.AND => MatchesAnd(dictionaryBase), - GroupType.OR => MatchesOr(dictionaryBase), + GroupType.AND => MatchesAnd(obj), + GroupType.OR => MatchesOr(obj), GroupType.NONE => false, _ => false, @@ -82,13 +81,13 @@ namespace SabreTools.Metadata.Filter /// /// Determines if a value matches all filters /// - private bool MatchesAnd(DictionaryBase dictionaryBase) + private bool MatchesAnd(object obj) { // Run standalone filters foreach (var filter in _subfilters) { // One failed match fails the group - if (!filter.Matches(dictionaryBase)) + if (!filter.Matches(obj)) return false; } @@ -96,7 +95,7 @@ namespace SabreTools.Metadata.Filter foreach (var group in _subgroups) { // One failed match fails the group - if (!group.Matches(dictionaryBase)) + if (!group.Matches(obj)) return false; } @@ -106,13 +105,13 @@ namespace SabreTools.Metadata.Filter /// /// Determines if a value matches any filters /// - private bool MatchesOr(DictionaryBase dictionaryBase) + private bool MatchesOr(object obj) { // Run standalone filters foreach (var filter in _subfilters) { // One successful match passes the group - if (filter.Matches(dictionaryBase)) + if (filter.Matches(obj)) return true; } @@ -120,7 +119,7 @@ namespace SabreTools.Metadata.Filter foreach (var group in _subgroups) { // One successful match passes the group - if (group.Matches(dictionaryBase)) + if (group.Matches(obj)) return true; } diff --git a/SabreTools.Metadata.Filter/FilterKey.cs b/SabreTools.Metadata.Filter/FilterKey.cs index 8419635b..f74a1481 100644 --- a/SabreTools.Metadata.Filter/FilterKey.cs +++ b/SabreTools.Metadata.Filter/FilterKey.cs @@ -8,6 +8,8 @@ namespace SabreTools.Metadata.Filter /// public class FilterKey { + #region Properties + /// /// Item name associated with the filter /// @@ -18,6 +20,821 @@ namespace SabreTools.Metadata.Filter /// public readonly string FieldName; + #endregion + + #region Constants + + /// + /// Cached item type names for filter selection + /// +#if NET5_0_OR_GREATER + private static readonly string[] _datItemTypeNames = Enum.GetNames(); +#else + private static readonly string[] _datItemTypeNames = Enum.GetNames(typeof(ItemType)); +#endif + + #region Per-Type Accepted Keys + + /// + /// Known keys for Adjuster + /// + private static readonly string[] _adjusterKeys = + [ + "default", + "name" + ]; + + /// + /// Known keys for Analog + /// + private static readonly string[] _analogKeys = + [ + "mask" + ]; + + /// + /// Known keys for Archive + /// + private static readonly string[] _archiveKeys = + [ + "additional", + "adult", + "alt", + "bios", + "categories", + "clone", + "clonetag", + "complete", + "dat", + "datternote", + "description", + "devstatus", + "gameid1", + "gameid2", + "langchecked", + "languages", + "licensed", + "listed", + "mergeof", + "mergename", + "name", + "namealt", + "number", + "physical", + "pirate", + "private", + "region", + "regparent", + "showlang", + "special1", + "special2", + "stickynote", + "version1", + "version2", + ]; + + /// + /// Known keys for BiosSet + /// + private static readonly string[] _biossetKeys = + [ + "default", + "description", + "name", + ]; + + /// + /// Known keys for Chip + /// + private static readonly string[] _chipKeys = + [ + "chiptype", + "clock", + "flags", + "name", + "soundonly", + "tag", + ]; + + /// + /// Known keys for Condition + /// + private static readonly string[] _conditionKeys = + [ + "mask", + "relation", + "tag", + "value", + ]; + + /// + /// Known keys for Configuration + /// + private static readonly string[] _configurationKeys = + [ + "mask", + "name", + "tag", + ]; + + /// + /// Known keys for ConfLocation + /// + private static readonly string[] _confLocationKeys = + [ + "inverted", + "name", + "number", + ]; + + /// + /// Known keys for ConfSetting + /// + private static readonly string[] _confSettingKeys = + [ + "default", + "name", + "value", + ]; + + /// + /// Known keys for Control + /// + private static readonly string[] _controlKeys = + [ + "buttons", + "controltype", + "keydelta", + "maximum", + "minimum", + "player", + "reqbuttons", + "reverse", + "sensitivity", + "ways", + "ways2", + "ways3", + ]; + + /// + /// Known keys for DataArea + /// + private static readonly string[] _dataAreaKeys = + [ + "endianness", + "name", + "size", + "width", + ]; + + /// + /// Known keys for Device + /// + private static readonly string[] _deviceKeys = + [ + "devicetype", + "fixedimage", + "interface", + "mandatory", + "tag", + ]; + + /// + /// Known keys for DeviceRef + /// + private static readonly string[] _deviceRefKeys = + [ + "name", + ]; + + /// + /// Known keys for DipLocation + /// + private static readonly string[] _dipLocationKeys = + [ + "inverted", + "name", + "number", + ]; + + /// + /// Known keys for DipSwitch + /// + private static readonly string[] _dipSwitchKeys = + [ + "default", + "mask", + "name", + "tag", + ]; + + /// + /// Known keys for DipSwitch + /// + private static readonly string[] _dipValueKeys = + [ + "default", + "name", + "value", + ]; + + /// + /// Known keys for Disk + /// + private static readonly string[] _diskKeys = + [ + "flags", + "index", + "md5", + "merge", + "name", + "optional", + "region", + "sha1", + "status", + "writable", + ]; + + /// + /// Known keys for DiskArea + /// + private static readonly string[] _diskAreaKeys = + [ + "name", + ]; + + /// + /// Known keys for Display + /// + private static readonly string[] _displayKeys = + [ + "aspectx", + "aspecty", + "displaytype", + "flipx", + "freq", + "hbend", + "hbstart", + "height", + "htotal", + "orientation", + "pixclock", + "refresh", + "rotate", + "screen", + "tag", + "vbend", + "vbstart", + "vtotal", + "width", + "x", + "y", + ]; + + /// + /// Known keys for Driver + /// + private static readonly string[] _driverKeys = + [ + "blit", + "cocktail", + "color", + "emulation", + "incomplete", + "nosoundhardware", + "palettesize", + "requiresartwork", + "savestate", + "sound", + "status", + "unofficial", + ]; + + /// + /// Known keys for Extension + /// + private static readonly string[] _extensionKeys = + [ + "name", + ]; + + /// + /// Known keys for Feature/PartFeature + /// + private static readonly string[] _featureKeys = + [ + "featuretype", + "name", + "overall", + "status", + "value", + ]; + + /// + /// Known keys for Header + /// + private static readonly string[] _headerKeys = + [ + "author", + "biosmode", + "build", + "category", + "comment", + "date", + "datversion", + "debug", + "description", + "email", + "emulatorversion", + "filename", + "forcemerging", + "forcenodump", + "forcepacking", + "forcezipping", + "header", + "headerskipper", + "homepage", + "id", + "imfolder", + "lockbiosmode", + "lockrommode", + "locksamplemode", + "mameconfig", + "name", + "notes", + "plugin", + "refname", + "rommode", + "romtitle", + "rootdir", + "samplemode", + "schemalocation", + "screenshotsheight", + "screenshotswidth", + "skipper", + "system", + "timestamp", + "type", + "url", + "version", + ]; + + /// + /// Known keys for Info + /// + private static readonly string[] _infoKeys = + [ + "name", + "value", + ]; + + /// + /// Known keys for Input + /// + private static readonly string[] _inputKeys = + [ + "buttons", + "coins", + "control", + "controlattr", + "players", + "service", + "tilt", + ]; + + /// + /// Known keys for Instance + /// + private static readonly string[] _instanceKeys = + [ + "name", + ]; + + /// + /// Known keys for Machine + /// + private static readonly string[] _machineKeys = + [ + "board", + "buttons", + "category", + "cloneof", + "comment", + "company", + "control", + "crc", + "country", + "description", + "developer", + "dirname", + "displaycount", + "displaytype", + "duplicateid", + "emulator", + "enabled", + "extra", + "favorite", + "genmsxid", + "genre", + "hash", + "history", + "id", + "im1crc", + "im2crc", + "imagenumber", + "isbios", + "isdevice", + "ismechanical", + "language", + "location", + "manufacturer", + "name", + "notes", + "playedcount", + "playedtime", + "players", + "publisher", + "ratings", + "rebuildto", + "relatedto", + "releasenumber", + "romof", + "rotation", + "runnable", + "sampleof", + "savetype", + "score", + "source", + "sourcefile", + "sourcerom", + "status", + "subgenre", + "supported", + "system", + "tags", + "titleid", + "type", + "url", + "year", + ]; + + /// + /// Known keys for Media + /// + private static readonly string[] _mediaKeys = + [ + "md5", + "name", + "sha1", + "sha256", + "spamsum", + ]; + + /// + /// Known keys for Original + /// + private static readonly string[] _originalKeys = + [ + "content", + "value", + ]; + + /// + /// Known keys for Part + /// + private static readonly string[] _partKeys = + [ + "interface", + "name", + ]; + + /// + /// Known keys for Port + /// + private static readonly string[] _portKeys = + [ + "tag", + ]; + + /// + /// Known keys for RamOption + /// + private static readonly string[] _ramOptionKeys = + [ + "content", + "default", + "name", + ]; + + /// + /// Known keys for Release + /// + private static readonly string[] _releaseKeys = + [ + "date", + "default", + "language", + "name", + "region", + ]; + + /// + /// Known keys for ReleaseDetails + /// + private static readonly string[] _releaseDetailsKeys = + [ + "appendtonumber", + "archivename", + "category", + "comment", + "date", + "dirname", + "group", + "id", + "nfocrc", + "nfoname", + "nfosize", + "origin", + "originalformat", + "region", + "rominfo", + "tool", + ]; + + /// + /// Known keys for Rom + /// + private static readonly string[] _romKeys = + [ + "album", + "alt_romname", + "alt_title", + "altromname", + "alttitle", + "artist", + "asr_detected_lang", + "asr_detected_lang_conf", + "asr_transcribed_lang", + "asrdetectedlang", + "asrdetectedlangconf", + "asrtranscribedlang", + "bios", + "bitrate", + "bittorrentmagnethash", + "btih", + "cloth_cover_detection_module_version", + "clothcoverdetectionmoduleversion", + "collection-catalog-number", + "collectioncatalognumber", + "comment", + "crc", + "crc16", + "crc32", + "crc64", + "creator", + "date", + "dispose", + "extension", + "filecount", + "fileisavailable", + "flags", + "format", + "header", + "height", + "hocr_char_to_word_hocr_version", + "hocr_char_to_word_module_version", + "hocr_fts_text_hocr_version", + "hocr_fts_text_module_version", + "hocr_pageindex_hocr_version", + "hocr_pageindex_module_version", + "hocrchartowordhocrversion", + "hocrchartowordmoduleversion", + "hocrftstexthocrversion", + "hocrftstextmoduleversion", + "hocrpageindexhocrversion", + "hocrpageindexmoduleversion", + "inverted", + "lastmodifiedtime", + "length", + "loadflag", + "matrix_number", + "matrixnumber", + "md2", + "md4", + "md5", + "mediatype", + "merge", + "mia", + "mtime", + "name", + "ocr", + "ocr_converted", + "ocr_detected_lang", + "ocr_detected_lang_conf", + "ocr_detected_script", + "ocr_detected_script_conf", + "ocr_module_version", + "ocr_parameters", + "offset", + "openmsxmediatype", + "openmsxtype", + "optional", + "original", + "pdf_module_version", + "pdfmoduleversion", + "preview-image", + "previewimage", + "publisher", + "region", + "remark", + "ripemd128", + "ripemd160", + "rotation", + "serial", + "sha1", + "sha256", + "sha384", + "sha512", + "size", + "soundonly", + "source", + "spamsum", + "start", + "status", + "summation", + "tesseractocr", + "tesseractocrconverted", + "tesseractocrdetectedlang", + "tesseractocrdetectedlangconf", + "tesseractocrdetectedscript", + "tesseractocrdetectedscriptconf", + "tesseractocrmoduleversion", + "tesseractocrparameters", + "title", + "track", + "value", + "whisper_asr_module_version", + "whisper_model_hash", + "whisper_model_name", + "whisper_version", + "whisperasrmoduleversion", + "whispermodelhash", + "whispermodelname", + "whisperversion", + "width", + "word_conf_0_10", + "word_conf_11_20", + "word_conf_21_30", + "word_conf_31_40", + "word_conf_41_50", + "word_conf_51_60", + "word_conf_61_70", + "word_conf_71_80", + "word_conf_81_90", + "word_conf_91_100", + "wordconfidenceinterval0to10", + "wordconfidenceinterval11to20", + "wordconfidenceinterval21to30", + "wordconfidenceinterval31to40", + "wordconfidenceinterval41to50", + "wordconfidenceinterval51to60", + "wordconfidenceinterval61to70", + "wordconfidenceinterval71to80", + "wordconfidenceinterval81to90", + "wordconfidenceinterval91to100", + "xxhash3128", + "xxhash364", + ]; + + /// + /// Known keys for Sample + /// + private static readonly string[] _sampleKeys = + [ + "name", + ]; + + /// + /// Known keys for Serials + /// + private static readonly string[] _serialsKeys = + [ + "boxbarcode", + "boxserial", + "chipserial", + "digitalserial1", + "digitalserial2", + "lockoutserial", + "mediaserial1", + "mediaserial2", + "mediaserial3", + "mediastamp", + "pcbserial", + "romchipserial1", + "romchipserial2", + "savechipserial", + ]; + + /// + /// Known keys for SharedFeat + /// + private static readonly string[] _sharedFeatKeys = + [ + "name", + "value", + ]; + + /// + /// Known keys for Slot + /// + private static readonly string[] _slotKeys = + [ + "name", + ]; + + /// + /// Known keys for SlotOption + /// + private static readonly string[] _slotOptionKeys = + [ + "default", + "devname", + "name", + ]; + + /// + /// Known keys for SoftwareList + /// + private static readonly string[] _softwareListKeys = + [ + "filter", + "name", + "status", + "tag", + ]; + + /// + /// Known keys for Sound + /// + private static readonly string[] _soundKeys = + [ + "channels", + ]; + + /// + /// Known keys for SourceDetails + /// + private static readonly string[] _sourceDetailsKeys = + [ + "appendtonumber", + "comment1", + "comment2", + "dumpdate", + "dumpdateinfo", + "dumper", + "id", + "link1", + "link1public", + "link2", + "link2public", + "link3", + "link3public", + "mediatitle", + "nodump", + "origin", + "originalformat", + "project", + "region", + "releasedate", + "releasedateinfo", + "rominfo", + "section", + "tool", + ]; + + /// + /// Known keys for Video + /// + private static readonly string[] _videoKeys = + [ + "aspectx", + "aspecty", + "displaytype", + "freq", + "height", + "orientation", + "refresh", + "rotate", + "screen", + "width", + "x", + "y", + ]; + + #endregion + + #endregion + /// /// Validating combined key constructor /// @@ -101,20 +918,15 @@ namespace SabreTools.Metadata.Filter /// private static bool ParseHeaderFilterId(ref string itemName, ref string fieldName) { - // Get the set of constants - var constants = TypeHelper.GetConstants(typeof(Header)); - if (constants is null) - return false; - - // Get if there's a match to the constant + // Get if there's a match to a property string localFieldName = fieldName; - string? constantMatch = Array.Find(constants, c => string.Equals(c, localFieldName, StringComparison.OrdinalIgnoreCase)); - if (constantMatch is null) + string? propertyMatch = Array.Find(_headerKeys, c => string.Equals(c, localFieldName, StringComparison.OrdinalIgnoreCase)); + if (propertyMatch is null) return false; // Return the sanitized ID - itemName = MetadataFile.HeaderKey; - fieldName = constantMatch; + itemName = "header"; + fieldName = propertyMatch.ToLowerInvariant(); return true; } @@ -123,20 +935,15 @@ namespace SabreTools.Metadata.Filter /// private static bool ParseMachineFilterId(ref string itemName, ref string fieldName) { - // Get the set of constants - var constants = TypeHelper.GetConstants(typeof(Machine)); - if (constants is null) - return false; - - // Get if there's a match to the constant + // Get if there's a match to a property string localFieldName = fieldName; - string? constantMatch = Array.Find(constants, c => string.Equals(c, localFieldName, StringComparison.OrdinalIgnoreCase)); - if (constantMatch is null) + string? propertyMatch = Array.Find(_machineKeys, c => string.Equals(c, localFieldName, StringComparison.OrdinalIgnoreCase)); + if (propertyMatch is null) return false; // Return the sanitized ID - itemName = MetadataFile.MachineKey; - fieldName = constantMatch; + itemName = "machine"; + fieldName = propertyMatch.ToLowerInvariant(); return true; } @@ -149,12 +956,17 @@ namespace SabreTools.Metadata.Filter if (string.Equals(itemName, "datitem", StringComparison.OrdinalIgnoreCase) || string.Equals(itemName, "item", StringComparison.OrdinalIgnoreCase)) { - // Get all item types - var itemTypes = TypeHelper.GetDatItemTypeNames(); + // Handle item type + if (string.Equals(fieldName, "type", StringComparison.OrdinalIgnoreCase)) + { + itemName = "item"; + fieldName = "type"; + return true; + } // If we get any matches string localFieldName = fieldName; - string? matchedType = Array.Find(itemTypes, t => DatItemContainsField(t, localFieldName)); + string? matchedType = Array.Find(_datItemTypeNames, t => DatItemContainsField(t, localFieldName)); if (matchedType is not null) { // Check for a matching field @@ -194,20 +1006,61 @@ namespace SabreTools.Metadata.Filter /// private static string? GetMatchingField(string itemName, string fieldName) { - // Get the correct item type - var itemType = TypeHelper.GetDatItemType(itemName.ToLowerInvariant()); - if (itemType is null) + // Get the set of properties + string[]? properties = itemName.ToLowerInvariant() switch + { + "adjuster" => _adjusterKeys, + "analog" => _analogKeys, + "archive" => _archiveKeys, + "biosset" => _biossetKeys, + "chip" => _chipKeys, + "condition" => _conditionKeys, + "configuration" => _configurationKeys, + "conflocation" => _confLocationKeys, + "confsetting" => _confSettingKeys, + "control" => _controlKeys, + "dataarea" => _dataAreaKeys, + "device" => _deviceKeys, + "deviceref" => _deviceRefKeys, + "diplocation" => _dipLocationKeys, + "dipswitch" => _dipSwitchKeys, + "dipvalue" => _dipValueKeys, + "disk" => _diskKeys, + "diskarea" => _diskAreaKeys, + "display" => _displayKeys, + "driver" => _driverKeys, + "extension" => _extensionKeys, + "feature" or "partfeature" => _featureKeys, + "game" or "machine" or "resource" or "set" => _machineKeys, + "header" => _headerKeys, + "info" => _infoKeys, + "input" => _inputKeys, + "instance" => _instanceKeys, + "media" => _mediaKeys, + "original" => _originalKeys, + "part" => _partKeys, + "port" => _portKeys, + "ramoption" => _ramOptionKeys, + "release" => _releaseKeys, + "releasedetails" => _releaseDetailsKeys, + "rom" => _romKeys, + "sample" => _sampleKeys, + "serials" => _serialsKeys, + "sharedfeat" => _sharedFeatKeys, + "slot" => _slotKeys, + "slotoption" => _slotOptionKeys, + "softwarelist" => _softwareListKeys, + "sound" => _soundKeys, + "sourcedetails" => _sourceDetailsKeys, + "video" => _videoKeys, + _ => null, + }; + if (properties is null) return null; - // Get the set of constants - var constants = TypeHelper.GetConstants(itemType); - if (constants is null) - return null; - - // Get if there's a match to the constant - string localFieldName = fieldName; - string? constantMatch = Array.Find(constants, c => string.Equals(c, localFieldName, StringComparison.OrdinalIgnoreCase)); - return constantMatch; + // Get if there's a match to a property + string? propertyMatch = Array.Find(properties, c => string.Equals(c, fieldName, StringComparison.OrdinalIgnoreCase)); + return propertyMatch?.ToLowerInvariant(); } } } diff --git a/SabreTools.Metadata.Filter/FilterObject.cs b/SabreTools.Metadata.Filter/FilterObject.cs index f0448b01..baeb6bb8 100644 --- a/SabreTools.Metadata.Filter/FilterObject.cs +++ b/SabreTools.Metadata.Filter/FilterObject.cs @@ -54,18 +54,18 @@ namespace SabreTools.Metadata.Filter #region Matching /// - /// Determine if a DictionaryBase object matches the key and value + /// Determine if a object matches the key and value /// - public bool Matches(DictionaryBase dictionaryBase) + public bool Matches(object obj) { return Operation switch { - Operation.Equals => MatchesEqual(dictionaryBase), - Operation.NotEquals => MatchesNotEqual(dictionaryBase), - Operation.GreaterThan => MatchesGreaterThan(dictionaryBase), - Operation.GreaterThanOrEqual => MatchesGreaterThanOrEqual(dictionaryBase), - Operation.LessThan => MatchesLessThan(dictionaryBase), - Operation.LessThanOrEqual => MatchesLessThanOrEqual(dictionaryBase), + Operation.Equals => MatchesEqual(obj), + Operation.NotEquals => MatchesNotEqual(obj), + Operation.GreaterThan => MatchesGreaterThan(obj), + Operation.GreaterThanOrEqual => MatchesGreaterThanOrEqual(obj), + Operation.LessThan => MatchesLessThan(obj), + Operation.LessThanOrEqual => MatchesLessThanOrEqual(obj), Operation.NONE => false, _ => false, @@ -75,14 +75,28 @@ namespace SabreTools.Metadata.Filter /// /// Determines if a value matches exactly /// - private bool MatchesEqual(DictionaryBase dictionaryBase) + private bool MatchesEqual(object obj) { - // If the key doesn't exist, we count it as null - if (!dictionaryBase.ContainsKey(Key.FieldName)) + // Special case for machine type + if (obj is Machine machine + && string.Equals(Key.ItemName, "machine", StringComparison.OrdinalIgnoreCase) + && string.Equals(Key.FieldName, "type", StringComparison.OrdinalIgnoreCase)) + { + return Value?.ToLowerInvariant() switch + { + "none" => machine.IsBios != true && machine.IsDevice != true && machine.IsMechanical != true, + "bios" => machine.IsBios == true, + "device" or "dev" => machine.IsDevice == true, + "mechanical" or "mech" => machine.IsMechanical == true, + _ => false, + }; + } + + // Process the check value + if (!GetCheckValue(obj, Key.FieldName, out string? checkValue)) return string.IsNullOrEmpty(Value); - // If the value in the dictionary is null - string? checkValue = dictionaryBase.ReadString(Key.FieldName); + // If a null value is expected if (checkValue is null) return string.IsNullOrEmpty(Value); @@ -118,14 +132,28 @@ namespace SabreTools.Metadata.Filter /// /// Determines if a value does not match exactly /// - private bool MatchesNotEqual(DictionaryBase dictionaryBase) + private bool MatchesNotEqual(object obj) { - // If the key doesn't exist, we count it as null - if (!dictionaryBase.ContainsKey(Key.FieldName)) - return !string.IsNullOrEmpty(Value); + // Special case for machine type + if (obj is Machine machine + && string.Equals(Key.ItemName, "machine", StringComparison.OrdinalIgnoreCase) + && string.Equals(Key.FieldName, "type", StringComparison.OrdinalIgnoreCase)) + { + return Value?.ToLowerInvariant() switch + { + "none" => machine.IsBios == true || machine.IsDevice == true || machine.IsMechanical == true, + "bios" => machine.IsBios != true, + "device" or "dev" => machine.IsDevice != true, + "mechanical" or "mech" => machine.IsMechanical != true, + _ => true, + }; + } - // If the value in the dictionary is null - string? checkValue = dictionaryBase.ReadString(Key.FieldName); + // Process the check value + if (!GetCheckValue(obj, Key.FieldName, out string? checkValue)) + return string.IsNullOrEmpty(Value); + + // If a null value is expected if (checkValue is null) return !string.IsNullOrEmpty(Value); @@ -161,14 +189,13 @@ namespace SabreTools.Metadata.Filter /// /// Determines if a value is strictly greater than /// - private bool MatchesGreaterThan(DictionaryBase dictionaryBase) + private bool MatchesGreaterThan(object obj) { - // If the key doesn't exist, we count it as null - if (!dictionaryBase.ContainsKey(Key.FieldName)) - return false; + // Process the check value + if (!GetCheckValue(obj, Key.FieldName, out string? checkValue)) + return string.IsNullOrEmpty(Value); - // If the value in the dictionary is null - string? checkValue = dictionaryBase.ReadString(Key.FieldName); + // Null is always failure if (checkValue is null) return false; @@ -194,14 +221,13 @@ namespace SabreTools.Metadata.Filter /// /// Determines if a value is greater than or equal /// - private bool MatchesGreaterThanOrEqual(DictionaryBase dictionaryBase) + private bool MatchesGreaterThanOrEqual(object obj) { - // If the key doesn't exist, we count it as null - if (!dictionaryBase.ContainsKey(Key.FieldName)) - return false; + // Process the check value + if (!GetCheckValue(obj, Key.FieldName, out string? checkValue)) + return string.IsNullOrEmpty(Value); - // If the value in the dictionary is null - string? checkValue = dictionaryBase.ReadString(Key.FieldName); + // Null is always failure if (checkValue is null) return false; @@ -227,14 +253,13 @@ namespace SabreTools.Metadata.Filter /// /// Determines if a value is strictly less than /// - private bool MatchesLessThan(DictionaryBase dictionaryBase) + private bool MatchesLessThan(object obj) { - // If the key doesn't exist, we count it as null - if (!dictionaryBase.ContainsKey(Key.FieldName)) - return false; + // Process the check value + if (!GetCheckValue(obj, Key.FieldName, out string? checkValue)) + return string.IsNullOrEmpty(Value); - // If the value in the dictionary is null - string? checkValue = dictionaryBase.ReadString(Key.FieldName); + // Null is always failure if (checkValue is null) return false; @@ -260,14 +285,13 @@ namespace SabreTools.Metadata.Filter /// /// Determines if a value is less than or equal /// - private bool MatchesLessThanOrEqual(DictionaryBase dictionaryBase) + private bool MatchesLessThanOrEqual(object obj) { - // If the key doesn't exist, we count it as null - if (!dictionaryBase.ContainsKey(Key.FieldName)) - return false; + // Process the check value + if (!GetCheckValue(obj, Key.FieldName, out string? checkValue)) + return string.IsNullOrEmpty(Value); - // If the value in the dictionary is null - string? checkValue = dictionaryBase.ReadString(Key.FieldName); + // Null is always failure if (checkValue is null) return false; @@ -339,6 +363,73 @@ namespace SabreTools.Metadata.Filter return false; } + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(object obj, string fieldName, out string? checkValue) + { + // Special case for item type + if (obj is DatItem datItem + && string.Equals(fieldName, "type", StringComparison.OrdinalIgnoreCase)) + { + checkValue = datItem.ItemType.AsStringValue(); + return true; + } + + switch (obj) + { + case Adjuster item: return GetCheckValue(item, fieldName, out checkValue); + case Analog item: return GetCheckValue(item, fieldName, out checkValue); + case Archive item: return GetCheckValue(item, fieldName, out checkValue); + case BiosSet item: return GetCheckValue(item, fieldName, out checkValue); + case Chip item: return GetCheckValue(item, fieldName, out checkValue); + case Condition item: return GetCheckValue(item, fieldName, out checkValue); + case Configuration item: return GetCheckValue(item, fieldName, out checkValue); + case ConfLocation item: return GetCheckValue(item, fieldName, out checkValue); + case ConfSetting item: return GetCheckValue(item, fieldName, out checkValue); + case Control item: return GetCheckValue(item, fieldName, out checkValue); + case DataArea item: return GetCheckValue(item, fieldName, out checkValue); + case Device item: return GetCheckValue(item, fieldName, out checkValue); + case DeviceRef item: return GetCheckValue(item, fieldName, out checkValue); + case DipLocation item: return GetCheckValue(item, fieldName, out checkValue); + case DipSwitch item: return GetCheckValue(item, fieldName, out checkValue); + case DipValue item: return GetCheckValue(item, fieldName, out checkValue); + case Disk item: return GetCheckValue(item, fieldName, out checkValue); + case DiskArea item: return GetCheckValue(item, fieldName, out checkValue); + case Display item: return GetCheckValue(item, fieldName, out checkValue); + case Driver item: return GetCheckValue(item, fieldName, out checkValue); + case Extension item: return GetCheckValue(item, fieldName, out checkValue); + case Feature item: return GetCheckValue(item, fieldName, out checkValue); + case Header item: return GetCheckValue(item, fieldName, out checkValue); + case Info item: return GetCheckValue(item, fieldName, out checkValue); + case Input item: return GetCheckValue(item, fieldName, out checkValue); + case Instance item: return GetCheckValue(item, fieldName, out checkValue); + case Machine item: return GetCheckValue(item, fieldName, out checkValue); + case Media item: return GetCheckValue(item, fieldName, out checkValue); + case Original item: return GetCheckValue(item, fieldName, out checkValue); + case Part item: return GetCheckValue(item, fieldName, out checkValue); + case Port item: return GetCheckValue(item, fieldName, out checkValue); + case RamOption item: return GetCheckValue(item, fieldName, out checkValue); + case Release item: return GetCheckValue(item, fieldName, out checkValue); + case ReleaseDetails item: return GetCheckValue(item, fieldName, out checkValue); + case Rom item: return GetCheckValue(item, fieldName, out checkValue); + case Sample item: return GetCheckValue(item, fieldName, out checkValue); + case Serials item: return GetCheckValue(item, fieldName, out checkValue); + case SharedFeat item: return GetCheckValue(item, fieldName, out checkValue); + case Slot item: return GetCheckValue(item, fieldName, out checkValue); + case SlotOption item: return GetCheckValue(item, fieldName, out checkValue); + case SoftwareList item: return GetCheckValue(item, fieldName, out checkValue); + case Sound item: return GetCheckValue(item, fieldName, out checkValue); + case SourceDetails item: return GetCheckValue(item, fieldName, out checkValue); + case Video item: return GetCheckValue(item, fieldName, out checkValue); + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + /// /// Derive an operation from the input string, if possible /// @@ -407,5 +498,2027 @@ namespace SabreTools.Metadata.Filter } #endregion + + #region Per-Type Check Value Retrieval + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Adjuster obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "default": + checkValue = obj.Default.FromYesNo(); + return true; + case "name": + checkValue = obj.Name; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Analog obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "mask": + checkValue = obj.Mask; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Archive obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "additional": + checkValue = obj.Additional; + return true; + case "adult": + checkValue = obj.Adult is null ? null : (obj.Adult == true ? "1" : "0"); + return true; + case "alt": + checkValue = obj.Alt is null ? null : (obj.Alt == true ? "1" : "0"); + return true; + case "bios": + checkValue = obj.Bios is null ? null : (obj.Bios == true ? "1" : "0"); + return true; + case "categories": + checkValue = obj.Categories; + return true; + case "clone": + case "clonetag": + checkValue = obj.CloneTag; + return true; + case "complete": + checkValue = obj.Complete is null ? null : (obj.Complete == true ? "1" : "0"); + return true; + case "dat": + checkValue = obj.Dat is null ? null : (obj.Dat == true ? "1" : "0"); + return true; + case "datternote": + checkValue = obj.DatterNote; + return true; + case "description": + checkValue = obj.Description; + return true; + case "devstatus": + checkValue = obj.DevStatus; + return true; + case "gameid1": + checkValue = obj.GameId1; + return true; + case "gameid2": + checkValue = obj.GameId2; + return true; + case "langchecked": + checkValue = obj.LangChecked; + return true; + case "languages": + checkValue = obj.Languages; + return true; + case "licensed": + checkValue = obj.Licensed is null ? null : (obj.Licensed == true ? "1" : "0"); + return true; + case "listed": + checkValue = obj.Listed is null ? null : (obj.Listed == true ? "1" : "0"); + return true; + case "mergeof": + checkValue = obj.MergeOf; + return true; + case "mergename": + checkValue = obj.MergeName; + return true; + case "name": + checkValue = obj.Name; + return true; + case "namealt": + checkValue = obj.NameAlt; + return true; + case "number": + checkValue = obj.Number; + return true; + case "physical": + checkValue = obj.Physical is null ? null : (obj.Physical == true ? "1" : "0"); + return true; + case "pirate": + checkValue = obj.Pirate is null ? null : (obj.Pirate == true ? "1" : "0"); + return true; + case "private": + checkValue = obj.Private is null ? null : (obj.Private == true ? "1" : "0"); + return true; + case "region": + checkValue = obj.Region; + return true; + case "regparent": + checkValue = obj.RegParent; + return true; + case "showlang": + checkValue = obj.ShowLang is null ? null : (obj.ShowLang == true ? "1" : "0"); + return true; + case "special1": + checkValue = obj.Special1; + return true; + case "special2": + checkValue = obj.Special2; + return true; + case "stickynote": + checkValue = obj.StickyNote; + return true; + case "version1": + checkValue = obj.Version1; + return true; + case "version2": + checkValue = obj.Version2; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(BiosSet obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "default": + checkValue = obj.Default.FromYesNo(); + return true; + case "description": + checkValue = obj.Description; + return true; + case "name": + checkValue = obj.Name; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Chip obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "chiptype": + checkValue = obj.ChipType?.AsStringValue(); + return true; + case "clock": + checkValue = obj.Clock?.ToString(); + return true; + case "flags": + checkValue = obj.Flags; + return true; + case "name": + checkValue = obj.Name; + return true; + case "soundonly": + checkValue = obj.SoundOnly.FromYesNo(); + return true; + case "tag": + checkValue = obj.Tag; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Condition obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "mask": + checkValue = obj.Mask; + return true; + case "relation": + checkValue = obj.Relation?.AsStringValue(); + return true; + case "tag": + checkValue = obj.Tag; + return true; + case "value": + checkValue = obj.Value; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Configuration obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "mask": + checkValue = obj.Mask; + return true; + case "name": + checkValue = obj.Name; + return true; + case "tag": + checkValue = obj.Tag; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(ConfLocation obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "inverted": + checkValue = obj.Inverted.FromYesNo(); + return true; + case "name": + checkValue = obj.Name; + return true; + case "number": + checkValue = obj.Number?.ToString(); + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(ConfSetting obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "default": + checkValue = obj.Default.FromYesNo(); + return true; + case "name": + checkValue = obj.Name; + return true; + case "value": + checkValue = obj.Value; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Control obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "buttons": + checkValue = obj.Buttons?.ToString(); + return true; + case "controltype": + checkValue = obj.ControlType?.AsStringValue(); + return true; + case "keydelta": + checkValue = obj.KeyDelta?.ToString(); + return true; + case "maximum": + checkValue = obj.Maximum?.ToString(); + return true; + case "minimum": + checkValue = obj.Minimum?.ToString(); + return true; + case "player": + checkValue = obj.Player?.ToString(); + return true; + case "reqbuttons": + checkValue = obj.ReqButtons?.ToString(); + return true; + case "reverse": + checkValue = obj.Reverse.FromYesNo(); + return true; + case "sensitivity": + checkValue = obj.Sensitivity?.ToString(); + return true; + case "ways": + checkValue = obj.Ways; + return true; + case "ways2": + checkValue = obj.Ways2; + return true; + case "ways3": + checkValue = obj.Ways3; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(DataArea obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "endianness": + checkValue = obj.Endianness?.AsStringValue(); + return true; + case "name": + checkValue = obj.Name; + return true; + case "size": + checkValue = obj.Size?.ToString(); + return true; + case "width": + checkValue = obj.Width?.AsStringValue(); + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Device obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "devicetype": + checkValue = obj.DeviceType?.AsStringValue(); + return true; + case "fixedimage": + checkValue = obj.FixedImage; + return true; + case "interface": + checkValue = obj.Interface; + return true; + case "mandatory": + checkValue = obj.Mandatory.FromYesNo(); + return true; + case "tag": + checkValue = obj.Tag; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(DeviceRef obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "name": + checkValue = obj.Name; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(DipLocation obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "inverted": + checkValue = obj.Inverted.FromYesNo(); + return true; + case "name": + checkValue = obj.Name; + return true; + case "number": + checkValue = obj.Number?.ToString(); + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(DipSwitch obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "default": + checkValue = obj.Default.FromYesNo(); + return true; + case "mask": + checkValue = obj.Mask; + return true; + case "name": + checkValue = obj.Name; + return true; + case "tag": + checkValue = obj.Tag; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(DipValue obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "default": + checkValue = obj.Default.FromYesNo(); + return true; + case "name": + checkValue = obj.Name; + return true; + case "value": + checkValue = obj.Value; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Disk obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "flags": + checkValue = obj.Flags; + return true; + case "index": + checkValue = obj.Index?.ToString(); + return true; + case "md5": + checkValue = obj.MD5; + return true; + case "merge": + checkValue = obj.Merge; + return true; + case "name": + checkValue = obj.Name; + return true; + case "optional": + checkValue = obj.Optional.FromYesNo(); + return true; + case "region": + checkValue = obj.Region; + return true; + case "sha1": + checkValue = obj.SHA1; + return true; + case "status": + checkValue = obj.Status?.AsStringValue(); + return true; + case "writable": + checkValue = obj.Writable.FromYesNo(); + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(DiskArea obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "name": + checkValue = obj.Name; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Display obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "aspectx": + checkValue = obj.AspectX?.ToString(); + return true; + case "aspecty": + checkValue = obj.AspectY?.ToString(); + return true; + case "displaytype": + case "screen": + checkValue = obj.DisplayType?.AsStringValue(); + return true; + case "flipx": + checkValue = obj.FlipX.FromYesNo(); + return true; + case "hbend": + checkValue = obj.HBEnd?.ToString(); + return true; + case "hbstart": + checkValue = obj.HBStart?.ToString(); + return true; + case "height": + case "y": + checkValue = obj.Height?.ToString(); + return true; + case "htotal": + checkValue = obj.HTotal?.ToString(); + return true; + case "pixclock": + checkValue = obj.PixClock?.ToString(); + return true; + case "refresh": + case "freq": + checkValue = obj.Refresh?.ToString(); + return true; + case "rotate": + case "orientation": + checkValue = obj.Rotate?.AsStringValue(); + return true; + case "tag": + checkValue = obj.Tag; + return true; + case "vbend": + checkValue = obj.VBEnd?.ToString(); + return true; + case "vbstart": + checkValue = obj.VBStart?.ToString(); + return true; + case "vtotal": + checkValue = obj.VTotal?.ToString(); + return true; + case "width": + case "x": + checkValue = obj.Width?.ToString(); + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Driver obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "blit": + checkValue = obj.Blit?.AsStringValue(); + return true; + case "cocktail": + checkValue = obj.Cocktail?.AsStringValue(); + return true; + case "color": + checkValue = obj.Color?.AsStringValue(); + return true; + case "emulation": + checkValue = obj.Emulation?.AsStringValue(); + return true; + case "incomplete": + checkValue = obj.Incomplete.FromYesNo(); + return true; + case "nosoundhardware": + checkValue = obj.NoSoundHardware.FromYesNo(); + return true; + case "palettesize": + checkValue = obj.PaletteSize; + return true; + case "requiresartwork": + checkValue = obj.RequiresArtwork.FromYesNo(); + return true; + case "savestate": + checkValue = obj.SaveState?.AsStringValue(); + return true; + case "sound": + checkValue = obj.Sound?.AsStringValue(); + return true; + case "status": + checkValue = obj.Status?.AsStringValue(); + return true; + case "unofficial": + checkValue = obj.Unofficial.FromYesNo(); + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Extension obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "name": + checkValue = obj.Name; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Feature obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "featuretype": + checkValue = obj.FeatureType?.AsStringValue(); + return true; + case "name": + checkValue = obj.Name; + return true; + case "overall": + checkValue = obj.Overall?.AsStringValue(); + return true; + case "status": + checkValue = obj.Status?.AsStringValue(); + return true; + case "value": + checkValue = obj.Value; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Header obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "author": + checkValue = obj.Author; + return true; + case "biosmode": + checkValue = obj.BiosMode.AsStringValue(); + return true; + case "build": + checkValue = obj.Build; + return true; + // Header.CanOpen is intentionally skipped + case "category": + checkValue = obj.Category; + return true; + case "comment": + checkValue = obj.Comment; + return true; + case "date": + checkValue = obj.Date; + return true; + case "datversion": + checkValue = obj.DatVersion; + return true; + case "debug": + checkValue = obj.Debug.FromYesNo(); + return true; + case "description": + checkValue = obj.Description; + return true; + case "email": + checkValue = obj.Email; + return true; + case "emulatorversion": + checkValue = obj.EmulatorVersion; + return true; + case "filename": + checkValue = obj.FileName; + return true; + case "forcemerging": + checkValue = obj.ForceMerging.AsStringValue(); + return true; + case "forcenodump": + checkValue = obj.ForceNodump.AsStringValue(); + return true; + case "forcepacking": + checkValue = obj.ForcePacking.AsStringValue(); + return true; + case "forcezipping": + checkValue = obj.ForceZipping.FromYesNo(); + return true; + // Header.HeaderRow is intentionally skipped + case "header": + case "headerskipper": + case "skipper": + checkValue = obj.HeaderSkipper; + return true; + case "homepage": + checkValue = obj.Homepage; + return true; + case "id": + checkValue = obj.Id; + return true; + // Header.Images is intentionally skipped + case "imfolder": + checkValue = obj.ImFolder; + return true; + // Header.Infos is intentionally skipped + case "lockbiosmode": + checkValue = obj.LockBiosMode.FromYesNo(); + return true; + case "lockrommode": + checkValue = obj.LockRomMode.FromYesNo(); + return true; + case "locksamplemode": + checkValue = obj.LockSampleMode.FromYesNo(); + return true; + case "mameconfig": + checkValue = obj.MameConfig; + return true; + case "name": + checkValue = obj.Name; + return true; + // Header.NewDat is intentionally skipped + case "notes": + checkValue = obj.Notes; + return true; + case "plugin": + checkValue = obj.Plugin; + return true; + case "refname": + checkValue = obj.RefName; + return true; + case "rommode": + checkValue = obj.RomMode.AsStringValue(); + return true; + case "romtitle": + checkValue = obj.RomTitle; + return true; + case "rootdir": + checkValue = obj.RootDir; + return true; + case "samplemode": + checkValue = obj.SampleMode.AsStringValue(); + return true; + case "schemalocation": + checkValue = obj.SchemaLocation; + return true; + case "screenshotsheight": + checkValue = obj.ScreenshotsHeight; + return true; + case "screenshotswidth": + checkValue = obj.ScreenshotsWidth; + return true; + // Header.Search is intentionally skipped + case "system": + checkValue = obj.System; + return true; + case "timestamp": + checkValue = obj.Timestamp; + return true; + case "type": + checkValue = obj.Type; + return true; + case "url": + checkValue = obj.Url; + return true; + case "version": + checkValue = obj.Version; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Info obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "name": + checkValue = obj.Name; + return true; + case "value": + checkValue = obj.Value; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Input obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "buttons": + checkValue = obj.Buttons?.ToString(); + return true; + case "coins": + checkValue = obj.Coins?.ToString(); + return true; + case "control": + case "controlattr": + checkValue = obj.ControlAttr; + return true; + case "players": + checkValue = obj.Players?.ToString(); + return true; + case "service": + checkValue = obj.Service.FromYesNo(); + return true; + case "tilt": + checkValue = obj.Tilt.FromYesNo(); + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Instance obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "name": + checkValue = obj.Name; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Machine obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "board": + checkValue = obj.Board; + return true; + case "buttons": + checkValue = obj.Buttons; + return true; + case "category": + checkValue = obj.Category is null ? null : string.Join(", ", obj.Category); + return true; + case "cloneof": + checkValue = obj.CloneOf; + return true; + case "cloneofid": + checkValue = obj.CloneOfId; + return true; + case "comment": + checkValue = obj.Comment is null ? null : string.Join(", ", obj.Comment); + return true; + case "company": + checkValue = obj.Company; + return true; + case "control": + checkValue = obj.Control; + return true; + case "crc": + checkValue = obj.CRC; + return true; + case "country": + checkValue = obj.Country; + return true; + case "description": + checkValue = obj.Description; + return true; + case "developer": + checkValue = obj.Developer; + return true; + case "dirname": + checkValue = obj.DirName; + return true; + case "displaycount": + checkValue = obj.DisplayCount; + return true; + case "displaytype": + checkValue = obj.DisplayType; + return true; + case "duplicateid": + checkValue = obj.DuplicateID; + return true; + case "emulator": + checkValue = obj.Emulator; + return true; + case "enabled": + checkValue = obj.Enabled; + return true; + case "extra": + checkValue = obj.Extra; + return true; + case "favorite": + checkValue = obj.Favorite; + return true; + case "genmsxid": + checkValue = obj.GenMSXID; + return true; + case "genre": + checkValue = obj.Genre; + return true; + case "hash": + checkValue = obj.Hash; + return true; + case "history": + checkValue = obj.History; + return true; + case "id": + checkValue = obj.Id; + return true; + case "im1crc": + checkValue = obj.Im1CRC; + return true; + case "im2crc": + checkValue = obj.Im2CRC; + return true; + case "imagenumber": + checkValue = obj.ImageNumber; + return true; + case "isbios": + checkValue = obj.IsBios.FromYesNo(); + return true; + case "isdevice": + checkValue = obj.IsDevice.FromYesNo(); + return true; + case "ismechanical": + checkValue = obj.IsMechanical.FromYesNo(); + return true; + case "language": + checkValue = obj.Language; + return true; + case "location": + checkValue = obj.Location; + return true; + case "manufacturer": + checkValue = obj.Manufacturer; + return true; + case "name": + checkValue = obj.Name; + return true; + case "notes": + checkValue = obj.Notes; + return true; + case "playedcount": + checkValue = obj.PlayedCount; + return true; + case "playedtime": + checkValue = obj.PlayedTime; + return true; + case "players": + checkValue = obj.Players; + return true; + case "publisher": + checkValue = obj.Publisher; + return true; + case "ratings": + checkValue = obj.Ratings; + return true; + case "rebuildto": + checkValue = obj.RebuildTo; + return true; + case "relatedto": + checkValue = obj.RelatedTo; + return true; + case "releasenumber": + checkValue = obj.ReleaseNumber; + return true; + case "romof": + checkValue = obj.RomOf; + return true; + case "rotation": + checkValue = obj.Rotation; + return true; + case "runnable": + checkValue = obj.Runnable?.AsStringValue(); + return true; + case "sampleof": + checkValue = obj.SampleOf; + return true; + case "savetype": + checkValue = obj.SaveType; + return true; + case "score": + checkValue = obj.Score; + return true; + case "source": + checkValue = obj.Source; + return true; + case "sourcefile": + checkValue = obj.SourceFile; + return true; + case "sourcerom": + checkValue = obj.SourceRom; + return true; + case "status": + checkValue = obj.Status; + return true; + case "subgenre": + checkValue = obj.Subgenre; + return true; + case "supported": + checkValue = obj.Supported?.AsStringValue(); + return true; + case "system": + checkValue = obj.System; + return true; + case "tags": + checkValue = obj.Tags; + return true; + case "titleid": + checkValue = obj.TitleID; + return true; + case "url": + checkValue = obj.Url; + return true; + case "year": + checkValue = obj.Year; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Media obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "md5": + checkValue = obj.MD5; + return true; + case "name": + checkValue = obj.Name; + return true; + case "sha1": + checkValue = obj.SHA1; + return true; + case "sha256": + checkValue = obj.SHA256; + return true; + case "spamsum": + checkValue = obj.SpamSum; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Original obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "content": + checkValue = obj.Content; + return true; + case "value": + checkValue = obj.Value.FromYesNo(); + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Part obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "interface": + checkValue = obj.Interface; + return true; + case "name": + checkValue = obj.Name; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Port obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "tag": + checkValue = obj.Tag; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(RamOption obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "content": + checkValue = obj.Content; + return true; + case "default": + checkValue = obj.Default.FromYesNo(); + return true; + case "name": + checkValue = obj.Name; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Release obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "date": + checkValue = obj.Date; + return true; + case "default": + checkValue = obj.Default.FromYesNo(); + return true; + case "language": + checkValue = obj.Language; + return true; + case "name": + checkValue = obj.Name; + return true; + case "region": + checkValue = obj.Region; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(ReleaseDetails obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "appendtonumber": + checkValue = obj.AppendToNumber; + return true; + case "archivename": + checkValue = obj.ArchiveName; + return true; + case "category": + checkValue = obj.Category; + return true; + case "comment": + checkValue = obj.Comment; + return true; + case "date": + checkValue = obj.Date; + return true; + case "dirname": + checkValue = obj.DirName; + return true; + case "group": + checkValue = obj.Group; + return true; + case "id": + checkValue = obj.Id; + return true; + case "nfocrc": + checkValue = obj.NfoCRC; + return true; + case "nfoname": + checkValue = obj.NfoName; + return true; + case "nfosize": + checkValue = obj.NfoSize; + return true; + case "origin": + checkValue = obj.Origin; + return true; + case "originalformat": + checkValue = obj.OriginalFormat; + return true; + case "region": + checkValue = obj.Region; + return true; + case "rominfo": + checkValue = obj.RomInfo; + return true; + case "tool": + checkValue = obj.Tool; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Rom obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "album": + checkValue = obj.Album; + return true; + case "alt_romname": + case "altromname": + checkValue = obj.AltRomname; + return true; + case "alt_title": + case "alttitle": + checkValue = obj.AltTitle; + return true; + case "artist": + checkValue = obj.Artist; + return true; + case "asr_detected_lang": + case "asrdetectedlang": + checkValue = obj.ASRDetectedLang; + return true; + case "asr_detected_lang_conf": + case "asrdetectedlangconf": + checkValue = obj.ASRDetectedLangConf; + return true; + case "asr_transcribed_lang": + case "asrtranscribedlang": + checkValue = obj.ASRTranscribedLang; + return true; + case "bios": + checkValue = obj.Bios; + return true; + case "bitrate": + checkValue = obj.Bitrate; + return true; + case "btih": + case "bittorrentmagnethash": + checkValue = obj.BitTorrentMagnetHash; + return true; + case "cloth_cover_detection_module_version": + case "clothcoverdetectionmoduleversion": + checkValue = obj.ClothCoverDetectionModuleVersion; + return true; + case "collection-catalog-number": + case "collectioncatalognumber": + checkValue = obj.CollectionCatalogNumber; + return true; + case "comment": + checkValue = obj.Comment; + return true; + case "crc16": + checkValue = obj.CRC16; + return true; + case "crc": + case "crc32": + checkValue = obj.CRC32; + return true; + case "crc64": + checkValue = obj.CRC64; + return true; + case "creator": + checkValue = obj.Creator; + return true; + case "date": + checkValue = obj.Date; + return true; + case "dispose": + checkValue = obj.Dispose.FromYesNo(); + return true; + case "extension": + checkValue = obj.Extension; + return true; + case "filecount": + checkValue = obj.FileCount?.ToString(); + return true; + case "fileisavailable": + checkValue = obj.FileIsAvailable.FromYesNo(); + return true; + case "flags": + checkValue = obj.Flags; + return true; + case "format": + checkValue = obj.Format; + return true; + case "header": + checkValue = obj.Header; + return true; + case "height": + checkValue = obj.Height; + return true; + case "hocr_char_to_word_hocr_version": + case "hocrchartowordhocrversion": + checkValue = obj.hOCRCharToWordhOCRVersion; + return true; + case "hocr_char_to_word_module_version": + case "hocrchartowordmoduleversion": + checkValue = obj.hOCRCharToWordModuleVersion; + return true; + case "hocr_fts_text_hocr_version": + case "hocrftstexthocrversion": + checkValue = obj.hOCRFtsTexthOCRVersion; + return true; + case "hocr_fts_text_module_version": + case "hocrftstextmoduleversion": + checkValue = obj.hOCRFtsTextModuleVersion; + return true; + case "hocr_pageindex_hocr_version": + case "hocrpageindexhocrversion": + checkValue = obj.hOCRPageIndexhOCRVersion; + return true; + case "hocr_pageindex_module_version": + case "hocrpageindexmoduleversion": + checkValue = obj.hOCRPageIndexModuleVersion; + return true; + case "inverted": + checkValue = obj.Inverted.FromYesNo(); + return true; + case "mtime": + case "lastmodifiedtime": + checkValue = obj.LastModifiedTime; + return true; + case "length": + checkValue = obj.Length; + return true; + case "loadflag": + checkValue = obj.LoadFlag?.AsStringValue(); + return true; + case "matrix_number": + case "matrixnumber": + checkValue = obj.MatrixNumber; + return true; + case "md2": + checkValue = obj.MD2; + return true; + case "md4": + checkValue = obj.MD4; + return true; + case "md5": + checkValue = obj.MD5; + return true; + case "mediatype": + case "openmsxmediatype": + checkValue = obj.OpenMSXMediaType?.AsStringValue(); + return true; + case "merge": + checkValue = obj.Merge; + return true; + case "mia": + checkValue = obj.MIA.FromYesNo(); + return true; + case "name": + checkValue = obj.Name; + return true; + case "offset": + checkValue = obj.Offset; + return true; + case "openmsxtype": + checkValue = obj.OpenMSXType; + return true; + case "optional": + checkValue = obj.Optional.FromYesNo(); + return true; + case "original": + checkValue = obj.Original; + return true; + case "pdf_module_version": + case "pdfmoduleversion": + checkValue = obj.PDFModuleVersion; + return true; + case "preview-image": + case "previewimage": + checkValue = obj.PreviewImage; + return true; + case "publisher": + checkValue = obj.Publisher; + return true; + case "region": + checkValue = obj.Region; + return true; + case "remark": + checkValue = obj.Remark; + return true; + case "ripemd128": + checkValue = obj.RIPEMD128; + return true; + case "ripemd160": + checkValue = obj.RIPEMD160; + return true; + case "rotation": + checkValue = obj.Rotation; + return true; + case "serial": + checkValue = obj.Serial; + return true; + case "sha1": + checkValue = obj.SHA1; + return true; + case "sha256": + checkValue = obj.SHA256; + return true; + case "sha384": + checkValue = obj.SHA384; + return true; + case "sha512": + checkValue = obj.SHA512; + return true; + case "size": + checkValue = obj.Size?.ToString(); + return true; + case "soundonly": + checkValue = obj.SoundOnly.FromYesNo(); + return true; + case "source": + checkValue = obj.Source; + return true; + case "spamsum": + checkValue = obj.SpamSum; + return true; + case "start": + checkValue = obj.Start; + return true; + case "status": + checkValue = obj.Status?.AsStringValue(); + return true; + case "summation": + checkValue = obj.Summation; + return true; + case "ocr": + case "tesseractocr": + checkValue = obj.TesseractOCR; + return true; + case "ocr_converted": + case "tesseractocrconverted": + checkValue = obj.TesseractOCRConverted; + return true; + case "ocr_detected_lang": + case "tesseractocrdetectedlang": + checkValue = obj.TesseractOCRDetectedLang; + return true; + case "ocr_detected_lang_conf": + case "tesseractocrdetectedlangconf": + checkValue = obj.TesseractOCRDetectedLangConf; + return true; + case "ocr_detected_script": + case "tesseractocrdetectedscript": + checkValue = obj.TesseractOCRDetectedScript; + return true; + case "ocr_detected_script_conf": + case "tesseractocrdetectedscriptconf": + checkValue = obj.TesseractOCRDetectedScriptConf; + return true; + case "ocr_module_version": + case "tesseractocrmoduleversion": + checkValue = obj.TesseractOCRModuleVersion; + return true; + case "ocr_parameters": + case "tesseractocrparameters": + checkValue = obj.TesseractOCRParameters; + return true; + case "title": + checkValue = obj.Title; + return true; + case "track": + checkValue = obj.Track; + return true; + case "value": + checkValue = obj.Value; + return true; + case "whisper_asr_module_version": + case "whisperasrmoduleversion": + checkValue = obj.WhisperASRModuleVersion; + return true; + case "whisper_model_hash": + case "whispermodelhash": + checkValue = obj.WhisperModelHash; + return true; + case "whisper_model_name": + case "whispermodelname": + checkValue = obj.WhisperModelName; + return true; + case "whisper_version": + case "whisperversion": + checkValue = obj.WhisperVersion; + return true; + case "width": + checkValue = obj.Width; + return true; + case "word_conf_0_10": + case "wordconfidenceinterval0to10": + checkValue = obj.WordConfidenceInterval0To10; + return true; + case "word_conf_11_20": + case "wordconfidenceinterval11to20": + checkValue = obj.WordConfidenceInterval11To20; + return true; + case "word_conf_21_30": + case "wordconfidenceinterval21to30": + checkValue = obj.WordConfidenceInterval21To30; + return true; + case "word_conf_31_40": + case "wordconfidenceinterval31to40": + checkValue = obj.WordConfidenceInterval31To40; + return true; + case "word_conf_41_50": + case "wordconfidenceinterval41to50": + checkValue = obj.WordConfidenceInterval41To50; + return true; + case "word_conf_51_60": + case "wordconfidenceinterval51to60": + checkValue = obj.WordConfidenceInterval51To60; + return true; + case "word_conf_61_70": + case "wordconfidenceinterval61to70": + checkValue = obj.WordConfidenceInterval61To70; + return true; + case "word_conf_71_80": + case "wordconfidenceinterval71to80": + checkValue = obj.WordConfidenceInterval71To80; + return true; + case "word_conf_81_90": + case "wordconfidenceinterval81to90": + checkValue = obj.WordConfidenceInterval81To90; + return true; + case "word_conf_91_100": + case "wordconfidenceinterval91to100": + checkValue = obj.WordConfidenceInterval91To100; + return true; + case "xxhash364": + checkValue = obj.xxHash364; + return true; + case "xxhash3128": + checkValue = obj.xxHash3128; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Sample obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "name": + checkValue = obj.Name; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Serials obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "boxbarcode": + checkValue = obj.BoxBarcode; + return true; + case "boxserial": + checkValue = obj.BoxSerial; + return true; + case "chipserial": + checkValue = obj.ChipSerial; + return true; + case "digitalserial1": + checkValue = obj.DigitalSerial1; + return true; + case "digitalserial2": + checkValue = obj.DigitalSerial2; + return true; + case "lockoutserial": + checkValue = obj.LockoutSerial; + return true; + case "mediaserial1": + checkValue = obj.MediaSerial1; + return true; + case "mediaserial2": + checkValue = obj.MediaSerial2; + return true; + case "mediaserial3": + checkValue = obj.MediaSerial3; + return true; + case "mediastamp": + checkValue = obj.MediaStamp; + return true; + case "pcbserial": + checkValue = obj.PCBSerial; + return true; + case "romchipserial1": + checkValue = obj.RomChipSerial1; + return true; + case "romchipserial2": + checkValue = obj.RomChipSerial2; + return true; + case "savechipserial": + checkValue = obj.SaveChipSerial; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(SharedFeat obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "name": + checkValue = obj.Name; + return true; + case "value": + checkValue = obj.Value; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Slot obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "name": + checkValue = obj.Name; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(SlotOption obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "default": + checkValue = obj.Default.FromYesNo(); + return true; + case "devname": + checkValue = obj.DevName; + return true; + case "name": + checkValue = obj.Name; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(SoftwareList obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "filter": + checkValue = obj.Filter; + return true; + case "name": + checkValue = obj.Name; + return true; + case "status": + checkValue = obj.Status?.AsStringValue(); + return true; + case "tag": + checkValue = obj.Tag; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Sound obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "channels": + checkValue = obj.Channels?.ToString(); + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(SourceDetails obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "appendtonumber": + checkValue = obj.AppendToNumber; + return true; + case "comment1": + checkValue = obj.Comment1; + return true; + case "comment2": + checkValue = obj.Comment2; + return true; + case "dumpdate": + checkValue = obj.DumpDate; + return true; + case "dumpdateinfo": + checkValue = obj.DumpDateInfo is null ? null : (obj.DumpDateInfo == true ? "1" : "0"); + return true; + case "dumper": + checkValue = obj.Dumper; + return true; + case "id": + checkValue = obj.Id; + return true; + case "link1": + checkValue = obj.Link1; + return true; + case "link1public": + checkValue = obj.Link1Public is null ? null : (obj.Link1Public == true ? "1" : "0"); + return true; + case "link2": + checkValue = obj.Link2; + return true; + case "link2public": + checkValue = obj.Link2Public is null ? null : (obj.Link2Public == true ? "1" : "0"); + return true; + case "link3": + checkValue = obj.Link3; + return true; + case "link3public": + checkValue = obj.Link3Public is null ? null : (obj.Link3Public == true ? "1" : "0"); + return true; + case "mediatitle": + checkValue = obj.MediaTitle; + return true; + case "nodump": + checkValue = obj.Nodump is null ? null : (obj.Nodump == true ? "1" : "0"); + return true; + case "origin": + checkValue = obj.Origin; + return true; + case "originalformat": + checkValue = obj.OriginalFormat; + return true; + case "project": + checkValue = obj.Project; + return true; + case "region": + checkValue = obj.Region; + return true; + case "releasedate": + checkValue = obj.ReleaseDate; + return true; + case "releasedateinfo": + checkValue = obj.ReleaseDateInfo is null ? null : (obj.ReleaseDateInfo == true ? "1" : "0"); + return true; + case "rominfo": + checkValue = obj.RomInfo; + return true; + case "section": + checkValue = obj.Section; + return true; + case "tool": + checkValue = obj.Tool; + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + /// + /// Get the check value for a field + /// + private static bool GetCheckValue(Video obj, string fieldName, out string? checkValue) + { + switch (fieldName) + { + case "aspectx": + checkValue = obj.AspectX?.ToString(); + return true; + case "aspecty": + checkValue = obj.AspectY?.ToString(); + return true; + case "height": + case "y": + checkValue = obj.Height?.ToString(); + return true; + case "orientation": + case "rotate": + checkValue = obj.Orientation?.AsStringValue(useSecond: true); + return true; + case "refresh": + case "freq": + checkValue = obj.Refresh?.ToString(); + return true; + case "displaytype": + case "screen": + checkValue = obj.Screen?.AsStringValue(); + return true; + case "width": + case "x": + checkValue = obj.Width?.ToString(); + return true; + + // If the key doesn't exist, we count it as null + default: + checkValue = null; + return false; + } + } + + #endregion } } diff --git a/SabreTools.Metadata.Filter/FilterRunner.cs b/SabreTools.Metadata.Filter/FilterRunner.cs index 14bf5a83..2bc9fef5 100644 --- a/SabreTools.Metadata.Filter/FilterRunner.cs +++ b/SabreTools.Metadata.Filter/FilterRunner.cs @@ -17,7 +17,11 @@ namespace SabreTools.Metadata.Filter /// /// Cached item type names for filter selection /// - private readonly string[] _datItemTypeNames = TypeHelper.GetDatItemTypeNames(); +#if NET5_0_OR_GREATER + private static readonly string[] _datItemTypeNames = Enum.GetNames(); +#else + private static readonly string[] _datItemTypeNames = Enum.GetNames(typeof(ItemType)); +#endif public FilterRunner(FilterObject[] filters) { @@ -30,15 +34,15 @@ namespace SabreTools.Metadata.Filter } /// - /// Run filtering on a DictionaryBase item + /// Run filtering on an item /// - public bool Run(DictionaryBase dictionaryBase) + public bool Run(object obj) { - string? itemName = dictionaryBase switch + string? itemName = obj switch { - Header => MetadataFile.HeaderKey, - Machine => MetadataFile.MachineKey, - DatItem => TypeHelper.GetXmlRootAttributeElementName(dictionaryBase.GetType()), + Header => "header", + Machine => "machine", + DatItem datItem => datItem.ItemType.ToString(), _ => null, }; @@ -52,11 +56,11 @@ namespace SabreTools.Metadata.Filter // Skip filters not applicable to the item if (filterKey.StartsWith("item.") && Array.IndexOf(_datItemTypeNames, itemName) == -1) continue; - else if (!filterKey.StartsWith("item.") && !filterKey.StartsWith(itemName)) + else if (!filterKey.StartsWith("item.") && !filterKey.StartsWith(itemName, StringComparison.OrdinalIgnoreCase)) continue; // If we don't get a match, it's a failure - bool matchOne = Filters[filterKey].Matches(dictionaryBase); + bool matchOne = Filters[filterKey].Matches(obj); if (!matchOne) return false; } @@ -72,25 +76,15 @@ namespace SabreTools.Metadata.Filter // Get the key as a string string key = filter.Key.ToString(); - // Special case for machine types - if (filter.Key.ItemName == MetadataFile.MachineKey && filter.Key.FieldName == Machine.IsBiosKey) - key = $"{MetadataFile.MachineKey}.COMBINEDTYPE"; - else if (filter.Key.ItemName == MetadataFile.MachineKey && filter.Key.FieldName == Machine.IsDeviceKey) - key = $"{MetadataFile.MachineKey}.COMBINEDTYPE"; - else if (filter.Key.ItemName == MetadataFile.MachineKey && filter.Key.FieldName == Machine.IsMechanicalKey) - key = $"{MetadataFile.MachineKey}.COMBINEDTYPE"; - // Set the expected group type GroupType groupType = GroupType.OR; // Special case for size - if (filter.Key.ItemName == "item" && filter.Key.FieldName == DataArea.SizeKey) + if (filter.Key.ItemName == "item" && filter.Key.FieldName == "size") groupType = GroupType.AND; - else if (filter.Key.ItemName == "item" && filter.Key.FieldName == Rom.SizeKey) + else if (filter.Key.ItemName == "dataarea" && filter.Key.FieldName == "size") groupType = GroupType.AND; - if (filter.Key.ItemName == "dataarea" && filter.Key.FieldName == DataArea.SizeKey) - groupType = GroupType.AND; - else if (filter.Key.ItemName == "rom" && filter.Key.FieldName == Rom.SizeKey) + else if (filter.Key.ItemName == "rom" && filter.Key.FieldName == "size") groupType = GroupType.AND; // Ensure the key exists diff --git a/SabreTools.Metadata.Filter/SabreTools.Metadata.Filter.csproj b/SabreTools.Metadata.Filter/SabreTools.Metadata.Filter.csproj index db5f8b40..f2f804c6 100644 --- a/SabreTools.Metadata.Filter/SabreTools.Metadata.Filter.csproj +++ b/SabreTools.Metadata.Filter/SabreTools.Metadata.Filter.csproj @@ -31,7 +31,8 @@ - + + diff --git a/SabreTools.Metadata.Test/DictionaryBaseExtensionsTests.cs b/SabreTools.Metadata.Test/DictionaryBaseExtensionsTests.cs deleted file mode 100644 index cf320aad..00000000 --- a/SabreTools.Metadata.Test/DictionaryBaseExtensionsTests.cs +++ /dev/null @@ -1,1135 +0,0 @@ -using SabreTools.Data.Models.Metadata; -using Xunit; - -namespace SabreTools.Metadata.Test -{ - public class DictionaryBaseExtensionsTests - { - #region EqualTo - - [Fact] - public void EqualTo_MismatchedTypes_False() - { - DictionaryBase self = new Disk(); - DictionaryBase other = new Rom(); - - bool actual = self.EqualTo(other); - Assert.False(actual); - } - - [Fact] - public void EqualTo_Disk_Nodumps_True() - { - DictionaryBase self = new Disk - { - [Disk.StatusKey] = "nodump", - [Disk.NameKey] = "XXXXXX", - [Disk.MD5Key] = string.Empty, - [Disk.SHA1Key] = string.Empty, - }; - DictionaryBase other = new Disk - { - [Disk.StatusKey] = "NODUMP", - [Disk.NameKey] = "XXXXXX", - [Disk.MD5Key] = string.Empty, - [Disk.SHA1Key] = string.Empty, - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Disk_Mismatch_False() - { - DictionaryBase self = new Disk - { - [Disk.NameKey] = "XXXXXX", - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = string.Empty, - }; - DictionaryBase other = new Disk - { - [Disk.NameKey] = "XXXXXX", - [Disk.MD5Key] = string.Empty, - [Disk.SHA1Key] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.False(actual); - } - - [Fact] - public void EqualTo_Disk_PartialMD5_True() - { - DictionaryBase self = new Disk - { - [Disk.NameKey] = "XXXXXX1", - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = string.Empty, - }; - DictionaryBase other = new Disk - { - [Disk.NameKey] = "XXXXXX2", - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Disk_PartialSHA1_True() - { - DictionaryBase self = new Disk - { - [Disk.NameKey] = "XXXXXX1", - [Disk.MD5Key] = string.Empty, - [Disk.SHA1Key] = "XXXXXX", - }; - DictionaryBase other = new Disk - { - [Disk.NameKey] = "XXXXXX2", - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Disk_FullMatch_True() - { - DictionaryBase self = new Disk - { - [Disk.NameKey] = "XXXXXX1", - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", - }; - DictionaryBase other = new Disk - { - [Disk.NameKey] = "XXXXXX2", - [Disk.MD5Key] = "XXXXXX", - [Disk.SHA1Key] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Media_Mismatch_False() - { - DictionaryBase self = new Media - { - [Media.NameKey] = "XXXXXX", - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = string.Empty, - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Media - { - [Media.NameKey] = "XXXXXX", - [Media.MD5Key] = string.Empty, - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = string.Empty, - [Media.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.False(actual); - } - - [Fact] - public void EqualTo_Media_PartialMD5_True() - { - DictionaryBase self = new Media - { - [Media.NameKey] = "XXXXXX", - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = string.Empty, - [Media.SHA256Key] = string.Empty, - [Media.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Media - { - [Media.NameKey] = "XXXXXX", - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Media_PartialSHA1_True() - { - DictionaryBase self = new Media - { - [Media.NameKey] = "XXXXXX", - [Media.MD5Key] = string.Empty, - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = string.Empty, - [Media.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Media - { - [Media.NameKey] = "XXXXXX", - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Media_PartialSHA256_True() - { - DictionaryBase self = new Media - { - [Media.NameKey] = "XXXXXX", - [Media.MD5Key] = string.Empty, - [Media.SHA1Key] = string.Empty, - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Media - { - [Media.NameKey] = "XXXXXX", - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Media_PartialSpamSum_True() - { - DictionaryBase self = new Media - { - [Media.NameKey] = "XXXXXX", - [Media.MD5Key] = string.Empty, - [Media.SHA1Key] = string.Empty, - [Media.SHA256Key] = string.Empty, - [Media.SpamSumKey] = "XXXXXX", - }; - DictionaryBase other = new Media - { - [Media.NameKey] = "XXXXXX", - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Media_FullMatch_True() - { - DictionaryBase self = new Media - { - [Media.NameKey] = "XXXXXX", - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = "XXXXXX", - }; - DictionaryBase other = new Media - { - [Media.NameKey] = "XXXXXX", - [Media.MD5Key] = "XXXXXX", - [Media.SHA1Key] = "XXXXXX", - [Media.SHA256Key] = "XXXXXX", - [Media.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_Nodumps_True() - { - DictionaryBase self = new Rom - { - [Rom.StatusKey] = "nodump", - [Rom.NameKey] = "XXXXXX", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Rom - { - [Rom.StatusKey] = "NODUMP", - [Rom.NameKey] = "XXXXXX", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_Mismatch_False() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = "XXXXXX", - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = string.Empty, - }; - - bool actual = self.EqualTo(other); - Assert.False(actual); - } - - [Fact] - public void EqualTo_Rom_NoSelfSize_True() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX1", - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX2", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_NoOtherSize_True() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX1", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX2", - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_PartialCRC16_True() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX1", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX2", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_PartialCRC_True() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX1", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX2", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_PartialCRC64_True() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX1", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX2", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_PartialMD2_True() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX1", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX2", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_PartialMD4_True() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX1", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX2", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_PartialMD5_True() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX1", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX2", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_PartialRIPEMD128_True() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX1", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX2", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_PartialRIPEMD160_True() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX1", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX2", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_PartialSHA1_True() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX1", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX2", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_PartialSHA256_True() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX1", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX2", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_PartialSHA384_True() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX1", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX2", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_PartialSHA512_True() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX1", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = string.Empty, - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX2", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_PartialSpamSum_True() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX1", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = string.Empty, - [Rom.CRCKey] = string.Empty, - [Rom.CRC64Key] = string.Empty, - [Rom.MD2Key] = string.Empty, - [Rom.MD4Key] = string.Empty, - [Rom.MD5Key] = string.Empty, - [Rom.RIPEMD128Key] = string.Empty, - [Rom.RIPEMD160Key] = string.Empty, - [Rom.SHA1Key] = string.Empty, - [Rom.SHA256Key] = string.Empty, - [Rom.SHA384Key] = string.Empty, - [Rom.SHA512Key] = string.Empty, - [Rom.SpamSumKey] = "XXXXXX", - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX2", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Rom_FullMatch_True() - { - DictionaryBase self = new Rom - { - [Rom.NameKey] = "XXXXXX1", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - DictionaryBase other = new Rom - { - [Rom.NameKey] = "XXXXXX2", - [Rom.SizeKey] = 12345, - [Rom.CRC16Key] = "XXXXXX", - [Rom.CRCKey] = "XXXXXX", - [Rom.CRC64Key] = "XXXXXX", - [Rom.MD2Key] = "XXXXXX", - [Rom.MD4Key] = "XXXXXX", - [Rom.MD5Key] = "XXXXXX", - [Rom.RIPEMD128Key] = "XXXXXX", - [Rom.RIPEMD160Key] = "XXXXXX", - [Rom.SHA1Key] = "XXXXXX", - [Rom.SHA256Key] = "XXXXXX", - [Rom.SHA384Key] = "XXXXXX", - [Rom.SHA512Key] = "XXXXXX", - [Rom.SpamSumKey] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Other_BothEmpty_True() - { - DictionaryBase self = new Sample(); - DictionaryBase other = new Sample(); - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - [Fact] - public void EqualTo_Other_MismatchedCount_False() - { - DictionaryBase self = new Sample - { - ["KEY1"] = "XXXXXX", - }; - DictionaryBase other = new Sample - { - ["KEY1"] = "XXXXXX", - ["KEY2"] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.False(actual); - } - - [Fact] - public void EqualTo_Other_MismatchedKeys_False() - { - DictionaryBase self = new Sample - { - ["KEY1"] = "XXXXXX", - }; - DictionaryBase other = new Sample - { - ["KEY2"] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.False(actual); - } - - [Fact] - public void EqualTo_Other_MismatchedValues_False() - { - DictionaryBase self = new Sample - { - ["KEY1"] = "XXXXXX", - }; - DictionaryBase other = new Sample - { - ["KEY1"] = "ZZZZZZ", - }; - - bool actual = self.EqualTo(other); - Assert.False(actual); - } - - [Fact] - public void EqualTo_Other_Matching_True() - { - DictionaryBase self = new Sample - { - ["KEY1"] = "XXXXXX", - }; - DictionaryBase other = new Sample - { - ["KEY1"] = "XXXXXX", - }; - - bool actual = self.EqualTo(other); - Assert.True(actual); - } - - #endregion - } -} diff --git a/SabreTools.Metadata.Test/ModelBackedItemTests.cs b/SabreTools.Metadata.Test/ModelBackedItemTests.cs deleted file mode 100644 index eb86e79d..00000000 --- a/SabreTools.Metadata.Test/ModelBackedItemTests.cs +++ /dev/null @@ -1,317 +0,0 @@ -using SabreTools.Data.Models.Metadata; -using Xunit; - -namespace SabreTools.Metadata.Test -{ - public class ModelBackedItemTests - { - #region Private Testing Classes - - /// - /// Testing implementation of DictionaryBase - /// - private class TestDictionaryBase : DictionaryBase - { - public const string NameKey = "__NAME__"; - } - - /// - /// Testing implementation of ModelBackedItem - /// - private class TestModelBackedItem : ModelBackedItem - { - #region Comparision Methods - - /// - public override bool Equals(ModelBackedItem? other) - { - // If other is null - if (other is null) - return false; - - // If the type is mismatched - if (other is not TestModelBackedItem otherItem) - return false; - - // Compare internal models - return _internal.EqualTo(otherItem._internal); - } - - /// - public override bool Equals(ModelBackedItem? other) - { - // If other is null - if (other is null) - return false; - - // If the type is mismatched - if (other is not TestModelBackedItem otherItem) - return false; - - // Compare internal models - return _internal.EqualTo(otherItem._internal); - } - - #endregion - } - - /// - /// Alternate testing implementation of ModelBackedItem - /// - private class TestModelAltBackedItem : ModelBackedItem - { - #region Comparision Methods - - /// - public override bool Equals(ModelBackedItem? other) - { - // If other is null - if (other is null) - return false; - - // If the type is mismatched - if (other is not TestModelAltBackedItem otherItem) - return false; - - // Compare internal models - return _internal.EqualTo(otherItem._internal); - } - - /// - public override bool Equals(ModelBackedItem? other) - { - // If other is null - if (other is null) - return false; - - // If the type is mismatched - if (other is not TestModelAltBackedItem otherItem) - return false; - - // Compare internal models - return _internal.EqualTo(otherItem._internal); - } - - #endregion - } - - #endregion - - #region Equals - - [Fact] - public void Equals_NullOther_False() - { - ModelBackedItem self = new TestModelBackedItem(); - ModelBackedItem? other = null; - - bool actual = self.Equals(other); - Assert.False(actual); - } - - [Fact] - public void Equals_MismatchedType_False() - { - ModelBackedItem self = new TestModelBackedItem(); - ModelBackedItem? other = new TestModelAltBackedItem(); - - bool actual = self.Equals(other); - Assert.False(actual); - } - - [Fact] - public void Equals_MismatchedTypeAlt_False() - { - ModelBackedItem self = new TestModelAltBackedItem(); - ModelBackedItem? other = new TestModelBackedItem(); - - bool actual = self.Equals(other); - Assert.False(actual); - } - - [Fact] - public void Equals_DifferentModels_False() - { - ModelBackedItem self = new TestModelBackedItem(); - self.Write(TestDictionaryBase.NameKey, "self"); - - ModelBackedItem? other = new TestModelBackedItem(); - other.Write(TestDictionaryBase.NameKey, "other"); - - bool actual = self.Equals(other); - Assert.False(actual); - } - - [Fact] - public void Equals_EqualModels_True() - { - ModelBackedItem self = new TestModelBackedItem(); - self.Write(TestDictionaryBase.NameKey, "name"); - - ModelBackedItem? other = new TestModelBackedItem(); - other.Write(TestDictionaryBase.NameKey, "name"); - - bool actual = self.Equals(other); - Assert.True(actual); - } - - #endregion - - #region Remove - - [Fact] - public void Remove_NullItem_False() - { - TestModelBackedItem? modelBackedItem = null; - string? fieldName = TestDictionaryBase.NameKey; - bool? actual = modelBackedItem?.Remove(fieldName); - Assert.Null(actual); - } - - [Fact] - public void Remove_EmptyFieldName_False() - { - var modelBackedItem = new TestModelBackedItem(); - string? fieldName = string.Empty; - bool actual = modelBackedItem.Remove(fieldName); - Assert.False(actual); - } - - [Fact] - public void Remove_MissingKey_True() - { - var modelBackedItem = new TestModelBackedItem(); - string? fieldName = TestDictionaryBase.NameKey; - bool actual = modelBackedItem.Remove(fieldName); - Assert.True(actual); - Assert.Null(modelBackedItem.ReadString(fieldName)); - } - - [Fact] - public void Remove_ValidKey_True() - { - var modelBackedItem = new TestModelBackedItem(); - modelBackedItem.Write(TestDictionaryBase.NameKey, "value"); - string? fieldName = TestDictionaryBase.NameKey; - bool actual = modelBackedItem.Remove(fieldName); - Assert.True(actual); - Assert.Null(modelBackedItem.ReadString(fieldName)); - } - - #endregion - - #region Replace - - [Fact] - public void Replace_NullFrom_False() - { - TestModelBackedItem? from = null; - var to = new TestModelBackedItem(); - string? fieldName = TestDictionaryBase.NameKey; - bool actual = to.Replace(from, fieldName); - Assert.False(actual); - } - - [Fact] - public void Replace_NullTo_False() - { - TestModelBackedItem? from = null; - TestModelBackedItem? to = new TestModelBackedItem(); - string? fieldName = TestDictionaryBase.NameKey; - bool actual = to.Replace(from, fieldName); - Assert.False(actual); - } - - [Fact] - public void Replace_EmptyFieldName_False() - { - TestModelBackedItem? from = new TestModelBackedItem(); - TestModelBackedItem? to = new TestModelBackedItem(); - string? fieldName = string.Empty; - bool actual = to.Replace(from, fieldName); - Assert.False(actual); - } - - [Fact] - public void Replace_MissingKey_False() - { - TestModelBackedItem? from = new TestModelBackedItem(); - TestModelBackedItem? to = new TestModelBackedItem(); - string? fieldName = TestDictionaryBase.NameKey; - bool actual = to.Replace(from, fieldName); - Assert.False(actual); - } - - [Fact] - public void Replace_ValidKey_True() - { - TestModelBackedItem? from = new TestModelBackedItem(); - from.Write(TestDictionaryBase.NameKey, "value"); - TestModelBackedItem? to = new TestModelBackedItem(); - string? fieldName = TestDictionaryBase.NameKey; - bool actual = to.Replace(from, fieldName); - Assert.True(actual); - Assert.Equal("value", to.ReadString(TestDictionaryBase.NameKey)); - } - - #endregion - - #region WriteWithValidation - - [Fact] - public void WriteWithValidation_NullItem_False() - { - TestModelBackedItem? modelBackedItem = null; - string? fieldName = TestDictionaryBase.NameKey; - object value = "value"; - bool? actual = modelBackedItem?.WriteWithValidation(fieldName, value); - Assert.Null(actual); - } - - [Fact] - public void WriteWithValidation_EmptyFieldName_False() - { - TestModelBackedItem? modelBackedItem = new TestModelBackedItem(); - string? fieldName = string.Empty; - object value = "value"; - bool actual = modelBackedItem.WriteWithValidation(fieldName, value); - Assert.False(actual); - } - - [Fact] - public void WriteWithValidation_MissingKey_False() - { - TestModelBackedItem? modelBackedItem = new TestModelBackedItem(); - string? fieldName = Rom.SHA1Key; - object value = "value"; - bool actual = modelBackedItem.WriteWithValidation(fieldName, value); - Assert.False(actual); - } - - [Fact] - public void WriteWithValidation_InvalidKey_True() - { - TestModelBackedItem? modelBackedItem = new TestModelBackedItem(); - modelBackedItem.Write(TestDictionaryBase.NameKey, "old"); - string? fieldName = "INVALID"; - object value = "value"; - bool actual = modelBackedItem.WriteWithValidation(fieldName, value); - Assert.False(actual); - Assert.Null(modelBackedItem.ReadString(fieldName)); - } - - [Fact] - public void WriteWithValidation_ValidKey_True() - { - TestModelBackedItem? modelBackedItem = new TestModelBackedItem(); - modelBackedItem.Write(TestDictionaryBase.NameKey, "old"); - string? fieldName = TestDictionaryBase.NameKey; - object value = "value"; - bool actual = modelBackedItem.WriteWithValidation(fieldName, value); - Assert.True(actual); - Assert.Equal(value, modelBackedItem.ReadString(fieldName)); - } - - #endregion - } -} diff --git a/SabreTools.Metadata.Test/SabreTools.Metadata.Test.csproj b/SabreTools.Metadata.Test/SabreTools.Metadata.Test.csproj deleted file mode 100644 index 805e3d58..00000000 --- a/SabreTools.Metadata.Test/SabreTools.Metadata.Test.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - net8.0;net9.0;net10.0 - false - latest - enable - - - - - - - - - - - - - - \ No newline at end of file diff --git a/SabreTools.Metadata/DictionaryBaseExtensions.cs b/SabreTools.Metadata/DictionaryBaseExtensions.cs deleted file mode 100644 index 0fe77c02..00000000 --- a/SabreTools.Metadata/DictionaryBaseExtensions.cs +++ /dev/null @@ -1,252 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using SabreTools.Data.Extensions; -using SabreTools.Data.Models.Metadata; - -namespace SabreTools.Metadata -{ - public static class DictionaryBaseExtensions - { - #region Equality Checking - - /// - /// Check equality of two DictionaryBase objects - /// - public static bool EqualTo(this DictionaryBase self, DictionaryBase other) - { - // Check types first - if (self.GetType() != other.GetType()) - return false; - - // Check based on the item type -#if NETCOREAPP || NETSTANDARD2_0_OR_GREATER - return (self, other) switch - { - (Disk diskSelf, Disk diskOther) => EqualsImpl(diskSelf, diskOther), - (Media mediaSelf, Media mediaOther) => EqualsImpl(mediaSelf, mediaOther), - (Rom romSelf, Rom romOther) => EqualsImpl(romSelf, romOther), - _ => EqualsImpl(self, other), - }; -#else - if (self is Disk diskSelf && other is Disk diskOther) - return EqualsImpl(diskSelf, diskOther); - else if (self is Media mediaSelf && other is Media mediaOther) - return EqualsImpl(mediaSelf, mediaOther); - else if (self is Rom romSelf && other is Rom romOther) - return EqualsImpl(romSelf, romOther); - else - return EqualsImpl(self, other); -#endif - } - - /// - /// Check equality of two DictionaryBase objects - /// - private static bool EqualsImpl(this DictionaryBase self, DictionaryBase other) - { - // If the number of key-value pairs doesn't match, they can't match - if (self.Count != other.Count) - return false; - - // If any keys are missing on either side, they can't match - var selfKeys = new HashSet(self.Keys); - var otherKeys = new HashSet(other.Keys); - if (!selfKeys.SetEquals(otherKeys)) - return false; - - // Check all pairs to see if they're equal - foreach (var kvp in self) - { -#if NETCOREAPP || NETSTANDARD2_0_OR_GREATER - switch (kvp.Value, other[kvp.Key]) - { - case (string selfString, string otherString): - if (!string.Equals(selfString, otherString, StringComparison.OrdinalIgnoreCase)) - return false; - break; - - case (ModelBackedItem selfMbi, ModelBackedItem otherMbi): - if (!selfMbi.Equals(otherMbi)) - return false; - break; - - case (DictionaryBase selfDb, DictionaryBase otherDb): - if (!selfDb.Equals(otherDb)) - return false; - break; - - // TODO: Make this case-insensitive - case (string[] selfStrArr, string[] otherStrArr): - if (selfStrArr.Length != otherStrArr.Length) - return false; - if (selfStrArr.Except(otherStrArr).Any()) - return false; - if (otherStrArr.Except(selfStrArr).Any()) - return false; - break; - - // TODO: Fix the logic here for real equality - case (DictionaryBase[] selfDbArr, DictionaryBase[] otherDbArr): - if (selfDbArr.Length != otherDbArr.Length) - return false; - if (selfDbArr.Except(otherDbArr).Any()) - return false; - if (otherDbArr.Except(selfDbArr).Any()) - return false; - break; - - default: - // Handle cases where a null is involved - if (kvp.Value is null && other[kvp.Key] is null) - return true; - else if (kvp.Value is null && other[kvp.Key] is not null) - return false; - else if (kvp.Value is not null && other[kvp.Key] is null) - return false; - - // Try to rely on type hashes - else if (kvp.Value!.GetHashCode() != other[kvp.Key]!.GetHashCode()) - return false; - - break; - } -#else - if (kvp.Value is string selfString && other[kvp.Key] is string otherString) - { - if (!string.Equals(selfString, otherString, StringComparison.OrdinalIgnoreCase)) - return false; - } - else if (kvp.Value is ModelBackedItem selfMbi && other[kvp.Key] is ModelBackedItem otherMbi) - { - if (!selfMbi.Equals(otherMbi)) - return false; - } - else if (kvp.Value is DictionaryBase selfDb && other[kvp.Key] is DictionaryBase otherDb) - { - if (!selfDb.Equals(otherDb)) - return false; - } - else if (kvp.Value is string[] selfStrArr && other[kvp.Key] is string[] otherStrArr) - { - // TODO: Make this case-insensitive - if (selfStrArr.Length != otherStrArr.Length) - return false; - if (selfStrArr.Except(otherStrArr).Any()) - return false; - if (otherStrArr.Except(selfStrArr).Any()) - return false; - } - else if (kvp.Value is DictionaryBase[] selfDbArr && other[kvp.Key] is DictionaryBase[] otherDbArr) - { - // TODO: Fix the logic here for real equality - if (selfDbArr.Length != otherDbArr.Length) - return false; - if (selfDbArr.Except(otherDbArr).Any()) - return false; - if (otherDbArr.Except(selfDbArr).Any()) - return false; - } - else - { - // Handle cases where a null is involved - if (kvp.Value is null && other[kvp.Key] is null) - return true; - else if (kvp.Value is null && other[kvp.Key] is not null) - return false; - else if (kvp.Value is not null && other[kvp.Key] is null) - return false; - - // Try to rely on type hashes - else if (kvp.Value!.GetHashCode() != other[kvp.Key]!.GetHashCode()) - return false; - } -#endif - } - - return true; - } - - /// - /// Check equality of two Disk objects - /// - private static bool EqualsImpl(this Disk self, Disk other) - { - string? selfStatus = self.ReadString(Disk.StatusKey); - string? otherStatus = other.ReadString(Disk.StatusKey); - - string? selfName = self.ReadString(Disk.NameKey); - string? otherName = other.ReadString(Disk.NameKey); - - // If all hashes are empty but they're both nodump and the names match, then they're dupes - if (string.Equals(selfStatus, "nodump", StringComparison.OrdinalIgnoreCase) - && string.Equals(otherStatus, "nodump", StringComparison.OrdinalIgnoreCase) - && string.Equals(selfName, otherName, StringComparison.OrdinalIgnoreCase) - && !self.HasHashes() - && !other.HasHashes()) - { - return true; - } - - // If we get a partial match - if (self.HashMatch(other)) - return true; - - // All other cases fail - return false; - } - - /// - /// Check equality of two Media objects - /// - private static bool EqualsImpl(this Media self, Media other) - { - // If we get a partial match - if (self.HashMatch(other)) - return true; - - // All other cases fail - return false; - } - - /// - /// Check equality of two Rom objects - /// - private static bool EqualsImpl(this Rom self, Rom other) - { - string? selfStatus = self.ReadString(Rom.StatusKey); - string? otherStatus = other.ReadString(Rom.StatusKey); - - string? selfName = self.ReadString(Rom.NameKey); - string? otherName = other.ReadString(Rom.NameKey); - - long? selfSize = self.ReadLong(Rom.SizeKey); - long? otherSize = other.ReadLong(Rom.SizeKey); - - // If all hashes are empty but they're both nodump and the names match, then they're dupes - if (string.Equals(selfStatus, "nodump", StringComparison.OrdinalIgnoreCase) - && string.Equals(otherStatus, "nodump", StringComparison.OrdinalIgnoreCase) - && string.Equals(selfName, otherName, StringComparison.OrdinalIgnoreCase) - && !self.HasHashes() - && !other.HasHashes()) - { - return true; - } - - // If we have a file that has no known size, rely on the hashes only - if (selfSize is null && self.HashMatch(other)) - return true; - else if (otherSize is null && self.HashMatch(other)) - return true; - - // If we get a partial match - if (selfSize == otherSize && self.HashMatch(other)) - return true; - - // All other cases fail - return false; - } - - #endregion - } -} diff --git a/SabreTools.Metadata/ModelBackedItem.cs b/SabreTools.Metadata/ModelBackedItem.cs deleted file mode 100644 index de5e7cdf..00000000 --- a/SabreTools.Metadata/ModelBackedItem.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; - -namespace SabreTools.Metadata -{ - /// - /// Represents an item that's backed by a DictionaryBase item - /// - public abstract class ModelBackedItem : IEquatable - { - #region Comparision Methods - - /// - public abstract bool Equals(ModelBackedItem? other); - - #endregion - } -} diff --git a/SabreTools.Metadata/ModelBackedItemT.cs b/SabreTools.Metadata/ModelBackedItemT.cs deleted file mode 100644 index cd7fd26f..00000000 --- a/SabreTools.Metadata/ModelBackedItemT.cs +++ /dev/null @@ -1,137 +0,0 @@ -using System; -using System.Xml.Serialization; -using Newtonsoft.Json; - -namespace SabreTools.Metadata -{ - /// - /// Represents an item that's backed by a DictionaryBase item - /// - public abstract class ModelBackedItem : ModelBackedItem, IEquatable> where T : Data.Models.Metadata.DictionaryBase - { - /// - /// Internal model wrapped by this DatItem - /// - [JsonIgnore, XmlIgnore] - protected T _internal; - - #region Constructors - - public ModelBackedItem() - { - _internal = Activator.CreateInstance(); - } - - #endregion - - #region Accessors - - /// - /// Get the value from a field based on the type provided - /// - /// Type of the value to get from the internal model - /// Field to retrieve - /// Value from the field, if possible - public U? Read(string fieldName) - => _internal.Read(fieldName); - - /// - /// Get the value from a field based on the type provided - /// - /// Field to retrieve - /// Value from the field, if possible - public bool? ReadBool(string fieldName) - => _internal.ReadBool(fieldName); - - /// - /// Get the value from a field based on the type provided - /// - /// Field to retrieve - /// Value from the field, if possible - public double? ReadDouble(string fieldName) - => _internal.ReadDouble(fieldName); - - /// - /// Get the value from a field based on the type provided - /// - /// Field to retrieve - /// Value from the field, if possible - public long? ReadLong(string fieldName) - => _internal.ReadLong(fieldName); - - /// - /// Get the value from a field based on the type provided - /// - /// Field to retrieve - /// Value from the field, if possible - public string? ReadString(string fieldName) - => _internal.ReadString(fieldName); - - /// - /// Get the value from a field based on the type provided - /// - /// Field to retrieve - /// Value from the field, if possible - public string[]? ReadStringArray(string fieldName) - => _internal.ReadStringArray(fieldName); - - /// - /// Set the value from a field based on the type provided - /// - /// Type of the value to set in the internal model - /// Field to set - /// Value to set - /// True if the value was set, false otherwise - public bool Write(string fieldName, U? value) - => _internal.Write(fieldName, value); - - /// - /// Set a field from the backing item validating the field is expected - /// - /// TODO: Figure out how to add this to DictionaryBase - public bool WriteWithValidation(string fieldName, object value) - { - // If the item or field name are missing, we can't do anything - if (string.IsNullOrEmpty(fieldName)) - return false; - - // Retrieve the list of valid fields for the item - var constants = TypeHelper.GetConstants(_internal.GetType()); - if (constants is null) - return false; - - // Get the value that matches the field name provided - string? realField = Array.Find(constants, c => string.Equals(c, fieldName, StringComparison.OrdinalIgnoreCase)); - if (realField is null) - return false; - - // Set the field with the new value - return _internal.Write(realField, value); - } - - #endregion - - #region Comparision Methods - - /// - public abstract bool Equals(ModelBackedItem? other); - - #endregion - - #region Manipulation - - /// - /// Remove a field from the backing item - /// - public bool Remove(string fieldName) - => _internal.Remove(fieldName); - - /// - /// Replace a field from another ModelBackedItem - /// - public bool Replace(ModelBackedItem? from, string fieldName) - => _internal.Replace(from?._internal, fieldName); - - #endregion - } -} diff --git a/SabreTools.Metadata/README.MD b/SabreTools.Metadata/README.MD deleted file mode 100644 index 27ed651c..00000000 --- a/SabreTools.Metadata/README.MD +++ /dev/null @@ -1,3 +0,0 @@ -# SabreTools.Metadata - -This library contains common code used across multiple metadata file operations. diff --git a/SabreTools.Metadata/SabreTools.Metadata.csproj b/SabreTools.Metadata/SabreTools.Metadata.csproj deleted file mode 100644 index b412ad6a..00000000 --- a/SabreTools.Metadata/SabreTools.Metadata.csproj +++ /dev/null @@ -1,42 +0,0 @@ - - - - - net20;net35;net40;net452;net462;net472;net48;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0;net10.0;netstandard2.0;netstandard2.1 - true - false - false - true - latest - enable - true - snupkg - true - 2.3.0 - - - Matt Nadareski - Core functionality for metadata file processing - Copyright (c) Matt Nadareski 2016-2026 - https://github.com/SabreTools/ - README.md - https://github.com/SabreTools/SabreTools.Serialization - git - metadata dat datfile - MIT - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/SabreTools.Metadata/TypeHelper.cs b/SabreTools.Metadata/TypeHelper.cs deleted file mode 100644 index 4c4eac49..00000000 --- a/SabreTools.Metadata/TypeHelper.cs +++ /dev/null @@ -1,141 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Xml.Serialization; -using SabreTools.Data.Models; -using SabreTools.Data.Models.Metadata; - -namespace SabreTools.Metadata -{ - // TODO: Investigate ways of either caching or speeding up these methods - public static class TypeHelper - { - /// - /// Get constant values for the given type, if possible - /// - /// Does not return any values marked with the - public static string[]? GetConstants(Type? type) - { - if (type is null) - return null; - - var fields = type.GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy); - if (fields is null) - return null; - - FieldInfo[] noFilterFields = Array.FindAll(fields, - f => f.IsLiteral - && !f.IsInitOnly - && Attribute.GetCustomAttributes(f, typeof(NoFilterAttribute)).Length == 0); - - string[] constantValues = Array.ConvertAll(noFilterFields, - f => (f.GetRawConstantValue() as string) ?? string.Empty); - - return Array.FindAll(constantValues, s => s.Length > 0); - } - - /// - /// Attempt to get all DatItem types - /// - public static string[] GetDatItemTypeNames() - { - List typeNames = []; - - // Loop through all loaded assemblies - foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) - { - // If not all types can be loaded, use the ones that could be - Type?[] assemblyTypes = []; - try - { - assemblyTypes = assembly.GetTypes(); - } - catch (ReflectionTypeLoadException rtle) - { - assemblyTypes = Array.FindAll(rtle.Types ?? [], t => t is not null); - } - - // Loop through all types - foreach (Type? type in assemblyTypes) - { - // If the type is invalid - if (type is null) - continue; - - // If the type isn't a class or doesn't implement the interface - if (!type.IsClass || !typeof(DatItem).IsAssignableFrom(type)) - continue; - - // Get the XML type name - string? elementName = GetXmlRootAttributeElementName(type); - if (elementName is not null) - typeNames.Add(elementName); - } - } - - return [.. typeNames]; - } - - /// - /// Attempt to get the DatItem type from the name - /// - public static Type? GetDatItemType(string? itemType) - { - if (string.IsNullOrEmpty(itemType)) - return null; - - // Loop through all loaded assemblies - foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) - { - // If not all types can be loaded, use the ones that could be - Type?[] assemblyTypes = []; - try - { - assemblyTypes = assembly.GetTypes(); - } - catch (ReflectionTypeLoadException rtle) - { - assemblyTypes = Array.FindAll(rtle.Types ?? [], t => t is not null); - } - - // Loop through all types - foreach (Type? type in assemblyTypes) - { - // If the type is invalid - if (type is null) - continue; - - // If the type isn't a class or doesn't implement the interface - if (!type.IsClass || !typeof(DatItem).IsAssignableFrom(type)) - continue; - - // Get the XML type name - string? elementName = GetXmlRootAttributeElementName(type); - if (elementName is null) - continue; - - // If the name matches - if (string.Equals(elementName, itemType, StringComparison.OrdinalIgnoreCase)) - return type; - } - } - - return null; - } - - /// - /// Attempt to get the XmlRootAttribute.ElementName value from a type - /// - public static string? GetXmlRootAttributeElementName(Type? type) - { - if (type is null) - return null; - -#if NET20 || NET35 || NET40 - return (Attribute.GetCustomAttribute(type, typeof(XmlRootAttribute)) as XmlRootAttribute)!.ElementName; -#else - return type.GetCustomAttribute()?.ElementName; -#endif - } - } -} diff --git a/SabreTools.Metadata/Utilities.cs b/SabreTools.Metadata/Utilities.cs deleted file mode 100644 index 966e60d1..00000000 --- a/SabreTools.Metadata/Utilities.cs +++ /dev/null @@ -1,97 +0,0 @@ -using System.IO; -using SabreTools.Hashing; -using SabreTools.Text.Extensions; - -namespace SabreTools.Metadata -{ - /// - /// Static utility functions used throughout the library - /// - public static class Utilities - { - /// - /// Get a proper romba sub path - /// - /// SHA-1 hash to get the path for - /// Positive value representing the depth of the depot - /// Subfolder path for the given hash - public static string? GetDepotPath(byte[]? hash, int depth) - { - string? sha1 = hash.ToHexString(); - return GetDepotPath(sha1, depth); - } - - /// - /// Get a proper romba sub path - /// - /// SHA-1 hash to get the path for - /// Positive value representing the depth of the depot - /// Subfolder path for the given hash - public static string? GetDepotPath(string? hash, int depth) - { - // If the hash is null, then we return null - if (hash is null) - return null; - - // If the hash isn't the right size, then we return null - if (hash.Length != HashType.SHA1.ZeroString.Length) - return null; - - // Cap the depth between 0 and 20, for now - if (depth < 0) - depth = 0; - else if (depth > HashType.SHA1.ZeroBytes.Length) - depth = HashType.SHA1.ZeroBytes.Length; - - // Loop through and generate the subdirectory - string path = string.Empty; - for (int i = 0; i < depth; i++) - { - path += hash.Substring(i * 2, 2) + Path.DirectorySeparatorChar; - } - - // Now append the filename - path += $"{hash}.gz"; - return path; - } - - /// - /// Get if the given path has a valid DAT extension - /// - /// Path to check - /// True if the extension is valid, false otherwise - public static bool HasValidDatExtension(string? path) - { - // If the path is null or empty, then we return false - if (string.IsNullOrEmpty(path)) - return false; - - // Get the extension from the path, if possible - string ext = Path.GetExtension(path).TrimStart('.').ToLowerInvariant(); - - // Check against the list of known DAT extensions - return ext switch - { - "csv" => true, - "dat" => true, - "json" => true, - "md2" => true, - "md4" => true, - "md5" => true, - "ripemd128" => true, - "ripemd160" => true, - "sfv" => true, - "sha1" => true, - "sha256" => true, - "sha384" => true, - "sha512" => true, - "spamsum" => true, - "ssv" => true, - "tsv" => true, - "txt" => true, - "xml" => true, - _ => false, - }; - } - } -} diff --git a/SabreTools.Serialization.CrossModel.Test/ArchiveDotOrgTests.cs b/SabreTools.Serialization.CrossModel.Test/ArchiveDotOrgTests.cs index dcad2d5d..a06570f5 100644 --- a/SabreTools.Serialization.CrossModel.Test/ArchiveDotOrgTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/ArchiveDotOrgTests.cs @@ -34,15 +34,15 @@ namespace SabreTools.Serialization.CrossModel.Test { var file = new Data.Models.ArchiveDotOrg.File { - Name = "XXXXXX", + Name = "name", Source = "XXXXXX", BitTorrentMagnetHash = "XXXXXX", LastModifiedTime = "XXXXXX", - Size = "XXXXXX", + Size = "12345", MD5 = "XXXXXX", CRC32 = "XXXXXX", SHA1 = "XXXXXX", - FileCount = "XXXXXX", + FileCount = 12345, Format = "XXXXXX", Original = "XXXXXX", Summation = "XXXXXX", @@ -108,15 +108,15 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.ArchiveDotOrg.File? file) { Assert.NotNull(file); - Assert.Equal("XXXXXX", file.Name); + Assert.Equal("name", file.Name); Assert.Equal("XXXXXX", file.Source); Assert.Equal("XXXXXX", file.BitTorrentMagnetHash); Assert.Equal("XXXXXX", file.LastModifiedTime); - Assert.Equal("XXXXXX", file.Size); + Assert.Equal("12345", file.Size); 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.Test/AttractModeTests.cs b/SabreTools.Serialization.CrossModel.Test/AttractModeTests.cs index b93aaccb..843e79b8 100644 --- a/SabreTools.Serialization.CrossModel.Test/AttractModeTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/AttractModeTests.cs @@ -37,7 +37,7 @@ namespace SabreTools.Serialization.CrossModel.Test var row = new Data.Models.AttractMode.Row { - Name = "XXXXXX", + Name = "name", Title = "XXXXXX", Emulator = "XXXXXX", CloneOf = "XXXXXX", @@ -58,7 +58,7 @@ namespace SabreTools.Serialization.CrossModel.Test Tags = "XXXXXX", PlayedCount = "XXXXXX", PlayedTime = "XXXXXX", - FileIsAvailable = "XXXXXX", + FileIsAvailable = true, }; return new Data.Models.AttractMode.MetadataFile @@ -84,7 +84,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.AttractMode.Row? row) { Assert.NotNull(row); - Assert.Equal("XXXXXX", row.Name); + Assert.Equal("name", row.Name); Assert.Equal("XXXXXX", row.Title); Assert.Equal("XXXXXX", row.Emulator); Assert.Equal("XXXXXX", row.CloneOf); @@ -105,7 +105,7 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal("XXXXXX", row.Tags); Assert.Equal("XXXXXX", row.PlayedCount); Assert.Equal("XXXXXX", row.PlayedTime); - Assert.Equal("XXXXXX", row.FileIsAvailable); + Assert.Equal(true, row.FileIsAvailable); } } } diff --git a/SabreTools.Serialization.CrossModel.Test/ClrMameProTests.cs b/SabreTools.Serialization.CrossModel.Test/ClrMameProTests.cs index 161fd8e8..9dc537d1 100644 --- a/SabreTools.Serialization.CrossModel.Test/ClrMameProTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/ClrMameProTests.cs @@ -61,8 +61,8 @@ namespace SabreTools.Serialization.CrossModel.Test { var cmp = new Data.Models.ClrMamePro.ClrMamePro { - Name = "XXXXXX", - Description = "XXXXXX", + Name = "name", + Description = "description", RootDir = "XXXXXX", Category = "XXXXXX", Version = "XXXXXX", @@ -73,31 +73,31 @@ namespace SabreTools.Serialization.CrossModel.Test Comment = "XXXXXX", Header = "XXXXXX", Type = "XXXXXX", - ForceMerging = "XXXXXX", - ForceZipping = "XXXXXX", - ForcePacking = "XXXXXX", + ForceMerging = Data.Models.Metadata.MergingFlag.Merged, + ForceZipping = true, + ForcePacking = Data.Models.Metadata.PackingFlag.Zip, }; var release = new Data.Models.ClrMamePro.Release { - Name = "XXXXXX", - Region = "XXXXXX", - Language = "XXXXXX", - Date = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Region = "region", + Language = "language", + Date = "date", + Default = true, }; var biosset = new Data.Models.ClrMamePro.BiosSet { - Name = "XXXXXX", - Description = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Description = "description", + Default = true, }; var rom = new Data.Models.ClrMamePro.Rom { - Name = "XXXXXX", - Size = "XXXXXX", + Name = "name", + Size = 12345, CRC16 = "XXXXXX", CRC = "XXXXXX", CRC64 = "XXXXXX", @@ -108,7 +108,7 @@ namespace SabreTools.Serialization.CrossModel.Test RIPEMD160 = "XXXXXX", SHA1 = "XXXXXX", Merge = "XXXXXX", - Status = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, Flags = "XXXXXX", Date = "XXXXXX", SHA256 = "XXXXXX", @@ -121,95 +121,95 @@ namespace SabreTools.Serialization.CrossModel.Test Offs = "XXXXXX", Serial = "XXXXXX", Header = "XXXXXX", - Inverted = "XXXXXX", - MIA = "XXXXXX", + Inverted = true, + MIA = true, }; var disk = new Data.Models.ClrMamePro.Disk { - Name = "XXXXXX", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - Merge = "XXXXXX", - Status = "XXXXXX", - Flags = "XXXXXX", + Name = "name", + MD5 = "md5", + SHA1 = "sha1", + Merge = "merge", + Status = Data.Models.Metadata.ItemStatus.Good, + Flags = "flags", }; var sample = new Data.Models.ClrMamePro.Sample { - Name = "XXXXXX", + Name = "name", }; var archive = new Data.Models.ClrMamePro.Archive { - Name = "XXXXXX", + Name = "name", }; var media = new Data.Models.ClrMamePro.Media { - Name = "XXXXXX", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - SHA256 = "XXXXXX", - SpamSum = "XXXXXX", + Name = "name", + MD5 = "md5", + SHA1 = "sha1", + SHA256 = "sha256", + SpamSum = "spamsum", }; var chip = new Data.Models.ClrMamePro.Chip { - Type = "XXXXXX", - Name = "XXXXXX", - Flags = "XXXXXX", - Clock = "XXXXXX", + Type = Data.Models.Metadata.ChipType.CPU, + Name = "name", + Flags = "flags", + Clock = 12345, }; var video = new Data.Models.ClrMamePro.Video { - Screen = "XXXXXX", - Orientation = "XXXXXX", - X = "XXXXXX", - Y = "XXXXXX", - AspectX = "XXXXXX", - AspectY = "XXXXXX", - Freq = "XXXXXX", + Screen = Data.Models.Metadata.DisplayType.Vector, + Orientation = Data.Models.Metadata.Rotation.East, + X = 12345, + Y = 12345, + AspectX = 12345, + AspectY = 12345, + Freq = 123.45, }; var sound = new Data.Models.ClrMamePro.Sound { - Channels = "XXXXXX", + Channels = 12345, }; var input = new Data.Models.ClrMamePro.Input { - Players = "XXXXXX", + Players = 12345, Control = "XXXXXX", - Buttons = "XXXXXX", - Coins = "XXXXXX", - Tilt = "XXXXXX", - Service = "XXXXXX", + Buttons = 12345, + Coins = 12345, + Tilt = true, + Service = true, }; var dipswitch = new Data.Models.ClrMamePro.DipSwitch { - Name = "XXXXXX", + Name = "name", Entry = ["XXXXXX"], - Default = "XXXXXX", + Default = true, }; var driver = new Data.Models.ClrMamePro.Driver { - Status = "XXXXXX", - Color = "XXXXXX", - Sound = "XXXXXX", - PaletteSize = "XXXXXX", - Blit = "XXXXXX", + Status = Data.Models.Metadata.SupportStatus.Good, + Color = Data.Models.Metadata.SupportStatus.Good, + Sound = Data.Models.Metadata.SupportStatus.Good, + PaletteSize = "palettesize", + Blit = Data.Models.Metadata.Blit.Plain, }; // TODO: This omits Set, should that have a separate case? Data.Models.ClrMamePro.GameBase gameBase = game ? new Data.Models.ClrMamePro.Game() : new Data.Models.ClrMamePro.Machine(); - gameBase.Name = "XXXXXX"; - gameBase.Description = "XXXXXX"; + gameBase.Name = "name"; + gameBase.Description = "description"; gameBase.DriverStatus = "XXXXXX"; gameBase.Year = "XXXXXX"; gameBase.Manufacturer = "XXXXXX"; @@ -250,8 +250,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.ClrMamePro.ClrMamePro? cmp) { Assert.NotNull(cmp); - Assert.Equal("XXXXXX", cmp.Name); - Assert.Equal("XXXXXX", cmp.Description); + Assert.Equal("name", cmp.Name); + Assert.Equal("description", cmp.Description); Assert.Equal("XXXXXX", cmp.RootDir); Assert.Equal("XXXXXX", cmp.Category); Assert.Equal("XXXXXX", cmp.Version); @@ -262,9 +262,9 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal("XXXXXX", cmp.Comment); Assert.Equal("XXXXXX", cmp.Header); Assert.Equal("XXXXXX", cmp.Type); - Assert.Equal("XXXXXX", cmp.ForceMerging); - Assert.Equal("XXXXXX", cmp.ForceZipping); - Assert.Equal("XXXXXX", cmp.ForcePacking); + Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, cmp.ForceMerging); + Assert.Equal(true, cmp.ForceZipping); + Assert.Equal(Data.Models.Metadata.PackingFlag.Zip, cmp.ForcePacking); } /// @@ -273,8 +273,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.ClrMamePro.GameBase? gb) { Assert.NotNull(gb); - Assert.Equal("XXXXXX", gb.Name); - Assert.Equal("XXXXXX", gb.Description); + Assert.Equal("name", gb.Name); + Assert.Equal("description", gb.Description); // Assert.Equal("XXXXXX", gb.DriverStatus); // TODO: Needs metadata mapping Assert.Equal("XXXXXX", gb.Year); Assert.Equal("XXXXXX", gb.Manufacturer); @@ -335,11 +335,11 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.ClrMamePro.Release? release) { Assert.NotNull(release); - Assert.Equal("XXXXXX", release.Name); - Assert.Equal("XXXXXX", release.Region); - Assert.Equal("XXXXXX", release.Language); - Assert.Equal("XXXXXX", release.Date); - Assert.Equal("XXXXXX", release.Default); + Assert.Equal("name", release.Name); + Assert.Equal("region", release.Region); + Assert.Equal("language", release.Language); + Assert.Equal("date", release.Date); + Assert.Equal(true, release.Default); } /// @@ -348,9 +348,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.ClrMamePro.BiosSet? biosset) { Assert.NotNull(biosset); - Assert.Equal("XXXXXX", biosset.Name); - Assert.Equal("XXXXXX", biosset.Description); - Assert.Equal("XXXXXX", biosset.Default); + Assert.Equal("name", biosset.Name); + Assert.Equal("description", biosset.Description); + Assert.Equal(true, biosset.Default); } /// @@ -359,8 +359,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.ClrMamePro.Rom? rom) { Assert.NotNull(rom); - Assert.Equal("XXXXXX", rom.Name); - Assert.Equal("XXXXXX", rom.Size); + Assert.Equal("name", rom.Name); + Assert.Equal(12345, rom.Size); Assert.Equal("XXXXXX", rom.CRC16); Assert.Equal("XXXXXX", rom.CRC); Assert.Equal("XXXXXX", rom.CRC64); @@ -371,7 +371,7 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal("XXXXXX", rom.RIPEMD160); Assert.Equal("XXXXXX", rom.SHA1); Assert.Equal("XXXXXX", rom.Merge); - Assert.Equal("XXXXXX", rom.Status); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, rom.Status); Assert.Equal("XXXXXX", rom.Flags); Assert.Equal("XXXXXX", rom.Date); Assert.Equal("XXXXXX", rom.SHA256); @@ -384,8 +384,8 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal("XXXXXX", rom.Offs); Assert.Equal("XXXXXX", rom.Serial); Assert.Equal("XXXXXX", rom.Header); - Assert.Equal("XXXXXX", rom.Inverted); - Assert.Equal("XXXXXX", rom.MIA); + Assert.Equal(true, rom.Inverted); + Assert.Equal(true, rom.MIA); } /// @@ -394,12 +394,12 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.ClrMamePro.Disk? disk) { Assert.NotNull(disk); - Assert.Equal("XXXXXX", disk.Name); - Assert.Equal("XXXXXX", disk.MD5); - Assert.Equal("XXXXXX", disk.SHA1); - Assert.Equal("XXXXXX", disk.Merge); - Assert.Equal("XXXXXX", disk.Status); - Assert.Equal("XXXXXX", disk.Flags); + Assert.Equal("name", disk.Name); + 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("flags", disk.Flags); } /// @@ -408,7 +408,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.ClrMamePro.Sample? sample) { Assert.NotNull(sample); - Assert.Equal("XXXXXX", sample.Name); + Assert.Equal("name", sample.Name); } /// @@ -417,7 +417,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.ClrMamePro.Archive? archive) { Assert.NotNull(archive); - Assert.Equal("XXXXXX", archive.Name); + Assert.Equal("name", archive.Name); } /// @@ -426,11 +426,11 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.ClrMamePro.Media? media) { Assert.NotNull(media); - Assert.Equal("XXXXXX", media.Name); - Assert.Equal("XXXXXX", media.MD5); - Assert.Equal("XXXXXX", media.SHA1); - Assert.Equal("XXXXXX", media.SHA256); - Assert.Equal("XXXXXX", media.SpamSum); + Assert.Equal("name", media.Name); + Assert.Equal("md5", media.MD5); + Assert.Equal("sha1", media.SHA1); + Assert.Equal("sha256", media.SHA256); + Assert.Equal("spamsum", media.SpamSum); } /// @@ -439,10 +439,10 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.ClrMamePro.Chip? chip) { Assert.NotNull(chip); - Assert.Equal("XXXXXX", chip.Type); - Assert.Equal("XXXXXX", chip.Name); - Assert.Equal("XXXXXX", chip.Flags); - Assert.Equal("XXXXXX", chip.Clock); + Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type); + Assert.Equal("name", chip.Name); + Assert.Equal("flags", chip.Flags); + Assert.Equal(12345, chip.Clock); } /// @@ -451,13 +451,13 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.ClrMamePro.Video? video) { Assert.NotNull(video); - Assert.Equal("XXXXXX", video.Screen); - Assert.Equal("XXXXXX", video.Orientation); - Assert.Equal("XXXXXX", video.X); - Assert.Equal("XXXXXX", video.Y); - Assert.Equal("XXXXXX", video.AspectX); - Assert.Equal("XXXXXX", video.AspectY); - Assert.Equal("XXXXXX", video.Freq); + Assert.Equal(Data.Models.Metadata.DisplayType.Vector, video.Screen); + Assert.Equal(Data.Models.Metadata.Rotation.East, video.Orientation); + Assert.Equal(12345, video.X); + Assert.Equal(12345, video.Y); + Assert.Equal(12345, video.AspectX); + Assert.Equal(12345, video.AspectY); + Assert.Equal(123.45, video.Freq); } /// @@ -466,7 +466,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.ClrMamePro.Sound? sound) { Assert.NotNull(sound); - Assert.Equal("XXXXXX", sound.Channels); + Assert.Equal(12345, sound.Channels); } /// @@ -475,12 +475,12 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.ClrMamePro.Input? input) { Assert.NotNull(input); - Assert.Equal("XXXXXX", input.Players); + Assert.Equal(12345, input.Players); Assert.Equal("XXXXXX", input.Control); - Assert.Equal("XXXXXX", input.Buttons); - Assert.Equal("XXXXXX", input.Coins); - Assert.Equal("XXXXXX", input.Tilt); - Assert.Equal("XXXXXX", input.Service); + Assert.Equal(12345, input.Buttons); + Assert.Equal(12345, input.Coins); + Assert.Equal(true, input.Tilt); + Assert.Equal(true, input.Service); } /// @@ -489,13 +489,13 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.ClrMamePro.DipSwitch? dipswitch) { Assert.NotNull(dipswitch); - Assert.Equal("XXXXXX", dipswitch.Name); + Assert.Equal("name", dipswitch.Name); Assert.NotNull(dipswitch.Entry); string entry = Assert.Single(dipswitch.Entry); Assert.Equal("XXXXXX", entry); - Assert.Equal("XXXXXX", dipswitch.Default); + Assert.Equal(true, dipswitch.Default); } /// @@ -504,11 +504,11 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.ClrMamePro.Driver? driver) { Assert.NotNull(driver); - Assert.Equal("XXXXXX", driver.Status); - Assert.Equal("XXXXXX", driver.Color); - Assert.Equal("XXXXXX", driver.Sound); - Assert.Equal("XXXXXX", driver.PaletteSize); - Assert.Equal("XXXXXX", driver.Blit); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound); + Assert.Equal("palettesize", driver.PaletteSize); + Assert.Equal(Data.Models.Metadata.Blit.Plain, driver.Blit); } /// diff --git a/SabreTools.Serialization.CrossModel.Test/DosCenterTests.cs b/SabreTools.Serialization.CrossModel.Test/DosCenterTests.cs index f1ec413b..0afa4b12 100644 --- a/SabreTools.Serialization.CrossModel.Test/DosCenterTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/DosCenterTests.cs @@ -35,8 +35,8 @@ namespace SabreTools.Serialization.CrossModel.Test { var dc = new Data.Models.DosCenter.DosCenter { - Name = "XXXXXX", - Description = "XXXXXX", + Name = "name", + Description = "description", Version = "XXXXXX", Date = "XXXXXX", Author = "XXXXXX", @@ -46,8 +46,8 @@ namespace SabreTools.Serialization.CrossModel.Test var file = new Data.Models.DosCenter.File { - Name = "XXXXXX", - Size = "XXXXXX", + Name = "name", + Size = 12345, CRC = "XXXXXX", SHA1 = "XXXXXX", Date = "XXXXXX", @@ -55,7 +55,7 @@ namespace SabreTools.Serialization.CrossModel.Test var game = new Data.Models.DosCenter.Game { - Name = "XXXXXX", + Name = "name", File = [file], }; @@ -72,8 +72,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.DosCenter.DosCenter? cmp) { Assert.NotNull(cmp); - Assert.Equal("XXXXXX", cmp.Name); - Assert.Equal("XXXXXX", cmp.Description); + Assert.Equal("name", cmp.Name); + Assert.Equal("description", cmp.Description); Assert.Equal("XXXXXX", cmp.Version); Assert.Equal("XXXXXX", cmp.Date); Assert.Equal("XXXXXX", cmp.Author); @@ -87,7 +87,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.DosCenter.Game? game) { Assert.NotNull(game); - Assert.Equal("XXXXXX", game.Name); + Assert.Equal("name", game.Name); Assert.NotNull(game.File); var file = Assert.Single(game.File); @@ -100,8 +100,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.DosCenter.File? rom) { Assert.NotNull(rom); - Assert.Equal("XXXXXX", rom.Name); - Assert.Equal("XXXXXX", rom.Size); + Assert.Equal("name", rom.Name); + Assert.Equal(12345, rom.Size); Assert.Equal("XXXXXX", rom.CRC); Assert.Equal("XXXXXX", rom.SHA1); Assert.Equal("XXXXXX", rom.Date); diff --git a/SabreTools.Serialization.CrossModel.Test/EverdriveSMDBTests.cs b/SabreTools.Serialization.CrossModel.Test/EverdriveSMDBTests.cs index faa57ae7..66ad2fb2 100644 --- a/SabreTools.Serialization.CrossModel.Test/EverdriveSMDBTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/EverdriveSMDBTests.cs @@ -35,11 +35,11 @@ namespace SabreTools.Serialization.CrossModel.Test var row = new Data.Models.EverdriveSMDB.Row { SHA256 = "XXXXXX", - Name = "XXXXXX", + Name = "name", SHA1 = "XXXXXX", MD5 = "XXXXXX", CRC32 = "XXXXXX", - Size = "XXXXXX", + Size = 12345, }; return new Data.Models.EverdriveSMDB.MetadataFile @@ -55,11 +55,11 @@ namespace SabreTools.Serialization.CrossModel.Test { Assert.NotNull(row); Assert.Equal("XXXXXX", row.SHA256); - Assert.Equal("XXXXXX", row.Name); + Assert.Equal("name", row.Name); Assert.Equal("XXXXXX", row.SHA1); Assert.Equal("XXXXXX", row.MD5); Assert.Equal("XXXXXX", row.CRC32); - Assert.Equal("XXXXXX", row.Size); + Assert.Equal(12345, row.Size); } } } diff --git a/SabreTools.Serialization.CrossModel.Test/ListromTests.cs b/SabreTools.Serialization.CrossModel.Test/ListromTests.cs index fbee49a2..790ae2fc 100644 --- a/SabreTools.Serialization.CrossModel.Test/ListromTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/ListromTests.cs @@ -36,8 +36,8 @@ namespace SabreTools.Serialization.CrossModel.Test { var rom = new Data.Models.Listrom.Row { - Name = "XXXXXX", - Size = "XXXXXX", + Name = "name", + Size = 12345, Bad = true, CRC = "XXXXXX", SHA1 = "XXXXXX", @@ -46,7 +46,7 @@ namespace SabreTools.Serialization.CrossModel.Test var disk = new Data.Models.Listrom.Row { - Name = "XXXXXX", + Name = "name", Bad = false, MD5 = "XXXXXX", SHA1 = "XXXXXX", @@ -103,8 +103,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void ValidateRom(Data.Models.Listrom.Row? row) { Assert.NotNull(row); - Assert.Equal("XXXXXX", row.Name); - Assert.Equal("XXXXXX", row.Size); + Assert.Equal("name", row.Name); + Assert.Equal(12345, row.Size); Assert.True(row.Bad); Assert.Equal("XXXXXX", row.CRC); Assert.Equal("XXXXXX", row.SHA1); @@ -117,7 +117,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void ValidateDisk(Data.Models.Listrom.Row? row) { Assert.NotNull(row); - Assert.Equal("XXXXXX", row.Name); + Assert.Equal("name", row.Name); Assert.False(row.Bad); Assert.Equal("XXXXXX", row.MD5); Assert.Equal("XXXXXX", row.SHA1); diff --git a/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs b/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs index 8f7cfcbf..f5cfc37c 100644 --- a/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs @@ -23,7 +23,7 @@ namespace SabreTools.Serialization.CrossModel.Test // Validate the data Assert.NotNull(newMame); Assert.Equal("XXXXXX", newMame.Build); - Assert.Equal("XXXXXX", newMame.Debug); + Assert.Equal(true, newMame.Debug); Assert.Equal("XXXXXX", newMame.MameConfig); Assert.NotNull(newMame.Game); @@ -50,7 +50,7 @@ namespace SabreTools.Serialization.CrossModel.Test // Validate the data Assert.NotNull(newMame); Assert.Equal("XXXXXX", newMame.Build); - Assert.Equal("XXXXXX", newMame.Debug); + Assert.Equal(true, newMame.Debug); Assert.Equal("XXXXXX", newMame.MameConfig); Assert.NotNull(newMame.Game); @@ -65,148 +65,148 @@ namespace SabreTools.Serialization.CrossModel.Test { var biosset = new Data.Models.Listxml.BiosSet { - Name = "XXXXXX", - Description = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Description = "description", + Default = true, }; var rom = new Data.Models.Listxml.Rom { - Name = "XXXXXX", + Name = "name", Bios = "XXXXXX", - Size = "XXXXXX", + Size = 12345, CRC = "XXXXXX", SHA1 = "XXXXXX", Merge = "XXXXXX", Region = "XXXXXX", Offset = "XXXXXX", - Status = "XXXXXX", - Optional = "XXXXXX", - Dispose = "XXXXXX", - SoundOnly = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, + Optional = true, + Dispose = true, + SoundOnly = true, }; var disk = new Data.Models.Listxml.Disk { - Name = "XXXXXX", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - Merge = "XXXXXX", - Region = "XXXXXX", - Index = "XXXXXX", - Writable = "XXXXXX", - Status = "XXXXXX", - Optional = "XXXXXX", + Name = "name", + MD5 = "md5", + SHA1 = "sha1", + Merge = "merge", + Region = "region", + Index = 12345, + Writable = true, + Status = Data.Models.Metadata.ItemStatus.Good, + Optional = true, }; var deviceref = new Data.Models.Listxml.DeviceRef { - Name = "XXXXXX", + Name = "name", }; var sample = new Data.Models.Listxml.Sample { - Name = "XXXXXX", + Name = "name", }; var chip = new Data.Models.Listxml.Chip { - Name = "XXXXXX", - Tag = "XXXXXX", - Type = "XXXXXX", - SoundOnly = "XXXXXX", - Clock = "XXXXXX", + Name = "name", + Tag = "tag", + Type = Data.Models.Metadata.ChipType.CPU, + SoundOnly = true, + Clock = 12345, }; var display = new Data.Models.Listxml.Display { - Tag = "XXXXXX", - Type = "XXXXXX", - Rotate = "XXXXXX", - FlipX = "XXXXXX", - Width = "XXXXXX", - Height = "XXXXXX", - Refresh = "XXXXXX", - PixClock = "XXXXXX", - HTotal = "XXXXXX", - HBEnd = "XXXXXX", - HBStart = "XXXXXX", - VTotal = "XXXXXX", - VBEnd = "XXXXXX", - VBStart = "XXXXXX", + Tag = "tag", + Type = Data.Models.Metadata.DisplayType.Vector, + Rotate = Data.Models.Metadata.Rotation.East, + FlipX = true, + Width = 12345, + Height = 12345, + Refresh = 123.45, + PixClock = 12345, + HTotal = 12345, + HBEnd = 12345, + HBStart = 12345, + VTotal = 12345, + VBEnd = 12345, + VBStart = 12345, }; var video = new Data.Models.Listxml.Video { - Screen = "XXXXXX", - Orientation = "XXXXXX", - Width = "XXXXXX", - Height = "XXXXXX", - AspectX = "XXXXXX", - AspectY = "XXXXXX", - Refresh = "XXXXXX", + Screen = Data.Models.Metadata.DisplayType.Vector, + Orientation = Data.Models.Metadata.Rotation.East, + Width = 12345, + Height = 12345, + AspectX = 12345, + AspectY = 12345, + Refresh = 123.45, }; var sound = new Data.Models.Listxml.Sound { - Channels = "XXXXXX", + Channels = 12345, }; var control = new Data.Models.Listxml.Control { - Type = "XXXXXX", - Player = "XXXXXX", - Buttons = "XXXXXX", - ReqButtons = "XXXXXX", - Minimum = "XXXXXX", - Maximum = "XXXXXX", - Sensitivity = "XXXXXX", - KeyDelta = "XXXXXX", - Reverse = "XXXXXX", - Ways = "XXXXXX", - Ways2 = "XXXXXX", - Ways3 = "XXXXXX", + Type = Data.Models.Metadata.ControlType.Lightgun, + Player = 12345, + Buttons = 12345, + ReqButtons = 12345, + Minimum = 12345, + Maximum = 12345, + Sensitivity = 12345, + KeyDelta = 12345, + Reverse = true, + Ways = "ways", + Ways2 = "ways2", + Ways3 = "ways3", }; var input = new Data.Models.Listxml.Input { - Service = "XXXXXX", - Tilt = "XXXXXX", - Players = "XXXXXX", - //ControlAttr = "XXXXXX", // Mututally exclusive with input.Control - Buttons = "XXXXXX", - Coins = "XXXXXX", + Service = true, + Tilt = true, + Players = 12345, + ControlAttr = "controlattr", + Buttons = 12345, + Coins = 12345, Control = [control], }; var condition = new Data.Models.Listxml.Condition { - Tag = "XXXXXX", - Mask = "XXXXXX", - Relation = "XXXXXX", - Value = "XXXXXX", + Tag = "tag", + Mask = "mask", + Relation = Data.Models.Metadata.Relation.Equal, + Value = "value", }; var diplocation = new Data.Models.Listxml.DipLocation { - Name = "XXXXXX", - Number = "XXXXXX", - Inverted = "XXXXXX", + Name = "name", + Number = 12345, + Inverted = true, }; var dipvalue = new Data.Models.Listxml.DipValue { - Name = "XXXXXX", - Value = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Value = "value", + Default = true, Condition = condition, }; var dipswitch = new Data.Models.Listxml.DipSwitch { - Name = "XXXXXX", - Tag = "XXXXXX", - Mask = "XXXXXX", + Name = "name", + Tag = "tag", + Mask = "mask", Condition = condition, DipLocation = [diplocation], DipValue = [dipvalue], @@ -214,24 +214,24 @@ namespace SabreTools.Serialization.CrossModel.Test var conflocation = new Data.Models.Listxml.ConfLocation { - Name = "XXXXXX", - Number = "XXXXXX", - Inverted = "XXXXXX", + Name = "name", + Number = 12345, + Inverted = true, }; var confsetting = new Data.Models.Listxml.ConfSetting { - Name = "XXXXXX", - Value = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Value = "value", + Default = true, Condition = condition, }; var configuration = new Data.Models.Listxml.Configuration { - Name = "XXXXXX", - Tag = "XXXXXX", - Mask = "XXXXXX", + Name = "name", + Tag = "tag", + Mask = "mask", Condition = condition, ConfLocation = [conflocation], ConfSetting = [confsetting], @@ -239,107 +239,107 @@ namespace SabreTools.Serialization.CrossModel.Test var analog = new Data.Models.Listxml.Analog { - Mask = "XXXXXX", + Mask = "mask", }; var port = new Data.Models.Listxml.Port { - Tag = "XXXXXX", + Tag = "tag", Analog = [analog], }; var adjuster = new Data.Models.Listxml.Adjuster { - Name = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Default = true, Condition = condition, }; var driver = new Data.Models.Listxml.Driver { - Status = "XXXXXX", - Color = "XXXXXX", - Sound = "XXXXXX", - PaletteSize = "XXXXXX", - Emulation = "XXXXXX", - Cocktail = "XXXXXX", - SaveState = "XXXXXX", - RequiresArtwork = "XXXXXX", - Unofficial = "XXXXXX", - NoSoundHardware = "XXXXXX", - Incomplete = "XXXXXX", + Status = Data.Models.Metadata.SupportStatus.Good, + Color = Data.Models.Metadata.SupportStatus.Good, + Sound = Data.Models.Metadata.SupportStatus.Good, + PaletteSize = "palettesize", + Emulation = Data.Models.Metadata.SupportStatus.Good, + Cocktail = Data.Models.Metadata.SupportStatus.Good, + SaveState = Data.Models.Metadata.Supported.Yes, + RequiresArtwork = true, + Unofficial = true, + NoSoundHardware = true, + Incomplete = true, }; var feature = new Data.Models.Listxml.Feature { - Type = "XXXXXX", - Status = "XXXXXX", - Overall = "XXXXXX", + Type = Data.Models.Metadata.FeatureType.Protection, + Status = Data.Models.Metadata.FeatureStatus.Imperfect, + Overall = Data.Models.Metadata.FeatureStatus.Imperfect, }; var instance = new Data.Models.Listxml.Instance { - Name = "XXXXXX", - BriefName = "XXXXXX", + Name = "name", + BriefName = "briefname", }; var extension = new Data.Models.Listxml.Extension { - Name = "XXXXXX", + Name = "name", }; var device = new Data.Models.Listxml.Device { - Type = "XXXXXX", - Tag = "XXXXXX", - FixedImage = "XXXXXX", - Mandatory = "XXXXXX", - Interface = "XXXXXX", + Type = Data.Models.Metadata.DeviceType.PunchTape, + Tag = "tag", + FixedImage = "fixedimage", + Mandatory = true, + Interface = "interface", Instance = instance, Extension = [extension], }; var slotOption = new Data.Models.Listxml.SlotOption { - Name = "XXXXXX", - DevName = "XXXXXX", - Default = "XXXXXX", + Name = "name", + DevName = "devname", + Default = true, }; var slot = new Data.Models.Listxml.Slot { - Name = "XXXXXX", + Name = "name", SlotOption = [slotOption], }; var softwarelist = new Data.Models.Listxml.SoftwareList { - Tag = "XXXXXX", - Name = "XXXXXX", - Status = "XXXXXX", - Filter = "XXXXXX", + Tag = "tag", + Name = "name", + Status = Data.Models.Metadata.SoftwareListStatus.Original, + Filter = "filter", }; var ramoption = new Data.Models.Listxml.RamOption { - Name = "XXXXXX", - Default = "XXXXXX", - Content = "XXXXXX", + Name = "name", + Default = true, + Content = "content", }; Data.Models.Listxml.GameBase gameBase = game ? new Data.Models.Listxml.Game() : new Data.Models.Listxml.Machine(); - gameBase.Name = "XXXXXX"; + gameBase.Name = "name"; gameBase.SourceFile = "XXXXXX"; - gameBase.IsBios = "XXXXXX"; - gameBase.IsDevice = "XXXXXX"; - gameBase.IsMechanical = "XXXXXX"; - gameBase.Runnable = "XXXXXX"; + gameBase.IsBios = true; + gameBase.IsDevice = true; + gameBase.IsMechanical = true; + gameBase.Runnable = Data.Models.Metadata.Runnable.Yes; gameBase.CloneOf = "XXXXXX"; gameBase.RomOf = "XXXXXX"; gameBase.SampleOf = "XXXXXX"; - gameBase.Description = "XXXXXX"; + gameBase.Description = "description"; gameBase.Year = "XXXXXX"; gameBase.Manufacturer = "XXXXXX"; gameBase.History = "XXXXXX"; @@ -367,7 +367,7 @@ namespace SabreTools.Serialization.CrossModel.Test return new Data.Models.Listxml.Mame { Build = "XXXXXX", - Debug = "XXXXXX", + Debug = true, MameConfig = "XXXXXX", Game = [gameBase], }; @@ -379,16 +379,16 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.GameBase? gb) { Assert.NotNull(gb); - Assert.Equal("XXXXXX", gb.Name); + Assert.Equal("name", gb.Name); Assert.Equal("XXXXXX", gb.SourceFile); - Assert.Equal("XXXXXX", gb.IsBios); - Assert.Equal("XXXXXX", gb.IsDevice); - Assert.Equal("XXXXXX", gb.IsMechanical); - Assert.Equal("XXXXXX", gb.Runnable); + Assert.Equal(true, gb.IsBios); + Assert.Equal(true, gb.IsDevice); + Assert.Equal(true, gb.IsMechanical); + Assert.Equal(Data.Models.Metadata.Runnable.Yes, gb.Runnable); Assert.Equal("XXXXXX", gb.CloneOf); Assert.Equal("XXXXXX", gb.RomOf); Assert.Equal("XXXXXX", gb.SampleOf); - Assert.Equal("XXXXXX", gb.Description); + Assert.Equal("description", gb.Description); Assert.Equal("XXXXXX", gb.Year); Assert.Equal("XXXXXX", gb.Manufacturer); Assert.Equal("XXXXXX", gb.History); @@ -473,9 +473,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.BiosSet? biosset) { Assert.NotNull(biosset); - Assert.Equal("XXXXXX", biosset.Name); - Assert.Equal("XXXXXX", biosset.Description); - Assert.Equal("XXXXXX", biosset.Default); + Assert.Equal("name", biosset.Name); + Assert.Equal("description", biosset.Description); + Assert.Equal(true, biosset.Default); } /// @@ -484,18 +484,18 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Rom? rom) { Assert.NotNull(rom); - Assert.Equal("XXXXXX", rom.Name); + Assert.Equal("name", rom.Name); Assert.Equal("XXXXXX", rom.Bios); - Assert.Equal("XXXXXX", rom.Size); + Assert.Equal(12345, rom.Size); Assert.Equal("XXXXXX", rom.CRC); Assert.Equal("XXXXXX", rom.SHA1); Assert.Equal("XXXXXX", rom.Merge); Assert.Equal("XXXXXX", rom.Region); Assert.Equal("XXXXXX", rom.Offset); - Assert.Equal("XXXXXX", rom.Status); - Assert.Equal("XXXXXX", rom.Optional); - Assert.Equal("XXXXXX", rom.Dispose); - Assert.Equal("XXXXXX", rom.SoundOnly); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, rom.Status); + Assert.Equal(true, rom.Optional); + Assert.Equal(true, rom.Dispose); + Assert.Equal(true, rom.SoundOnly); } /// @@ -504,15 +504,15 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Disk? disk) { Assert.NotNull(disk); - Assert.Equal("XXXXXX", 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("XXXXXX", disk.Writable); - Assert.Equal("XXXXXX", disk.Status); - Assert.Equal("XXXXXX", disk.Optional); + Assert.Equal("name", disk.Name); + 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); } /// @@ -521,7 +521,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.DeviceRef? deviceref) { Assert.NotNull(deviceref); - Assert.Equal("XXXXXX", deviceref.Name); + Assert.Equal("name", deviceref.Name); } /// @@ -530,7 +530,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Sample? sample) { Assert.NotNull(sample); - Assert.Equal("XXXXXX", sample.Name); + Assert.Equal("name", sample.Name); } /// @@ -539,11 +539,11 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Chip? chip) { Assert.NotNull(chip); - Assert.Equal("XXXXXX", chip.Name); - Assert.Equal("XXXXXX", chip.Tag); - Assert.Equal("XXXXXX", chip.Type); - Assert.Equal("XXXXXX", chip.SoundOnly); - Assert.Equal("XXXXXX", chip.Clock); + Assert.Equal("name", chip.Name); + Assert.Equal("tag", chip.Tag); + Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type); + Assert.Equal(true, chip.SoundOnly); + Assert.Equal(12345, chip.Clock); } /// @@ -552,20 +552,20 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Display? display) { Assert.NotNull(display); - Assert.Equal("XXXXXX", display.Tag); - Assert.Equal("XXXXXX", display.Type); - Assert.Equal("XXXXXX", display.Rotate); - Assert.Equal("XXXXXX", display.FlipX); - Assert.Equal("XXXXXX", display.Width); - Assert.Equal("XXXXXX", display.Height); - Assert.Equal("XXXXXX", display.Refresh); - Assert.Equal("XXXXXX", display.PixClock); - Assert.Equal("XXXXXX", display.HTotal); - Assert.Equal("XXXXXX", display.HBEnd); - Assert.Equal("XXXXXX", display.HBStart); - Assert.Equal("XXXXXX", display.VTotal); - Assert.Equal("XXXXXX", display.VBEnd); - Assert.Equal("XXXXXX", display.VBStart); + Assert.Equal("tag", display.Tag); + Assert.Equal(Data.Models.Metadata.DisplayType.Vector, display.Type); + Assert.Equal(Data.Models.Metadata.Rotation.East, display.Rotate); + Assert.Equal(true, display.FlipX); + Assert.Equal(12345, display.Width); + Assert.Equal(12345, display.Height); + Assert.Equal(123.45, display.Refresh); + Assert.Equal(12345, display.PixClock); + Assert.Equal(12345, display.HTotal); + Assert.Equal(12345, display.HBEnd); + Assert.Equal(12345, display.HBStart); + Assert.Equal(12345, display.VTotal); + Assert.Equal(12345, display.VBEnd); + Assert.Equal(12345, display.VBStart); } /// @@ -574,13 +574,13 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Video? video) { Assert.NotNull(video); - Assert.Equal("XXXXXX", video.Screen); - Assert.Equal("XXXXXX", video.Orientation); - Assert.Equal("XXXXXX", video.Width); - Assert.Equal("XXXXXX", video.Height); - Assert.Equal("XXXXXX", video.AspectX); - Assert.Equal("XXXXXX", video.AspectY); - Assert.Equal("XXXXXX", video.Refresh); + Assert.Equal(Data.Models.Metadata.DisplayType.Vector, video.Screen); + Assert.Equal(Data.Models.Metadata.Rotation.East, video.Orientation); + Assert.Equal(12345, video.Width); + Assert.Equal(12345, video.Height); + Assert.Equal(12345, video.AspectX); + Assert.Equal(12345, video.AspectY); + Assert.Equal(123.45, video.Refresh); } /// @@ -589,7 +589,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Sound? sound) { Assert.NotNull(sound); - Assert.Equal("XXXXXX", sound.Channels); + Assert.Equal(12345, sound.Channels); } /// @@ -598,12 +598,12 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Input? input) { Assert.NotNull(input); - Assert.Equal("XXXXXX", input.Service); - Assert.Equal("XXXXXX", input.Tilt); - Assert.Equal("XXXXXX", input.Players); - //Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control - Assert.Equal("XXXXXX", input.Buttons); - Assert.Equal("XXXXXX", input.Coins); + Assert.Equal(true, input.Service); + Assert.Equal(true, input.Tilt); + Assert.Equal(12345, input.Players); + Assert.Equal("controlattr", input.ControlAttr); + Assert.Equal(12345, input.Buttons); + Assert.Equal(12345, input.Coins); Assert.NotNull(input.Control); var control = Assert.Single(input.Control); @@ -616,18 +616,18 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Control? control) { Assert.NotNull(control); - Assert.Equal("XXXXXX", control.Type); - Assert.Equal("XXXXXX", control.Player); - Assert.Equal("XXXXXX", control.Buttons); - Assert.Equal("XXXXXX", control.ReqButtons); - Assert.Equal("XXXXXX", control.Minimum); - Assert.Equal("XXXXXX", control.Maximum); - Assert.Equal("XXXXXX", control.Sensitivity); - Assert.Equal("XXXXXX", control.KeyDelta); - Assert.Equal("XXXXXX", control.Reverse); - Assert.Equal("XXXXXX", control.Ways); - Assert.Equal("XXXXXX", control.Ways2); - Assert.Equal("XXXXXX", control.Ways3); + Assert.Equal(Data.Models.Metadata.ControlType.Lightgun, control.Type); + Assert.Equal(12345, control.Player); + Assert.Equal(12345, control.Buttons); + Assert.Equal(12345, control.ReqButtons); + Assert.Equal(12345, control.Minimum); + Assert.Equal(12345, control.Maximum); + Assert.Equal(12345, control.Sensitivity); + Assert.Equal(12345, control.KeyDelta); + Assert.Equal(true, control.Reverse); + Assert.Equal("ways", control.Ways); + Assert.Equal("ways2", control.Ways2); + Assert.Equal("ways3", control.Ways3); } /// @@ -636,9 +636,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.DipSwitch? dipswitch) { Assert.NotNull(dipswitch); - Assert.Equal("XXXXXX", dipswitch.Name); - Assert.Equal("XXXXXX", dipswitch.Tag); - Assert.Equal("XXXXXX", dipswitch.Mask); + Assert.Equal("name", dipswitch.Name); + Assert.Equal("tag", dipswitch.Tag); + Assert.Equal("mask", dipswitch.Mask); Validate(dipswitch.Condition); Assert.NotNull(dipswitch.DipLocation); @@ -656,10 +656,10 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Condition? condition) { Assert.NotNull(condition); - Assert.Equal("XXXXXX", condition.Tag); - Assert.Equal("XXXXXX", condition.Mask); - Assert.Equal("XXXXXX", condition.Relation); - Assert.Equal("XXXXXX", condition.Value); + Assert.Equal("tag", condition.Tag); + Assert.Equal("mask", condition.Mask); + Assert.Equal(Data.Models.Metadata.Relation.Equal, condition.Relation); + Assert.Equal("value", condition.Value); } /// @@ -668,9 +668,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.DipLocation? diplocation) { Assert.NotNull(diplocation); - Assert.Equal("XXXXXX", diplocation.Name); - Assert.Equal("XXXXXX", diplocation.Number); - Assert.Equal("XXXXXX", diplocation.Inverted); + Assert.Equal("name", diplocation.Name); + Assert.Equal(12345, diplocation.Number); + Assert.Equal(true, diplocation.Inverted); } /// @@ -679,9 +679,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.DipValue? dipvalue) { Assert.NotNull(dipvalue); - Assert.Equal("XXXXXX", dipvalue.Name); - Assert.Equal("XXXXXX", dipvalue.Value); - Assert.Equal("XXXXXX", dipvalue.Default); + Assert.Equal("name", dipvalue.Name); + Assert.Equal("value", dipvalue.Value); + Assert.Equal(true, dipvalue.Default); Validate(dipvalue.Condition); } @@ -691,9 +691,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Configuration? configuration) { Assert.NotNull(configuration); - Assert.Equal("XXXXXX", configuration.Name); - Assert.Equal("XXXXXX", configuration.Tag); - Assert.Equal("XXXXXX", configuration.Mask); + Assert.Equal("name", configuration.Name); + Assert.Equal("tag", configuration.Tag); + Assert.Equal("mask", configuration.Mask); Validate(configuration.Condition); Assert.NotNull(configuration.ConfLocation); @@ -711,9 +711,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.ConfLocation? conflocation) { Assert.NotNull(conflocation); - Assert.Equal("XXXXXX", conflocation.Name); - Assert.Equal("XXXXXX", conflocation.Number); - Assert.Equal("XXXXXX", conflocation.Inverted); + Assert.Equal("name", conflocation.Name); + Assert.Equal(12345, conflocation.Number); + Assert.Equal(true, conflocation.Inverted); } /// @@ -722,9 +722,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.ConfSetting? confsetting) { Assert.NotNull(confsetting); - Assert.Equal("XXXXXX", confsetting.Name); - Assert.Equal("XXXXXX", confsetting.Value); - Assert.Equal("XXXXXX", confsetting.Default); + Assert.Equal("name", confsetting.Name); + Assert.Equal("value", confsetting.Value); + Assert.Equal(true, confsetting.Default); Validate(confsetting.Condition); } @@ -734,7 +734,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Port? port) { Assert.NotNull(port); - Assert.Equal("XXXXXX", port.Tag); + Assert.Equal("tag", port.Tag); Assert.NotNull(port.Analog); var analog = Assert.Single(port.Analog); @@ -747,7 +747,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Analog? analog) { Assert.NotNull(analog); - Assert.Equal("XXXXXX", analog.Mask); + Assert.Equal("mask", analog.Mask); } /// @@ -756,8 +756,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Adjuster? adjuster) { Assert.NotNull(adjuster); - Assert.Equal("XXXXXX", adjuster.Name); - Assert.Equal("XXXXXX", adjuster.Default); + Assert.Equal("name", adjuster.Name); + Assert.Equal(true, adjuster.Default); Validate(adjuster.Condition); } @@ -767,17 +767,17 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Driver? driver) { Assert.NotNull(driver); - Assert.Equal("XXXXXX", driver.Status); - Assert.Equal("XXXXXX", driver.Color); - Assert.Equal("XXXXXX", driver.Sound); - Assert.Equal("XXXXXX", driver.PaletteSize); - Assert.Equal("XXXXXX", driver.Emulation); - Assert.Equal("XXXXXX", driver.Cocktail); - Assert.Equal("XXXXXX", driver.SaveState); - Assert.Equal("XXXXXX", driver.RequiresArtwork); - Assert.Equal("XXXXXX", driver.Unofficial); - Assert.Equal("XXXXXX", driver.NoSoundHardware); - Assert.Equal("XXXXXX", driver.Incomplete); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound); + Assert.Equal("palettesize", driver.PaletteSize); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Cocktail); + Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState); + Assert.Equal(true, driver.RequiresArtwork); + Assert.Equal(true, driver.Unofficial); + Assert.Equal(true, driver.NoSoundHardware); + Assert.Equal(true, driver.Incomplete); } /// @@ -786,9 +786,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Feature? feature) { Assert.NotNull(feature); - Assert.Equal("XXXXXX", feature.Type); - Assert.Equal("XXXXXX", feature.Status); - Assert.Equal("XXXXXX", feature.Overall); + Assert.Equal(Data.Models.Metadata.FeatureType.Protection, feature.Type); + Assert.Equal(Data.Models.Metadata.FeatureStatus.Imperfect, feature.Status); + Assert.Equal(Data.Models.Metadata.FeatureStatus.Imperfect, feature.Overall); } /// @@ -797,11 +797,11 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Device? device) { Assert.NotNull(device); - Assert.Equal("XXXXXX", device.Type); - Assert.Equal("XXXXXX", device.Tag); - Assert.Equal("XXXXXX", device.FixedImage); - Assert.Equal("XXXXXX", device.Mandatory); - Assert.Equal("XXXXXX", device.Interface); + Assert.Equal(Data.Models.Metadata.DeviceType.PunchTape, device.Type); + Assert.Equal("tag", device.Tag); + Assert.Equal("fixedimage", device.FixedImage); + Assert.Equal(true, device.Mandatory); + Assert.Equal("interface", device.Interface); Validate(device.Instance); Assert.NotNull(device.Extension); @@ -815,8 +815,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Instance? instance) { Assert.NotNull(instance); - Assert.Equal("XXXXXX", instance.Name); - Assert.Equal("XXXXXX", instance.BriefName); + Assert.Equal("name", instance.Name); + Assert.Equal("briefname", instance.BriefName); } /// @@ -825,7 +825,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Extension? extension) { Assert.NotNull(extension); - Assert.Equal("XXXXXX", extension.Name); + Assert.Equal("name", extension.Name); } /// @@ -834,7 +834,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Slot? slot) { Assert.NotNull(slot); - Assert.Equal("XXXXXX", slot.Name); + Assert.Equal("name", slot.Name); Assert.NotNull(slot.SlotOption); var slotoption = Assert.Single(slot.SlotOption); @@ -847,9 +847,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.SlotOption? slotoption) { Assert.NotNull(slotoption); - Assert.Equal("XXXXXX", slotoption.Name); - Assert.Equal("XXXXXX", slotoption.DevName); - Assert.Equal("XXXXXX", slotoption.Default); + Assert.Equal("name", slotoption.Name); + Assert.Equal("devname", slotoption.DevName); + Assert.Equal(true, slotoption.Default); } /// @@ -858,10 +858,10 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.SoftwareList? softwarelist) { Assert.NotNull(softwarelist); - Assert.Equal("XXXXXX", softwarelist.Tag); - Assert.Equal("XXXXXX", softwarelist.Name); - Assert.Equal("XXXXXX", softwarelist.Status); - Assert.Equal("XXXXXX", softwarelist.Filter); + Assert.Equal("tag", softwarelist.Tag); + Assert.Equal("name", softwarelist.Name); + Assert.Equal(Data.Models.Metadata.SoftwareListStatus.Original, softwarelist.Status); + Assert.Equal("filter", softwarelist.Filter); } /// @@ -870,9 +870,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.RamOption? ramoption) { Assert.NotNull(ramoption); - Assert.Equal("XXXXXX", ramoption.Name); - Assert.Equal("XXXXXX", ramoption.Default); - Assert.Equal("XXXXXX", ramoption.Content); + Assert.Equal("name", ramoption.Name); + Assert.Equal(true, ramoption.Default); + Assert.Equal("content", ramoption.Content); } } } diff --git a/SabreTools.Serialization.CrossModel.Test/LogiqxTests.cs b/SabreTools.Serialization.CrossModel.Test/LogiqxTests.cs index 35822e4c..5f31d4da 100644 --- a/SabreTools.Serialization.CrossModel.Test/LogiqxTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/LogiqxTests.cs @@ -23,7 +23,7 @@ namespace SabreTools.Serialization.CrossModel.Test // Validate the data Assert.NotNull(newDf); Assert.Equal("XXXXXX", newDf.Build); - Assert.Equal("XXXXXX", newDf.Debug); + Assert.Equal(true, newDf.Debug); Assert.Equal("XXXXXX", newDf.SchemaLocation); Validate(newDf.Header); @@ -55,7 +55,7 @@ namespace SabreTools.Serialization.CrossModel.Test // Validate the data Assert.NotNull(newDf); Assert.Equal("XXXXXX", newDf.Build); - Assert.Equal("XXXXXX", newDf.Debug); + Assert.Equal(true, newDf.Debug); Assert.Equal("XXXXXX", newDf.SchemaLocation); Validate(newDf.Header); @@ -73,30 +73,38 @@ namespace SabreTools.Serialization.CrossModel.Test /// private static Data.Models.Logiqx.Datafile Build(bool game) { + var romvault = new Data.Models.Logiqx.RomVault + { + Header = "XXXXXX", + ForceMerging = Data.Models.Metadata.MergingFlag.Merged, + ForceNodump = Data.Models.Metadata.NodumpFlag.Required, + ForcePacking = Data.Models.Metadata.PackingFlag.Zip, + }; + var clrmamepro = new Data.Models.Logiqx.ClrMamePro { Header = "XXXXXX", - ForceMerging = "XXXXXX", - ForceNodump = "XXXXXX", - ForcePacking = "XXXXXX", + ForceMerging = Data.Models.Metadata.MergingFlag.Merged, + ForceNodump = Data.Models.Metadata.NodumpFlag.Required, + ForcePacking = Data.Models.Metadata.PackingFlag.Zip, }; var romcenter = new Data.Models.Logiqx.RomCenter { Plugin = "XXXXXX", - RomMode = "XXXXXX", - BiosMode = "XXXXXX", - SampleMode = "XXXXXX", - LockRomMode = "XXXXXX", - LockBiosMode = "XXXXXX", - LockSampleMode = "XXXXXX", + RomMode = Data.Models.Metadata.MergingFlag.Merged, + BiosMode = Data.Models.Metadata.MergingFlag.Merged, + SampleMode = Data.Models.Metadata.MergingFlag.Merged, + LockRomMode = true, + LockBiosMode = true, + LockSampleMode = true, }; var header = new Data.Models.Logiqx.Header { Id = "XXXXXX", - Name = "XXXXXX", - Description = "XXXXXX", + Name = "name", + Description = "description", RootDir = "XXXXXX", Category = "XXXXXX", Version = "XXXXXX", @@ -107,6 +115,7 @@ namespace SabreTools.Serialization.CrossModel.Test Url = "XXXXXX", Comment = "XXXXXX", Type = "XXXXXX", + RomVault = romvault, ClrMamePro = clrmamepro, RomCenter = romcenter, }; @@ -131,24 +140,24 @@ namespace SabreTools.Serialization.CrossModel.Test var release = new Data.Models.Logiqx.Release { - Name = "XXXXXX", - Region = "XXXXXX", - Language = "XXXXXX", - Date = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Region = "region", + Language = "language", + Date = "date", + Default = true, }; var biosset = new Data.Models.Logiqx.BiosSet { - Name = "XXXXXX", - Description = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Description = "description", + Default = true, }; var rom = new Data.Models.Logiqx.Rom { - Name = "XXXXXX", - Size = "XXXXXX", + Name = "name", + Size = 12345, CRC16 = "XXXXXX", CRC = "XXXXXX", CRC64 = "XXXXXX", @@ -165,76 +174,76 @@ namespace SabreTools.Serialization.CrossModel.Test xxHash364 = "XXXXXX", xxHash3128 = "XXXXXX", Merge = "XXXXXX", - Status = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, Serial = "XXXXXX", Header = "XXXXXX", Date = "XXXXXX", - Inverted = "XXXXXX", - MIA = "XXXXXX", + Inverted = true, + MIA = true, }; var disk = new Data.Models.Logiqx.Disk { - Name = "XXXXXX", + Name = "name", MD5 = "XXXXXX", SHA1 = "XXXXXX", Merge = "XXXXXX", - Status = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, Region = "XXXXXX", }; var media = new Data.Models.Logiqx.Media { - Name = "XXXXXX", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - SHA256 = "XXXXXX", - SpamSum = "XXXXXX", + Name = "name", + MD5 = "md5", + SHA1 = "sha1", + SHA256 = "sha256", + SpamSum = "spamsum", }; var deviceRef = new Data.Models.Logiqx.DeviceRef { - Name = "XXXXXX", + Name = "name", }; var sample = new Data.Models.Logiqx.Sample { - Name = "XXXXXX", + Name = "name", }; var archive = new Data.Models.Logiqx.Archive { - Name = "XXXXXX", + Name = "name", }; var driver = new Data.Models.Logiqx.Driver { - Status = "XXXXXX", - Emulation = "XXXXXX", - Cocktail = "XXXXXX", - SaveState = "XXXXXX", - RequiresArtwork = "XXXXXX", - Unofficial = "XXXXXX", - NoSoundHardware = "XXXXXX", - Incomplete = "XXXXXX", + Status = Data.Models.Metadata.SupportStatus.Good, + Emulation = Data.Models.Metadata.SupportStatus.Good, + Cocktail = Data.Models.Metadata.SupportStatus.Good, + SaveState = Data.Models.Metadata.Supported.Yes, + RequiresArtwork = true, + Unofficial = true, + NoSoundHardware = true, + Incomplete = true, }; var softwarelist = new Data.Models.Logiqx.SoftwareList { - Tag = "XXXXXX", - Name = "XXXXXX", - Status = "XXXXXX", - Filter = "XXXXXX", + Tag = "tag", + Name = "name", + Status = Data.Models.Metadata.SoftwareListStatus.Original, + Filter = "filter", }; Data.Models.Logiqx.GameBase gameBase = game ? new Data.Models.Logiqx.Game() : new Data.Models.Logiqx.Machine(); - gameBase.Name = "XXXXXX"; + gameBase.Name = "name"; gameBase.SourceFile = "XXXXXX"; - gameBase.IsBios = "XXXXXX"; - gameBase.IsDevice = "XXXXXX"; - gameBase.IsMechanical = "XXXXXX"; + gameBase.IsBios = true; + gameBase.IsDevice = true; + gameBase.IsMechanical = true; gameBase.CloneOf = "XXXXXX"; gameBase.RomOf = "XXXXXX"; gameBase.SampleOf = "XXXXXX"; @@ -242,9 +251,9 @@ namespace SabreTools.Serialization.CrossModel.Test gameBase.RebuildTo = "XXXXXX"; gameBase.Id = "XXXXXX"; gameBase.CloneOfId = "XXXXXX"; - gameBase.Runnable = "XXXXXX"; + gameBase.Runnable = Data.Models.Metadata.Runnable.Yes; gameBase.Comment = ["XXXXXX"]; - gameBase.Description = "XXXXXX"; + gameBase.Description = "description"; gameBase.Year = "XXXXXX"; gameBase.Manufacturer = "XXXXXX"; gameBase.Publisher = "XXXXXX"; @@ -263,20 +272,20 @@ namespace SabreTools.Serialization.CrossModel.Test var subdir = new Data.Models.Logiqx.Dir { - Name = "XXXXXX", + Name = "name", Game = [gameBase], }; var dir = new Data.Models.Logiqx.Dir { - Name = "XXXXXX", + Name = "name", Subdir = [subdir], }; return new Data.Models.Logiqx.Datafile { Build = "XXXXXX", - Debug = "XXXXXX", + Debug = true, SchemaLocation = "XXXXXX", Header = header, Game = [gameBase], @@ -291,8 +300,8 @@ namespace SabreTools.Serialization.CrossModel.Test { Assert.NotNull(header); Assert.Equal("XXXXXX", header.Id); - Assert.Equal("XXXXXX", header.Name); - Assert.Equal("XXXXXX", header.Description); + Assert.Equal("name", header.Name); + Assert.Equal("description", header.Description); Assert.Equal("XXXXXX", header.RootDir); Assert.Equal("XXXXXX", header.Category); Assert.Equal("XXXXXX", header.Version); @@ -303,10 +312,23 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal("XXXXXX", header.Url); Assert.Equal("XXXXXX", header.Comment); Assert.Equal("XXXXXX", header.Type); + Validate(header.RomVault); Validate(header.ClrMamePro); Validate(header.RomCenter); } + /// + /// Validate a RomVault + /// + private static void Validate(Data.Models.Logiqx.RomVault? rv) + { + Assert.NotNull(rv); + Assert.Equal("XXXXXX", rv.Header); + Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, rv.ForceMerging); + Assert.Equal(Data.Models.Metadata.NodumpFlag.Required, rv.ForceNodump); + Assert.Equal(Data.Models.Metadata.PackingFlag.Zip, rv.ForcePacking); + } + /// /// Validate a ClrMamePro /// @@ -314,9 +336,9 @@ namespace SabreTools.Serialization.CrossModel.Test { Assert.NotNull(cmp); Assert.Equal("XXXXXX", cmp.Header); - Assert.Equal("XXXXXX", cmp.ForceMerging); - Assert.Equal("XXXXXX", cmp.ForceNodump); - Assert.Equal("XXXXXX", cmp.ForcePacking); + Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, cmp.ForceMerging); + Assert.Equal(Data.Models.Metadata.NodumpFlag.Required, cmp.ForceNodump); + Assert.Equal(Data.Models.Metadata.PackingFlag.Zip, cmp.ForcePacking); } /// @@ -326,12 +348,12 @@ namespace SabreTools.Serialization.CrossModel.Test { Assert.NotNull(rc); Assert.Equal("XXXXXX", rc.Plugin); - Assert.Equal("XXXXXX", rc.RomMode); - Assert.Equal("XXXXXX", rc.BiosMode); - Assert.Equal("XXXXXX", rc.SampleMode); - Assert.Equal("XXXXXX", rc.LockRomMode); - Assert.Equal("XXXXXX", rc.LockBiosMode); - Assert.Equal("XXXXXX", rc.LockSampleMode); + Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, rc.RomMode); + Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, rc.BiosMode); + Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, rc.SampleMode); + Assert.Equal(true, rc.LockRomMode); + Assert.Equal(true, rc.LockBiosMode); + Assert.Equal(true, rc.LockSampleMode); } /// @@ -341,13 +363,13 @@ namespace SabreTools.Serialization.CrossModel.Test { Assert.NotNull(gb); if (nested) - Assert.Equal("XXXXXX\\XXXXXX\\XXXXXX", gb.Name); + Assert.Equal("name\\name\\name", gb.Name); else - Assert.Equal("XXXXXX", gb.Name); + Assert.Equal("name", gb.Name); Assert.Equal("XXXXXX", gb.SourceFile); - Assert.Equal("XXXXXX", gb.IsBios); - Assert.Equal("XXXXXX", gb.IsDevice); - Assert.Equal("XXXXXX", gb.IsMechanical); + Assert.Equal(true, gb.IsBios); + Assert.Equal(true, gb.IsDevice); + Assert.Equal(true, gb.IsMechanical); Assert.Equal("XXXXXX", gb.CloneOf); Assert.Equal("XXXXXX", gb.RomOf); Assert.Equal("XXXXXX", gb.SampleOf); @@ -355,13 +377,13 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal("XXXXXX", gb.RebuildTo); Assert.Equal("XXXXXX", gb.Id); Assert.Equal("XXXXXX", gb.CloneOfId); - Assert.Equal("XXXXXX", gb.Runnable); + Assert.Equal(Data.Models.Metadata.Runnable.Yes, gb.Runnable); Assert.NotNull(gb.Comment); string comment = Assert.Single(gb.Comment); Assert.Equal("XXXXXX", comment); - Assert.Equal("XXXXXX", gb.Description); + Assert.Equal("description", gb.Description); Assert.Equal("XXXXXX", gb.Year); Assert.Equal("XXXXXX", gb.Manufacturer); Assert.Equal("XXXXXX", gb.Publisher); @@ -439,11 +461,11 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Logiqx.Release? release) { Assert.NotNull(release); - Assert.Equal("XXXXXX", release.Name); - Assert.Equal("XXXXXX", release.Region); - Assert.Equal("XXXXXX", release.Language); - Assert.Equal("XXXXXX", release.Date); - Assert.Equal("XXXXXX", release.Default); + Assert.Equal("name", release.Name); + Assert.Equal("region", release.Region); + Assert.Equal("language", release.Language); + Assert.Equal("date", release.Date); + Assert.Equal(true, release.Default); } /// @@ -452,9 +474,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Logiqx.BiosSet? biosset) { Assert.NotNull(biosset); - Assert.Equal("XXXXXX", biosset.Name); - Assert.Equal("XXXXXX", biosset.Description); - Assert.Equal("XXXXXX", biosset.Default); + Assert.Equal("name", biosset.Name); + Assert.Equal("description", biosset.Description); + Assert.Equal(true, biosset.Default); } /// @@ -463,8 +485,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Logiqx.Rom? rom) { Assert.NotNull(rom); - Assert.Equal("XXXXXX", rom.Name); - Assert.Equal("XXXXXX", rom.Size); + Assert.Equal("name", rom.Name); + Assert.Equal(12345, rom.Size); Assert.Equal("XXXXXX", rom.CRC16); Assert.Equal("XXXXXX", rom.CRC); Assert.Equal("XXXXXX", rom.CRC64); @@ -481,12 +503,12 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal("XXXXXX", rom.xxHash364); Assert.Equal("XXXXXX", rom.xxHash3128); Assert.Equal("XXXXXX", rom.Merge); - Assert.Equal("XXXXXX", rom.Status); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, rom.Status); Assert.Equal("XXXXXX", rom.Serial); Assert.Equal("XXXXXX", rom.Header); Assert.Equal("XXXXXX", rom.Date); - Assert.Equal("XXXXXX", rom.Inverted); - Assert.Equal("XXXXXX", rom.MIA); + Assert.Equal(true, rom.Inverted); + Assert.Equal(true, rom.MIA); } /// @@ -495,11 +517,11 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Logiqx.Disk? disk) { Assert.NotNull(disk); - Assert.Equal("XXXXXX", disk.Name); + Assert.Equal("name", disk.Name); Assert.Equal("XXXXXX", disk.MD5); Assert.Equal("XXXXXX", disk.SHA1); Assert.Equal("XXXXXX", disk.Merge); - Assert.Equal("XXXXXX", disk.Status); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status); Assert.Equal("XXXXXX", disk.Region); } @@ -509,11 +531,11 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Logiqx.Media? media) { Assert.NotNull(media); - Assert.Equal("XXXXXX", media.Name); - Assert.Equal("XXXXXX", media.MD5); - Assert.Equal("XXXXXX", media.SHA1); - Assert.Equal("XXXXXX", media.SHA256); - Assert.Equal("XXXXXX", media.SpamSum); + Assert.Equal("name", media.Name); + Assert.Equal("md5", media.MD5); + Assert.Equal("sha1", media.SHA1); + Assert.Equal("sha256", media.SHA256); + Assert.Equal("spamsum", media.SpamSum); } /// @@ -522,7 +544,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Logiqx.DeviceRef? deviceref) { Assert.NotNull(deviceref); - Assert.Equal("XXXXXX", deviceref.Name); + Assert.Equal("name", deviceref.Name); } /// @@ -531,7 +553,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Logiqx.Sample? sample) { Assert.NotNull(sample); - Assert.Equal("XXXXXX", sample.Name); + Assert.Equal("name", sample.Name); } /// @@ -540,7 +562,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Logiqx.Archive? archive) { Assert.NotNull(archive); - Assert.Equal("XXXXXX", archive.Name); + Assert.Equal("name", archive.Name); } /// @@ -549,14 +571,14 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Logiqx.Driver? driver) { Assert.NotNull(driver); - Assert.Equal("XXXXXX", driver.Status); - Assert.Equal("XXXXXX", driver.Emulation); - Assert.Equal("XXXXXX", driver.Cocktail); - Assert.Equal("XXXXXX", driver.SaveState); - Assert.Equal("XXXXXX", driver.RequiresArtwork); - Assert.Equal("XXXXXX", driver.Unofficial); - Assert.Equal("XXXXXX", driver.NoSoundHardware); - Assert.Equal("XXXXXX", driver.Incomplete); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Cocktail); + Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState); + Assert.Equal(true, driver.RequiresArtwork); + Assert.Equal(true, driver.Unofficial); + Assert.Equal(true, driver.NoSoundHardware); + Assert.Equal(true, driver.Incomplete); } /// @@ -565,10 +587,10 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Logiqx.SoftwareList? softwarelist) { Assert.NotNull(softwarelist); - Assert.Equal("XXXXXX", softwarelist.Tag); - Assert.Equal("XXXXXX", softwarelist.Name); - Assert.Equal("XXXXXX", softwarelist.Status); - Assert.Equal("XXXXXX", softwarelist.Filter); + Assert.Equal("tag", softwarelist.Tag); + Assert.Equal("name", softwarelist.Name); + Assert.Equal(Data.Models.Metadata.SoftwareListStatus.Original, softwarelist.Status); + Assert.Equal("filter", softwarelist.Filter); } } } diff --git a/SabreTools.Serialization.CrossModel.Test/M1Tests.cs b/SabreTools.Serialization.CrossModel.Test/M1Tests.cs index 2ece60d7..4f8d42ad 100644 --- a/SabreTools.Serialization.CrossModel.Test/M1Tests.cs +++ b/SabreTools.Serialization.CrossModel.Test/M1Tests.cs @@ -61,148 +61,148 @@ namespace SabreTools.Serialization.CrossModel.Test { var biosset = new Data.Models.Listxml.BiosSet { - Name = "XXXXXX", - Description = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Description = "description", + Default = true, }; var rom = new Data.Models.Listxml.Rom { - Name = "XXXXXX", + Name = "name", Bios = "XXXXXX", - Size = "XXXXXX", + Size = 12345, CRC = "XXXXXX", SHA1 = "XXXXXX", Merge = "XXXXXX", Region = "XXXXXX", Offset = "XXXXXX", - Status = "XXXXXX", - Optional = "XXXXXX", - Dispose = "XXXXXX", - SoundOnly = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, + Optional = true, + Dispose = true, + SoundOnly = true, }; var disk = new Data.Models.Listxml.Disk { - Name = "XXXXXX", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - Merge = "XXXXXX", - Region = "XXXXXX", - Index = "XXXXXX", - Writable = "XXXXXX", - Status = "XXXXXX", - Optional = "XXXXXX", + Name = "name", + MD5 = "md5", + SHA1 = "sha1", + Merge = "merge", + Region = "region", + Index = 12345, + Writable = true, + Status = Data.Models.Metadata.ItemStatus.Good, + Optional = true, }; var deviceref = new Data.Models.Listxml.DeviceRef { - Name = "XXXXXX", + Name = "name", }; var sample = new Data.Models.Listxml.Sample { - Name = "XXXXXX", + Name = "name", }; var chip = new Data.Models.Listxml.Chip { - Name = "XXXXXX", - Tag = "XXXXXX", - Type = "XXXXXX", - SoundOnly = "XXXXXX", - Clock = "XXXXXX", + Name = "name", + Tag = "tag", + Type = Data.Models.Metadata.ChipType.CPU, + SoundOnly = true, + Clock = 12345, }; var display = new Data.Models.Listxml.Display { - Tag = "XXXXXX", - Type = "XXXXXX", - Rotate = "XXXXXX", - FlipX = "XXXXXX", - Width = "XXXXXX", - Height = "XXXXXX", - Refresh = "XXXXXX", - PixClock = "XXXXXX", - HTotal = "XXXXXX", - HBEnd = "XXXXXX", - HBStart = "XXXXXX", - VTotal = "XXXXXX", - VBEnd = "XXXXXX", - VBStart = "XXXXXX", + Tag = "tag", + Type = Data.Models.Metadata.DisplayType.Vector, + Rotate = Data.Models.Metadata.Rotation.East, + FlipX = true, + Width = 12345, + Height = 12345, + Refresh = 123.45, + PixClock = 12345, + HTotal = 12345, + HBEnd = 12345, + HBStart = 12345, + VTotal = 12345, + VBEnd = 12345, + VBStart = 12345, }; var video = new Data.Models.Listxml.Video { - Screen = "XXXXXX", - Orientation = "XXXXXX", - Width = "XXXXXX", - Height = "XXXXXX", - AspectX = "XXXXXX", - AspectY = "XXXXXX", - Refresh = "XXXXXX", + Screen = Data.Models.Metadata.DisplayType.Vector, + Orientation = Data.Models.Metadata.Rotation.East, + Width = 12345, + Height = 12345, + AspectX = 12345, + AspectY = 12345, + Refresh = 123.45, }; var sound = new Data.Models.Listxml.Sound { - Channels = "XXXXXX", + Channels = 12345, }; var control = new Data.Models.Listxml.Control { - Type = "XXXXXX", - Player = "XXXXXX", - Buttons = "XXXXXX", - ReqButtons = "XXXXXX", - Minimum = "XXXXXX", - Maximum = "XXXXXX", - Sensitivity = "XXXXXX", - KeyDelta = "XXXXXX", - Reverse = "XXXXXX", - Ways = "XXXXXX", - Ways2 = "XXXXXX", - Ways3 = "XXXXXX", + Type = Data.Models.Metadata.ControlType.Lightgun, + Player = 12345, + Buttons = 12345, + ReqButtons = 12345, + Minimum = 12345, + Maximum = 12345, + Sensitivity = 12345, + KeyDelta = 12345, + Reverse = true, + Ways = "ways", + Ways2 = "ways2", + Ways3 = "ways3", }; var input = new Data.Models.Listxml.Input { - Service = "XXXXXX", - Tilt = "XXXXXX", - Players = "XXXXXX", - //ControlAttr = "XXXXXX", // Mututally exclusive with input.Control - Buttons = "XXXXXX", - Coins = "XXXXXX", + Service = true, + Tilt = true, + Players = 12345, + ControlAttr = "controlattr", + Buttons = 12345, + Coins = 12345, Control = [control], }; var condition = new Data.Models.Listxml.Condition { - Tag = "XXXXXX", - Mask = "XXXXXX", - Relation = "XXXXXX", - Value = "XXXXXX", + Tag = "tag", + Mask = "mask", + Relation = Data.Models.Metadata.Relation.Equal, + Value = "value", }; var diplocation = new Data.Models.Listxml.DipLocation { - Name = "XXXXXX", - Number = "XXXXXX", - Inverted = "XXXXXX", + Name = "name", + Number = 12345, + Inverted = true, }; var dipvalue = new Data.Models.Listxml.DipValue { - Name = "XXXXXX", - Value = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Value = "value", + Default = true, Condition = condition, }; var dipswitch = new Data.Models.Listxml.DipSwitch { - Name = "XXXXXX", - Tag = "XXXXXX", - Mask = "XXXXXX", + Name = "name", + Tag = "tag", + Mask = "mask", Condition = condition, DipLocation = [diplocation], DipValue = [dipvalue], @@ -210,24 +210,24 @@ namespace SabreTools.Serialization.CrossModel.Test var conflocation = new Data.Models.Listxml.ConfLocation { - Name = "XXXXXX", - Number = "XXXXXX", - Inverted = "XXXXXX", + Name = "name", + Number = 12345, + Inverted = true, }; var confsetting = new Data.Models.Listxml.ConfSetting { - Name = "XXXXXX", - Value = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Value = "value", + Default = true, Condition = condition, }; var configuration = new Data.Models.Listxml.Configuration { - Name = "XXXXXX", - Tag = "XXXXXX", - Mask = "XXXXXX", + Name = "name", + Tag = "tag", + Mask = "mask", Condition = condition, ConfLocation = [conflocation], ConfSetting = [confsetting], @@ -235,107 +235,107 @@ namespace SabreTools.Serialization.CrossModel.Test var analog = new Data.Models.Listxml.Analog { - Mask = "XXXXXX", + Mask = "mask", }; var port = new Data.Models.Listxml.Port { - Tag = "XXXXXX", + Tag = "tag", Analog = [analog], }; var adjuster = new Data.Models.Listxml.Adjuster { - Name = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Default = true, Condition = condition, }; var driver = new Data.Models.Listxml.Driver { - Status = "XXXXXX", - Color = "XXXXXX", - Sound = "XXXXXX", - PaletteSize = "XXXXXX", - Emulation = "XXXXXX", - Cocktail = "XXXXXX", - SaveState = "XXXXXX", - RequiresArtwork = "XXXXXX", - Unofficial = "XXXXXX", - NoSoundHardware = "XXXXXX", - Incomplete = "XXXXXX", + Status = Data.Models.Metadata.SupportStatus.Good, + Color = Data.Models.Metadata.SupportStatus.Good, + Sound = Data.Models.Metadata.SupportStatus.Good, + PaletteSize = "palettesize", + Emulation = Data.Models.Metadata.SupportStatus.Good, + Cocktail = Data.Models.Metadata.SupportStatus.Good, + SaveState = Data.Models.Metadata.Supported.Yes, + RequiresArtwork = true, + Unofficial = true, + NoSoundHardware = true, + Incomplete = true, }; var feature = new Data.Models.Listxml.Feature { - Type = "XXXXXX", - Status = "XXXXXX", - Overall = "XXXXXX", + Type = Data.Models.Metadata.FeatureType.Protection, + Status = Data.Models.Metadata.FeatureStatus.Imperfect, + Overall = Data.Models.Metadata.FeatureStatus.Imperfect, }; var instance = new Data.Models.Listxml.Instance { - Name = "XXXXXX", - BriefName = "XXXXXX", + Name = "name", + BriefName = "briefname", }; var extension = new Data.Models.Listxml.Extension { - Name = "XXXXXX", + Name = "name", }; var device = new Data.Models.Listxml.Device { - Type = "XXXXXX", - Tag = "XXXXXX", - FixedImage = "XXXXXX", - Mandatory = "XXXXXX", - Interface = "XXXXXX", + Type = Data.Models.Metadata.DeviceType.PunchTape, + Tag = "tag", + FixedImage = "fixedimage", + Mandatory = true, + Interface = "interface", Instance = instance, Extension = [extension], }; var slotOption = new Data.Models.Listxml.SlotOption { - Name = "XXXXXX", - DevName = "XXXXXX", - Default = "XXXXXX", + Name = "name", + DevName = "devname", + Default = true, }; var slot = new Data.Models.Listxml.Slot { - Name = "XXXXXX", + Name = "name", SlotOption = [slotOption], }; var softwarelist = new Data.Models.Listxml.SoftwareList { - Tag = "XXXXXX", - Name = "XXXXXX", - Status = "XXXXXX", - Filter = "XXXXXX", + Tag = "tag", + Name = "name", + Status = Data.Models.Metadata.SoftwareListStatus.Original, + Filter = "filter", }; var ramoption = new Data.Models.Listxml.RamOption { - Name = "XXXXXX", - Default = "XXXXXX", - Content = "XXXXXX", + Name = "name", + Default = true, + Content = "content", }; Data.Models.Listxml.GameBase gameBase = game ? new Data.Models.Listxml.Game() : new Data.Models.Listxml.Machine(); - gameBase.Name = "XXXXXX"; + gameBase.Name = "name"; gameBase.SourceFile = "XXXXXX"; - gameBase.IsBios = "XXXXXX"; - gameBase.IsDevice = "XXXXXX"; - gameBase.IsMechanical = "XXXXXX"; - gameBase.Runnable = "XXXXXX"; + gameBase.IsBios = true; + gameBase.IsDevice = true; + gameBase.IsMechanical = true; + gameBase.Runnable = Data.Models.Metadata.Runnable.Yes; gameBase.CloneOf = "XXXXXX"; gameBase.RomOf = "XXXXXX"; gameBase.SampleOf = "XXXXXX"; - gameBase.Description = "XXXXXX"; + gameBase.Description = "description"; gameBase.Year = "XXXXXX"; gameBase.Manufacturer = "XXXXXX"; gameBase.History = "XXXXXX"; @@ -373,16 +373,16 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.GameBase? gb) { Assert.NotNull(gb); - Assert.Equal("XXXXXX", gb.Name); + Assert.Equal("name", gb.Name); Assert.Equal("XXXXXX", gb.SourceFile); - Assert.Equal("XXXXXX", gb.IsBios); - Assert.Equal("XXXXXX", gb.IsDevice); - Assert.Equal("XXXXXX", gb.IsMechanical); - Assert.Equal("XXXXXX", gb.Runnable); + Assert.Equal(true, gb.IsBios); + Assert.Equal(true, gb.IsDevice); + Assert.Equal(true, gb.IsMechanical); + Assert.Equal(Data.Models.Metadata.Runnable.Yes, gb.Runnable); Assert.Equal("XXXXXX", gb.CloneOf); Assert.Equal("XXXXXX", gb.RomOf); Assert.Equal("XXXXXX", gb.SampleOf); - Assert.Equal("XXXXXX", gb.Description); + Assert.Equal("description", gb.Description); Assert.Equal("XXXXXX", gb.Year); Assert.Equal("XXXXXX", gb.Manufacturer); Assert.Equal("XXXXXX", gb.History); @@ -467,9 +467,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.BiosSet? biosset) { Assert.NotNull(biosset); - Assert.Equal("XXXXXX", biosset.Name); - Assert.Equal("XXXXXX", biosset.Description); - Assert.Equal("XXXXXX", biosset.Default); + Assert.Equal("name", biosset.Name); + Assert.Equal("description", biosset.Description); + Assert.Equal(true, biosset.Default); } /// @@ -478,18 +478,18 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Rom? rom) { Assert.NotNull(rom); - Assert.Equal("XXXXXX", rom.Name); + Assert.Equal("name", rom.Name); Assert.Equal("XXXXXX", rom.Bios); - Assert.Equal("XXXXXX", rom.Size); + Assert.Equal(12345, rom.Size); Assert.Equal("XXXXXX", rom.CRC); Assert.Equal("XXXXXX", rom.SHA1); Assert.Equal("XXXXXX", rom.Merge); Assert.Equal("XXXXXX", rom.Region); Assert.Equal("XXXXXX", rom.Offset); - Assert.Equal("XXXXXX", rom.Status); - Assert.Equal("XXXXXX", rom.Optional); - Assert.Equal("XXXXXX", rom.Dispose); - Assert.Equal("XXXXXX", rom.SoundOnly); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, rom.Status); + Assert.Equal(true, rom.Optional); + Assert.Equal(true, rom.Dispose); + Assert.Equal(true, rom.SoundOnly); } /// @@ -498,15 +498,15 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Disk? disk) { Assert.NotNull(disk); - Assert.Equal("XXXXXX", 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("XXXXXX", disk.Writable); - Assert.Equal("XXXXXX", disk.Status); - Assert.Equal("XXXXXX", disk.Optional); + Assert.Equal("name", disk.Name); + 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); } /// @@ -515,7 +515,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.DeviceRef? deviceref) { Assert.NotNull(deviceref); - Assert.Equal("XXXXXX", deviceref.Name); + Assert.Equal("name", deviceref.Name); } /// @@ -524,7 +524,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Sample? sample) { Assert.NotNull(sample); - Assert.Equal("XXXXXX", sample.Name); + Assert.Equal("name", sample.Name); } /// @@ -533,11 +533,11 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Chip? chip) { Assert.NotNull(chip); - Assert.Equal("XXXXXX", chip.Name); - Assert.Equal("XXXXXX", chip.Tag); - Assert.Equal("XXXXXX", chip.Type); - Assert.Equal("XXXXXX", chip.SoundOnly); - Assert.Equal("XXXXXX", chip.Clock); + Assert.Equal("name", chip.Name); + Assert.Equal("tag", chip.Tag); + Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type); + Assert.Equal(true, chip.SoundOnly); + Assert.Equal(12345, chip.Clock); } /// @@ -546,20 +546,20 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Display? display) { Assert.NotNull(display); - Assert.Equal("XXXXXX", display.Tag); - Assert.Equal("XXXXXX", display.Type); - Assert.Equal("XXXXXX", display.Rotate); - Assert.Equal("XXXXXX", display.FlipX); - Assert.Equal("XXXXXX", display.Width); - Assert.Equal("XXXXXX", display.Height); - Assert.Equal("XXXXXX", display.Refresh); - Assert.Equal("XXXXXX", display.PixClock); - Assert.Equal("XXXXXX", display.HTotal); - Assert.Equal("XXXXXX", display.HBEnd); - Assert.Equal("XXXXXX", display.HBStart); - Assert.Equal("XXXXXX", display.VTotal); - Assert.Equal("XXXXXX", display.VBEnd); - Assert.Equal("XXXXXX", display.VBStart); + Assert.Equal("tag", display.Tag); + Assert.Equal(Data.Models.Metadata.DisplayType.Vector, display.Type); + Assert.Equal(Data.Models.Metadata.Rotation.East, display.Rotate); + Assert.Equal(true, display.FlipX); + Assert.Equal(12345, display.Width); + Assert.Equal(12345, display.Height); + Assert.Equal(123.45, display.Refresh); + Assert.Equal(12345, display.PixClock); + Assert.Equal(12345, display.HTotal); + Assert.Equal(12345, display.HBEnd); + Assert.Equal(12345, display.HBStart); + Assert.Equal(12345, display.VTotal); + Assert.Equal(12345, display.VBEnd); + Assert.Equal(12345, display.VBStart); } /// @@ -568,13 +568,13 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Video? video) { Assert.NotNull(video); - Assert.Equal("XXXXXX", video.Screen); - Assert.Equal("XXXXXX", video.Orientation); - Assert.Equal("XXXXXX", video.Width); - Assert.Equal("XXXXXX", video.Height); - Assert.Equal("XXXXXX", video.AspectX); - Assert.Equal("XXXXXX", video.AspectY); - Assert.Equal("XXXXXX", video.Refresh); + Assert.Equal(Data.Models.Metadata.DisplayType.Vector, video.Screen); + Assert.Equal(Data.Models.Metadata.Rotation.East, video.Orientation); + Assert.Equal(12345, video.Width); + Assert.Equal(12345, video.Height); + Assert.Equal(12345, video.AspectX); + Assert.Equal(12345, video.AspectY); + Assert.Equal(123.45, video.Refresh); } /// @@ -583,7 +583,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Sound? sound) { Assert.NotNull(sound); - Assert.Equal("XXXXXX", sound.Channels); + Assert.Equal(12345, sound.Channels); } /// @@ -592,12 +592,12 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Input? input) { Assert.NotNull(input); - Assert.Equal("XXXXXX", input.Service); - Assert.Equal("XXXXXX", input.Tilt); - Assert.Equal("XXXXXX", input.Players); - //Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control - Assert.Equal("XXXXXX", input.Buttons); - Assert.Equal("XXXXXX", input.Coins); + Assert.Equal(true, input.Service); + Assert.Equal(true, input.Tilt); + Assert.Equal(12345, input.Players); + Assert.Equal("controlattr", input.ControlAttr); + Assert.Equal(12345, input.Buttons); + Assert.Equal(12345, input.Coins); Assert.NotNull(input.Control); var control = Assert.Single(input.Control); @@ -610,18 +610,18 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Control? control) { Assert.NotNull(control); - Assert.Equal("XXXXXX", control.Type); - Assert.Equal("XXXXXX", control.Player); - Assert.Equal("XXXXXX", control.Buttons); - Assert.Equal("XXXXXX", control.ReqButtons); - Assert.Equal("XXXXXX", control.Minimum); - Assert.Equal("XXXXXX", control.Maximum); - Assert.Equal("XXXXXX", control.Sensitivity); - Assert.Equal("XXXXXX", control.KeyDelta); - Assert.Equal("XXXXXX", control.Reverse); - Assert.Equal("XXXXXX", control.Ways); - Assert.Equal("XXXXXX", control.Ways2); - Assert.Equal("XXXXXX", control.Ways3); + Assert.Equal(Data.Models.Metadata.ControlType.Lightgun, control.Type); + Assert.Equal(12345, control.Player); + Assert.Equal(12345, control.Buttons); + Assert.Equal(12345, control.ReqButtons); + Assert.Equal(12345, control.Minimum); + Assert.Equal(12345, control.Maximum); + Assert.Equal(12345, control.Sensitivity); + Assert.Equal(12345, control.KeyDelta); + Assert.Equal(true, control.Reverse); + Assert.Equal("ways", control.Ways); + Assert.Equal("ways2", control.Ways2); + Assert.Equal("ways3", control.Ways3); } /// @@ -630,9 +630,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.DipSwitch? dipswitch) { Assert.NotNull(dipswitch); - Assert.Equal("XXXXXX", dipswitch.Name); - Assert.Equal("XXXXXX", dipswitch.Tag); - Assert.Equal("XXXXXX", dipswitch.Mask); + Assert.Equal("name", dipswitch.Name); + Assert.Equal("tag", dipswitch.Tag); + Assert.Equal("mask", dipswitch.Mask); Validate(dipswitch.Condition); Assert.NotNull(dipswitch.DipLocation); @@ -650,10 +650,10 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Condition? condition) { Assert.NotNull(condition); - Assert.Equal("XXXXXX", condition.Tag); - Assert.Equal("XXXXXX", condition.Mask); - Assert.Equal("XXXXXX", condition.Relation); - Assert.Equal("XXXXXX", condition.Value); + Assert.Equal("tag", condition.Tag); + Assert.Equal("mask", condition.Mask); + Assert.Equal(Data.Models.Metadata.Relation.Equal, condition.Relation); + Assert.Equal("value", condition.Value); } /// @@ -662,9 +662,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.DipLocation? diplocation) { Assert.NotNull(diplocation); - Assert.Equal("XXXXXX", diplocation.Name); - Assert.Equal("XXXXXX", diplocation.Number); - Assert.Equal("XXXXXX", diplocation.Inverted); + Assert.Equal("name", diplocation.Name); + Assert.Equal(12345, diplocation.Number); + Assert.Equal(true, diplocation.Inverted); } /// @@ -673,9 +673,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.DipValue? dipvalue) { Assert.NotNull(dipvalue); - Assert.Equal("XXXXXX", dipvalue.Name); - Assert.Equal("XXXXXX", dipvalue.Value); - Assert.Equal("XXXXXX", dipvalue.Default); + Assert.Equal("name", dipvalue.Name); + Assert.Equal("value", dipvalue.Value); + Assert.Equal(true, dipvalue.Default); Validate(dipvalue.Condition); } @@ -685,9 +685,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Configuration? configuration) { Assert.NotNull(configuration); - Assert.Equal("XXXXXX", configuration.Name); - Assert.Equal("XXXXXX", configuration.Tag); - Assert.Equal("XXXXXX", configuration.Mask); + Assert.Equal("name", configuration.Name); + Assert.Equal("tag", configuration.Tag); + Assert.Equal("mask", configuration.Mask); Validate(configuration.Condition); Assert.NotNull(configuration.ConfLocation); @@ -705,9 +705,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.ConfLocation? conflocation) { Assert.NotNull(conflocation); - Assert.Equal("XXXXXX", conflocation.Name); - Assert.Equal("XXXXXX", conflocation.Number); - Assert.Equal("XXXXXX", conflocation.Inverted); + Assert.Equal("name", conflocation.Name); + Assert.Equal(12345, conflocation.Number); + Assert.Equal(true, conflocation.Inverted); } /// @@ -716,9 +716,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.ConfSetting? confsetting) { Assert.NotNull(confsetting); - Assert.Equal("XXXXXX", confsetting.Name); - Assert.Equal("XXXXXX", confsetting.Value); - Assert.Equal("XXXXXX", confsetting.Default); + Assert.Equal("name", confsetting.Name); + Assert.Equal("value", confsetting.Value); + Assert.Equal(true, confsetting.Default); Validate(confsetting.Condition); } @@ -728,7 +728,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Port? port) { Assert.NotNull(port); - Assert.Equal("XXXXXX", port.Tag); + Assert.Equal("tag", port.Tag); Assert.NotNull(port.Analog); var analog = Assert.Single(port.Analog); @@ -741,7 +741,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Analog? analog) { Assert.NotNull(analog); - Assert.Equal("XXXXXX", analog.Mask); + Assert.Equal("mask", analog.Mask); } /// @@ -750,8 +750,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Adjuster? adjuster) { Assert.NotNull(adjuster); - Assert.Equal("XXXXXX", adjuster.Name); - Assert.Equal("XXXXXX", adjuster.Default); + Assert.Equal("name", adjuster.Name); + Assert.Equal(true, adjuster.Default); Validate(adjuster.Condition); } @@ -761,17 +761,17 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Driver? driver) { Assert.NotNull(driver); - Assert.Equal("XXXXXX", driver.Status); - Assert.Equal("XXXXXX", driver.Color); - Assert.Equal("XXXXXX", driver.Sound); - Assert.Equal("XXXXXX", driver.PaletteSize); - Assert.Equal("XXXXXX", driver.Emulation); - Assert.Equal("XXXXXX", driver.Cocktail); - Assert.Equal("XXXXXX", driver.SaveState); - Assert.Equal("XXXXXX", driver.RequiresArtwork); - Assert.Equal("XXXXXX", driver.Unofficial); - Assert.Equal("XXXXXX", driver.NoSoundHardware); - Assert.Equal("XXXXXX", driver.Incomplete); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound); + Assert.Equal("palettesize", driver.PaletteSize); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Cocktail); + Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState); + Assert.Equal(true, driver.RequiresArtwork); + Assert.Equal(true, driver.Unofficial); + Assert.Equal(true, driver.NoSoundHardware); + Assert.Equal(true, driver.Incomplete); } /// @@ -780,9 +780,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Feature? feature) { Assert.NotNull(feature); - Assert.Equal("XXXXXX", feature.Type); - Assert.Equal("XXXXXX", feature.Status); - Assert.Equal("XXXXXX", feature.Overall); + Assert.Equal(Data.Models.Metadata.FeatureType.Protection, feature.Type); + Assert.Equal(Data.Models.Metadata.FeatureStatus.Imperfect, feature.Status); + Assert.Equal(Data.Models.Metadata.FeatureStatus.Imperfect, feature.Overall); } /// @@ -791,11 +791,11 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Device? device) { Assert.NotNull(device); - Assert.Equal("XXXXXX", device.Type); - Assert.Equal("XXXXXX", device.Tag); - Assert.Equal("XXXXXX", device.FixedImage); - Assert.Equal("XXXXXX", device.Mandatory); - Assert.Equal("XXXXXX", device.Interface); + Assert.Equal(Data.Models.Metadata.DeviceType.PunchTape, device.Type); + Assert.Equal("tag", device.Tag); + Assert.Equal("fixedimage", device.FixedImage); + Assert.Equal(true, device.Mandatory); + Assert.Equal("interface", device.Interface); Validate(device.Instance); Assert.NotNull(device.Extension); @@ -809,8 +809,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Instance? instance) { Assert.NotNull(instance); - Assert.Equal("XXXXXX", instance.Name); - Assert.Equal("XXXXXX", instance.BriefName); + Assert.Equal("name", instance.Name); + Assert.Equal("briefname", instance.BriefName); } /// @@ -819,7 +819,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Extension? extension) { Assert.NotNull(extension); - Assert.Equal("XXXXXX", extension.Name); + Assert.Equal("name", extension.Name); } /// @@ -828,7 +828,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Slot? slot) { Assert.NotNull(slot); - Assert.Equal("XXXXXX", slot.Name); + Assert.Equal("name", slot.Name); Assert.NotNull(slot.SlotOption); var slotoption = Assert.Single(slot.SlotOption); @@ -841,9 +841,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.SlotOption? slotoption) { Assert.NotNull(slotoption); - Assert.Equal("XXXXXX", slotoption.Name); - Assert.Equal("XXXXXX", slotoption.DevName); - Assert.Equal("XXXXXX", slotoption.Default); + Assert.Equal("name", slotoption.Name); + Assert.Equal("devname", slotoption.DevName); + Assert.Equal(true, slotoption.Default); } /// @@ -852,10 +852,10 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.SoftwareList? softwarelist) { Assert.NotNull(softwarelist); - Assert.Equal("XXXXXX", softwarelist.Tag); - Assert.Equal("XXXXXX", softwarelist.Name); - Assert.Equal("XXXXXX", softwarelist.Status); - Assert.Equal("XXXXXX", softwarelist.Filter); + Assert.Equal("tag", softwarelist.Tag); + Assert.Equal("name", softwarelist.Name); + Assert.Equal(Data.Models.Metadata.SoftwareListStatus.Original, softwarelist.Status); + Assert.Equal("filter", softwarelist.Filter); } /// @@ -864,9 +864,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.RamOption? ramoption) { Assert.NotNull(ramoption); - Assert.Equal("XXXXXX", ramoption.Name); - Assert.Equal("XXXXXX", ramoption.Default); - Assert.Equal("XXXXXX", ramoption.Content); + Assert.Equal("name", ramoption.Name); + Assert.Equal(true, ramoption.Default); + Assert.Equal("content", ramoption.Content); } } } diff --git a/SabreTools.Serialization.CrossModel.Test/MessTests.cs b/SabreTools.Serialization.CrossModel.Test/MessTests.cs index aa584f06..d42345ff 100644 --- a/SabreTools.Serialization.CrossModel.Test/MessTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/MessTests.cs @@ -61,148 +61,148 @@ namespace SabreTools.Serialization.CrossModel.Test { var biosset = new Data.Models.Listxml.BiosSet { - Name = "XXXXXX", - Description = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Description = "description", + Default = true, }; var rom = new Data.Models.Listxml.Rom { - Name = "XXXXXX", + Name = "name", Bios = "XXXXXX", - Size = "XXXXXX", + Size = 12345, CRC = "XXXXXX", SHA1 = "XXXXXX", Merge = "XXXXXX", Region = "XXXXXX", Offset = "XXXXXX", - Status = "XXXXXX", - Optional = "XXXXXX", - Dispose = "XXXXXX", - SoundOnly = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, + Optional = true, + Dispose = true, + SoundOnly = true, }; var disk = new Data.Models.Listxml.Disk { - Name = "XXXXXX", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - Merge = "XXXXXX", - Region = "XXXXXX", - Index = "XXXXXX", - Writable = "XXXXXX", - Status = "XXXXXX", - Optional = "XXXXXX", + Name = "name", + MD5 = "md5", + SHA1 = "sha1", + Merge = "merge", + Region = "region", + Index = 12345, + Writable = true, + Status = Data.Models.Metadata.ItemStatus.Good, + Optional = true, }; var deviceref = new Data.Models.Listxml.DeviceRef { - Name = "XXXXXX", + Name = "name", }; var sample = new Data.Models.Listxml.Sample { - Name = "XXXXXX", + Name = "name", }; var chip = new Data.Models.Listxml.Chip { - Name = "XXXXXX", - Tag = "XXXXXX", - Type = "XXXXXX", - SoundOnly = "XXXXXX", - Clock = "XXXXXX", + Name = "name", + Tag = "tag", + Type = Data.Models.Metadata.ChipType.CPU, + SoundOnly = true, + Clock = 12345, }; var display = new Data.Models.Listxml.Display { - Tag = "XXXXXX", - Type = "XXXXXX", - Rotate = "XXXXXX", - FlipX = "XXXXXX", - Width = "XXXXXX", - Height = "XXXXXX", - Refresh = "XXXXXX", - PixClock = "XXXXXX", - HTotal = "XXXXXX", - HBEnd = "XXXXXX", - HBStart = "XXXXXX", - VTotal = "XXXXXX", - VBEnd = "XXXXXX", - VBStart = "XXXXXX", + Tag = "tag", + Type = Data.Models.Metadata.DisplayType.Vector, + Rotate = Data.Models.Metadata.Rotation.East, + FlipX = true, + Width = 12345, + Height = 12345, + Refresh = 123.45, + PixClock = 12345, + HTotal = 12345, + HBEnd = 12345, + HBStart = 12345, + VTotal = 12345, + VBEnd = 12345, + VBStart = 12345, }; var video = new Data.Models.Listxml.Video { - Screen = "XXXXXX", - Orientation = "XXXXXX", - Width = "XXXXXX", - Height = "XXXXXX", - AspectX = "XXXXXX", - AspectY = "XXXXXX", - Refresh = "XXXXXX", + Screen = Data.Models.Metadata.DisplayType.Vector, + Orientation = Data.Models.Metadata.Rotation.East, + Width = 12345, + Height = 12345, + AspectX = 12345, + AspectY = 12345, + Refresh = 123.45, }; var sound = new Data.Models.Listxml.Sound { - Channels = "XXXXXX", + Channels = 12345, }; var control = new Data.Models.Listxml.Control { - Type = "XXXXXX", - Player = "XXXXXX", - Buttons = "XXXXXX", - ReqButtons = "XXXXXX", - Minimum = "XXXXXX", - Maximum = "XXXXXX", - Sensitivity = "XXXXXX", - KeyDelta = "XXXXXX", - Reverse = "XXXXXX", - Ways = "XXXXXX", - Ways2 = "XXXXXX", - Ways3 = "XXXXXX", + Type = Data.Models.Metadata.ControlType.Lightgun, + Player = 12345, + Buttons = 12345, + ReqButtons = 12345, + Minimum = 12345, + Maximum = 12345, + Sensitivity = 12345, + KeyDelta = 12345, + Reverse = true, + Ways = "ways", + Ways2 = "ways2", + Ways3 = "ways3", }; var input = new Data.Models.Listxml.Input { - Service = "XXXXXX", - Tilt = "XXXXXX", - Players = "XXXXXX", - //ControlAttr = "XXXXXX", // Mututally exclusive with input.Control - Buttons = "XXXXXX", - Coins = "XXXXXX", + Service = true, + Tilt = true, + Players = 12345, + ControlAttr = "controlattr", + Buttons = 12345, + Coins = 12345, Control = [control], }; var condition = new Data.Models.Listxml.Condition { - Tag = "XXXXXX", - Mask = "XXXXXX", - Relation = "XXXXXX", - Value = "XXXXXX", + Tag = "tag", + Mask = "mask", + Relation = Data.Models.Metadata.Relation.Equal, + Value = "value", }; var diplocation = new Data.Models.Listxml.DipLocation { - Name = "XXXXXX", - Number = "XXXXXX", - Inverted = "XXXXXX", + Name = "name", + Number = 12345, + Inverted = true, }; var dipvalue = new Data.Models.Listxml.DipValue { - Name = "XXXXXX", - Value = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Value = "value", + Default = true, Condition = condition, }; var dipswitch = new Data.Models.Listxml.DipSwitch { - Name = "XXXXXX", - Tag = "XXXXXX", - Mask = "XXXXXX", + Name = "name", + Tag = "tag", + Mask = "mask", Condition = condition, DipLocation = [diplocation], DipValue = [dipvalue], @@ -210,24 +210,24 @@ namespace SabreTools.Serialization.CrossModel.Test var conflocation = new Data.Models.Listxml.ConfLocation { - Name = "XXXXXX", - Number = "XXXXXX", - Inverted = "XXXXXX", + Name = "name", + Number = 12345, + Inverted = true, }; var confsetting = new Data.Models.Listxml.ConfSetting { - Name = "XXXXXX", - Value = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Value = "value", + Default = true, Condition = condition, }; var configuration = new Data.Models.Listxml.Configuration { - Name = "XXXXXX", - Tag = "XXXXXX", - Mask = "XXXXXX", + Name = "name", + Tag = "tag", + Mask = "mask", Condition = condition, ConfLocation = [conflocation], ConfSetting = [confsetting], @@ -235,107 +235,107 @@ namespace SabreTools.Serialization.CrossModel.Test var analog = new Data.Models.Listxml.Analog { - Mask = "XXXXXX", + Mask = "mask", }; var port = new Data.Models.Listxml.Port { - Tag = "XXXXXX", + Tag = "tag", Analog = [analog], }; var adjuster = new Data.Models.Listxml.Adjuster { - Name = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Default = true, Condition = condition, }; var driver = new Data.Models.Listxml.Driver { - Status = "XXXXXX", - Color = "XXXXXX", - Sound = "XXXXXX", - PaletteSize = "XXXXXX", - Emulation = "XXXXXX", - Cocktail = "XXXXXX", - SaveState = "XXXXXX", - RequiresArtwork = "XXXXXX", - Unofficial = "XXXXXX", - NoSoundHardware = "XXXXXX", - Incomplete = "XXXXXX", + Status = Data.Models.Metadata.SupportStatus.Good, + Color = Data.Models.Metadata.SupportStatus.Good, + Sound = Data.Models.Metadata.SupportStatus.Good, + PaletteSize = "palettesize", + Emulation = Data.Models.Metadata.SupportStatus.Good, + Cocktail = Data.Models.Metadata.SupportStatus.Good, + SaveState = Data.Models.Metadata.Supported.Yes, + RequiresArtwork = true, + Unofficial = true, + NoSoundHardware = true, + Incomplete = true, }; var feature = new Data.Models.Listxml.Feature { - Type = "XXXXXX", - Status = "XXXXXX", - Overall = "XXXXXX", + Type = Data.Models.Metadata.FeatureType.Protection, + Status = Data.Models.Metadata.FeatureStatus.Imperfect, + Overall = Data.Models.Metadata.FeatureStatus.Imperfect, }; var instance = new Data.Models.Listxml.Instance { - Name = "XXXXXX", - BriefName = "XXXXXX", + Name = "name", + BriefName = "briefname", }; var extension = new Data.Models.Listxml.Extension { - Name = "XXXXXX", + Name = "name", }; var device = new Data.Models.Listxml.Device { - Type = "XXXXXX", - Tag = "XXXXXX", - FixedImage = "XXXXXX", - Mandatory = "XXXXXX", - Interface = "XXXXXX", + Type = Data.Models.Metadata.DeviceType.PunchTape, + Tag = "tag", + FixedImage = "fixedimage", + Mandatory = true, + Interface = "interface", Instance = instance, Extension = [extension], }; var slotOption = new Data.Models.Listxml.SlotOption { - Name = "XXXXXX", - DevName = "XXXXXX", - Default = "XXXXXX", + Name = "name", + DevName = "devname", + Default = true, }; var slot = new Data.Models.Listxml.Slot { - Name = "XXXXXX", + Name = "name", SlotOption = [slotOption], }; var softwarelist = new Data.Models.Listxml.SoftwareList { - Tag = "XXXXXX", - Name = "XXXXXX", - Status = "XXXXXX", - Filter = "XXXXXX", + Tag = "tag", + Name = "name", + Status = Data.Models.Metadata.SoftwareListStatus.Original, + Filter = "filter", }; var ramoption = new Data.Models.Listxml.RamOption { - Name = "XXXXXX", - Default = "XXXXXX", - Content = "XXXXXX", + Name = "name", + Default = true, + Content = "content", }; Data.Models.Listxml.GameBase gameBase = game ? new Data.Models.Listxml.Game() : new Data.Models.Listxml.Machine(); - gameBase.Name = "XXXXXX"; + gameBase.Name = "name"; gameBase.SourceFile = "XXXXXX"; - gameBase.IsBios = "XXXXXX"; - gameBase.IsDevice = "XXXXXX"; - gameBase.IsMechanical = "XXXXXX"; - gameBase.Runnable = "XXXXXX"; + gameBase.IsBios = true; + gameBase.IsDevice = true; + gameBase.IsMechanical = true; + gameBase.Runnable = Data.Models.Metadata.Runnable.Yes; gameBase.CloneOf = "XXXXXX"; gameBase.RomOf = "XXXXXX"; gameBase.SampleOf = "XXXXXX"; - gameBase.Description = "XXXXXX"; + gameBase.Description = "description"; gameBase.Year = "XXXXXX"; gameBase.Manufacturer = "XXXXXX"; gameBase.History = "XXXXXX"; @@ -373,16 +373,16 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.GameBase? gb) { Assert.NotNull(gb); - Assert.Equal("XXXXXX", gb.Name); + Assert.Equal("name", gb.Name); Assert.Equal("XXXXXX", gb.SourceFile); - Assert.Equal("XXXXXX", gb.IsBios); - Assert.Equal("XXXXXX", gb.IsDevice); - Assert.Equal("XXXXXX", gb.IsMechanical); - Assert.Equal("XXXXXX", gb.Runnable); + Assert.Equal(true, gb.IsBios); + Assert.Equal(true, gb.IsDevice); + Assert.Equal(true, gb.IsMechanical); + Assert.Equal(Data.Models.Metadata.Runnable.Yes, gb.Runnable); Assert.Equal("XXXXXX", gb.CloneOf); Assert.Equal("XXXXXX", gb.RomOf); Assert.Equal("XXXXXX", gb.SampleOf); - Assert.Equal("XXXXXX", gb.Description); + Assert.Equal("description", gb.Description); Assert.Equal("XXXXXX", gb.Year); Assert.Equal("XXXXXX", gb.Manufacturer); Assert.Equal("XXXXXX", gb.History); @@ -467,9 +467,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.BiosSet? biosset) { Assert.NotNull(biosset); - Assert.Equal("XXXXXX", biosset.Name); - Assert.Equal("XXXXXX", biosset.Description); - Assert.Equal("XXXXXX", biosset.Default); + Assert.Equal("name", biosset.Name); + Assert.Equal("description", biosset.Description); + Assert.Equal(true, biosset.Default); } /// @@ -478,18 +478,18 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Rom? rom) { Assert.NotNull(rom); - Assert.Equal("XXXXXX", rom.Name); + Assert.Equal("name", rom.Name); Assert.Equal("XXXXXX", rom.Bios); - Assert.Equal("XXXXXX", rom.Size); + Assert.Equal(12345, rom.Size); Assert.Equal("XXXXXX", rom.CRC); Assert.Equal("XXXXXX", rom.SHA1); Assert.Equal("XXXXXX", rom.Merge); Assert.Equal("XXXXXX", rom.Region); Assert.Equal("XXXXXX", rom.Offset); - Assert.Equal("XXXXXX", rom.Status); - Assert.Equal("XXXXXX", rom.Optional); - Assert.Equal("XXXXXX", rom.Dispose); - Assert.Equal("XXXXXX", rom.SoundOnly); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, rom.Status); + Assert.Equal(true, rom.Optional); + Assert.Equal(true, rom.Dispose); + Assert.Equal(true, rom.SoundOnly); } /// @@ -498,15 +498,15 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Disk? disk) { Assert.NotNull(disk); - Assert.Equal("XXXXXX", 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("XXXXXX", disk.Writable); - Assert.Equal("XXXXXX", disk.Status); - Assert.Equal("XXXXXX", disk.Optional); + Assert.Equal("name", disk.Name); + 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); } /// @@ -515,7 +515,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.DeviceRef? deviceref) { Assert.NotNull(deviceref); - Assert.Equal("XXXXXX", deviceref.Name); + Assert.Equal("name", deviceref.Name); } /// @@ -524,7 +524,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Sample? sample) { Assert.NotNull(sample); - Assert.Equal("XXXXXX", sample.Name); + Assert.Equal("name", sample.Name); } /// @@ -533,11 +533,11 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Chip? chip) { Assert.NotNull(chip); - Assert.Equal("XXXXXX", chip.Name); - Assert.Equal("XXXXXX", chip.Tag); - Assert.Equal("XXXXXX", chip.Type); - Assert.Equal("XXXXXX", chip.SoundOnly); - Assert.Equal("XXXXXX", chip.Clock); + Assert.Equal("name", chip.Name); + Assert.Equal("tag", chip.Tag); + Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type); + Assert.Equal(true, chip.SoundOnly); + Assert.Equal(12345, chip.Clock); } /// @@ -546,20 +546,20 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Display? display) { Assert.NotNull(display); - Assert.Equal("XXXXXX", display.Tag); - Assert.Equal("XXXXXX", display.Type); - Assert.Equal("XXXXXX", display.Rotate); - Assert.Equal("XXXXXX", display.FlipX); - Assert.Equal("XXXXXX", display.Width); - Assert.Equal("XXXXXX", display.Height); - Assert.Equal("XXXXXX", display.Refresh); - Assert.Equal("XXXXXX", display.PixClock); - Assert.Equal("XXXXXX", display.HTotal); - Assert.Equal("XXXXXX", display.HBEnd); - Assert.Equal("XXXXXX", display.HBStart); - Assert.Equal("XXXXXX", display.VTotal); - Assert.Equal("XXXXXX", display.VBEnd); - Assert.Equal("XXXXXX", display.VBStart); + Assert.Equal("tag", display.Tag); + Assert.Equal(Data.Models.Metadata.DisplayType.Vector, display.Type); + Assert.Equal(Data.Models.Metadata.Rotation.East, display.Rotate); + Assert.Equal(true, display.FlipX); + Assert.Equal(12345, display.Width); + Assert.Equal(12345, display.Height); + Assert.Equal(123.45, display.Refresh); + Assert.Equal(12345, display.PixClock); + Assert.Equal(12345, display.HTotal); + Assert.Equal(12345, display.HBEnd); + Assert.Equal(12345, display.HBStart); + Assert.Equal(12345, display.VTotal); + Assert.Equal(12345, display.VBEnd); + Assert.Equal(12345, display.VBStart); } /// @@ -568,13 +568,13 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Video? video) { Assert.NotNull(video); - Assert.Equal("XXXXXX", video.Screen); - Assert.Equal("XXXXXX", video.Orientation); - Assert.Equal("XXXXXX", video.Width); - Assert.Equal("XXXXXX", video.Height); - Assert.Equal("XXXXXX", video.AspectX); - Assert.Equal("XXXXXX", video.AspectY); - Assert.Equal("XXXXXX", video.Refresh); + Assert.Equal(Data.Models.Metadata.DisplayType.Vector, video.Screen); + Assert.Equal(Data.Models.Metadata.Rotation.East, video.Orientation); + Assert.Equal(12345, video.Width); + Assert.Equal(12345, video.Height); + Assert.Equal(12345, video.AspectX); + Assert.Equal(12345, video.AspectY); + Assert.Equal(123.45, video.Refresh); } /// @@ -583,7 +583,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Sound? sound) { Assert.NotNull(sound); - Assert.Equal("XXXXXX", sound.Channels); + Assert.Equal(12345, sound.Channels); } /// @@ -592,12 +592,12 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Input? input) { Assert.NotNull(input); - Assert.Equal("XXXXXX", input.Service); - Assert.Equal("XXXXXX", input.Tilt); - Assert.Equal("XXXXXX", input.Players); - //Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control - Assert.Equal("XXXXXX", input.Buttons); - Assert.Equal("XXXXXX", input.Coins); + Assert.Equal(true, input.Service); + Assert.Equal(true, input.Tilt); + Assert.Equal(12345, input.Players); + Assert.Equal("controlattr", input.ControlAttr); + Assert.Equal(12345, input.Buttons); + Assert.Equal(12345, input.Coins); Assert.NotNull(input.Control); var control = Assert.Single(input.Control); @@ -610,18 +610,18 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Control? control) { Assert.NotNull(control); - Assert.Equal("XXXXXX", control.Type); - Assert.Equal("XXXXXX", control.Player); - Assert.Equal("XXXXXX", control.Buttons); - Assert.Equal("XXXXXX", control.ReqButtons); - Assert.Equal("XXXXXX", control.Minimum); - Assert.Equal("XXXXXX", control.Maximum); - Assert.Equal("XXXXXX", control.Sensitivity); - Assert.Equal("XXXXXX", control.KeyDelta); - Assert.Equal("XXXXXX", control.Reverse); - Assert.Equal("XXXXXX", control.Ways); - Assert.Equal("XXXXXX", control.Ways2); - Assert.Equal("XXXXXX", control.Ways3); + Assert.Equal(Data.Models.Metadata.ControlType.Lightgun, control.Type); + Assert.Equal(12345, control.Player); + Assert.Equal(12345, control.Buttons); + Assert.Equal(12345, control.ReqButtons); + Assert.Equal(12345, control.Minimum); + Assert.Equal(12345, control.Maximum); + Assert.Equal(12345, control.Sensitivity); + Assert.Equal(12345, control.KeyDelta); + Assert.Equal(true, control.Reverse); + Assert.Equal("ways", control.Ways); + Assert.Equal("ways2", control.Ways2); + Assert.Equal("ways3", control.Ways3); } /// @@ -630,9 +630,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.DipSwitch? dipswitch) { Assert.NotNull(dipswitch); - Assert.Equal("XXXXXX", dipswitch.Name); - Assert.Equal("XXXXXX", dipswitch.Tag); - Assert.Equal("XXXXXX", dipswitch.Mask); + Assert.Equal("name", dipswitch.Name); + Assert.Equal("tag", dipswitch.Tag); + Assert.Equal("mask", dipswitch.Mask); Validate(dipswitch.Condition); Assert.NotNull(dipswitch.DipLocation); @@ -650,10 +650,10 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Condition? condition) { Assert.NotNull(condition); - Assert.Equal("XXXXXX", condition.Tag); - Assert.Equal("XXXXXX", condition.Mask); - Assert.Equal("XXXXXX", condition.Relation); - Assert.Equal("XXXXXX", condition.Value); + Assert.Equal("tag", condition.Tag); + Assert.Equal("mask", condition.Mask); + Assert.Equal(Data.Models.Metadata.Relation.Equal, condition.Relation); + Assert.Equal("value", condition.Value); } /// @@ -662,9 +662,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.DipLocation? diplocation) { Assert.NotNull(diplocation); - Assert.Equal("XXXXXX", diplocation.Name); - Assert.Equal("XXXXXX", diplocation.Number); - Assert.Equal("XXXXXX", diplocation.Inverted); + Assert.Equal("name", diplocation.Name); + Assert.Equal(12345, diplocation.Number); + Assert.Equal(true, diplocation.Inverted); } /// @@ -673,9 +673,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.DipValue? dipvalue) { Assert.NotNull(dipvalue); - Assert.Equal("XXXXXX", dipvalue.Name); - Assert.Equal("XXXXXX", dipvalue.Value); - Assert.Equal("XXXXXX", dipvalue.Default); + Assert.Equal("name", dipvalue.Name); + Assert.Equal("value", dipvalue.Value); + Assert.Equal(true, dipvalue.Default); Validate(dipvalue.Condition); } @@ -685,9 +685,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Configuration? configuration) { Assert.NotNull(configuration); - Assert.Equal("XXXXXX", configuration.Name); - Assert.Equal("XXXXXX", configuration.Tag); - Assert.Equal("XXXXXX", configuration.Mask); + Assert.Equal("name", configuration.Name); + Assert.Equal("tag", configuration.Tag); + Assert.Equal("mask", configuration.Mask); Validate(configuration.Condition); Assert.NotNull(configuration.ConfLocation); @@ -705,9 +705,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.ConfLocation? conflocation) { Assert.NotNull(conflocation); - Assert.Equal("XXXXXX", conflocation.Name); - Assert.Equal("XXXXXX", conflocation.Number); - Assert.Equal("XXXXXX", conflocation.Inverted); + Assert.Equal("name", conflocation.Name); + Assert.Equal(12345, conflocation.Number); + Assert.Equal(true, conflocation.Inverted); } /// @@ -716,9 +716,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.ConfSetting? confsetting) { Assert.NotNull(confsetting); - Assert.Equal("XXXXXX", confsetting.Name); - Assert.Equal("XXXXXX", confsetting.Value); - Assert.Equal("XXXXXX", confsetting.Default); + Assert.Equal("name", confsetting.Name); + Assert.Equal("value", confsetting.Value); + Assert.Equal(true, confsetting.Default); Validate(confsetting.Condition); } @@ -728,7 +728,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Port? port) { Assert.NotNull(port); - Assert.Equal("XXXXXX", port.Tag); + Assert.Equal("tag", port.Tag); Assert.NotNull(port.Analog); var analog = Assert.Single(port.Analog); @@ -741,7 +741,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Analog? analog) { Assert.NotNull(analog); - Assert.Equal("XXXXXX", analog.Mask); + Assert.Equal("mask", analog.Mask); } /// @@ -750,8 +750,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Adjuster? adjuster) { Assert.NotNull(adjuster); - Assert.Equal("XXXXXX", adjuster.Name); - Assert.Equal("XXXXXX", adjuster.Default); + Assert.Equal("name", adjuster.Name); + Assert.Equal(true, adjuster.Default); Validate(adjuster.Condition); } @@ -761,17 +761,17 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Driver? driver) { Assert.NotNull(driver); - Assert.Equal("XXXXXX", driver.Status); - Assert.Equal("XXXXXX", driver.Color); - Assert.Equal("XXXXXX", driver.Sound); - Assert.Equal("XXXXXX", driver.PaletteSize); - Assert.Equal("XXXXXX", driver.Emulation); - Assert.Equal("XXXXXX", driver.Cocktail); - Assert.Equal("XXXXXX", driver.SaveState); - Assert.Equal("XXXXXX", driver.RequiresArtwork); - Assert.Equal("XXXXXX", driver.Unofficial); - Assert.Equal("XXXXXX", driver.NoSoundHardware); - Assert.Equal("XXXXXX", driver.Incomplete); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound); + Assert.Equal("palettesize", driver.PaletteSize); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Cocktail); + Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState); + Assert.Equal(true, driver.RequiresArtwork); + Assert.Equal(true, driver.Unofficial); + Assert.Equal(true, driver.NoSoundHardware); + Assert.Equal(true, driver.Incomplete); } /// @@ -780,9 +780,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Feature? feature) { Assert.NotNull(feature); - Assert.Equal("XXXXXX", feature.Type); - Assert.Equal("XXXXXX", feature.Status); - Assert.Equal("XXXXXX", feature.Overall); + Assert.Equal(Data.Models.Metadata.FeatureType.Protection, feature.Type); + Assert.Equal(Data.Models.Metadata.FeatureStatus.Imperfect, feature.Status); + Assert.Equal(Data.Models.Metadata.FeatureStatus.Imperfect, feature.Overall); } /// @@ -791,11 +791,11 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Device? device) { Assert.NotNull(device); - Assert.Equal("XXXXXX", device.Type); - Assert.Equal("XXXXXX", device.Tag); - Assert.Equal("XXXXXX", device.FixedImage); - Assert.Equal("XXXXXX", device.Mandatory); - Assert.Equal("XXXXXX", device.Interface); + Assert.Equal(Data.Models.Metadata.DeviceType.PunchTape, device.Type); + Assert.Equal("tag", device.Tag); + Assert.Equal("fixedimage", device.FixedImage); + Assert.Equal(true, device.Mandatory); + Assert.Equal("interface", device.Interface); Validate(device.Instance); Assert.NotNull(device.Extension); @@ -809,8 +809,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Instance? instance) { Assert.NotNull(instance); - Assert.Equal("XXXXXX", instance.Name); - Assert.Equal("XXXXXX", instance.BriefName); + Assert.Equal("name", instance.Name); + Assert.Equal("briefname", instance.BriefName); } /// @@ -819,7 +819,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Extension? extension) { Assert.NotNull(extension); - Assert.Equal("XXXXXX", extension.Name); + Assert.Equal("name", extension.Name); } /// @@ -828,7 +828,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.Slot? slot) { Assert.NotNull(slot); - Assert.Equal("XXXXXX", slot.Name); + Assert.Equal("name", slot.Name); Assert.NotNull(slot.SlotOption); var slotoption = Assert.Single(slot.SlotOption); @@ -841,9 +841,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.SlotOption? slotoption) { Assert.NotNull(slotoption); - Assert.Equal("XXXXXX", slotoption.Name); - Assert.Equal("XXXXXX", slotoption.DevName); - Assert.Equal("XXXXXX", slotoption.Default); + Assert.Equal("name", slotoption.Name); + Assert.Equal("devname", slotoption.DevName); + Assert.Equal(true, slotoption.Default); } /// @@ -852,10 +852,10 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.SoftwareList? softwarelist) { Assert.NotNull(softwarelist); - Assert.Equal("XXXXXX", softwarelist.Tag); - Assert.Equal("XXXXXX", softwarelist.Name); - Assert.Equal("XXXXXX", softwarelist.Status); - Assert.Equal("XXXXXX", softwarelist.Filter); + Assert.Equal("tag", softwarelist.Tag); + Assert.Equal("name", softwarelist.Name); + Assert.Equal(Data.Models.Metadata.SoftwareListStatus.Original, softwarelist.Status); + Assert.Equal("filter", softwarelist.Filter); } /// @@ -864,9 +864,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.Listxml.RamOption? ramoption) { Assert.NotNull(ramoption); - Assert.Equal("XXXXXX", ramoption.Name); - Assert.Equal("XXXXXX", ramoption.Default); - Assert.Equal("XXXXXX", ramoption.Content); + Assert.Equal("name", ramoption.Name); + Assert.Equal(true, ramoption.Default); + Assert.Equal("content", ramoption.Content); } } } diff --git a/SabreTools.Serialization.CrossModel.Test/OfflineListTests.cs b/SabreTools.Serialization.CrossModel.Test/OfflineListTests.cs index 001a2f99..899e221a 100644 --- a/SabreTools.Serialization.CrossModel.Test/OfflineListTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/OfflineListTests.cs @@ -39,85 +39,85 @@ namespace SabreTools.Serialization.CrossModel.Test { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, Location = new Data.Models.OfflineList.Location { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, Publisher = new Data.Models.OfflineList.Publisher { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, SourceRom = new Data.Models.OfflineList.SourceRom { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, SaveType = new Data.Models.OfflineList.SaveType { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, RomSize = new Data.Models.OfflineList.RomSize { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, ReleaseNumber = new Data.Models.OfflineList.ReleaseNumber { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, ImageNumber = new Data.Models.OfflineList.ImageNumber { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, LanguageNumber = new Data.Models.OfflineList.LanguageNumber { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, Comment = new Data.Models.OfflineList.Comment { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, RomCRC = new Data.Models.OfflineList.RomCRC { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, Im1CRC = new Data.Models.OfflineList.Im1CRC { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, Im2CRC = new Data.Models.OfflineList.Im2CRC { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, Languages = new Data.Models.OfflineList.Languages { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, }; @@ -142,14 +142,14 @@ namespace SabreTools.Serialization.CrossModel.Test var find = new Data.Models.OfflineList.Find { Operation = "XXXXXX", - Value = "XXXXXX", + Value = "value", Content = "XXXXXX", }; var to = new Data.Models.OfflineList.To { - Value = "XXXXXX", - Default = "XXXXXX", + Value = "value", + Default = true, Auto = "XXXXXX", Find = [find], }; @@ -191,7 +191,7 @@ namespace SabreTools.Serialization.CrossModel.Test ReleaseNumber = "XXXXXX", Title = "XXXXXX", SaveType = "XXXXXX", - RomSize = "XXXXXX", + RomSize = 12345, Publisher = "XXXXXX", Location = "XXXXXX", SourceRom = "XXXXXX", @@ -286,7 +286,7 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.NotNull(info); Assert.Equal("XXXXXX", info.Visible); Assert.Equal("XXXXXX", info.InNamingOption); - Assert.Equal("XXXXXX", info.Default); + Assert.Equal(true, info.Default); } /// @@ -338,8 +338,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.OfflineList.To? to) { Assert.NotNull(to); - Assert.Equal("XXXXXX", to.Value); - Assert.Equal("XXXXXX", to.Default); + Assert.Equal("value", to.Value); + Assert.Equal(true, to.Default); Assert.Equal("XXXXXX", to.Auto); Assert.NotNull(to.Find); @@ -354,7 +354,7 @@ namespace SabreTools.Serialization.CrossModel.Test { Assert.NotNull(find); Assert.Equal("XXXXXX", find.Operation); - Assert.Equal("XXXXXX", find.Value); + Assert.Equal("value", find.Value); Assert.Equal("XXXXXX", find.Content); } @@ -379,7 +379,7 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal("XXXXXX", game.ReleaseNumber); Assert.Equal("XXXXXX", game.Title); Assert.Equal("XXXXXX", game.SaveType); - Assert.Equal("0", game.RomSize); // Converted due to filtering + Assert.Equal(12345, game.RomSize); Assert.Equal("XXXXXX", game.Publisher); Assert.Equal("XXXXXX", game.Location); Assert.Equal("XXXXXX", game.SourceRom); diff --git a/SabreTools.Serialization.CrossModel.Test/OpenMSXTests.cs b/SabreTools.Serialization.CrossModel.Test/OpenMSXTests.cs index 0dae26aa..7faa8d00 100644 --- a/SabreTools.Serialization.CrossModel.Test/OpenMSXTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/OpenMSXTests.cs @@ -36,8 +36,8 @@ namespace SabreTools.Serialization.CrossModel.Test { var original = new Data.Models.OpenMSX.Original { - Value = "XXXXXX", - Content = "XXXXXX", + Value = true, + Content = "content", }; var rom = new Data.Models.OpenMSX.Rom @@ -137,8 +137,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.OpenMSX.Original? original) { Assert.NotNull(original); - Assert.Equal("XXXXXX", original.Value); - Assert.Equal("XXXXXX", original.Content); + Assert.Equal(true, original.Value); + Assert.Equal("content", original.Content); } /// diff --git a/SabreTools.Serialization.CrossModel.Test/RomCenterTests.cs b/SabreTools.Serialization.CrossModel.Test/RomCenterTests.cs index 7f2f0fb1..7d321c3b 100644 --- a/SabreTools.Serialization.CrossModel.Test/RomCenterTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/RomCenterTests.cs @@ -63,10 +63,10 @@ namespace SabreTools.Serialization.CrossModel.Test ParentName = "XXXXXX", ParentDescription = "XXXXXX", GameName = "XXXXXX", - GameDescription = "XXXXXX", + GameDescription = "description", RomName = "XXXXXX", RomCRC = "XXXXXX", - RomSize = "XXXXXX", + RomSize = 12345, RomOf = "XXXXXX", MergeName = "XXXXXX", }; @@ -142,10 +142,10 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal("XXXXXX", rom.ParentName); Assert.Null(rom.ParentDescription); // This is unmappable Assert.Equal("XXXXXX", rom.GameName); - Assert.Equal("XXXXXX", rom.GameDescription); + Assert.Equal("description", rom.GameDescription); Assert.Equal("XXXXXX", rom.RomName); Assert.Equal("XXXXXX", rom.RomCRC); - Assert.Equal("XXXXXX", rom.RomSize); + Assert.Equal(12345, rom.RomSize); Assert.Equal("XXXXXX", rom.RomOf); Assert.Equal("XXXXXX", rom.MergeName); } diff --git a/SabreTools.Serialization.CrossModel.Test/SeparatedValueTests.cs b/SabreTools.Serialization.CrossModel.Test/SeparatedValueTests.cs index 0725f0e3..d9510877 100644 --- a/SabreTools.Serialization.CrossModel.Test/SeparatedValueTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/SeparatedValueTests.cs @@ -42,41 +42,41 @@ namespace SabreTools.Serialization.CrossModel.Test { FileName = "XXXXXX", InternalName = "XXXXXX", - Description = "XXXXXX", + Description = "description", GameName = "XXXXXX", - GameDescription = "XXXXXX", + GameDescription = "description", Type = "disk", DiskName = "XXXXXX", MD5 = "XXXXXX", SHA1 = "XXXXXX", - Status = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, }; var media = new Data.Models.SeparatedValue.Row { FileName = "XXXXXX", InternalName = "XXXXXX", - Description = "XXXXXX", + Description = "description", GameName = "XXXXXX", - GameDescription = "XXXXXX", + GameDescription = "description", Type = "media", DiskName = "XXXXXX", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - SHA256 = "XXXXXX", - SpamSum = "XXXXXX", + MD5 = "md5", + SHA1 = "sha1", + SHA256 = "sha256", + SpamSum = "spamsum", }; var rom = new Data.Models.SeparatedValue.Row { FileName = "XXXXXX", InternalName = "XXXXXX", - Description = "XXXXXX", + Description = "description", GameName = "XXXXXX", - GameDescription = "XXXXXX", + GameDescription = "description", Type = "rom", RomName = "XXXXXX", - Size = "XXXXXX", + Size = 12345, CRC = "XXXXXX", MD5 = "XXXXXX", SHA1 = "XXXXXX", @@ -84,7 +84,7 @@ namespace SabreTools.Serialization.CrossModel.Test SHA384 = "XXXXXX", SHA512 = "XXXXXX", SpamSum = "XXXXXX", - Status = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, }; return new Data.Models.SeparatedValue.MetadataFile @@ -112,9 +112,9 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.NotNull(row); Assert.Equal("XXXXXX", row.FileName); Assert.Equal("XXXXXX", row.InternalName); - Assert.Equal("XXXXXX", row.Description); + Assert.Equal("description", row.Description); Assert.Equal("XXXXXX", row.GameName); - Assert.Equal("XXXXXX", row.GameDescription); + Assert.Equal("description", row.GameDescription); Assert.Equal("disk", row.Type); Assert.Null(row.RomName); Assert.Equal("XXXXXX", row.DiskName); @@ -126,7 +126,7 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Null(row.SHA384); Assert.Null(row.SHA512); Assert.Null(row.SpamSum); - Assert.Equal("XXXXXX", row.Status); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, row.Status); } /// @@ -137,20 +137,20 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.NotNull(row); Assert.Equal("XXXXXX", row.FileName); Assert.Equal("XXXXXX", row.InternalName); - Assert.Equal("XXXXXX", row.Description); + Assert.Equal("description", row.Description); Assert.Equal("XXXXXX", row.GameName); - Assert.Equal("XXXXXX", row.GameDescription); + Assert.Equal("description", row.GameDescription); Assert.Equal("media", row.Type); Assert.Null(row.RomName); Assert.Equal("XXXXXX", row.DiskName); Assert.Null(row.Size); Assert.Null(row.CRC); - Assert.Equal("XXXXXX", row.MD5); - Assert.Equal("XXXXXX", row.SHA1); - Assert.Equal("XXXXXX", row.SHA256); + Assert.Equal("md5", row.MD5); + Assert.Equal("sha1", row.SHA1); + Assert.Equal("sha256", row.SHA256); Assert.Null(row.SHA384); Assert.Null(row.SHA512); - Assert.Equal("XXXXXX", row.SpamSum); + Assert.Equal("spamsum", row.SpamSum); Assert.Null(row.Status); } @@ -162,13 +162,13 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.NotNull(row); Assert.Equal("XXXXXX", row.FileName); Assert.Equal("XXXXXX", row.InternalName); - Assert.Equal("XXXXXX", row.Description); + Assert.Equal("description", row.Description); Assert.Equal("XXXXXX", row.GameName); - Assert.Equal("XXXXXX", row.GameDescription); + Assert.Equal("description", row.GameDescription); Assert.Equal("rom", row.Type); Assert.Equal("XXXXXX", row.RomName); Assert.Null(row.DiskName); - Assert.Equal("XXXXXX", row.Size); + Assert.Equal(12345, row.Size); Assert.Equal("XXXXXX", row.CRC); Assert.Equal("XXXXXX", row.MD5); Assert.Equal("XXXXXX", row.SHA1); @@ -176,7 +176,7 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal("XXXXXX", row.SHA384); Assert.Equal("XXXXXX", row.SHA512); Assert.Equal("XXXXXX", row.SpamSum); - Assert.Equal("XXXXXX", row.Status); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, row.Status); } } } diff --git a/SabreTools.Serialization.CrossModel.Test/SoftwareListTests.cs b/SabreTools.Serialization.CrossModel.Test/SoftwareListTests.cs index adc77d6d..2ca08e6b 100644 --- a/SabreTools.Serialization.CrossModel.Test/SoftwareListTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/SoftwareListTests.cs @@ -22,9 +22,9 @@ namespace SabreTools.Serialization.CrossModel.Test // Validate the data Assert.NotNull(newSl); - Assert.Equal("XXXXXX", newSl.Name); - Assert.Equal("XXXXXX", newSl.Description); - Assert.Equal("XXXXXX", newSl.Notes); + Assert.Equal("name", newSl.Name); + Assert.Equal("description", newSl.Description); + Assert.Equal("notes", newSl.Notes); Assert.NotNull(newSl.Software); var newSoftware = Assert.Single(newSl.Software); @@ -38,78 +38,78 @@ namespace SabreTools.Serialization.CrossModel.Test { var info = new Data.Models.SoftwareList.Info { - Name = "XXXXXX", - Value = "XXXXXX", + Name = "name", + Value = "value", }; var sharedfeat = new Data.Models.SoftwareList.SharedFeat { - Name = "XXXXXX", - Value = "XXXXXX", + Name = "name", + Value = "value", }; var feature = new Data.Models.SoftwareList.Feature { - Name = "XXXXXX", - Value = "XXXXXX", + Name = "name", + Value = "value", }; var rom = new Data.Models.SoftwareList.Rom { - Name = "XXXXXX", - Size = "XXXXXX", + Name = "name", + Size = 12345, Length = "XXXXXX", CRC = "XXXXXX", SHA1 = "XXXXXX", Offset = "XXXXXX", - Value = "XXXXXX", - Status = "XXXXXX", - LoadFlag = "XXXXXX", + Value = "value", + Status = Data.Models.Metadata.ItemStatus.Good, + LoadFlag = Data.Models.Metadata.LoadFlag.Load16Byte, }; var dataarea = new Data.Models.SoftwareList.DataArea { - Name = "XXXXXX", - Size = "XXXXXX", - Width = "XXXXXX", - Endianness = "XXXXXX", + Name = "name", + Size = 12345, + Width = Data.Models.Metadata.Width.Long, + Endianness = Data.Models.Metadata.Endianness.Big, Rom = [rom], }; var disk = new Data.Models.SoftwareList.Disk { - Name = "XXXXXX", + Name = "name", MD5 = "XXXXXX", SHA1 = "XXXXXX", - Status = "XXXXXX", - Writeable = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, + Writeable = true, }; var diskarea = new Data.Models.SoftwareList.DiskArea { - Name = "XXXXXX", + Name = "name", Disk = [disk], }; var dipvalue = new Data.Models.SoftwareList.DipValue { - Name = "XXXXXX", - Value = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Value = "value", + Default = true, }; var dipswitch = new Data.Models.SoftwareList.DipSwitch { - Name = "XXXXXX", - Tag = "XXXXXX", - Mask = "XXXXXX", + Name = "name", + Tag = "tag", + Mask = "mask", DipValue = [dipvalue], }; var part = new Data.Models.SoftwareList.Part { - Name = "XXXXXX", - Interface = "XXXXXX", + Name = "name", + Interface = "interface", Feature = [feature], DataArea = [dataarea], DiskArea = [diskarea], @@ -118,13 +118,13 @@ namespace SabreTools.Serialization.CrossModel.Test var software = new Data.Models.SoftwareList.Software { - Name = "XXXXXX", + Name = "name", CloneOf = "XXXXXX", - Supported = "XXXXXX", - Description = "XXXXXX", + Supported = Data.Models.Metadata.Supported.Yes, + Description = "description", Year = "XXXXXX", Publisher = "XXXXXX", - Notes = "XXXXXX", + Notes = "notes", Info = [info], SharedFeat = [sharedfeat], Part = [part], @@ -132,9 +132,9 @@ namespace SabreTools.Serialization.CrossModel.Test return new Data.Models.SoftwareList.SoftwareList { - Name = "XXXXXX", - Description = "XXXXXX", - Notes = "XXXXXX", + Name = "name", + Description = "description", + Notes = "notes", Software = [software], }; } @@ -145,13 +145,13 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.SoftwareList.Software? software) { Assert.NotNull(software); - Assert.Equal("XXXXXX", software.Name); + Assert.Equal("name", software.Name); Assert.Equal("XXXXXX", software.CloneOf); - Assert.Equal("XXXXXX", software.Supported); - Assert.Equal("XXXXXX", software.Description); + Assert.Equal(Data.Models.Metadata.Supported.Yes, software.Supported); + Assert.Equal("description", software.Description); Assert.Equal("XXXXXX", software.Year); Assert.Equal("XXXXXX", software.Publisher); - Assert.Equal("XXXXXX", software.Notes); + Assert.Equal("notes", software.Notes); Assert.NotNull(software.Info); var info = Assert.Single(software.Info); @@ -172,8 +172,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.SoftwareList.Info? info) { Assert.NotNull(info); - Assert.Equal("XXXXXX", info.Name); - Assert.Equal("XXXXXX", info.Value); + Assert.Equal("name", info.Name); + Assert.Equal("value", info.Value); } /// @@ -182,8 +182,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.SoftwareList.SharedFeat? sharedfeat) { Assert.NotNull(sharedfeat); - Assert.Equal("XXXXXX", sharedfeat.Name); - Assert.Equal("XXXXXX", sharedfeat.Value); + Assert.Equal("name", sharedfeat.Name); + Assert.Equal("value", sharedfeat.Value); } /// @@ -192,8 +192,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.SoftwareList.Part? part) { Assert.NotNull(part); - Assert.Equal("XXXXXX", part.Name); - Assert.Equal("XXXXXX", part.Interface); + Assert.Equal("name", part.Name); + Assert.Equal("interface", part.Interface); Assert.NotNull(part.Feature); var feature = Assert.Single(part.Feature); @@ -218,8 +218,8 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.SoftwareList.Feature? feature) { Assert.NotNull(feature); - Assert.Equal("XXXXXX", feature.Name); - Assert.Equal("XXXXXX", feature.Value); + Assert.Equal("name", feature.Name); + Assert.Equal("value", feature.Value); } /// @@ -228,10 +228,10 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.SoftwareList.DataArea? dataarea) { Assert.NotNull(dataarea); - Assert.Equal("XXXXXX", dataarea.Name); - Assert.Equal("XXXXXX", dataarea.Size); - Assert.Equal("XXXXXX", dataarea.Width); - Assert.Equal("XXXXXX", dataarea.Endianness); + Assert.Equal("name", dataarea.Name); + Assert.Equal(12345, dataarea.Size); + Assert.Equal(Data.Models.Metadata.Width.Long, dataarea.Width); + Assert.Equal(Data.Models.Metadata.Endianness.Big, dataarea.Endianness); Assert.NotNull(dataarea.Rom); var rom = Assert.Single(dataarea.Rom); @@ -244,15 +244,15 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.SoftwareList.Rom? rom) { Assert.NotNull(rom); - Assert.Equal("XXXXXX", rom.Name); - Assert.Equal("XXXXXX", rom.Size); + Assert.Equal("name", rom.Name); + Assert.Equal(12345, rom.Size); Assert.Equal("XXXXXX", rom.Length); Assert.Equal("XXXXXX", rom.CRC); Assert.Equal("XXXXXX", rom.SHA1); Assert.Equal("XXXXXX", rom.Offset); - Assert.Equal("XXXXXX", rom.Value); - Assert.Equal("XXXXXX", rom.Status); - Assert.Equal("XXXXXX", rom.LoadFlag); + Assert.Equal("value", rom.Value); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, rom.Status); + Assert.Equal(Data.Models.Metadata.LoadFlag.Load16Byte, rom.LoadFlag); } /// @@ -261,7 +261,7 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.SoftwareList.DiskArea? diskarea) { Assert.NotNull(diskarea); - Assert.Equal("XXXXXX", diskarea.Name); + Assert.Equal("name", diskarea.Name); Assert.NotNull(diskarea.Disk); var disk = Assert.Single(diskarea.Disk); @@ -274,11 +274,11 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.SoftwareList.Disk? disk) { Assert.NotNull(disk); - Assert.Equal("XXXXXX", disk.Name); + Assert.Equal("name", disk.Name); Assert.Equal("XXXXXX", disk.MD5); Assert.Equal("XXXXXX", disk.SHA1); - Assert.Equal("XXXXXX", disk.Status); - Assert.Equal("XXXXXX", disk.Writeable); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status); + Assert.Equal(true, disk.Writeable); } /// @@ -287,9 +287,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.SoftwareList.DipSwitch? dipswitch) { Assert.NotNull(dipswitch); - Assert.Equal("XXXXXX", dipswitch.Name); - Assert.Equal("XXXXXX", dipswitch.Tag); - Assert.Equal("XXXXXX", dipswitch.Mask); + Assert.Equal("name", dipswitch.Name); + Assert.Equal("tag", dipswitch.Tag); + Assert.Equal("mask", dipswitch.Mask); Assert.NotNull(dipswitch.DipValue); var dipvalue = Assert.Single(dipswitch.DipValue); @@ -302,9 +302,9 @@ namespace SabreTools.Serialization.CrossModel.Test private static void Validate(Data.Models.SoftwareList.DipValue? dipvalue) { Assert.NotNull(dipvalue); - Assert.Equal("XXXXXX", dipvalue.Name); - Assert.Equal("XXXXXX", dipvalue.Value); - Assert.Equal("XXXXXX", dipvalue.Default); + Assert.Equal("name", dipvalue.Name); + Assert.Equal("value", dipvalue.Value); + Assert.Equal(true, dipvalue.Default); } } } diff --git a/SabreTools.Serialization.CrossModel/ArchiveDotOrg.Deserializer.cs b/SabreTools.Serialization.CrossModel/ArchiveDotOrg.Deserializer.cs index ea09cc81..8f2af666 100644 --- a/SabreTools.Serialization.CrossModel/ArchiveDotOrg.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/ArchiveDotOrg.Deserializer.cs @@ -14,7 +14,7 @@ namespace SabreTools.Serialization.CrossModel var files = new Files(); - var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = obj.Machine; var items = new List(); foreach (var machine in machines ?? []) { @@ -30,7 +30,7 @@ namespace SabreTools.Serialization.CrossModel /// private static File[] ConvertFromInternalModel(Data.Models.Metadata.Machine item) { - var roms = item.Read(Data.Models.Metadata.Machine.RomKey); + var roms = item.Rom; if (roms is null) return []; @@ -44,69 +44,69 @@ namespace SabreTools.Serialization.CrossModel { var file = new File { - Name = item.ReadString(Data.Models.Metadata.Rom.NameKey), - Source = item.ReadString(Data.Models.Metadata.Rom.SourceKey), - BitTorrentMagnetHash = item.ReadString(Data.Models.Metadata.Rom.BitTorrentMagnetHashKey), - LastModifiedTime = item.ReadString(Data.Models.Metadata.Rom.LastModifiedTimeKey), - Size = item.ReadString(Data.Models.Metadata.Rom.SizeKey), - 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), - Format = item.ReadString(Data.Models.Metadata.Rom.FormatKey), - Original = item.ReadString(Data.Models.Metadata.Rom.OriginalKey), - Summation = item.ReadString(Data.Models.Metadata.Rom.SummationKey), - MatrixNumber = item.ReadString(Data.Models.Metadata.Rom.MatrixNumberKey), - CollectionCatalogNumber = item.ReadString(Data.Models.Metadata.Rom.CollectionCatalogNumberKey), - Publisher = item.ReadString(Data.Models.Metadata.Rom.PublisherKey), - Comment = item.ReadString(Data.Models.Metadata.Rom.CommentKey), + Name = item.Name, + Source = item.Source, + BitTorrentMagnetHash = item.BitTorrentMagnetHash, + LastModifiedTime = item.LastModifiedTime, + Size = item.Size?.ToString(), + MD5 = item.MD5, + CRC32 = item.CRC32, + SHA1 = item.SHA1, + FileCount = item.FileCount, + Format = item.Format, + Original = item.Original, + Summation = item.Summation, + MatrixNumber = item.MatrixNumber, + CollectionCatalogNumber = item.CollectionCatalogNumber, + Publisher = item.Publisher, + Comment = item.Comment, - ASRDetectedLang = item.ReadString(Data.Models.Metadata.Rom.ASRDetectedLangKey), - ASRDetectedLangConf = item.ReadString(Data.Models.Metadata.Rom.ASRDetectedLangConfKey), - ASRTranscribedLang = item.ReadString(Data.Models.Metadata.Rom.ASRTranscribedLangKey), - WhisperASRModuleVersion = item.ReadString(Data.Models.Metadata.Rom.WhisperASRModuleVersionKey), - WhisperModelHash = item.ReadString(Data.Models.Metadata.Rom.WhisperModelHashKey), - WhisperModelName = item.ReadString(Data.Models.Metadata.Rom.WhisperModelNameKey), - WhisperVersion = item.ReadString(Data.Models.Metadata.Rom.WhisperVersionKey), + ASRDetectedLang = item.ASRDetectedLang, + ASRDetectedLangConf = item.ASRDetectedLangConf, + ASRTranscribedLang = item.ASRTranscribedLang, + WhisperASRModuleVersion = item.WhisperASRModuleVersion, + WhisperModelHash = item.WhisperModelHash, + WhisperModelName = item.WhisperModelName, + WhisperVersion = item.WhisperVersion, - ClothCoverDetectionModuleVersion = item.ReadString(Data.Models.Metadata.Rom.ClothCoverDetectionModuleVersionKey), - hOCRCharToWordhOCRVersion = item.ReadString(Data.Models.Metadata.Rom.hOCRCharToWordhOCRVersionKey), - hOCRCharToWordModuleVersion = item.ReadString(Data.Models.Metadata.Rom.hOCRCharToWordModuleVersionKey), - hOCRFtsTexthOCRVersion = item.ReadString(Data.Models.Metadata.Rom.hOCRFtsTexthOCRVersionKey), - hOCRFtsTextModuleVersion = item.ReadString(Data.Models.Metadata.Rom.hOCRFtsTextModuleVersionKey), - hOCRPageIndexhOCRVersion = item.ReadString(Data.Models.Metadata.Rom.hOCRPageIndexhOCRVersionKey), - hOCRPageIndexModuleVersion = item.ReadString(Data.Models.Metadata.Rom.hOCRPageIndexModuleVersionKey), - TesseractOCR = item.ReadString(Data.Models.Metadata.Rom.TesseractOCRKey), - TesseractOCRConverted = item.ReadString(Data.Models.Metadata.Rom.TesseractOCRConvertedKey), - TesseractOCRDetectedLang = item.ReadString(Data.Models.Metadata.Rom.TesseractOCRDetectedLangKey), - TesseractOCRDetectedLangConf = item.ReadString(Data.Models.Metadata.Rom.TesseractOCRDetectedLangConfKey), - TesseractOCRDetectedScript = item.ReadString(Data.Models.Metadata.Rom.TesseractOCRDetectedScriptKey), - TesseractOCRDetectedScriptConf = item.ReadString(Data.Models.Metadata.Rom.TesseractOCRDetectedScriptConfKey), - TesseractOCRModuleVersion = item.ReadString(Data.Models.Metadata.Rom.TesseractOCRModuleVersionKey), - TesseractOCRParameters = item.ReadString(Data.Models.Metadata.Rom.TesseractOCRParametersKey), - PDFModuleVersion = item.ReadString(Data.Models.Metadata.Rom.PDFModuleVersionKey), - WordConfidenceInterval0To10 = item.ReadString(Data.Models.Metadata.Rom.WordConfidenceInterval0To10Key), - WordConfidenceInterval11To20 = item.ReadString(Data.Models.Metadata.Rom.WordConfidenceInterval11To20Key), - WordConfidenceInterval21To30 = item.ReadString(Data.Models.Metadata.Rom.WordConfidenceInterval21To30Key), - WordConfidenceInterval31To40 = item.ReadString(Data.Models.Metadata.Rom.WordConfidenceInterval31To40Key), - WordConfidenceInterval41To50 = item.ReadString(Data.Models.Metadata.Rom.WordConfidenceInterval41To50Key), - WordConfidenceInterval51To60 = item.ReadString(Data.Models.Metadata.Rom.WordConfidenceInterval51To60Key), - WordConfidenceInterval61To70 = item.ReadString(Data.Models.Metadata.Rom.WordConfidenceInterval61To70Key), - WordConfidenceInterval71To80 = item.ReadString(Data.Models.Metadata.Rom.WordConfidenceInterval71To80Key), - WordConfidenceInterval81To90 = item.ReadString(Data.Models.Metadata.Rom.WordConfidenceInterval81To90Key), - WordConfidenceInterval91To100 = item.ReadString(Data.Models.Metadata.Rom.WordConfidenceInterval91To100Key), + ClothCoverDetectionModuleVersion = item.ClothCoverDetectionModuleVersion, + hOCRCharToWordhOCRVersion = item.hOCRCharToWordhOCRVersion, + hOCRCharToWordModuleVersion = item.hOCRCharToWordModuleVersion, + hOCRFtsTexthOCRVersion = item.hOCRFtsTexthOCRVersion, + hOCRFtsTextModuleVersion = item.hOCRFtsTextModuleVersion, + hOCRPageIndexhOCRVersion = item.hOCRPageIndexhOCRVersion, + hOCRPageIndexModuleVersion = item.hOCRPageIndexModuleVersion, + TesseractOCR = item.TesseractOCR, + TesseractOCRConverted = item.TesseractOCRConverted, + TesseractOCRDetectedLang = item.TesseractOCRDetectedLang, + TesseractOCRDetectedLangConf = item.TesseractOCRDetectedLangConf, + TesseractOCRDetectedScript = item.TesseractOCRDetectedScript, + TesseractOCRDetectedScriptConf = item.TesseractOCRDetectedScriptConf, + TesseractOCRModuleVersion = item.TesseractOCRModuleVersion, + TesseractOCRParameters = item.TesseractOCRParameters, + PDFModuleVersion = item.PDFModuleVersion, + WordConfidenceInterval0To10 = item.WordConfidenceInterval0To10, + WordConfidenceInterval11To20 = item.WordConfidenceInterval11To20, + WordConfidenceInterval21To30 = item.WordConfidenceInterval21To30, + WordConfidenceInterval31To40 = item.WordConfidenceInterval31To40, + WordConfidenceInterval41To50 = item.WordConfidenceInterval41To50, + WordConfidenceInterval51To60 = item.WordConfidenceInterval51To60, + WordConfidenceInterval61To70 = item.WordConfidenceInterval61To70, + WordConfidenceInterval71To80 = item.WordConfidenceInterval71To80, + WordConfidenceInterval81To90 = item.WordConfidenceInterval81To90, + WordConfidenceInterval91To100 = item.WordConfidenceInterval91To100, - Album = item.ReadString(Data.Models.Metadata.Rom.AlbumKey), - Artist = item.ReadString(Data.Models.Metadata.Rom.ArtistKey), - Bitrate = item.ReadString(Data.Models.Metadata.Rom.BitrateKey), - Creator = item.ReadString(Data.Models.Metadata.Rom.CreatorKey), - Height = item.ReadString(Data.Models.Metadata.Rom.HeightKey), - Length = item.ReadString(Data.Models.Metadata.Rom.LengthKey), - PreviewImage = item.ReadString(Data.Models.Metadata.Rom.PreviewImageKey), - Rotation = item.ReadString(Data.Models.Metadata.Rom.RotationKey), - Title = item.ReadString(Data.Models.Metadata.Rom.TitleKey), - Track = item.ReadString(Data.Models.Metadata.Rom.TrackKey), - Width = item.ReadString(Data.Models.Metadata.Rom.WidthKey), + Album = item.Album, + Artist = item.Artist, + Bitrate = item.Bitrate, + Creator = item.Creator, + Height = item.Height, + Length = item.Length, + PreviewImage = item.PreviewImage, + Rotation = item.Rotation, + Title = item.Title, + Track = item.Track, + Width = item.Width, }; return file; } diff --git a/SabreTools.Serialization.CrossModel/ArchiveDotOrg.Serializer.cs b/SabreTools.Serialization.CrossModel/ArchiveDotOrg.Serializer.cs index 815abf05..f6c5a214 100644 --- a/SabreTools.Serialization.CrossModel/ArchiveDotOrg.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/ArchiveDotOrg.Serializer.cs @@ -1,5 +1,6 @@ using System; using SabreTools.Data.Models.ArchiveDotOrg; +using SabreTools.Text.Extensions; namespace SabreTools.Serialization.CrossModel { @@ -13,14 +14,11 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new Data.Models.Metadata.MetadataFile { - [Data.Models.Metadata.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(), + Header = ConvertHeaderToInternalModel(), }; if (item?.File is not null && item.File.Length > 0) - { - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] - = Array.ConvertAll(item.File, ConvertMachineToInternalModel); - } + metadataFile.Machine = Array.ConvertAll(item.File, ConvertMachineToInternalModel); return metadataFile; } @@ -32,7 +30,7 @@ namespace SabreTools.Serialization.CrossModel { var header = new Data.Models.Metadata.Header { - [Data.Models.Metadata.Header.NameKey] = "archive.org", + Name = "archive.org", }; return header; } @@ -46,7 +44,7 @@ namespace SabreTools.Serialization.CrossModel var rom = ConvertToInternalModel(item); if (rom is not null) - machine[Data.Models.Metadata.Machine.RomKey] = new Data.Models.Metadata.Rom[] { rom }; + machine.Rom = new Data.Models.Metadata.Rom[] { rom }; return machine; } @@ -61,69 +59,69 @@ namespace SabreTools.Serialization.CrossModel var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.NameKey] = item.Name, - [Data.Models.Metadata.Rom.SourceKey] = item.Source, - [Data.Models.Metadata.Rom.BitTorrentMagnetHashKey] = item.BitTorrentMagnetHash, - [Data.Models.Metadata.Rom.LastModifiedTimeKey] = item.LastModifiedTime, - [Data.Models.Metadata.Rom.SizeKey] = item.Size, - [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, - [Data.Models.Metadata.Rom.FormatKey] = item.Format, - [Data.Models.Metadata.Rom.OriginalKey] = item.Original, - [Data.Models.Metadata.Rom.SummationKey] = item.Summation, - [Data.Models.Metadata.Rom.MatrixNumberKey] = item.MatrixNumber, - [Data.Models.Metadata.Rom.CollectionCatalogNumberKey] = item.CollectionCatalogNumber, - [Data.Models.Metadata.Rom.PublisherKey] = item.Publisher, - [Data.Models.Metadata.Rom.CommentKey] = item.Comment, + Name = item.Name, + Source = item.Source, + BitTorrentMagnetHash = item.BitTorrentMagnetHash, + LastModifiedTime = item.LastModifiedTime, + Size = NumberHelper.ConvertToInt64(item.Size), + MD5 = item.MD5, + CRC32 = item.CRC32, + SHA1 = item.SHA1, + FileCount = item.FileCount, + Format = item.Format, + Original = item.Original, + Summation = item.Summation, + MatrixNumber = item.MatrixNumber, + CollectionCatalogNumber = item.CollectionCatalogNumber, + Publisher = item.Publisher, + Comment = item.Comment, - [Data.Models.Metadata.Rom.ASRDetectedLangKey] = item.ASRDetectedLang, - [Data.Models.Metadata.Rom.ASRDetectedLangConfKey] = item.ASRDetectedLangConf, - [Data.Models.Metadata.Rom.ASRTranscribedLangKey] = item.ASRTranscribedLang, - [Data.Models.Metadata.Rom.WhisperASRModuleVersionKey] = item.WhisperASRModuleVersion, - [Data.Models.Metadata.Rom.WhisperModelHashKey] = item.WhisperModelHash, - [Data.Models.Metadata.Rom.WhisperModelNameKey] = item.WhisperModelName, - [Data.Models.Metadata.Rom.WhisperVersionKey] = item.WhisperVersion, + ASRDetectedLang = item.ASRDetectedLang, + ASRDetectedLangConf = item.ASRDetectedLangConf, + ASRTranscribedLang = item.ASRTranscribedLang, + WhisperASRModuleVersion = item.WhisperASRModuleVersion, + WhisperModelHash = item.WhisperModelHash, + WhisperModelName = item.WhisperModelName, + WhisperVersion = item.WhisperVersion, - [Data.Models.Metadata.Rom.ClothCoverDetectionModuleVersionKey] = item.ClothCoverDetectionModuleVersion, - [Data.Models.Metadata.Rom.hOCRCharToWordhOCRVersionKey] = item.hOCRCharToWordhOCRVersion, - [Data.Models.Metadata.Rom.hOCRCharToWordModuleVersionKey] = item.hOCRCharToWordModuleVersion, - [Data.Models.Metadata.Rom.hOCRFtsTexthOCRVersionKey] = item.hOCRFtsTexthOCRVersion, - [Data.Models.Metadata.Rom.hOCRFtsTextModuleVersionKey] = item.hOCRFtsTextModuleVersion, - [Data.Models.Metadata.Rom.hOCRPageIndexhOCRVersionKey] = item.hOCRPageIndexhOCRVersion, - [Data.Models.Metadata.Rom.hOCRPageIndexModuleVersionKey] = item.hOCRPageIndexModuleVersion, - [Data.Models.Metadata.Rom.TesseractOCRKey] = item.TesseractOCR, - [Data.Models.Metadata.Rom.TesseractOCRConvertedKey] = item.TesseractOCRConverted, - [Data.Models.Metadata.Rom.TesseractOCRDetectedLangKey] = item.TesseractOCRDetectedLang, - [Data.Models.Metadata.Rom.TesseractOCRDetectedLangConfKey] = item.TesseractOCRDetectedLangConf, - [Data.Models.Metadata.Rom.TesseractOCRDetectedScriptKey] = item.TesseractOCRDetectedScript, - [Data.Models.Metadata.Rom.TesseractOCRDetectedScriptConfKey] = item.TesseractOCRDetectedScriptConf, - [Data.Models.Metadata.Rom.TesseractOCRModuleVersionKey] = item.TesseractOCRModuleVersion, - [Data.Models.Metadata.Rom.TesseractOCRParametersKey] = item.TesseractOCRParameters, - [Data.Models.Metadata.Rom.PDFModuleVersionKey] = item.PDFModuleVersion, - [Data.Models.Metadata.Rom.WordConfidenceInterval0To10Key] = item.WordConfidenceInterval0To10, - [Data.Models.Metadata.Rom.WordConfidenceInterval11To20Key] = item.WordConfidenceInterval11To20, - [Data.Models.Metadata.Rom.WordConfidenceInterval21To30Key] = item.WordConfidenceInterval21To30, - [Data.Models.Metadata.Rom.WordConfidenceInterval31To40Key] = item.WordConfidenceInterval31To40, - [Data.Models.Metadata.Rom.WordConfidenceInterval41To50Key] = item.WordConfidenceInterval41To50, - [Data.Models.Metadata.Rom.WordConfidenceInterval51To60Key] = item.WordConfidenceInterval51To60, - [Data.Models.Metadata.Rom.WordConfidenceInterval61To70Key] = item.WordConfidenceInterval61To70, - [Data.Models.Metadata.Rom.WordConfidenceInterval71To80Key] = item.WordConfidenceInterval71To80, - [Data.Models.Metadata.Rom.WordConfidenceInterval81To90Key] = item.WordConfidenceInterval81To90, - [Data.Models.Metadata.Rom.WordConfidenceInterval91To100Key] = item.WordConfidenceInterval91To100, + ClothCoverDetectionModuleVersion = item.ClothCoverDetectionModuleVersion, + hOCRCharToWordhOCRVersion = item.hOCRCharToWordhOCRVersion, + hOCRCharToWordModuleVersion = item.hOCRCharToWordModuleVersion, + hOCRFtsTexthOCRVersion = item.hOCRFtsTexthOCRVersion, + hOCRFtsTextModuleVersion = item.hOCRFtsTextModuleVersion, + hOCRPageIndexhOCRVersion = item.hOCRPageIndexhOCRVersion, + hOCRPageIndexModuleVersion = item.hOCRPageIndexModuleVersion, + TesseractOCR = item.TesseractOCR, + TesseractOCRConverted = item.TesseractOCRConverted, + TesseractOCRDetectedLang = item.TesseractOCRDetectedLang, + TesseractOCRDetectedLangConf = item.TesseractOCRDetectedLangConf, + TesseractOCRDetectedScript = item.TesseractOCRDetectedScript, + TesseractOCRDetectedScriptConf = item.TesseractOCRDetectedScriptConf, + TesseractOCRModuleVersion = item.TesseractOCRModuleVersion, + TesseractOCRParameters = item.TesseractOCRParameters, + PDFModuleVersion = item.PDFModuleVersion, + WordConfidenceInterval0To10 = item.WordConfidenceInterval0To10, + WordConfidenceInterval11To20 = item.WordConfidenceInterval11To20, + WordConfidenceInterval21To30 = item.WordConfidenceInterval21To30, + WordConfidenceInterval31To40 = item.WordConfidenceInterval31To40, + WordConfidenceInterval41To50 = item.WordConfidenceInterval41To50, + WordConfidenceInterval51To60 = item.WordConfidenceInterval51To60, + WordConfidenceInterval61To70 = item.WordConfidenceInterval61To70, + WordConfidenceInterval71To80 = item.WordConfidenceInterval71To80, + WordConfidenceInterval81To90 = item.WordConfidenceInterval81To90, + WordConfidenceInterval91To100 = item.WordConfidenceInterval91To100, - [Data.Models.Metadata.Rom.AlbumKey] = item.Album, - [Data.Models.Metadata.Rom.ArtistKey] = item.Artist, - [Data.Models.Metadata.Rom.BitrateKey] = item.Bitrate, - [Data.Models.Metadata.Rom.CreatorKey] = item.Creator, - [Data.Models.Metadata.Rom.HeightKey] = item.Height, - [Data.Models.Metadata.Rom.LengthKey] = item.Length, - [Data.Models.Metadata.Rom.PreviewImageKey] = item.PreviewImage, - [Data.Models.Metadata.Rom.RotationKey] = item.Rotation, - [Data.Models.Metadata.Rom.TitleKey] = item.Title, - [Data.Models.Metadata.Rom.TrackKey] = item.Track, - [Data.Models.Metadata.Rom.WidthKey] = item.Width, + Album = item.Album, + Artist = item.Artist, + Bitrate = item.Bitrate, + Creator = item.Creator, + Height = item.Height, + Length = item.Length, + PreviewImage = item.PreviewImage, + Rotation = item.Rotation, + Title = item.Title, + Track = item.Track, + Width = item.Width, }; return rom; } diff --git a/SabreTools.Serialization.CrossModel/AttractMode.Deserializer.cs b/SabreTools.Serialization.CrossModel/AttractMode.Deserializer.cs index 533f8e97..fe22f5dd 100644 --- a/SabreTools.Serialization.CrossModel/AttractMode.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/AttractMode.Deserializer.cs @@ -12,10 +12,10 @@ namespace SabreTools.Serialization.CrossModel if (obj is null) return null; - var header = obj.Read(Data.Models.Metadata.MetadataFile.HeaderKey); + var header = obj.Header; var metadataFile = header is not null ? ConvertHeaderFromInternalModel(header) : new MetadataFile(); - var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = obj.Machine; var items = new List(); foreach (var machine in machines ?? []) { @@ -33,7 +33,7 @@ namespace SabreTools.Serialization.CrossModel { var metadataFile = new MetadataFile { - Header = item.ReadStringArray(Data.Models.Metadata.Header.HeaderKey), + Header = item.HeaderRow, }; return metadataFile; } @@ -43,7 +43,7 @@ namespace SabreTools.Serialization.CrossModel /// private static Row[] ConvertMachineFromInternalModel(Data.Models.Metadata.Machine item) { - var roms = item.Read(Data.Models.Metadata.Machine.RomKey); + var roms = item.Rom; if (roms is null || roms.Length == 0) return []; @@ -57,28 +57,28 @@ namespace SabreTools.Serialization.CrossModel { var row = new Row { - Name = parent.ReadString(Data.Models.Metadata.Machine.NameKey), - Title = item.ReadString(Data.Models.Metadata.Rom.NameKey), - Emulator = parent.ReadString(Data.Models.Metadata.Machine.EmulatorKey), - CloneOf = parent.ReadString(Data.Models.Metadata.Machine.CloneOfKey), - Year = parent.ReadString(Data.Models.Metadata.Machine.YearKey), - Manufacturer = parent.ReadString(Data.Models.Metadata.Machine.ManufacturerKey), - Category = parent.ReadString(Data.Models.Metadata.Machine.CategoryKey), - Players = parent.ReadString(Data.Models.Metadata.Machine.PlayersKey), - Rotation = parent.ReadString(Data.Models.Metadata.Machine.RotationKey), - Control = parent.ReadString(Data.Models.Metadata.Machine.ControlKey), - Status = parent.ReadString(Data.Models.Metadata.Machine.StatusKey), - DisplayCount = parent.ReadString(Data.Models.Metadata.Machine.DisplayCountKey), - DisplayType = parent.ReadString(Data.Models.Metadata.Machine.DisplayTypeKey), - AltRomname = item.ReadString(Data.Models.Metadata.Rom.AltRomnameKey), - AltTitle = item.ReadString(Data.Models.Metadata.Rom.AltTitleKey), - Extra = parent.ReadString(Data.Models.Metadata.Machine.ExtraKey), - Buttons = parent.ReadString(Data.Models.Metadata.Machine.ButtonsKey), - Favorite = parent.ReadString(Data.Models.Metadata.Machine.FavoriteKey), - Tags = parent.ReadString(Data.Models.Metadata.Machine.TagsKey), - PlayedCount = parent.ReadString(Data.Models.Metadata.Machine.PlayedCountKey), - PlayedTime = parent.ReadString(Data.Models.Metadata.Machine.PlayedTimeKey), - FileIsAvailable = item.ReadString(Data.Models.Metadata.Rom.FileIsAvailableKey), + Name = parent.Name, + Title = item.Name, + Emulator = parent.Emulator, + CloneOf = parent.CloneOf, + Year = parent.Year, + Manufacturer = parent.Manufacturer, + Category = parent.Category is null ? null : string.Join(", ", parent.Category), + Players = parent.Players, + Rotation = parent.Rotation, + Control = parent.Control, + Status = parent.Status, + DisplayCount = parent.DisplayCount, + DisplayType = parent.DisplayType, + AltRomname = item.AltRomname, + AltTitle = item.AltTitle, + Extra = parent.Extra, + Buttons = parent.Buttons, + Favorite = parent.Favorite, + Tags = parent.Tags, + PlayedCount = parent.PlayedCount, + PlayedTime = parent.PlayedTime, + FileIsAvailable = item.FileIsAvailable, }; return row; } diff --git a/SabreTools.Serialization.CrossModel/AttractMode.Serializer.cs b/SabreTools.Serialization.CrossModel/AttractMode.Serializer.cs index 3f8188d2..a2c6cd55 100644 --- a/SabreTools.Serialization.CrossModel/AttractMode.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/AttractMode.Serializer.cs @@ -13,14 +13,11 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new Data.Models.Metadata.MetadataFile { - [Data.Models.Metadata.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(obj), + Header = ConvertHeaderToInternalModel(obj), }; if (obj?.Row is not null && obj.Row.Length > 0) - { - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] - = Array.ConvertAll(obj.Row, ConvertMachineToInternalModel); - } + metadataFile.Machine = Array.ConvertAll(obj.Row, ConvertMachineToInternalModel); return metadataFile; } @@ -32,7 +29,7 @@ namespace SabreTools.Serialization.CrossModel { var header = new Data.Models.Metadata.Header { - [Data.Models.Metadata.Header.HeaderKey] = item.Header, + HeaderRow = item.Header, }; return header; } @@ -40,32 +37,29 @@ namespace SabreTools.Serialization.CrossModel /// /// Convert from to /// - private static Data.Models.Metadata.Machine? ConvertMachineToInternalModel(Row? item) + private static Data.Models.Metadata.Machine ConvertMachineToInternalModel(Row item) { - if (item is null) - return null; - var machine = new Data.Models.Metadata.Machine { - [Data.Models.Metadata.Machine.NameKey] = item.Name, - [Data.Models.Metadata.Machine.EmulatorKey] = item.Emulator, - [Data.Models.Metadata.Machine.CloneOfKey] = item.CloneOf, - [Data.Models.Metadata.Machine.YearKey] = item.Year, - [Data.Models.Metadata.Machine.ManufacturerKey] = item.Manufacturer, - [Data.Models.Metadata.Machine.CategoryKey] = item.Category, - [Data.Models.Metadata.Machine.PlayersKey] = item.Players, - [Data.Models.Metadata.Machine.RotationKey] = item.Rotation, - [Data.Models.Metadata.Machine.ControlKey] = item.Control, - [Data.Models.Metadata.Machine.StatusKey] = item.Status, - [Data.Models.Metadata.Machine.DisplayCountKey] = item.DisplayCount, - [Data.Models.Metadata.Machine.DisplayTypeKey] = item.DisplayType, - [Data.Models.Metadata.Machine.ExtraKey] = item.Extra, - [Data.Models.Metadata.Machine.ButtonsKey] = item.Buttons, - [Data.Models.Metadata.Machine.FavoriteKey] = item.Favorite, - [Data.Models.Metadata.Machine.TagsKey] = item.Tags, - [Data.Models.Metadata.Machine.PlayedCountKey] = item.PlayedCount, - [Data.Models.Metadata.Machine.PlayedTimeKey] = item.PlayedTime, - [Data.Models.Metadata.Machine.RomKey] = new Data.Models.Metadata.Rom[] { ConvertToInternalModel(item) }, + Name = item.Name, + Emulator = item.Emulator, + CloneOf = item.CloneOf, + Year = item.Year, + Manufacturer = item.Manufacturer, + Category = item.Category is null ? null : [item.Category], + Players = item.Players, + Rotation = item.Rotation, + Control = item.Control, + Status = item.Status, + DisplayCount = item.DisplayCount, + DisplayType = item.DisplayType, + Extra = item.Extra, + Buttons = item.Buttons, + Favorite = item.Favorite, + Tags = item.Tags, + PlayedCount = item.PlayedCount, + PlayedTime = item.PlayedTime, + Rom = [ConvertToInternalModel(item)], }; return machine; } @@ -77,10 +71,10 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.NameKey] = item.Title, - [Data.Models.Metadata.Rom.AltRomnameKey] = item.AltRomname, - [Data.Models.Metadata.Rom.AltTitleKey] = item.AltTitle, - [Data.Models.Metadata.Rom.FileIsAvailableKey] = item.FileIsAvailable, + Name = item.Title, + AltRomname = item.AltRomname, + AltTitle = item.AltTitle, + FileIsAvailable = item.FileIsAvailable, }; return rom; } diff --git a/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs b/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs index 362085a1..e6ee071e 100644 --- a/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs @@ -18,18 +18,15 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new MetadataFile(); - var header = obj.Read(Data.Models.Metadata.MetadataFile.HeaderKey); + var header = obj.Header; if (header is not null) metadataFile.ClrMamePro = ConvertHeaderFromInternalModel(header); - var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = obj.Machine; if (machines is not null && machines.Length > 0) - { - metadataFile.Game - = Array.ConvertAll(machines, m => ConvertMachineFromInternalModel(m, game)); - } + metadataFile.Game = Array.ConvertAll(machines, m => ConvertMachineFromInternalModel(m, game)); - var info = obj.Read(Data.Models.Metadata.MetadataFile.InfoSourceKey); + var info = obj.InfoSource; if (info is not null) metadataFile.Info = ConvertInfoSourceFromInternalModel(info); @@ -43,21 +40,21 @@ namespace SabreTools.Serialization.CrossModel { var clrMamePro = new Data.Models.ClrMamePro.ClrMamePro { - Name = item.ReadString(Data.Models.Metadata.Header.NameKey), - Description = item.ReadString(Data.Models.Metadata.Header.DescriptionKey), - RootDir = item.ReadString(Data.Models.Metadata.Header.RootDirKey), - Category = item.ReadString(Data.Models.Metadata.Header.CategoryKey), - Version = item.ReadString(Data.Models.Metadata.Header.VersionKey), - Date = item.ReadString(Data.Models.Metadata.Header.DateKey), - Author = item.ReadString(Data.Models.Metadata.Header.AuthorKey), - Homepage = item.ReadString(Data.Models.Metadata.Header.HomepageKey), - Url = item.ReadString(Data.Models.Metadata.Header.UrlKey), - Comment = item.ReadString(Data.Models.Metadata.Header.CommentKey), - Header = item.ReadString(Data.Models.Metadata.Header.HeaderKey), - Type = item.ReadString(Data.Models.Metadata.Header.TypeKey), - ForceMerging = item.ReadString(Data.Models.Metadata.Header.ForceMergingKey), - ForceZipping = item.ReadString(Data.Models.Metadata.Header.ForceZippingKey), - ForcePacking = item.ReadString(Data.Models.Metadata.Header.ForcePackingKey), + Name = item.Name, + Description = item.Description, + RootDir = item.RootDir, + Category = item.Category, + Version = item.Version, + Date = item.Date, + Author = item.Author, + Homepage = item.Homepage, + Url = item.Url, + Comment = item.Comment, + Header = item.HeaderSkipper, + Type = item.Type, + ForceMerging = item.ForceMerging, + ForceZipping = item.ForceZipping, + ForcePacking = item.ForcePacking, }; return clrMamePro; } @@ -69,65 +66,65 @@ namespace SabreTools.Serialization.CrossModel { GameBase gameBase = game ? new Game() : new Machine(); - gameBase.Name = item.ReadString(Data.Models.Metadata.Machine.NameKey); - gameBase.Description = item.ReadString(Data.Models.Metadata.Machine.DescriptionKey); + gameBase.Name = item.Name; + gameBase.Description = item.Description; // gameBase.DriverStatus = item.ReadString(Data.Models.Metadata.Machine.DriverKey); // TODO: Needs metadata mapping - gameBase.Year = item.ReadString(Data.Models.Metadata.Machine.YearKey); - gameBase.Manufacturer = item.ReadString(Data.Models.Metadata.Machine.ManufacturerKey); - gameBase.Category = item.ReadString(Data.Models.Metadata.Machine.CategoryKey); - gameBase.CloneOf = item.ReadString(Data.Models.Metadata.Machine.CloneOfKey); - gameBase.RomOf = item.ReadString(Data.Models.Metadata.Machine.RomOfKey); - gameBase.SampleOf = item.ReadString(Data.Models.Metadata.Machine.SampleOfKey); + gameBase.Year = item.Year; + gameBase.Manufacturer = item.Manufacturer; + gameBase.Category = item.Category is null ? null : string.Join(", ", item.Category); + gameBase.CloneOf = item.CloneOf; + gameBase.RomOf = item.RomOf; + gameBase.SampleOf = item.SampleOf; - var releases = item.Read(Data.Models.Metadata.Machine.ReleaseKey); + var releases = item.Release; if (releases is not null && releases.Length > 0) gameBase.Release = Array.ConvertAll(releases, ConvertFromInternalModel); - var biosSets = item.Read(Data.Models.Metadata.Machine.BiosSetKey); + var biosSets = item.BiosSet; if (biosSets is not null && biosSets.Length > 0) gameBase.BiosSet = Array.ConvertAll(biosSets, ConvertFromInternalModel); - var roms = item.Read(Data.Models.Metadata.Machine.RomKey); + var roms = item.Rom; if (roms is not null && roms.Length > 0) gameBase.Rom = Array.ConvertAll(roms, ConvertFromInternalModel); - var disks = item.Read(Data.Models.Metadata.Machine.DiskKey); + var disks = item.Disk; if (disks is not null && disks.Length > 0) gameBase.Disk = Array.ConvertAll(disks, ConvertFromInternalModel); - var medias = item.Read(Data.Models.Metadata.Machine.MediaKey); + var medias = item.Media; if (medias is not null && medias.Length > 0) gameBase.Media = Array.ConvertAll(medias, ConvertFromInternalModel); - var samples = item.Read(Data.Models.Metadata.Machine.SampleKey); + var samples = item.Sample; if (samples is not null && samples.Length > 0) gameBase.Sample = Array.ConvertAll(samples, ConvertFromInternalModel); - var archives = item.Read(Data.Models.Metadata.Machine.ArchiveKey); + var archives = item.Archive; if (archives is not null && archives.Length > 0) gameBase.Archive = Array.ConvertAll(archives, ConvertFromInternalModel); - var chips = item.Read(Data.Models.Metadata.Machine.ChipKey); + var chips = item.Chip; if (chips is not null && chips.Length > 0) gameBase.Chip = Array.ConvertAll(chips, ConvertFromInternalModel); - var videos = item.Read(Data.Models.Metadata.Machine.VideoKey); + var videos = item.Video; if (videos is not null && videos.Length > 0) gameBase.Video = Array.ConvertAll(videos, ConvertFromInternalModel); - var sound = item.Read(Data.Models.Metadata.Machine.SoundKey); + var sound = item.Sound; if (sound is not null) gameBase.Sound = ConvertFromInternalModel(sound); - var input = item.Read(Data.Models.Metadata.Machine.InputKey); + var input = item.Input; if (input is not null) gameBase.Input = ConvertFromInternalModel(input); - var dipSwitches = item.Read(Data.Models.Metadata.Machine.DipSwitchKey); + var dipSwitches = item.DipSwitch; if (dipSwitches is not null && dipSwitches.Length > 0) gameBase.DipSwitch = Array.ConvertAll(dipSwitches, ConvertFromInternalModel); - var driver = item.Read(Data.Models.Metadata.Machine.DriverKey); + var driver = item.Driver; if (driver is not null) gameBase.Driver = ConvertFromInternalModel(driver); @@ -141,7 +138,7 @@ namespace SabreTools.Serialization.CrossModel { var archive = new Archive { - Name = item.ReadString(Data.Models.Metadata.Archive.NameKey), + Name = item.Name, }; return archive; } @@ -153,9 +150,9 @@ namespace SabreTools.Serialization.CrossModel { var biosset = new BiosSet { - Name = item.ReadString(Data.Models.Metadata.BiosSet.NameKey), - Description = item.ReadString(Data.Models.Metadata.BiosSet.DescriptionKey), - Default = item.ReadString(Data.Models.Metadata.BiosSet.DefaultKey), + Name = item.Name, + Description = item.Description, + Default = item.Default, }; return biosset; } @@ -167,10 +164,10 @@ namespace SabreTools.Serialization.CrossModel { var chip = new Chip { - Type = item.ReadString(Data.Models.Metadata.Chip.ChipTypeKey), - Name = item.ReadString(Data.Models.Metadata.Chip.NameKey), - Flags = item.ReadString(Data.Models.Metadata.Chip.FlagsKey), - Clock = item.ReadString(Data.Models.Metadata.Chip.ClockKey), + Type = item.ChipType, + Name = item.Name, + Flags = item.Flags, + Clock = item.Clock, }; return chip; } @@ -182,9 +179,9 @@ namespace SabreTools.Serialization.CrossModel { var dipswitch = new DipSwitch { - Name = item.ReadString(Data.Models.Metadata.DipSwitch.NameKey), - Entry = item[Data.Models.Metadata.DipSwitch.EntryKey] as string[], - Default = item.ReadString(Data.Models.Metadata.DipSwitch.DefaultKey), + Name = item.Name, + Entry = item.Entry, + Default = item.Default, }; return dipswitch; } @@ -196,12 +193,12 @@ namespace SabreTools.Serialization.CrossModel { var disk = new Disk { - Name = item.ReadString(Data.Models.Metadata.Disk.NameKey), - MD5 = item.ReadString(Data.Models.Metadata.Disk.MD5Key), - SHA1 = item.ReadString(Data.Models.Metadata.Disk.SHA1Key), - Merge = item.ReadString(Data.Models.Metadata.Disk.MergeKey), - Status = item.ReadString(Data.Models.Metadata.Disk.StatusKey), - Flags = item.ReadString(Data.Models.Metadata.Disk.FlagsKey), + Name = item.Name, + MD5 = item.MD5, + SHA1 = item.SHA1, + Merge = item.Merge, + Status = item.Status, + Flags = item.Flags, }; return disk; } @@ -213,11 +210,11 @@ namespace SabreTools.Serialization.CrossModel { var driver = new Driver { - Status = item.ReadString(Data.Models.Metadata.Driver.StatusKey), - Color = item.ReadString(Data.Models.Metadata.Driver.ColorKey), - Sound = item.ReadString(Data.Models.Metadata.Driver.SoundKey), - PaletteSize = item.ReadString(Data.Models.Metadata.Driver.PaletteSizeKey), - Blit = item.ReadString(Data.Models.Metadata.Driver.BlitKey), + Status = item.Status, + Color = item.Color, + Sound = item.Sound, + PaletteSize = item.PaletteSize, + Blit = item.Blit, }; return driver; } @@ -229,12 +226,12 @@ namespace SabreTools.Serialization.CrossModel { var input = new Input { - Players = item.ReadString(Data.Models.Metadata.Input.PlayersKey), - Control = item.ReadString(Data.Models.Metadata.Input.ControlKey), - Buttons = item.ReadString(Data.Models.Metadata.Input.ButtonsKey), - Coins = item.ReadString(Data.Models.Metadata.Input.CoinsKey), - Tilt = item.ReadString(Data.Models.Metadata.Input.TiltKey), - Service = item.ReadString(Data.Models.Metadata.Input.ServiceKey), + Players = item.Players, + Control = item.ControlAttr, + Buttons = item.Buttons, + Coins = item.Coins, + Tilt = item.Tilt, + Service = item.Service, }; return input; } @@ -246,11 +243,11 @@ namespace SabreTools.Serialization.CrossModel { var media = new Media { - Name = item.ReadString(Data.Models.Metadata.Media.NameKey), - MD5 = item.ReadString(Data.Models.Metadata.Media.MD5Key), - SHA1 = item.ReadString(Data.Models.Metadata.Media.SHA1Key), - SHA256 = item.ReadString(Data.Models.Metadata.Media.SHA256Key), - SpamSum = item.ReadString(Data.Models.Metadata.Media.SpamSumKey), + Name = item.Name, + MD5 = item.MD5, + SHA1 = item.SHA1, + SHA256 = item.SHA256, + SpamSum = item.SpamSum, }; return media; } @@ -262,11 +259,11 @@ namespace SabreTools.Serialization.CrossModel { var release = new Release { - Name = item.ReadString(Data.Models.Metadata.Release.NameKey), - Region = item.ReadString(Data.Models.Metadata.Release.RegionKey), - Language = item.ReadString(Data.Models.Metadata.Release.LanguageKey), - Date = item.ReadString(Data.Models.Metadata.Release.DateKey), - Default = item.ReadString(Data.Models.Metadata.Release.DefaultKey), + Name = item.Name, + Region = item.Region, + Language = item.Language, + Date = item.Date, + Default = item.Default, }; return release; } @@ -278,33 +275,33 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Rom { - Name = item.ReadString(Data.Models.Metadata.Rom.NameKey), - Size = item.ReadString(Data.Models.Metadata.Rom.SizeKey), - CRC16 = item.ReadString(Data.Models.Metadata.Rom.CRC16Key), - CRC = item.ReadString(Data.Models.Metadata.Rom.CRCKey), - CRC64 = item.ReadString(Data.Models.Metadata.Rom.CRC64Key), - MD2 = item.ReadString(Data.Models.Metadata.Rom.MD2Key), - MD4 = item.ReadString(Data.Models.Metadata.Rom.MD4Key), - MD5 = item.ReadString(Data.Models.Metadata.Rom.MD5Key), - RIPEMD128 = item.ReadString(Data.Models.Metadata.Rom.RIPEMD128Key), - RIPEMD160 = item.ReadString(Data.Models.Metadata.Rom.RIPEMD160Key), - SHA1 = item.ReadString(Data.Models.Metadata.Rom.SHA1Key), - SHA256 = item.ReadString(Data.Models.Metadata.Rom.SHA256Key), - SHA384 = item.ReadString(Data.Models.Metadata.Rom.SHA384Key), - SHA512 = item.ReadString(Data.Models.Metadata.Rom.SHA512Key), - SpamSum = item.ReadString(Data.Models.Metadata.Rom.SpamSumKey), - xxHash364 = item.ReadString(Data.Models.Metadata.Rom.xxHash364Key), - xxHash3128 = item.ReadString(Data.Models.Metadata.Rom.xxHash3128Key), - Merge = item.ReadString(Data.Models.Metadata.Rom.MergeKey), - Status = item.ReadString(Data.Models.Metadata.Rom.StatusKey), - Region = item.ReadString(Data.Models.Metadata.Rom.RegionKey), - Flags = item.ReadString(Data.Models.Metadata.Rom.FlagsKey), - Offs = item.ReadString(Data.Models.Metadata.Rom.OffsetKey), - Serial = item.ReadString(Data.Models.Metadata.Rom.SerialKey), - Header = item.ReadString(Data.Models.Metadata.Rom.HeaderKey), - Date = item.ReadString(Data.Models.Metadata.Rom.DateKey), - Inverted = item.ReadString(Data.Models.Metadata.Rom.InvertedKey), - MIA = item.ReadString(Data.Models.Metadata.Rom.MIAKey), + Name = item.Name, + Size = item.Size, + CRC16 = item.CRC16, + CRC = item.CRC32, + CRC64 = item.CRC64, + MD2 = item.MD2, + MD4 = item.MD4, + MD5 = item.MD5, + RIPEMD128 = item.RIPEMD128, + RIPEMD160 = item.RIPEMD160, + SHA1 = item.SHA1, + SHA256 = item.SHA256, + SHA384 = item.SHA384, + SHA512 = item.SHA512, + SpamSum = item.SpamSum, + xxHash364 = item.xxHash364, + xxHash3128 = item.xxHash3128, + Merge = item.Merge, + Status = item.Status, + Region = item.Region, + Flags = item.Flags, + Offs = item.Offset, + Serial = item.Serial, + Header = item.Header, + Date = item.Date, + Inverted = item.Inverted, + MIA = item.MIA, }; return rom; } @@ -314,10 +311,7 @@ namespace SabreTools.Serialization.CrossModel /// private static Sample ConvertFromInternalModel(Data.Models.Metadata.Sample item) { - var sample = new Sample - { - Name = item.ReadString(Data.Models.Metadata.Sample.NameKey), - }; + var sample = new Sample { Name = item.Name, }; return sample; } @@ -328,7 +322,7 @@ namespace SabreTools.Serialization.CrossModel { var sound = new Sound { - Channels = item.ReadString(Data.Models.Metadata.Sound.ChannelsKey), + Channels = item.Channels, }; return sound; } @@ -340,13 +334,13 @@ namespace SabreTools.Serialization.CrossModel { var video = new Video { - Screen = item.ReadString(Data.Models.Metadata.Video.ScreenKey), - Orientation = item.ReadString(Data.Models.Metadata.Video.OrientationKey), - X = item.ReadString(Data.Models.Metadata.Video.WidthKey), - Y = item.ReadString(Data.Models.Metadata.Video.HeightKey), - AspectX = item.ReadString(Data.Models.Metadata.Video.AspectXKey), - AspectY = item.ReadString(Data.Models.Metadata.Video.AspectYKey), - Freq = item.ReadString(Data.Models.Metadata.Video.RefreshKey), + Screen = item.Screen, + Orientation = item.Orientation, + X = item.Width, + Y = item.Height, + AspectX = item.AspectX, + AspectY = item.AspectY, + Freq = item.Refresh, }; return video; } @@ -358,7 +352,7 @@ namespace SabreTools.Serialization.CrossModel { var info = new Info(); - var sources = item.Read(Data.Models.Metadata.InfoSource.SourceKey); + var sources = item.Source; if (sources is not null && sources.Length > 0) info.Source = [.. sources]; diff --git a/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs b/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs index ec3f209c..21277c45 100644 --- a/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs @@ -14,16 +14,13 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new Data.Models.Metadata.MetadataFile(); if (obj?.ClrMamePro is not null) - metadataFile[Data.Models.Metadata.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(obj.ClrMamePro); + metadataFile.Header = ConvertHeaderToInternalModel(obj.ClrMamePro); if (obj?.Game is not null && obj.Game.Length > 0) - { - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] - = Array.ConvertAll(obj.Game, ConvertMachineToInternalModel); - } + metadataFile.Machine = Array.ConvertAll(obj.Game, ConvertMachineToInternalModel); if (obj?.Info is not null) - metadataFile[Data.Models.Metadata.MetadataFile.InfoSourceKey] = ConvertInfoSourceToInternalModel(obj.Info); + metadataFile.InfoSource = ConvertInfoSourceToInternalModel(obj.Info); return metadataFile; } @@ -35,21 +32,21 @@ namespace SabreTools.Serialization.CrossModel { var header = new Data.Models.Metadata.Header { - [Data.Models.Metadata.Header.NameKey] = item.Name, - [Data.Models.Metadata.Header.DescriptionKey] = item.Description, - [Data.Models.Metadata.Header.RootDirKey] = item.RootDir, - [Data.Models.Metadata.Header.CategoryKey] = item.Category, - [Data.Models.Metadata.Header.VersionKey] = item.Version, - [Data.Models.Metadata.Header.DateKey] = item.Date, - [Data.Models.Metadata.Header.AuthorKey] = item.Author, - [Data.Models.Metadata.Header.HomepageKey] = item.Homepage, - [Data.Models.Metadata.Header.UrlKey] = item.Url, - [Data.Models.Metadata.Header.CommentKey] = item.Comment, - [Data.Models.Metadata.Header.HeaderKey] = item.Header, - [Data.Models.Metadata.Header.TypeKey] = item.Type, - [Data.Models.Metadata.Header.ForceMergingKey] = item.ForceMerging, - [Data.Models.Metadata.Header.ForceZippingKey] = item.ForceZipping, - [Data.Models.Metadata.Header.ForcePackingKey] = item.ForcePacking, + Name = item.Name, + Description = item.Description, + RootDir = item.RootDir, + Category = item.Category, + Version = item.Version, + Date = item.Date, + Author = item.Author, + Homepage = item.Homepage, + Url = item.Url, + Comment = item.Comment, + HeaderSkipper = item.Header, + Type = item.Type, + ForceMerging = item.ForceMerging, + ForceZipping = item.ForceZipping, + ForcePacking = item.ForcePacking, }; return header; } @@ -57,92 +54,59 @@ namespace SabreTools.Serialization.CrossModel /// /// Convert from to /// - private static Data.Models.Metadata.Machine? ConvertMachineToInternalModel(GameBase? item) + private static Data.Models.Metadata.Machine ConvertMachineToInternalModel(GameBase item) { - if (item is null) - return null; - var machine = new Data.Models.Metadata.Machine { - [Data.Models.Metadata.Machine.NameKey] = item.Name, - [Data.Models.Metadata.Machine.DescriptionKey] = item.Description, - // [Data.Models.Metadata.Machine.DriverKey] = item.DriverStatus, // TODO: Needs metadata mapping - [Data.Models.Metadata.Machine.YearKey] = item.Year, - [Data.Models.Metadata.Machine.ManufacturerKey] = item.Manufacturer, - [Data.Models.Metadata.Machine.CategoryKey] = item.Category, - [Data.Models.Metadata.Machine.CloneOfKey] = item.CloneOf, - [Data.Models.Metadata.Machine.RomOfKey] = item.RomOf, - [Data.Models.Metadata.Machine.SampleOfKey] = item.SampleOf, + Name = item.Name, + Description = item.Description, + // Driver = item.DriverStatus, // TODO: Needs metadata mapping + Year = item.Year, + Manufacturer = item.Manufacturer, + Category = item.Category is null ? null : [item.Category], + CloneOf = item.CloneOf, + RomOf = item.RomOf, + SampleOf = item.SampleOf, }; if (item.Release is not null && item.Release.Length > 0) - { - machine[Data.Models.Metadata.Machine.ReleaseKey] - = Array.ConvertAll(item.Release, ConvertToInternalModel); - } + machine.Release = Array.ConvertAll(item.Release, ConvertToInternalModel); if (item.BiosSet is not null && item.BiosSet.Length > 0) - { - machine[Data.Models.Metadata.Machine.BiosSetKey] - = Array.ConvertAll(item.BiosSet, ConvertToInternalModel); - } + machine.BiosSet = Array.ConvertAll(item.BiosSet, ConvertToInternalModel); if (item.Rom is not null && item.Rom.Length > 0) - { - machine[Data.Models.Metadata.Machine.RomKey] - = Array.ConvertAll(item.Rom, ConvertToInternalModel); - } + machine.Rom = Array.ConvertAll(item.Rom, ConvertToInternalModel); if (item.Disk is not null && item.Disk.Length > 0) - { - machine[Data.Models.Metadata.Machine.DiskKey] - = Array.ConvertAll(item.Disk, ConvertToInternalModel); - } + machine.Disk = Array.ConvertAll(item.Disk, ConvertToInternalModel); if (item.Media is not null && item.Media.Length > 0) - { - machine[Data.Models.Metadata.Machine.MediaKey] - = Array.ConvertAll(item.Media, ConvertToInternalModel); - } + machine.Media = Array.ConvertAll(item.Media, ConvertToInternalModel); if (item.Sample is not null && item.Sample.Length > 0) - { - machine[Data.Models.Metadata.Machine.SampleKey] - = Array.ConvertAll(item.Sample, ConvertToInternalModel); - } + machine.Sample = Array.ConvertAll(item.Sample, ConvertToInternalModel); if (item.Archive is not null && item.Archive.Length > 0) - { - machine[Data.Models.Metadata.Machine.ArchiveKey] - = Array.ConvertAll(item.Archive, ConvertToInternalModel); - } + machine.Archive = Array.ConvertAll(item.Archive, ConvertToInternalModel); if (item.Chip is not null && item.Chip.Length > 0) - { - machine[Data.Models.Metadata.Machine.ChipKey] - = Array.ConvertAll(item.Chip, ConvertToInternalModel); - } + machine.Chip = Array.ConvertAll(item.Chip, ConvertToInternalModel); if (item.Video is not null) - { - machine[Data.Models.Metadata.Machine.VideoKey] - = Array.ConvertAll(item.Video, ConvertToInternalModel); - } + machine.Video = Array.ConvertAll(item.Video, ConvertToInternalModel); if (item.Sound is not null) - machine[Data.Models.Metadata.Machine.SoundKey] = ConvertToInternalModel(item.Sound); + machine.Sound = ConvertToInternalModel(item.Sound); if (item.Input is not null) - machine[Data.Models.Metadata.Machine.InputKey] = ConvertToInternalModel(item.Input); + machine.Input = ConvertToInternalModel(item.Input); if (item.DipSwitch is not null && item.DipSwitch.Length > 0) - { - machine[Data.Models.Metadata.Machine.DipSwitchKey] - = Array.ConvertAll(item.DipSwitch, ConvertToInternalModel); - } + machine.DipSwitch = Array.ConvertAll(item.DipSwitch, ConvertToInternalModel); if (item.Driver is not null) - machine[Data.Models.Metadata.Machine.DriverKey] = ConvertToInternalModel(item.Driver); + machine.Driver = ConvertToInternalModel(item.Driver); return machine; } @@ -154,7 +118,7 @@ namespace SabreTools.Serialization.CrossModel { var archive = new Data.Models.Metadata.Archive { - [Data.Models.Metadata.Archive.NameKey] = item.Name, + Name = item.Name, }; return archive; } @@ -166,9 +130,9 @@ namespace SabreTools.Serialization.CrossModel { var biosset = new Data.Models.Metadata.BiosSet { - [Data.Models.Metadata.BiosSet.NameKey] = item.Name, - [Data.Models.Metadata.BiosSet.DescriptionKey] = item.Description, - [Data.Models.Metadata.BiosSet.DefaultKey] = item.Default, + Name = item.Name, + Description = item.Description, + Default = item.Default, }; return biosset; } @@ -180,10 +144,10 @@ namespace SabreTools.Serialization.CrossModel { var chip = new Data.Models.Metadata.Chip { - [Data.Models.Metadata.Chip.ChipTypeKey] = item.Type, - [Data.Models.Metadata.Chip.NameKey] = item.Name, - [Data.Models.Metadata.Chip.FlagsKey] = item.Flags, - [Data.Models.Metadata.Chip.ClockKey] = item.Clock, + ChipType = item.Type, + Name = item.Name, + Flags = item.Flags, + Clock = item.Clock, }; return chip; } @@ -195,9 +159,9 @@ namespace SabreTools.Serialization.CrossModel { var dipswitch = new Data.Models.Metadata.DipSwitch { - [Data.Models.Metadata.DipSwitch.NameKey] = item.Name, - [Data.Models.Metadata.DipSwitch.EntryKey] = item.Entry, - [Data.Models.Metadata.DipSwitch.DefaultKey] = item.Default, + Name = item.Name, + Entry = item.Entry, + Default = item.Default, }; return dipswitch; } @@ -209,12 +173,12 @@ namespace SabreTools.Serialization.CrossModel { var disk = new Data.Models.Metadata.Disk { - [Data.Models.Metadata.Disk.NameKey] = 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.StatusKey] = item.Status, - [Data.Models.Metadata.Disk.FlagsKey] = item.Flags, + Name = item.Name, + MD5 = item.MD5, + SHA1 = item.SHA1, + Merge = item.Merge, + Status = item.Status, + Flags = item.Flags, }; return disk; } @@ -226,11 +190,11 @@ namespace SabreTools.Serialization.CrossModel { var driver = new Data.Models.Metadata.Driver { - [Data.Models.Metadata.Driver.StatusKey] = item.Status, - [Data.Models.Metadata.Driver.ColorKey] = item.Color, - [Data.Models.Metadata.Driver.SoundKey] = item.Sound, - [Data.Models.Metadata.Driver.PaletteSizeKey] = item.PaletteSize, - [Data.Models.Metadata.Driver.BlitKey] = item.Blit, + Status = item.Status, + Color = item.Color, + Sound = item.Sound, + PaletteSize = item.PaletteSize, + Blit = item.Blit, }; return driver; } @@ -242,12 +206,12 @@ namespace SabreTools.Serialization.CrossModel { var input = new Data.Models.Metadata.Input { - [Data.Models.Metadata.Input.PlayersKey] = item.Players, - [Data.Models.Metadata.Input.ControlKey] = item.Control, - [Data.Models.Metadata.Input.ButtonsKey] = item.Buttons, - [Data.Models.Metadata.Input.CoinsKey] = item.Coins, - [Data.Models.Metadata.Input.TiltKey] = item.Tilt, - [Data.Models.Metadata.Input.ServiceKey] = item.Service, + Players = item.Players, + ControlAttr = item.Control, + Buttons = item.Buttons, + Coins = item.Coins, + Tilt = item.Tilt, + Service = item.Service, }; return input; } @@ -259,11 +223,11 @@ namespace SabreTools.Serialization.CrossModel { var media = new Data.Models.Metadata.Media { - [Data.Models.Metadata.Media.NameKey] = item.Name, - [Data.Models.Metadata.Media.MD5Key] = item.MD5, - [Data.Models.Metadata.Media.SHA1Key] = item.SHA1, - [Data.Models.Metadata.Media.SHA256Key] = item.SHA256, - [Data.Models.Metadata.Media.SpamSumKey] = item.SpamSum, + Name = item.Name, + MD5 = item.MD5, + SHA1 = item.SHA1, + SHA256 = item.SHA256, + SpamSum = item.SpamSum, }; return media; } @@ -275,11 +239,11 @@ namespace SabreTools.Serialization.CrossModel { var release = new Data.Models.Metadata.Release { - [Data.Models.Metadata.Release.NameKey] = item.Name, - [Data.Models.Metadata.Release.RegionKey] = item.Region, - [Data.Models.Metadata.Release.LanguageKey] = item.Language, - [Data.Models.Metadata.Release.DateKey] = item.Date, - [Data.Models.Metadata.Release.DefaultKey] = item.Default, + Name = item.Name, + Region = item.Region, + Language = item.Language, + Date = item.Date, + Default = item.Default, }; return release; } @@ -291,33 +255,33 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.NameKey] = item.Name, - [Data.Models.Metadata.Rom.SizeKey] = item.Size, - [Data.Models.Metadata.Rom.CRC16Key] = item.CRC16, - [Data.Models.Metadata.Rom.CRCKey] = item.CRC, - [Data.Models.Metadata.Rom.CRC64Key] = item.CRC64, - [Data.Models.Metadata.Rom.MD2Key] = item.MD2, - [Data.Models.Metadata.Rom.MD4Key] = item.MD4, - [Data.Models.Metadata.Rom.MD5Key] = item.MD5, - [Data.Models.Metadata.Rom.RIPEMD128Key] = item.RIPEMD128, - [Data.Models.Metadata.Rom.RIPEMD160Key] = item.RIPEMD160, - [Data.Models.Metadata.Rom.SHA1Key] = item.SHA1, - [Data.Models.Metadata.Rom.SHA256Key] = item.SHA256, - [Data.Models.Metadata.Rom.SHA384Key] = item.SHA384, - [Data.Models.Metadata.Rom.SHA512Key] = item.SHA512, - [Data.Models.Metadata.Rom.SpamSumKey] = item.SpamSum, - [Data.Models.Metadata.Rom.xxHash364Key] = item.xxHash364, - [Data.Models.Metadata.Rom.xxHash3128Key] = item.xxHash3128, - [Data.Models.Metadata.Rom.MergeKey] = item.Merge, - [Data.Models.Metadata.Rom.StatusKey] = item.Status, - [Data.Models.Metadata.Rom.RegionKey] = item.Region, - [Data.Models.Metadata.Rom.FlagsKey] = item.Flags, - [Data.Models.Metadata.Rom.OffsetKey] = item.Offs, - [Data.Models.Metadata.Rom.SerialKey] = item.Serial, - [Data.Models.Metadata.Rom.HeaderKey] = item.Header, - [Data.Models.Metadata.Rom.DateKey] = item.Date, - [Data.Models.Metadata.Rom.InvertedKey] = item.Inverted, - [Data.Models.Metadata.Rom.MIAKey] = item.MIA, + Name = item.Name, + Size = item.Size, + CRC16 = item.CRC16, + CRC32 = item.CRC, + CRC64 = item.CRC64, + MD2 = item.MD2, + MD4 = item.MD4, + MD5 = item.MD5, + RIPEMD128 = item.RIPEMD128, + RIPEMD160 = item.RIPEMD160, + SHA1 = item.SHA1, + SHA256 = item.SHA256, + SHA384 = item.SHA384, + SHA512 = item.SHA512, + SpamSum = item.SpamSum, + xxHash364 = item.xxHash364, + xxHash3128 = item.xxHash3128, + Merge = item.Merge, + Status = item.Status, + Region = item.Region, + Flags = item.Flags, + Offset = item.Offs, + Serial = item.Serial, + Header = item.Header, + Date = item.Date, + Inverted = item.Inverted, + MIA = item.MIA, }; return rom; } @@ -329,7 +293,7 @@ namespace SabreTools.Serialization.CrossModel { var sample = new Data.Models.Metadata.Sample { - [Data.Models.Metadata.Sample.NameKey] = item.Name, + Name = item.Name, }; return sample; } @@ -341,7 +305,7 @@ namespace SabreTools.Serialization.CrossModel { var sound = new Data.Models.Metadata.Sound { - [Data.Models.Metadata.Sound.ChannelsKey] = item.Channels, + Channels = item.Channels, }; return sound; } @@ -353,13 +317,13 @@ namespace SabreTools.Serialization.CrossModel { var video = new Data.Models.Metadata.Video { - [Data.Models.Metadata.Video.ScreenKey] = item.Screen, - [Data.Models.Metadata.Video.OrientationKey] = item.Orientation, - [Data.Models.Metadata.Video.WidthKey] = item.X, - [Data.Models.Metadata.Video.HeightKey] = item.Y, - [Data.Models.Metadata.Video.AspectXKey] = item.AspectX, - [Data.Models.Metadata.Video.AspectYKey] = item.AspectY, - [Data.Models.Metadata.Video.RefreshKey] = item.Freq, + Screen = item.Screen, + Orientation = item.Orientation, + Width = item.X, + Height = item.Y, + AspectX = item.AspectX, + AspectY = item.AspectY, + Refresh = item.Freq, }; return video; } @@ -373,10 +337,7 @@ namespace SabreTools.Serialization.CrossModel var sources = item.Source; if (sources is not null && sources.Length > 0) - { - string[] sourcesCopy = [.. sources]; - infoSource[Data.Models.Metadata.InfoSource.SourceKey] = sourcesCopy; - } + infoSource.Source = [.. sources]; return infoSource; } diff --git a/SabreTools.Serialization.CrossModel/DosCenter.Deserializer.cs b/SabreTools.Serialization.CrossModel/DosCenter.Deserializer.cs index a73db67f..cbc35182 100644 --- a/SabreTools.Serialization.CrossModel/DosCenter.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/DosCenter.Deserializer.cs @@ -13,11 +13,11 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new MetadataFile(); - var header = obj.Read(Data.Models.Metadata.MetadataFile.HeaderKey); + var header = obj.Header; if (header is not null) metadataFile.DosCenter = ConvertHeaderFromInternalModel(header); - var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = obj.Machine; if (machines is not null && machines.Length > 0) metadataFile.Game = Array.ConvertAll(machines, ConvertMachineFromInternalModel); @@ -31,13 +31,13 @@ namespace SabreTools.Serialization.CrossModel { var dosCenter = new Data.Models.DosCenter.DosCenter { - Name = item.ReadString(Data.Models.Metadata.Header.NameKey), - Description = item.ReadString(Data.Models.Metadata.Header.DescriptionKey), - Version = item.ReadString(Data.Models.Metadata.Header.VersionKey), - Date = item.ReadString(Data.Models.Metadata.Header.DateKey), - Author = item.ReadString(Data.Models.Metadata.Header.AuthorKey), - Homepage = item.ReadString(Data.Models.Metadata.Header.HomepageKey), - Comment = item.ReadString(Data.Models.Metadata.Header.CommentKey), + Name = item.Name, + Description = item.Description, + Version = item.Version, + Date = item.Date, + Author = item.Author, + Homepage = item.Homepage, + Comment = item.Comment, }; return dosCenter; } @@ -49,10 +49,10 @@ namespace SabreTools.Serialization.CrossModel { var game = new Game { - Name = item.ReadString(Data.Models.Metadata.Machine.NameKey), + Name = item.Name, }; - var roms = item.Read(Data.Models.Metadata.Machine.RomKey); + var roms = item.Rom; if (roms is not null && roms.Length > 0) game.File = Array.ConvertAll(roms, ConvertFromInternalModel); @@ -66,11 +66,11 @@ namespace SabreTools.Serialization.CrossModel { var file = new File { - Name = item.ReadString(Data.Models.Metadata.Rom.NameKey), - Size = item.ReadString(Data.Models.Metadata.Rom.SizeKey), - CRC = item.ReadString(Data.Models.Metadata.Rom.CRCKey), - SHA1 = item.ReadString(Data.Models.Metadata.Rom.SHA1Key), - Date = item.ReadString(Data.Models.Metadata.Rom.DateKey), + Name = item.Name, + Size = item.Size, + CRC = item.CRC32, + SHA1 = item.SHA1, + Date = item.Date, }; return file; } diff --git a/SabreTools.Serialization.CrossModel/DosCenter.Serializer.cs b/SabreTools.Serialization.CrossModel/DosCenter.Serializer.cs index c800e016..fcf1d643 100644 --- a/SabreTools.Serialization.CrossModel/DosCenter.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/DosCenter.Serializer.cs @@ -14,13 +14,10 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new Data.Models.Metadata.MetadataFile(); if (obj?.DosCenter is not null) - metadataFile[Data.Models.Metadata.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(obj.DosCenter); + metadataFile.Header = ConvertHeaderToInternalModel(obj.DosCenter); if (obj?.Game is not null && obj.Game.Length > 0) - { - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] - = Array.ConvertAll(obj.Game, ConvertMachineToInternalModel); - } + metadataFile.Machine = Array.ConvertAll(obj.Game, ConvertMachineToInternalModel); return metadataFile; } @@ -32,13 +29,13 @@ namespace SabreTools.Serialization.CrossModel { var header = new Data.Models.Metadata.Header { - [Data.Models.Metadata.Header.NameKey] = item.Name, - [Data.Models.Metadata.Header.DescriptionKey] = item.Description, - [Data.Models.Metadata.Header.VersionKey] = item.Version, - [Data.Models.Metadata.Header.DateKey] = item.Date, - [Data.Models.Metadata.Header.AuthorKey] = item.Author, - [Data.Models.Metadata.Header.HomepageKey] = item.Homepage, - [Data.Models.Metadata.Header.CommentKey] = item.Comment, + Name = item.Name, + Description = item.Description, + Version = item.Version, + Date = item.Date, + Author = item.Author, + Homepage = item.Homepage, + Comment = item.Comment, }; return header; } @@ -50,14 +47,11 @@ namespace SabreTools.Serialization.CrossModel { var machine = new Data.Models.Metadata.Machine { - [Data.Models.Metadata.Machine.NameKey] = item.Name, + Name = item.Name, }; if (item.File is not null && item.File.Length > 0) - { - machine[Data.Models.Metadata.Machine.RomKey] - = Array.ConvertAll(item.File, ConvertToInternalModel); - } + machine.Rom = Array.ConvertAll(item.File, ConvertToInternalModel); return machine; } @@ -69,11 +63,11 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.NameKey] = item.Name, - [Data.Models.Metadata.Rom.SizeKey] = item.Size, - [Data.Models.Metadata.Rom.CRCKey] = item.CRC, - [Data.Models.Metadata.Rom.SHA1Key] = item.SHA1, - [Data.Models.Metadata.Rom.DateKey] = item.Date, + Name = item.Name, + Size = item.Size, + CRC32 = item.CRC, + SHA1 = item.SHA1, + Date = item.Date, }; return rom; } diff --git a/SabreTools.Serialization.CrossModel/EverdriveSMDB.Deserializer.cs b/SabreTools.Serialization.CrossModel/EverdriveSMDB.Deserializer.cs index 44e097f9..65c882b9 100644 --- a/SabreTools.Serialization.CrossModel/EverdriveSMDB.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/EverdriveSMDB.Deserializer.cs @@ -14,7 +14,7 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new MetadataFile(); - var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = obj.Machine; var items = new List(); foreach (var machine in machines ?? []) { @@ -31,7 +31,7 @@ namespace SabreTools.Serialization.CrossModel /// private static Row[] ConvertMachineFromInternalModel(Data.Models.Metadata.Machine item) { - var roms = item.Read(Data.Models.Metadata.Machine.RomKey); + var roms = item.Rom; if (roms is null || roms.Length == 0) return []; @@ -45,12 +45,12 @@ namespace SabreTools.Serialization.CrossModel { var row = new Row { - SHA256 = item.ReadString(Data.Models.Metadata.Rom.SHA256Key), - Name = item.ReadString(Data.Models.Metadata.Rom.NameKey), - SHA1 = item.ReadString(Data.Models.Metadata.Rom.SHA1Key), - MD5 = item.ReadString(Data.Models.Metadata.Rom.MD5Key), - CRC32 = item.ReadString(Data.Models.Metadata.Rom.CRCKey), - Size = item.ReadString(Data.Models.Metadata.Rom.SizeKey), + SHA256 = item.SHA256, + Name = item.Name, + SHA1 = item.SHA1, + MD5 = item.MD5, + CRC32 = item.CRC32, + Size = item.Size, }; return row; } diff --git a/SabreTools.Serialization.CrossModel/EverdriveSMDB.Serializer.cs b/SabreTools.Serialization.CrossModel/EverdriveSMDB.Serializer.cs index dccf6ccd..1324bd1f 100644 --- a/SabreTools.Serialization.CrossModel/EverdriveSMDB.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/EverdriveSMDB.Serializer.cs @@ -13,14 +13,11 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new Data.Models.Metadata.MetadataFile { - [Data.Models.Metadata.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(), + Header = ConvertHeaderToInternalModel(), }; if (obj?.Row is not null && obj.Row.Length > 0) - { - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] - = Array.ConvertAll(obj.Row, ConvertMachineToInternalModel); - } + metadataFile.Machine = Array.ConvertAll(obj.Row, ConvertMachineToInternalModel); return metadataFile; } @@ -32,7 +29,7 @@ namespace SabreTools.Serialization.CrossModel { var header = new Data.Models.Metadata.Header { - [Data.Models.Metadata.Header.NameKey] = "Everdrive SMDB", + Name = "Everdrive SMDB", }; return header; } @@ -44,7 +41,7 @@ namespace SabreTools.Serialization.CrossModel { var machine = new Data.Models.Metadata.Machine { - [Data.Models.Metadata.Machine.RomKey] = new Data.Models.Metadata.Rom[] { ConvertToInternalModel(item) }, + Rom = new Data.Models.Metadata.Rom[] { ConvertToInternalModel(item) }, }; return machine; } @@ -56,12 +53,12 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.SHA256Key] = item.SHA256, - [Data.Models.Metadata.Rom.NameKey] = item.Name, - [Data.Models.Metadata.Rom.SHA1Key] = item.SHA1, - [Data.Models.Metadata.Rom.MD5Key] = item.MD5, - [Data.Models.Metadata.Rom.CRCKey] = item.CRC32, - [Data.Models.Metadata.Rom.SizeKey] = item.Size, + SHA256 = item.SHA256, + Name = item.Name, + SHA1 = item.SHA1, + MD5 = item.MD5, + CRC32 = item.CRC32, + Size = item.Size, }; return rom; } diff --git a/SabreTools.Serialization.CrossModel/Hashfile.Deserializer.cs b/SabreTools.Serialization.CrossModel/Hashfile.Deserializer.cs index 07f63d7c..d2ddd494 100644 --- a/SabreTools.Serialization.CrossModel/Hashfile.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/Hashfile.Deserializer.cs @@ -18,7 +18,7 @@ namespace SabreTools.Serialization.CrossModel if (obj is null) return null; - var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = obj.Machine; if (machines is null || machines.Length == 0) return null; @@ -96,7 +96,7 @@ namespace SabreTools.Serialization.CrossModel /// private static Data.Models.Hashfile.Hashfile ConvertMachineFromInternalModel(Data.Models.Metadata.Machine item, HashType hash) { - var roms = item.Read(Data.Models.Metadata.Machine.RomKey); + var roms = item.Rom; if (roms is null) return new Data.Models.Hashfile.Hashfile(); @@ -145,8 +145,8 @@ namespace SabreTools.Serialization.CrossModel { var md2 = new MD2 { - Hash = item.ReadString(Data.Models.Metadata.Rom.MD2Key), - File = item.ReadString(Data.Models.Metadata.Rom.NameKey), + Hash = item.MD2, + File = item.Name, }; return md2; } @@ -158,8 +158,8 @@ namespace SabreTools.Serialization.CrossModel { var md4 = new MD4 { - Hash = item.ReadString(Data.Models.Metadata.Rom.MD4Key), - File = item.ReadString(Data.Models.Metadata.Rom.NameKey), + Hash = item.MD4, + File = item.Name, }; return md4; } @@ -171,8 +171,8 @@ namespace SabreTools.Serialization.CrossModel { var md5 = new MD5 { - Hash = item.ReadString(Data.Models.Metadata.Rom.MD5Key), - File = item.ReadString(Data.Models.Metadata.Rom.NameKey), + Hash = item.MD5, + File = item.Name, }; return md5; } @@ -184,8 +184,8 @@ namespace SabreTools.Serialization.CrossModel { var ripemd128 = new RIPEMD128 { - Hash = item.ReadString(Data.Models.Metadata.Rom.RIPEMD128Key), - File = item.ReadString(Data.Models.Metadata.Rom.NameKey), + Hash = item.RIPEMD128, + File = item.Name, }; return ripemd128; } @@ -197,8 +197,8 @@ namespace SabreTools.Serialization.CrossModel { var ripemd160 = new RIPEMD160 { - Hash = item.ReadString(Data.Models.Metadata.Rom.RIPEMD160Key), - File = item.ReadString(Data.Models.Metadata.Rom.NameKey), + Hash = item.RIPEMD160, + File = item.Name, }; return ripemd160; } @@ -210,8 +210,8 @@ namespace SabreTools.Serialization.CrossModel { var sfv = new SFV { - File = item.ReadString(Data.Models.Metadata.Rom.NameKey), - Hash = item.ReadString(Data.Models.Metadata.Rom.CRCKey), + File = item.Name, + Hash = item.CRC32, }; return sfv; } @@ -223,8 +223,8 @@ namespace SabreTools.Serialization.CrossModel { var sha1 = new SHA1 { - Hash = item.ReadString(Data.Models.Metadata.Rom.SHA1Key), - File = item.ReadString(Data.Models.Metadata.Rom.NameKey), + Hash = item.SHA1, + File = item.Name, }; return sha1; } @@ -236,8 +236,8 @@ namespace SabreTools.Serialization.CrossModel { var sha256 = new SHA256 { - Hash = item.ReadString(Data.Models.Metadata.Rom.SHA256Key), - File = item.ReadString(Data.Models.Metadata.Rom.NameKey), + Hash = item.SHA256, + File = item.Name, }; return sha256; } @@ -249,8 +249,8 @@ namespace SabreTools.Serialization.CrossModel { var sha384 = new SHA384 { - Hash = item.ReadString(Data.Models.Metadata.Rom.SHA384Key), - File = item.ReadString(Data.Models.Metadata.Rom.NameKey), + Hash = item.SHA384, + File = item.Name, }; return sha384; } @@ -262,8 +262,8 @@ namespace SabreTools.Serialization.CrossModel { var sha512 = new SHA512 { - Hash = item.ReadString(Data.Models.Metadata.Rom.SHA512Key), - File = item.ReadString(Data.Models.Metadata.Rom.NameKey), + Hash = item.SHA512, + File = item.Name, }; return sha512; } @@ -275,8 +275,8 @@ namespace SabreTools.Serialization.CrossModel { var spamsum = new SpamSum { - Hash = item.ReadString(Data.Models.Metadata.Rom.SpamSumKey), - File = item.ReadString(Data.Models.Metadata.Rom.NameKey), + Hash = item.SpamSum, + File = item.Name, }; return spamsum; } diff --git a/SabreTools.Serialization.CrossModel/Hashfile.Serializer.cs b/SabreTools.Serialization.CrossModel/Hashfile.Serializer.cs index 4d79740a..0601c170 100644 --- a/SabreTools.Serialization.CrossModel/Hashfile.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/Hashfile.Serializer.cs @@ -13,11 +13,11 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new Data.Models.Metadata.MetadataFile { - [Data.Models.Metadata.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(), + Header = ConvertHeaderToInternalModel(), }; var machine = ConvertMachineToInternalModel(obj); - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] = new Data.Models.Metadata.Machine[] { machine }; + metadataFile.Machine = new Data.Models.Metadata.Machine[] { machine }; return metadataFile; } @@ -29,7 +29,7 @@ namespace SabreTools.Serialization.CrossModel { var header = new Data.Models.Metadata.Header { - [Data.Models.Metadata.Header.NameKey] = "Hashfile", + Name = "Hashfile", }; return header; } @@ -42,27 +42,27 @@ namespace SabreTools.Serialization.CrossModel var machine = new Data.Models.Metadata.Machine(); if (item.SFV is not null && item.SFV.Length > 0) - machine[Data.Models.Metadata.Machine.RomKey] = Array.ConvertAll(item.SFV, ConvertToInternalModel); + machine.Rom = Array.ConvertAll(item.SFV, ConvertToInternalModel); else if (item.MD2 is not null && item.MD2.Length > 0) - machine[Data.Models.Metadata.Machine.RomKey] = Array.ConvertAll(item.MD2, ConvertToInternalModel); + machine.Rom = Array.ConvertAll(item.MD2, ConvertToInternalModel); else if (item.MD4 is not null && item.MD4.Length > 0) - machine[Data.Models.Metadata.Machine.RomKey] = Array.ConvertAll(item.MD4, ConvertToInternalModel); + machine.Rom = Array.ConvertAll(item.MD4, ConvertToInternalModel); else if (item.MD5 is not null && item.MD5.Length > 0) - machine[Data.Models.Metadata.Machine.RomKey] = Array.ConvertAll(item.MD5, ConvertToInternalModel); + machine.Rom = Array.ConvertAll(item.MD5, ConvertToInternalModel); else if (item.RIPEMD128 is not null && item.RIPEMD128.Length > 0) - machine[Data.Models.Metadata.Machine.RomKey] = Array.ConvertAll(item.RIPEMD128, ConvertToInternalModel); + machine.Rom = Array.ConvertAll(item.RIPEMD128, ConvertToInternalModel); else if (item.RIPEMD160 is not null && item.RIPEMD160.Length > 0) - machine[Data.Models.Metadata.Machine.RomKey] = Array.ConvertAll(item.RIPEMD160, ConvertToInternalModel); + machine.Rom = Array.ConvertAll(item.RIPEMD160, ConvertToInternalModel); else if (item.SHA1 is not null && item.SHA1.Length > 0) - machine[Data.Models.Metadata.Machine.RomKey] = Array.ConvertAll(item.SHA1, ConvertToInternalModel); + machine.Rom = Array.ConvertAll(item.SHA1, ConvertToInternalModel); else if (item.SHA256 is not null && item.SHA256.Length > 0) - machine[Data.Models.Metadata.Machine.RomKey] = Array.ConvertAll(item.SHA256, ConvertToInternalModel); + machine.Rom = Array.ConvertAll(item.SHA256, ConvertToInternalModel); else if (item.SHA384 is not null && item.SHA384.Length > 0) - machine[Data.Models.Metadata.Machine.RomKey] = Array.ConvertAll(item.SHA384, ConvertToInternalModel); + machine.Rom = Array.ConvertAll(item.SHA384, ConvertToInternalModel); else if (item.SHA512 is not null && item.SHA512.Length > 0) - machine[Data.Models.Metadata.Machine.RomKey] = Array.ConvertAll(item.SHA512, ConvertToInternalModel); + machine.Rom = Array.ConvertAll(item.SHA512, ConvertToInternalModel); else if (item.SpamSum is not null && item.SpamSum.Length > 0) - machine[Data.Models.Metadata.Machine.RomKey] = Array.ConvertAll(item.SpamSum, ConvertToInternalModel); + machine.Rom = Array.ConvertAll(item.SpamSum, ConvertToInternalModel); return machine; } @@ -74,8 +74,8 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.MD2Key] = item.Hash, - [Data.Models.Metadata.Rom.NameKey] = item.File, + MD2 = item.Hash, + Name = item.File, }; return rom; } @@ -87,8 +87,8 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.MD4Key] = item.Hash, - [Data.Models.Metadata.Rom.NameKey] = item.File, + MD4 = item.Hash, + Name = item.File, }; return rom; } @@ -100,8 +100,8 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.MD5Key] = item.Hash, - [Data.Models.Metadata.Rom.NameKey] = item.File, + MD5 = item.Hash, + Name = item.File, }; return rom; } @@ -113,8 +113,8 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.RIPEMD128Key] = item.Hash, - [Data.Models.Metadata.Rom.NameKey] = item.File, + RIPEMD128 = item.Hash, + Name = item.File, }; return rom; } @@ -126,8 +126,8 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.RIPEMD160Key] = item.Hash, - [Data.Models.Metadata.Rom.NameKey] = item.File, + RIPEMD160 = item.Hash, + Name = item.File, }; return rom; } @@ -139,8 +139,8 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.NameKey] = item.File, - [Data.Models.Metadata.Rom.CRCKey] = item.Hash, + Name = item.File, + CRC32 = item.Hash, }; return rom; } @@ -152,8 +152,8 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.SHA1Key] = item.Hash, - [Data.Models.Metadata.Rom.NameKey] = item.File, + SHA1 = item.Hash, + Name = item.File, }; return rom; } @@ -165,8 +165,8 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.SHA256Key] = item.Hash, - [Data.Models.Metadata.Rom.NameKey] = item.File, + SHA256 = item.Hash, + Name = item.File, }; return rom; } @@ -178,8 +178,8 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.SHA384Key] = item.Hash, - [Data.Models.Metadata.Rom.NameKey] = item.File, + SHA384 = item.Hash, + Name = item.File, }; return rom; } @@ -191,8 +191,8 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.SHA512Key] = item.Hash, - [Data.Models.Metadata.Rom.NameKey] = item.File, + SHA512 = item.Hash, + Name = item.File, }; return rom; } @@ -204,8 +204,8 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.SpamSumKey] = item.Hash, - [Data.Models.Metadata.Rom.NameKey] = item.File, + SpamSum = item.Hash, + Name = item.File, }; return rom; } diff --git a/SabreTools.Serialization.CrossModel/Listrom.Deserializer.cs b/SabreTools.Serialization.CrossModel/Listrom.Deserializer.cs index 0e0bb551..8e9eb039 100644 --- a/SabreTools.Serialization.CrossModel/Listrom.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/Listrom.Deserializer.cs @@ -14,7 +14,7 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new MetadataFile(); - var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = obj.Machine; if (machines is not null && machines.Length > 0) metadataFile.Set = Array.ConvertAll(machines, ConvertMachineFromInternalModel); @@ -27,20 +27,20 @@ namespace SabreTools.Serialization.CrossModel private static Set ConvertMachineFromInternalModel(Data.Models.Metadata.Machine item) { var set = new Set(); - if (item.ReadString(Data.Models.Metadata.Machine.IsDeviceKey) == "yes") - set.Device = item.ReadString(Data.Models.Metadata.Machine.NameKey); + if (item.IsDevice == true) + set.Device = item.Name; else - set.Driver = item.ReadString(Data.Models.Metadata.Machine.NameKey); + set.Driver = item.Name; var rowItems = new List(); - var roms = item.Read(Data.Models.Metadata.Machine.RomKey); + var roms = item.Rom; if (roms is not null) { rowItems.AddRange(Array.ConvertAll(roms, ConvertFromInternalModel)); } - var disks = item.Read(Data.Models.Metadata.Machine.DiskKey); + var disks = item.Disk; if (disks is not null) rowItems.AddRange(Array.ConvertAll(disks, ConvertFromInternalModel)); @@ -55,14 +55,14 @@ namespace SabreTools.Serialization.CrossModel { var row = new Row { - Name = item.ReadString(Data.Models.Metadata.Disk.NameKey), - MD5 = item.ReadString(Data.Models.Metadata.Disk.MD5Key), - SHA1 = item.ReadString(Data.Models.Metadata.Disk.SHA1Key), + Name = item.Name, + MD5 = item.MD5, + SHA1 = item.SHA1, }; - if ((item[Data.Models.Metadata.Disk.StatusKey] as string) == "nodump") + if (item.Status == Data.Models.Metadata.ItemStatus.Nodump) row.NoGoodDumpKnown = true; - else if ((item[Data.Models.Metadata.Disk.StatusKey] as string) == "baddump") + else if (item.Status == Data.Models.Metadata.ItemStatus.BadDump) row.Bad = true; return row; @@ -75,15 +75,15 @@ namespace SabreTools.Serialization.CrossModel { var row = new Row { - Name = item.ReadString(Data.Models.Metadata.Rom.NameKey), - Size = item.ReadString(Data.Models.Metadata.Rom.SizeKey), - CRC = item.ReadString(Data.Models.Metadata.Rom.CRCKey), - SHA1 = item.ReadString(Data.Models.Metadata.Rom.SHA1Key), + Name = item.Name, + Size = item.Size, + CRC = item.CRC32, + SHA1 = item.SHA1, }; - if ((item[Data.Models.Metadata.Rom.StatusKey] as string) == "nodump") + if (item.Status == Data.Models.Metadata.ItemStatus.Nodump) row.NoGoodDumpKnown = true; - else if ((item[Data.Models.Metadata.Rom.StatusKey] as string) == "baddump") + else if (item.Status == Data.Models.Metadata.ItemStatus.BadDump) row.Bad = true; return row; diff --git a/SabreTools.Serialization.CrossModel/Listrom.Serializer.cs b/SabreTools.Serialization.CrossModel/Listrom.Serializer.cs index bf02b157..2dea8f1e 100644 --- a/SabreTools.Serialization.CrossModel/Listrom.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/Listrom.Serializer.cs @@ -14,14 +14,11 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new Data.Models.Metadata.MetadataFile { - [Data.Models.Metadata.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(), + Header = ConvertHeaderToInternalModel(), }; if (obj?.Set is not null && obj.Set.Length > 0) - { - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] - = Array.ConvertAll(obj.Set, ConvertMachineToInternalModel); - } + metadataFile.Machine = Array.ConvertAll(obj.Set, ConvertMachineToInternalModel); return metadataFile; } @@ -33,7 +30,7 @@ namespace SabreTools.Serialization.CrossModel { var header = new Data.Models.Metadata.Header { - [Data.Models.Metadata.Header.NameKey] = "MAME Listrom", + Name = "MAME Listrom", }; return header; } @@ -46,12 +43,12 @@ namespace SabreTools.Serialization.CrossModel var machine = new Data.Models.Metadata.Machine(); if (!string.IsNullOrEmpty(item.Device)) { - machine[Data.Models.Metadata.Machine.NameKey] = item.Device; - machine[Data.Models.Metadata.Machine.IsDeviceKey] = "yes"; + machine.Name = item.Device; + machine.IsDevice = true; } else { - machine[Data.Models.Metadata.Machine.NameKey] = item.Driver; + machine.Name = item.Driver; } if (item.Row is not null && item.Row.Length > 0) @@ -67,8 +64,8 @@ namespace SabreTools.Serialization.CrossModel roms.Add(rom); } - machine[Data.Models.Metadata.Machine.DiskKey] = disks.ToArray(); - machine[Data.Models.Metadata.Machine.RomKey] = roms.ToArray(); + machine.Disk = [.. disks]; + machine.Rom = [.. roms]; } return machine; @@ -83,16 +80,15 @@ namespace SabreTools.Serialization.CrossModel { var disk = new Data.Models.Metadata.Disk { - [Data.Models.Metadata.DatItem.TypeKey] = "disk", - [Data.Models.Metadata.Disk.NameKey] = item.Name, - [Data.Models.Metadata.Disk.MD5Key] = item.MD5, - [Data.Models.Metadata.Disk.SHA1Key] = item.SHA1, + Name = item.Name, + MD5 = item.MD5, + SHA1 = item.SHA1, }; if (item.NoGoodDumpKnown) - disk[Data.Models.Metadata.Disk.StatusKey] = "nodump"; + disk.Status = Data.Models.Metadata.ItemStatus.Nodump; else if (item.Bad) - disk[Data.Models.Metadata.Disk.StatusKey] = "baddump"; + disk.Status = Data.Models.Metadata.ItemStatus.BadDump; return disk; } @@ -100,17 +96,16 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.DatItem.TypeKey] = "rom", - [Data.Models.Metadata.Rom.NameKey] = item.Name, - [Data.Models.Metadata.Rom.SizeKey] = item.Size, - [Data.Models.Metadata.Rom.CRCKey] = item.CRC, - [Data.Models.Metadata.Rom.SHA1Key] = item.SHA1, + Name = item.Name, + Size = item.Size, + CRC32 = item.CRC, + SHA1 = item.SHA1, }; if (item.NoGoodDumpKnown) - rom[Data.Models.Metadata.Rom.StatusKey] = "nodump"; + rom.Status = Data.Models.Metadata.ItemStatus.Nodump; else if (item.Bad) - rom[Data.Models.Metadata.Rom.StatusKey] = "baddump"; + rom.Status = Data.Models.Metadata.ItemStatus.BadDump; return rom; } diff --git a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs index af9978f6..f581bba5 100644 --- a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs @@ -11,10 +11,10 @@ namespace SabreTools.Serialization.CrossModel if (obj is null) return null; - var header = obj.Read(Data.Models.Metadata.MetadataFile.HeaderKey); + var header = obj.Header; var mame = header is not null ? ConvertMameFromInternalModel(header) : new Mame(); - var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = obj.Machine; if (machines is not null && machines.Length > 0) mame.Game = Array.ConvertAll(machines, ConvertMachineFromInternalModel); @@ -28,9 +28,9 @@ namespace SabreTools.Serialization.CrossModel { var mame = new Mame { - Build = item.ReadString(Data.Models.Metadata.Header.BuildKey), - Debug = item.ReadString(Data.Models.Metadata.Header.DebugKey), - MameConfig = item.ReadString(Data.Models.Metadata.Header.MameConfigKey), + Build = item.Build, + Debug = item.Debug, + MameConfig = item.MameConfig, }; return mame; @@ -43,98 +43,98 @@ namespace SabreTools.Serialization.CrossModel { var machine = new Machine { - Name = item.ReadString(Data.Models.Metadata.Machine.NameKey), - SourceFile = item.ReadString(Data.Models.Metadata.Machine.SourceFileKey), - IsBios = item.ReadString(Data.Models.Metadata.Machine.IsBiosKey), - IsDevice = item.ReadString(Data.Models.Metadata.Machine.IsDeviceKey), - IsMechanical = item.ReadString(Data.Models.Metadata.Machine.IsMechanicalKey), - Runnable = item.ReadString(Data.Models.Metadata.Machine.RunnableKey), - CloneOf = item.ReadString(Data.Models.Metadata.Machine.CloneOfKey), - RomOf = item.ReadString(Data.Models.Metadata.Machine.RomOfKey), - SampleOf = item.ReadString(Data.Models.Metadata.Machine.SampleOfKey), - Description = item.ReadString(Data.Models.Metadata.Machine.DescriptionKey), - Year = item.ReadString(Data.Models.Metadata.Machine.YearKey), - Manufacturer = item.ReadString(Data.Models.Metadata.Machine.ManufacturerKey), - History = item.ReadString(Data.Models.Metadata.Machine.HistoryKey), + Name = item.Name, + SourceFile = item.SourceFile, + IsBios = item.IsBios, + IsDevice = item.IsDevice, + IsMechanical = item.IsMechanical, + Runnable = item.Runnable, + CloneOf = item.CloneOf, + RomOf = item.RomOf, + SampleOf = item.SampleOf, + Description = item.Description, + Year = item.Year, + Manufacturer = item.Manufacturer, + History = item.History, }; - var biosSets = item.Read(Data.Models.Metadata.Machine.BiosSetKey); + var biosSets = item.BiosSet; if (biosSets is not null && biosSets.Length > 0) machine.BiosSet = Array.ConvertAll(biosSets, ConvertFromInternalModel); - var roms = item.Read(Data.Models.Metadata.Machine.RomKey); + var roms = item.Rom; if (roms is not null && roms.Length > 0) machine.Rom = Array.ConvertAll(roms, ConvertFromInternalModel); - var disks = item.Read(Data.Models.Metadata.Machine.DiskKey); + var disks = item.Disk; if (disks is not null && disks.Length > 0) machine.Disk = Array.ConvertAll(disks, ConvertFromInternalModel); - var deviceRefs = item.Read(Data.Models.Metadata.Machine.DeviceRefKey); + var deviceRefs = item.DeviceRef; if (deviceRefs is not null && deviceRefs.Length > 0) machine.DeviceRef = Array.ConvertAll(deviceRefs, ConvertFromInternalModel); - var samples = item.Read(Data.Models.Metadata.Machine.SampleKey); + var samples = item.Sample; if (samples is not null && samples.Length > 0) machine.Sample = Array.ConvertAll(samples, ConvertFromInternalModel); - var chips = item.Read(Data.Models.Metadata.Machine.ChipKey); + var chips = item.Chip; if (chips is not null && chips.Length > 0) machine.Chip = Array.ConvertAll(chips, ConvertFromInternalModel); - var displays = item.Read(Data.Models.Metadata.Machine.DisplayKey); + var displays = item.Display; if (displays is not null && displays.Length > 0) machine.Display = Array.ConvertAll(displays, ConvertFromInternalModel); - var videos = item.Read(Data.Models.Metadata.Machine.VideoKey); + var videos = item.Video; if (videos is not null && videos.Length > 0) machine.Video = Array.ConvertAll(videos, ConvertFromInternalModel); - var sound = item.Read(Data.Models.Metadata.Machine.SoundKey); + var sound = item.Sound; if (sound is not null) machine.Sound = ConvertFromInternalModel(sound); - var input = item.Read(Data.Models.Metadata.Machine.InputKey); + var input = item.Input; if (input is not null) machine.Input = ConvertFromInternalModel(input); - var dipSwitches = item.Read(Data.Models.Metadata.Machine.DipSwitchKey); + var dipSwitches = item.DipSwitch; if (dipSwitches is not null && dipSwitches.Length > 0) machine.DipSwitch = Array.ConvertAll(dipSwitches, ConvertFromInternalModel); - var configurations = item.Read(Data.Models.Metadata.Machine.ConfigurationKey); + var configurations = item.Configuration; if (configurations is not null && configurations.Length > 0) machine.Configuration = Array.ConvertAll(configurations, ConvertFromInternalModel); - var ports = item.Read(Data.Models.Metadata.Machine.PortKey); + var ports = item.Port; if (ports is not null && ports.Length > 0) machine.Port = Array.ConvertAll(ports, ConvertFromInternalModel); - var adjusters = item.Read(Data.Models.Metadata.Machine.AdjusterKey); + var adjusters = item.Adjuster; if (adjusters is not null && adjusters.Length > 0) machine.Adjuster = Array.ConvertAll(adjusters, ConvertFromInternalModel); - var driver = item.Read(Data.Models.Metadata.Machine.DriverKey); + var driver = item.Driver; if (driver is not null) machine.Driver = ConvertFromInternalModel(driver); - var features = item.Read(Data.Models.Metadata.Machine.FeatureKey); + var features = item.Feature; if (features is not null && features.Length > 0) machine.Feature = Array.ConvertAll(features, ConvertFromInternalModel); - var devices = item.Read(Data.Models.Metadata.Machine.DeviceKey); + var devices = item.Device; if (devices is not null && devices.Length > 0) machine.Device = Array.ConvertAll(devices, ConvertFromInternalModel); - var slots = item.Read(Data.Models.Metadata.Machine.SlotKey); + var slots = item.Slot; if (slots is not null && slots.Length > 0) machine.Slot = Array.ConvertAll(slots, ConvertFromInternalModel); - var softwareLists = item.Read(Data.Models.Metadata.Machine.SoftwareListKey); + var softwareLists = item.SoftwareList; if (softwareLists is not null && softwareLists.Length > 0) machine.SoftwareList = Array.ConvertAll(softwareLists, ConvertFromInternalModel); - var ramOptions = item.Read(Data.Models.Metadata.Machine.RamOptionKey); + var ramOptions = item.RamOption; if (ramOptions is not null && ramOptions.Length > 0) machine.RamOption = Array.ConvertAll(ramOptions, ConvertFromInternalModel); @@ -148,11 +148,11 @@ namespace SabreTools.Serialization.CrossModel { var adjuster = new Adjuster { - Name = item.ReadString(Data.Models.Metadata.Adjuster.NameKey), - Default = item.ReadString(Data.Models.Metadata.Adjuster.DefaultKey), + Name = item.Name, + Default = item.Default, }; - var condition = item.Read(Data.Models.Metadata.Adjuster.ConditionKey); + var condition = item.Condition; if (condition is not null) adjuster.Condition = ConvertFromInternalModel(condition); @@ -166,7 +166,7 @@ namespace SabreTools.Serialization.CrossModel { var analog = new Analog { - Mask = item.ReadString(Data.Models.Metadata.Analog.MaskKey), + Mask = item.Mask, }; return analog; } @@ -178,9 +178,9 @@ namespace SabreTools.Serialization.CrossModel { var biosset = new BiosSet { - Name = item.ReadString(Data.Models.Metadata.BiosSet.NameKey), - Description = item.ReadString(Data.Models.Metadata.BiosSet.DescriptionKey), - Default = item.ReadString(Data.Models.Metadata.BiosSet.DefaultKey), + Name = item.Name, + Description = item.Description, + Default = item.Default, }; return biosset; } @@ -192,11 +192,11 @@ namespace SabreTools.Serialization.CrossModel { var chip = new Chip { - Name = item.ReadString(Data.Models.Metadata.Chip.NameKey), - Tag = item.ReadString(Data.Models.Metadata.Chip.TagKey), - Type = item.ReadString(Data.Models.Metadata.Chip.ChipTypeKey), - SoundOnly = item.ReadString(Data.Models.Metadata.Chip.SoundOnlyKey), - Clock = item.ReadString(Data.Models.Metadata.Chip.ClockKey), + Name = item.Name, + Tag = item.Tag, + Type = item.ChipType, + SoundOnly = item.SoundOnly, + Clock = item.Clock, }; return chip; } @@ -208,10 +208,10 @@ namespace SabreTools.Serialization.CrossModel { var condition = new Condition { - Tag = item.ReadString(Data.Models.Metadata.Condition.TagKey), - Mask = item.ReadString(Data.Models.Metadata.Condition.MaskKey), - Relation = item.ReadString(Data.Models.Metadata.Condition.RelationKey), - Value = item.ReadString(Data.Models.Metadata.Condition.ValueKey), + Tag = item.Tag, + Mask = item.Mask, + Relation = item.Relation, + Value = item.Value, }; return condition; } @@ -223,20 +223,20 @@ namespace SabreTools.Serialization.CrossModel { var configuration = new Configuration { - Name = item.ReadString(Data.Models.Metadata.Configuration.NameKey), - Tag = item.ReadString(Data.Models.Metadata.Configuration.TagKey), - Mask = item.ReadString(Data.Models.Metadata.Configuration.MaskKey), + Name = item.Name, + Tag = item.Tag, + Mask = item.Mask, }; - var condition = item.Read(Data.Models.Metadata.Configuration.ConditionKey); + var condition = item.Condition; if (condition is not null) configuration.Condition = ConvertFromInternalModel(condition); - var confLocations = item.Read(Data.Models.Metadata.Configuration.ConfLocationKey); + var confLocations = item.ConfLocation; if (confLocations is not null && confLocations.Length > 0) configuration.ConfLocation = Array.ConvertAll(confLocations, ConvertFromInternalModel); - var confSettings = item.Read(Data.Models.Metadata.Configuration.ConfSettingKey); + var confSettings = item.ConfSetting; if (confSettings is not null && confSettings.Length > 0) configuration.ConfSetting = Array.ConvertAll(confSettings, ConvertFromInternalModel); @@ -250,9 +250,9 @@ namespace SabreTools.Serialization.CrossModel { var confLocation = new ConfLocation { - Name = item.ReadString(Data.Models.Metadata.ConfLocation.NameKey), - Number = item.ReadString(Data.Models.Metadata.ConfLocation.NumberKey), - Inverted = item.ReadString(Data.Models.Metadata.ConfLocation.InvertedKey), + Name = item.Name, + Number = item.Number, + Inverted = item.Inverted, }; return confLocation; } @@ -264,12 +264,12 @@ namespace SabreTools.Serialization.CrossModel { var confSetting = new ConfSetting { - Name = item.ReadString(Data.Models.Metadata.ConfSetting.NameKey), - Value = item.ReadString(Data.Models.Metadata.ConfSetting.ValueKey), - Default = item.ReadString(Data.Models.Metadata.ConfSetting.DefaultKey), + Name = item.Name, + Value = item.Value, + Default = item.Default, }; - var condition = item.Read(Data.Models.Metadata.ConfSetting.ConditionKey); + var condition = item.Condition; if (condition is not null) confSetting.Condition = ConvertFromInternalModel(condition); @@ -283,18 +283,18 @@ namespace SabreTools.Serialization.CrossModel { var control = new Control { - Type = item.ReadString(Data.Models.Metadata.Control.ControlTypeKey), - Player = item.ReadString(Data.Models.Metadata.Control.PlayerKey), - Buttons = item.ReadString(Data.Models.Metadata.Control.ButtonsKey), - ReqButtons = item.ReadString(Data.Models.Metadata.Control.ReqButtonsKey), - Minimum = item.ReadString(Data.Models.Metadata.Control.MinimumKey), - Maximum = item.ReadString(Data.Models.Metadata.Control.MaximumKey), - Sensitivity = item.ReadString(Data.Models.Metadata.Control.SensitivityKey), - KeyDelta = item.ReadString(Data.Models.Metadata.Control.KeyDeltaKey), - Reverse = item.ReadString(Data.Models.Metadata.Control.ReverseKey), - Ways = item.ReadString(Data.Models.Metadata.Control.WaysKey), - Ways2 = item.ReadString(Data.Models.Metadata.Control.Ways2Key), - Ways3 = item.ReadString(Data.Models.Metadata.Control.Ways3Key), + Type = item.ControlType, + Player = item.Player, + Buttons = item.Buttons, + ReqButtons = item.ReqButtons, + Minimum = item.Minimum, + Maximum = item.Maximum, + Sensitivity = item.Sensitivity, + KeyDelta = item.KeyDelta, + Reverse = item.Reverse, + Ways = item.Ways, + Ways2 = item.Ways2, + Ways3 = item.Ways3, }; return control; } @@ -306,18 +306,18 @@ namespace SabreTools.Serialization.CrossModel { var device = new Device { - Type = item.ReadString(Data.Models.Metadata.Device.DeviceTypeKey), - Tag = item.ReadString(Data.Models.Metadata.Device.TagKey), - FixedImage = item.ReadString(Data.Models.Metadata.Device.FixedImageKey), - Mandatory = item.ReadString(Data.Models.Metadata.Device.MandatoryKey), - Interface = item.ReadString(Data.Models.Metadata.Device.InterfaceKey), + Type = item.DeviceType, + Tag = item.Tag, + FixedImage = item.FixedImage, + Mandatory = item.Mandatory, + Interface = item.Interface, }; - var instance = item.Read(Data.Models.Metadata.Device.InstanceKey); + var instance = item.Instance; if (instance is not null) device.Instance = ConvertFromInternalModel(instance); - var extensions = item.Read(Data.Models.Metadata.Device.ExtensionKey); + var extensions = item.Extension; if (extensions is not null && extensions.Length > 0) device.Extension = Array.ConvertAll(extensions, ConvertFromInternalModel); @@ -331,7 +331,7 @@ namespace SabreTools.Serialization.CrossModel { var deviceRef = new DeviceRef { - Name = item.ReadString(Data.Models.Metadata.DeviceRef.NameKey), + Name = item.Name, }; return deviceRef; } @@ -343,9 +343,9 @@ namespace SabreTools.Serialization.CrossModel { var dipLocation = new DipLocation { - Name = item.ReadString(Data.Models.Metadata.DipLocation.NameKey), - Number = item.ReadString(Data.Models.Metadata.DipLocation.NumberKey), - Inverted = item.ReadString(Data.Models.Metadata.DipLocation.InvertedKey), + Name = item.Name, + Number = item.Number, + Inverted = item.Inverted, }; return dipLocation; } @@ -357,20 +357,20 @@ namespace SabreTools.Serialization.CrossModel { var dipSwitch = new DipSwitch { - Name = item.ReadString(Data.Models.Metadata.DipSwitch.NameKey), - Tag = item.ReadString(Data.Models.Metadata.DipSwitch.TagKey), - Mask = item.ReadString(Data.Models.Metadata.DipSwitch.MaskKey), + Name = item.Name, + Tag = item.Tag, + Mask = item.Mask, }; - var condition = item.Read(Data.Models.Metadata.DipSwitch.ConditionKey); + var condition = item.Condition; if (condition is not null) dipSwitch.Condition = ConvertFromInternalModel(condition); - var dipLocations = item.Read(Data.Models.Metadata.DipSwitch.DipLocationKey); + var dipLocations = item.DipLocation; if (dipLocations is not null && dipLocations.Length > 0) dipSwitch.DipLocation = Array.ConvertAll(dipLocations, ConvertFromInternalModel); - var dipValues = item.Read(Data.Models.Metadata.DipSwitch.DipValueKey); + var dipValues = item.DipValue; if (dipValues is not null && dipValues.Length > 0) dipSwitch.DipValue = Array.ConvertAll(dipValues, ConvertFromInternalModel); @@ -384,12 +384,12 @@ namespace SabreTools.Serialization.CrossModel { var dipValue = new DipValue { - Name = item.ReadString(Data.Models.Metadata.DipValue.NameKey), - Value = item.ReadString(Data.Models.Metadata.DipValue.ValueKey), - Default = item.ReadString(Data.Models.Metadata.DipValue.DefaultKey), + Name = item.Name, + Value = item.Value, + Default = item.Default, }; - var condition = item.Read(Data.Models.Metadata.DipValue.ConditionKey); + var condition = item.Condition; if (condition is not null) dipValue.Condition = ConvertFromInternalModel(condition); @@ -403,15 +403,15 @@ namespace SabreTools.Serialization.CrossModel { var disk = new Disk { - Name = item.ReadString(Data.Models.Metadata.Disk.NameKey), - 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), - Writable = item.ReadString(Data.Models.Metadata.Disk.WritableKey), - Status = item.ReadString(Data.Models.Metadata.Disk.StatusKey), - Optional = item.ReadString(Data.Models.Metadata.Disk.OptionalKey), + Name = item.Name, + MD5 = item.MD5, + SHA1 = item.SHA1, + Merge = item.Merge, + Region = item.Region, + Index = item.Index, + Writable = item.Writable, + Status = item.Status, + Optional = item.Optional, }; return disk; } @@ -423,20 +423,20 @@ namespace SabreTools.Serialization.CrossModel { var display = new Display { - Tag = item.ReadString(Data.Models.Metadata.Display.TagKey), - Type = item.ReadString(Data.Models.Metadata.Display.DisplayTypeKey), - Rotate = item.ReadString(Data.Models.Metadata.Display.RotateKey), - FlipX = item.ReadString(Data.Models.Metadata.Display.FlipXKey), - Width = item.ReadString(Data.Models.Metadata.Display.WidthKey), - Height = item.ReadString(Data.Models.Metadata.Display.HeightKey), - Refresh = item.ReadString(Data.Models.Metadata.Display.RefreshKey), - PixClock = item.ReadString(Data.Models.Metadata.Display.PixClockKey), - HTotal = item.ReadString(Data.Models.Metadata.Display.HTotalKey), - HBEnd = item.ReadString(Data.Models.Metadata.Display.HBEndKey), - HBStart = item.ReadString(Data.Models.Metadata.Display.HBStartKey), - VTotal = item.ReadString(Data.Models.Metadata.Display.VTotalKey), - VBEnd = item.ReadString(Data.Models.Metadata.Display.VBEndKey), - VBStart = item.ReadString(Data.Models.Metadata.Display.VBStartKey), + Tag = item.Tag, + Type = item.DisplayType, + Rotate = item.Rotate, + FlipX = item.FlipX, + Width = item.Width, + Height = item.Height, + Refresh = item.Refresh, + PixClock = item.PixClock, + HTotal = item.HTotal, + HBEnd = item.HBEnd, + HBStart = item.HBStart, + VTotal = item.VTotal, + VBEnd = item.VBEnd, + VBStart = item.VBStart, }; return display; } @@ -448,17 +448,17 @@ namespace SabreTools.Serialization.CrossModel { var driver = new Driver { - Status = item.ReadString(Data.Models.Metadata.Driver.StatusKey), - Color = item.ReadString(Data.Models.Metadata.Driver.ColorKey), - Sound = item.ReadString(Data.Models.Metadata.Driver.SoundKey), - PaletteSize = item.ReadString(Data.Models.Metadata.Driver.PaletteSizeKey), - Emulation = item.ReadString(Data.Models.Metadata.Driver.EmulationKey), - Cocktail = item.ReadString(Data.Models.Metadata.Driver.CocktailKey), - SaveState = item.ReadString(Data.Models.Metadata.Driver.SaveStateKey), - RequiresArtwork = item.ReadString(Data.Models.Metadata.Driver.RequiresArtworkKey), - Unofficial = item.ReadString(Data.Models.Metadata.Driver.UnofficialKey), - NoSoundHardware = item.ReadString(Data.Models.Metadata.Driver.NoSoundHardwareKey), - Incomplete = item.ReadString(Data.Models.Metadata.Driver.IncompleteKey), + Status = item.Status, + Color = item.Color, + Sound = item.Sound, + PaletteSize = item.PaletteSize, + Emulation = item.Emulation, + Cocktail = item.Cocktail, + SaveState = item.SaveState, + RequiresArtwork = item.RequiresArtwork, + Unofficial = item.Unofficial, + NoSoundHardware = item.NoSoundHardware, + Incomplete = item.Incomplete, }; return driver; } @@ -470,7 +470,7 @@ namespace SabreTools.Serialization.CrossModel { var extension = new Extension { - Name = item.ReadString(Data.Models.Metadata.Extension.NameKey), + Name = item.Name, }; return extension; } @@ -482,9 +482,9 @@ namespace SabreTools.Serialization.CrossModel { var feature = new Feature { - Type = item.ReadString(Data.Models.Metadata.Feature.FeatureTypeKey), - Status = item.ReadString(Data.Models.Metadata.Feature.StatusKey), - Overall = item.ReadString(Data.Models.Metadata.Feature.OverallKey), + Type = item.FeatureType, + Status = item.Status, + Overall = item.Overall, }; return feature; } @@ -496,18 +496,15 @@ namespace SabreTools.Serialization.CrossModel { var input = new Input { - Service = item.ReadString(Data.Models.Metadata.Input.ServiceKey), - Tilt = item.ReadString(Data.Models.Metadata.Input.TiltKey), - Players = item.ReadString(Data.Models.Metadata.Input.PlayersKey), - Buttons = item.ReadString(Data.Models.Metadata.Input.ButtonsKey), - Coins = item.ReadString(Data.Models.Metadata.Input.CoinsKey), + Service = item.Service, + Tilt = item.Tilt, + Players = item.Players, + ControlAttr = item.ControlAttr, + Buttons = item.Buttons, + Coins = item.Coins, }; - var controlAttr = item.ReadString(Data.Models.Metadata.Input.ControlKey); - if (controlAttr is not null) - input.ControlAttr = controlAttr; - - var controls = item.Read(Data.Models.Metadata.Input.ControlKey); + var controls = item.Control; if (controls is not null && controls.Length > 0) input.Control = Array.ConvertAll(controls, ConvertFromInternalModel); @@ -521,8 +518,8 @@ namespace SabreTools.Serialization.CrossModel { var instance = new Instance { - Name = item.ReadString(Data.Models.Metadata.Instance.NameKey), - BriefName = item.ReadString(Data.Models.Metadata.Instance.BriefNameKey), + Name = item.Name, + BriefName = item.BriefName, }; return instance; } @@ -534,10 +531,10 @@ namespace SabreTools.Serialization.CrossModel { var port = new Port { - Tag = item.ReadString(Data.Models.Metadata.Port.TagKey), + Tag = item.Tag, }; - var analogs = item.Read(Data.Models.Metadata.Port.AnalogKey); + var analogs = item.Analog; if (analogs is not null && analogs.Length > 0) port.Analog = Array.ConvertAll(analogs, ConvertFromInternalModel); @@ -551,9 +548,9 @@ namespace SabreTools.Serialization.CrossModel { var ramOption = new RamOption { - Name = item.ReadString(Data.Models.Metadata.RamOption.NameKey), - Default = item.ReadString(Data.Models.Metadata.RamOption.DefaultKey), - Content = item.ReadString(Data.Models.Metadata.RamOption.ContentKey), + Name = item.Name, + Default = item.Default, + Content = item.Content, }; return ramOption; } @@ -565,18 +562,18 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Rom { - Name = item.ReadString(Data.Models.Metadata.Rom.NameKey), - Bios = item.ReadString(Data.Models.Metadata.Rom.BiosKey), - Size = item.ReadString(Data.Models.Metadata.Rom.SizeKey), - CRC = item.ReadString(Data.Models.Metadata.Rom.CRCKey), - SHA1 = item.ReadString(Data.Models.Metadata.Rom.SHA1Key), - Merge = item.ReadString(Data.Models.Metadata.Rom.MergeKey), - Region = item.ReadString(Data.Models.Metadata.Rom.RegionKey), - Offset = item.ReadString(Data.Models.Metadata.Rom.OffsetKey), - Status = item.ReadString(Data.Models.Metadata.Rom.StatusKey), - Optional = item.ReadString(Data.Models.Metadata.Rom.OptionalKey), - Dispose = item.ReadString(Data.Models.Metadata.Rom.DisposeKey), - SoundOnly = item.ReadString(Data.Models.Metadata.Rom.SoundOnlyKey), + Name = item.Name, + Bios = item.Bios, + Size = item.Size, + CRC = item.CRC32, + SHA1 = item.SHA1, + Merge = item.Merge, + Region = item.Region, + Offset = item.Offset, + Status = item.Status, + Optional = item.Optional, + Dispose = item.Dispose, + SoundOnly = item.SoundOnly, }; return rom; } @@ -586,10 +583,7 @@ namespace SabreTools.Serialization.CrossModel /// private static Sample ConvertFromInternalModel(Data.Models.Metadata.Sample item) { - var sample = new Sample - { - Name = item.ReadString(Data.Models.Metadata.Sample.NameKey), - }; + var sample = new Sample { Name = item.Name, }; return sample; } @@ -600,10 +594,10 @@ namespace SabreTools.Serialization.CrossModel { var slot = new Slot { - Name = item.ReadString(Data.Models.Metadata.Slot.NameKey), + Name = item.Name, }; - var slotOptions = item.Read(Data.Models.Metadata.Slot.SlotOptionKey); + var slotOptions = item.SlotOption; if (slotOptions is not null && slotOptions.Length > 0) slot.SlotOption = Array.ConvertAll(slotOptions, ConvertFromInternalModel); @@ -617,9 +611,9 @@ namespace SabreTools.Serialization.CrossModel { var slotOption = new SlotOption { - Name = item.ReadString(Data.Models.Metadata.SlotOption.NameKey), - DevName = item.ReadString(Data.Models.Metadata.SlotOption.DevNameKey), - Default = item.ReadString(Data.Models.Metadata.SlotOption.DefaultKey), + Name = item.Name, + DevName = item.DevName, + Default = item.Default, }; return slotOption; } @@ -631,10 +625,10 @@ namespace SabreTools.Serialization.CrossModel { var softwareList = new Data.Models.Listxml.SoftwareList { - Tag = item.ReadString(Data.Models.Metadata.SoftwareList.TagKey), - Name = item.ReadString(Data.Models.Metadata.SoftwareList.NameKey), - Status = item.ReadString(Data.Models.Metadata.SoftwareList.StatusKey), - Filter = item.ReadString(Data.Models.Metadata.SoftwareList.FilterKey), + Tag = item.Tag, + Name = item.Name, + Status = item.Status, + Filter = item.Filter, }; return softwareList; } @@ -646,7 +640,7 @@ namespace SabreTools.Serialization.CrossModel { var sound = new Sound { - Channels = item.ReadString(Data.Models.Metadata.Sound.ChannelsKey), + Channels = item.Channels, }; return sound; } @@ -658,13 +652,13 @@ namespace SabreTools.Serialization.CrossModel { var video = new Video { - Screen = item.ReadString(Data.Models.Metadata.Video.ScreenKey), - Orientation = item.ReadString(Data.Models.Metadata.Video.OrientationKey), - Width = item.ReadString(Data.Models.Metadata.Video.WidthKey), - Height = item.ReadString(Data.Models.Metadata.Video.HeightKey), - AspectX = item.ReadString(Data.Models.Metadata.Video.AspectXKey), - AspectY = item.ReadString(Data.Models.Metadata.Video.AspectYKey), - Refresh = item.ReadString(Data.Models.Metadata.Video.RefreshKey), + Screen = item.Screen, + Orientation = item.Orientation, + Width = item.Width, + Height = item.Height, + AspectX = item.AspectX, + AspectY = item.AspectY, + Refresh = item.Refresh, }; return video; } diff --git a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs index d4173c4f..12a0820a 100644 --- a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs @@ -13,14 +13,11 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new Data.Models.Metadata.MetadataFile { - [Data.Models.Metadata.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item), + Header = ConvertHeaderToInternalModel(item), }; if (item?.Game is not null && item.Game.Length > 0) - { - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] - = Array.ConvertAll(item.Game, ConvertMachineToInternalModel); - } + metadataFile.Machine = Array.ConvertAll(item.Game, ConvertMachineToInternalModel); return metadataFile; } @@ -32,9 +29,9 @@ namespace SabreTools.Serialization.CrossModel { var header = new Data.Models.Metadata.Header { - [Data.Models.Metadata.Header.BuildKey] = item.Build, - [Data.Models.Metadata.Header.DebugKey] = item.Debug, - [Data.Models.Metadata.Header.MameConfigKey] = item.MameConfig, + Build = item.Build, + Debug = item.Debug, + MameConfig = item.MameConfig, }; return header; } @@ -46,131 +43,80 @@ namespace SabreTools.Serialization.CrossModel { var machine = new Data.Models.Metadata.Machine { - [Data.Models.Metadata.Machine.NameKey] = item.Name, - [Data.Models.Metadata.Machine.SourceFileKey] = item.SourceFile, - [Data.Models.Metadata.Machine.IsBiosKey] = item.IsBios, - [Data.Models.Metadata.Machine.IsDeviceKey] = item.IsDevice, - [Data.Models.Metadata.Machine.IsMechanicalKey] = item.IsMechanical, - [Data.Models.Metadata.Machine.RunnableKey] = item.Runnable, - [Data.Models.Metadata.Machine.CloneOfKey] = item.CloneOf, - [Data.Models.Metadata.Machine.RomOfKey] = item.RomOf, - [Data.Models.Metadata.Machine.SampleOfKey] = item.SampleOf, - [Data.Models.Metadata.Machine.DescriptionKey] = item.Description, - [Data.Models.Metadata.Machine.YearKey] = item.Year, - [Data.Models.Metadata.Machine.ManufacturerKey] = item.Manufacturer, - [Data.Models.Metadata.Machine.HistoryKey] = item.History, + Name = item.Name, + SourceFile = item.SourceFile, + IsBios = item.IsBios, + IsDevice = item.IsDevice, + IsMechanical = item.IsMechanical, + Runnable = item.Runnable, + CloneOf = item.CloneOf, + RomOf = item.RomOf, + SampleOf = item.SampleOf, + Description = item.Description, + Year = item.Year, + Manufacturer = item.Manufacturer, + History = item.History, }; if (item.BiosSet is not null && item.BiosSet.Length > 0) - { - machine[Data.Models.Metadata.Machine.BiosSetKey] - = Array.ConvertAll(item.BiosSet, ConvertToInternalModel); - } + machine.BiosSet = Array.ConvertAll(item.BiosSet, ConvertToInternalModel); if (item.Rom is not null && item.Rom.Length > 0) - { - machine[Data.Models.Metadata.Machine.RomKey] - = Array.ConvertAll(item.Rom, ConvertToInternalModel); - } + machine.Rom = Array.ConvertAll(item.Rom, ConvertToInternalModel); if (item.Disk is not null && item.Disk.Length > 0) - { - machine[Data.Models.Metadata.Machine.DiskKey] - = Array.ConvertAll(item.Disk, ConvertToInternalModel); - } + machine.Disk = Array.ConvertAll(item.Disk, ConvertToInternalModel); if (item.DeviceRef is not null && item.DeviceRef.Length > 0) - { - machine[Data.Models.Metadata.Machine.DeviceRefKey] - = Array.ConvertAll(item.DeviceRef, ConvertToInternalModel); - } + machine.DeviceRef = Array.ConvertAll(item.DeviceRef, ConvertToInternalModel); if (item.Sample is not null && item.Sample.Length > 0) - { - machine[Data.Models.Metadata.Machine.SampleKey] - = Array.ConvertAll(item.Sample, ConvertToInternalModel); - } + machine.Sample = Array.ConvertAll(item.Sample, ConvertToInternalModel); if (item.Chip is not null && item.Chip.Length > 0) - { - machine[Data.Models.Metadata.Machine.ChipKey] - = Array.ConvertAll(item.Chip, ConvertToInternalModel); - } + machine.Chip = Array.ConvertAll(item.Chip, ConvertToInternalModel); if (item.Display is not null && item.Display.Length > 0) - { - machine[Data.Models.Metadata.Machine.DisplayKey] - = Array.ConvertAll(item.Display, ConvertToInternalModel); - } + machine.Display = Array.ConvertAll(item.Display, ConvertToInternalModel); if (item.Video is not null && item.Video.Length > 0) - { - machine[Data.Models.Metadata.Machine.VideoKey] - = Array.ConvertAll(item.Video, ConvertToInternalModel); - } + machine.Video = Array.ConvertAll(item.Video, ConvertToInternalModel); if (item.Sound is not null) - machine[Data.Models.Metadata.Machine.SoundKey] = ConvertToInternalModel(item.Sound); + machine.Sound = ConvertToInternalModel(item.Sound); if (item.Input is not null) - machine[Data.Models.Metadata.Machine.InputKey] = ConvertToInternalModel(item.Input); + machine.Input = ConvertToInternalModel(item.Input); if (item.DipSwitch is not null && item.DipSwitch.Length > 0) - { - machine[Data.Models.Metadata.Machine.DipSwitchKey] - = Array.ConvertAll(item.DipSwitch, ConvertToInternalModel); - } + machine.DipSwitch = Array.ConvertAll(item.DipSwitch, ConvertToInternalModel); if (item.Configuration is not null && item.Configuration.Length > 0) - { - machine[Data.Models.Metadata.Machine.ConfigurationKey] - = Array.ConvertAll(item.Configuration, ConvertToInternalModel); - } + machine.Configuration = Array.ConvertAll(item.Configuration, ConvertToInternalModel); if (item.Port is not null && item.Port.Length > 0) - { - machine[Data.Models.Metadata.Machine.PortKey] - = Array.ConvertAll(item.Port, ConvertToInternalModel); - } + machine.Port = Array.ConvertAll(item.Port, ConvertToInternalModel); if (item.Adjuster is not null && item.Adjuster.Length > 0) - { - machine[Data.Models.Metadata.Machine.AdjusterKey] - = Array.ConvertAll(item.Adjuster, ConvertToInternalModel); - } + machine.Adjuster = Array.ConvertAll(item.Adjuster, ConvertToInternalModel); if (item.Driver is not null) - machine[Data.Models.Metadata.Machine.DriverKey] = ConvertToInternalModel(item.Driver); + machine.Driver = ConvertToInternalModel(item.Driver); if (item.Feature is not null && item.Feature.Length > 0) - { - machine[Data.Models.Metadata.Machine.FeatureKey] - = Array.ConvertAll(item.Feature, ConvertToInternalModel); - } + machine.Feature = Array.ConvertAll(item.Feature, ConvertToInternalModel); if (item.Device is not null && item.Device.Length > 0) - { - machine[Data.Models.Metadata.Machine.DeviceKey] - = Array.ConvertAll(item.Device, ConvertToInternalModel); - } + machine.Device = Array.ConvertAll(item.Device, ConvertToInternalModel); if (item.Slot is not null && item.Slot.Length > 0) - { - machine[Data.Models.Metadata.Machine.SlotKey] - = Array.ConvertAll(item.Slot, ConvertToInternalModel); - } + machine.Slot = Array.ConvertAll(item.Slot, ConvertToInternalModel); if (item.SoftwareList is not null && item.SoftwareList.Length > 0) - { - machine[Data.Models.Metadata.Machine.SoftwareListKey] - = Array.ConvertAll(item.SoftwareList, ConvertToInternalModel); - } + machine.SoftwareList = Array.ConvertAll(item.SoftwareList, ConvertToInternalModel); if (item.RamOption is not null && item.RamOption.Length > 0) - { - machine[Data.Models.Metadata.Machine.RamOptionKey] - = Array.ConvertAll(item.RamOption, ConvertToInternalModel); - } + machine.RamOption = Array.ConvertAll(item.RamOption, ConvertToInternalModel); return machine; } @@ -182,12 +128,12 @@ namespace SabreTools.Serialization.CrossModel { var adjuster = new Data.Models.Metadata.Adjuster { - [Data.Models.Metadata.Adjuster.NameKey] = item.Name, - [Data.Models.Metadata.Adjuster.DefaultKey] = item.Default, + Name = item.Name, + Default = item.Default, }; if (item.Condition is not null) - adjuster[Data.Models.Metadata.Adjuster.ConditionKey] = ConvertToInternalModel(item.Condition); + adjuster.Condition = ConvertToInternalModel(item.Condition); return adjuster; } @@ -199,7 +145,7 @@ namespace SabreTools.Serialization.CrossModel { var analog = new Data.Models.Metadata.Analog { - [Data.Models.Metadata.Analog.MaskKey] = item.Mask, + Mask = item.Mask, }; return analog; } @@ -211,9 +157,9 @@ namespace SabreTools.Serialization.CrossModel { var biosset = new Data.Models.Metadata.BiosSet { - [Data.Models.Metadata.BiosSet.NameKey] = item.Name, - [Data.Models.Metadata.BiosSet.DescriptionKey] = item.Description, - [Data.Models.Metadata.BiosSet.DefaultKey] = item.Default, + Name = item.Name, + Description = item.Description, + Default = item.Default, }; return biosset; } @@ -225,11 +171,11 @@ namespace SabreTools.Serialization.CrossModel { var chip = new Data.Models.Metadata.Chip { - [Data.Models.Metadata.Chip.NameKey] = item.Name, - [Data.Models.Metadata.Chip.TagKey] = item.Tag, - [Data.Models.Metadata.Chip.ChipTypeKey] = item.Type, - [Data.Models.Metadata.Chip.SoundOnlyKey] = item.SoundOnly, - [Data.Models.Metadata.Chip.ClockKey] = item.Clock, + Name = item.Name, + Tag = item.Tag, + ChipType = item.Type, + SoundOnly = item.SoundOnly, + Clock = item.Clock, }; return chip; } @@ -241,10 +187,10 @@ namespace SabreTools.Serialization.CrossModel { var condition = new Data.Models.Metadata.Condition { - [Data.Models.Metadata.Condition.TagKey] = item.Tag, - [Data.Models.Metadata.Condition.MaskKey] = item.Mask, - [Data.Models.Metadata.Condition.RelationKey] = item.Relation, - [Data.Models.Metadata.Condition.ValueKey] = item.Value, + Tag = item.Tag, + Mask = item.Mask, + Relation = item.Relation, + Value = item.Value, }; return condition; } @@ -256,25 +202,19 @@ namespace SabreTools.Serialization.CrossModel { var configuration = new Data.Models.Metadata.Configuration { - [Data.Models.Metadata.Configuration.NameKey] = item.Name, - [Data.Models.Metadata.Configuration.TagKey] = item.Tag, - [Data.Models.Metadata.Configuration.MaskKey] = item.Mask, + Name = item.Name, + Tag = item.Tag, + Mask = item.Mask, }; if (item.Condition is not null) - configuration[Data.Models.Metadata.Configuration.ConditionKey] = ConvertToInternalModel(item.Condition); + configuration.Condition = ConvertToInternalModel(item.Condition); if (item.ConfLocation is not null && item.ConfLocation.Length > 0) - { - configuration[Data.Models.Metadata.Configuration.ConfLocationKey] - = Array.ConvertAll(item.ConfLocation, ConvertToInternalModel); - } + configuration.ConfLocation = Array.ConvertAll(item.ConfLocation, ConvertToInternalModel); if (item.ConfSetting is not null && item.ConfSetting.Length > 0) - { - configuration[Data.Models.Metadata.Configuration.ConfSettingKey] - = Array.ConvertAll(item.ConfSetting, ConvertToInternalModel); - } + configuration.ConfSetting = Array.ConvertAll(item.ConfSetting, ConvertToInternalModel); return configuration; } @@ -286,9 +226,9 @@ namespace SabreTools.Serialization.CrossModel { var confLocation = new Data.Models.Metadata.ConfLocation { - [Data.Models.Metadata.ConfLocation.NameKey] = item.Name, - [Data.Models.Metadata.ConfLocation.NumberKey] = item.Number, - [Data.Models.Metadata.ConfLocation.InvertedKey] = item.Inverted, + Name = item.Name, + Number = item.Number, + Inverted = item.Inverted, }; return confLocation; } @@ -300,13 +240,13 @@ namespace SabreTools.Serialization.CrossModel { var confSetting = new Data.Models.Metadata.ConfSetting { - [Data.Models.Metadata.ConfSetting.NameKey] = item.Name, - [Data.Models.Metadata.ConfSetting.ValueKey] = item.Value, - [Data.Models.Metadata.ConfSetting.DefaultKey] = item.Default, + Name = item.Name, + Value = item.Value, + Default = item.Default, }; if (item.Condition is not null) - confSetting[Data.Models.Metadata.ConfSetting.ConditionKey] = ConvertToInternalModel(item.Condition); + confSetting.Condition = ConvertToInternalModel(item.Condition); return confSetting; } @@ -318,18 +258,18 @@ namespace SabreTools.Serialization.CrossModel { var control = new Data.Models.Metadata.Control { - [Data.Models.Metadata.Control.ControlTypeKey] = item.Type, - [Data.Models.Metadata.Control.PlayerKey] = item.Player, - [Data.Models.Metadata.Control.ButtonsKey] = item.Buttons, - [Data.Models.Metadata.Control.ReqButtonsKey] = item.ReqButtons, - [Data.Models.Metadata.Control.MinimumKey] = item.Minimum, - [Data.Models.Metadata.Control.MaximumKey] = item.Maximum, - [Data.Models.Metadata.Control.SensitivityKey] = item.Sensitivity, - [Data.Models.Metadata.Control.KeyDeltaKey] = item.KeyDelta, - [Data.Models.Metadata.Control.ReverseKey] = item.Reverse, - [Data.Models.Metadata.Control.WaysKey] = item.Ways, - [Data.Models.Metadata.Control.Ways2Key] = item.Ways2, - [Data.Models.Metadata.Control.Ways3Key] = item.Ways3, + ControlType = item.Type, + Player = item.Player, + Buttons = item.Buttons, + ReqButtons = item.ReqButtons, + Minimum = item.Minimum, + Maximum = item.Maximum, + Sensitivity = item.Sensitivity, + KeyDelta = item.KeyDelta, + Reverse = item.Reverse, + Ways = item.Ways, + Ways2 = item.Ways2, + Ways3 = item.Ways3, }; return control; } @@ -341,21 +281,18 @@ namespace SabreTools.Serialization.CrossModel { var device = new Data.Models.Metadata.Device { - [Data.Models.Metadata.Device.DeviceTypeKey] = item.Type, - [Data.Models.Metadata.Device.TagKey] = item.Tag, - [Data.Models.Metadata.Device.FixedImageKey] = item.FixedImage, - [Data.Models.Metadata.Device.MandatoryKey] = item.Mandatory, - [Data.Models.Metadata.Device.InterfaceKey] = item.Interface, + DeviceType = item.Type, + Tag = item.Tag, + FixedImage = item.FixedImage, + Mandatory = item.Mandatory, + Interface = item.Interface, }; if (item.Instance is not null) - device[Data.Models.Metadata.Device.InstanceKey] = ConvertToInternalModel(item.Instance); + device.Instance = ConvertToInternalModel(item.Instance); if (item.Extension is not null && item.Extension.Length > 0) - { - device[Data.Models.Metadata.Device.ExtensionKey] - = Array.ConvertAll(item.Extension, ConvertToInternalModel); - } + device.Extension = Array.ConvertAll(item.Extension, ConvertToInternalModel); return device; } @@ -367,7 +304,7 @@ namespace SabreTools.Serialization.CrossModel { var deviceRef = new Data.Models.Metadata.DeviceRef { - [Data.Models.Metadata.DeviceRef.NameKey] = item.Name, + Name = item.Name, }; return deviceRef; } @@ -379,9 +316,9 @@ namespace SabreTools.Serialization.CrossModel { var dipLocation = new Data.Models.Metadata.DipLocation { - [Data.Models.Metadata.DipLocation.NameKey] = item.Name, - [Data.Models.Metadata.DipLocation.NumberKey] = item.Number, - [Data.Models.Metadata.DipLocation.InvertedKey] = item.Inverted, + Name = item.Name, + Number = item.Number, + Inverted = item.Inverted, }; return dipLocation; } @@ -393,25 +330,19 @@ namespace SabreTools.Serialization.CrossModel { var dipSwitch = new Data.Models.Metadata.DipSwitch { - [Data.Models.Metadata.DipSwitch.NameKey] = item.Name, - [Data.Models.Metadata.DipSwitch.TagKey] = item.Tag, - [Data.Models.Metadata.DipSwitch.MaskKey] = item.Mask, + Name = item.Name, + Tag = item.Tag, + Mask = item.Mask, }; if (item.Condition is not null) - dipSwitch[Data.Models.Metadata.DipSwitch.ConditionKey] = ConvertToInternalModel(item.Condition); + dipSwitch.Condition = ConvertToInternalModel(item.Condition); if (item.DipLocation is not null && item.DipLocation.Length > 0) - { - dipSwitch[Data.Models.Metadata.DipSwitch.DipLocationKey] - = Array.ConvertAll(item.DipLocation, ConvertToInternalModel); - } + dipSwitch.DipLocation = Array.ConvertAll(item.DipLocation, ConvertToInternalModel); if (item.DipValue is not null && item.DipValue.Length > 0) - { - dipSwitch[Data.Models.Metadata.DipSwitch.DipValueKey] - = Array.ConvertAll(item.DipValue, ConvertToInternalModel); - } + dipSwitch.DipValue = Array.ConvertAll(item.DipValue, ConvertToInternalModel); return dipSwitch; } @@ -423,13 +354,13 @@ namespace SabreTools.Serialization.CrossModel { var dipValue = new Data.Models.Metadata.DipValue { - [Data.Models.Metadata.DipValue.NameKey] = item.Name, - [Data.Models.Metadata.DipValue.ValueKey] = item.Value, - [Data.Models.Metadata.DipValue.DefaultKey] = item.Default, + Name = item.Name, + Value = item.Value, + Default = item.Default, }; if (item.Condition is not null) - dipValue[Data.Models.Metadata.DipValue.ConditionKey] = ConvertToInternalModel(item.Condition); + dipValue.Condition = ConvertToInternalModel(item.Condition); return dipValue; } @@ -441,15 +372,15 @@ namespace SabreTools.Serialization.CrossModel { var disk = new Data.Models.Metadata.Disk { - [Data.Models.Metadata.Disk.NameKey] = 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, - [Data.Models.Metadata.Disk.WritableKey] = item.Writable, - [Data.Models.Metadata.Disk.StatusKey] = item.Status, - [Data.Models.Metadata.Disk.OptionalKey] = item.Optional, + Name = item.Name, + MD5 = item.MD5, + SHA1 = item.SHA1, + Merge = item.Merge, + Region = item.Region, + Index = item.Index, + Writable = item.Writable, + Status = item.Status, + Optional = item.Optional, }; return disk; } @@ -461,20 +392,20 @@ namespace SabreTools.Serialization.CrossModel { var display = new Data.Models.Metadata.Display { - [Data.Models.Metadata.Display.TagKey] = item.Tag, - [Data.Models.Metadata.Display.DisplayTypeKey] = item.Type, - [Data.Models.Metadata.Display.RotateKey] = item.Rotate, - [Data.Models.Metadata.Display.FlipXKey] = item.FlipX, - [Data.Models.Metadata.Display.WidthKey] = item.Width, - [Data.Models.Metadata.Display.HeightKey] = item.Height, - [Data.Models.Metadata.Display.RefreshKey] = item.Refresh, - [Data.Models.Metadata.Display.PixClockKey] = item.PixClock, - [Data.Models.Metadata.Display.HTotalKey] = item.HTotal, - [Data.Models.Metadata.Display.HBEndKey] = item.HBEnd, - [Data.Models.Metadata.Display.HBStartKey] = item.HBStart, - [Data.Models.Metadata.Display.VTotalKey] = item.VTotal, - [Data.Models.Metadata.Display.VBEndKey] = item.VBEnd, - [Data.Models.Metadata.Display.VBStartKey] = item.VBStart, + Tag = item.Tag, + DisplayType = item.Type, + Rotate = item.Rotate, + FlipX = item.FlipX, + Width = item.Width, + Height = item.Height, + Refresh = item.Refresh, + PixClock = item.PixClock, + HTotal = item.HTotal, + HBEnd = item.HBEnd, + HBStart = item.HBStart, + VTotal = item.VTotal, + VBEnd = item.VBEnd, + VBStart = item.VBStart, }; return display; } @@ -486,17 +417,17 @@ namespace SabreTools.Serialization.CrossModel { var driver = new Data.Models.Metadata.Driver { - [Data.Models.Metadata.Driver.StatusKey] = item.Status, - [Data.Models.Metadata.Driver.ColorKey] = item.Color, - [Data.Models.Metadata.Driver.SoundKey] = item.Sound, - [Data.Models.Metadata.Driver.PaletteSizeKey] = item.PaletteSize, - [Data.Models.Metadata.Driver.EmulationKey] = item.Emulation, - [Data.Models.Metadata.Driver.CocktailKey] = item.Cocktail, - [Data.Models.Metadata.Driver.SaveStateKey] = item.SaveState, - [Data.Models.Metadata.Driver.RequiresArtworkKey] = item.RequiresArtwork, - [Data.Models.Metadata.Driver.UnofficialKey] = item.Unofficial, - [Data.Models.Metadata.Driver.NoSoundHardwareKey] = item.NoSoundHardware, - [Data.Models.Metadata.Driver.IncompleteKey] = item.Incomplete, + Status = item.Status, + Color = item.Color, + Sound = item.Sound, + PaletteSize = item.PaletteSize, + Emulation = item.Emulation, + Cocktail = item.Cocktail, + SaveState = item.SaveState, + RequiresArtwork = item.RequiresArtwork, + Unofficial = item.Unofficial, + NoSoundHardware = item.NoSoundHardware, + Incomplete = item.Incomplete, }; return driver; } @@ -508,7 +439,7 @@ namespace SabreTools.Serialization.CrossModel { var extension = new Data.Models.Metadata.Extension { - [Data.Models.Metadata.Extension.NameKey] = item.Name, + Name = item.Name, }; return extension; } @@ -520,9 +451,9 @@ namespace SabreTools.Serialization.CrossModel { var feature = new Data.Models.Metadata.Feature { - [Data.Models.Metadata.Feature.FeatureTypeKey] = item.Type, - [Data.Models.Metadata.Feature.StatusKey] = item.Status, - [Data.Models.Metadata.Feature.OverallKey] = item.Overall, + FeatureType = item.Type, + Status = item.Status, + Overall = item.Overall, }; return feature; } @@ -534,19 +465,16 @@ namespace SabreTools.Serialization.CrossModel { var input = new Data.Models.Metadata.Input { - [Data.Models.Metadata.Input.ServiceKey] = item.Service, - [Data.Models.Metadata.Input.TiltKey] = item.Tilt, - [Data.Models.Metadata.Input.PlayersKey] = item.Players, - [Data.Models.Metadata.Input.ControlKey] = item.ControlAttr, - [Data.Models.Metadata.Input.ButtonsKey] = item.Buttons, - [Data.Models.Metadata.Input.CoinsKey] = item.Coins, + Service = item.Service, + Tilt = item.Tilt, + Players = item.Players, + ControlAttr = item.ControlAttr, + Buttons = item.Buttons, + Coins = item.Coins, }; if (item.Control is not null && item.Control.Length > 0) - { - input[Data.Models.Metadata.Input.ControlKey] - = Array.ConvertAll(item.Control, ConvertToInternalModel); - } + input.Control = Array.ConvertAll(item.Control, ConvertToInternalModel); return input; } @@ -558,8 +486,8 @@ namespace SabreTools.Serialization.CrossModel { var instance = new Data.Models.Metadata.Instance { - [Data.Models.Metadata.Instance.NameKey] = item.Name, - [Data.Models.Metadata.Instance.BriefNameKey] = item.BriefName, + Name = item.Name, + BriefName = item.BriefName, }; return instance; } @@ -571,14 +499,11 @@ namespace SabreTools.Serialization.CrossModel { var port = new Data.Models.Metadata.Port { - [Data.Models.Metadata.Port.TagKey] = item.Tag, + Tag = item.Tag, }; if (item.Analog is not null && item.Analog.Length > 0) - { - port[Data.Models.Metadata.Port.AnalogKey] - = Array.ConvertAll(item.Analog, ConvertToInternalModel); - } + port.Analog = Array.ConvertAll(item.Analog, ConvertToInternalModel); return port; } @@ -590,9 +515,9 @@ namespace SabreTools.Serialization.CrossModel { var ramOption = new Data.Models.Metadata.RamOption { - [Data.Models.Metadata.RamOption.NameKey] = item.Name, - [Data.Models.Metadata.RamOption.DefaultKey] = item.Default, - [Data.Models.Metadata.RamOption.ContentKey] = item.Content, + Name = item.Name, + Default = item.Default, + Content = item.Content, }; return ramOption; } @@ -604,18 +529,18 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.NameKey] = item.Name, - [Data.Models.Metadata.Rom.BiosKey] = item.Bios, - [Data.Models.Metadata.Rom.SizeKey] = item.Size, - [Data.Models.Metadata.Rom.CRCKey] = item.CRC, - [Data.Models.Metadata.Rom.SHA1Key] = item.SHA1, - [Data.Models.Metadata.Rom.MergeKey] = item.Merge, - [Data.Models.Metadata.Rom.RegionKey] = item.Region, - [Data.Models.Metadata.Rom.OffsetKey] = item.Offset, - [Data.Models.Metadata.Rom.StatusKey] = item.Status, - [Data.Models.Metadata.Rom.OptionalKey] = item.Optional, - [Data.Models.Metadata.Rom.DisposeKey] = item.Dispose, - [Data.Models.Metadata.Rom.SoundOnlyKey] = item.SoundOnly, + Name = item.Name, + Bios = item.Bios, + Size = item.Size, + CRC32 = item.CRC, + SHA1 = item.SHA1, + Merge = item.Merge, + Region = item.Region, + Offset = item.Offset, + Status = item.Status, + Optional = item.Optional, + Dispose = item.Dispose, + SoundOnly = item.SoundOnly, }; return rom; } @@ -627,7 +552,7 @@ namespace SabreTools.Serialization.CrossModel { var sample = new Data.Models.Metadata.Sample { - [Data.Models.Metadata.Sample.NameKey] = item.Name, + Name = item.Name, }; return sample; } @@ -639,14 +564,11 @@ namespace SabreTools.Serialization.CrossModel { var slot = new Data.Models.Metadata.Slot { - [Data.Models.Metadata.Slot.NameKey] = item.Name, + Name = item.Name, }; if (item.SlotOption is not null && item.SlotOption.Length > 0) - { - slot[Data.Models.Metadata.Slot.SlotOptionKey] - = Array.ConvertAll(item.SlotOption, ConvertToInternalModel); - } + slot.SlotOption = Array.ConvertAll(item.SlotOption, ConvertToInternalModel); return slot; } @@ -658,9 +580,9 @@ namespace SabreTools.Serialization.CrossModel { var slotOption = new Data.Models.Metadata.SlotOption { - [Data.Models.Metadata.SlotOption.NameKey] = item.Name, - [Data.Models.Metadata.SlotOption.DevNameKey] = item.DevName, - [Data.Models.Metadata.SlotOption.DefaultKey] = item.Default, + Name = item.Name, + DevName = item.DevName, + Default = item.Default, }; return slotOption; } @@ -672,10 +594,10 @@ namespace SabreTools.Serialization.CrossModel { var softwareList = new Data.Models.Metadata.SoftwareList { - [Data.Models.Metadata.SoftwareList.TagKey] = item.Tag, - [Data.Models.Metadata.SoftwareList.NameKey] = item.Name, - [Data.Models.Metadata.SoftwareList.StatusKey] = item.Status, - [Data.Models.Metadata.SoftwareList.FilterKey] = item.Filter, + Tag = item.Tag, + Name = item.Name, + Status = item.Status, + Filter = item.Filter, }; return softwareList; } @@ -687,7 +609,7 @@ namespace SabreTools.Serialization.CrossModel { var sound = new Data.Models.Metadata.Sound { - [Data.Models.Metadata.Sound.ChannelsKey] = item.Channels, + Channels = item.Channels, }; return sound; } @@ -699,13 +621,13 @@ namespace SabreTools.Serialization.CrossModel { var video = new Data.Models.Metadata.Video { - [Data.Models.Metadata.Video.ScreenKey] = item.Screen, - [Data.Models.Metadata.Video.OrientationKey] = item.Orientation, - [Data.Models.Metadata.Video.WidthKey] = item.Width, - [Data.Models.Metadata.Video.HeightKey] = item.Height, - [Data.Models.Metadata.Video.AspectXKey] = item.AspectX, - [Data.Models.Metadata.Video.AspectYKey] = item.AspectY, - [Data.Models.Metadata.Video.RefreshKey] = item.Refresh, + Screen = item.Screen, + Orientation = item.Orientation, + Width = item.Width, + Height = item.Height, + AspectX = item.AspectX, + AspectY = item.AspectY, + Refresh = item.Refresh, }; return video; } diff --git a/SabreTools.Serialization.CrossModel/Logiqx.Deserializer.cs b/SabreTools.Serialization.CrossModel/Logiqx.Deserializer.cs index c04ee6b4..823efbb8 100644 --- a/SabreTools.Serialization.CrossModel/Logiqx.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/Logiqx.Deserializer.cs @@ -18,16 +18,16 @@ namespace SabreTools.Serialization.CrossModel var datafile = new Datafile(); - var header = obj.Read(Data.Models.Metadata.MetadataFile.HeaderKey); + var header = obj.Header; if (header is not null) { - datafile.Build = header.ReadString(Data.Models.Metadata.Header.BuildKey); - datafile.Debug = header.ReadString(Data.Models.Metadata.Header.DebugKey); - datafile.SchemaLocation = header.ReadString(Data.Models.Metadata.Header.SchemaLocationKey); + datafile.Build = header.Build; + datafile.Debug = header.Debug; + datafile.SchemaLocation = header.SchemaLocation; datafile.Header = ConvertHeaderFromInternalModel(header); } - var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = obj.Machine; if (machines is not null && machines.Length > 0) datafile.Game = Array.ConvertAll(machines, m => ConvertMachineFromInternalModel(m, game)); @@ -41,73 +41,70 @@ namespace SabreTools.Serialization.CrossModel { var header = new Header { - Id = item.ReadString(Data.Models.Metadata.Header.IdKey), - Name = item.ReadString(Data.Models.Metadata.Header.NameKey), - Description = item.ReadString(Data.Models.Metadata.Header.DescriptionKey), - RootDir = item.ReadString(Data.Models.Metadata.Header.RootDirKey), - Category = item.ReadString(Data.Models.Metadata.Header.CategoryKey), - Version = item.ReadString(Data.Models.Metadata.Header.VersionKey), - Date = item.ReadString(Data.Models.Metadata.Header.DateKey), - Author = item.ReadString(Data.Models.Metadata.Header.AuthorKey), - Email = item.ReadString(Data.Models.Metadata.Header.EmailKey), - Homepage = item.ReadString(Data.Models.Metadata.Header.HomepageKey), - Url = item.ReadString(Data.Models.Metadata.Header.UrlKey), - Comment = item.ReadString(Data.Models.Metadata.Header.CommentKey), - Type = item.ReadString(Data.Models.Metadata.Header.TypeKey), + Id = item.Id, + Name = item.Name, + Description = item.Description, + RootDir = item.RootDir, + Category = item.Category, + Version = item.Version, + Date = item.Date, + Author = item.Author, + Email = item.Email, + Homepage = item.Homepage, + Url = item.Url, + Comment = item.Comment, + Type = item.Type, }; - string? headerVal = item.ReadString(Data.Models.Metadata.Header.HeaderKey); - string? forceMerging = item.ReadString(Data.Models.Metadata.Header.ForceMergingKey); - string? forceNodump = item.ReadString(Data.Models.Metadata.Header.ForceNodumpKey); - string? forceUnpacking = item.ReadString(Data.Models.Metadata.Header.ForcePackingKey); - - if (headerVal is not null - || forceMerging is not null - || forceNodump is not null - || forceUnpacking is not null) + if (item.HeaderSkipper is not null + || item.ForceMerging is not Data.Models.Metadata.MergingFlag.None + || item.ForceNodump is not Data.Models.Metadata.NodumpFlag.None + || item.ForcePacking is not Data.Models.Metadata.PackingFlag.None) { + header.RomVault = new RomVault(); + if (item.HeaderSkipper is not null) + header.RomVault.Header = item.HeaderSkipper; + if (item.ForceMerging is not Data.Models.Metadata.MergingFlag.None) + header.RomVault.ForceMerging = item.ForceMerging; + if (item.ForceNodump is not Data.Models.Metadata.NodumpFlag.None) + header.RomVault.ForceNodump = item.ForceNodump; + if (item.ForcePacking is not Data.Models.Metadata.PackingFlag.None) + header.RomVault.ForcePacking = item.ForcePacking; + header.ClrMamePro = new Data.Models.Logiqx.ClrMamePro(); - if (headerVal is not null) - header.ClrMamePro.Header = headerVal; - if (forceMerging is not null) - header.ClrMamePro.ForceMerging = forceMerging; - if (forceNodump is not null) - header.ClrMamePro.ForceNodump = forceNodump; - if (forceUnpacking is not null) - header.ClrMamePro.ForcePacking = forceUnpacking; + if (item.HeaderSkipper is not null) + header.ClrMamePro.Header = item.HeaderSkipper; + if (item.ForceMerging is not Data.Models.Metadata.MergingFlag.None) + header.ClrMamePro.ForceMerging = item.ForceMerging; + if (item.ForceNodump is not Data.Models.Metadata.NodumpFlag.None) + header.ClrMamePro.ForceNodump = item.ForceNodump; + if (item.ForcePacking is not Data.Models.Metadata.PackingFlag.None) + header.ClrMamePro.ForcePacking = item.ForcePacking; } - string? plugin = item.ReadString(Data.Models.Metadata.Header.PluginKey); - string? romMode = item.ReadString(Data.Models.Metadata.Header.RomModeKey); - string? biosMode = item.ReadString(Data.Models.Metadata.Header.BiosModeKey); - string? sampleMode = item.ReadString(Data.Models.Metadata.Header.SampleModeKey); - string? lockRomMode = item.ReadString(Data.Models.Metadata.Header.LockRomModeKey); - string? lockBiosMode = item.ReadString(Data.Models.Metadata.Header.LockBiosModeKey); - string? lockSampleMode = item.ReadString(Data.Models.Metadata.Header.LockSampleModeKey); - - if (plugin is not null - || romMode is not null - || biosMode is not null - || sampleMode is not null - || lockRomMode is not null - || lockBiosMode is not null - || lockSampleMode is not null) + if (item.Plugin is not null + || item.RomMode is not Data.Models.Metadata.MergingFlag.None + || item.BiosMode is not Data.Models.Metadata.MergingFlag.None + || item.SampleMode is not Data.Models.Metadata.MergingFlag.None + || item.LockRomMode is not null + || item.LockBiosMode is not null + || item.LockSampleMode is not null) { header.RomCenter = new Data.Models.Logiqx.RomCenter(); - if (plugin is not null) - header.RomCenter.Plugin = plugin; - if (romMode is not null) - header.RomCenter.RomMode = romMode; - if (biosMode is not null) - header.RomCenter.BiosMode = biosMode; - if (sampleMode is not null) - header.RomCenter.SampleMode = sampleMode; - if (lockRomMode is not null) - header.RomCenter.LockRomMode = lockRomMode; - if (lockBiosMode is not null) - header.RomCenter.LockBiosMode = lockBiosMode; - if (lockSampleMode is not null) - header.RomCenter.LockSampleMode = lockSampleMode; + if (item.Plugin is not null) + header.RomCenter.Plugin = item.Plugin; + if (item.RomMode is not Data.Models.Metadata.MergingFlag.None) + header.RomCenter.RomMode = item.RomMode; + if (item.BiosMode is not Data.Models.Metadata.MergingFlag.None) + header.RomCenter.BiosMode = item.BiosMode; + if (item.SampleMode is not Data.Models.Metadata.MergingFlag.None) + header.RomCenter.SampleMode = item.SampleMode; + if (item.LockRomMode is not null) + header.RomCenter.LockRomMode = item.LockRomMode; + if (item.LockBiosMode is not null) + header.RomCenter.LockBiosMode = item.LockBiosMode; + if (item.LockSampleMode is not null) + header.RomCenter.LockSampleMode = item.LockSampleMode; } return header; @@ -120,67 +117,105 @@ namespace SabreTools.Serialization.CrossModel { GameBase gameBase = game ? new Game() : new Machine(); - gameBase.Name = item.ReadString(Data.Models.Metadata.Machine.NameKey); - gameBase.SourceFile = item.ReadString(Data.Models.Metadata.Machine.SourceFileKey); - gameBase.IsBios = item.ReadString(Data.Models.Metadata.Machine.IsBiosKey); - gameBase.IsDevice = item.ReadString(Data.Models.Metadata.Machine.IsDeviceKey); - gameBase.IsMechanical = item.ReadString(Data.Models.Metadata.Machine.IsMechanicalKey); - gameBase.CloneOf = item.ReadString(Data.Models.Metadata.Machine.CloneOfKey); - gameBase.RomOf = item.ReadString(Data.Models.Metadata.Machine.RomOfKey); - gameBase.SampleOf = item.ReadString(Data.Models.Metadata.Machine.SampleOfKey); - gameBase.Board = item.ReadString(Data.Models.Metadata.Machine.BoardKey); - gameBase.RebuildTo = item.ReadString(Data.Models.Metadata.Machine.RebuildToKey); - gameBase.Id = item.ReadString(Data.Models.Metadata.Machine.IdKey); - gameBase.CloneOfId = item.ReadString(Data.Models.Metadata.Machine.CloneOfIdKey); - gameBase.Runnable = item.ReadString(Data.Models.Metadata.Machine.RunnableKey); - gameBase.Comment = item.ReadStringArray(Data.Models.Metadata.Machine.CommentKey); - gameBase.Description = item.ReadString(Data.Models.Metadata.Machine.DescriptionKey); - gameBase.Year = item.ReadString(Data.Models.Metadata.Machine.YearKey); - gameBase.Manufacturer = item.ReadString(Data.Models.Metadata.Machine.ManufacturerKey); - gameBase.Publisher = item.ReadString(Data.Models.Metadata.Machine.PublisherKey); - gameBase.Category = item.ReadStringArray(Data.Models.Metadata.Machine.CategoryKey); + gameBase.Name = item.Name; + gameBase.SourceFile = item.SourceFile; + gameBase.IsBios = item.IsBios; + gameBase.IsDevice = item.IsDevice; + gameBase.IsMechanical = item.IsMechanical; + gameBase.CloneOf = item.CloneOf; + gameBase.RomOf = item.RomOf; + gameBase.SampleOf = item.SampleOf; + gameBase.Board = item.Board; + gameBase.RebuildTo = item.RebuildTo; + gameBase.Id = item.Id; + gameBase.CloneOfId = item.CloneOfId; + gameBase.Runnable = item.Runnable; + gameBase.Comment = item.Comment; + gameBase.Description = item.Description; + gameBase.Year = item.Year; + gameBase.Manufacturer = item.Manufacturer; + gameBase.Publisher = item.Publisher; + gameBase.Category = item.Category; - var trurip = item.Read(Data.Models.Metadata.Machine.TruripKey); - if (trurip is not null) - gameBase.Trurip = trurip; + if (item.TitleID is not null + || item.Developer is not null + || item.Genre is not null + || item.Subgenre is not null + || item.Ratings is not null + || item.Score is not null + || item.Enabled is not null + || item.CRC is not null + || item.Source is not null + || item.RelatedTo is not null) + { + gameBase.Trurip = new Trurip(); + if (item.TitleID is not null) + gameBase.Trurip.TitleID = item.TitleID; + if (item.Publisher is not null) + gameBase.Trurip.Publisher = item.Publisher; + if (item.Developer is not null) + gameBase.Trurip.Developer = item.Developer; + if (item.Year is not null) + gameBase.Trurip.Year = item.Year; + if (item.Genre is not null) + gameBase.Trurip.Genre = item.Genre; + if (item.Subgenre is not null) + gameBase.Trurip.Subgenre = item.Subgenre; + if (item.Ratings is not null) + gameBase.Trurip.Ratings = item.Ratings; + if (item.Score is not null) + gameBase.Trurip.Score = item.Score; + if (item.Players is not null) + gameBase.Trurip.Players = item.Players; + if (item.Enabled is not null) + gameBase.Trurip.Enabled = item.Enabled; + if (item.CRC is not null) + gameBase.Trurip.CRC = item.CRC; + if (item.Source is not null) + gameBase.Trurip.Source = item.Source; + if (item.CloneOf is not null) + gameBase.Trurip.CloneOf = item.CloneOf; + if (item.RelatedTo is not null) + gameBase.Trurip.RelatedTo = item.RelatedTo; + } - var releases = item.Read(Data.Models.Metadata.Machine.ReleaseKey); + var releases = item.Release; if (releases is not null && releases.Length > 0) gameBase.Release = Array.ConvertAll(releases, ConvertFromInternalModel); - var biosSets = item.Read(Data.Models.Metadata.Machine.BiosSetKey); + var biosSets = item.BiosSet; if (biosSets is not null && biosSets.Length > 0) gameBase.BiosSet = Array.ConvertAll(biosSets, ConvertFromInternalModel); - var roms = item.Read(Data.Models.Metadata.Machine.RomKey); + var roms = item.Rom; if (roms is not null && roms.Length > 0) gameBase.Rom = Array.ConvertAll(roms, ConvertFromInternalModel); - var disks = item.Read(Data.Models.Metadata.Machine.DiskKey); + var disks = item.Disk; if (disks is not null && disks.Length > 0) gameBase.Disk = Array.ConvertAll(disks, ConvertFromInternalModel); - var medias = item.Read(Data.Models.Metadata.Machine.MediaKey); + var medias = item.Media; if (medias is not null && medias.Length > 0) gameBase.Media = Array.ConvertAll(medias, ConvertFromInternalModel); - var deviceRefs = item.Read(Data.Models.Metadata.Machine.DeviceRefKey); + var deviceRefs = item.DeviceRef; if (deviceRefs is not null && deviceRefs.Length > 0) gameBase.DeviceRef = Array.ConvertAll(deviceRefs, ConvertFromInternalModel); - var samples = item.Read(Data.Models.Metadata.Machine.SampleKey); + var samples = item.Sample; if (samples is not null && samples.Length > 0) gameBase.Sample = Array.ConvertAll(samples, ConvertFromInternalModel); - var archives = item.Read(Data.Models.Metadata.Machine.ArchiveKey); + var archives = item.Archive; if (archives is not null && archives.Length > 0) gameBase.Archive = Array.ConvertAll(archives, ConvertFromInternalModel); - var driver = item.Read(Data.Models.Metadata.Machine.DriverKey); + var driver = item.Driver; if (driver is not null) gameBase.Driver = ConvertFromInternalModel(driver); - var softwareLists = item.Read(Data.Models.Metadata.Machine.SoftwareListKey); + var softwareLists = item.SoftwareList; if (softwareLists is not null && softwareLists.Length > 0) gameBase.SoftwareList = Array.ConvertAll(softwareLists, ConvertFromInternalModel); @@ -194,7 +229,7 @@ namespace SabreTools.Serialization.CrossModel { var archive = new Archive { - Name = item.ReadString(Data.Models.Metadata.Archive.NameKey), + Name = item.Name, }; return archive; } @@ -206,9 +241,9 @@ namespace SabreTools.Serialization.CrossModel { var biosset = new BiosSet { - Name = item.ReadString(Data.Models.Metadata.BiosSet.NameKey), - Description = item.ReadString(Data.Models.Metadata.BiosSet.DescriptionKey), - Default = item.ReadString(Data.Models.Metadata.BiosSet.DefaultKey), + Name = item.Name, + Description = item.Description, + Default = item.Default, }; return biosset; } @@ -220,7 +255,7 @@ namespace SabreTools.Serialization.CrossModel { var deviceRef = new DeviceRef { - Name = item.ReadString(Data.Models.Metadata.DipSwitch.NameKey), + Name = item.Name, }; return deviceRef; } @@ -232,12 +267,12 @@ namespace SabreTools.Serialization.CrossModel { var disk = new Disk { - Name = item.ReadString(Data.Models.Metadata.Disk.NameKey), - MD5 = item.ReadString(Data.Models.Metadata.Disk.MD5Key), - SHA1 = item.ReadString(Data.Models.Metadata.Disk.SHA1Key), - Merge = item.ReadString(Data.Models.Metadata.Disk.MergeKey), - Status = item.ReadString(Data.Models.Metadata.Disk.StatusKey), - Region = item.ReadString(Data.Models.Metadata.Disk.RegionKey), + Name = item.Name, + MD5 = item.MD5, + SHA1 = item.SHA1, + Merge = item.Merge, + Status = item.Status, + Region = item.Region, }; return disk; } @@ -249,14 +284,14 @@ namespace SabreTools.Serialization.CrossModel { var driver = new Driver { - Status = item.ReadString(Data.Models.Metadata.Driver.StatusKey), - Emulation = item.ReadString(Data.Models.Metadata.Driver.EmulationKey), - Cocktail = item.ReadString(Data.Models.Metadata.Driver.CocktailKey), - SaveState = item.ReadString(Data.Models.Metadata.Driver.SaveStateKey), - RequiresArtwork = item.ReadString(Data.Models.Metadata.Driver.RequiresArtworkKey), - Unofficial = item.ReadString(Data.Models.Metadata.Driver.UnofficialKey), - NoSoundHardware = item.ReadString(Data.Models.Metadata.Driver.NoSoundHardwareKey), - Incomplete = item.ReadString(Data.Models.Metadata.Driver.IncompleteKey), + Status = item.Status, + Emulation = item.Emulation, + Cocktail = item.Cocktail, + SaveState = item.SaveState, + RequiresArtwork = item.RequiresArtwork, + Unofficial = item.Unofficial, + NoSoundHardware = item.NoSoundHardware, + Incomplete = item.Incomplete, }; return driver; } @@ -268,11 +303,11 @@ namespace SabreTools.Serialization.CrossModel { var media = new Media { - Name = item.ReadString(Data.Models.Metadata.Media.NameKey), - MD5 = item.ReadString(Data.Models.Metadata.Media.MD5Key), - SHA1 = item.ReadString(Data.Models.Metadata.Media.SHA1Key), - SHA256 = item.ReadString(Data.Models.Metadata.Media.SHA256Key), - SpamSum = item.ReadString(Data.Models.Metadata.Media.SpamSumKey), + Name = item.Name, + MD5 = item.MD5, + SHA1 = item.SHA1, + SHA256 = item.SHA256, + SpamSum = item.SpamSum, }; return media; } @@ -284,11 +319,11 @@ namespace SabreTools.Serialization.CrossModel { var release = new Release { - Name = item.ReadString(Data.Models.Metadata.Release.NameKey), - Region = item.ReadString(Data.Models.Metadata.Release.RegionKey), - Language = item.ReadString(Data.Models.Metadata.Release.LanguageKey), - Date = item.ReadString(Data.Models.Metadata.Release.DateKey), - Default = item.ReadString(Data.Models.Metadata.Release.DefaultKey), + Name = item.Name, + Region = item.Region, + Language = item.Language, + Date = item.Date, + Default = item.Default, }; return release; } @@ -300,30 +335,30 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Rom { - Name = item.ReadString(Data.Models.Metadata.Rom.NameKey), - Size = item.ReadString(Data.Models.Metadata.Rom.SizeKey), - CRC16 = item.ReadString(Data.Models.Metadata.Rom.CRC16Key), - CRC = item.ReadString(Data.Models.Metadata.Rom.CRCKey), - CRC64 = item.ReadString(Data.Models.Metadata.Rom.CRC64Key), - MD2 = item.ReadString(Data.Models.Metadata.Rom.MD2Key), - MD4 = item.ReadString(Data.Models.Metadata.Rom.MD4Key), - MD5 = item.ReadString(Data.Models.Metadata.Rom.MD5Key), - RIPEMD128 = item.ReadString(Data.Models.Metadata.Rom.RIPEMD128Key), - RIPEMD160 = item.ReadString(Data.Models.Metadata.Rom.RIPEMD160Key), - SHA1 = item.ReadString(Data.Models.Metadata.Rom.SHA1Key), - SHA256 = item.ReadString(Data.Models.Metadata.Rom.SHA256Key), - SHA384 = item.ReadString(Data.Models.Metadata.Rom.SHA384Key), - SHA512 = item.ReadString(Data.Models.Metadata.Rom.SHA512Key), - SpamSum = item.ReadString(Data.Models.Metadata.Rom.SpamSumKey), - xxHash364 = item.ReadString(Data.Models.Metadata.Rom.xxHash364Key), - xxHash3128 = item.ReadString(Data.Models.Metadata.Rom.xxHash3128Key), - Merge = item.ReadString(Data.Models.Metadata.Rom.MergeKey), - Status = item.ReadString(Data.Models.Metadata.Rom.StatusKey), - Serial = item.ReadString(Data.Models.Metadata.Rom.SerialKey), - Header = item.ReadString(Data.Models.Metadata.Rom.HeaderKey), - Date = item.ReadString(Data.Models.Metadata.Rom.DateKey), - Inverted = item.ReadString(Data.Models.Metadata.Rom.InvertedKey), - MIA = item.ReadString(Data.Models.Metadata.Rom.MIAKey), + Name = item.Name, + Size = item.Size, + CRC16 = item.CRC16, + CRC = item.CRC32, + CRC64 = item.CRC64, + MD2 = item.MD2, + MD4 = item.MD4, + MD5 = item.MD5, + RIPEMD128 = item.RIPEMD128, + RIPEMD160 = item.RIPEMD160, + SHA1 = item.SHA1, + SHA256 = item.SHA256, + SHA384 = item.SHA384, + SHA512 = item.SHA512, + SpamSum = item.SpamSum, + xxHash364 = item.xxHash364, + xxHash3128 = item.xxHash3128, + Merge = item.Merge, + Status = item.Status, + Serial = item.Serial, + Header = item.Header, + Date = item.Date, + Inverted = item.Inverted, + MIA = item.MIA, }; return rom; } @@ -333,10 +368,7 @@ namespace SabreTools.Serialization.CrossModel /// private static Sample ConvertFromInternalModel(Data.Models.Metadata.Sample item) { - var sample = new Sample - { - Name = item.ReadString(Data.Models.Metadata.Sample.NameKey), - }; + var sample = new Sample { Name = item.Name, }; return sample; } @@ -347,10 +379,10 @@ namespace SabreTools.Serialization.CrossModel { var softwareList = new Data.Models.Logiqx.SoftwareList { - Tag = item.ReadString(Data.Models.Metadata.SoftwareList.TagKey), - Name = item.ReadString(Data.Models.Metadata.SoftwareList.NameKey), - Status = item.ReadString(Data.Models.Metadata.SoftwareList.StatusKey), - Filter = item.ReadString(Data.Models.Metadata.SoftwareList.FilterKey), + Tag = item.Tag, + Name = item.Name, + Status = item.Status, + Filter = item.Filter, }; return softwareList; } diff --git a/SabreTools.Serialization.CrossModel/Logiqx.Serializer.cs b/SabreTools.Serialization.CrossModel/Logiqx.Serializer.cs index 316c3d77..918902bf 100644 --- a/SabreTools.Serialization.CrossModel/Logiqx.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/Logiqx.Serializer.cs @@ -13,7 +13,7 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new Data.Models.Metadata.MetadataFile { - [Data.Models.Metadata.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item), + Header = ConvertHeaderToInternalModel(item), }; var machines = new List(); @@ -27,7 +27,7 @@ namespace SabreTools.Serialization.CrossModel } if (machines.Count > 0) - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] = machines.ToArray(); + metadataFile.Machine = [.. machines]; return metadataFile; } @@ -37,11 +37,11 @@ namespace SabreTools.Serialization.CrossModel /// private static Data.Models.Metadata.Header ConvertHeaderToInternalModel(Datafile item) { - var header = item.Header is not null ? ConvertHeaderToInternalModel(item.Header) : []; + var header = item.Header is not null ? ConvertHeaderToInternalModel(item.Header) : new(); - header[Data.Models.Metadata.Header.BuildKey] = item.Build; - header[Data.Models.Metadata.Header.DebugKey] = item.Debug; - header[Data.Models.Metadata.Header.SchemaLocationKey] = item.SchemaLocation; + header.Build = item.Build; + header.Debug = item.Debug; + header.SchemaLocation = item.SchemaLocation; return header; } @@ -53,38 +53,38 @@ namespace SabreTools.Serialization.CrossModel { var header = new Data.Models.Metadata.Header { - [Data.Models.Metadata.Header.IdKey] = item.Id, - [Data.Models.Metadata.Header.NameKey] = item.Name, - [Data.Models.Metadata.Header.DescriptionKey] = item.Description, - [Data.Models.Metadata.Header.RootDirKey] = item.RootDir, - [Data.Models.Metadata.Header.CategoryKey] = item.Category, - [Data.Models.Metadata.Header.VersionKey] = item.Version, - [Data.Models.Metadata.Header.DateKey] = item.Date, - [Data.Models.Metadata.Header.AuthorKey] = item.Author, - [Data.Models.Metadata.Header.EmailKey] = item.Email, - [Data.Models.Metadata.Header.HomepageKey] = item.Homepage, - [Data.Models.Metadata.Header.UrlKey] = item.Url, - [Data.Models.Metadata.Header.CommentKey] = item.Comment, - [Data.Models.Metadata.Header.TypeKey] = item.Type, + Id = item.Id, + Name = item.Name, + Description = item.Description, + RootDir = item.RootDir, + Category = item.Category, + Version = item.Version, + Date = item.Date, + Author = item.Author, + Email = item.Email, + Homepage = item.Homepage, + Url = item.Url, + Comment = item.Comment, + Type = item.Type, }; if (item.ClrMamePro is not null) { - header[Data.Models.Metadata.Header.HeaderKey] = item.ClrMamePro.Header; - header[Data.Models.Metadata.Header.ForceMergingKey] = item.ClrMamePro.ForceMerging; - header[Data.Models.Metadata.Header.ForceNodumpKey] = item.ClrMamePro.ForceNodump; - header[Data.Models.Metadata.Header.ForcePackingKey] = item.ClrMamePro.ForcePacking; + header.HeaderSkipper = item.ClrMamePro.Header; + header.ForceMerging = item.ClrMamePro.ForceMerging; + header.ForceNodump = item.ClrMamePro.ForceNodump; + header.ForcePacking = item.ClrMamePro.ForcePacking; } if (item.RomCenter is not null) { - header[Data.Models.Metadata.Header.PluginKey] = item.RomCenter.Plugin; - header[Data.Models.Metadata.Header.RomModeKey] = item.RomCenter.RomMode; - header[Data.Models.Metadata.Header.BiosModeKey] = item.RomCenter.BiosMode; - header[Data.Models.Metadata.Header.SampleModeKey] = item.RomCenter.SampleMode; - header[Data.Models.Metadata.Header.LockRomModeKey] = item.RomCenter.LockRomMode; - header[Data.Models.Metadata.Header.LockBiosModeKey] = item.RomCenter.LockBiosMode; - header[Data.Models.Metadata.Header.LockSampleModeKey] = item.RomCenter.LockSampleMode; + header.Plugin = item.RomCenter.Plugin; + header.RomMode = item.RomCenter.RomMode; + header.BiosMode = item.RomCenter.BiosMode; + header.SampleMode = item.RomCenter.SampleMode; + header.LockRomMode = item.RomCenter.LockRomMode; + header.LockBiosMode = item.RomCenter.LockBiosMode; + header.LockSampleMode = item.RomCenter.LockSampleMode; } return header; @@ -126,57 +126,67 @@ namespace SabreTools.Serialization.CrossModel var machine = new Data.Models.Metadata.Machine { - [Data.Models.Metadata.Machine.NameKey] = machineName, - [Data.Models.Metadata.Machine.SourceFileKey] = item.SourceFile, - [Data.Models.Metadata.Machine.IsBiosKey] = item.IsBios, - [Data.Models.Metadata.Machine.IsDeviceKey] = item.IsDevice, - [Data.Models.Metadata.Machine.IsMechanicalKey] = item.IsMechanical, - [Data.Models.Metadata.Machine.CloneOfKey] = item.CloneOf, - [Data.Models.Metadata.Machine.RomOfKey] = item.RomOf, - [Data.Models.Metadata.Machine.SampleOfKey] = item.SampleOf, - [Data.Models.Metadata.Machine.BoardKey] = item.Board, - [Data.Models.Metadata.Machine.RebuildToKey] = item.RebuildTo, - [Data.Models.Metadata.Machine.IdKey] = item.Id, - [Data.Models.Metadata.Machine.CloneOfIdKey] = item.CloneOfId, - [Data.Models.Metadata.Machine.RunnableKey] = item.Runnable, - [Data.Models.Metadata.Machine.CommentKey] = item.Comment, - [Data.Models.Metadata.Machine.DescriptionKey] = item.Description, - [Data.Models.Metadata.Machine.YearKey] = item.Year, - [Data.Models.Metadata.Machine.ManufacturerKey] = item.Manufacturer, - [Data.Models.Metadata.Machine.PublisherKey] = item.Publisher, - [Data.Models.Metadata.Machine.CategoryKey] = item.Category, - [Data.Models.Metadata.Machine.TruripKey] = item.Trurip, + Board = item.Board, + Category = item.Category, + CloneOf = item.CloneOf ?? item.Trurip?.CloneOf, + CloneOfId = item.CloneOfId, + Comment = item.Comment, + CRC = item.Trurip?.CRC, + Description = item.Description, + Developer = item.Trurip?.Developer, + Enabled = item.Trurip?.Enabled, + Genre = item.Trurip?.Genre, + Id = item.Id, + IsBios = item.IsBios, + IsDevice = item.IsDevice, + IsMechanical = item.IsMechanical, + Manufacturer = item.Manufacturer, + Name = machineName, + Players = item.Trurip?.Players, + Publisher = item.Publisher ?? item.Trurip?.Publisher, + Ratings = item.Trurip?.Ratings, + RebuildTo = item.RebuildTo, + RelatedTo = item.Trurip?.RelatedTo, + RomOf = item.RomOf, + Runnable = item.Runnable, + SampleOf = item.SampleOf, + Score = item.Trurip?.Score, + Source = item.Trurip?.Source, + SourceFile = item.SourceFile, + Subgenre = item.Trurip?.Subgenre, + TitleID = item.Trurip?.TitleID, + Year = item.Year ?? item.Trurip?.Year, }; if (item.Release is not null && item.Release.Length > 0) - machine[Data.Models.Metadata.Machine.ReleaseKey] = Array.ConvertAll(item.Release, ConvertToInternalModel); + machine.Release = Array.ConvertAll(item.Release, ConvertToInternalModel); if (item.BiosSet is not null && item.BiosSet.Length > 0) - machine[Data.Models.Metadata.Machine.BiosSetKey] = Array.ConvertAll(item.BiosSet, ConvertToInternalModel); + machine.BiosSet = Array.ConvertAll(item.BiosSet, ConvertToInternalModel); if (item.Rom is not null && item.Rom.Length > 0) - machine[Data.Models.Metadata.Machine.RomKey] = Array.ConvertAll(item.Rom, ConvertToInternalModel); + machine.Rom = Array.ConvertAll(item.Rom, ConvertToInternalModel); if (item.Disk is not null && item.Disk.Length > 0) - machine[Data.Models.Metadata.Machine.DiskKey] = Array.ConvertAll(item.Disk, ConvertToInternalModel); + machine.Disk = Array.ConvertAll(item.Disk, ConvertToInternalModel); if (item.Media is not null && item.Media.Length > 0) - machine[Data.Models.Metadata.Machine.MediaKey] = Array.ConvertAll(item.Media, ConvertToInternalModel); + machine.Media = Array.ConvertAll(item.Media, ConvertToInternalModel); if (item.DeviceRef is not null && item.DeviceRef.Length > 0) - machine[Data.Models.Metadata.Machine.DeviceRefKey] = Array.ConvertAll(item.DeviceRef, ConvertToInternalModel); + machine.DeviceRef = Array.ConvertAll(item.DeviceRef, ConvertToInternalModel); if (item.Sample is not null && item.Sample.Length > 0) - machine[Data.Models.Metadata.Machine.SampleKey] = Array.ConvertAll(item.Sample, ConvertToInternalModel); + machine.Sample = Array.ConvertAll(item.Sample, ConvertToInternalModel); if (item.Archive is not null && item.Archive.Length > 0) - machine[Data.Models.Metadata.Machine.ArchiveKey] = Array.ConvertAll(item.Archive, ConvertToInternalModel); + machine.Archive = Array.ConvertAll(item.Archive, ConvertToInternalModel); if (item.Driver is not null) - machine[Data.Models.Metadata.Machine.DriverKey] = ConvertToInternalModel(item.Driver); + machine.Driver = ConvertToInternalModel(item.Driver); if (item.SoftwareList is not null && item.SoftwareList.Length > 0) - machine[Data.Models.Metadata.Machine.SoftwareListKey] = Array.ConvertAll(item.SoftwareList, ConvertToInternalModel); + machine.SoftwareList = Array.ConvertAll(item.SoftwareList, ConvertToInternalModel); return machine; } @@ -188,7 +198,7 @@ namespace SabreTools.Serialization.CrossModel { var archive = new Data.Models.Metadata.Archive { - [Data.Models.Metadata.Archive.NameKey] = item.Name, + Name = item.Name, }; return archive; } @@ -200,9 +210,9 @@ namespace SabreTools.Serialization.CrossModel { var biosset = new Data.Models.Metadata.BiosSet { - [Data.Models.Metadata.BiosSet.NameKey] = item.Name, - [Data.Models.Metadata.BiosSet.DescriptionKey] = item.Description, - [Data.Models.Metadata.BiosSet.DefaultKey] = item.Default, + Name = item.Name, + Description = item.Description, + Default = item.Default, }; return biosset; } @@ -214,7 +224,7 @@ namespace SabreTools.Serialization.CrossModel { var deviceRef = new Data.Models.Metadata.DeviceRef { - [Data.Models.Metadata.DeviceRef.NameKey] = item.Name, + Name = item.Name, }; return deviceRef; } @@ -226,12 +236,12 @@ namespace SabreTools.Serialization.CrossModel { var disk = new Data.Models.Metadata.Disk { - [Data.Models.Metadata.Disk.NameKey] = 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.StatusKey] = item.Status, - [Data.Models.Metadata.Disk.RegionKey] = item.Region, + Name = item.Name, + MD5 = item.MD5, + SHA1 = item.SHA1, + Merge = item.Merge, + Status = item.Status, + Region = item.Region, }; return disk; } @@ -243,14 +253,14 @@ namespace SabreTools.Serialization.CrossModel { var driver = new Data.Models.Metadata.Driver { - [Data.Models.Metadata.Driver.StatusKey] = item.Status, - [Data.Models.Metadata.Driver.EmulationKey] = item.Emulation, - [Data.Models.Metadata.Driver.CocktailKey] = item.Cocktail, - [Data.Models.Metadata.Driver.SaveStateKey] = item.SaveState, - [Data.Models.Metadata.Driver.RequiresArtworkKey] = item.RequiresArtwork, - [Data.Models.Metadata.Driver.UnofficialKey] = item.Unofficial, - [Data.Models.Metadata.Driver.NoSoundHardwareKey] = item.NoSoundHardware, - [Data.Models.Metadata.Driver.IncompleteKey] = item.Incomplete, + Status = item.Status, + Emulation = item.Emulation, + Cocktail = item.Cocktail, + SaveState = item.SaveState, + RequiresArtwork = item.RequiresArtwork, + Unofficial = item.Unofficial, + NoSoundHardware = item.NoSoundHardware, + Incomplete = item.Incomplete, }; return driver; } @@ -262,11 +272,11 @@ namespace SabreTools.Serialization.CrossModel { var media = new Data.Models.Metadata.Media { - [Data.Models.Metadata.Media.NameKey] = item.Name, - [Data.Models.Metadata.Media.MD5Key] = item.MD5, - [Data.Models.Metadata.Media.SHA1Key] = item.SHA1, - [Data.Models.Metadata.Media.SHA256Key] = item.SHA256, - [Data.Models.Metadata.Media.SpamSumKey] = item.SpamSum, + Name = item.Name, + MD5 = item.MD5, + SHA1 = item.SHA1, + SHA256 = item.SHA256, + SpamSum = item.SpamSum, }; return media; } @@ -278,11 +288,11 @@ namespace SabreTools.Serialization.CrossModel { var release = new Data.Models.Metadata.Release { - [Data.Models.Metadata.Release.NameKey] = item.Name, - [Data.Models.Metadata.Release.RegionKey] = item.Region, - [Data.Models.Metadata.Release.LanguageKey] = item.Language, - [Data.Models.Metadata.Release.DateKey] = item.Date, - [Data.Models.Metadata.Release.DefaultKey] = item.Default, + Name = item.Name, + Region = item.Region, + Language = item.Language, + Date = item.Date, + Default = item.Default, }; return release; } @@ -294,30 +304,30 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.NameKey] = item.Name, - [Data.Models.Metadata.Rom.SizeKey] = item.Size, - [Data.Models.Metadata.Rom.CRC16Key] = item.CRC16, - [Data.Models.Metadata.Rom.CRCKey] = item.CRC, - [Data.Models.Metadata.Rom.CRC64Key] = item.CRC64, - [Data.Models.Metadata.Rom.MD2Key] = item.MD2, - [Data.Models.Metadata.Rom.MD4Key] = item.MD4, - [Data.Models.Metadata.Rom.MD5Key] = item.MD5, - [Data.Models.Metadata.Rom.RIPEMD128Key] = item.RIPEMD128, - [Data.Models.Metadata.Rom.RIPEMD160Key] = item.RIPEMD160, - [Data.Models.Metadata.Rom.SHA1Key] = item.SHA1, - [Data.Models.Metadata.Rom.SHA256Key] = item.SHA256, - [Data.Models.Metadata.Rom.SHA384Key] = item.SHA384, - [Data.Models.Metadata.Rom.SHA512Key] = item.SHA512, - [Data.Models.Metadata.Rom.SpamSumKey] = item.SpamSum, - [Data.Models.Metadata.Rom.xxHash364Key] = item.xxHash364, - [Data.Models.Metadata.Rom.xxHash3128Key] = item.xxHash3128, - [Data.Models.Metadata.Rom.MergeKey] = item.Merge, - [Data.Models.Metadata.Rom.StatusKey] = item.Status, - [Data.Models.Metadata.Rom.SerialKey] = item.Serial, - [Data.Models.Metadata.Rom.HeaderKey] = item.Header, - [Data.Models.Metadata.Rom.DateKey] = item.Date, - [Data.Models.Metadata.Rom.InvertedKey] = item.Inverted, - [Data.Models.Metadata.Rom.MIAKey] = item.MIA, + Name = item.Name, + Size = item.Size, + CRC16 = item.CRC16, + CRC32 = item.CRC, + CRC64 = item.CRC64, + MD2 = item.MD2, + MD4 = item.MD4, + MD5 = item.MD5, + RIPEMD128 = item.RIPEMD128, + RIPEMD160 = item.RIPEMD160, + SHA1 = item.SHA1, + SHA256 = item.SHA256, + SHA384 = item.SHA384, + SHA512 = item.SHA512, + SpamSum = item.SpamSum, + xxHash364 = item.xxHash364, + xxHash3128 = item.xxHash3128, + Merge = item.Merge, + Status = item.Status, + Serial = item.Serial, + Header = item.Header, + Date = item.Date, + Inverted = item.Inverted, + MIA = item.MIA, }; return rom; } @@ -329,7 +339,7 @@ namespace SabreTools.Serialization.CrossModel { var sample = new Data.Models.Metadata.Sample { - [Data.Models.Metadata.Sample.NameKey] = item.Name, + Name = item.Name, }; return sample; } @@ -341,10 +351,10 @@ namespace SabreTools.Serialization.CrossModel { var softwareList = new Data.Models.Metadata.SoftwareList { - [Data.Models.Metadata.SoftwareList.TagKey] = item.Tag, - [Data.Models.Metadata.SoftwareList.NameKey] = item.Name, - [Data.Models.Metadata.SoftwareList.StatusKey] = item.Status, - [Data.Models.Metadata.SoftwareList.FilterKey] = item.Filter, + Tag = item.Tag, + Name = item.Name, + Status = item.Status, + Filter = item.Filter, }; return softwareList; } diff --git a/SabreTools.Serialization.CrossModel/M1.Deserializer.cs b/SabreTools.Serialization.CrossModel/M1.Deserializer.cs index fed470ee..13fe1576 100644 --- a/SabreTools.Serialization.CrossModel/M1.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/M1.Deserializer.cs @@ -10,10 +10,10 @@ namespace SabreTools.Serialization.CrossModel if (obj is null) return null; - var header = obj.Read(Data.Models.Metadata.MetadataFile.HeaderKey); + var header = obj.Header; var m1 = header is not null ? ConvertM1FromInternalModel(header) : new Data.Models.Listxml.M1(); - var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = obj.Machine; if (machines is not null && machines.Length > 0) m1.Game = Array.ConvertAll(machines, Listxml.ConvertMachineFromInternalModel); @@ -27,7 +27,7 @@ namespace SabreTools.Serialization.CrossModel { var m1 = new Data.Models.Listxml.M1 { - Version = item.ReadString(Data.Models.Metadata.Header.VersionKey), + Version = item.Version, }; return m1; } diff --git a/SabreTools.Serialization.CrossModel/M1.Serializer.cs b/SabreTools.Serialization.CrossModel/M1.Serializer.cs index fb9bd468..26c28362 100644 --- a/SabreTools.Serialization.CrossModel/M1.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/M1.Serializer.cs @@ -12,14 +12,11 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new Data.Models.Metadata.MetadataFile { - [Data.Models.Metadata.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item), + Header = ConvertHeaderToInternalModel(item), }; if (item?.Game is not null && item.Game.Length > 0) - { - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] - = Array.ConvertAll(item.Game, Listxml.ConvertMachineToInternalModel); - } + metadataFile.Machine = Array.ConvertAll(item.Game, Listxml.ConvertMachineToInternalModel); return metadataFile; } @@ -31,7 +28,7 @@ namespace SabreTools.Serialization.CrossModel { var header = new Data.Models.Metadata.Header { - [Data.Models.Metadata.Header.VersionKey] = item.Version, + Version = item.Version, }; return header; } diff --git a/SabreTools.Serialization.CrossModel/Mess.Deserializer.cs b/SabreTools.Serialization.CrossModel/Mess.Deserializer.cs index faf51440..7ee53aa4 100644 --- a/SabreTools.Serialization.CrossModel/Mess.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/Mess.Deserializer.cs @@ -10,10 +10,10 @@ namespace SabreTools.Serialization.CrossModel if (obj is null) return null; - var header = obj.Read(Data.Models.Metadata.MetadataFile.HeaderKey); + var header = obj.Header; var m1 = header is not null ? ConvertMessFromInternalModel(header) : new Data.Models.Listxml.Mess(); - var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = obj.Machine; if (machines is not null && machines.Length > 0) m1.Game = Array.ConvertAll(machines, Listxml.ConvertMachineFromInternalModel); @@ -27,7 +27,7 @@ namespace SabreTools.Serialization.CrossModel { var m1 = new Data.Models.Listxml.Mess { - Version = item.ReadString(Data.Models.Metadata.Header.VersionKey), + Version = item.Version, }; return m1; } diff --git a/SabreTools.Serialization.CrossModel/Mess.Serializer.cs b/SabreTools.Serialization.CrossModel/Mess.Serializer.cs index b35d23a6..a148c625 100644 --- a/SabreTools.Serialization.CrossModel/Mess.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/Mess.Serializer.cs @@ -12,14 +12,11 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new Data.Models.Metadata.MetadataFile { - [Data.Models.Metadata.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item), + Header = ConvertHeaderToInternalModel(item), }; if (item?.Game is not null && item.Game.Length > 0) - { - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] - = Array.ConvertAll(item.Game, Listxml.ConvertMachineToInternalModel); - } + metadataFile.Machine = Array.ConvertAll(item.Game, Listxml.ConvertMachineToInternalModel); return metadataFile; } @@ -31,7 +28,7 @@ namespace SabreTools.Serialization.CrossModel { var header = new Data.Models.Metadata.Header { - [Data.Models.Metadata.Header.VersionKey] = item.Version, + Version = item.Version, }; return header; } diff --git a/SabreTools.Serialization.CrossModel/OfflineList.Deserializer.cs b/SabreTools.Serialization.CrossModel/OfflineList.Deserializer.cs index 02e1b261..c12ea698 100644 --- a/SabreTools.Serialization.CrossModel/OfflineList.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/OfflineList.Deserializer.cs @@ -11,10 +11,10 @@ namespace SabreTools.Serialization.CrossModel if (obj is null) return null; - var header = obj.Read(Data.Models.Metadata.MetadataFile.HeaderKey); + var header = obj.Header; var dat = header is not null ? ConvertHeaderFromInternalModel(header) : new Dat(); - var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = obj.Machine; if (machines is not null && machines.Length > 0) { dat.Games = new Games @@ -33,44 +33,39 @@ namespace SabreTools.Serialization.CrossModel { var dat = new Dat { - NoNamespaceSchemaLocation = item.ReadString(Data.Models.Metadata.Header.SchemaLocationKey), + NoNamespaceSchemaLocation = item.SchemaLocation, }; - if (item.ContainsKey(Data.Models.Metadata.Header.NameKey) - || item.ContainsKey(Data.Models.Metadata.Header.ImFolderKey) - || item.ContainsKey(Data.Models.Metadata.Header.DatVersionKey) - || item.ContainsKey(Data.Models.Metadata.Header.SystemKey) - || item.ContainsKey(Data.Models.Metadata.Header.ScreenshotsWidthKey) - || item.ContainsKey(Data.Models.Metadata.Header.ScreenshotsHeightKey) - || item.ContainsKey(Data.Models.Metadata.Header.InfosKey) - || item.ContainsKey(Data.Models.Metadata.Header.CanOpenKey) - || item.ContainsKey(Data.Models.Metadata.Header.NewDatKey) - || item.ContainsKey(Data.Models.Metadata.Header.SearchKey) - || item.ContainsKey(Data.Models.Metadata.Header.RomTitleKey)) + if (item.Name is not null + || item.ImFolder is not null + || item.DatVersion is not null + || item.System is not null + || item.ScreenshotsHeight is not null + || item.ScreenshotsWidth is not null + || item.Infos is not null + || item.CanOpen is not null + || item.NewDat is not null + || item.Search is not null + || item.RomTitle is not null) { dat.Configuration = new Configuration { - DatName = item.ReadString(Data.Models.Metadata.Header.NameKey), - ImFolder = item.ReadString(Data.Models.Metadata.Header.ImFolderKey), - DatVersion = item.ReadString(Data.Models.Metadata.Header.DatVersionKey), - System = item.ReadString(Data.Models.Metadata.Header.SystemKey), - ScreenshotsWidth = item.ReadString(Data.Models.Metadata.Header.ScreenshotsWidthKey), - ScreenshotsHeight = item.ReadString(Data.Models.Metadata.Header.ScreenshotsHeightKey), - Infos = item.Read(Data.Models.Metadata.Header.InfosKey), - CanOpen = item.Read(Data.Models.Metadata.Header.CanOpenKey), - NewDat = item.Read(Data.Models.Metadata.Header.NewDatKey), - Search = item.Read(Data.Models.Metadata.Header.SearchKey), - RomTitle = item.ReadString(Data.Models.Metadata.Header.RomTitleKey), + DatName = item.Name, + ImFolder = item.ImFolder, + DatVersion = item.DatVersion, + System = item.System, + ScreenshotsWidth = item.ScreenshotsHeight, + ScreenshotsHeight = item.ScreenshotsWidth, + Infos = item.Infos, + CanOpen = item.CanOpen, + NewDat = item.NewDat, + Search = item.Search, + RomTitle = item.RomTitle, }; } - if (item.ContainsKey(Data.Models.Metadata.Header.ImagesKey)) - { - dat.GUI = new GUI - { - Images = item.Read(Data.Models.Metadata.Header.ImagesKey), - }; - } + if (item.Images is not null) + dat.GUI = new GUI { Images = item.Images }; return dat; } @@ -82,25 +77,25 @@ namespace SabreTools.Serialization.CrossModel { var game = new Game { - ImageNumber = item.ReadString(Data.Models.Metadata.Machine.ImageNumberKey), - ReleaseNumber = item.ReadString(Data.Models.Metadata.Machine.ReleaseNumberKey), - Title = item.ReadString(Data.Models.Metadata.Machine.NameKey), - SaveType = item.ReadString(Data.Models.Metadata.Machine.SaveTypeKey), - Publisher = item.ReadString(Data.Models.Metadata.Machine.PublisherKey), - Location = item.ReadString(Data.Models.Metadata.Machine.LocationKey), - SourceRom = item.ReadString(Data.Models.Metadata.Machine.SourceRomKey), - Language = item.ReadString(Data.Models.Metadata.Machine.LanguageKey), - Im1CRC = item.ReadString(Data.Models.Metadata.Machine.Im1CRCKey), - Im2CRC = item.ReadString(Data.Models.Metadata.Machine.Im2CRCKey), - Comment = item.ReadString(Data.Models.Metadata.Machine.CommentKey), - DuplicateID = item.ReadString(Data.Models.Metadata.Machine.DuplicateIDKey), + ImageNumber = item.ImageNumber, + ReleaseNumber = item.ReleaseNumber, + Title = item.Name, + SaveType = item.SaveType, + Publisher = item.Publisher, + Location = item.Location, + SourceRom = item.SourceRom, + Language = item.Language, + Im1CRC = item.Im1CRC, + Im2CRC = item.Im2CRC, + Comment = item.Comment is null ? null : string.Join(", ", item.Comment), + DuplicateID = item.DuplicateID, }; - var roms = item.Read(Data.Models.Metadata.Machine.RomKey); + var roms = item.Rom; if (roms is not null && roms.Length > 0) { - var romSizes = Array.ConvertAll(roms, r => r.ReadLong(Data.Models.Metadata.Rom.SizeKey) ?? -1); - game.RomSize = Array.Find(romSizes, s => s > -1).ToString(); + var romSizes = Array.ConvertAll(roms, r => r.Size ?? -1); + game.RomSize = Array.Find(romSizes, s => s > -1); var romCRCs = Array.ConvertAll(roms, ConvertFromInternalModel); game.Files = new Files { RomCRC = romCRCs }; @@ -116,8 +111,8 @@ namespace SabreTools.Serialization.CrossModel { var fileRomCRC = new FileRomCRC { - Extension = item.ReadString(Data.Models.Metadata.Rom.ExtensionKey), - Content = item.ReadString(Data.Models.Metadata.Rom.CRCKey), + Extension = item.Extension, + Content = item.CRC32, }; return fileRomCRC; } diff --git a/SabreTools.Serialization.CrossModel/OfflineList.Serializer.cs b/SabreTools.Serialization.CrossModel/OfflineList.Serializer.cs index 1b3f1139..68062497 100644 --- a/SabreTools.Serialization.CrossModel/OfflineList.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/OfflineList.Serializer.cs @@ -13,14 +13,11 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new Data.Models.Metadata.MetadataFile { - [Data.Models.Metadata.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item), + Header = ConvertHeaderToInternalModel(item), }; if (item?.Games?.Game is not null && item.Games.Game.Length > 0) - { - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] - = Array.ConvertAll(item.Games.Game, ConvertMachineToInternalModel); - } + metadataFile.Machine = Array.ConvertAll(item.Games.Game, ConvertMachineToInternalModel); return metadataFile; } @@ -32,28 +29,26 @@ namespace SabreTools.Serialization.CrossModel { var header = new Data.Models.Metadata.Header { - [Data.Models.Metadata.Header.SchemaLocationKey] = item.NoNamespaceSchemaLocation, + SchemaLocation = item.NoNamespaceSchemaLocation, }; if (item.Configuration is not null) { - header[Data.Models.Metadata.Header.NameKey] = item.Configuration.DatName; - header[Data.Models.Metadata.Header.ImFolderKey] = item.Configuration.ImFolder; - header[Data.Models.Metadata.Header.DatVersionKey] = item.Configuration.DatVersion; - header[Data.Models.Metadata.Header.SystemKey] = item.Configuration.System; - header[Data.Models.Metadata.Header.ScreenshotsWidthKey] = item.Configuration.ScreenshotsWidth; - header[Data.Models.Metadata.Header.ScreenshotsHeightKey] = item.Configuration.ScreenshotsHeight; - header[Data.Models.Metadata.Header.InfosKey] = item.Configuration.Infos; - header[Data.Models.Metadata.Header.CanOpenKey] = item.Configuration.CanOpen; - header[Data.Models.Metadata.Header.NewDatKey] = item.Configuration.NewDat; - header[Data.Models.Metadata.Header.SearchKey] = item.Configuration.Search; - header[Data.Models.Metadata.Header.RomTitleKey] = item.Configuration.RomTitle; + header.Name = item.Configuration.DatName; + header.ImFolder = item.Configuration.ImFolder; + header.DatVersion = item.Configuration.DatVersion; + header.System = item.Configuration.System; + header.ScreenshotsHeight = item.Configuration.ScreenshotsWidth; + header.ScreenshotsWidth = item.Configuration.ScreenshotsHeight; + header.Infos = item.Configuration.Infos; + header.CanOpen = item.Configuration.CanOpen; + header.NewDat = item.Configuration.NewDat; + header.Search = item.Configuration.Search; + header.RomTitle = item.Configuration.RomTitle; } if (item.GUI is not null) - { - header[Data.Models.Metadata.Header.ImagesKey] = item.GUI.Images; - } + header.Images = item.GUI.Images; return header; } @@ -65,27 +60,27 @@ namespace SabreTools.Serialization.CrossModel { var machine = new Data.Models.Metadata.Machine { - [Data.Models.Metadata.Machine.ImageNumberKey] = item.ImageNumber, - [Data.Models.Metadata.Machine.ReleaseNumberKey] = item.ReleaseNumber, - [Data.Models.Metadata.Machine.NameKey] = item.Title, - [Data.Models.Metadata.Machine.SaveTypeKey] = item.SaveType, - [Data.Models.Metadata.Machine.PublisherKey] = item.Publisher, - [Data.Models.Metadata.Machine.LocationKey] = item.Location, - [Data.Models.Metadata.Machine.SourceRomKey] = item.SourceRom, - [Data.Models.Metadata.Machine.LanguageKey] = item.Language, - [Data.Models.Metadata.Machine.Im1CRCKey] = item.Im1CRC, - [Data.Models.Metadata.Machine.Im2CRCKey] = item.Im2CRC, - [Data.Models.Metadata.Machine.CommentKey] = item.Comment, - [Data.Models.Metadata.Machine.DuplicateIDKey] = item.DuplicateID, + ImageNumber = item.ImageNumber, + ReleaseNumber = item.ReleaseNumber, + Name = item.Title, + SaveType = item.SaveType, + Publisher = item.Publisher, + Location = item.Location, + SourceRom = item.SourceRom, + Language = item.Language, + Im1CRC = item.Im1CRC, + Im2CRC = item.Im2CRC, + Comment = item.Comment is null ? null : [item.Comment], + DuplicateID = item.DuplicateID, }; if (item.Files?.RomCRC is not null && item.Files.RomCRC.Length > 0) { - machine[Data.Models.Metadata.Machine.RomKey] + machine.Rom = Array.ConvertAll(item.Files.RomCRC, romCRC => { var rom = ConvertToInternalModel(romCRC); - rom[Data.Models.Metadata.Rom.SizeKey] = item.RomSize; + rom.Size = item.RomSize; return rom; }); } @@ -100,8 +95,8 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.ExtensionKey] = item.Extension, - [Data.Models.Metadata.Rom.CRCKey] = item.Content, + Extension = item.Extension, + CRC32 = item.Content, }; return rom; } diff --git a/SabreTools.Serialization.CrossModel/OpenMSX.Deserializer.cs b/SabreTools.Serialization.CrossModel/OpenMSX.Deserializer.cs index adcea623..2ac846be 100644 --- a/SabreTools.Serialization.CrossModel/OpenMSX.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/OpenMSX.Deserializer.cs @@ -11,10 +11,10 @@ namespace SabreTools.Serialization.CrossModel if (obj is null) return null; - var header = obj.Read(Data.Models.Metadata.MetadataFile.HeaderKey); + var header = obj.Header; var softwareDb = header is not null ? ConvertHeaderFromInternalModel(header) : new SoftwareDb(); - var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = obj.Machine; if (machines is not null && machines.Length > 0) softwareDb.Software = Array.ConvertAll(machines, ConvertMachineFromInternalModel); @@ -28,7 +28,7 @@ namespace SabreTools.Serialization.CrossModel { var softwareDb = new SoftwareDb { - Timestamp = item.ReadString(Data.Models.Metadata.Header.TimestampKey), + Timestamp = item.Timestamp, }; return softwareDb; } @@ -40,15 +40,15 @@ namespace SabreTools.Serialization.CrossModel { var game = new Software { - Title = item.ReadString(Data.Models.Metadata.Machine.NameKey), - GenMSXID = item.ReadString(Data.Models.Metadata.Machine.GenMSXIDKey), - System = item.ReadString(Data.Models.Metadata.Machine.SystemKey), - Company = item.ReadString(Data.Models.Metadata.Machine.CompanyKey), - Year = item.ReadString(Data.Models.Metadata.Machine.YearKey), - Country = item.ReadString(Data.Models.Metadata.Machine.CountryKey), + Title = item.Name, + GenMSXID = item.GenMSXID, + System = item.System, + Company = item.Company, + Year = item.Year, + Country = item.Country, }; - var dumps = item.Read(Data.Models.Metadata.Machine.DumpKey); + var dumps = item.Dump; if (dumps is not null && dumps.Length > 0) game.Dump = Array.ConvertAll(dumps, ConvertFromInternalModel); @@ -62,19 +62,19 @@ namespace SabreTools.Serialization.CrossModel { var dump = new Dump(); - var original = item.Read(Data.Models.Metadata.Dump.OriginalKey); + var original = item.Original; if (original is not null) dump.Original = ConvertFromInternalModel(original); - var rom = item.Read(Data.Models.Metadata.Dump.RomKey); + var rom = item.Rom; if (rom is not null) dump.Rom = ConvertRomFromInternalModel(rom); - var megaRom = item.Read(Data.Models.Metadata.Dump.MegaRomKey); + var megaRom = item.MegaRom; if (megaRom is not null) dump.Rom = ConvertMegaRomFromInternalModel(megaRom); - var sccPlusCart = item.Read(Data.Models.Metadata.Dump.SCCPlusCartKey); + var sccPlusCart = item.SCCPlusCart; if (sccPlusCart is not null) dump.Rom = ConvertSCCPlusCartFromInternalModel(sccPlusCart); @@ -88,10 +88,10 @@ namespace SabreTools.Serialization.CrossModel { var megaRom = new MegaRom { - Start = item.ReadString(Data.Models.Metadata.Rom.StartKey), - Type = item.ReadString(Data.Models.Metadata.Rom.OpenMSXType), - Hash = item.ReadString(Data.Models.Metadata.Rom.SHA1Key), - Remark = item.ReadString(Data.Models.Metadata.Rom.RemarkKey), + Start = item.Start, + Type = item.OpenMSXType, + Hash = item.SHA1, + Remark = item.Remark, }; return megaRom; } @@ -103,8 +103,8 @@ namespace SabreTools.Serialization.CrossModel { var original = new Original { - Value = item.ReadString(Data.Models.Metadata.Original.ValueKey), - Content = item.ReadString(Data.Models.Metadata.Original.ContentKey), + Value = item.Value, + Content = item.Content, }; return original; } @@ -116,10 +116,10 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Rom { - Start = item.ReadString(Data.Models.Metadata.Rom.StartKey), - Type = item.ReadString(Data.Models.Metadata.Rom.OpenMSXType), - Hash = item.ReadString(Data.Models.Metadata.Rom.SHA1Key), - Remark = item.ReadString(Data.Models.Metadata.Rom.RemarkKey), + Start = item.Start, + Type = item.OpenMSXType, + Hash = item.SHA1, + Remark = item.Remark, }; return rom; } @@ -131,10 +131,10 @@ namespace SabreTools.Serialization.CrossModel { var sccPlusCart = new SCCPlusCart { - Start = item.ReadString(Data.Models.Metadata.Rom.StartKey), - Type = item.ReadString(Data.Models.Metadata.Rom.OpenMSXType), - Hash = item.ReadString(Data.Models.Metadata.Rom.SHA1Key), - Remark = item.ReadString(Data.Models.Metadata.Rom.RemarkKey), + Start = item.Start, + Type = item.OpenMSXType, + Hash = item.SHA1, + Remark = item.Remark, }; return sccPlusCart; } diff --git a/SabreTools.Serialization.CrossModel/OpenMSX.Serializer.cs b/SabreTools.Serialization.CrossModel/OpenMSX.Serializer.cs index c86f5ee1..d3c5b8ef 100644 --- a/SabreTools.Serialization.CrossModel/OpenMSX.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/OpenMSX.Serializer.cs @@ -13,14 +13,11 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new Data.Models.Metadata.MetadataFile { - [Data.Models.Metadata.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item), + Header = ConvertHeaderToInternalModel(item), }; if (item?.Software is not null && item.Software.Length > 0) - { - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] - = Array.ConvertAll(item.Software, ConvertMachineToInternalModel); - } + metadataFile.Machine = Array.ConvertAll(item.Software, ConvertMachineToInternalModel); return metadataFile; } @@ -32,7 +29,7 @@ namespace SabreTools.Serialization.CrossModel { var header = new Data.Models.Metadata.Header { - [Data.Models.Metadata.Header.TimestampKey] = item.Timestamp, + Timestamp = item.Timestamp, }; return header; } @@ -44,19 +41,16 @@ namespace SabreTools.Serialization.CrossModel { var machine = new Data.Models.Metadata.Machine { - [Data.Models.Metadata.Machine.NameKey] = item.Title, - [Data.Models.Metadata.Machine.GenMSXIDKey] = item.GenMSXID, - [Data.Models.Metadata.Machine.SystemKey] = item.System, - [Data.Models.Metadata.Machine.CompanyKey] = item.Company, - [Data.Models.Metadata.Machine.YearKey] = item.Year, - [Data.Models.Metadata.Machine.CountryKey] = item.Country, + Name = item.Title, + GenMSXID = item.GenMSXID, + System = item.System, + Company = item.Company, + Year = item.Year, + Country = item.Country, }; if (item.Dump is not null && item.Dump.Length > 0) - { - machine[Data.Models.Metadata.Machine.DumpKey] - = Array.ConvertAll(item.Dump, ConvertToInternalModel); - } + machine.Dump = Array.ConvertAll(item.Dump, ConvertToInternalModel); return machine; } @@ -69,22 +63,22 @@ namespace SabreTools.Serialization.CrossModel var dump = new Data.Models.Metadata.Dump(); if (item.Original is not null) - dump[Data.Models.Metadata.Dump.OriginalKey] = ConvertToInternalModel(item.Original); + dump.Original = ConvertToInternalModel(item.Original); if (item.Rom is not null) { switch (item.Rom) { case Rom rom: - dump[Data.Models.Metadata.Dump.RomKey] = ConvertToInternalModel(rom); + dump.Rom = ConvertToInternalModel(rom); break; case MegaRom megaRom: - dump[Data.Models.Metadata.Dump.MegaRomKey] = ConvertToInternalModel(megaRom); + dump.MegaRom = ConvertToInternalModel(megaRom); break; case SCCPlusCart sccPlusCart: - dump[Data.Models.Metadata.Dump.SCCPlusCartKey] = ConvertToInternalModel(sccPlusCart); + dump.SCCPlusCart = ConvertToInternalModel(sccPlusCart); break; default: @@ -103,8 +97,8 @@ namespace SabreTools.Serialization.CrossModel { var original = new Data.Models.Metadata.Original { - [Data.Models.Metadata.Original.ValueKey] = item.Value, - [Data.Models.Metadata.Original.ContentKey] = item.Content, + Value = item.Value, + Content = item.Content, }; return original; } @@ -116,10 +110,10 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.StartKey] = item.Start, - [Data.Models.Metadata.Rom.OpenMSXType] = item.Type, - [Data.Models.Metadata.Rom.SHA1Key] = item.Hash, - [Data.Models.Metadata.Rom.RemarkKey] = item.Remark, + Start = item.Start, + OpenMSXType = item.Type, + SHA1 = item.Hash, + Remark = item.Remark, }; return rom; } diff --git a/SabreTools.Serialization.CrossModel/RomCenter.Deserializer.cs b/SabreTools.Serialization.CrossModel/RomCenter.Deserializer.cs index afd41443..ff40b851 100644 --- a/SabreTools.Serialization.CrossModel/RomCenter.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/RomCenter.Deserializer.cs @@ -12,10 +12,10 @@ namespace SabreTools.Serialization.CrossModel if (obj is null) return null; - var header = obj.Read(Data.Models.Metadata.MetadataFile.HeaderKey); + var header = obj.Header; var metadataFile = header is not null ? ConvertHeaderFromInternalModel(header) : new MetadataFile(); - var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = obj.Machine; var items = new List(); foreach (var machine in machines ?? []) { @@ -33,46 +33,45 @@ namespace SabreTools.Serialization.CrossModel { var metadataFile = new MetadataFile(); - if (item.ContainsKey(Data.Models.Metadata.Header.AuthorKey) - || item.ContainsKey(Data.Models.Metadata.Header.VersionKey) - || item.ContainsKey(Data.Models.Metadata.Header.EmailKey) - || item.ContainsKey(Data.Models.Metadata.Header.HomepageKey) - || item.ContainsKey(Data.Models.Metadata.Header.UrlKey) - || item.ContainsKey(Data.Models.Metadata.Header.DateKey) - || item.ContainsKey(Data.Models.Metadata.Header.CommentKey)) + if (item.Author != null + || item.Version != null + || item.Email != null + || item.Homepage != null + || item.Url != null + || item.Date != null + || item.Comment != null) { metadataFile.Credits = new Credits { - Author = item.ReadString(Data.Models.Metadata.Header.AuthorKey), - Version = item.ReadString(Data.Models.Metadata.Header.VersionKey), - Email = item.ReadString(Data.Models.Metadata.Header.EmailKey), - Homepage = item.ReadString(Data.Models.Metadata.Header.HomepageKey), - Url = item.ReadString(Data.Models.Metadata.Header.UrlKey), - Date = item.ReadString(Data.Models.Metadata.Header.DateKey), - Comment = item.ReadString(Data.Models.Metadata.Header.CommentKey), + Author = item.Author, + Version = item.Version, + Email = item.Email, + Homepage = item.Homepage, + Url = item.Url, + Date = item.Date, + Comment = item.Comment, }; } - if (item.ContainsKey(Data.Models.Metadata.Header.DatVersionKey) - || item.ContainsKey(Data.Models.Metadata.Header.PluginKey) - || item.ContainsKey(Data.Models.Metadata.Header.ForceMergingKey)) + if (item.DatVersion != null + || item.Plugin != null + || item.ForceMerging != Data.Models.Metadata.MergingFlag.None) { metadataFile.Dat = new Dat { - Version = item.ReadString(Data.Models.Metadata.Header.DatVersionKey), - Plugin = item.ReadString(Data.Models.Metadata.Header.PluginKey), - Split = item.ReadString(Data.Models.Metadata.Header.ForceMergingKey) == "split" ? "yes" : "no", - Merge = item.ReadString(Data.Models.Metadata.Header.ForceMergingKey) == "merge" ? "yes" : "no", + Version = item.DatVersion, + Plugin = item.Plugin, + Split = item.ForceMerging == Data.Models.Metadata.MergingFlag.Split ? "yes" : "no", + Merge = item.ForceMerging == Data.Models.Metadata.MergingFlag.Merged ? "yes" : "no", }; } - if (item.ContainsKey(Data.Models.Metadata.Header.RefNameKey) - || item.ContainsKey(Data.Models.Metadata.Header.EmulatorVersionKey)) + if (item.RefName != null || item.EmulatorVersion != null) { metadataFile.Emulator = new Emulator { - RefName = item.ReadString(Data.Models.Metadata.Header.RefNameKey), - Version = item.ReadString(Data.Models.Metadata.Header.EmulatorVersionKey), + RefName = item.RefName, + Version = item.EmulatorVersion, }; } @@ -84,7 +83,7 @@ namespace SabreTools.Serialization.CrossModel /// private static Rom[] ConvertMachineFromInternalModel(Data.Models.Metadata.Machine item) { - var roms = item.Read(Data.Models.Metadata.Machine.RomKey); + var roms = item.Rom; if (roms is null) return []; @@ -98,15 +97,15 @@ namespace SabreTools.Serialization.CrossModel { var row = new Rom { - ParentName = parent.ReadString(Data.Models.Metadata.Machine.CloneOfKey), + ParentName = parent.CloneOf, //ParentDescription = parent.ReadString(Data.Models.Metadata.Machine.ParentDescriptionKey), // This is unmappable - GameName = parent.ReadString(Data.Models.Metadata.Machine.NameKey), - GameDescription = parent.ReadString(Data.Models.Metadata.Machine.DescriptionKey), - RomName = item.ReadString(Data.Models.Metadata.Rom.NameKey), - RomCRC = item.ReadString(Data.Models.Metadata.Rom.CRCKey), - RomSize = item.ReadString(Data.Models.Metadata.Rom.SizeKey), - RomOf = parent.ReadString(Data.Models.Metadata.Machine.RomOfKey), - MergeName = item.ReadString(Data.Models.Metadata.Rom.MergeKey), + GameName = parent.Name, + GameDescription = parent.Description, + RomName = item.Name, + RomCRC = item.CRC32, + RomSize = item.Size, + RomOf = parent.RomOf, + MergeName = item.Merge, }; return row; } diff --git a/SabreTools.Serialization.CrossModel/RomCenter.Serializer.cs b/SabreTools.Serialization.CrossModel/RomCenter.Serializer.cs index 214a66be..d7a52ca9 100644 --- a/SabreTools.Serialization.CrossModel/RomCenter.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/RomCenter.Serializer.cs @@ -13,14 +13,11 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new Data.Models.Metadata.MetadataFile { - [Data.Models.Metadata.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(obj), + Header = ConvertHeaderToInternalModel(obj), }; if (obj?.Games?.Rom is not null && obj.Games.Rom.Length > 0) - { - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] - = Array.ConvertAll(obj.Games.Rom, ConvertMachineToInternalModel); - } + metadataFile.Machine = Array.ConvertAll(obj.Games.Rom, ConvertMachineToInternalModel); return metadataFile; } @@ -34,30 +31,30 @@ namespace SabreTools.Serialization.CrossModel if (item.Credits is not null) { - header[Data.Models.Metadata.Header.AuthorKey] = item.Credits.Author; - header[Data.Models.Metadata.Header.VersionKey] = item.Credits.Version; - header[Data.Models.Metadata.Header.EmailKey] = item.Credits.Email; - header[Data.Models.Metadata.Header.HomepageKey] = item.Credits.Homepage; - header[Data.Models.Metadata.Header.UrlKey] = item.Credits.Url; - header[Data.Models.Metadata.Header.DateKey] = item.Credits.Date; - header[Data.Models.Metadata.Header.CommentKey] = item.Credits.Comment; + header.Author = item.Credits.Author; + header.Version = item.Credits.Version; + header.Email = item.Credits.Email; + header.Homepage = item.Credits.Homepage; + header.Url = item.Credits.Url; + header.Date = item.Credits.Date; + header.Comment = item.Credits.Comment; } if (item.Dat is not null) { - header[Data.Models.Metadata.Header.DatVersionKey] = item.Dat.Version; - header[Data.Models.Metadata.Header.PluginKey] = item.Dat.Plugin; + header.DatVersion = item.Dat.Version; + header.Plugin = item.Dat.Plugin; if (item.Dat.Split == "yes" || item.Dat.Split == "1") - header[Data.Models.Metadata.Header.ForceMergingKey] = "split"; + header.ForceMerging = Data.Models.Metadata.MergingFlag.Split; else if (item.Dat.Merge == "yes" || item.Dat.Merge == "1") - header[Data.Models.Metadata.Header.ForceMergingKey] = "merge"; + header.ForceMerging = Data.Models.Metadata.MergingFlag.Merged; } if (item.Emulator is not null) { - header[Data.Models.Metadata.Header.RefNameKey] = item.Emulator.RefName; - header[Data.Models.Metadata.Header.EmulatorVersionKey] = item.Emulator.Version; + header.RefName = item.Emulator.RefName; + header.EmulatorVersion = item.Emulator.Version; } return header; @@ -70,12 +67,12 @@ namespace SabreTools.Serialization.CrossModel { var machine = new Data.Models.Metadata.Machine { - [Data.Models.Metadata.Machine.RomOfKey] = item.RomOf, - [Data.Models.Metadata.Machine.CloneOfKey] = item.ParentName, - //[Data.Models.Metadata.Machine.ParentDescriptionKey] = item.ParentDescription, // This is unmappable - [Data.Models.Metadata.Machine.NameKey] = item.GameName, - [Data.Models.Metadata.Machine.DescriptionKey] = item.GameDescription, - [Data.Models.Metadata.Machine.RomKey] = new Data.Models.Metadata.Rom[] { ConvertToInternalModel(item) }, + RomOf = item.RomOf, + CloneOf = item.ParentName, + //.ParentDescription = item.ParentDescription, // This is unmappable + Name = item.GameName, + Description = item.GameDescription, + Rom = new Data.Models.Metadata.Rom[] { ConvertToInternalModel(item) }, }; return machine; @@ -88,10 +85,10 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.NameKey] = item.RomName, - [Data.Models.Metadata.Rom.CRCKey] = item.RomCRC, - [Data.Models.Metadata.Rom.SizeKey] = item.RomSize, - [Data.Models.Metadata.Rom.MergeKey] = item.MergeName, + Name = item.RomName, + CRC32 = item.RomCRC, + Size = item.RomSize, + Merge = item.MergeName, }; return rom; } diff --git a/SabreTools.Serialization.CrossModel/SabreTools.Serialization.CrossModel.csproj b/SabreTools.Serialization.CrossModel/SabreTools.Serialization.CrossModel.csproj index ed57e9a1..d1ee4aa5 100644 --- a/SabreTools.Serialization.CrossModel/SabreTools.Serialization.CrossModel.csproj +++ b/SabreTools.Serialization.CrossModel/SabreTools.Serialization.CrossModel.csproj @@ -35,6 +35,7 @@ + diff --git a/SabreTools.Serialization.CrossModel/SeparatedValue.Deserializer.cs b/SabreTools.Serialization.CrossModel/SeparatedValue.Deserializer.cs index e6404c6b..6f8387f7 100644 --- a/SabreTools.Serialization.CrossModel/SeparatedValue.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/SeparatedValue.Deserializer.cs @@ -12,10 +12,10 @@ namespace SabreTools.Serialization.CrossModel if (obj is null) return null; - var header = obj.Read(Data.Models.Metadata.MetadataFile.HeaderKey); + var header = obj.Header; var metadataFile = header is not null ? ConvertHeaderFromInternalModel(header) : new MetadataFile(); - var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = obj.Machine; var items = new List(); foreach (var machine in machines ?? []) { @@ -33,7 +33,7 @@ namespace SabreTools.Serialization.CrossModel { var metadataFile = new MetadataFile { - Header = item.ReadStringArray(Data.Models.Metadata.Header.HeaderKey), + Header = item.HeaderRow, }; return metadataFile; } @@ -45,21 +45,21 @@ namespace SabreTools.Serialization.CrossModel { var rowItems = new List(); - var roms = item.Read(Data.Models.Metadata.Machine.RomKey); + var roms = item.Rom; if (roms is not null && roms.Length > 0) { rowItems.AddRange( Array.ConvertAll(roms, r => ConvertFromInternalModel(r, item, header))); } - var disks = item.Read(Data.Models.Metadata.Machine.DiskKey); + var disks = item.Disk; if (disks is not null && disks.Length > 0) { rowItems.AddRange( Array.ConvertAll(disks, d => ConvertFromInternalModel(d, item, header))); } - var media = item.Read(Data.Models.Metadata.Machine.MediaKey); + var media = item.Media; if (media is not null && media.Length > 0) { rowItems.AddRange( @@ -76,23 +76,23 @@ namespace SabreTools.Serialization.CrossModel { var row = new Row { - FileName = header?.ReadString("FILENAME"), // TODO: Make this an actual key to retrieve - InternalName = header?.ReadString(Data.Models.Metadata.Header.NameKey), - Description = header?.ReadString(Data.Models.Metadata.Header.DescriptionKey), - GameName = parent.ReadString(Data.Models.Metadata.Machine.NameKey), - GameDescription = parent.ReadString(Data.Models.Metadata.Machine.DescriptionKey), + FileName = header?.FileName, + InternalName = header?.Name, + Description = header?.Description, + GameName = parent.Name, + GameDescription = parent.Description, Type = "disk", RomName = null, - DiskName = item.ReadString(Data.Models.Metadata.Disk.NameKey), + 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, SpamSum = null, - Status = item.ReadString(Data.Models.Metadata.Disk.StatusKey), + Status = item.Status, }; return row; } @@ -104,22 +104,22 @@ namespace SabreTools.Serialization.CrossModel { var row = new Row { - FileName = header?.ReadString("FILENAME"), // TODO: Make this an actual key to retrieve on an item -- OriginalFilename - InternalName = header?.ReadString(Data.Models.Metadata.Header.NameKey), - Description = header?.ReadString(Data.Models.Metadata.Header.DescriptionKey), - GameName = parent.ReadString(Data.Models.Metadata.Machine.NameKey), - GameDescription = parent.ReadString(Data.Models.Metadata.Machine.DescriptionKey), + FileName = header?.FileName, + InternalName = header?.Name, + Description = header?.Description, + GameName = parent.Name, + GameDescription = parent.Description, Type = "media", RomName = null, - DiskName = item.ReadString(Data.Models.Metadata.Media.NameKey), + DiskName = item.Name, Size = null, CRC = null, - MD5 = item.ReadString(Data.Models.Metadata.Media.MD5Key), - SHA1 = item.ReadString(Data.Models.Metadata.Media.SHA1Key), - SHA256 = item.ReadString(Data.Models.Metadata.Media.SHA256Key), + MD5 = item.MD5, + SHA1 = item.SHA1, + SHA256 = item.SHA256, SHA384 = null, SHA512 = null, - SpamSum = item.ReadString(Data.Models.Metadata.Media.SpamSumKey), + SpamSum = item.SpamSum, }; return row; } @@ -131,23 +131,23 @@ namespace SabreTools.Serialization.CrossModel { var row = new Row { - FileName = header?.ReadString("FILENAME"), // TODO: Make this an actual key to retrieve - InternalName = header?.ReadString(Data.Models.Metadata.Header.NameKey), - Description = header?.ReadString(Data.Models.Metadata.Header.DescriptionKey), - GameName = parent.ReadString(Data.Models.Metadata.Machine.NameKey), - GameDescription = parent.ReadString(Data.Models.Metadata.Machine.DescriptionKey), + FileName = header?.FileName, + InternalName = header?.Name, + Description = header?.Description, + GameName = parent.Name, + GameDescription = parent.Description, Type = "rom", - RomName = item.ReadString(Data.Models.Metadata.Rom.NameKey), + RomName = item.Name, DiskName = null, - Size = item.ReadString(Data.Models.Metadata.Rom.SizeKey), - CRC = item.ReadString(Data.Models.Metadata.Rom.CRCKey), - MD5 = item.ReadString(Data.Models.Metadata.Rom.MD5Key), - SHA1 = item.ReadString(Data.Models.Metadata.Rom.SHA1Key), - SHA256 = item.ReadString(Data.Models.Metadata.Rom.SHA256Key), - SHA384 = item.ReadString(Data.Models.Metadata.Rom.SHA384Key), - SHA512 = item.ReadString(Data.Models.Metadata.Rom.SHA512Key), - SpamSum = item.ReadString(Data.Models.Metadata.Rom.SpamSumKey), - Status = item.ReadString(Data.Models.Metadata.Rom.StatusKey), + Size = item.Size, + CRC = item.CRC32, + MD5 = item.MD5, + SHA1 = item.SHA1, + SHA256 = item.SHA256, + SHA384 = item.SHA384, + SHA512 = item.SHA512, + SpamSum = item.SpamSum, + Status = item.Status, }; return row; } diff --git a/SabreTools.Serialization.CrossModel/SeparatedValue.Serializer.cs b/SabreTools.Serialization.CrossModel/SeparatedValue.Serializer.cs index 8a6492c1..4fea2eef 100644 --- a/SabreTools.Serialization.CrossModel/SeparatedValue.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/SeparatedValue.Serializer.cs @@ -13,14 +13,11 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new Data.Models.Metadata.MetadataFile { - [Data.Models.Metadata.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(obj), + Header = ConvertHeaderToInternalModel(obj), }; if (obj?.Row is not null && obj.Row.Length > 0) - { - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] - = Array.ConvertAll(obj.Row, ConvertMachineToInternalModel); - } + metadataFile.Machine = Array.ConvertAll(obj.Row, ConvertMachineToInternalModel); return metadataFile; } @@ -32,15 +29,15 @@ namespace SabreTools.Serialization.CrossModel { var header = new Data.Models.Metadata.Header { - [Data.Models.Metadata.Header.HeaderKey] = item.Header, + HeaderRow = item.Header, }; if (item.Row is not null && item.Row.Length > 0) { var first = item.Row[0]; - header["FILENAME"] = first.FileName; // TODO: Make this an actual key to retrieve on an item -- OriginalFilename - header[Data.Models.Metadata.Header.NameKey] = first.FileName; - header[Data.Models.Metadata.Header.DescriptionKey] = first.Description; + header.FileName = first.FileName; + header.Name = first.FileName; + header.Description = first.Description; } return header; @@ -53,23 +50,23 @@ namespace SabreTools.Serialization.CrossModel { var machine = new Data.Models.Metadata.Machine { - [Data.Models.Metadata.Machine.NameKey] = item.GameName, - [Data.Models.Metadata.Machine.DescriptionKey] = item.GameDescription, + Name = item.GameName, + Description = item.GameDescription, }; var datItem = ConvertToInternalModel(item); switch (datItem) { case Data.Models.Metadata.Disk disk: - machine[Data.Models.Metadata.Machine.DiskKey] = new Data.Models.Metadata.Disk[] { disk }; + machine.Disk = new Data.Models.Metadata.Disk[] { disk }; break; case Data.Models.Metadata.Media media: - machine[Data.Models.Metadata.Machine.MediaKey] = new Data.Models.Metadata.Media[] { media }; + machine.Media = new Data.Models.Metadata.Media[] { media }; break; case Data.Models.Metadata.Rom rom: - machine[Data.Models.Metadata.Machine.RomKey] = new Data.Models.Metadata.Rom[] { rom }; + machine.Rom = new Data.Models.Metadata.Rom[] { rom }; break; default: @@ -89,31 +86,31 @@ namespace SabreTools.Serialization.CrossModel { "disk" => new Data.Models.Metadata.Disk { - [Data.Models.Metadata.Disk.NameKey] = item.DiskName, - [Data.Models.Metadata.Disk.MD5Key] = item.MD5, - [Data.Models.Metadata.Disk.SHA1Key] = item.SHA1, - [Data.Models.Metadata.Disk.StatusKey] = item.Status, + Name = item.DiskName, + MD5 = item.MD5, + SHA1 = item.SHA1, + Status = item.Status, }, "media" => new Data.Models.Metadata.Media { - [Data.Models.Metadata.Media.NameKey] = item.DiskName, - [Data.Models.Metadata.Media.MD5Key] = item.MD5, - [Data.Models.Metadata.Media.SHA1Key] = item.SHA1, - [Data.Models.Metadata.Media.SHA256Key] = item.SHA256, - [Data.Models.Metadata.Media.SpamSumKey] = item.SpamSum, + Name = item.DiskName, + MD5 = item.MD5, + SHA1 = item.SHA1, + SHA256 = item.SHA256, + SpamSum = item.SpamSum, }, "rom" => new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.NameKey] = item.RomName, - [Data.Models.Metadata.Rom.SizeKey] = item.Size, - [Data.Models.Metadata.Rom.CRCKey] = item.CRC, - [Data.Models.Metadata.Rom.MD5Key] = item.MD5, - [Data.Models.Metadata.Rom.SHA1Key] = item.SHA1, - [Data.Models.Metadata.Rom.SHA256Key] = item.SHA256, - [Data.Models.Metadata.Rom.SHA384Key] = item.SHA384, - [Data.Models.Metadata.Rom.SHA512Key] = item.SHA512, - [Data.Models.Metadata.Rom.SpamSumKey] = item.SpamSum, - [Data.Models.Metadata.Rom.StatusKey] = item.Status, + Name = item.RomName, + Size = item.Size, + CRC32 = item.CRC, + MD5 = item.MD5, + SHA1 = item.SHA1, + SHA256 = item.SHA256, + SHA384 = item.SHA384, + SHA512 = item.SHA512, + SpamSum = item.SpamSum, + Status = item.Status, }, _ => null, }; diff --git a/SabreTools.Serialization.CrossModel/SoftwareList.Deserializer.cs b/SabreTools.Serialization.CrossModel/SoftwareList.Deserializer.cs index 28b116b3..aabb248a 100644 --- a/SabreTools.Serialization.CrossModel/SoftwareList.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/SoftwareList.Deserializer.cs @@ -11,10 +11,10 @@ namespace SabreTools.Serialization.CrossModel if (obj is null) return null; - var header = obj.Read(Data.Models.Metadata.MetadataFile.HeaderKey); + var header = obj.Header; var metadataFile = header is not null ? ConvertHeaderFromInternalModel(header) : new Data.Models.SoftwareList.SoftwareList(); - var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); + var machines = obj.Machine; if (machines is not null && machines.Length > 0) metadataFile.Software = Array.ConvertAll(machines, ConvertMachineFromInternalModel); @@ -28,9 +28,9 @@ namespace SabreTools.Serialization.CrossModel { var softwareList = new Data.Models.SoftwareList.SoftwareList { - Name = item.ReadString(Data.Models.Metadata.Header.NameKey), - Description = item.ReadString(Data.Models.Metadata.Header.DescriptionKey), - Notes = item.ReadString(Data.Models.Metadata.Header.NotesKey), + Name = item.Name, + Description = item.Description, + Notes = item.Notes, }; return softwareList; } @@ -42,24 +42,24 @@ namespace SabreTools.Serialization.CrossModel { var software = new Software { - Name = item.ReadString(Data.Models.Metadata.Machine.NameKey), - CloneOf = item.ReadString(Data.Models.Metadata.Machine.CloneOfKey), - Supported = item.ReadString(Data.Models.Metadata.Machine.SupportedKey), - Description = item.ReadString(Data.Models.Metadata.Machine.DescriptionKey), - Year = item.ReadString(Data.Models.Metadata.Machine.YearKey), - Publisher = item.ReadString(Data.Models.Metadata.Machine.PublisherKey), - Notes = item.ReadString(Data.Models.Metadata.Machine.NotesKey), + Name = item.Name, + CloneOf = item.CloneOf, + Supported = item.Supported, + Description = item.Description, + Year = item.Year, + Publisher = item.Publisher, + Notes = item.Notes, }; - var infos = item.Read(Data.Models.Metadata.Machine.InfoKey); + var infos = item.Info; if (infos is not null && infos.Length > 0) software.Info = Array.ConvertAll(infos, ConvertFromInternalModel); - var sharedFeats = item.Read(Data.Models.Metadata.Machine.SharedFeatKey); + var sharedFeats = item.SharedFeat; if (sharedFeats is not null && sharedFeats.Length > 0) software.SharedFeat = Array.ConvertAll(sharedFeats, ConvertFromInternalModel); - var parts = item.Read(Data.Models.Metadata.Machine.PartKey); + var parts = item.Part; if (parts is not null && parts.Length > 0) software.Part = Array.ConvertAll(parts, ConvertFromInternalModel); @@ -73,13 +73,13 @@ namespace SabreTools.Serialization.CrossModel { var dataArea = new DataArea { - Name = item.ReadString(Data.Models.Metadata.DataArea.NameKey), - Size = item.ReadString(Data.Models.Metadata.DataArea.SizeKey), - Width = item.ReadString(Data.Models.Metadata.DataArea.WidthKey), - Endianness = item.ReadString(Data.Models.Metadata.DataArea.EndiannessKey), + Name = item.Name, + Size = item.Size, + Width = item.Width, + Endianness = item.Endianness, }; - var roms = item.Read(Data.Models.Metadata.DataArea.RomKey); + var roms = item.Rom; if (roms is not null && roms.Length > 0) dataArea.Rom = Array.ConvertAll(roms, ConvertFromInternalModel); @@ -93,12 +93,12 @@ namespace SabreTools.Serialization.CrossModel { var dipSwitch = new DipSwitch { - Name = item.ReadString(Data.Models.Metadata.DipSwitch.NameKey), - Tag = item.ReadString(Data.Models.Metadata.DipSwitch.TagKey), - Mask = item.ReadString(Data.Models.Metadata.DipSwitch.MaskKey), + Name = item.Name, + Tag = item.Tag, + Mask = item.Mask, }; - var dipValues = item.Read(Data.Models.Metadata.DipSwitch.DipValueKey); + var dipValues = item.DipValue; if (dipValues is not null && dipValues.Length > 0) dipSwitch.DipValue = Array.ConvertAll(dipValues, ConvertFromInternalModel); @@ -112,9 +112,9 @@ namespace SabreTools.Serialization.CrossModel { var dipValue = new DipValue { - Name = item.ReadString(Data.Models.Metadata.DipValue.NameKey), - Value = item.ReadString(Data.Models.Metadata.DipValue.ValueKey), - Default = item.ReadString(Data.Models.Metadata.DipValue.DefaultKey), + Name = item.Name, + Value = item.Value, + Default = item.Default, }; return dipValue; } @@ -126,11 +126,11 @@ namespace SabreTools.Serialization.CrossModel { var disk = new Disk { - Name = item.ReadString(Data.Models.Metadata.Disk.NameKey), - MD5 = item.ReadString(Data.Models.Metadata.Disk.MD5Key), - SHA1 = item.ReadString(Data.Models.Metadata.Disk.SHA1Key), - Status = item.ReadString(Data.Models.Metadata.Disk.StatusKey), - Writeable = item.ReadString(Data.Models.Metadata.Disk.WritableKey), + Name = item.Name, + MD5 = item.MD5, + SHA1 = item.SHA1, + Status = item.Status, + Writeable = item.Writable, }; return disk; } @@ -142,10 +142,10 @@ namespace SabreTools.Serialization.CrossModel { var diskArea = new DiskArea { - Name = item.ReadString(Data.Models.Metadata.DiskArea.NameKey), + Name = item.Name, }; - var disks = item.Read(Data.Models.Metadata.DiskArea.DiskKey); + var disks = item.Disk; if (disks is not null && disks.Length > 0) diskArea.Disk = Array.ConvertAll(disks, ConvertFromInternalModel); @@ -159,8 +159,8 @@ namespace SabreTools.Serialization.CrossModel { var feature = new Feature { - Name = item.ReadString(Data.Models.Metadata.Feature.NameKey), - Value = item.ReadString(Data.Models.Metadata.Feature.ValueKey), + Name = item.Name, + Value = item.Value, }; return feature; } @@ -172,8 +172,8 @@ namespace SabreTools.Serialization.CrossModel { var info = new Info { - Name = item.ReadString(Data.Models.Metadata.Info.NameKey), - Value = item.ReadString(Data.Models.Metadata.Info.ValueKey), + Name = item.Name, + Value = item.Value, }; return info; } @@ -185,23 +185,23 @@ namespace SabreTools.Serialization.CrossModel { var part = new Part { - Name = item.ReadString(Data.Models.Metadata.Part.NameKey), - Interface = item.ReadString(Data.Models.Metadata.Part.InterfaceKey), + Name = item.Name, + Interface = item.Interface, }; - var features = item.Read(Data.Models.Metadata.Part.FeatureKey); + var features = item.Feature; if (features is not null && features.Length > 0) part.Feature = Array.ConvertAll(features, ConvertFromInternalModel); - var dataAreas = item.Read(Data.Models.Metadata.Part.DataAreaKey); + var dataAreas = item.DataArea; if (dataAreas is not null && dataAreas.Length > 0) part.DataArea = Array.ConvertAll(dataAreas, ConvertFromInternalModel); - var diskAreas = item.Read(Data.Models.Metadata.Part.DiskAreaKey); + var diskAreas = item.DiskArea; if (diskAreas is not null && diskAreas.Length > 0) part.DiskArea = Array.ConvertAll(diskAreas, ConvertFromInternalModel); - var dipSwitches = item.Read(Data.Models.Metadata.Part.DipSwitchKey); + var dipSwitches = item.DipSwitch; if (dipSwitches is not null && dipSwitches.Length > 0) part.DipSwitch = Array.ConvertAll(dipSwitches, ConvertFromInternalModel); @@ -215,15 +215,15 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Rom { - Name = item.ReadString(Data.Models.Metadata.Rom.NameKey), - Size = item.ReadString(Data.Models.Metadata.Rom.SizeKey), - Length = item.ReadString(Data.Models.Metadata.Rom.LengthKey), - CRC = item.ReadString(Data.Models.Metadata.Rom.CRCKey), - SHA1 = item.ReadString(Data.Models.Metadata.Rom.SHA1Key), - Offset = item.ReadString(Data.Models.Metadata.Rom.OffsetKey), - Value = item.ReadString(Data.Models.Metadata.Rom.ValueKey), - Status = item.ReadString(Data.Models.Metadata.Rom.StatusKey), - LoadFlag = item.ReadString(Data.Models.Metadata.Rom.LoadFlagKey), + Name = item.Name, + Size = item.Size, + Length = item.Length, + CRC = item.CRC32, + SHA1 = item.SHA1, + Offset = item.Offset, + Value = item.Value, + Status = item.Status, + LoadFlag = item.LoadFlag, }; return rom; } @@ -235,8 +235,8 @@ namespace SabreTools.Serialization.CrossModel { var sharedFeat = new SharedFeat { - Name = item.ReadString(Data.Models.Metadata.SharedFeat.NameKey), - Value = item.ReadString(Data.Models.Metadata.SharedFeat.ValueKey), + Name = item.Name, + Value = item.Value, }; return sharedFeat; } diff --git a/SabreTools.Serialization.CrossModel/SoftwareList.Serializer.cs b/SabreTools.Serialization.CrossModel/SoftwareList.Serializer.cs index d9f2c7aa..ded48ee2 100644 --- a/SabreTools.Serialization.CrossModel/SoftwareList.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/SoftwareList.Serializer.cs @@ -13,14 +13,11 @@ namespace SabreTools.Serialization.CrossModel var metadataFile = new Data.Models.Metadata.MetadataFile { - [Data.Models.Metadata.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item), + Header = ConvertHeaderToInternalModel(item), }; if (item?.Software is not null && item.Software.Length > 0) - { - metadataFile[Data.Models.Metadata.MetadataFile.MachineKey] - = Array.ConvertAll(item.Software, ConvertMachineToInternalModel); - } + metadataFile.Machine = Array.ConvertAll(item.Software, ConvertMachineToInternalModel); return metadataFile; } @@ -32,9 +29,9 @@ namespace SabreTools.Serialization.CrossModel { var header = new Data.Models.Metadata.Header { - [Data.Models.Metadata.Header.NameKey] = item.Name, - [Data.Models.Metadata.Header.DescriptionKey] = item.Description, - [Data.Models.Metadata.Header.NotesKey] = item.Notes, + Name = item.Name, + Description = item.Description, + Notes = item.Notes, }; return header; } @@ -46,23 +43,23 @@ namespace SabreTools.Serialization.CrossModel { var machine = new Data.Models.Metadata.Machine { - [Data.Models.Metadata.Machine.NameKey] = item.Name, - [Data.Models.Metadata.Machine.CloneOfKey] = item.CloneOf, - [Data.Models.Metadata.Machine.SupportedKey] = item.Supported, - [Data.Models.Metadata.Machine.DescriptionKey] = item.Description, - [Data.Models.Metadata.Machine.YearKey] = item.Year, - [Data.Models.Metadata.Machine.PublisherKey] = item.Publisher, - [Data.Models.Metadata.Machine.NotesKey] = item.Notes, + Name = item.Name, + CloneOf = item.CloneOf, + Supported = item.Supported, + Description = item.Description, + Year = item.Year, + Publisher = item.Publisher, + Notes = item.Notes, }; if (item.Info is not null && item.Info.Length > 0) - machine[Data.Models.Metadata.Machine.InfoKey] = Array.ConvertAll(item.Info, ConvertToInternalModel); + machine.Info = Array.ConvertAll(item.Info, ConvertToInternalModel); if (item.SharedFeat is not null && item.SharedFeat.Length > 0) - machine[Data.Models.Metadata.Machine.SharedFeatKey] = Array.ConvertAll(item.SharedFeat, ConvertToInternalModel); + machine.SharedFeat = Array.ConvertAll(item.SharedFeat, ConvertToInternalModel); if (item.Part is not null && item.Part.Length > 0) - machine[Data.Models.Metadata.Machine.PartKey] = Array.ConvertAll(item.Part, ConvertToInternalModel); + machine.Part = Array.ConvertAll(item.Part, ConvertToInternalModel); return machine; } @@ -74,14 +71,14 @@ namespace SabreTools.Serialization.CrossModel { var dataArea = new Data.Models.Metadata.DataArea { - [Data.Models.Metadata.DataArea.NameKey] = item.Name, - [Data.Models.Metadata.DataArea.SizeKey] = item.Size, - [Data.Models.Metadata.DataArea.WidthKey] = item.Width, - [Data.Models.Metadata.DataArea.EndiannessKey] = item.Endianness, + Name = item.Name, + Size = item.Size, + Width = item.Width, + Endianness = item.Endianness, }; if (item.Rom is not null && item.Rom.Length > 0) - dataArea[Data.Models.Metadata.DataArea.RomKey] = Array.ConvertAll(item.Rom, ConvertToInternalModel); + dataArea.Rom = Array.ConvertAll(item.Rom, ConvertToInternalModel); return dataArea; } @@ -93,13 +90,13 @@ namespace SabreTools.Serialization.CrossModel { var dipSwitch = new Data.Models.Metadata.DipSwitch { - [Data.Models.Metadata.DipSwitch.NameKey] = item.Name, - [Data.Models.Metadata.DipSwitch.TagKey] = item.Tag, - [Data.Models.Metadata.DipSwitch.MaskKey] = item.Mask, + Name = item.Name, + Tag = item.Tag, + Mask = item.Mask, }; if (item.DipValue is not null && item.DipValue.Length > 0) - dipSwitch[Data.Models.Metadata.DipSwitch.DipValueKey] = Array.ConvertAll(item.DipValue, ConvertToInternalModel); + dipSwitch.DipValue = Array.ConvertAll(item.DipValue, ConvertToInternalModel); return dipSwitch; } @@ -111,9 +108,9 @@ namespace SabreTools.Serialization.CrossModel { var dipValue = new Data.Models.Metadata.DipValue { - [Data.Models.Metadata.DipValue.NameKey] = item.Name, - [Data.Models.Metadata.DipValue.ValueKey] = item.Value, - [Data.Models.Metadata.DipValue.DefaultKey] = item.Default, + Name = item.Name, + Value = item.Value, + Default = item.Default, }; return dipValue; } @@ -125,11 +122,11 @@ namespace SabreTools.Serialization.CrossModel { var disk = new Data.Models.Metadata.Disk { - [Data.Models.Metadata.Disk.NameKey] = item.Name, - [Data.Models.Metadata.Disk.MD5Key] = item.MD5, - [Data.Models.Metadata.Disk.SHA1Key] = item.SHA1, - [Data.Models.Metadata.Disk.StatusKey] = item.Status, - [Data.Models.Metadata.Disk.WritableKey] = item.Writeable, + Name = item.Name, + MD5 = item.MD5, + SHA1 = item.SHA1, + Status = item.Status, + Writable = item.Writeable, }; return disk; } @@ -141,11 +138,11 @@ namespace SabreTools.Serialization.CrossModel { var diskArea = new Data.Models.Metadata.DiskArea { - [Data.Models.Metadata.DiskArea.NameKey] = item.Name, + Name = item.Name, }; if (item.Disk is not null && item.Disk.Length > 0) - diskArea[Data.Models.Metadata.DiskArea.DiskKey] = Array.ConvertAll(item.Disk, ConvertToInternalModel); + diskArea.Disk = Array.ConvertAll(item.Disk, ConvertToInternalModel); return diskArea; } @@ -157,8 +154,8 @@ namespace SabreTools.Serialization.CrossModel { var feature = new Data.Models.Metadata.Feature { - [Data.Models.Metadata.Feature.NameKey] = item.Name, - [Data.Models.Metadata.Feature.ValueKey] = item.Value, + Name = item.Name, + Value = item.Value, }; return feature; } @@ -170,8 +167,8 @@ namespace SabreTools.Serialization.CrossModel { var info = new Data.Models.Metadata.Info { - [Data.Models.Metadata.Info.NameKey] = item.Name, - [Data.Models.Metadata.Info.ValueKey] = item.Value, + Name = item.Name, + Value = item.Value, }; return info; } @@ -183,21 +180,21 @@ namespace SabreTools.Serialization.CrossModel { var part = new Data.Models.Metadata.Part { - [Data.Models.Metadata.Part.NameKey] = item.Name, - [Data.Models.Metadata.Part.InterfaceKey] = item.Interface, + Name = item.Name, + Interface = item.Interface, }; if (item.Feature is not null && item.Feature.Length > 0) - part[Data.Models.Metadata.Part.FeatureKey] = Array.ConvertAll(item.Feature, ConvertToInternalModel); + part.Feature = Array.ConvertAll(item.Feature, ConvertToInternalModel); if (item.DataArea is not null && item.DataArea.Length > 0) - part[Data.Models.Metadata.Part.DataAreaKey] = Array.ConvertAll(item.DataArea, ConvertToInternalModel); + part.DataArea = Array.ConvertAll(item.DataArea, ConvertToInternalModel); if (item.DiskArea is not null && item.DiskArea.Length > 0) - part[Data.Models.Metadata.Part.DiskAreaKey] = Array.ConvertAll(item.DiskArea, ConvertToInternalModel); + part.DiskArea = Array.ConvertAll(item.DiskArea, ConvertToInternalModel); if (item.DipSwitch is not null && item.DipSwitch.Length > 0) - part[Data.Models.Metadata.Part.DipSwitchKey] = Array.ConvertAll(item.DipSwitch, ConvertToInternalModel); + part.DipSwitch = Array.ConvertAll(item.DipSwitch, ConvertToInternalModel); return part; } @@ -209,15 +206,15 @@ namespace SabreTools.Serialization.CrossModel { var rom = new Data.Models.Metadata.Rom { - [Data.Models.Metadata.Rom.NameKey] = item.Name, - [Data.Models.Metadata.Rom.SizeKey] = item.Size, - [Data.Models.Metadata.Rom.LengthKey] = item.Length, - [Data.Models.Metadata.Rom.CRCKey] = item.CRC, - [Data.Models.Metadata.Rom.SHA1Key] = item.SHA1, - [Data.Models.Metadata.Rom.OffsetKey] = item.Offset, - [Data.Models.Metadata.Rom.ValueKey] = item.Value, - [Data.Models.Metadata.Rom.StatusKey] = item.Status, - [Data.Models.Metadata.Rom.LoadFlagKey] = item.LoadFlag, + Name = item.Name, + Size = item.Size, + Length = item.Length, + CRC32 = item.CRC, + SHA1 = item.SHA1, + Offset = item.Offset, + Value = item.Value, + Status = item.Status, + LoadFlag = item.LoadFlag, }; return rom; } @@ -229,8 +226,8 @@ namespace SabreTools.Serialization.CrossModel { var sharedFeat = new Data.Models.Metadata.SharedFeat { - [Data.Models.Metadata.SharedFeat.NameKey] = item.Name, - [Data.Models.Metadata.SharedFeat.ValueKey] = item.Value, + Name = item.Name, + Value = item.Value, }; return sharedFeat; } diff --git a/SabreTools.Serialization.Readers.Test/ArchiveDotOrgTests.cs b/SabreTools.Serialization.Readers.Test/ArchiveDotOrgTests.cs index 793b864b..15a68d98 100644 --- a/SabreTools.Serialization.Readers.Test/ArchiveDotOrgTests.cs +++ b/SabreTools.Serialization.Readers.Test/ArchiveDotOrgTests.cs @@ -100,7 +100,7 @@ namespace SabreTools.Serialization.Readers.Test { var file = new Data.Models.ArchiveDotOrg.File { - Name = "XXXXXX", + Name = "name", Source = "XXXXXX", BitTorrentMagnetHash = "XXXXXX", LastModifiedTime = "XXXXXX", @@ -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", @@ -174,7 +174,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.ArchiveDotOrg.File? file) { Assert.NotNull(file); - Assert.Equal("XXXXXX", file.Name); + Assert.Equal("name", file.Name); Assert.Equal("XXXXXX", file.Source); Assert.Equal("XXXXXX", file.BitTorrentMagnetHash); Assert.Equal("XXXXXX", file.LastModifiedTime); @@ -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.Test/AttractModeTests.cs b/SabreTools.Serialization.Readers.Test/AttractModeTests.cs index 6134ee51..a03c5fde 100644 --- a/SabreTools.Serialization.Readers.Test/AttractModeTests.cs +++ b/SabreTools.Serialization.Readers.Test/AttractModeTests.cs @@ -129,7 +129,7 @@ namespace SabreTools.Serialization.Readers.Test var row = new Data.Models.AttractMode.Row { - Name = "XXXXXX", + Name = "name", Title = "XXXXXX", Emulator = "XXXXXX", CloneOf = "XXXXXX", @@ -150,7 +150,7 @@ namespace SabreTools.Serialization.Readers.Test Tags = "XXXXXX", PlayedCount = "XXXXXX", PlayedTime = "XXXXXX", - FileIsAvailable = "XXXXXX", + FileIsAvailable = true, }; return new Data.Models.AttractMode.MetadataFile @@ -178,7 +178,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.AttractMode.Row? row, bool longHeader) { Assert.NotNull(row); - Assert.Equal("XXXXXX", row.Name); + Assert.Equal("name", row.Name); Assert.Equal("XXXXXX", row.Title); Assert.Equal("XXXXXX", row.Emulator); Assert.Equal("XXXXXX", row.CloneOf); @@ -201,7 +201,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal("XXXXXX", row.Tags); Assert.Equal("XXXXXX", row.PlayedCount); Assert.Equal("XXXXXX", row.PlayedTime); - Assert.Equal("XXXXXX", row.FileIsAvailable); + Assert.Equal(true, row.FileIsAvailable); } else { diff --git a/SabreTools.Serialization.Readers.Test/ClrMameProTests.cs b/SabreTools.Serialization.Readers.Test/ClrMameProTests.cs index cd0969e2..814a7f34 100644 --- a/SabreTools.Serialization.Readers.Test/ClrMameProTests.cs +++ b/SabreTools.Serialization.Readers.Test/ClrMameProTests.cs @@ -178,8 +178,8 @@ namespace SabreTools.Serialization.Readers.Test { var cmp = new Data.Models.ClrMamePro.ClrMamePro { - Name = "XXXXXX", - Description = "XXXXXX", + Name = "name", + Description = "description", RootDir = "XXXXXX", Category = "XXXXXX", Version = "XXXXXX", @@ -190,31 +190,31 @@ namespace SabreTools.Serialization.Readers.Test Comment = "XXXXXX", Header = "XXXXXX", Type = "XXXXXX", - ForceMerging = "XXXXXX", - ForceZipping = "XXXXXX", - ForcePacking = "XXXXXX", + ForceMerging = Data.Models.Metadata.MergingFlag.Merged, + ForceZipping = true, + ForcePacking = Data.Models.Metadata.PackingFlag.Zip, }; var release = new Data.Models.ClrMamePro.Release { - Name = "XXXXXX", - Region = "XXXXXX", - Language = "XXXXXX", - Date = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Region = "region", + Language = "language", + Date = "date", + Default = true, }; var biosset = new Data.Models.ClrMamePro.BiosSet { - Name = "XXXXXX", - Description = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Description = "description", + Default = true, }; var rom = new Data.Models.ClrMamePro.Rom { - Name = "XXXXXX", - Size = "XXXXXX", + Name = "name", + Size = 12345, CRC16 = "XXXXXX", CRC = "XXXXXX", CRC64 = "XXXXXX", @@ -225,7 +225,7 @@ namespace SabreTools.Serialization.Readers.Test RIPEMD160 = "XXXXXX", SHA1 = "XXXXXX", Merge = "XXXXXX", - Status = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, Flags = "XXXXXX", Date = "XXXXXX", SHA256 = "XXXXXX", @@ -238,95 +238,95 @@ namespace SabreTools.Serialization.Readers.Test Offs = "XXXXXX", Serial = "XXXXXX", Header = "XXXXXX", - Inverted = "XXXXXX", - MIA = "XXXXXX", + Inverted = true, + MIA = true, }; var disk = new Data.Models.ClrMamePro.Disk { - Name = "XXXXXX", + Name = "name", MD5 = "XXXXXX", SHA1 = "XXXXXX", Merge = "XXXXXX", - Status = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, Flags = "XXXXXX", }; var sample = new Data.Models.ClrMamePro.Sample { - Name = "XXXXXX", + Name = "name", }; var archive = new Data.Models.ClrMamePro.Archive { - Name = "XXXXXX", + Name = "name", }; var media = new Data.Models.ClrMamePro.Media { - Name = "XXXXXX", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - SHA256 = "XXXXXX", - SpamSum = "XXXXXX", + Name = "name", + MD5 = "md5", + SHA1 = "sha1", + SHA256 = "sha256", + SpamSum = "spamsum", }; var chip = new Data.Models.ClrMamePro.Chip { - Type = "XXXXXX", - Name = "XXXXXX", - Flags = "XXXXXX", - Clock = "XXXXXX", + Type = Data.Models.Metadata.ChipType.CPU, + Name = "name", + Flags = "flags", + Clock = 12345, }; var video = new Data.Models.ClrMamePro.Video { - Screen = "XXXXXX", - Orientation = "XXXXXX", - X = "XXXXXX", - Y = "XXXXXX", - AspectX = "XXXXXX", - AspectY = "XXXXXX", - Freq = "XXXXXX", + Screen = Data.Models.Metadata.DisplayType.Vector, + Orientation = Data.Models.Metadata.Rotation.East, + X = 12345, + Y = 12345, + AspectX = 12345, + AspectY = 12345, + Freq = 123.45, }; var sound = new Data.Models.ClrMamePro.Sound { - Channels = "XXXXXX", + Channels = 12345 }; var input = new Data.Models.ClrMamePro.Input { - Players = "XXXXXX", + Players = 12345, Control = "XXXXXX", - Buttons = "XXXXXX", - Coins = "XXXXXX", - Tilt = "XXXXXX", - Service = "XXXXXX", + Buttons = 12345, + Coins = 12345, + Tilt = true, + Service = true, }; var dipswitch = new Data.Models.ClrMamePro.DipSwitch { - Name = "XXXXXX", + Name = "name", Entry = ["XXXXXX"], - Default = "XXXXXX", + Default = true, }; var driver = new Data.Models.ClrMamePro.Driver { - Status = "XXXXXX", - Color = "XXXXXX", - Sound = "XXXXXX", - PaletteSize = "XXXXXX", - Blit = "XXXXXX", + Status = Data.Models.Metadata.SupportStatus.Good, + Color = Data.Models.Metadata.SupportStatus.Good, + Sound = Data.Models.Metadata.SupportStatus.Good, + PaletteSize = "palettesize", + Blit = Data.Models.Metadata.Blit.Plain, }; // TODO: This omits Set, should that have a separate case? Data.Models.ClrMamePro.GameBase gameBase = game ? new Data.Models.ClrMamePro.Game() : new Data.Models.ClrMamePro.Machine(); - gameBase.Name = "XXXXXX"; - gameBase.Description = "XXXXXX"; + gameBase.Name = "name"; + gameBase.Description = "description"; gameBase.DriverStatus = "XXXXXX"; gameBase.Year = "XXXXXX"; gameBase.Manufacturer = "XXXXXX"; @@ -367,8 +367,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.ClrMamePro.ClrMamePro? cmp) { Assert.NotNull(cmp); - Assert.Equal("XXXXXX", cmp.Name); - Assert.Equal("XXXXXX", cmp.Description); + Assert.Equal("name", cmp.Name); + Assert.Equal("description", cmp.Description); Assert.Equal("XXXXXX", cmp.RootDir); Assert.Equal("XXXXXX", cmp.Category); Assert.Equal("XXXXXX", cmp.Version); @@ -379,9 +379,9 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal("XXXXXX", cmp.Comment); Assert.Equal("XXXXXX", cmp.Header); Assert.Equal("XXXXXX", cmp.Type); - Assert.Equal("XXXXXX", cmp.ForceMerging); - Assert.Equal("XXXXXX", cmp.ForceZipping); - Assert.Equal("XXXXXX", cmp.ForcePacking); + Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, cmp.ForceMerging); + Assert.Equal(true, cmp.ForceZipping); + Assert.Equal(Data.Models.Metadata.PackingFlag.Zip, cmp.ForcePacking); } /// @@ -390,8 +390,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.ClrMamePro.GameBase? gb) { Assert.NotNull(gb); - Assert.Equal("XXXXXX", gb.Name); - Assert.Equal("XXXXXX", gb.Description); + Assert.Equal("name", gb.Name); + Assert.Equal("description", gb.Description); // Assert.Equal("XXXXXX", gb.DriverStatus); // TODO: Needs metadata mapping Assert.Equal("XXXXXX", gb.Year); Assert.Equal("XXXXXX", gb.Manufacturer); @@ -452,11 +452,11 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.ClrMamePro.Release? release) { Assert.NotNull(release); - Assert.Equal("XXXXXX", release.Name); - Assert.Equal("XXXXXX", release.Region); - Assert.Equal("XXXXXX", release.Language); - Assert.Equal("XXXXXX", release.Date); - Assert.Equal("XXXXXX", release.Default); + Assert.Equal("name", release.Name); + Assert.Equal("region", release.Region); + Assert.Equal("language", release.Language); + Assert.Equal("date", release.Date); + Assert.Equal(true, release.Default); } /// @@ -465,9 +465,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.ClrMamePro.BiosSet? biosset) { Assert.NotNull(biosset); - Assert.Equal("XXXXXX", biosset.Name); - Assert.Equal("XXXXXX", biosset.Description); - Assert.Equal("XXXXXX", biosset.Default); + Assert.Equal("name", biosset.Name); + Assert.Equal("description", biosset.Description); + Assert.Equal(true, biosset.Default); } /// @@ -476,8 +476,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.ClrMamePro.Rom? rom) { Assert.NotNull(rom); - Assert.Equal("XXXXXX", rom.Name); - Assert.Equal("XXXXXX", rom.Size); + Assert.Equal("name", rom.Name); + Assert.Equal(12345, rom.Size); Assert.Equal("XXXXXX", rom.CRC16); Assert.Equal("XXXXXX", rom.CRC); Assert.Equal("XXXXXX", rom.CRC64); @@ -488,7 +488,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal("XXXXXX", rom.RIPEMD160); Assert.Equal("XXXXXX", rom.SHA1); Assert.Equal("XXXXXX", rom.Merge); - Assert.Equal("XXXXXX", rom.Status); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, rom.Status); Assert.Equal("XXXXXX", rom.Flags); Assert.Equal("XXXXXX", rom.Date); Assert.Equal("XXXXXX", rom.SHA256); @@ -501,8 +501,8 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal("XXXXXX", rom.Offs); Assert.Equal("XXXXXX", rom.Serial); Assert.Equal("XXXXXX", rom.Header); - Assert.Equal("XXXXXX", rom.Inverted); - Assert.Equal("XXXXXX", rom.MIA); + Assert.Equal(true, rom.Inverted); + Assert.Equal(true, rom.MIA); } /// @@ -511,11 +511,11 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.ClrMamePro.Disk? disk) { Assert.NotNull(disk); - Assert.Equal("XXXXXX", disk.Name); + Assert.Equal("name", disk.Name); Assert.Equal("XXXXXX", disk.MD5); Assert.Equal("XXXXXX", disk.SHA1); Assert.Equal("XXXXXX", disk.Merge); - Assert.Equal("XXXXXX", disk.Status); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status); Assert.Equal("XXXXXX", disk.Flags); } @@ -525,7 +525,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.ClrMamePro.Sample? sample) { Assert.NotNull(sample); - Assert.Equal("XXXXXX", sample.Name); + Assert.Equal("name", sample.Name); } /// @@ -534,7 +534,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.ClrMamePro.Archive? archive) { Assert.NotNull(archive); - Assert.Equal("XXXXXX", archive.Name); + Assert.Equal("name", archive.Name); } /// @@ -543,11 +543,11 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.ClrMamePro.Media? media) { Assert.NotNull(media); - Assert.Equal("XXXXXX", media.Name); - Assert.Equal("XXXXXX", media.MD5); - Assert.Equal("XXXXXX", media.SHA1); - Assert.Equal("XXXXXX", media.SHA256); - Assert.Equal("XXXXXX", media.SpamSum); + Assert.Equal("name", media.Name); + Assert.Equal("md5", media.MD5); + Assert.Equal("sha1", media.SHA1); + Assert.Equal("sha256", media.SHA256); + Assert.Equal("spamsum", media.SpamSum); } /// @@ -556,10 +556,10 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.ClrMamePro.Chip? chip) { Assert.NotNull(chip); - Assert.Equal("XXXXXX", chip.Type); - Assert.Equal("XXXXXX", chip.Name); - Assert.Equal("XXXXXX", chip.Flags); - Assert.Equal("XXXXXX", chip.Clock); + Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type); + Assert.Equal("name", chip.Name); + Assert.Equal("flags", chip.Flags); + Assert.Equal(12345, chip.Clock); } /// @@ -568,13 +568,13 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.ClrMamePro.Video? video) { Assert.NotNull(video); - Assert.Equal("XXXXXX", video.Screen); - Assert.Equal("XXXXXX", video.Orientation); - Assert.Equal("XXXXXX", video.X); - Assert.Equal("XXXXXX", video.Y); - Assert.Equal("XXXXXX", video.AspectX); - Assert.Equal("XXXXXX", video.AspectY); - Assert.Equal("XXXXXX", video.Freq); + Assert.Equal(Data.Models.Metadata.DisplayType.Vector, video.Screen); + Assert.Equal(Data.Models.Metadata.Rotation.East, video.Orientation); + Assert.Equal(12345, video.X); + Assert.Equal(12345, video.Y); + Assert.Equal(12345, video.AspectX); + Assert.Equal(12345, video.AspectY); + Assert.Equal(123.45, video.Freq); } /// @@ -583,7 +583,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.ClrMamePro.Sound? sound) { Assert.NotNull(sound); - Assert.Equal("XXXXXX", sound.Channels); + Assert.Equal(12345, sound.Channels); } /// @@ -592,12 +592,12 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.ClrMamePro.Input? input) { Assert.NotNull(input); - Assert.Equal("XXXXXX", input.Players); + Assert.Equal(12345, input.Players); Assert.Equal("XXXXXX", input.Control); - Assert.Equal("XXXXXX", input.Buttons); - Assert.Equal("XXXXXX", input.Coins); - Assert.Equal("XXXXXX", input.Tilt); - Assert.Equal("XXXXXX", input.Service); + Assert.Equal(12345, input.Buttons); + Assert.Equal(12345, input.Coins); + Assert.Equal(true, input.Tilt); + Assert.Equal(true, input.Service); } /// @@ -606,13 +606,13 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.ClrMamePro.DipSwitch? dipswitch) { Assert.NotNull(dipswitch); - Assert.Equal("XXXXXX", dipswitch.Name); + Assert.Equal("name", dipswitch.Name); Assert.NotNull(dipswitch.Entry); string entry = Assert.Single(dipswitch.Entry); Assert.Equal("XXXXXX", entry); - Assert.Equal("XXXXXX", dipswitch.Default); + Assert.Equal(true, dipswitch.Default); } /// @@ -621,11 +621,11 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.ClrMamePro.Driver? driver) { Assert.NotNull(driver); - Assert.Equal("XXXXXX", driver.Status); - Assert.Equal("XXXXXX", driver.Color); - Assert.Equal("XXXXXX", driver.Sound); - Assert.Equal("XXXXXX", driver.PaletteSize); - Assert.Equal("XXXXXX", driver.Blit); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound); + Assert.Equal("palettesize", driver.PaletteSize); + Assert.Equal(Data.Models.Metadata.Blit.Plain, driver.Blit); } /// diff --git a/SabreTools.Serialization.Readers.Test/DosCenterTests.cs b/SabreTools.Serialization.Readers.Test/DosCenterTests.cs index 219972c9..6b8c48eb 100644 --- a/SabreTools.Serialization.Readers.Test/DosCenterTests.cs +++ b/SabreTools.Serialization.Readers.Test/DosCenterTests.cs @@ -101,8 +101,8 @@ namespace SabreTools.Serialization.Readers.Test { var dc = new Data.Models.DosCenter.DosCenter { - Name = "XXXXXX", - Description = "XXXXXX", + Name = "name", + Description = "description", Version = "XXXXXX", Date = "XXXXXX", Author = "XXXXXX", @@ -112,8 +112,8 @@ namespace SabreTools.Serialization.Readers.Test var file = new Data.Models.DosCenter.File { - Name = "XXXXXX", - Size = "XXXXXX", + Name = "name", + Size = 12345, CRC = "XXXXXX", SHA1 = "XXXXXX", Date = "XXXXXX XXXXXX", @@ -121,7 +121,7 @@ namespace SabreTools.Serialization.Readers.Test var game = new Data.Models.DosCenter.Game { - Name = "XXXXXX", + Name = "name", File = [file], }; @@ -138,8 +138,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.DosCenter.DosCenter? cmp) { Assert.NotNull(cmp); - Assert.Equal("XXXXXX", cmp.Name); - Assert.Equal("XXXXXX", cmp.Description); + Assert.Equal("name", cmp.Name); + Assert.Equal("description", cmp.Description); Assert.Equal("XXXXXX", cmp.Version); Assert.Equal("XXXXXX", cmp.Date); Assert.Equal("XXXXXX", cmp.Author); @@ -153,7 +153,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.DosCenter.Game? game) { Assert.NotNull(game); - Assert.Equal("XXXXXX", game.Name); + Assert.Equal("name", game.Name); Assert.NotNull(game.File); var file = Assert.Single(game.File); @@ -166,8 +166,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.DosCenter.File? rom) { Assert.NotNull(rom); - Assert.Equal("XXXXXX", rom.Name); - Assert.Equal("XXXXXX", rom.Size); + Assert.Equal("name", rom.Name); + Assert.Equal(12345, rom.Size); Assert.Equal("XXXXXX", rom.CRC); Assert.Equal("XXXXXX", rom.SHA1); Assert.Equal("XXXXXX XXXXXX", rom.Date); diff --git a/SabreTools.Serialization.Readers.Test/EverdriveSMDBTests.cs b/SabreTools.Serialization.Readers.Test/EverdriveSMDBTests.cs index c296c62c..7f755d1a 100644 --- a/SabreTools.Serialization.Readers.Test/EverdriveSMDBTests.cs +++ b/SabreTools.Serialization.Readers.Test/EverdriveSMDBTests.cs @@ -101,11 +101,11 @@ namespace SabreTools.Serialization.Readers.Test var row = new Data.Models.EverdriveSMDB.Row { SHA256 = "XXXXXX", - Name = "XXXXXX", + Name = "name", SHA1 = "XXXXXX", MD5 = "XXXXXX", CRC32 = "XXXXXX", - Size = "XXXXXX", + Size = 12345, }; return new Data.Models.EverdriveSMDB.MetadataFile @@ -121,11 +121,11 @@ namespace SabreTools.Serialization.Readers.Test { Assert.NotNull(row); Assert.Equal("XXXXXX", row.SHA256); - Assert.Equal("XXXXXX", row.Name); + Assert.Equal("name", row.Name); Assert.Equal("XXXXXX", row.SHA1); Assert.Equal("XXXXXX", row.MD5); Assert.Equal("XXXXXX", row.CRC32); - Assert.Equal("XXXXXX", row.Size); + Assert.Equal(12345, row.Size); } } } diff --git a/SabreTools.Serialization.Readers.Test/ListromTests.cs b/SabreTools.Serialization.Readers.Test/ListromTests.cs index 5bc0e380..8f3b27c4 100644 --- a/SabreTools.Serialization.Readers.Test/ListromTests.cs +++ b/SabreTools.Serialization.Readers.Test/ListromTests.cs @@ -102,8 +102,8 @@ namespace SabreTools.Serialization.Readers.Test { var romGood = new Data.Models.Listrom.Row { - Name = "XXXXXX", - Size = "12345", + Name = "name", + Size = 12345, Bad = false, CRC = Hashing.HashType.CRC32.ZeroString, SHA1 = Hashing.HashType.SHA1.ZeroString, @@ -112,8 +112,8 @@ namespace SabreTools.Serialization.Readers.Test var romBad = new Data.Models.Listrom.Row { - Name = "XXXXXX", - Size = "12345", + Name = "name", + Size = 12345, Bad = true, CRC = Hashing.HashType.CRC32.ZeroString, SHA1 = Hashing.HashType.SHA1.ZeroString, @@ -122,7 +122,7 @@ namespace SabreTools.Serialization.Readers.Test var diskGoodMd5 = new Data.Models.Listrom.Row { - Name = "XXXXXX", + Name = "name", Bad = false, MD5 = Hashing.HashType.MD5.ZeroString, SHA1 = null, @@ -131,7 +131,7 @@ namespace SabreTools.Serialization.Readers.Test var diskGoodSha1 = new Data.Models.Listrom.Row { - Name = "XXXXXX", + Name = "name", Bad = false, MD5 = null, SHA1 = Hashing.HashType.SHA1.ZeroString, @@ -140,7 +140,7 @@ namespace SabreTools.Serialization.Readers.Test var diskBad = new Data.Models.Listrom.Row { - Name = "XXXXXX", + Name = "name", Bad = false, MD5 = Hashing.HashType.MD5.ZeroString, SHA1 = Hashing.HashType.SHA1.ZeroString, @@ -202,8 +202,8 @@ namespace SabreTools.Serialization.Readers.Test private static void ValidateGoodRom(Data.Models.Listrom.Row? row) { Assert.NotNull(row); - Assert.Equal("XXXXXX", row.Name); - Assert.Equal("12345", row.Size); + Assert.Equal("name", row.Name); + Assert.Equal(12345, row.Size); Assert.False(row.Bad); Assert.Equal(Hashing.HashType.CRC32.ZeroString, row.CRC); Assert.Equal(Hashing.HashType.SHA1.ZeroString, row.SHA1); @@ -216,8 +216,8 @@ namespace SabreTools.Serialization.Readers.Test private static void ValidateBadRom(Data.Models.Listrom.Row? row) { Assert.NotNull(row); - Assert.Equal("XXXXXX", row.Name); - Assert.Equal("12345", row.Size); + Assert.Equal("name", row.Name); + Assert.Equal(12345, row.Size); Assert.True(row.Bad); Assert.Equal(Hashing.HashType.CRC32.ZeroString, row.CRC); Assert.Equal(Hashing.HashType.SHA1.ZeroString, row.SHA1); @@ -230,7 +230,7 @@ namespace SabreTools.Serialization.Readers.Test private static void ValidateGoodMd5Disk(Data.Models.Listrom.Row? row) { Assert.NotNull(row); - Assert.Equal("XXXXXX", row.Name); + Assert.Equal("name", row.Name); Assert.False(row.Bad); Assert.Equal(Hashing.HashType.MD5.ZeroString, row.MD5); Assert.Null(row.SHA1); @@ -243,7 +243,7 @@ namespace SabreTools.Serialization.Readers.Test private static void ValidateGoodSha1Disk(Data.Models.Listrom.Row? row) { Assert.NotNull(row); - Assert.Equal("XXXXXX", row.Name); + Assert.Equal("name", row.Name); Assert.False(row.Bad); Assert.Null(row.MD5); Assert.Equal(Hashing.HashType.SHA1.ZeroString, row.SHA1); @@ -256,7 +256,7 @@ namespace SabreTools.Serialization.Readers.Test private static void ValidateBadDisk(Data.Models.Listrom.Row? row) { Assert.NotNull(row); - Assert.Equal("XXXXXX", row.Name); + Assert.Equal("name", row.Name); Assert.False(row.Bad); Assert.Null(row.MD5); Assert.Null(row.SHA1); diff --git a/SabreTools.Serialization.Readers.Test/ListxmlTests.cs b/SabreTools.Serialization.Readers.Test/ListxmlTests.cs index 6405b523..aef932cc 100644 --- a/SabreTools.Serialization.Readers.Test/ListxmlTests.cs +++ b/SabreTools.Serialization.Readers.Test/ListxmlTests.cs @@ -89,7 +89,7 @@ namespace SabreTools.Serialization.Readers.Test // Validate the data Assert.NotNull(newMame); Assert.Equal("XXXXXX", newMame.Build); - Assert.Equal("XXXXXX", newMame.Debug); + Assert.Equal(true, newMame.Debug); Assert.Equal("XXXXXX", newMame.MameConfig); Assert.NotNull(newMame.Game); @@ -117,7 +117,7 @@ namespace SabreTools.Serialization.Readers.Test // Validate the data Assert.NotNull(newMame); Assert.Equal("XXXXXX", newMame.Build); - Assert.Equal("XXXXXX", newMame.Debug); + Assert.Equal(true, newMame.Debug); Assert.Equal("XXXXXX", newMame.MameConfig); Assert.NotNull(newMame.Game); @@ -132,148 +132,148 @@ namespace SabreTools.Serialization.Readers.Test { var biosset = new Data.Models.Listxml.BiosSet { - Name = "XXXXXX", - Description = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Description = "description", + Default = true, }; var rom = new Data.Models.Listxml.Rom { - Name = "XXXXXX", + Name = "name", Bios = "XXXXXX", - Size = "XXXXXX", + Size = 12345, CRC = "XXXXXX", SHA1 = "XXXXXX", Merge = "XXXXXX", Region = "XXXXXX", Offset = "XXXXXX", - Status = "XXXXXX", - Optional = "XXXXXX", - Dispose = "XXXXXX", - SoundOnly = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, + Optional = true, + Dispose = true, + SoundOnly = true, }; var disk = new Data.Models.Listxml.Disk { - Name = "XXXXXX", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - Merge = "XXXXXX", - Region = "XXXXXX", - Index = "XXXXXX", - Writable = "XXXXXX", - Status = "XXXXXX", - Optional = "XXXXXX", + Name = "name", + MD5 = "md5", + SHA1 = "sha1", + Merge = "merge", + Region = "region", + Index = 12345, + Writable = true, + Status = Data.Models.Metadata.ItemStatus.Good, + Optional = true, }; var deviceref = new Data.Models.Listxml.DeviceRef { - Name = "XXXXXX", + Name = "name", }; var sample = new Data.Models.Listxml.Sample { - Name = "XXXXXX", + Name = "name", }; var chip = new Data.Models.Listxml.Chip { - Name = "XXXXXX", - Tag = "XXXXXX", - Type = "XXXXXX", - SoundOnly = "XXXXXX", - Clock = "XXXXXX", + Name = "name", + Tag = "tag", + Type = Data.Models.Metadata.ChipType.CPU, + SoundOnly = true, + Clock = 12345, }; var display = new Data.Models.Listxml.Display { - Tag = "XXXXXX", - Type = "XXXXXX", - Rotate = "XXXXXX", - FlipX = "XXXXXX", - Width = "XXXXXX", - Height = "XXXXXX", - Refresh = "XXXXXX", - PixClock = "XXXXXX", - HTotal = "XXXXXX", - HBEnd = "XXXXXX", - HBStart = "XXXXXX", - VTotal = "XXXXXX", - VBEnd = "XXXXXX", - VBStart = "XXXXXX", + Tag = "tag", + Type = Data.Models.Metadata.DisplayType.Vector, + Rotate = Data.Models.Metadata.Rotation.East, + FlipX = true, + Width = 12345, + Height = 12345, + Refresh = 123.45, + PixClock = 12345, + HTotal = 12345, + HBEnd = 12345, + HBStart = 12345, + VTotal = 12345, + VBEnd = 12345, + VBStart = 12345, }; var video = new Data.Models.Listxml.Video { - Screen = "XXXXXX", - Orientation = "XXXXXX", - Width = "XXXXXX", - Height = "XXXXXX", - AspectX = "XXXXXX", - AspectY = "XXXXXX", - Refresh = "XXXXXX", + Screen = Data.Models.Metadata.DisplayType.Vector, + Orientation = Data.Models.Metadata.Rotation.East, + Width = 12345, + Height = 12345, + AspectX = 12345, + AspectY = 12345, + Refresh = 123.45, }; var sound = new Data.Models.Listxml.Sound { - Channels = "XXXXXX", + Channels = 12345, }; var control = new Data.Models.Listxml.Control { - Type = "XXXXXX", - Player = "XXXXXX", - Buttons = "XXXXXX", - ReqButtons = "XXXXXX", - Minimum = "XXXXXX", - Maximum = "XXXXXX", - Sensitivity = "XXXXXX", - KeyDelta = "XXXXXX", - Reverse = "XXXXXX", - Ways = "XXXXXX", - Ways2 = "XXXXXX", - Ways3 = "XXXXXX", + Type = Data.Models.Metadata.ControlType.Lightgun, + Player = 12345, + Buttons = 12345, + ReqButtons = 12345, + Minimum = 12345, + Maximum = 12345, + Sensitivity = 12345, + KeyDelta = 12345, + Reverse = true, + Ways = "ways", + Ways2 = "ways2", + Ways3 = "ways3", }; var input = new Data.Models.Listxml.Input { - Service = "XXXXXX", - Tilt = "XXXXXX", - Players = "XXXXXX", - ControlAttr = "XXXXXX", - Buttons = "XXXXXX", - Coins = "XXXXXX", + Service = true, + Tilt = true, + Players = 12345, + ControlAttr = "controlattr", + Buttons = 12345, + Coins = 12345, Control = [control], }; var condition = new Data.Models.Listxml.Condition { - Tag = "XXXXXX", - Mask = "XXXXXX", - Relation = "XXXXXX", - Value = "XXXXXX", + Tag = "tag", + Mask = "mask", + Relation = Data.Models.Metadata.Relation.Equal, + Value = "value", }; var diplocation = new Data.Models.Listxml.DipLocation { - Name = "XXXXXX", - Number = "XXXXXX", - Inverted = "XXXXXX", + Name = "name", + Number = 12345, + Inverted = true, }; var dipvalue = new Data.Models.Listxml.DipValue { - Name = "XXXXXX", - Value = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Value = "value", + Default = true, Condition = condition, }; var dipswitch = new Data.Models.Listxml.DipSwitch { - Name = "XXXXXX", - Tag = "XXXXXX", - Mask = "XXXXXX", + Name = "name", + Tag = "tag", + Mask = "mask", Condition = condition, DipLocation = [diplocation], DipValue = [dipvalue], @@ -281,24 +281,24 @@ namespace SabreTools.Serialization.Readers.Test var conflocation = new Data.Models.Listxml.ConfLocation { - Name = "XXXXXX", - Number = "XXXXXX", - Inverted = "XXXXXX", + Name = "name", + Number = 12345, + Inverted = true, }; var confsetting = new Data.Models.Listxml.ConfSetting { - Name = "XXXXXX", - Value = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Value = "value", + Default = true, Condition = condition, }; var configuration = new Data.Models.Listxml.Configuration { - Name = "XXXXXX", - Tag = "XXXXXX", - Mask = "XXXXXX", + Name = "name", + Tag = "tag", + Mask = "mask", Condition = condition, ConfLocation = [conflocation], ConfSetting = [confsetting], @@ -306,107 +306,107 @@ namespace SabreTools.Serialization.Readers.Test var analog = new Data.Models.Listxml.Analog { - Mask = "XXXXXX", + Mask = "mask", }; var port = new Data.Models.Listxml.Port { - Tag = "XXXXXX", + Tag = "tag", Analog = [analog], }; var adjuster = new Data.Models.Listxml.Adjuster { - Name = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Default = true, Condition = condition, }; var driver = new Data.Models.Listxml.Driver { - Status = "XXXXXX", - Color = "XXXXXX", - Sound = "XXXXXX", - PaletteSize = "XXXXXX", - Emulation = "XXXXXX", - Cocktail = "XXXXXX", - SaveState = "XXXXXX", - RequiresArtwork = "XXXXXX", - Unofficial = "XXXXXX", - NoSoundHardware = "XXXXXX", - Incomplete = "XXXXXX", + Status = Data.Models.Metadata.SupportStatus.Good, + Color = Data.Models.Metadata.SupportStatus.Good, + Sound = Data.Models.Metadata.SupportStatus.Good, + PaletteSize = "palettesize", + Emulation = Data.Models.Metadata.SupportStatus.Good, + Cocktail = Data.Models.Metadata.SupportStatus.Good, + SaveState = Data.Models.Metadata.Supported.Yes, + RequiresArtwork = true, + Unofficial = true, + NoSoundHardware = true, + Incomplete = true, }; var feature = new Data.Models.Listxml.Feature { - Type = "XXXXXX", - Status = "XXXXXX", - Overall = "XXXXXX", + Type = Data.Models.Metadata.FeatureType.Protection, + Status = Data.Models.Metadata.FeatureStatus.Imperfect, + Overall = Data.Models.Metadata.FeatureStatus.Imperfect, }; var instance = new Data.Models.Listxml.Instance { - Name = "XXXXXX", - BriefName = "XXXXXX", + Name = "name", + BriefName = "briefname", }; var extension = new Data.Models.Listxml.Extension { - Name = "XXXXXX", + Name = "name", }; var device = new Data.Models.Listxml.Device { - Type = "XXXXXX", - Tag = "XXXXXX", - FixedImage = "XXXXXX", - Mandatory = "XXXXXX", - Interface = "XXXXXX", + Type = Data.Models.Metadata.DeviceType.PunchTape, + Tag = "tag", + FixedImage = "fixedimage", + Mandatory = true, + Interface = "interface", Instance = instance, Extension = [extension], }; var slotOption = new Data.Models.Listxml.SlotOption { - Name = "XXXXXX", - DevName = "XXXXXX", - Default = "XXXXXX", + Name = "name", + DevName = "devname", + Default = true, }; var slot = new Data.Models.Listxml.Slot { - Name = "XXXXXX", + Name = "name", SlotOption = [slotOption], }; var softwarelist = new Data.Models.Listxml.SoftwareList { - Tag = "XXXXXX", - Name = "XXXXXX", - Status = "XXXXXX", - Filter = "XXXXXX", + Tag = "tag", + Name = "name", + Status = Data.Models.Metadata.SoftwareListStatus.Original, + Filter = "filter", }; var ramoption = new Data.Models.Listxml.RamOption { - Name = "XXXXXX", - Default = "XXXXXX", - Content = "XXXXXX", + Name = "name", + Default = true, + Content = "content", }; Data.Models.Listxml.GameBase gameBase = game ? new Data.Models.Listxml.Game() : new Data.Models.Listxml.Machine(); - gameBase.Name = "XXXXXX"; + gameBase.Name = "name"; gameBase.SourceFile = "XXXXXX"; - gameBase.IsBios = "XXXXXX"; - gameBase.IsDevice = "XXXXXX"; - gameBase.IsMechanical = "XXXXXX"; - gameBase.Runnable = "XXXXXX"; + gameBase.IsBios = true; + gameBase.IsDevice = true; + gameBase.IsMechanical = true; + gameBase.Runnable = Data.Models.Metadata.Runnable.Yes; gameBase.CloneOf = "XXXXXX"; gameBase.RomOf = "XXXXXX"; gameBase.SampleOf = "XXXXXX"; - gameBase.Description = "XXXXXX"; + gameBase.Description = "description"; gameBase.Year = "XXXXXX"; gameBase.Manufacturer = "XXXXXX"; gameBase.History = "XXXXXX"; @@ -434,7 +434,7 @@ namespace SabreTools.Serialization.Readers.Test return new Data.Models.Listxml.Mame { Build = "XXXXXX", - Debug = "XXXXXX", + Debug = true, MameConfig = "XXXXXX", Game = [gameBase], }; @@ -446,16 +446,16 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.GameBase? gb) { Assert.NotNull(gb); - Assert.Equal("XXXXXX", gb.Name); + Assert.Equal("name", gb.Name); Assert.Equal("XXXXXX", gb.SourceFile); - Assert.Equal("XXXXXX", gb.IsBios); - Assert.Equal("XXXXXX", gb.IsDevice); - Assert.Equal("XXXXXX", gb.IsMechanical); - Assert.Equal("XXXXXX", gb.Runnable); + Assert.Equal(true, gb.IsBios); + Assert.Equal(true, gb.IsDevice); + Assert.Equal(true, gb.IsMechanical); + Assert.Equal(Data.Models.Metadata.Runnable.Yes, gb.Runnable); Assert.Equal("XXXXXX", gb.CloneOf); Assert.Equal("XXXXXX", gb.RomOf); Assert.Equal("XXXXXX", gb.SampleOf); - Assert.Equal("XXXXXX", gb.Description); + Assert.Equal("description", gb.Description); Assert.Equal("XXXXXX", gb.Year); Assert.Equal("XXXXXX", gb.Manufacturer); Assert.Equal("XXXXXX", gb.History); @@ -540,9 +540,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.BiosSet? biosset) { Assert.NotNull(biosset); - Assert.Equal("XXXXXX", biosset.Name); - Assert.Equal("XXXXXX", biosset.Description); - Assert.Equal("XXXXXX", biosset.Default); + Assert.Equal("name", biosset.Name); + Assert.Equal("description", biosset.Description); + Assert.Equal(true, biosset.Default); } /// @@ -551,18 +551,18 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Rom? rom) { Assert.NotNull(rom); - Assert.Equal("XXXXXX", rom.Name); + Assert.Equal("name", rom.Name); Assert.Equal("XXXXXX", rom.Bios); - Assert.Equal("XXXXXX", rom.Size); + Assert.Equal(12345, rom.Size); Assert.Equal("XXXXXX", rom.CRC); Assert.Equal("XXXXXX", rom.SHA1); Assert.Equal("XXXXXX", rom.Merge); Assert.Equal("XXXXXX", rom.Region); Assert.Equal("XXXXXX", rom.Offset); - Assert.Equal("XXXXXX", rom.Status); - Assert.Equal("XXXXXX", rom.Optional); - Assert.Equal("XXXXXX", rom.Dispose); - Assert.Equal("XXXXXX", rom.SoundOnly); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, rom.Status); + Assert.Equal(true, rom.Optional); + Assert.Equal(true, rom.Dispose); + Assert.Equal(true, rom.SoundOnly); } /// @@ -571,15 +571,15 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Disk? disk) { Assert.NotNull(disk); - Assert.Equal("XXXXXX", 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("XXXXXX", disk.Writable); - Assert.Equal("XXXXXX", disk.Status); - Assert.Equal("XXXXXX", disk.Optional); + Assert.Equal("name", disk.Name); + 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); } /// @@ -588,7 +588,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.DeviceRef? deviceref) { Assert.NotNull(deviceref); - Assert.Equal("XXXXXX", deviceref.Name); + Assert.Equal("name", deviceref.Name); } /// @@ -597,7 +597,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Sample? sample) { Assert.NotNull(sample); - Assert.Equal("XXXXXX", sample.Name); + Assert.Equal("name", sample.Name); } /// @@ -606,11 +606,11 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Chip? chip) { Assert.NotNull(chip); - Assert.Equal("XXXXXX", chip.Name); - Assert.Equal("XXXXXX", chip.Tag); - Assert.Equal("XXXXXX", chip.Type); - Assert.Equal("XXXXXX", chip.SoundOnly); - Assert.Equal("XXXXXX", chip.Clock); + Assert.Equal("name", chip.Name); + Assert.Equal("tag", chip.Tag); + Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type); + Assert.Equal(true, chip.SoundOnly); + Assert.Equal(12345, chip.Clock); } /// @@ -619,20 +619,20 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Display? display) { Assert.NotNull(display); - Assert.Equal("XXXXXX", display.Tag); - Assert.Equal("XXXXXX", display.Type); - Assert.Equal("XXXXXX", display.Rotate); - Assert.Equal("XXXXXX", display.FlipX); - Assert.Equal("XXXXXX", display.Width); - Assert.Equal("XXXXXX", display.Height); - Assert.Equal("XXXXXX", display.Refresh); - Assert.Equal("XXXXXX", display.PixClock); - Assert.Equal("XXXXXX", display.HTotal); - Assert.Equal("XXXXXX", display.HBEnd); - Assert.Equal("XXXXXX", display.HBStart); - Assert.Equal("XXXXXX", display.VTotal); - Assert.Equal("XXXXXX", display.VBEnd); - Assert.Equal("XXXXXX", display.VBStart); + Assert.Equal("tag", display.Tag); + Assert.Equal(Data.Models.Metadata.DisplayType.Vector, display.Type); + Assert.Equal(Data.Models.Metadata.Rotation.East, display.Rotate); + Assert.Equal(true, display.FlipX); + Assert.Equal(12345, display.Width); + Assert.Equal(12345, display.Height); + Assert.Equal(123.45, display.Refresh); + Assert.Equal(12345, display.PixClock); + Assert.Equal(12345, display.HTotal); + Assert.Equal(12345, display.HBEnd); + Assert.Equal(12345, display.HBStart); + Assert.Equal(12345, display.VTotal); + Assert.Equal(12345, display.VBEnd); + Assert.Equal(12345, display.VBStart); } /// @@ -641,13 +641,13 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Video? video) { Assert.NotNull(video); - Assert.Equal("XXXXXX", video.Screen); - Assert.Equal("XXXXXX", video.Orientation); - Assert.Equal("XXXXXX", video.Width); - Assert.Equal("XXXXXX", video.Height); - Assert.Equal("XXXXXX", video.AspectX); - Assert.Equal("XXXXXX", video.AspectY); - Assert.Equal("XXXXXX", video.Refresh); + Assert.Equal(Data.Models.Metadata.DisplayType.Vector, video.Screen); + Assert.Equal(Data.Models.Metadata.Rotation.East, video.Orientation); + Assert.Equal(12345, video.Width); + Assert.Equal(12345, video.Height); + Assert.Equal(12345, video.AspectX); + Assert.Equal(12345, video.AspectY); + Assert.Equal(123.45, video.Refresh); } /// @@ -656,7 +656,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Sound? sound) { Assert.NotNull(sound); - Assert.Equal("XXXXXX", sound.Channels); + Assert.Equal(12345, sound.Channels); } /// @@ -665,12 +665,12 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Input? input) { Assert.NotNull(input); - Assert.Equal("XXXXXX", input.Service); - Assert.Equal("XXXXXX", input.Tilt); - Assert.Equal("XXXXXX", input.Players); - Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control - Assert.Equal("XXXXXX", input.Buttons); - Assert.Equal("XXXXXX", input.Coins); + Assert.Equal(true, input.Service); + Assert.Equal(true, input.Tilt); + Assert.Equal(12345, input.Players); + Assert.Equal("controlattr", input.ControlAttr); + Assert.Equal(12345, input.Buttons); + Assert.Equal(12345, input.Coins); Assert.NotNull(input.Control); var control = Assert.Single(input.Control); @@ -683,18 +683,18 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Control? control) { Assert.NotNull(control); - Assert.Equal("XXXXXX", control.Type); - Assert.Equal("XXXXXX", control.Player); - Assert.Equal("XXXXXX", control.Buttons); - Assert.Equal("XXXXXX", control.ReqButtons); - Assert.Equal("XXXXXX", control.Minimum); - Assert.Equal("XXXXXX", control.Maximum); - Assert.Equal("XXXXXX", control.Sensitivity); - Assert.Equal("XXXXXX", control.KeyDelta); - Assert.Equal("XXXXXX", control.Reverse); - Assert.Equal("XXXXXX", control.Ways); - Assert.Equal("XXXXXX", control.Ways2); - Assert.Equal("XXXXXX", control.Ways3); + Assert.Equal(Data.Models.Metadata.ControlType.Lightgun, control.Type); + Assert.Equal(12345, control.Player); + Assert.Equal(12345, control.Buttons); + Assert.Equal(12345, control.ReqButtons); + Assert.Equal(12345, control.Minimum); + Assert.Equal(12345, control.Maximum); + Assert.Equal(12345, control.Sensitivity); + Assert.Equal(12345, control.KeyDelta); + Assert.Equal(true, control.Reverse); + Assert.Equal("ways", control.Ways); + Assert.Equal("ways2", control.Ways2); + Assert.Equal("ways3", control.Ways3); } /// @@ -703,9 +703,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.DipSwitch? dipswitch) { Assert.NotNull(dipswitch); - Assert.Equal("XXXXXX", dipswitch.Name); - Assert.Equal("XXXXXX", dipswitch.Tag); - Assert.Equal("XXXXXX", dipswitch.Mask); + Assert.Equal("name", dipswitch.Name); + Assert.Equal("tag", dipswitch.Tag); + Assert.Equal("mask", dipswitch.Mask); Validate(dipswitch.Condition); Assert.NotNull(dipswitch.DipLocation); @@ -723,10 +723,10 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Condition? condition) { Assert.NotNull(condition); - Assert.Equal("XXXXXX", condition.Tag); - Assert.Equal("XXXXXX", condition.Mask); - Assert.Equal("XXXXXX", condition.Relation); - Assert.Equal("XXXXXX", condition.Value); + Assert.Equal("tag", condition.Tag); + Assert.Equal("mask", condition.Mask); + Assert.Equal(Data.Models.Metadata.Relation.Equal, condition.Relation); + Assert.Equal("value", condition.Value); } /// @@ -735,9 +735,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.DipLocation? diplocation) { Assert.NotNull(diplocation); - Assert.Equal("XXXXXX", diplocation.Name); - Assert.Equal("XXXXXX", diplocation.Number); - Assert.Equal("XXXXXX", diplocation.Inverted); + Assert.Equal("name", diplocation.Name); + Assert.Equal(12345, diplocation.Number); + Assert.Equal(true, diplocation.Inverted); } /// @@ -746,9 +746,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.DipValue? dipvalue) { Assert.NotNull(dipvalue); - Assert.Equal("XXXXXX", dipvalue.Name); - Assert.Equal("XXXXXX", dipvalue.Value); - Assert.Equal("XXXXXX", dipvalue.Default); + Assert.Equal("name", dipvalue.Name); + Assert.Equal("value", dipvalue.Value); + Assert.Equal(true, dipvalue.Default); Validate(dipvalue.Condition); } @@ -758,9 +758,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Configuration? configuration) { Assert.NotNull(configuration); - Assert.Equal("XXXXXX", configuration.Name); - Assert.Equal("XXXXXX", configuration.Tag); - Assert.Equal("XXXXXX", configuration.Mask); + Assert.Equal("name", configuration.Name); + Assert.Equal("tag", configuration.Tag); + Assert.Equal("mask", configuration.Mask); Validate(configuration.Condition); Assert.NotNull(configuration.ConfLocation); @@ -778,9 +778,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.ConfLocation? conflocation) { Assert.NotNull(conflocation); - Assert.Equal("XXXXXX", conflocation.Name); - Assert.Equal("XXXXXX", conflocation.Number); - Assert.Equal("XXXXXX", conflocation.Inverted); + Assert.Equal("name", conflocation.Name); + Assert.Equal(12345, conflocation.Number); + Assert.Equal(true, conflocation.Inverted); } /// @@ -789,9 +789,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.ConfSetting? confsetting) { Assert.NotNull(confsetting); - Assert.Equal("XXXXXX", confsetting.Name); - Assert.Equal("XXXXXX", confsetting.Value); - Assert.Equal("XXXXXX", confsetting.Default); + Assert.Equal("name", confsetting.Name); + Assert.Equal("value", confsetting.Value); + Assert.Equal(true, confsetting.Default); Validate(confsetting.Condition); } @@ -801,7 +801,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Port? port) { Assert.NotNull(port); - Assert.Equal("XXXXXX", port.Tag); + Assert.Equal("tag", port.Tag); Assert.NotNull(port.Analog); var analog = Assert.Single(port.Analog); @@ -814,7 +814,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Analog? analog) { Assert.NotNull(analog); - Assert.Equal("XXXXXX", analog.Mask); + Assert.Equal("mask", analog.Mask); } /// @@ -823,8 +823,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Adjuster? adjuster) { Assert.NotNull(adjuster); - Assert.Equal("XXXXXX", adjuster.Name); - Assert.Equal("XXXXXX", adjuster.Default); + Assert.Equal("name", adjuster.Name); + Assert.Equal(true, adjuster.Default); Validate(adjuster.Condition); } @@ -834,17 +834,17 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Driver? driver) { Assert.NotNull(driver); - Assert.Equal("XXXXXX", driver.Status); - Assert.Equal("XXXXXX", driver.Color); - Assert.Equal("XXXXXX", driver.Sound); - Assert.Equal("XXXXXX", driver.PaletteSize); - Assert.Equal("XXXXXX", driver.Emulation); - Assert.Equal("XXXXXX", driver.Cocktail); - Assert.Equal("XXXXXX", driver.SaveState); - Assert.Equal("XXXXXX", driver.RequiresArtwork); - Assert.Equal("XXXXXX", driver.Unofficial); - Assert.Equal("XXXXXX", driver.NoSoundHardware); - Assert.Equal("XXXXXX", driver.Incomplete); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound); + Assert.Equal("palettesize", driver.PaletteSize); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Cocktail); + Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState); + Assert.Equal(true, driver.RequiresArtwork); + Assert.Equal(true, driver.Unofficial); + Assert.Equal(true, driver.NoSoundHardware); + Assert.Equal(true, driver.Incomplete); } /// @@ -853,9 +853,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Feature? feature) { Assert.NotNull(feature); - Assert.Equal("XXXXXX", feature.Type); - Assert.Equal("XXXXXX", feature.Status); - Assert.Equal("XXXXXX", feature.Overall); + Assert.Equal(Data.Models.Metadata.FeatureType.Protection, feature.Type); + Assert.Equal(Data.Models.Metadata.FeatureStatus.Imperfect, feature.Status); + Assert.Equal(Data.Models.Metadata.FeatureStatus.Imperfect, feature.Overall); } /// @@ -864,11 +864,11 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Device? device) { Assert.NotNull(device); - Assert.Equal("XXXXXX", device.Type); - Assert.Equal("XXXXXX", device.Tag); - Assert.Equal("XXXXXX", device.FixedImage); - Assert.Equal("XXXXXX", device.Mandatory); - Assert.Equal("XXXXXX", device.Interface); + Assert.Equal(Data.Models.Metadata.DeviceType.PunchTape, device.Type); + Assert.Equal("tag", device.Tag); + Assert.Equal("fixedimage", device.FixedImage); + Assert.Equal(true, device.Mandatory); + Assert.Equal("interface", device.Interface); Validate(device.Instance); Assert.NotNull(device.Extension); @@ -882,8 +882,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Instance? instance) { Assert.NotNull(instance); - Assert.Equal("XXXXXX", instance.Name); - Assert.Equal("XXXXXX", instance.BriefName); + Assert.Equal("name", instance.Name); + Assert.Equal("briefname", instance.BriefName); } /// @@ -892,7 +892,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Extension? extension) { Assert.NotNull(extension); - Assert.Equal("XXXXXX", extension.Name); + Assert.Equal("name", extension.Name); } /// @@ -901,7 +901,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Slot? slot) { Assert.NotNull(slot); - Assert.Equal("XXXXXX", slot.Name); + Assert.Equal("name", slot.Name); Assert.NotNull(slot.SlotOption); var slotoption = Assert.Single(slot.SlotOption); @@ -914,9 +914,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.SlotOption? slotoption) { Assert.NotNull(slotoption); - Assert.Equal("XXXXXX", slotoption.Name); - Assert.Equal("XXXXXX", slotoption.DevName); - Assert.Equal("XXXXXX", slotoption.Default); + Assert.Equal("name", slotoption.Name); + Assert.Equal("devname", slotoption.DevName); + Assert.Equal(true, slotoption.Default); } /// @@ -925,10 +925,10 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.SoftwareList? softwarelist) { Assert.NotNull(softwarelist); - Assert.Equal("XXXXXX", softwarelist.Tag); - Assert.Equal("XXXXXX", softwarelist.Name); - Assert.Equal("XXXXXX", softwarelist.Status); - Assert.Equal("XXXXXX", softwarelist.Filter); + Assert.Equal("tag", softwarelist.Tag); + Assert.Equal("name", softwarelist.Name); + Assert.Equal(Data.Models.Metadata.SoftwareListStatus.Original, softwarelist.Status); + Assert.Equal("filter", softwarelist.Filter); } /// @@ -937,9 +937,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.RamOption? ramoption) { Assert.NotNull(ramoption); - Assert.Equal("XXXXXX", ramoption.Name); - Assert.Equal("XXXXXX", ramoption.Default); - Assert.Equal("XXXXXX", ramoption.Content); + Assert.Equal("name", ramoption.Name); + Assert.Equal(true, ramoption.Default); + Assert.Equal("content", ramoption.Content); } } } diff --git a/SabreTools.Serialization.Readers.Test/LogiqxTests.cs b/SabreTools.Serialization.Readers.Test/LogiqxTests.cs index c7f44a7d..1d073ccd 100644 --- a/SabreTools.Serialization.Readers.Test/LogiqxTests.cs +++ b/SabreTools.Serialization.Readers.Test/LogiqxTests.cs @@ -89,7 +89,7 @@ namespace SabreTools.Serialization.Readers.Test // Validate the data Assert.NotNull(newDf); Assert.Equal("XXXXXX", newDf.Build); - Assert.Equal("XXXXXX", newDf.Debug); + Assert.Equal(true, newDf.Debug); // Assert.Equal("XXXXXX", newDf.SchemaLocation); // TODO: Fix this based on No-Intro DATs Validate(newDf.Header); @@ -121,7 +121,7 @@ namespace SabreTools.Serialization.Readers.Test // Validate the data Assert.NotNull(newDf); Assert.Equal("XXXXXX", newDf.Build); - Assert.Equal("XXXXXX", newDf.Debug); + Assert.Equal(true, newDf.Debug); // Assert.Equal("XXXXXX", newDf.SchemaLocation); // TODO: Fix this based on No-Intro DATs Validate(newDf.Header); @@ -138,30 +138,38 @@ namespace SabreTools.Serialization.Readers.Test /// private static Data.Models.Logiqx.Datafile Build(bool game) { + var romvault = new Data.Models.Logiqx.RomVault + { + Header = "XXXXXX", + ForceMerging = Data.Models.Metadata.MergingFlag.Merged, + ForceNodump = Data.Models.Metadata.NodumpFlag.Required, + ForcePacking = Data.Models.Metadata.PackingFlag.Zip, + }; + var clrmamepro = new Data.Models.Logiqx.ClrMamePro { Header = "XXXXXX", - ForceMerging = "XXXXXX", - ForceNodump = "XXXXXX", - ForcePacking = "XXXXXX", + ForceMerging = Data.Models.Metadata.MergingFlag.Merged, + ForceNodump = Data.Models.Metadata.NodumpFlag.Required, + ForcePacking = Data.Models.Metadata.PackingFlag.Zip, }; var romcenter = new Data.Models.Logiqx.RomCenter { Plugin = "XXXXXX", - RomMode = "XXXXXX", - BiosMode = "XXXXXX", - SampleMode = "XXXXXX", - LockRomMode = "XXXXXX", - LockBiosMode = "XXXXXX", - LockSampleMode = "XXXXXX", + RomMode = Data.Models.Metadata.MergingFlag.Merged, + BiosMode = Data.Models.Metadata.MergingFlag.Merged, + SampleMode = Data.Models.Metadata.MergingFlag.Merged, + LockRomMode = true, + LockBiosMode = true, + LockSampleMode = true, }; var header = new Data.Models.Logiqx.Header { Id = "XXXXXX", - Name = "XXXXXX", - Description = "XXXXXX", + Name = "name", + Description = "description", RootDir = "XXXXXX", Category = "XXXXXX", Version = "XXXXXX", @@ -172,6 +180,7 @@ namespace SabreTools.Serialization.Readers.Test Url = "XXXXXX", Comment = "XXXXXX", Type = "XXXXXX", + RomVault = romvault, ClrMamePro = clrmamepro, RomCenter = romcenter, }; @@ -196,24 +205,24 @@ namespace SabreTools.Serialization.Readers.Test var release = new Data.Models.Logiqx.Release { - Name = "XXXXXX", - Region = "XXXXXX", - Language = "XXXXXX", - Date = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Region = "region", + Language = "language", + Date = "date", + Default = true, }; var biosset = new Data.Models.Logiqx.BiosSet { - Name = "XXXXXX", - Description = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Description = "description", + Default = true, }; var rom = new Data.Models.Logiqx.Rom { - Name = "XXXXXX", - Size = "XXXXXX", + Name = "name", + Size = 12345, CRC16 = "XXXXXX", CRC = "XXXXXX", CRC64 = "XXXXXX", @@ -230,76 +239,76 @@ namespace SabreTools.Serialization.Readers.Test xxHash364 = "XXXXXX", xxHash3128 = "XXXXXX", Merge = "XXXXXX", - Status = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, Serial = "XXXXXX", Header = "XXXXXX", Date = "XXXXXX", - Inverted = "XXXXXX", - MIA = "XXXXXX", + Inverted = true, + MIA = true, }; var disk = new Data.Models.Logiqx.Disk { - Name = "XXXXXX", + Name = "name", MD5 = "XXXXXX", SHA1 = "XXXXXX", Merge = "XXXXXX", - Status = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, Region = "XXXXXX", }; var media = new Data.Models.Logiqx.Media { - Name = "XXXXXX", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - SHA256 = "XXXXXX", - SpamSum = "XXXXXX", + Name = "name", + MD5 = "md5", + SHA1 = "sha1", + SHA256 = "sha256", + SpamSum = "spamsum", }; var deviceRef = new Data.Models.Logiqx.DeviceRef { - Name = "XXXXXX", + Name = "name", }; var sample = new Data.Models.Logiqx.Sample { - Name = "XXXXXX", + Name = "name", }; var archive = new Data.Models.Logiqx.Archive { - Name = "XXXXXX", + Name = "name", }; var driver = new Data.Models.Logiqx.Driver { - Status = "XXXXXX", - Emulation = "XXXXXX", - Cocktail = "XXXXXX", - SaveState = "XXXXXX", - RequiresArtwork = "XXXXXX", - Unofficial = "XXXXXX", - NoSoundHardware = "XXXXXX", - Incomplete = "XXXXXX", + Status = Data.Models.Metadata.SupportStatus.Good, + Emulation = Data.Models.Metadata.SupportStatus.Good, + Cocktail = Data.Models.Metadata.SupportStatus.Good, + SaveState = Data.Models.Metadata.Supported.Yes, + RequiresArtwork = true, + Unofficial = true, + NoSoundHardware = true, + Incomplete = true, }; var softwarelist = new Data.Models.Logiqx.SoftwareList { - Tag = "XXXXXX", - Name = "XXXXXX", - Status = "XXXXXX", - Filter = "XXXXXX", + Tag = "tag", + Name = "name", + Status = Data.Models.Metadata.SoftwareListStatus.Original, + Filter = "filter", }; Data.Models.Logiqx.GameBase gameBase = game ? new Data.Models.Logiqx.Game() : new Data.Models.Logiqx.Machine(); - gameBase.Name = "XXXXXX"; + gameBase.Name = "name"; gameBase.SourceFile = "XXXXXX"; - gameBase.IsBios = "XXXXXX"; - gameBase.IsDevice = "XXXXXX"; - gameBase.IsMechanical = "XXXXXX"; + gameBase.IsBios = true; + gameBase.IsDevice = true; + gameBase.IsMechanical = true; gameBase.CloneOf = "XXXXXX"; gameBase.RomOf = "XXXXXX"; gameBase.SampleOf = "XXXXXX"; @@ -307,9 +316,9 @@ namespace SabreTools.Serialization.Readers.Test gameBase.RebuildTo = "XXXXXX"; gameBase.Id = "XXXXXX"; gameBase.CloneOfId = "XXXXXX"; - gameBase.Runnable = "XXXXXX"; + gameBase.Runnable = Data.Models.Metadata.Runnable.Yes; gameBase.Comment = ["XXXXXX"]; - gameBase.Description = "XXXXXX"; + gameBase.Description = "description"; gameBase.Year = "XXXXXX"; gameBase.Manufacturer = "XXXXXX"; gameBase.Publisher = "XXXXXX"; @@ -329,7 +338,7 @@ namespace SabreTools.Serialization.Readers.Test return new Data.Models.Logiqx.Datafile { Build = "XXXXXX", - Debug = "XXXXXX", + Debug = true, SchemaLocation = "XXXXXX", Header = header, Game = [gameBase], @@ -344,8 +353,8 @@ namespace SabreTools.Serialization.Readers.Test { Assert.NotNull(header); Assert.Equal("XXXXXX", header.Id); - Assert.Equal("XXXXXX", header.Name); - Assert.Equal("XXXXXX", header.Description); + Assert.Equal("name", header.Name); + Assert.Equal("description", header.Description); Assert.Equal("XXXXXX", header.RootDir); Assert.Equal("XXXXXX", header.Category); Assert.Equal("XXXXXX", header.Version); @@ -356,10 +365,23 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal("XXXXXX", header.Url); Assert.Equal("XXXXXX", header.Comment); Assert.Equal("XXXXXX", header.Type); + Validate(header.RomVault); Validate(header.ClrMamePro); Validate(header.RomCenter); } + /// + /// Validate a RomVault + /// + private static void Validate(Data.Models.Logiqx.RomVault? rv) + { + Assert.NotNull(rv); + Assert.Equal("XXXXXX", rv.Header); + Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, rv.ForceMerging); + Assert.Equal(Data.Models.Metadata.NodumpFlag.Required, rv.ForceNodump); + Assert.Equal(Data.Models.Metadata.PackingFlag.Zip, rv.ForcePacking); + } + /// /// Validate a ClrMamePro /// @@ -367,9 +389,9 @@ namespace SabreTools.Serialization.Readers.Test { Assert.NotNull(cmp); Assert.Equal("XXXXXX", cmp.Header); - Assert.Equal("XXXXXX", cmp.ForceMerging); - Assert.Equal("XXXXXX", cmp.ForceNodump); - Assert.Equal("XXXXXX", cmp.ForcePacking); + Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, cmp.ForceMerging); + Assert.Equal(Data.Models.Metadata.NodumpFlag.Required, cmp.ForceNodump); + Assert.Equal(Data.Models.Metadata.PackingFlag.Zip, cmp.ForcePacking); } /// @@ -379,12 +401,12 @@ namespace SabreTools.Serialization.Readers.Test { Assert.NotNull(rc); Assert.Equal("XXXXXX", rc.Plugin); - Assert.Equal("XXXXXX", rc.RomMode); - Assert.Equal("XXXXXX", rc.BiosMode); - Assert.Equal("XXXXXX", rc.SampleMode); - Assert.Equal("XXXXXX", rc.LockRomMode); - Assert.Equal("XXXXXX", rc.LockBiosMode); - Assert.Equal("XXXXXX", rc.LockSampleMode); + Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, rc.RomMode); + Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, rc.BiosMode); + Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, rc.SampleMode); + Assert.Equal(true, rc.LockRomMode); + Assert.Equal(true, rc.LockBiosMode); + Assert.Equal(true, rc.LockSampleMode); } /// @@ -393,11 +415,11 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Logiqx.GameBase? gb) { Assert.NotNull(gb); - Assert.Equal("XXXXXX", gb.Name); + Assert.Equal("name", gb.Name); Assert.Equal("XXXXXX", gb.SourceFile); - Assert.Equal("XXXXXX", gb.IsBios); - Assert.Equal("XXXXXX", gb.IsDevice); - Assert.Equal("XXXXXX", gb.IsMechanical); + Assert.Equal(true, gb.IsBios); + Assert.Equal(true, gb.IsDevice); + Assert.Equal(true, gb.IsMechanical); Assert.Equal("XXXXXX", gb.CloneOf); Assert.Equal("XXXXXX", gb.RomOf); Assert.Equal("XXXXXX", gb.SampleOf); @@ -405,13 +427,13 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal("XXXXXX", gb.RebuildTo); Assert.Equal("XXXXXX", gb.Id); Assert.Equal("XXXXXX", gb.CloneOfId); - Assert.Equal("XXXXXX", gb.Runnable); + Assert.Equal(Data.Models.Metadata.Runnable.Yes, gb.Runnable); Assert.NotNull(gb.Comment); string comment = Assert.Single(gb.Comment); Assert.Equal("XXXXXX", comment); - Assert.Equal("XXXXXX", gb.Description); + Assert.Equal("description", gb.Description); Assert.Equal("XXXXXX", gb.Year); Assert.Equal("XXXXXX", gb.Manufacturer); Assert.Equal("XXXXXX", gb.Publisher); @@ -489,11 +511,11 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Logiqx.Release? release) { Assert.NotNull(release); - Assert.Equal("XXXXXX", release.Name); - Assert.Equal("XXXXXX", release.Region); - Assert.Equal("XXXXXX", release.Language); - Assert.Equal("XXXXXX", release.Date); - Assert.Equal("XXXXXX", release.Default); + Assert.Equal("name", release.Name); + Assert.Equal("region", release.Region); + Assert.Equal("language", release.Language); + Assert.Equal("date", release.Date); + Assert.Equal(true, release.Default); } /// @@ -502,9 +524,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Logiqx.BiosSet? biosset) { Assert.NotNull(biosset); - Assert.Equal("XXXXXX", biosset.Name); - Assert.Equal("XXXXXX", biosset.Description); - Assert.Equal("XXXXXX", biosset.Default); + Assert.Equal("name", biosset.Name); + Assert.Equal("description", biosset.Description); + Assert.Equal(true, biosset.Default); } /// @@ -513,8 +535,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Logiqx.Rom? rom) { Assert.NotNull(rom); - Assert.Equal("XXXXXX", rom.Name); - Assert.Equal("XXXXXX", rom.Size); + Assert.Equal("name", rom.Name); + Assert.Equal(12345, rom.Size); Assert.Equal("XXXXXX", rom.CRC); Assert.Equal("XXXXXX", rom.MD2); Assert.Equal("XXXXXX", rom.MD4); @@ -529,12 +551,12 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal("XXXXXX", rom.xxHash364); Assert.Equal("XXXXXX", rom.xxHash3128); Assert.Equal("XXXXXX", rom.Merge); - Assert.Equal("XXXXXX", rom.Status); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, rom.Status); Assert.Equal("XXXXXX", rom.Serial); Assert.Equal("XXXXXX", rom.Header); Assert.Equal("XXXXXX", rom.Date); - Assert.Equal("XXXXXX", rom.Inverted); - Assert.Equal("XXXXXX", rom.MIA); + Assert.Equal(true, rom.Inverted); + Assert.Equal(true, rom.MIA); } /// @@ -543,11 +565,11 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Logiqx.Disk? disk) { Assert.NotNull(disk); - Assert.Equal("XXXXXX", disk.Name); + Assert.Equal("name", disk.Name); Assert.Equal("XXXXXX", disk.MD5); Assert.Equal("XXXXXX", disk.SHA1); Assert.Equal("XXXXXX", disk.Merge); - Assert.Equal("XXXXXX", disk.Status); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status); Assert.Equal("XXXXXX", disk.Region); } @@ -557,11 +579,11 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Logiqx.Media? media) { Assert.NotNull(media); - Assert.Equal("XXXXXX", media.Name); - Assert.Equal("XXXXXX", media.MD5); - Assert.Equal("XXXXXX", media.SHA1); - Assert.Equal("XXXXXX", media.SHA256); - Assert.Equal("XXXXXX", media.SpamSum); + Assert.Equal("name", media.Name); + Assert.Equal("md5", media.MD5); + Assert.Equal("sha1", media.SHA1); + Assert.Equal("sha256", media.SHA256); + Assert.Equal("spamsum", media.SpamSum); } /// @@ -570,7 +592,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Logiqx.DeviceRef? deviceref) { Assert.NotNull(deviceref); - Assert.Equal("XXXXXX", deviceref.Name); + Assert.Equal("name", deviceref.Name); } /// @@ -579,7 +601,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Logiqx.Sample? sample) { Assert.NotNull(sample); - Assert.Equal("XXXXXX", sample.Name); + Assert.Equal("name", sample.Name); } /// @@ -588,7 +610,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Logiqx.Archive? archive) { Assert.NotNull(archive); - Assert.Equal("XXXXXX", archive.Name); + Assert.Equal("name", archive.Name); } /// @@ -597,14 +619,14 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Logiqx.Driver? driver) { Assert.NotNull(driver); - Assert.Equal("XXXXXX", driver.Status); - Assert.Equal("XXXXXX", driver.Emulation); - Assert.Equal("XXXXXX", driver.Cocktail); - Assert.Equal("XXXXXX", driver.SaveState); - Assert.Equal("XXXXXX", driver.RequiresArtwork); - Assert.Equal("XXXXXX", driver.Unofficial); - Assert.Equal("XXXXXX", driver.NoSoundHardware); - Assert.Equal("XXXXXX", driver.Incomplete); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Cocktail); + Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState); + Assert.Equal(true, driver.RequiresArtwork); + Assert.Equal(true, driver.Unofficial); + Assert.Equal(true, driver.NoSoundHardware); + Assert.Equal(true, driver.Incomplete); } /// @@ -613,10 +635,10 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Logiqx.SoftwareList? softwarelist) { Assert.NotNull(softwarelist); - Assert.Equal("XXXXXX", softwarelist.Tag); - Assert.Equal("XXXXXX", softwarelist.Name); - Assert.Equal("XXXXXX", softwarelist.Status); - Assert.Equal("XXXXXX", softwarelist.Filter); + Assert.Equal("tag", softwarelist.Tag); + Assert.Equal("name", softwarelist.Name); + Assert.Equal(Data.Models.Metadata.SoftwareListStatus.Original, softwarelist.Status); + Assert.Equal("filter", softwarelist.Filter); } } } diff --git a/SabreTools.Serialization.Readers.Test/M1Tests.cs b/SabreTools.Serialization.Readers.Test/M1Tests.cs index a9493600..8c5ed64e 100644 --- a/SabreTools.Serialization.Readers.Test/M1Tests.cs +++ b/SabreTools.Serialization.Readers.Test/M1Tests.cs @@ -128,148 +128,148 @@ namespace SabreTools.Serialization.Readers.Test { var biosset = new Data.Models.Listxml.BiosSet { - Name = "XXXXXX", - Description = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Description = "description", + Default = true, }; var rom = new Data.Models.Listxml.Rom { - Name = "XXXXXX", + Name = "name", Bios = "XXXXXX", - Size = "XXXXXX", + Size = 12345, CRC = "XXXXXX", SHA1 = "XXXXXX", Merge = "XXXXXX", Region = "XXXXXX", Offset = "XXXXXX", - Status = "XXXXXX", - Optional = "XXXXXX", - Dispose = "XXXXXX", - SoundOnly = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, + Optional = true, + Dispose = true, + SoundOnly = true, }; var disk = new Data.Models.Listxml.Disk { - Name = "XXXXXX", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - Merge = "XXXXXX", - Region = "XXXXXX", - Index = "XXXXXX", - Writable = "XXXXXX", - Status = "XXXXXX", - Optional = "XXXXXX", + Name = "name", + MD5 = "md5", + SHA1 = "sha1", + Merge = "merge", + Region = "region", + Index = 12345, + Writable = true, + Status = Data.Models.Metadata.ItemStatus.Good, + Optional = true, }; var deviceref = new Data.Models.Listxml.DeviceRef { - Name = "XXXXXX", + Name = "name", }; var sample = new Data.Models.Listxml.Sample { - Name = "XXXXXX", + Name = "name", }; var chip = new Data.Models.Listxml.Chip { - Name = "XXXXXX", - Tag = "XXXXXX", - Type = "XXXXXX", - SoundOnly = "XXXXXX", - Clock = "XXXXXX", + Name = "name", + Tag = "tag", + Type = Data.Models.Metadata.ChipType.CPU, + SoundOnly = true, + Clock = 12345, }; var display = new Data.Models.Listxml.Display { - Tag = "XXXXXX", - Type = "XXXXXX", - Rotate = "XXXXXX", - FlipX = "XXXXXX", - Width = "XXXXXX", - Height = "XXXXXX", - Refresh = "XXXXXX", - PixClock = "XXXXXX", - HTotal = "XXXXXX", - HBEnd = "XXXXXX", - HBStart = "XXXXXX", - VTotal = "XXXXXX", - VBEnd = "XXXXXX", - VBStart = "XXXXXX", + Tag = "tag", + Type = Data.Models.Metadata.DisplayType.Vector, + Rotate = Data.Models.Metadata.Rotation.East, + FlipX = true, + Width = 12345, + Height = 12345, + Refresh = 123.45, + PixClock = 12345, + HTotal = 12345, + HBEnd = 12345, + HBStart = 12345, + VTotal = 12345, + VBEnd = 12345, + VBStart = 12345, }; var video = new Data.Models.Listxml.Video { - Screen = "XXXXXX", - Orientation = "XXXXXX", - Width = "XXXXXX", - Height = "XXXXXX", - AspectX = "XXXXXX", - AspectY = "XXXXXX", - Refresh = "XXXXXX", + Screen = Data.Models.Metadata.DisplayType.Vector, + Orientation = Data.Models.Metadata.Rotation.East, + Width = 12345, + Height = 12345, + AspectX = 12345, + AspectY = 12345, + Refresh = 123.45, }; var sound = new Data.Models.Listxml.Sound { - Channels = "XXXXXX", + Channels = 12345, }; var control = new Data.Models.Listxml.Control { - Type = "XXXXXX", - Player = "XXXXXX", - Buttons = "XXXXXX", - ReqButtons = "XXXXXX", - Minimum = "XXXXXX", - Maximum = "XXXXXX", - Sensitivity = "XXXXXX", - KeyDelta = "XXXXXX", - Reverse = "XXXXXX", - Ways = "XXXXXX", - Ways2 = "XXXXXX", - Ways3 = "XXXXXX", + Type = Data.Models.Metadata.ControlType.Lightgun, + Player = 12345, + Buttons = 12345, + ReqButtons = 12345, + Minimum = 12345, + Maximum = 12345, + Sensitivity = 12345, + KeyDelta = 12345, + Reverse = true, + Ways = "ways", + Ways2 = "ways2", + Ways3 = "ways3", }; var input = new Data.Models.Listxml.Input { - Service = "XXXXXX", - Tilt = "XXXXXX", - Players = "XXXXXX", - //ControlAttr = "XXXXXX", // Mututally exclusive with input.Control - Buttons = "XXXXXX", - Coins = "XXXXXX", + Service = true, + Tilt = true, + Players = 12345, + ControlAttr = "controlattr", + Buttons = 12345, + Coins = 12345, Control = [control], }; var condition = new Data.Models.Listxml.Condition { - Tag = "XXXXXX", - Mask = "XXXXXX", - Relation = "XXXXXX", - Value = "XXXXXX", + Tag = "tag", + Mask = "mask", + Relation = Data.Models.Metadata.Relation.Equal, + Value = "value", }; var diplocation = new Data.Models.Listxml.DipLocation { - Name = "XXXXXX", - Number = "XXXXXX", - Inverted = "XXXXXX", + Name = "name", + Number = 12345, + Inverted = true, }; var dipvalue = new Data.Models.Listxml.DipValue { - Name = "XXXXXX", - Value = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Value = "value", + Default = true, Condition = condition, }; var dipswitch = new Data.Models.Listxml.DipSwitch { - Name = "XXXXXX", - Tag = "XXXXXX", - Mask = "XXXXXX", + Name = "name", + Tag = "tag", + Mask = "mask", Condition = condition, DipLocation = [diplocation], DipValue = [dipvalue], @@ -277,24 +277,24 @@ namespace SabreTools.Serialization.Readers.Test var conflocation = new Data.Models.Listxml.ConfLocation { - Name = "XXXXXX", - Number = "XXXXXX", - Inverted = "XXXXXX", + Name = "name", + Number = 12345, + Inverted = true, }; var confsetting = new Data.Models.Listxml.ConfSetting { - Name = "XXXXXX", - Value = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Value = "value", + Default = true, Condition = condition, }; var configuration = new Data.Models.Listxml.Configuration { - Name = "XXXXXX", - Tag = "XXXXXX", - Mask = "XXXXXX", + Name = "name", + Tag = "tag", + Mask = "mask", Condition = condition, ConfLocation = [conflocation], ConfSetting = [confsetting], @@ -302,107 +302,107 @@ namespace SabreTools.Serialization.Readers.Test var analog = new Data.Models.Listxml.Analog { - Mask = "XXXXXX", + Mask = "mask", }; var port = new Data.Models.Listxml.Port { - Tag = "XXXXXX", + Tag = "tag", Analog = [analog], }; var adjuster = new Data.Models.Listxml.Adjuster { - Name = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Default = true, Condition = condition, }; var driver = new Data.Models.Listxml.Driver { - Status = "XXXXXX", - Color = "XXXXXX", - Sound = "XXXXXX", - PaletteSize = "XXXXXX", - Emulation = "XXXXXX", - Cocktail = "XXXXXX", - SaveState = "XXXXXX", - RequiresArtwork = "XXXXXX", - Unofficial = "XXXXXX", - NoSoundHardware = "XXXXXX", - Incomplete = "XXXXXX", + Status = Data.Models.Metadata.SupportStatus.Good, + Color = Data.Models.Metadata.SupportStatus.Good, + Sound = Data.Models.Metadata.SupportStatus.Good, + PaletteSize = "palettesize", + Emulation = Data.Models.Metadata.SupportStatus.Good, + Cocktail = Data.Models.Metadata.SupportStatus.Good, + SaveState = Data.Models.Metadata.Supported.Yes, + RequiresArtwork = true, + Unofficial = true, + NoSoundHardware = true, + Incomplete = true, }; var feature = new Data.Models.Listxml.Feature { - Type = "XXXXXX", - Status = "XXXXXX", - Overall = "XXXXXX", + Type = Data.Models.Metadata.FeatureType.Protection, + Status = Data.Models.Metadata.FeatureStatus.Imperfect, + Overall = Data.Models.Metadata.FeatureStatus.Imperfect, }; var instance = new Data.Models.Listxml.Instance { - Name = "XXXXXX", - BriefName = "XXXXXX", + Name = "name", + BriefName = "briefname", }; var extension = new Data.Models.Listxml.Extension { - Name = "XXXXXX", + Name = "name", }; var device = new Data.Models.Listxml.Device { - Type = "XXXXXX", - Tag = "XXXXXX", - FixedImage = "XXXXXX", - Mandatory = "XXXXXX", - Interface = "XXXXXX", + Type = Data.Models.Metadata.DeviceType.PunchTape, + Tag = "tag", + FixedImage = "fixedimage", + Mandatory = true, + Interface = "interface", Instance = instance, Extension = [extension], }; var slotOption = new Data.Models.Listxml.SlotOption { - Name = "XXXXXX", - DevName = "XXXXXX", - Default = "XXXXXX", + Name = "name", + DevName = "devname", + Default = true, }; var slot = new Data.Models.Listxml.Slot { - Name = "XXXXXX", + Name = "name", SlotOption = [slotOption], }; var softwarelist = new Data.Models.Listxml.SoftwareList { - Tag = "XXXXXX", - Name = "XXXXXX", - Status = "XXXXXX", - Filter = "XXXXXX", + Tag = "tag", + Name = "name", + Status = Data.Models.Metadata.SoftwareListStatus.Original, + Filter = "filter", }; var ramoption = new Data.Models.Listxml.RamOption { - Name = "XXXXXX", - Default = "XXXXXX", - Content = "XXXXXX", + Name = "name", + Default = true, + Content = "content", }; Data.Models.Listxml.GameBase gameBase = game ? new Data.Models.Listxml.Game() : new Data.Models.Listxml.Machine(); - gameBase.Name = "XXXXXX"; + gameBase.Name = "name"; gameBase.SourceFile = "XXXXXX"; - gameBase.IsBios = "XXXXXX"; - gameBase.IsDevice = "XXXXXX"; - gameBase.IsMechanical = "XXXXXX"; - gameBase.Runnable = "XXXXXX"; + gameBase.IsBios = true; + gameBase.IsDevice = true; + gameBase.IsMechanical = true; + gameBase.Runnable = Data.Models.Metadata.Runnable.Yes; gameBase.CloneOf = "XXXXXX"; gameBase.RomOf = "XXXXXX"; gameBase.SampleOf = "XXXXXX"; - gameBase.Description = "XXXXXX"; + gameBase.Description = "description"; gameBase.Year = "XXXXXX"; gameBase.Manufacturer = "XXXXXX"; gameBase.History = "XXXXXX"; @@ -440,16 +440,16 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.GameBase? gb) { Assert.NotNull(gb); - Assert.Equal("XXXXXX", gb.Name); + Assert.Equal("name", gb.Name); Assert.Equal("XXXXXX", gb.SourceFile); - Assert.Equal("XXXXXX", gb.IsBios); - Assert.Equal("XXXXXX", gb.IsDevice); - Assert.Equal("XXXXXX", gb.IsMechanical); - Assert.Equal("XXXXXX", gb.Runnable); + Assert.Equal(true, gb.IsBios); + Assert.Equal(true, gb.IsDevice); + Assert.Equal(true, gb.IsMechanical); + Assert.Equal(Data.Models.Metadata.Runnable.Yes, gb.Runnable); Assert.Equal("XXXXXX", gb.CloneOf); Assert.Equal("XXXXXX", gb.RomOf); Assert.Equal("XXXXXX", gb.SampleOf); - Assert.Equal("XXXXXX", gb.Description); + Assert.Equal("description", gb.Description); Assert.Equal("XXXXXX", gb.Year); Assert.Equal("XXXXXX", gb.Manufacturer); Assert.Equal("XXXXXX", gb.History); @@ -534,9 +534,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.BiosSet? biosset) { Assert.NotNull(biosset); - Assert.Equal("XXXXXX", biosset.Name); - Assert.Equal("XXXXXX", biosset.Description); - Assert.Equal("XXXXXX", biosset.Default); + Assert.Equal("name", biosset.Name); + Assert.Equal("description", biosset.Description); + Assert.Equal(true, biosset.Default); } /// @@ -545,18 +545,18 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Rom? rom) { Assert.NotNull(rom); - Assert.Equal("XXXXXX", rom.Name); + Assert.Equal("name", rom.Name); Assert.Equal("XXXXXX", rom.Bios); - Assert.Equal("XXXXXX", rom.Size); + Assert.Equal(12345, rom.Size); Assert.Equal("XXXXXX", rom.CRC); Assert.Equal("XXXXXX", rom.SHA1); Assert.Equal("XXXXXX", rom.Merge); Assert.Equal("XXXXXX", rom.Region); Assert.Equal("XXXXXX", rom.Offset); - Assert.Equal("XXXXXX", rom.Status); - Assert.Equal("XXXXXX", rom.Optional); - Assert.Equal("XXXXXX", rom.Dispose); - Assert.Equal("XXXXXX", rom.SoundOnly); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, rom.Status); + Assert.Equal(true, rom.Optional); + Assert.Equal(true, rom.Dispose); + Assert.Equal(true, rom.SoundOnly); } /// @@ -565,15 +565,15 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Disk? disk) { Assert.NotNull(disk); - Assert.Equal("XXXXXX", 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("XXXXXX", disk.Writable); - Assert.Equal("XXXXXX", disk.Status); - Assert.Equal("XXXXXX", disk.Optional); + Assert.Equal("name", disk.Name); + 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); } /// @@ -582,7 +582,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.DeviceRef? deviceref) { Assert.NotNull(deviceref); - Assert.Equal("XXXXXX", deviceref.Name); + Assert.Equal("name", deviceref.Name); } /// @@ -591,7 +591,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Sample? sample) { Assert.NotNull(sample); - Assert.Equal("XXXXXX", sample.Name); + Assert.Equal("name", sample.Name); } /// @@ -600,11 +600,11 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Chip? chip) { Assert.NotNull(chip); - Assert.Equal("XXXXXX", chip.Name); - Assert.Equal("XXXXXX", chip.Tag); - Assert.Equal("XXXXXX", chip.Type); - Assert.Equal("XXXXXX", chip.SoundOnly); - Assert.Equal("XXXXXX", chip.Clock); + Assert.Equal("name", chip.Name); + Assert.Equal("tag", chip.Tag); + Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type); + Assert.Equal(true, chip.SoundOnly); + Assert.Equal(12345, chip.Clock); } /// @@ -613,20 +613,20 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Display? display) { Assert.NotNull(display); - Assert.Equal("XXXXXX", display.Tag); - Assert.Equal("XXXXXX", display.Type); - Assert.Equal("XXXXXX", display.Rotate); - Assert.Equal("XXXXXX", display.FlipX); - Assert.Equal("XXXXXX", display.Width); - Assert.Equal("XXXXXX", display.Height); - Assert.Equal("XXXXXX", display.Refresh); - Assert.Equal("XXXXXX", display.PixClock); - Assert.Equal("XXXXXX", display.HTotal); - Assert.Equal("XXXXXX", display.HBEnd); - Assert.Equal("XXXXXX", display.HBStart); - Assert.Equal("XXXXXX", display.VTotal); - Assert.Equal("XXXXXX", display.VBEnd); - Assert.Equal("XXXXXX", display.VBStart); + Assert.Equal("tag", display.Tag); + Assert.Equal(Data.Models.Metadata.DisplayType.Vector, display.Type); + Assert.Equal(Data.Models.Metadata.Rotation.East, display.Rotate); + Assert.Equal(true, display.FlipX); + Assert.Equal(12345, display.Width); + Assert.Equal(12345, display.Height); + Assert.Equal(123.45, display.Refresh); + Assert.Equal(12345, display.PixClock); + Assert.Equal(12345, display.HTotal); + Assert.Equal(12345, display.HBEnd); + Assert.Equal(12345, display.HBStart); + Assert.Equal(12345, display.VTotal); + Assert.Equal(12345, display.VBEnd); + Assert.Equal(12345, display.VBStart); } /// @@ -635,13 +635,13 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Video? video) { Assert.NotNull(video); - Assert.Equal("XXXXXX", video.Screen); - Assert.Equal("XXXXXX", video.Orientation); - Assert.Equal("XXXXXX", video.Width); - Assert.Equal("XXXXXX", video.Height); - Assert.Equal("XXXXXX", video.AspectX); - Assert.Equal("XXXXXX", video.AspectY); - Assert.Equal("XXXXXX", video.Refresh); + Assert.Equal(Data.Models.Metadata.DisplayType.Vector, video.Screen); + Assert.Equal(Data.Models.Metadata.Rotation.East, video.Orientation); + Assert.Equal(12345, video.Width); + Assert.Equal(12345, video.Height); + Assert.Equal(12345, video.AspectX); + Assert.Equal(12345, video.AspectY); + Assert.Equal(123.45, video.Refresh); } /// @@ -650,7 +650,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Sound? sound) { Assert.NotNull(sound); - Assert.Equal("XXXXXX", sound.Channels); + Assert.Equal(12345, sound.Channels); } /// @@ -659,12 +659,12 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Input? input) { Assert.NotNull(input); - Assert.Equal("XXXXXX", input.Service); - Assert.Equal("XXXXXX", input.Tilt); - Assert.Equal("XXXXXX", input.Players); - //Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control - Assert.Equal("XXXXXX", input.Buttons); - Assert.Equal("XXXXXX", input.Coins); + Assert.Equal(true, input.Service); + Assert.Equal(true, input.Tilt); + Assert.Equal(12345, input.Players); + Assert.Equal("controlattr", input.ControlAttr); + Assert.Equal(12345, input.Buttons); + Assert.Equal(12345, input.Coins); Assert.NotNull(input.Control); var control = Assert.Single(input.Control); @@ -677,18 +677,18 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Control? control) { Assert.NotNull(control); - Assert.Equal("XXXXXX", control.Type); - Assert.Equal("XXXXXX", control.Player); - Assert.Equal("XXXXXX", control.Buttons); - Assert.Equal("XXXXXX", control.ReqButtons); - Assert.Equal("XXXXXX", control.Minimum); - Assert.Equal("XXXXXX", control.Maximum); - Assert.Equal("XXXXXX", control.Sensitivity); - Assert.Equal("XXXXXX", control.KeyDelta); - Assert.Equal("XXXXXX", control.Reverse); - Assert.Equal("XXXXXX", control.Ways); - Assert.Equal("XXXXXX", control.Ways2); - Assert.Equal("XXXXXX", control.Ways3); + Assert.Equal(Data.Models.Metadata.ControlType.Lightgun, control.Type); + Assert.Equal(12345, control.Player); + Assert.Equal(12345, control.Buttons); + Assert.Equal(12345, control.ReqButtons); + Assert.Equal(12345, control.Minimum); + Assert.Equal(12345, control.Maximum); + Assert.Equal(12345, control.Sensitivity); + Assert.Equal(12345, control.KeyDelta); + Assert.Equal(true, control.Reverse); + Assert.Equal("ways", control.Ways); + Assert.Equal("ways2", control.Ways2); + Assert.Equal("ways3", control.Ways3); } /// @@ -697,9 +697,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.DipSwitch? dipswitch) { Assert.NotNull(dipswitch); - Assert.Equal("XXXXXX", dipswitch.Name); - Assert.Equal("XXXXXX", dipswitch.Tag); - Assert.Equal("XXXXXX", dipswitch.Mask); + Assert.Equal("name", dipswitch.Name); + Assert.Equal("tag", dipswitch.Tag); + Assert.Equal("mask", dipswitch.Mask); Validate(dipswitch.Condition); Assert.NotNull(dipswitch.DipLocation); @@ -717,10 +717,10 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Condition? condition) { Assert.NotNull(condition); - Assert.Equal("XXXXXX", condition.Tag); - Assert.Equal("XXXXXX", condition.Mask); - Assert.Equal("XXXXXX", condition.Relation); - Assert.Equal("XXXXXX", condition.Value); + Assert.Equal("tag", condition.Tag); + Assert.Equal("mask", condition.Mask); + Assert.Equal(Data.Models.Metadata.Relation.Equal, condition.Relation); + Assert.Equal("value", condition.Value); } /// @@ -729,9 +729,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.DipLocation? diplocation) { Assert.NotNull(diplocation); - Assert.Equal("XXXXXX", diplocation.Name); - Assert.Equal("XXXXXX", diplocation.Number); - Assert.Equal("XXXXXX", diplocation.Inverted); + Assert.Equal("name", diplocation.Name); + Assert.Equal(12345, diplocation.Number); + Assert.Equal(true, diplocation.Inverted); } /// @@ -740,9 +740,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.DipValue? dipvalue) { Assert.NotNull(dipvalue); - Assert.Equal("XXXXXX", dipvalue.Name); - Assert.Equal("XXXXXX", dipvalue.Value); - Assert.Equal("XXXXXX", dipvalue.Default); + Assert.Equal("name", dipvalue.Name); + Assert.Equal("value", dipvalue.Value); + Assert.Equal(true, dipvalue.Default); Validate(dipvalue.Condition); } @@ -752,9 +752,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Configuration? configuration) { Assert.NotNull(configuration); - Assert.Equal("XXXXXX", configuration.Name); - Assert.Equal("XXXXXX", configuration.Tag); - Assert.Equal("XXXXXX", configuration.Mask); + Assert.Equal("name", configuration.Name); + Assert.Equal("tag", configuration.Tag); + Assert.Equal("mask", configuration.Mask); Validate(configuration.Condition); Assert.NotNull(configuration.ConfLocation); @@ -772,9 +772,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.ConfLocation? conflocation) { Assert.NotNull(conflocation); - Assert.Equal("XXXXXX", conflocation.Name); - Assert.Equal("XXXXXX", conflocation.Number); - Assert.Equal("XXXXXX", conflocation.Inverted); + Assert.Equal("name", conflocation.Name); + Assert.Equal(12345, conflocation.Number); + Assert.Equal(true, conflocation.Inverted); } /// @@ -783,9 +783,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.ConfSetting? confsetting) { Assert.NotNull(confsetting); - Assert.Equal("XXXXXX", confsetting.Name); - Assert.Equal("XXXXXX", confsetting.Value); - Assert.Equal("XXXXXX", confsetting.Default); + Assert.Equal("name", confsetting.Name); + Assert.Equal("value", confsetting.Value); + Assert.Equal(true, confsetting.Default); Validate(confsetting.Condition); } @@ -795,7 +795,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Port? port) { Assert.NotNull(port); - Assert.Equal("XXXXXX", port.Tag); + Assert.Equal("tag", port.Tag); Assert.NotNull(port.Analog); var analog = Assert.Single(port.Analog); @@ -808,7 +808,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Analog? analog) { Assert.NotNull(analog); - Assert.Equal("XXXXXX", analog.Mask); + Assert.Equal("mask", analog.Mask); } /// @@ -817,8 +817,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Adjuster? adjuster) { Assert.NotNull(adjuster); - Assert.Equal("XXXXXX", adjuster.Name); - Assert.Equal("XXXXXX", adjuster.Default); + Assert.Equal("name", adjuster.Name); + Assert.Equal(true, adjuster.Default); Validate(adjuster.Condition); } @@ -828,17 +828,17 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Driver? driver) { Assert.NotNull(driver); - Assert.Equal("XXXXXX", driver.Status); - Assert.Equal("XXXXXX", driver.Color); - Assert.Equal("XXXXXX", driver.Sound); - Assert.Equal("XXXXXX", driver.PaletteSize); - Assert.Equal("XXXXXX", driver.Emulation); - Assert.Equal("XXXXXX", driver.Cocktail); - Assert.Equal("XXXXXX", driver.SaveState); - Assert.Equal("XXXXXX", driver.RequiresArtwork); - Assert.Equal("XXXXXX", driver.Unofficial); - Assert.Equal("XXXXXX", driver.NoSoundHardware); - Assert.Equal("XXXXXX", driver.Incomplete); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound); + Assert.Equal("palettesize", driver.PaletteSize); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Cocktail); + Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState); + Assert.Equal(true, driver.RequiresArtwork); + Assert.Equal(true, driver.Unofficial); + Assert.Equal(true, driver.NoSoundHardware); + Assert.Equal(true, driver.Incomplete); } /// @@ -847,9 +847,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Feature? feature) { Assert.NotNull(feature); - Assert.Equal("XXXXXX", feature.Type); - Assert.Equal("XXXXXX", feature.Status); - Assert.Equal("XXXXXX", feature.Overall); + Assert.Equal(Data.Models.Metadata.FeatureType.Protection, feature.Type); + Assert.Equal(Data.Models.Metadata.FeatureStatus.Imperfect, feature.Status); + Assert.Equal(Data.Models.Metadata.FeatureStatus.Imperfect, feature.Overall); } /// @@ -858,11 +858,11 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Device? device) { Assert.NotNull(device); - Assert.Equal("XXXXXX", device.Type); - Assert.Equal("XXXXXX", device.Tag); - Assert.Equal("XXXXXX", device.FixedImage); - Assert.Equal("XXXXXX", device.Mandatory); - Assert.Equal("XXXXXX", device.Interface); + Assert.Equal(Data.Models.Metadata.DeviceType.PunchTape, device.Type); + Assert.Equal("tag", device.Tag); + Assert.Equal("fixedimage", device.FixedImage); + Assert.Equal(true, device.Mandatory); + Assert.Equal("interface", device.Interface); Validate(device.Instance); Assert.NotNull(device.Extension); @@ -876,8 +876,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Instance? instance) { Assert.NotNull(instance); - Assert.Equal("XXXXXX", instance.Name); - Assert.Equal("XXXXXX", instance.BriefName); + Assert.Equal("name", instance.Name); + Assert.Equal("briefname", instance.BriefName); } /// @@ -886,7 +886,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Extension? extension) { Assert.NotNull(extension); - Assert.Equal("XXXXXX", extension.Name); + Assert.Equal("name", extension.Name); } /// @@ -895,7 +895,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Slot? slot) { Assert.NotNull(slot); - Assert.Equal("XXXXXX", slot.Name); + Assert.Equal("name", slot.Name); Assert.NotNull(slot.SlotOption); var slotoption = Assert.Single(slot.SlotOption); @@ -908,9 +908,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.SlotOption? slotoption) { Assert.NotNull(slotoption); - Assert.Equal("XXXXXX", slotoption.Name); - Assert.Equal("XXXXXX", slotoption.DevName); - Assert.Equal("XXXXXX", slotoption.Default); + Assert.Equal("name", slotoption.Name); + Assert.Equal("devname", slotoption.DevName); + Assert.Equal(true, slotoption.Default); } /// @@ -919,10 +919,10 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.SoftwareList? softwarelist) { Assert.NotNull(softwarelist); - Assert.Equal("XXXXXX", softwarelist.Tag); - Assert.Equal("XXXXXX", softwarelist.Name); - Assert.Equal("XXXXXX", softwarelist.Status); - Assert.Equal("XXXXXX", softwarelist.Filter); + Assert.Equal("tag", softwarelist.Tag); + Assert.Equal("name", softwarelist.Name); + Assert.Equal(Data.Models.Metadata.SoftwareListStatus.Original, softwarelist.Status); + Assert.Equal("filter", softwarelist.Filter); } /// @@ -931,9 +931,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.RamOption? ramoption) { Assert.NotNull(ramoption); - Assert.Equal("XXXXXX", ramoption.Name); - Assert.Equal("XXXXXX", ramoption.Default); - Assert.Equal("XXXXXX", ramoption.Content); + Assert.Equal("name", ramoption.Name); + Assert.Equal(true, ramoption.Default); + Assert.Equal("content", ramoption.Content); } } } diff --git a/SabreTools.Serialization.Readers.Test/MessTests.cs b/SabreTools.Serialization.Readers.Test/MessTests.cs index 4abddd17..f9b1ae56 100644 --- a/SabreTools.Serialization.Readers.Test/MessTests.cs +++ b/SabreTools.Serialization.Readers.Test/MessTests.cs @@ -128,148 +128,148 @@ namespace SabreTools.Serialization.Readers.Test { var biosset = new Data.Models.Listxml.BiosSet { - Name = "XXXXXX", - Description = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Description = "description", + Default = true, }; var rom = new Data.Models.Listxml.Rom { - Name = "XXXXXX", + Name = "name", Bios = "XXXXXX", - Size = "XXXXXX", + Size = 12345, CRC = "XXXXXX", SHA1 = "XXXXXX", Merge = "XXXXXX", Region = "XXXXXX", Offset = "XXXXXX", - Status = "XXXXXX", - Optional = "XXXXXX", - Dispose = "XXXXXX", - SoundOnly = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, + Optional = true, + Dispose = true, + SoundOnly = true, }; var disk = new Data.Models.Listxml.Disk { - Name = "XXXXXX", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - Merge = "XXXXXX", - Region = "XXXXXX", - Index = "XXXXXX", - Writable = "XXXXXX", - Status = "XXXXXX", - Optional = "XXXXXX", + Name = "name", + MD5 = "md5", + SHA1 = "sha1", + Merge = "merge", + Region = "region", + Index = 12345, + Writable = true, + Status = Data.Models.Metadata.ItemStatus.Good, + Optional = true, }; var deviceref = new Data.Models.Listxml.DeviceRef { - Name = "XXXXXX", + Name = "name", }; var sample = new Data.Models.Listxml.Sample { - Name = "XXXXXX", + Name = "name", }; var chip = new Data.Models.Listxml.Chip { - Name = "XXXXXX", - Tag = "XXXXXX", - Type = "XXXXXX", - SoundOnly = "XXXXXX", - Clock = "XXXXXX", + Name = "name", + Tag = "tag", + Type = Data.Models.Metadata.ChipType.CPU, + SoundOnly = true, + Clock = 12345, }; var display = new Data.Models.Listxml.Display { - Tag = "XXXXXX", - Type = "XXXXXX", - Rotate = "XXXXXX", - FlipX = "XXXXXX", - Width = "XXXXXX", - Height = "XXXXXX", - Refresh = "XXXXXX", - PixClock = "XXXXXX", - HTotal = "XXXXXX", - HBEnd = "XXXXXX", - HBStart = "XXXXXX", - VTotal = "XXXXXX", - VBEnd = "XXXXXX", - VBStart = "XXXXXX", + Tag = "tag", + Type = Data.Models.Metadata.DisplayType.Vector, + Rotate = Data.Models.Metadata.Rotation.East, + FlipX = true, + Width = 12345, + Height = 12345, + Refresh = 123.45, + PixClock = 12345, + HTotal = 12345, + HBEnd = 12345, + HBStart = 12345, + VTotal = 12345, + VBEnd = 12345, + VBStart = 12345, }; var video = new Data.Models.Listxml.Video { - Screen = "XXXXXX", - Orientation = "XXXXXX", - Width = "XXXXXX", - Height = "XXXXXX", - AspectX = "XXXXXX", - AspectY = "XXXXXX", - Refresh = "XXXXXX", + Screen = Data.Models.Metadata.DisplayType.Vector, + Orientation = Data.Models.Metadata.Rotation.East, + Width = 12345, + Height = 12345, + AspectX = 12345, + AspectY = 12345, + Refresh = 123.45, }; var sound = new Data.Models.Listxml.Sound { - Channels = "XXXXXX", + Channels = 12345, }; var control = new Data.Models.Listxml.Control { - Type = "XXXXXX", - Player = "XXXXXX", - Buttons = "XXXXXX", - ReqButtons = "XXXXXX", - Minimum = "XXXXXX", - Maximum = "XXXXXX", - Sensitivity = "XXXXXX", - KeyDelta = "XXXXXX", - Reverse = "XXXXXX", - Ways = "XXXXXX", - Ways2 = "XXXXXX", - Ways3 = "XXXXXX", + Type = Data.Models.Metadata.ControlType.Lightgun, + Player = 12345, + Buttons = 12345, + ReqButtons = 12345, + Minimum = 12345, + Maximum = 12345, + Sensitivity = 12345, + KeyDelta = 12345, + Reverse = true, + Ways = "ways", + Ways2 = "ways2", + Ways3 = "ways3", }; var input = new Data.Models.Listxml.Input { - Service = "XXXXXX", - Tilt = "XXXXXX", - Players = "XXXXXX", - //ControlAttr = "XXXXXX", // Mututally exclusive with input.Control - Buttons = "XXXXXX", - Coins = "XXXXXX", + Service = true, + Tilt = true, + Players = 12345, + ControlAttr = "controlattr", + Buttons = 12345, + Coins = 12345, Control = [control], }; var condition = new Data.Models.Listxml.Condition { - Tag = "XXXXXX", - Mask = "XXXXXX", - Relation = "XXXXXX", - Value = "XXXXXX", + Tag = "tag", + Mask = "mask", + Relation = Data.Models.Metadata.Relation.Equal, + Value = "value", }; var diplocation = new Data.Models.Listxml.DipLocation { - Name = "XXXXXX", - Number = "XXXXXX", - Inverted = "XXXXXX", + Name = "name", + Number = 12345, + Inverted = true, }; var dipvalue = new Data.Models.Listxml.DipValue { - Name = "XXXXXX", - Value = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Value = "value", + Default = true, Condition = condition, }; var dipswitch = new Data.Models.Listxml.DipSwitch { - Name = "XXXXXX", - Tag = "XXXXXX", - Mask = "XXXXXX", + Name = "name", + Tag = "tag", + Mask = "mask", Condition = condition, DipLocation = [diplocation], DipValue = [dipvalue], @@ -277,24 +277,24 @@ namespace SabreTools.Serialization.Readers.Test var conflocation = new Data.Models.Listxml.ConfLocation { - Name = "XXXXXX", - Number = "XXXXXX", - Inverted = "XXXXXX", + Name = "name", + Number = 12345, + Inverted = true, }; var confsetting = new Data.Models.Listxml.ConfSetting { - Name = "XXXXXX", - Value = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Value = "value", + Default = true, Condition = condition, }; var configuration = new Data.Models.Listxml.Configuration { - Name = "XXXXXX", - Tag = "XXXXXX", - Mask = "XXXXXX", + Name = "name", + Tag = "tag", + Mask = "mask", Condition = condition, ConfLocation = [conflocation], ConfSetting = [confsetting], @@ -302,107 +302,107 @@ namespace SabreTools.Serialization.Readers.Test var analog = new Data.Models.Listxml.Analog { - Mask = "XXXXXX", + Mask = "mask", }; var port = new Data.Models.Listxml.Port { - Tag = "XXXXXX", + Tag = "tag", Analog = [analog], }; var adjuster = new Data.Models.Listxml.Adjuster { - Name = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Default = true, Condition = condition, }; var driver = new Data.Models.Listxml.Driver { - Status = "XXXXXX", - Color = "XXXXXX", - Sound = "XXXXXX", - PaletteSize = "XXXXXX", - Emulation = "XXXXXX", - Cocktail = "XXXXXX", - SaveState = "XXXXXX", - RequiresArtwork = "XXXXXX", - Unofficial = "XXXXXX", - NoSoundHardware = "XXXXXX", - Incomplete = "XXXXXX", + Status = Data.Models.Metadata.SupportStatus.Good, + Color = Data.Models.Metadata.SupportStatus.Good, + Sound = Data.Models.Metadata.SupportStatus.Good, + PaletteSize = "palettesize", + Emulation = Data.Models.Metadata.SupportStatus.Good, + Cocktail = Data.Models.Metadata.SupportStatus.Good, + SaveState = Data.Models.Metadata.Supported.Yes, + RequiresArtwork = true, + Unofficial = true, + NoSoundHardware = true, + Incomplete = true, }; var feature = new Data.Models.Listxml.Feature { - Type = "XXXXXX", - Status = "XXXXXX", - Overall = "XXXXXX", + Type = Data.Models.Metadata.FeatureType.Protection, + Status = Data.Models.Metadata.FeatureStatus.Imperfect, + Overall = Data.Models.Metadata.FeatureStatus.Imperfect, }; var instance = new Data.Models.Listxml.Instance { - Name = "XXXXXX", - BriefName = "XXXXXX", + Name = "name", + BriefName = "briefname", }; var extension = new Data.Models.Listxml.Extension { - Name = "XXXXXX", + Name = "name", }; var device = new Data.Models.Listxml.Device { - Type = "XXXXXX", - Tag = "XXXXXX", - FixedImage = "XXXXXX", - Mandatory = "XXXXXX", - Interface = "XXXXXX", + Type = Data.Models.Metadata.DeviceType.PunchTape, + Tag = "tag", + FixedImage = "fixedimage", + Mandatory = true, + Interface = "interface", Instance = instance, Extension = [extension], }; var slotOption = new Data.Models.Listxml.SlotOption { - Name = "XXXXXX", - DevName = "XXXXXX", - Default = "XXXXXX", + Name = "name", + DevName = "devname", + Default = true, }; var slot = new Data.Models.Listxml.Slot { - Name = "XXXXXX", + Name = "name", SlotOption = [slotOption], }; var softwarelist = new Data.Models.Listxml.SoftwareList { - Tag = "XXXXXX", - Name = "XXXXXX", - Status = "XXXXXX", - Filter = "XXXXXX", + Tag = "tag", + Name = "name", + Status = Data.Models.Metadata.SoftwareListStatus.Original, + Filter = "filter", }; var ramoption = new Data.Models.Listxml.RamOption { - Name = "XXXXXX", - Default = "XXXXXX", - Content = "XXXXXX", + Name = "name", + Default = true, + Content = "content", }; Data.Models.Listxml.GameBase gameBase = game ? new Data.Models.Listxml.Game() : new Data.Models.Listxml.Machine(); - gameBase.Name = "XXXXXX"; + gameBase.Name = "name"; gameBase.SourceFile = "XXXXXX"; - gameBase.IsBios = "XXXXXX"; - gameBase.IsDevice = "XXXXXX"; - gameBase.IsMechanical = "XXXXXX"; - gameBase.Runnable = "XXXXXX"; + gameBase.IsBios = true; + gameBase.IsDevice = true; + gameBase.IsMechanical = true; + gameBase.Runnable = Data.Models.Metadata.Runnable.Yes; gameBase.CloneOf = "XXXXXX"; gameBase.RomOf = "XXXXXX"; gameBase.SampleOf = "XXXXXX"; - gameBase.Description = "XXXXXX"; + gameBase.Description = "description"; gameBase.Year = "XXXXXX"; gameBase.Manufacturer = "XXXXXX"; gameBase.History = "XXXXXX"; @@ -440,16 +440,16 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.GameBase? gb) { Assert.NotNull(gb); - Assert.Equal("XXXXXX", gb.Name); + Assert.Equal("name", gb.Name); Assert.Equal("XXXXXX", gb.SourceFile); - Assert.Equal("XXXXXX", gb.IsBios); - Assert.Equal("XXXXXX", gb.IsDevice); - Assert.Equal("XXXXXX", gb.IsMechanical); - Assert.Equal("XXXXXX", gb.Runnable); + Assert.Equal(true, gb.IsBios); + Assert.Equal(true, gb.IsDevice); + Assert.Equal(true, gb.IsMechanical); + Assert.Equal(Data.Models.Metadata.Runnable.Yes, gb.Runnable); Assert.Equal("XXXXXX", gb.CloneOf); Assert.Equal("XXXXXX", gb.RomOf); Assert.Equal("XXXXXX", gb.SampleOf); - Assert.Equal("XXXXXX", gb.Description); + Assert.Equal("description", gb.Description); Assert.Equal("XXXXXX", gb.Year); Assert.Equal("XXXXXX", gb.Manufacturer); Assert.Equal("XXXXXX", gb.History); @@ -534,9 +534,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.BiosSet? biosset) { Assert.NotNull(biosset); - Assert.Equal("XXXXXX", biosset.Name); - Assert.Equal("XXXXXX", biosset.Description); - Assert.Equal("XXXXXX", biosset.Default); + Assert.Equal("name", biosset.Name); + Assert.Equal("description", biosset.Description); + Assert.Equal(true, biosset.Default); } /// @@ -545,18 +545,18 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Rom? rom) { Assert.NotNull(rom); - Assert.Equal("XXXXXX", rom.Name); + Assert.Equal("name", rom.Name); Assert.Equal("XXXXXX", rom.Bios); - Assert.Equal("XXXXXX", rom.Size); + Assert.Equal(12345, rom.Size); Assert.Equal("XXXXXX", rom.CRC); Assert.Equal("XXXXXX", rom.SHA1); Assert.Equal("XXXXXX", rom.Merge); Assert.Equal("XXXXXX", rom.Region); Assert.Equal("XXXXXX", rom.Offset); - Assert.Equal("XXXXXX", rom.Status); - Assert.Equal("XXXXXX", rom.Optional); - Assert.Equal("XXXXXX", rom.Dispose); - Assert.Equal("XXXXXX", rom.SoundOnly); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, rom.Status); + Assert.Equal(true, rom.Optional); + Assert.Equal(true, rom.Dispose); + Assert.Equal(true, rom.SoundOnly); } /// @@ -565,15 +565,15 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Disk? disk) { Assert.NotNull(disk); - Assert.Equal("XXXXXX", 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("XXXXXX", disk.Writable); - Assert.Equal("XXXXXX", disk.Status); - Assert.Equal("XXXXXX", disk.Optional); + Assert.Equal("name", disk.Name); + 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); } /// @@ -582,7 +582,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.DeviceRef? deviceref) { Assert.NotNull(deviceref); - Assert.Equal("XXXXXX", deviceref.Name); + Assert.Equal("name", deviceref.Name); } /// @@ -591,7 +591,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Sample? sample) { Assert.NotNull(sample); - Assert.Equal("XXXXXX", sample.Name); + Assert.Equal("name", sample.Name); } /// @@ -600,11 +600,11 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Chip? chip) { Assert.NotNull(chip); - Assert.Equal("XXXXXX", chip.Name); - Assert.Equal("XXXXXX", chip.Tag); - Assert.Equal("XXXXXX", chip.Type); - Assert.Equal("XXXXXX", chip.SoundOnly); - Assert.Equal("XXXXXX", chip.Clock); + Assert.Equal("name", chip.Name); + Assert.Equal("tag", chip.Tag); + Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type); + Assert.Equal(true, chip.SoundOnly); + Assert.Equal(12345, chip.Clock); } /// @@ -613,20 +613,20 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Display? display) { Assert.NotNull(display); - Assert.Equal("XXXXXX", display.Tag); - Assert.Equal("XXXXXX", display.Type); - Assert.Equal("XXXXXX", display.Rotate); - Assert.Equal("XXXXXX", display.FlipX); - Assert.Equal("XXXXXX", display.Width); - Assert.Equal("XXXXXX", display.Height); - Assert.Equal("XXXXXX", display.Refresh); - Assert.Equal("XXXXXX", display.PixClock); - Assert.Equal("XXXXXX", display.HTotal); - Assert.Equal("XXXXXX", display.HBEnd); - Assert.Equal("XXXXXX", display.HBStart); - Assert.Equal("XXXXXX", display.VTotal); - Assert.Equal("XXXXXX", display.VBEnd); - Assert.Equal("XXXXXX", display.VBStart); + Assert.Equal("tag", display.Tag); + Assert.Equal(Data.Models.Metadata.DisplayType.Vector, display.Type); + Assert.Equal(Data.Models.Metadata.Rotation.East, display.Rotate); + Assert.Equal(true, display.FlipX); + Assert.Equal(12345, display.Width); + Assert.Equal(12345, display.Height); + Assert.Equal(123.45, display.Refresh); + Assert.Equal(12345, display.PixClock); + Assert.Equal(12345, display.HTotal); + Assert.Equal(12345, display.HBEnd); + Assert.Equal(12345, display.HBStart); + Assert.Equal(12345, display.VTotal); + Assert.Equal(12345, display.VBEnd); + Assert.Equal(12345, display.VBStart); } /// @@ -635,13 +635,13 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Video? video) { Assert.NotNull(video); - Assert.Equal("XXXXXX", video.Screen); - Assert.Equal("XXXXXX", video.Orientation); - Assert.Equal("XXXXXX", video.Width); - Assert.Equal("XXXXXX", video.Height); - Assert.Equal("XXXXXX", video.AspectX); - Assert.Equal("XXXXXX", video.AspectY); - Assert.Equal("XXXXXX", video.Refresh); + Assert.Equal(Data.Models.Metadata.DisplayType.Vector, video.Screen); + Assert.Equal(Data.Models.Metadata.Rotation.East, video.Orientation); + Assert.Equal(12345, video.Width); + Assert.Equal(12345, video.Height); + Assert.Equal(12345, video.AspectX); + Assert.Equal(12345, video.AspectY); + Assert.Equal(123.45, video.Refresh); } /// @@ -650,7 +650,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Sound? sound) { Assert.NotNull(sound); - Assert.Equal("XXXXXX", sound.Channels); + Assert.Equal(12345, sound.Channels); } /// @@ -659,12 +659,12 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Input? input) { Assert.NotNull(input); - Assert.Equal("XXXXXX", input.Service); - Assert.Equal("XXXXXX", input.Tilt); - Assert.Equal("XXXXXX", input.Players); - //Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control - Assert.Equal("XXXXXX", input.Buttons); - Assert.Equal("XXXXXX", input.Coins); + Assert.Equal(true, input.Service); + Assert.Equal(true, input.Tilt); + Assert.Equal(12345, input.Players); + Assert.Equal("controlattr", input.ControlAttr); + Assert.Equal(12345, input.Buttons); + Assert.Equal(12345, input.Coins); Assert.NotNull(input.Control); var control = Assert.Single(input.Control); @@ -677,18 +677,18 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Control? control) { Assert.NotNull(control); - Assert.Equal("XXXXXX", control.Type); - Assert.Equal("XXXXXX", control.Player); - Assert.Equal("XXXXXX", control.Buttons); - Assert.Equal("XXXXXX", control.ReqButtons); - Assert.Equal("XXXXXX", control.Minimum); - Assert.Equal("XXXXXX", control.Maximum); - Assert.Equal("XXXXXX", control.Sensitivity); - Assert.Equal("XXXXXX", control.KeyDelta); - Assert.Equal("XXXXXX", control.Reverse); - Assert.Equal("XXXXXX", control.Ways); - Assert.Equal("XXXXXX", control.Ways2); - Assert.Equal("XXXXXX", control.Ways3); + Assert.Equal(Data.Models.Metadata.ControlType.Lightgun, control.Type); + Assert.Equal(12345, control.Player); + Assert.Equal(12345, control.Buttons); + Assert.Equal(12345, control.ReqButtons); + Assert.Equal(12345, control.Minimum); + Assert.Equal(12345, control.Maximum); + Assert.Equal(12345, control.Sensitivity); + Assert.Equal(12345, control.KeyDelta); + Assert.Equal(true, control.Reverse); + Assert.Equal("ways", control.Ways); + Assert.Equal("ways2", control.Ways2); + Assert.Equal("ways3", control.Ways3); } /// @@ -697,9 +697,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.DipSwitch? dipswitch) { Assert.NotNull(dipswitch); - Assert.Equal("XXXXXX", dipswitch.Name); - Assert.Equal("XXXXXX", dipswitch.Tag); - Assert.Equal("XXXXXX", dipswitch.Mask); + Assert.Equal("name", dipswitch.Name); + Assert.Equal("tag", dipswitch.Tag); + Assert.Equal("mask", dipswitch.Mask); Validate(dipswitch.Condition); Assert.NotNull(dipswitch.DipLocation); @@ -717,10 +717,10 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Condition? condition) { Assert.NotNull(condition); - Assert.Equal("XXXXXX", condition.Tag); - Assert.Equal("XXXXXX", condition.Mask); - Assert.Equal("XXXXXX", condition.Relation); - Assert.Equal("XXXXXX", condition.Value); + Assert.Equal("tag", condition.Tag); + Assert.Equal("mask", condition.Mask); + Assert.Equal(Data.Models.Metadata.Relation.Equal, condition.Relation); + Assert.Equal("value", condition.Value); } /// @@ -729,9 +729,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.DipLocation? diplocation) { Assert.NotNull(diplocation); - Assert.Equal("XXXXXX", diplocation.Name); - Assert.Equal("XXXXXX", diplocation.Number); - Assert.Equal("XXXXXX", diplocation.Inverted); + Assert.Equal("name", diplocation.Name); + Assert.Equal(12345, diplocation.Number); + Assert.Equal(true, diplocation.Inverted); } /// @@ -740,9 +740,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.DipValue? dipvalue) { Assert.NotNull(dipvalue); - Assert.Equal("XXXXXX", dipvalue.Name); - Assert.Equal("XXXXXX", dipvalue.Value); - Assert.Equal("XXXXXX", dipvalue.Default); + Assert.Equal("name", dipvalue.Name); + Assert.Equal("value", dipvalue.Value); + Assert.Equal(true, dipvalue.Default); Validate(dipvalue.Condition); } @@ -752,9 +752,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Configuration? configuration) { Assert.NotNull(configuration); - Assert.Equal("XXXXXX", configuration.Name); - Assert.Equal("XXXXXX", configuration.Tag); - Assert.Equal("XXXXXX", configuration.Mask); + Assert.Equal("name", configuration.Name); + Assert.Equal("tag", configuration.Tag); + Assert.Equal("mask", configuration.Mask); Validate(configuration.Condition); Assert.NotNull(configuration.ConfLocation); @@ -772,9 +772,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.ConfLocation? conflocation) { Assert.NotNull(conflocation); - Assert.Equal("XXXXXX", conflocation.Name); - Assert.Equal("XXXXXX", conflocation.Number); - Assert.Equal("XXXXXX", conflocation.Inverted); + Assert.Equal("name", conflocation.Name); + Assert.Equal(12345, conflocation.Number); + Assert.Equal(true, conflocation.Inverted); } /// @@ -783,9 +783,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.ConfSetting? confsetting) { Assert.NotNull(confsetting); - Assert.Equal("XXXXXX", confsetting.Name); - Assert.Equal("XXXXXX", confsetting.Value); - Assert.Equal("XXXXXX", confsetting.Default); + Assert.Equal("name", confsetting.Name); + Assert.Equal("value", confsetting.Value); + Assert.Equal(true, confsetting.Default); Validate(confsetting.Condition); } @@ -795,7 +795,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Port? port) { Assert.NotNull(port); - Assert.Equal("XXXXXX", port.Tag); + Assert.Equal("tag", port.Tag); Assert.NotNull(port.Analog); var analog = Assert.Single(port.Analog); @@ -808,7 +808,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Analog? analog) { Assert.NotNull(analog); - Assert.Equal("XXXXXX", analog.Mask); + Assert.Equal("mask", analog.Mask); } /// @@ -817,8 +817,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Adjuster? adjuster) { Assert.NotNull(adjuster); - Assert.Equal("XXXXXX", adjuster.Name); - Assert.Equal("XXXXXX", adjuster.Default); + Assert.Equal("name", adjuster.Name); + Assert.Equal(true, adjuster.Default); Validate(adjuster.Condition); } @@ -828,17 +828,17 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Driver? driver) { Assert.NotNull(driver); - Assert.Equal("XXXXXX", driver.Status); - Assert.Equal("XXXXXX", driver.Color); - Assert.Equal("XXXXXX", driver.Sound); - Assert.Equal("XXXXXX", driver.PaletteSize); - Assert.Equal("XXXXXX", driver.Emulation); - Assert.Equal("XXXXXX", driver.Cocktail); - Assert.Equal("XXXXXX", driver.SaveState); - Assert.Equal("XXXXXX", driver.RequiresArtwork); - Assert.Equal("XXXXXX", driver.Unofficial); - Assert.Equal("XXXXXX", driver.NoSoundHardware); - Assert.Equal("XXXXXX", driver.Incomplete); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound); + Assert.Equal("palettesize", driver.PaletteSize); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation); + Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Cocktail); + Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState); + Assert.Equal(true, driver.RequiresArtwork); + Assert.Equal(true, driver.Unofficial); + Assert.Equal(true, driver.NoSoundHardware); + Assert.Equal(true, driver.Incomplete); } /// @@ -847,9 +847,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Feature? feature) { Assert.NotNull(feature); - Assert.Equal("XXXXXX", feature.Type); - Assert.Equal("XXXXXX", feature.Status); - Assert.Equal("XXXXXX", feature.Overall); + Assert.Equal(Data.Models.Metadata.FeatureType.Protection, feature.Type); + Assert.Equal(Data.Models.Metadata.FeatureStatus.Imperfect, feature.Status); + Assert.Equal(Data.Models.Metadata.FeatureStatus.Imperfect, feature.Overall); } /// @@ -858,11 +858,11 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Device? device) { Assert.NotNull(device); - Assert.Equal("XXXXXX", device.Type); - Assert.Equal("XXXXXX", device.Tag); - Assert.Equal("XXXXXX", device.FixedImage); - Assert.Equal("XXXXXX", device.Mandatory); - Assert.Equal("XXXXXX", device.Interface); + Assert.Equal(Data.Models.Metadata.DeviceType.PunchTape, device.Type); + Assert.Equal("tag", device.Tag); + Assert.Equal("fixedimage", device.FixedImage); + Assert.Equal(true, device.Mandatory); + Assert.Equal("interface", device.Interface); Validate(device.Instance); Assert.NotNull(device.Extension); @@ -876,8 +876,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Instance? instance) { Assert.NotNull(instance); - Assert.Equal("XXXXXX", instance.Name); - Assert.Equal("XXXXXX", instance.BriefName); + Assert.Equal("name", instance.Name); + Assert.Equal("briefname", instance.BriefName); } /// @@ -886,7 +886,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Extension? extension) { Assert.NotNull(extension); - Assert.Equal("XXXXXX", extension.Name); + Assert.Equal("name", extension.Name); } /// @@ -895,7 +895,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.Slot? slot) { Assert.NotNull(slot); - Assert.Equal("XXXXXX", slot.Name); + Assert.Equal("name", slot.Name); Assert.NotNull(slot.SlotOption); var slotoption = Assert.Single(slot.SlotOption); @@ -908,9 +908,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.SlotOption? slotoption) { Assert.NotNull(slotoption); - Assert.Equal("XXXXXX", slotoption.Name); - Assert.Equal("XXXXXX", slotoption.DevName); - Assert.Equal("XXXXXX", slotoption.Default); + Assert.Equal("name", slotoption.Name); + Assert.Equal("devname", slotoption.DevName); + Assert.Equal(true, slotoption.Default); } /// @@ -919,10 +919,10 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.SoftwareList? softwarelist) { Assert.NotNull(softwarelist); - Assert.Equal("XXXXXX", softwarelist.Tag); - Assert.Equal("XXXXXX", softwarelist.Name); - Assert.Equal("XXXXXX", softwarelist.Status); - Assert.Equal("XXXXXX", softwarelist.Filter); + Assert.Equal("tag", softwarelist.Tag); + Assert.Equal("name", softwarelist.Name); + Assert.Equal(Data.Models.Metadata.SoftwareListStatus.Original, softwarelist.Status); + Assert.Equal("filter", softwarelist.Filter); } /// @@ -931,9 +931,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.Listxml.RamOption? ramoption) { Assert.NotNull(ramoption); - Assert.Equal("XXXXXX", ramoption.Name); - Assert.Equal("XXXXXX", ramoption.Default); - Assert.Equal("XXXXXX", ramoption.Content); + Assert.Equal("name", ramoption.Name); + Assert.Equal(true, ramoption.Default); + Assert.Equal("content", ramoption.Content); } } } diff --git a/SabreTools.Serialization.Readers.Test/NoIntroDatabaseTests.cs b/SabreTools.Serialization.Readers.Test/NoIntroDatabaseTests.cs index 58c29bf5..68f6c763 100644 --- a/SabreTools.Serialization.Readers.Test/NoIntroDatabaseTests.cs +++ b/SabreTools.Serialization.Readers.Test/NoIntroDatabaseTests.cs @@ -106,7 +106,7 @@ namespace SabreTools.Serialization.Readers.Test RegParent = "XXXXXX", MergeOf = "XXXXXX", MergeName = "XXXXXX", - Name = "XXXXXX", + Name = "name", NameAlt = "XXXXXX", Region = "XXXXXX", Languages = "XXXXXX", @@ -121,7 +121,7 @@ namespace SabreTools.Serialization.Readers.Test Alt = "XXXXXX", GameId1 = "XXXXXX", GameId2 = "XXXXXX", - Description = "XXXXXX", + Description = "description", Bios = "XXXXXX", Licensed = "XXXXXX", Pirate = "XXXXXX", @@ -140,48 +140,48 @@ namespace SabreTools.Serialization.Readers.Test var sourceDetails = new Data.Models.NoIntroDatabase.SourceDetails { - Id = "XXXXXX", - AppendToNumber = "XXXXXX", - Section = "XXXXXX", - RomInfo = "XXXXXX", - DumpDate = "XXXXXX", - DumpDateInfo = "XXXXXX", - ReleaseDate = "XXXXXX", - ReleaseDateInfo = "XXXXXX", - Dumper = "XXXXXX", - Project = "XXXXXX", - OriginalFormat = "XXXXXX", - Nodump = "XXXXXX", - Tool = "XXXXXX", - Origin = "XXXXXX", - Comment1 = "XXXXXX", - Comment2 = "XXXXXX", - Link1 = "XXXXXX", - Link1Public = "XXXXXX", - Link2 = "XXXXXX", - Link2Public = "XXXXXX", - Link3 = "XXXXXX", - Link3Public = "XXXXXX", - Region = "XXXXXX", - MediaTitle = "XXXXXX", + Id = "id", + AppendToNumber = "appendtonumber", + Section = "section", + RomInfo = "rominfo", + DumpDate = "dumpdate", + DumpDateInfo = true, + ReleaseDate = "releasedate", + ReleaseDateInfo = true, + Dumper = "dumper", + Project = "project", + OriginalFormat = "originalformat", + Nodump = true, + Tool = "tool", + Origin = "origin", + Comment1 = "comment1", + Comment2 = "comment2", + Link1 = "link1", + Link1Public = true, + Link2 = "link2", + Link2Public = true, + Link3 = "link3", + Link3Public = true, + Region = "region", + MediaTitle = "mediatitle", }; var serials = new Data.Models.NoIntroDatabase.Serials { - MediaSerial1 = "XXXXXX", - MediaSerial2 = "XXXXXX", - MediaSerial3 = "XXXXXX", - PCBSerial = "XXXXXX", - RomChipSerial1 = "XXXXXX", - RomChipSerial2 = "XXXXXX", - LockoutSerial = "XXXXXX", - SaveChipSerial = "XXXXXX", - ChipSerial = "XXXXXX", - BoxSerial = "XXXXXX", - MediaStamp = "XXXXXX", - BoxBarcode = "XXXXXX", - DigitalSerial1 = "XXXXXX", - DigitalSerial2 = "XXXXXX", + BoxBarcode = "boxbarcode", + BoxSerial = "boxserial", + ChipSerial = "chipserial", + DigitalSerial1 = "digitalserial1", + DigitalSerial2 = "digitalserial2", + LockoutSerial = "lockoutserial", + MediaSerial1 = "mediaserial1", + MediaSerial2 = "mediaserial2", + MediaSerial3 = "mediaserial3", + MediaStamp = "mediastamp", + PCBSerial = "pcbserial", + RomChipSerial1 = "romchipserial1", + RomChipSerial2 = "romchipserial2", + SaveChipSerial = "savechipserial", }; var file = new Data.Models.NoIntroDatabase.File @@ -196,7 +196,7 @@ namespace SabreTools.Serialization.Readers.Test Date = "XXXXXX", Format = "XXXXXX", Note = "XXXXXX", - Filter = "XXXXXX", + Filter = "filter", Version = "XXXXXX", UpdateType = "XXXXXX", Size = "XXXXXX", @@ -222,22 +222,22 @@ namespace SabreTools.Serialization.Readers.Test var releaseDetails = new Data.Models.NoIntroDatabase.ReleaseDetails { - Id = "XXXXXX", - AppendToNumber = "XXXXXX", - Date = "XXXXXX", - OriginalFormat = "XXXXXX", - Group = "XXXXXX", - DirName = "XXXXXX", - NfoName = "XXXXXX", - NfoSize = "XXXXXX", - NfoCRC = "XXXXXX", - ArchiveName = "XXXXXX", - RomInfo = "XXXXXX", - Category = "XXXXXX", - Comment = "XXXXXX", - Tool = "XXXXXX", - Region = "XXXXXX", - Origin = "XXXXXX", + Id = "id", + AppendToNumber = "appendtonumber", + Date = "date", + OriginalFormat = "originalformat", + Group = "group", + DirName = "dirname", + NfoName = "nfoname", + NfoSize = "nfosize", + NfoCRC = "nfocrc", + ArchiveName = "archivename", + RomInfo = "rominfo", + Category = "category", + Comment = "comment", + Tool = "tool", + Region = "region", + Origin = "origin", }; var release = new Data.Models.NoIntroDatabase.Release @@ -249,7 +249,7 @@ namespace SabreTools.Serialization.Readers.Test var game = new Data.Models.NoIntroDatabase.Game { - Name = "XXXXXX", + Name = "name", Archive = archive, Media = [media], Source = [source], @@ -268,7 +268,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.NoIntroDatabase.Game? game) { Assert.NotNull(game); - Assert.Equal("XXXXXX", game.Name); + Assert.Equal("name", game.Name); Validate(game.Archive); @@ -296,7 +296,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal("XXXXXX", archive.RegParent); Assert.Equal("XXXXXX", archive.MergeOf); Assert.Equal("XXXXXX", archive.MergeName); - Assert.Equal("XXXXXX", archive.Name); + Assert.Equal("name", archive.Name); Assert.Equal("XXXXXX", archive.NameAlt); Assert.Equal("XXXXXX", archive.Region); Assert.Equal("XXXXXX", archive.Languages); @@ -311,7 +311,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal("XXXXXX", archive.Alt); Assert.Equal("XXXXXX", archive.GameId1); Assert.Equal("XXXXXX", archive.GameId2); - Assert.Equal("XXXXXX", archive.Description); + Assert.Equal("description", archive.Description); Assert.Equal("XXXXXX", archive.Bios); Assert.Equal("XXXXXX", archive.Licensed); Assert.Equal("XXXXXX", archive.Pirate); @@ -356,30 +356,30 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.NoIntroDatabase.SourceDetails? sourceDetails) { Assert.NotNull(sourceDetails); - Assert.Equal("XXXXXX", sourceDetails.Id); - Assert.Equal("XXXXXX", sourceDetails.AppendToNumber); - Assert.Equal("XXXXXX", sourceDetails.Section); - Assert.Equal("XXXXXX", sourceDetails.RomInfo); - Assert.Equal("XXXXXX", sourceDetails.DumpDate); - Assert.Equal("XXXXXX", sourceDetails.DumpDateInfo); - Assert.Equal("XXXXXX", sourceDetails.ReleaseDate); - Assert.Equal("XXXXXX", sourceDetails.ReleaseDateInfo); - Assert.Equal("XXXXXX", sourceDetails.Dumper); - Assert.Equal("XXXXXX", sourceDetails.Project); - Assert.Equal("XXXXXX", sourceDetails.OriginalFormat); - Assert.Equal("XXXXXX", sourceDetails.Nodump); - Assert.Equal("XXXXXX", sourceDetails.Tool); - Assert.Equal("XXXXXX", sourceDetails.Origin); - Assert.Equal("XXXXXX", sourceDetails.Comment1); - Assert.Equal("XXXXXX", sourceDetails.Comment2); - Assert.Equal("XXXXXX", sourceDetails.Link1); - Assert.Equal("XXXXXX", sourceDetails.Link1Public); - Assert.Equal("XXXXXX", sourceDetails.Link2); - Assert.Equal("XXXXXX", sourceDetails.Link2Public); - Assert.Equal("XXXXXX", sourceDetails.Link3); - Assert.Equal("XXXXXX", sourceDetails.Link3Public); - Assert.Equal("XXXXXX", sourceDetails.Region); - Assert.Equal("XXXXXX", sourceDetails.MediaTitle); + Assert.Equal("id", sourceDetails.Id); + Assert.Equal("appendtonumber", sourceDetails.AppendToNumber); + Assert.Equal("section", sourceDetails.Section); + Assert.Equal("rominfo", sourceDetails.RomInfo); + Assert.Equal("dumpdate", sourceDetails.DumpDate); + Assert.Equal(true, sourceDetails.DumpDateInfo); + Assert.Equal("releasedate", sourceDetails.ReleaseDate); + Assert.Equal(true, sourceDetails.ReleaseDateInfo); + Assert.Equal("dumper", sourceDetails.Dumper); + Assert.Equal("project", sourceDetails.Project); + Assert.Equal("originalformat", sourceDetails.OriginalFormat); + Assert.Equal(true, sourceDetails.Nodump); + Assert.Equal("tool", sourceDetails.Tool); + Assert.Equal("origin", sourceDetails.Origin); + Assert.Equal("comment1", sourceDetails.Comment1); + Assert.Equal("comment2", sourceDetails.Comment2); + Assert.Equal("link1", sourceDetails.Link1); + Assert.Equal(true, sourceDetails.Link1Public); + Assert.Equal("link2", sourceDetails.Link2); + Assert.Equal(true, sourceDetails.Link2Public); + Assert.Equal("link3", sourceDetails.Link3); + Assert.Equal(true, sourceDetails.Link3Public); + Assert.Equal("region", sourceDetails.Region); + Assert.Equal("mediatitle", sourceDetails.MediaTitle); } /// @@ -388,20 +388,20 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.NoIntroDatabase.Serials? serials) { Assert.NotNull(serials); - Assert.Equal("XXXXXX", serials.MediaSerial1); - Assert.Equal("XXXXXX", serials.MediaSerial2); - Assert.Equal("XXXXXX", serials.MediaSerial3); - Assert.Equal("XXXXXX", serials.PCBSerial); - Assert.Equal("XXXXXX", serials.RomChipSerial1); - Assert.Equal("XXXXXX", serials.RomChipSerial2); - Assert.Equal("XXXXXX", serials.LockoutSerial); - Assert.Equal("XXXXXX", serials.SaveChipSerial); - Assert.Equal("XXXXXX", serials.ChipSerial); - Assert.Equal("XXXXXX", serials.BoxSerial); - Assert.Equal("XXXXXX", serials.MediaStamp); - Assert.Equal("XXXXXX", serials.BoxBarcode); - Assert.Equal("XXXXXX", serials.DigitalSerial1); - Assert.Equal("XXXXXX", serials.DigitalSerial2); + Assert.Equal("boxbarcode", serials.BoxBarcode); + Assert.Equal("boxserial", serials.BoxSerial); + Assert.Equal("chipserial", serials.ChipSerial); + Assert.Equal("digitalserial1", serials.DigitalSerial1); + Assert.Equal("digitalserial2", serials.DigitalSerial2); + Assert.Equal("lockoutserial", serials.LockoutSerial); + Assert.Equal("mediaserial1", serials.MediaSerial1); + Assert.Equal("mediaserial2", serials.MediaSerial2); + Assert.Equal("mediaserial3", serials.MediaSerial3); + Assert.Equal("mediastamp", serials.MediaStamp); + Assert.Equal("pcbserial", serials.PCBSerial); + Assert.Equal("romchipserial1", serials.RomChipSerial1); + Assert.Equal("romchipserial2", serials.RomChipSerial2); + Assert.Equal("savechipserial", serials.SaveChipSerial); } /// @@ -420,7 +420,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal("XXXXXX", file.Date); Assert.Equal("XXXXXX", file.Format); Assert.Equal("XXXXXX", file.Note); - Assert.Equal("XXXXXX", file.Filter); + Assert.Equal("filter", file.Filter); Assert.Equal("XXXXXX", file.Version); Assert.Equal("XXXXXX", file.UpdateType); Assert.Equal("XXXXXX", file.Size); @@ -459,22 +459,22 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.NoIntroDatabase.ReleaseDetails? releaseDetails) { Assert.NotNull(releaseDetails); - Assert.Equal("XXXXXX", releaseDetails.Id); - Assert.Equal("XXXXXX", releaseDetails.AppendToNumber); - Assert.Equal("XXXXXX", releaseDetails.Date); - Assert.Equal("XXXXXX", releaseDetails.OriginalFormat); - Assert.Equal("XXXXXX", releaseDetails.Group); - Assert.Equal("XXXXXX", releaseDetails.DirName); - Assert.Equal("XXXXXX", releaseDetails.NfoName); - Assert.Equal("XXXXXX", releaseDetails.NfoSize); - Assert.Equal("XXXXXX", releaseDetails.NfoCRC); - Assert.Equal("XXXXXX", releaseDetails.ArchiveName); - Assert.Equal("XXXXXX", releaseDetails.RomInfo); - Assert.Equal("XXXXXX", releaseDetails.Category); - Assert.Equal("XXXXXX", releaseDetails.Comment); - Assert.Equal("XXXXXX", releaseDetails.Tool); - Assert.Equal("XXXXXX", releaseDetails.Region); - Assert.Equal("XXXXXX", releaseDetails.Origin); + Assert.Equal("id", releaseDetails.Id); + Assert.Equal("appendtonumber", releaseDetails.AppendToNumber); + Assert.Equal("date", releaseDetails.Date); + Assert.Equal("originalformat", releaseDetails.OriginalFormat); + Assert.Equal("group", releaseDetails.Group); + Assert.Equal("dirname", releaseDetails.DirName); + Assert.Equal("nfoname", releaseDetails.NfoName); + Assert.Equal("nfosize", releaseDetails.NfoSize); + Assert.Equal("nfocrc", releaseDetails.NfoCRC); + Assert.Equal("archivename", releaseDetails.ArchiveName); + Assert.Equal("rominfo", releaseDetails.RomInfo); + Assert.Equal("category", releaseDetails.Category); + Assert.Equal("comment", releaseDetails.Comment); + Assert.Equal("tool", releaseDetails.Tool); + Assert.Equal("region", releaseDetails.Region); + Assert.Equal("origin", releaseDetails.Origin); } } } diff --git a/SabreTools.Serialization.Readers.Test/OfflineListTests.cs b/SabreTools.Serialization.Readers.Test/OfflineListTests.cs index f0c821b5..d2df1e6b 100644 --- a/SabreTools.Serialization.Readers.Test/OfflineListTests.cs +++ b/SabreTools.Serialization.Readers.Test/OfflineListTests.cs @@ -105,85 +105,85 @@ namespace SabreTools.Serialization.Readers.Test { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, Location = new Data.Models.OfflineList.Location { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, Publisher = new Data.Models.OfflineList.Publisher { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, SourceRom = new Data.Models.OfflineList.SourceRom { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, SaveType = new Data.Models.OfflineList.SaveType { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, RomSize = new Data.Models.OfflineList.RomSize { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, ReleaseNumber = new Data.Models.OfflineList.ReleaseNumber { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, ImageNumber = new Data.Models.OfflineList.ImageNumber { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, LanguageNumber = new Data.Models.OfflineList.LanguageNumber { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, Comment = new Data.Models.OfflineList.Comment { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, RomCRC = new Data.Models.OfflineList.RomCRC { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, Im1CRC = new Data.Models.OfflineList.Im1CRC { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, Im2CRC = new Data.Models.OfflineList.Im2CRC { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, Languages = new Data.Models.OfflineList.Languages { Visible = "XXXXXX", InNamingOption = "XXXXXX", - Default = "XXXXXX", + Default = true, }, }; @@ -208,14 +208,14 @@ namespace SabreTools.Serialization.Readers.Test var find = new Data.Models.OfflineList.Find { Operation = "XXXXXX", - Value = "XXXXXX", + Value = "value", Content = "XXXXXX", }; var to = new Data.Models.OfflineList.To { - Value = "XXXXXX", - Default = "XXXXXX", + Value = "value", + Default = true, Auto = "XXXXXX", Find = [find], }; @@ -257,7 +257,7 @@ namespace SabreTools.Serialization.Readers.Test ReleaseNumber = "XXXXXX", Title = "XXXXXX", SaveType = "XXXXXX", - RomSize = "XXXXXX", + RomSize = 12345, Publisher = "XXXXXX", Location = "XXXXXX", SourceRom = "XXXXXX", @@ -352,7 +352,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.NotNull(info); Assert.Equal("XXXXXX", info.Visible); Assert.Equal("XXXXXX", info.InNamingOption); - Assert.Equal("XXXXXX", info.Default); + Assert.Equal(true, info.Default); } /// @@ -404,8 +404,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.OfflineList.To? to) { Assert.NotNull(to); - Assert.Equal("XXXXXX", to.Value); - Assert.Equal("XXXXXX", to.Default); + Assert.Equal("value", to.Value); + Assert.Equal(true, to.Default); Assert.Equal("XXXXXX", to.Auto); Assert.NotNull(to.Find); @@ -420,7 +420,7 @@ namespace SabreTools.Serialization.Readers.Test { Assert.NotNull(find); Assert.Equal("XXXXXX", find.Operation); - Assert.Equal("XXXXXX", find.Value); + Assert.Equal("value", find.Value); Assert.Equal("XXXXXX", find.Content); } @@ -445,7 +445,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal("XXXXXX", game.ReleaseNumber); Assert.Equal("XXXXXX", game.Title); Assert.Equal("XXXXXX", game.SaveType); - Assert.Equal("XXXXXX", game.RomSize); + Assert.Equal(12345, game.RomSize); Assert.Equal("XXXXXX", game.Publisher); Assert.Equal("XXXXXX", game.Location); Assert.Equal("XXXXXX", game.SourceRom); diff --git a/SabreTools.Serialization.Readers.Test/OpenMSXTests.cs b/SabreTools.Serialization.Readers.Test/OpenMSXTests.cs index e2ef4d31..ad33402d 100644 --- a/SabreTools.Serialization.Readers.Test/OpenMSXTests.cs +++ b/SabreTools.Serialization.Readers.Test/OpenMSXTests.cs @@ -102,8 +102,8 @@ namespace SabreTools.Serialization.Readers.Test { var original = new Data.Models.OpenMSX.Original { - Value = "XXXXXX", - Content = "XXXXXX", + Value = true, + Content = "content", }; var rom = new Data.Models.OpenMSX.Rom @@ -203,8 +203,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.OpenMSX.Original? original) { Assert.NotNull(original); - Assert.Equal("XXXXXX", original.Value); - Assert.Equal("XXXXXX", original.Content); + Assert.Equal(true, original.Value); + Assert.Equal("content", original.Content); } /// diff --git a/SabreTools.Serialization.Readers.Test/RomCenterTests.cs b/SabreTools.Serialization.Readers.Test/RomCenterTests.cs index 2592ae54..64c1b84e 100644 --- a/SabreTools.Serialization.Readers.Test/RomCenterTests.cs +++ b/SabreTools.Serialization.Readers.Test/RomCenterTests.cs @@ -127,12 +127,12 @@ namespace SabreTools.Serialization.Readers.Test var rom = new Data.Models.RomCenter.Rom { ParentName = "XXXXXX", - ParentDescription = "XXXXXX", + ParentDescription = "description", GameName = "XXXXXX", - GameDescription = "XXXXXX", + GameDescription = "description", RomName = "XXXXXX", RomCRC = "XXXXXX", - RomSize = "XXXXXX", + RomSize = 12345, RomOf = "XXXXXX", MergeName = "XXXXXX", }; @@ -206,12 +206,12 @@ namespace SabreTools.Serialization.Readers.Test { Assert.NotNull(rom); Assert.Equal("XXXXXX", rom.ParentName); - Assert.Equal("XXXXXX", rom.ParentDescription); + Assert.Equal("description", rom.ParentDescription); Assert.Equal("XXXXXX", rom.GameName); - Assert.Equal("XXXXXX", rom.GameDescription); + Assert.Equal("description", rom.GameDescription); Assert.Equal("XXXXXX", rom.RomName); Assert.Equal("XXXXXX", rom.RomCRC); - Assert.Equal("XXXXXX", rom.RomSize); + Assert.Equal(12345, rom.RomSize); Assert.Equal("XXXXXX", rom.RomOf); Assert.Equal("XXXXXX", rom.MergeName); } diff --git a/SabreTools.Serialization.Readers.Test/SeparatedValueTests.cs b/SabreTools.Serialization.Readers.Test/SeparatedValueTests.cs index 1d7d5c4f..9b59072a 100644 --- a/SabreTools.Serialization.Readers.Test/SeparatedValueTests.cs +++ b/SabreTools.Serialization.Readers.Test/SeparatedValueTests.cs @@ -137,41 +137,41 @@ namespace SabreTools.Serialization.Readers.Test { FileName = "XXXXXX", InternalName = "XXXXXX", - Description = "XXXXXX", + Description = "description", GameName = "XXXXXX", - GameDescription = "XXXXXX", + GameDescription = "description", Type = "disk", DiskName = "XXXXXX", MD5 = "XXXXXX", SHA1 = "XXXXXX", - Status = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, }; var media = new Data.Models.SeparatedValue.Row { FileName = "XXXXXX", InternalName = "XXXXXX", - Description = "XXXXXX", + Description = "description", GameName = "XXXXXX", - GameDescription = "XXXXXX", + GameDescription = "description", Type = "media", DiskName = "XXXXXX", - MD5 = "XXXXXX", - SHA1 = "XXXXXX", - SHA256 = "XXXXXX", - SpamSum = "XXXXXX", + MD5 = "md5", + SHA1 = "sha1", + SHA256 = "sha256", + SpamSum = "spamsum", }; var rom = new Data.Models.SeparatedValue.Row { FileName = "XXXXXX", InternalName = "XXXXXX", - Description = "XXXXXX", + Description = "description", GameName = "XXXXXX", - GameDescription = "XXXXXX", + GameDescription = "description", Type = "rom", RomName = "XXXXXX", - Size = "XXXXXX", + Size = 12345, CRC = "XXXXXX", MD5 = "XXXXXX", SHA1 = "XXXXXX", @@ -179,7 +179,7 @@ namespace SabreTools.Serialization.Readers.Test SHA384 = "XXXXXX", SHA512 = "XXXXXX", SpamSum = "XXXXXX", - Status = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, }; return new Data.Models.SeparatedValue.MetadataFile @@ -209,13 +209,13 @@ namespace SabreTools.Serialization.Readers.Test Assert.NotNull(row); Assert.Equal("XXXXXX", row.FileName); Assert.Equal("XXXXXX", row.InternalName); - Assert.Equal("XXXXXX", row.Description); + Assert.Equal("description", row.Description); Assert.Equal("XXXXXX", row.GameName); - Assert.Equal("XXXXXX", row.GameDescription); + Assert.Equal("description", row.GameDescription); Assert.Equal("disk", row.Type); Assert.NotNull(row.RomName); Assert.Empty(row.RomName); Assert.Equal("XXXXXX", row.DiskName); - Assert.NotNull(row.Size); Assert.Empty(row.Size); + Assert.Null(row.Size); Assert.NotNull(row.CRC); Assert.Empty(row.CRC); Assert.Equal("XXXXXX", row.MD5); Assert.Equal("XXXXXX", row.SHA1); @@ -233,7 +233,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.Null(row.SpamSum); } - Assert.Equal("XXXXXX", row.Status); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, row.Status); } /// @@ -244,22 +244,22 @@ namespace SabreTools.Serialization.Readers.Test Assert.NotNull(row); Assert.Equal("XXXXXX", row.FileName); Assert.Equal("XXXXXX", row.InternalName); - Assert.Equal("XXXXXX", row.Description); + Assert.Equal("description", row.Description); Assert.Equal("XXXXXX", row.GameName); - Assert.Equal("XXXXXX", row.GameDescription); + Assert.Equal("description", row.GameDescription); Assert.Equal("media", row.Type); Assert.NotNull(row.RomName); Assert.Empty(row.RomName); Assert.Equal("XXXXXX", row.DiskName); - Assert.NotNull(row.Size); Assert.Empty(row.Size); + Assert.Null(row.Size); Assert.NotNull(row.CRC); Assert.Empty(row.CRC); - Assert.Equal("XXXXXX", row.MD5); - Assert.Equal("XXXXXX", row.SHA1); - Assert.Equal("XXXXXX", row.SHA256); + Assert.Equal("md5", row.MD5); + Assert.Equal("sha1", row.SHA1); + Assert.Equal("sha256", row.SHA256); if (longHeader) { Assert.NotNull(row.SHA384); Assert.Empty(row.SHA384); Assert.NotNull(row.SHA512); Assert.Empty(row.SHA512); - Assert.Equal("XXXXXX", row.SpamSum); + Assert.Equal("spamsum", row.SpamSum); } else { @@ -268,7 +268,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.Null(row.SpamSum); } - Assert.NotNull(row.Status); Assert.Empty(row.Status); + Assert.Null(row.Status); } /// @@ -279,14 +279,14 @@ namespace SabreTools.Serialization.Readers.Test Assert.NotNull(row); Assert.Equal("XXXXXX", row.FileName); Assert.Equal("XXXXXX", row.InternalName); - Assert.Equal("XXXXXX", row.Description); + Assert.Equal("description", row.Description); Assert.Equal("XXXXXX", row.GameName); - Assert.Equal("XXXXXX", row.GameDescription); + Assert.Equal("description", row.GameDescription); Assert.Equal("rom", row.Type); Assert.Equal("XXXXXX", row.RomName); Assert.NotNull(row.DiskName); Assert.Empty(row.DiskName); - Assert.Equal("XXXXXX", row.Size); + Assert.Equal(12345, row.Size); Assert.Equal("XXXXXX", row.CRC); Assert.Equal("XXXXXX", row.MD5); Assert.Equal("XXXXXX", row.SHA1); @@ -304,7 +304,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.Null(row.SpamSum); } - Assert.Equal("XXXXXX", row.Status); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, row.Status); } } } diff --git a/SabreTools.Serialization.Readers.Test/SoftwareListTests.cs b/SabreTools.Serialization.Readers.Test/SoftwareListTests.cs index bbe3a738..bb81460f 100644 --- a/SabreTools.Serialization.Readers.Test/SoftwareListTests.cs +++ b/SabreTools.Serialization.Readers.Test/SoftwareListTests.cs @@ -95,9 +95,9 @@ namespace SabreTools.Serialization.Readers.Test // Validate the data Assert.NotNull(newSl); - Assert.Equal("XXXXXX", newSl.Name); - Assert.Equal("XXXXXX", newSl.Description); - Assert.Equal("XXXXXX", newSl.Notes); + Assert.Equal("name", newSl.Name); + Assert.Equal("description", newSl.Description); + Assert.Equal("notes", newSl.Notes); Assert.NotNull(newSl.Software); var newSoftware = Assert.Single(newSl.Software); @@ -111,78 +111,78 @@ namespace SabreTools.Serialization.Readers.Test { var info = new Data.Models.SoftwareList.Info { - Name = "XXXXXX", - Value = "XXXXXX", + Name = "name", + Value = "value", }; var sharedfeat = new Data.Models.SoftwareList.SharedFeat { - Name = "XXXXXX", - Value = "XXXXXX", + Name = "name", + Value = "value", }; var feature = new Data.Models.SoftwareList.Feature { - Name = "XXXXXX", - Value = "XXXXXX", + Name = "name", + Value = "value", }; var rom = new Data.Models.SoftwareList.Rom { - Name = "XXXXXX", - Size = "XXXXXX", + Name = "name", + Size = 12345, Length = "XXXXXX", CRC = "XXXXXX", SHA1 = "XXXXXX", Offset = "XXXXXX", - Value = "XXXXXX", - Status = "XXXXXX", - LoadFlag = "XXXXXX", + Value = "value", + Status = Data.Models.Metadata.ItemStatus.Good, + LoadFlag = Data.Models.Metadata.LoadFlag.Load16Byte, }; var dataarea = new Data.Models.SoftwareList.DataArea { - Name = "XXXXXX", - Size = "XXXXXX", - Width = "XXXXXX", - Endianness = "XXXXXX", + Name = "name", + Size = 12345, + Width = Data.Models.Metadata.Width.Long, + Endianness = Data.Models.Metadata.Endianness.Big, Rom = [rom], }; var disk = new Data.Models.SoftwareList.Disk { - Name = "XXXXXX", + Name = "name", MD5 = "XXXXXX", SHA1 = "XXXXXX", - Status = "XXXXXX", - Writeable = "XXXXXX", + Status = Data.Models.Metadata.ItemStatus.Good, + Writeable = true, }; var diskarea = new Data.Models.SoftwareList.DiskArea { - Name = "XXXXXX", + Name = "name", Disk = [disk], }; var dipvalue = new Data.Models.SoftwareList.DipValue { - Name = "XXXXXX", - Value = "XXXXXX", - Default = "XXXXXX", + Name = "name", + Value = "value", + Default = true, }; var dipswitch = new Data.Models.SoftwareList.DipSwitch { - Name = "XXXXXX", - Tag = "XXXXXX", - Mask = "XXXXXX", + Name = "name", + Tag = "tag", + Mask = "mask", DipValue = [dipvalue], }; var part = new Data.Models.SoftwareList.Part { - Name = "XXXXXX", - Interface = "XXXXXX", + Name = "name", + Interface = "interface", Feature = [feature], DataArea = [dataarea], DiskArea = [diskarea], @@ -191,13 +191,13 @@ namespace SabreTools.Serialization.Readers.Test var software = new Data.Models.SoftwareList.Software { - Name = "XXXXXX", + Name = "name", CloneOf = "XXXXXX", - Supported = "XXXXXX", - Description = "XXXXXX", + Supported = Data.Models.Metadata.Supported.Yes, + Description = "description", Year = "XXXXXX", Publisher = "XXXXXX", - Notes = "XXXXXX", + Notes = "notes", Info = [info], SharedFeat = [sharedfeat], Part = [part], @@ -205,9 +205,9 @@ namespace SabreTools.Serialization.Readers.Test return new Data.Models.SoftwareList.SoftwareList { - Name = "XXXXXX", - Description = "XXXXXX", - Notes = "XXXXXX", + Name = "name", + Description = "description", + Notes = "notes", Software = [software], }; } @@ -218,13 +218,13 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.SoftwareList.Software? software) { Assert.NotNull(software); - Assert.Equal("XXXXXX", software.Name); + Assert.Equal("name", software.Name); Assert.Equal("XXXXXX", software.CloneOf); - Assert.Equal("XXXXXX", software.Supported); - Assert.Equal("XXXXXX", software.Description); + Assert.Equal(Data.Models.Metadata.Supported.Yes, software.Supported); + Assert.Equal("description", software.Description); Assert.Equal("XXXXXX", software.Year); Assert.Equal("XXXXXX", software.Publisher); - Assert.Equal("XXXXXX", software.Notes); + Assert.Equal("notes", software.Notes); Assert.NotNull(software.Info); var info = Assert.Single(software.Info); @@ -245,8 +245,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.SoftwareList.Info? info) { Assert.NotNull(info); - Assert.Equal("XXXXXX", info.Name); - Assert.Equal("XXXXXX", info.Value); + Assert.Equal("name", info.Name); + Assert.Equal("value", info.Value); } /// @@ -255,8 +255,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.SoftwareList.SharedFeat? sharedfeat) { Assert.NotNull(sharedfeat); - Assert.Equal("XXXXXX", sharedfeat.Name); - Assert.Equal("XXXXXX", sharedfeat.Value); + Assert.Equal("name", sharedfeat.Name); + Assert.Equal("value", sharedfeat.Value); } /// @@ -265,8 +265,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.SoftwareList.Part? part) { Assert.NotNull(part); - Assert.Equal("XXXXXX", part.Name); - Assert.Equal("XXXXXX", part.Interface); + Assert.Equal("name", part.Name); + Assert.Equal("interface", part.Interface); Assert.NotNull(part.Feature); var feature = Assert.Single(part.Feature); @@ -291,8 +291,8 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.SoftwareList.Feature? feature) { Assert.NotNull(feature); - Assert.Equal("XXXXXX", feature.Name); - Assert.Equal("XXXXXX", feature.Value); + Assert.Equal("name", feature.Name); + Assert.Equal("value", feature.Value); } /// @@ -301,10 +301,10 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.SoftwareList.DataArea? dataarea) { Assert.NotNull(dataarea); - Assert.Equal("XXXXXX", dataarea.Name); - Assert.Equal("XXXXXX", dataarea.Size); - Assert.Equal("XXXXXX", dataarea.Width); - Assert.Equal("XXXXXX", dataarea.Endianness); + Assert.Equal("name", dataarea.Name); + Assert.Equal(12345, dataarea.Size); + Assert.Equal(Data.Models.Metadata.Width.Long, dataarea.Width); + Assert.Equal(Data.Models.Metadata.Endianness.Big, dataarea.Endianness); Assert.NotNull(dataarea.Rom); var rom = Assert.Single(dataarea.Rom); @@ -317,15 +317,15 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.SoftwareList.Rom? rom) { Assert.NotNull(rom); - Assert.Equal("XXXXXX", rom.Name); - Assert.Equal("XXXXXX", rom.Size); + Assert.Equal("name", rom.Name); + Assert.Equal(12345, rom.Size); Assert.Equal("XXXXXX", rom.Length); Assert.Equal("XXXXXX", rom.CRC); Assert.Equal("XXXXXX", rom.SHA1); Assert.Equal("XXXXXX", rom.Offset); - Assert.Equal("XXXXXX", rom.Value); - Assert.Equal("XXXXXX", rom.Status); - Assert.Equal("XXXXXX", rom.LoadFlag); + Assert.Equal("value", rom.Value); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, rom.Status); + Assert.Equal(Data.Models.Metadata.LoadFlag.Load16Byte, rom.LoadFlag); } /// @@ -334,7 +334,7 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.SoftwareList.DiskArea? diskarea) { Assert.NotNull(diskarea); - Assert.Equal("XXXXXX", diskarea.Name); + Assert.Equal("name", diskarea.Name); Assert.NotNull(diskarea.Disk); var disk = Assert.Single(diskarea.Disk); @@ -347,11 +347,11 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.SoftwareList.Disk? disk) { Assert.NotNull(disk); - Assert.Equal("XXXXXX", disk.Name); + Assert.Equal("name", disk.Name); Assert.Equal("XXXXXX", disk.MD5); Assert.Equal("XXXXXX", disk.SHA1); - Assert.Equal("XXXXXX", disk.Status); - Assert.Equal("XXXXXX", disk.Writeable); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status); + Assert.Equal(true, disk.Writeable); } /// @@ -360,9 +360,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.SoftwareList.DipSwitch? dipswitch) { Assert.NotNull(dipswitch); - Assert.Equal("XXXXXX", dipswitch.Name); - Assert.Equal("XXXXXX", dipswitch.Tag); - Assert.Equal("XXXXXX", dipswitch.Mask); + Assert.Equal("name", dipswitch.Name); + Assert.Equal("tag", dipswitch.Tag); + Assert.Equal("mask", dipswitch.Mask); Assert.NotNull(dipswitch.DipValue); var dipvalue = Assert.Single(dipswitch.DipValue); @@ -375,9 +375,9 @@ namespace SabreTools.Serialization.Readers.Test private static void Validate(Data.Models.SoftwareList.DipValue? dipvalue) { Assert.NotNull(dipvalue); - Assert.Equal("XXXXXX", dipvalue.Name); - Assert.Equal("XXXXXX", dipvalue.Value); - Assert.Equal("XXXXXX", dipvalue.Default); + Assert.Equal("name", dipvalue.Name); + Assert.Equal("value", dipvalue.Value); + Assert.Equal(true, dipvalue.Default); } } } 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.Readers/AttractMode.cs b/SabreTools.Serialization.Readers/AttractMode.cs index 8bbd00ab..69b22426 100644 --- a/SabreTools.Serialization.Readers/AttractMode.cs +++ b/SabreTools.Serialization.Readers/AttractMode.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.IO; using System.Text; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.AttractMode; using SabreTools.Text.SeparatedValue; @@ -99,7 +100,7 @@ namespace SabreTools.Serialization.Readers Tags = reader.Line[18], PlayedCount = reader.Line[19], PlayedTime = reader.Line[20], - FileIsAvailable = reader.Line[21], + FileIsAvailable = reader.Line[21].AsYesNo(), }; } diff --git a/SabreTools.Serialization.Readers/ClrMamePro.cs b/SabreTools.Serialization.Readers/ClrMamePro.cs index aed9f3ce..ce60b091 100644 --- a/SabreTools.Serialization.Readers/ClrMamePro.cs +++ b/SabreTools.Serialization.Readers/ClrMamePro.cs @@ -2,8 +2,10 @@ using System; using System.Collections.Generic; using System.IO; using System.Text; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.ClrMamePro; using SabreTools.Text.ClrMamePro; +using SabreTools.Text.Extensions; #pragma warning disable CA1822 // Mark members as static namespace SabreTools.Serialization.Readers @@ -244,13 +246,15 @@ namespace SabreTools.Serialization.Readers dat.ClrMamePro.Type = reader.Standalone?.Value; break; case "forcemerging": - dat.ClrMamePro.ForceMerging = reader.Standalone?.Value; + dat.ClrMamePro.ForceMerging = reader.Standalone?.Value?.AsMergingFlag() + ?? Data.Models.Metadata.MergingFlag.None; break; case "forcezipping": - dat.ClrMamePro.ForceZipping = reader.Standalone?.Value; + dat.ClrMamePro.ForceZipping = reader.Standalone?.Value?.AsYesNo(); break; case "forcepacking": - dat.ClrMamePro.ForcePacking = reader.Standalone?.Value; + dat.ClrMamePro.ForcePacking = reader.Standalone?.Value?.AsPackingFlag() + ?? Data.Models.Metadata.PackingFlag.None; break; default: // TODO: Log invalid values @@ -305,10 +309,7 @@ namespace SabreTools.Serialization.Readers game.SampleOf = reader.Standalone?.Value; break; case "sample": - var sample = new Sample - { - Name = reader.Standalone?.Value ?? string.Empty, - }; + var sample = new Sample { Name = reader.Standalone?.Value ?? string.Empty, }; samples.Add(sample); break; default: @@ -463,7 +464,7 @@ namespace SabreTools.Serialization.Readers release.Date = kvp.Value; break; case "default": - release.Default = kvp.Value; + release.Default = kvp.Value.AsYesNo(); break; default: itemAdditional.Add($"{kvp.Key}: {kvp.Value}"); @@ -496,7 +497,7 @@ namespace SabreTools.Serialization.Readers biosset.Description = kvp.Value; break; case "default": - biosset.Default = kvp.Value; + biosset.Default = kvp.Value.AsYesNo(); break; default: // TODO: Log invalid values @@ -526,7 +527,7 @@ namespace SabreTools.Serialization.Readers rom.Name = kvp.Value; break; case "size": - rom.Size = kvp.Value; + rom.Size = NumberHelper.ConvertToInt64(kvp.Value); break; case "crc": rom.CRC = kvp.Value; @@ -577,7 +578,7 @@ namespace SabreTools.Serialization.Readers rom.Merge = kvp.Value; break; case "status": - rom.Status = kvp.Value; + rom.Status = kvp.Value.AsItemStatus(); break; case "region": rom.Region = kvp.Value; @@ -598,10 +599,10 @@ namespace SabreTools.Serialization.Readers rom.Date = kvp.Value; break; case "inverted": - rom.Inverted = kvp.Value; + rom.Inverted = kvp.Value.AsYesNo(); break; case "mia": - rom.MIA = kvp.Value; + rom.MIA = kvp.Value.AsYesNo(); break; default: // TODO: Log invalid values @@ -640,7 +641,7 @@ namespace SabreTools.Serialization.Readers disk.Merge = kvp.Value; break; case "status": - disk.Status = kvp.Value; + disk.Status = kvp.Value.AsItemStatus(); break; case "flags": disk.Flags = kvp.Value; @@ -763,7 +764,7 @@ namespace SabreTools.Serialization.Readers switch (kvp.Key?.ToLowerInvariant()) { case "type": - chip.Type = kvp.Value; + chip.Type = kvp.Value.AsChipType(); break; case "name": chip.Name = kvp.Value; @@ -772,7 +773,7 @@ namespace SabreTools.Serialization.Readers chip.Flags = kvp.Value; break; case "clock": - chip.Clock = kvp.Value; + chip.Clock = NumberHelper.ConvertToInt64(kvp.Value); break; default: // TODO: Log invalid values @@ -799,25 +800,25 @@ namespace SabreTools.Serialization.Readers switch (kvp.Key?.ToLowerInvariant()) { case "screen": - video.Screen = kvp.Value; + video.Screen = kvp.Value.AsDisplayType(); break; case "orientation": - video.Orientation = kvp.Value; + video.Orientation = kvp.Value.AsRotation(); break; case "x": - video.X = kvp.Value; + video.X = NumberHelper.ConvertToInt64(kvp.Value); break; case "y": - video.Y = kvp.Value; + video.Y = NumberHelper.ConvertToInt64(kvp.Value); break; case "aspectx": - video.AspectX = kvp.Value; + video.AspectX = NumberHelper.ConvertToInt64(kvp.Value); break; case "aspecty": - video.AspectY = kvp.Value; + video.AspectY = NumberHelper.ConvertToInt64(kvp.Value); break; case "freq": - video.Freq = kvp.Value; + video.Freq = NumberHelper.ConvertToDouble(kvp.Value); break; default: // TODO: Log invalid values @@ -844,7 +845,7 @@ namespace SabreTools.Serialization.Readers switch (kvp.Key?.ToLowerInvariant()) { case "channels": - sound.Channels = kvp.Value; + sound.Channels = NumberHelper.ConvertToInt64(kvp.Value); break; default: // TODO: Log invalid values @@ -871,22 +872,22 @@ namespace SabreTools.Serialization.Readers switch (kvp.Key?.ToLowerInvariant()) { case "players": - input.Players = kvp.Value; + input.Players = NumberHelper.ConvertToInt64(kvp.Value); break; case "control": input.Control = kvp.Value; break; case "buttons": - input.Buttons = kvp.Value; + input.Buttons = NumberHelper.ConvertToInt64(kvp.Value); break; case "coins": - input.Coins = kvp.Value; + input.Coins = NumberHelper.ConvertToInt64(kvp.Value); break; case "tilt": - input.Tilt = kvp.Value; + input.Tilt = kvp.Value.AsYesNo(); break; case "service": - input.Service = kvp.Value; + input.Service = kvp.Value.AsYesNo(); break; default: // TODO: Log invalid values @@ -920,7 +921,7 @@ namespace SabreTools.Serialization.Readers entries.Add(kvp.Value); break; case "default": - dipswitch.Default = kvp.Value; + dipswitch.Default = kvp.Value.AsYesNo(); break; default: // TODO: Log invalid values @@ -948,19 +949,19 @@ namespace SabreTools.Serialization.Readers switch (kvp.Key?.ToLowerInvariant()) { case "status": - driver.Status = kvp.Value; + driver.Status = kvp.Value.AsSupportStatus(); break; case "color": - driver.Color = kvp.Value; + driver.Color = kvp.Value.AsSupportStatus(); break; case "sound": - driver.Sound = kvp.Value; + driver.Sound = kvp.Value.AsSupportStatus(); break; case "palettesize": driver.PaletteSize = kvp.Value; break; case "blit": - driver.Blit = kvp.Value; + driver.Blit = kvp.Value.AsBlit(); break; default: // TODO: Log invalid values diff --git a/SabreTools.Serialization.Readers/DosCenter.cs b/SabreTools.Serialization.Readers/DosCenter.cs index 0480c926..e7d7ddeb 100644 --- a/SabreTools.Serialization.Readers/DosCenter.cs +++ b/SabreTools.Serialization.Readers/DosCenter.cs @@ -1,8 +1,10 @@ +using System; using System.Collections.Generic; using System.IO; using System.Text; using SabreTools.Data.Models.DosCenter; using SabreTools.Text.ClrMamePro; +using SabreTools.Text.Extensions; namespace SabreTools.Serialization.Readers { @@ -176,7 +178,7 @@ namespace SabreTools.Serialization.Readers /// /// ClrMameProReader representing the metadata file /// File object created from the reader context - private static Data.Models.DosCenter.File? CreateFile(Reader reader) + private Data.Models.DosCenter.File? CreateFile(Reader reader) { if (reader.Internal is null) return null; @@ -190,7 +192,7 @@ namespace SabreTools.Serialization.Readers file.Name = kvp.Value; break; case "size": - file.Size = kvp.Value; + file.Size = NumberHelper.ConvertToInt64(kvp.Value); break; case "crc": file.CRC = kvp.Value; @@ -202,7 +204,7 @@ namespace SabreTools.Serialization.Readers file.Date = kvp.Value; break; default: - // TODO: Log invalid values + if (Debug) Console.Error.WriteLine($"'{kvp.Key}' is an unrecognized field"); break; } } diff --git a/SabreTools.Serialization.Readers/EverdriveSMDB.cs b/SabreTools.Serialization.Readers/EverdriveSMDB.cs index 100579b2..5031b142 100644 --- a/SabreTools.Serialization.Readers/EverdriveSMDB.cs +++ b/SabreTools.Serialization.Readers/EverdriveSMDB.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; using SabreTools.Data.Models.EverdriveSMDB; +using SabreTools.Text.Extensions; using SabreTools.Text.SeparatedValue; namespace SabreTools.Serialization.Readers @@ -50,7 +51,7 @@ namespace SabreTools.Serialization.Readers // If we have the size field if (reader.Line.Count > 5) - row.Size = reader.Line[5]; + row.Size = NumberHelper.ConvertToInt64(reader.Line[5]); rows.Add(row); } diff --git a/SabreTools.Serialization.Readers/Listrom.cs b/SabreTools.Serialization.Readers/Listrom.cs index 205a9aec..1c219b5e 100644 --- a/SabreTools.Serialization.Readers/Listrom.cs +++ b/SabreTools.Serialization.Readers/Listrom.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Text; using SabreTools.Data.Models.Listrom; +using SabreTools.Text.Extensions; #pragma warning disable IDE0057 // Use range operator namespace SabreTools.Serialization.Readers @@ -146,7 +147,7 @@ namespace SabreTools.Serialization.Readers // Normal ROM (Name, Size, CRC, MD5/SHA1) case 3 when line.Contains("CRC"): row.Name = name; - row.Size = lineParts[0]; + row.Size = NumberHelper.ConvertToInt64(lineParts[0]); #if NETCOREAPP || NETSTANDARD2_1_OR_GREATER row.CRC = lineParts[1]["CRC".Length..].Trim('(', ')'); #else @@ -193,7 +194,7 @@ namespace SabreTools.Serialization.Readers // Bad ROM (Name, Size, BAD, CRC, MD5/SHA1, BAD_DUMP) case 5 when line.Contains("BAD_DUMP"): row.Name = name; - row.Size = lineParts[0]; + row.Size = NumberHelper.ConvertToInt64(lineParts[0]); row.Bad = true; #if NETCOREAPP || NETSTANDARD2_1_OR_GREATER row.CRC = lineParts[2]["CRC".Length..].Trim('(', ')'); @@ -217,7 +218,7 @@ namespace SabreTools.Serialization.Readers // Nodump ROM (Name, Size, NO GOOD DUMP KNOWN) case 5 when line.Contains("NO GOOD DUMP KNOWN"): row.Name = name; - row.Size = lineParts[0]; + row.Size = NumberHelper.ConvertToInt64(lineParts[0]); row.NoGoodDumpKnown = true; break; diff --git a/SabreTools.Serialization.Readers/Listxml.cs b/SabreTools.Serialization.Readers/Listxml.cs index f51cbad5..4b283090 100644 --- a/SabreTools.Serialization.Readers/Listxml.cs +++ b/SabreTools.Serialization.Readers/Listxml.cs @@ -2,7 +2,9 @@ using System; using System.Collections.Generic; using System.IO; using System.Xml; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.Listxml; +using SabreTools.Text.Extensions; namespace SabreTools.Serialization.Readers { @@ -70,7 +72,7 @@ namespace SabreTools.Serialization.Readers var obj = new Mame(); obj.Build = reader.GetAttribute("build"); - obj.Debug = reader.GetAttribute("debug"); + obj.Debug = reader.GetAttribute("debug").AsYesNo(); obj.MameConfig = reader.GetAttribute("mameconfig"); List games = []; @@ -117,7 +119,7 @@ namespace SabreTools.Serialization.Readers var obj = new Adjuster(); obj.Name = reader.GetAttribute("name"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); while (reader.Read()) { @@ -172,7 +174,7 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Description = reader.GetAttribute("description"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -188,9 +190,9 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Tag = reader.GetAttribute("tag"); - obj.Type = reader.GetAttribute("type"); - obj.SoundOnly = reader.GetAttribute("soundonly"); - obj.Clock = reader.GetAttribute("clock"); + obj.Type = reader.GetAttribute("type").AsChipType(); + obj.SoundOnly = reader.GetAttribute("soundonly").AsYesNo(); + obj.Clock = NumberHelper.ConvertToInt64(reader.GetAttribute("clock")); return obj; } @@ -206,7 +208,7 @@ namespace SabreTools.Serialization.Readers obj.Tag = reader.GetAttribute("tag"); obj.Mask = reader.GetAttribute("mask"); - obj.Relation = reader.GetAttribute("relation"); + obj.Relation = reader.GetAttribute("relation").AsRelation(); obj.Value = reader.GetAttribute("value"); return obj; @@ -283,8 +285,8 @@ namespace SabreTools.Serialization.Readers var obj = new ConfLocation(); obj.Name = reader.GetAttribute("name"); - obj.Number = reader.GetAttribute("number"); - obj.Inverted = reader.GetAttribute("inverted"); + obj.Number = NumberHelper.ConvertToInt64(reader.GetAttribute("number")); + obj.Inverted = reader.GetAttribute("inverted").AsYesNo(); return obj; } @@ -300,7 +302,7 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Value = reader.GetAttribute("value"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); while (reader.Read()) { @@ -339,15 +341,15 @@ namespace SabreTools.Serialization.Readers { var obj = new Control(); - obj.Type = reader.GetAttribute("type"); - obj.Player = reader.GetAttribute("player"); - obj.Buttons = reader.GetAttribute("buttons"); - obj.ReqButtons = reader.GetAttribute("reqbuttons"); - obj.Minimum = reader.GetAttribute("minimum"); - obj.Maximum = reader.GetAttribute("maximum"); - obj.Sensitivity = reader.GetAttribute("sensitivity"); - obj.KeyDelta = reader.GetAttribute("keydelta"); - obj.Reverse = reader.GetAttribute("reverse"); + obj.Type = reader.GetAttribute("type").AsControlType(); + obj.Player = NumberHelper.ConvertToInt64(reader.GetAttribute("player")); + obj.Buttons = NumberHelper.ConvertToInt64(reader.GetAttribute("buttons")); + obj.ReqButtons = NumberHelper.ConvertToInt64(reader.GetAttribute("reqbuttons")); + obj.Minimum = NumberHelper.ConvertToInt64(reader.GetAttribute("minimum")); + obj.Maximum = NumberHelper.ConvertToInt64(reader.GetAttribute("maximum")); + obj.Sensitivity = NumberHelper.ConvertToInt64(reader.GetAttribute("sensitivity")); + obj.KeyDelta = NumberHelper.ConvertToInt64(reader.GetAttribute("keydelta")); + obj.Reverse = reader.GetAttribute("reverse").AsYesNo(); obj.Ways = reader.GetAttribute("ways"); obj.Ways2 = reader.GetAttribute("ways2"); obj.Ways3 = reader.GetAttribute("ways3"); @@ -364,10 +366,10 @@ namespace SabreTools.Serialization.Readers { var obj = new Device(); - obj.Type = reader.GetAttribute("type"); + obj.Type = reader.GetAttribute("type").AsDeviceType(); obj.Tag = reader.GetAttribute("tag"); obj.FixedImage = reader.GetAttribute("fixed_image"); - obj.Mandatory = reader.GetAttribute("mandatory"); + obj.Mandatory = reader.GetAttribute("mandatory").AsYesNo(); obj.Interface = reader.GetAttribute("interface"); List extensions = []; @@ -433,8 +435,8 @@ namespace SabreTools.Serialization.Readers var obj = new DipLocation(); obj.Name = reader.GetAttribute("name"); - obj.Number = reader.GetAttribute("number"); - obj.Inverted = reader.GetAttribute("inverted"); + obj.Number = NumberHelper.ConvertToInt64(reader.GetAttribute("number")); + obj.Inverted = reader.GetAttribute("inverted").AsYesNo(); return obj; } @@ -511,7 +513,7 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Value = reader.GetAttribute("value"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); while (reader.Read()) { @@ -555,10 +557,10 @@ 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.Writable = reader.GetAttribute("writable"); - obj.Status = reader.GetAttribute("status"); - obj.Optional = reader.GetAttribute("optional"); + 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(); return obj; } @@ -573,19 +575,19 @@ namespace SabreTools.Serialization.Readers var obj = new Display(); obj.Tag = reader.GetAttribute("tag"); - obj.Type = reader.GetAttribute("type"); - obj.Rotate = reader.GetAttribute("rotate"); - obj.FlipX = reader.GetAttribute("flipx"); - obj.Width = reader.GetAttribute("width"); - obj.Height = reader.GetAttribute("height"); - obj.Refresh = reader.GetAttribute("refresh"); - obj.PixClock = reader.GetAttribute("pixclock"); - obj.HTotal = reader.GetAttribute("htotal"); - obj.HBEnd = reader.GetAttribute("hbend"); - obj.HBStart = reader.GetAttribute("hbstart"); - obj.VTotal = reader.GetAttribute("vtotal"); - obj.VBEnd = reader.GetAttribute("vbend"); - obj.VBStart = reader.GetAttribute("vbstart"); + obj.Type = reader.GetAttribute("type").AsDisplayType(); + obj.Rotate = reader.GetAttribute("rotate").AsRotation(); + obj.FlipX = reader.GetAttribute("flipx").AsYesNo(); + obj.Width = NumberHelper.ConvertToInt64(reader.GetAttribute("width")); + obj.Height = NumberHelper.ConvertToInt64(reader.GetAttribute("height")); + obj.Refresh = NumberHelper.ConvertToDouble(reader.GetAttribute("refresh")); + obj.PixClock = NumberHelper.ConvertToInt64(reader.GetAttribute("pixclock")); + obj.HTotal = NumberHelper.ConvertToInt64(reader.GetAttribute("htotal")); + obj.HBEnd = NumberHelper.ConvertToInt64(reader.GetAttribute("hbend")); + obj.HBStart = NumberHelper.ConvertToInt64(reader.GetAttribute("hbstart")); + obj.VTotal = NumberHelper.ConvertToInt64(reader.GetAttribute("vtotal")); + obj.VBEnd = NumberHelper.ConvertToInt64(reader.GetAttribute("vbend")); + obj.VBStart = NumberHelper.ConvertToInt64(reader.GetAttribute("vbstart")); return obj; } @@ -599,17 +601,17 @@ namespace SabreTools.Serialization.Readers { var obj = new Driver(); - obj.Status = reader.GetAttribute("status"); - obj.Color = reader.GetAttribute("color"); - obj.Sound = reader.GetAttribute("sound"); + obj.Status = reader.GetAttribute("status").AsSupportStatus(); + obj.Color = reader.GetAttribute("color").AsSupportStatus(); + obj.Sound = reader.GetAttribute("sound").AsSupportStatus(); obj.PaletteSize = reader.GetAttribute("palettesize"); - obj.Emulation = reader.GetAttribute("emulation"); - obj.Cocktail = reader.GetAttribute("cocktail"); - obj.SaveState = reader.GetAttribute("savestate"); - obj.RequiresArtwork = reader.GetAttribute("requiresartwork"); - obj.Unofficial = reader.GetAttribute("unofficial"); - obj.NoSoundHardware = reader.GetAttribute("nosoundhardware"); - obj.Incomplete = reader.GetAttribute("incomplete"); + obj.Emulation = reader.GetAttribute("emulation").AsSupportStatus(); + obj.Cocktail = reader.GetAttribute("cocktail").AsSupportStatus(); + obj.SaveState = reader.GetAttribute("savestate").AsSupported(); + obj.RequiresArtwork = reader.GetAttribute("requiresartwork").AsYesNo(); + obj.Unofficial = reader.GetAttribute("unofficial").AsYesNo(); + obj.NoSoundHardware = reader.GetAttribute("nosoundhardware").AsYesNo(); + obj.Incomplete = reader.GetAttribute("incomplete").AsYesNo(); return obj; } @@ -637,9 +639,9 @@ namespace SabreTools.Serialization.Readers { var obj = new Feature(); - obj.Type = reader.GetAttribute("type"); - obj.Status = reader.GetAttribute("status"); - obj.Overall = reader.GetAttribute("overall"); + obj.Type = reader.GetAttribute("type").AsFeatureType(); + obj.Status = reader.GetAttribute("status").AsFeatureStatus(); + obj.Overall = reader.GetAttribute("overall").AsFeatureStatus(); return obj; } @@ -661,10 +663,10 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.SourceFile = reader.GetAttribute("sourcefile"); - obj.IsBios = reader.GetAttribute("isbios"); - obj.IsDevice = reader.GetAttribute("isdevice"); - obj.IsMechanical = reader.GetAttribute("ismechanical"); - obj.Runnable = reader.GetAttribute("runnable"); + obj.IsBios = reader.GetAttribute("isbios").AsYesNo(); + obj.IsDevice = reader.GetAttribute("isdevice").AsYesNo(); + obj.IsMechanical = reader.GetAttribute("ismechanical").AsYesNo(); + obj.Runnable = reader.GetAttribute("runnable").AsRunnable(); obj.CloneOf = reader.GetAttribute("cloneof"); obj.RomOf = reader.GetAttribute("romof"); obj.SampleOf = reader.GetAttribute("sampleof"); @@ -919,12 +921,12 @@ namespace SabreTools.Serialization.Readers { var obj = new Input(); - obj.Service = reader.GetAttribute("service"); - obj.Tilt = reader.GetAttribute("tilt"); - obj.Players = reader.GetAttribute("players"); + obj.Service = reader.GetAttribute("service").AsYesNo(); + obj.Tilt = reader.GetAttribute("tilt").AsYesNo(); + obj.Players = NumberHelper.ConvertToInt64(reader.GetAttribute("players")); obj.ControlAttr = reader.GetAttribute("control"); - obj.Buttons = reader.GetAttribute("buttons"); - obj.Coins = reader.GetAttribute("coins"); + obj.Buttons = NumberHelper.ConvertToInt64(reader.GetAttribute("buttons")); + obj.Coins = NumberHelper.ConvertToInt64(reader.GetAttribute("coins")); List controls = []; @@ -1028,7 +1030,7 @@ namespace SabreTools.Serialization.Readers var obj = new RamOption(); obj.Name = reader.GetAttribute("name"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); obj.Content = reader.ReadElementContentAsString(); return obj; @@ -1045,16 +1047,16 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Bios = reader.GetAttribute("bios"); - obj.Size = reader.GetAttribute("size"); + obj.Size = NumberHelper.ConvertToInt64(reader.GetAttribute("size")); obj.CRC = reader.GetAttribute("crc"); obj.SHA1 = reader.GetAttribute("sha1"); obj.Merge = reader.GetAttribute("merge"); obj.Region = reader.GetAttribute("region"); obj.Offset = reader.GetAttribute("offset"); - obj.Status = reader.GetAttribute("status"); - obj.Optional = reader.GetAttribute("optional"); - obj.Dispose = reader.GetAttribute("dispose"); - obj.SoundOnly = reader.GetAttribute("soundonly"); + obj.Status = reader.GetAttribute("status").AsItemStatus(); + obj.Optional = reader.GetAttribute("optional").AsYesNo(); + obj.Dispose = reader.GetAttribute("dispose").AsYesNo(); + obj.SoundOnly = reader.GetAttribute("soundonly").AsYesNo(); return obj; } @@ -1128,7 +1130,7 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.DevName = reader.GetAttribute("devname"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -1144,7 +1146,7 @@ namespace SabreTools.Serialization.Readers obj.Tag = reader.GetAttribute("tag"); obj.Name = reader.GetAttribute("name"); - obj.Status = reader.GetAttribute("status"); + obj.Status = reader.GetAttribute("status").AsSoftwareListStatus(); obj.Filter = reader.GetAttribute("filter"); return obj; @@ -1159,7 +1161,7 @@ namespace SabreTools.Serialization.Readers { var obj = new Sound(); - obj.Channels = reader.GetAttribute("channels"); + obj.Channels = NumberHelper.ConvertToInt64(reader.GetAttribute("channels")); return obj; } @@ -1173,13 +1175,13 @@ namespace SabreTools.Serialization.Readers { var obj = new Video(); - obj.Screen = reader.GetAttribute("screen"); - obj.Orientation = reader.GetAttribute("orientation"); - obj.Width = reader.GetAttribute("width"); - obj.Height = reader.GetAttribute("height"); - obj.AspectX = reader.GetAttribute("aspectx"); - obj.AspectY = reader.GetAttribute("aspecty"); - obj.Refresh = reader.GetAttribute("refresh"); + obj.Screen = reader.GetAttribute("screen").AsDisplayType(); + obj.Orientation = reader.GetAttribute("orientation").AsRotation(); + obj.Width = NumberHelper.ConvertToInt64(reader.GetAttribute("width")); + obj.Height = NumberHelper.ConvertToInt64(reader.GetAttribute("height")); + obj.AspectX = NumberHelper.ConvertToInt64(reader.GetAttribute("aspectx")); + obj.AspectY = NumberHelper.ConvertToInt64(reader.GetAttribute("aspecty")); + obj.Refresh = NumberHelper.ConvertToDouble(reader.GetAttribute("refresh")); return obj; } diff --git a/SabreTools.Serialization.Readers/Logiqx.cs b/SabreTools.Serialization.Readers/Logiqx.cs index 95c71af7..df1d2f3f 100644 --- a/SabreTools.Serialization.Readers/Logiqx.cs +++ b/SabreTools.Serialization.Readers/Logiqx.cs @@ -2,7 +2,9 @@ using System; using System.Collections.Generic; using System.IO; using System.Xml; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.Logiqx; +using SabreTools.Text.Extensions; namespace SabreTools.Serialization.Readers { @@ -70,7 +72,7 @@ namespace SabreTools.Serialization.Readers var obj = new Datafile(); obj.Build = reader.GetAttribute("build"); - obj.Debug = reader.GetAttribute("debug"); + obj.Debug = reader.GetAttribute("debug").AsYesNo(); // TODO: Fix this based on No-Intro DATs // obj.SchemaLocation = reader.GetAttribute("schemaLocation"); @@ -135,9 +137,9 @@ namespace SabreTools.Serialization.Readers var obj = new Data.Models.Logiqx.ClrMamePro(); obj.Header = reader.GetAttribute("header"); - obj.ForceMerging = reader.GetAttribute("forcemerging"); - obj.ForceNodump = reader.GetAttribute("forcenodump"); - obj.ForcePacking = reader.GetAttribute("forcepacking"); + obj.ForceMerging = reader.GetAttribute("forcemerging").AsMergingFlag(); + obj.ForceNodump = reader.GetAttribute("forcenodump").AsNodumpFlag(); + obj.ForcePacking = reader.GetAttribute("forcepacking").AsPackingFlag(); return obj; } @@ -242,6 +244,13 @@ namespace SabreTools.Serialization.Readers obj.Type = reader.ReadElementContentAsString(); break; + case "romvault": + if (obj.RomVault is not null && Debug) + Console.WriteLine($"'{reader.Name}' element already found, overwriting"); + + obj.RomVault = ParseRomVault(reader); + reader.Skip(); + break; case "clrmamepro": if (obj.ClrMamePro is not null && Debug) Console.WriteLine($"'{reader.Name}' element already found, overwriting"); @@ -277,12 +286,29 @@ namespace SabreTools.Serialization.Readers var obj = new Data.Models.Logiqx.RomCenter(); obj.Plugin = reader.GetAttribute("plugin"); - obj.RomMode = reader.GetAttribute("rommode"); - obj.BiosMode = reader.GetAttribute("biosmode"); - obj.SampleMode = reader.GetAttribute("samplemode"); - obj.LockRomMode = reader.GetAttribute("lockrommode"); - obj.LockBiosMode = reader.GetAttribute("lockbiosmode"); - obj.LockSampleMode = reader.GetAttribute("locksamplemode"); + obj.RomMode = reader.GetAttribute("rommode").AsMergingFlag(); + obj.BiosMode = reader.GetAttribute("biosmode").AsMergingFlag(); + obj.SampleMode = reader.GetAttribute("samplemode").AsMergingFlag(); + obj.LockRomMode = reader.GetAttribute("lockrommode").AsYesNo(); + obj.LockBiosMode = reader.GetAttribute("lockbiosmode").AsYesNo(); + obj.LockSampleMode = reader.GetAttribute("locksamplemode").AsYesNo(); + + return obj; + } + + /// + /// Parse from an XmlTextReader into a RomVault + /// + /// XmlTextReader to read from + /// Filled RomVault on success, null on error + public RomVault ParseRomVault(XmlTextReader reader) + { + var obj = new RomVault(); + + obj.Header = reader.GetAttribute("header"); + obj.ForceMerging = reader.GetAttribute("forcemerging").AsMergingFlag(); + obj.ForceNodump = reader.GetAttribute("forcenodump").AsNodumpFlag(); + obj.ForcePacking = reader.GetAttribute("forcepacking").AsPackingFlag(); return obj; } @@ -316,7 +342,7 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Description = reader.GetAttribute("description"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -402,7 +428,7 @@ namespace SabreTools.Serialization.Readers obj.MD5 = reader.GetAttribute("md5"); obj.SHA1 = reader.GetAttribute("sha1"); obj.Merge = reader.GetAttribute("merge"); - obj.Status = reader.GetAttribute("status"); + obj.Status = reader.GetAttribute("status").AsItemStatus(); obj.Region = reader.GetAttribute("region"); return obj; @@ -417,14 +443,14 @@ namespace SabreTools.Serialization.Readers { var obj = new Driver(); - obj.Status = reader.GetAttribute("status"); - obj.Emulation = reader.GetAttribute("emulation"); - obj.Cocktail = reader.GetAttribute("cocktail"); - obj.SaveState = reader.GetAttribute("savestate"); - obj.RequiresArtwork = reader.GetAttribute("requiresartwork"); - obj.Unofficial = reader.GetAttribute("unofficial"); - obj.NoSoundHardware = reader.GetAttribute("nosoundhardware"); - obj.Incomplete = reader.GetAttribute("incomplete"); + obj.Status = reader.GetAttribute("status").AsSupportStatus(); + obj.Emulation = reader.GetAttribute("emulation").AsSupportStatus(); + obj.Cocktail = reader.GetAttribute("cocktail").AsSupportStatus(); + obj.SaveState = reader.GetAttribute("savestate").AsSupported(); + obj.RequiresArtwork = reader.GetAttribute("requiresartwork").AsYesNo(); + obj.Unofficial = reader.GetAttribute("unofficial").AsYesNo(); + obj.NoSoundHardware = reader.GetAttribute("nosoundhardware").AsYesNo(); + obj.Incomplete = reader.GetAttribute("incomplete").AsYesNo(); return obj; } @@ -446,9 +472,9 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.SourceFile = reader.GetAttribute("sourcefile"); - obj.IsBios = reader.GetAttribute("isbios"); - obj.IsDevice = reader.GetAttribute("isdevice"); - obj.IsMechanical = reader.GetAttribute("ismechanical"); + obj.IsBios = reader.GetAttribute("isbios").AsYesNo(); + obj.IsDevice = reader.GetAttribute("isdevice").AsYesNo(); + obj.IsMechanical = reader.GetAttribute("ismechanical").AsYesNo(); obj.CloneOf = reader.GetAttribute("cloneof"); obj.RomOf = reader.GetAttribute("romof"); obj.SampleOf = reader.GetAttribute("sampleof"); @@ -456,7 +482,7 @@ namespace SabreTools.Serialization.Readers obj.RebuildTo = reader.GetAttribute("rebuildto"); obj.Id = reader.GetAttribute("id"); obj.CloneOfId = reader.GetAttribute("cloneofid"); - obj.Runnable = reader.GetAttribute("runnable"); + obj.Runnable = reader.GetAttribute("runnable").AsRunnable(); List comments = []; List categories = []; @@ -673,7 +699,7 @@ namespace SabreTools.Serialization.Readers obj.Region = reader.GetAttribute("region"); obj.Language = reader.GetAttribute("language"); obj.Date = reader.GetAttribute("date"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -688,7 +714,7 @@ namespace SabreTools.Serialization.Readers var obj = new Rom(); obj.Name = reader.GetAttribute("name"); - obj.Size = reader.GetAttribute("size"); + obj.Size = NumberHelper.ConvertToInt64(reader.GetAttribute("size")); obj.CRC16 = reader.GetAttribute("crc16"); obj.CRC = reader.GetAttribute("crc"); obj.CRC64 = reader.GetAttribute("crc64"); @@ -705,12 +731,12 @@ namespace SabreTools.Serialization.Readers obj.xxHash364 = reader.GetAttribute("xxh3_64"); obj.xxHash3128 = reader.GetAttribute("xxh3_128"); obj.Merge = reader.GetAttribute("merge"); - obj.Status = reader.GetAttribute("status"); + obj.Status = reader.GetAttribute("status").AsItemStatus(); obj.Serial = reader.GetAttribute("serial"); obj.Header = reader.GetAttribute("header"); obj.Date = reader.GetAttribute("date"); - obj.Inverted = reader.GetAttribute("inverted"); - obj.MIA = reader.GetAttribute("mia"); + obj.Inverted = reader.GetAttribute("inverted").AsYesNo(); + obj.MIA = reader.GetAttribute("mia").AsYesNo(); return obj; } @@ -740,7 +766,7 @@ namespace SabreTools.Serialization.Readers obj.Tag = reader.GetAttribute("tag"); obj.Name = reader.GetAttribute("name"); - obj.Status = reader.GetAttribute("status"); + obj.Status = reader.GetAttribute("status").AsSoftwareListStatus(); obj.Filter = reader.GetAttribute("filter"); return obj; diff --git a/SabreTools.Serialization.Readers/M1.cs b/SabreTools.Serialization.Readers/M1.cs index 32513c67..2ccd1f22 100644 --- a/SabreTools.Serialization.Readers/M1.cs +++ b/SabreTools.Serialization.Readers/M1.cs @@ -2,7 +2,9 @@ using System; using System.Collections.Generic; using System.IO; using System.Xml; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.Listxml; +using SabreTools.Text.Extensions; namespace SabreTools.Serialization.Readers { @@ -115,7 +117,7 @@ namespace SabreTools.Serialization.Readers var obj = new Adjuster(); obj.Name = reader.GetAttribute("name"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); while (reader.Read()) { @@ -170,7 +172,7 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Description = reader.GetAttribute("description"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -186,9 +188,9 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Tag = reader.GetAttribute("tag"); - obj.Type = reader.GetAttribute("type"); - obj.SoundOnly = reader.GetAttribute("soundonly"); - obj.Clock = reader.GetAttribute("clock"); + obj.Type = reader.GetAttribute("type").AsChipType(); + obj.SoundOnly = reader.GetAttribute("soundonly").AsYesNo(); + obj.Clock = NumberHelper.ConvertToInt64(reader.GetAttribute("clock")); return obj; } @@ -204,7 +206,7 @@ namespace SabreTools.Serialization.Readers obj.Tag = reader.GetAttribute("tag"); obj.Mask = reader.GetAttribute("mask"); - obj.Relation = reader.GetAttribute("relation"); + obj.Relation = reader.GetAttribute("relation").AsRelation(); obj.Value = reader.GetAttribute("value"); return obj; @@ -281,8 +283,8 @@ namespace SabreTools.Serialization.Readers var obj = new ConfLocation(); obj.Name = reader.GetAttribute("name"); - obj.Number = reader.GetAttribute("number"); - obj.Inverted = reader.GetAttribute("inverted"); + obj.Number = NumberHelper.ConvertToInt64(reader.GetAttribute("number")); + obj.Inverted = reader.GetAttribute("inverted").AsYesNo(); return obj; } @@ -298,7 +300,7 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Value = reader.GetAttribute("value"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); while (reader.Read()) { @@ -337,15 +339,15 @@ namespace SabreTools.Serialization.Readers { var obj = new Control(); - obj.Type = reader.GetAttribute("type"); - obj.Player = reader.GetAttribute("player"); - obj.Buttons = reader.GetAttribute("buttons"); - obj.ReqButtons = reader.GetAttribute("reqbuttons"); - obj.Minimum = reader.GetAttribute("minimum"); - obj.Maximum = reader.GetAttribute("maximum"); - obj.Sensitivity = reader.GetAttribute("sensitivity"); - obj.KeyDelta = reader.GetAttribute("keydelta"); - obj.Reverse = reader.GetAttribute("reverse"); + obj.Type = reader.GetAttribute("type").AsControlType(); + obj.Player = NumberHelper.ConvertToInt64(reader.GetAttribute("player")); + obj.Buttons = NumberHelper.ConvertToInt64(reader.GetAttribute("buttons")); + obj.ReqButtons = NumberHelper.ConvertToInt64(reader.GetAttribute("reqbuttons")); + obj.Minimum = NumberHelper.ConvertToInt64(reader.GetAttribute("minimum")); + obj.Maximum = NumberHelper.ConvertToInt64(reader.GetAttribute("maximum")); + obj.Sensitivity = NumberHelper.ConvertToInt64(reader.GetAttribute("sensitivity")); + obj.KeyDelta = NumberHelper.ConvertToInt64(reader.GetAttribute("keydelta")); + obj.Reverse = reader.GetAttribute("reverse").AsYesNo(); obj.Ways = reader.GetAttribute("ways"); obj.Ways2 = reader.GetAttribute("ways2"); obj.Ways3 = reader.GetAttribute("ways3"); @@ -362,10 +364,10 @@ namespace SabreTools.Serialization.Readers { var obj = new Device(); - obj.Type = reader.GetAttribute("type"); + obj.Type = reader.GetAttribute("type").AsDeviceType(); obj.Tag = reader.GetAttribute("tag"); obj.FixedImage = reader.GetAttribute("fixed_image"); - obj.Mandatory = reader.GetAttribute("mandatory"); + obj.Mandatory = reader.GetAttribute("mandatory").AsYesNo(); obj.Interface = reader.GetAttribute("interface"); List extensions = []; @@ -431,8 +433,8 @@ namespace SabreTools.Serialization.Readers var obj = new DipLocation(); obj.Name = reader.GetAttribute("name"); - obj.Number = reader.GetAttribute("number"); - obj.Inverted = reader.GetAttribute("inverted"); + obj.Number = NumberHelper.ConvertToInt64(reader.GetAttribute("number")); + obj.Inverted = reader.GetAttribute("inverted").AsYesNo(); return obj; } @@ -509,7 +511,7 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Value = reader.GetAttribute("value"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); while (reader.Read()) { @@ -553,10 +555,10 @@ 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.Writable = reader.GetAttribute("writable"); - obj.Status = reader.GetAttribute("status"); - obj.Optional = reader.GetAttribute("optional"); + 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(); return obj; } @@ -571,19 +573,19 @@ namespace SabreTools.Serialization.Readers var obj = new Display(); obj.Tag = reader.GetAttribute("tag"); - obj.Type = reader.GetAttribute("type"); - obj.Rotate = reader.GetAttribute("rotate"); - obj.FlipX = reader.GetAttribute("flipx"); - obj.Width = reader.GetAttribute("width"); - obj.Height = reader.GetAttribute("height"); - obj.Refresh = reader.GetAttribute("refresh"); - obj.PixClock = reader.GetAttribute("pixclock"); - obj.HTotal = reader.GetAttribute("htotal"); - obj.HBEnd = reader.GetAttribute("hbend"); - obj.HBStart = reader.GetAttribute("hbstart"); - obj.VTotal = reader.GetAttribute("vtotal"); - obj.VBEnd = reader.GetAttribute("vbend"); - obj.VBStart = reader.GetAttribute("vbstart"); + obj.Type = reader.GetAttribute("type").AsDisplayType(); + obj.Rotate = reader.GetAttribute("rotate").AsRotation(); + obj.FlipX = reader.GetAttribute("flipx").AsYesNo(); + obj.Width = NumberHelper.ConvertToInt64(reader.GetAttribute("width")); + obj.Height = NumberHelper.ConvertToInt64(reader.GetAttribute("height")); + obj.Refresh = NumberHelper.ConvertToDouble(reader.GetAttribute("refresh")); + obj.PixClock = NumberHelper.ConvertToInt64(reader.GetAttribute("pixclock")); + obj.HTotal = NumberHelper.ConvertToInt64(reader.GetAttribute("htotal")); + obj.HBEnd = NumberHelper.ConvertToInt64(reader.GetAttribute("hbend")); + obj.HBStart = NumberHelper.ConvertToInt64(reader.GetAttribute("hbstart")); + obj.VTotal = NumberHelper.ConvertToInt64(reader.GetAttribute("vtotal")); + obj.VBEnd = NumberHelper.ConvertToInt64(reader.GetAttribute("vbend")); + obj.VBStart = NumberHelper.ConvertToInt64(reader.GetAttribute("vbstart")); return obj; } @@ -597,17 +599,17 @@ namespace SabreTools.Serialization.Readers { var obj = new Driver(); - obj.Status = reader.GetAttribute("status"); - obj.Color = reader.GetAttribute("color"); - obj.Sound = reader.GetAttribute("sound"); + obj.Status = reader.GetAttribute("status").AsSupportStatus(); + obj.Color = reader.GetAttribute("color").AsSupportStatus(); + obj.Sound = reader.GetAttribute("sound").AsSupportStatus(); obj.PaletteSize = reader.GetAttribute("palettesize"); - obj.Emulation = reader.GetAttribute("emulation"); - obj.Cocktail = reader.GetAttribute("cocktail"); - obj.SaveState = reader.GetAttribute("savestate"); - obj.RequiresArtwork = reader.GetAttribute("requiresartwork"); - obj.Unofficial = reader.GetAttribute("unofficial"); - obj.NoSoundHardware = reader.GetAttribute("nosoundhardware"); - obj.Incomplete = reader.GetAttribute("incomplete"); + obj.Emulation = reader.GetAttribute("emulation").AsSupportStatus(); + obj.Cocktail = reader.GetAttribute("cocktail").AsSupportStatus(); + obj.SaveState = reader.GetAttribute("savestate").AsSupported(); + obj.RequiresArtwork = reader.GetAttribute("requiresartwork").AsYesNo(); + obj.Unofficial = reader.GetAttribute("unofficial").AsYesNo(); + obj.NoSoundHardware = reader.GetAttribute("nosoundhardware").AsYesNo(); + obj.Incomplete = reader.GetAttribute("incomplete").AsYesNo(); return obj; } @@ -635,9 +637,9 @@ namespace SabreTools.Serialization.Readers { var obj = new Feature(); - obj.Type = reader.GetAttribute("type"); - obj.Status = reader.GetAttribute("status"); - obj.Overall = reader.GetAttribute("overall"); + obj.Type = reader.GetAttribute("type").AsFeatureType(); + obj.Status = reader.GetAttribute("status").AsFeatureStatus(); + obj.Overall = reader.GetAttribute("overall").AsFeatureStatus(); return obj; } @@ -659,10 +661,10 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.SourceFile = reader.GetAttribute("sourcefile"); - obj.IsBios = reader.GetAttribute("isbios"); - obj.IsDevice = reader.GetAttribute("isdevice"); - obj.IsMechanical = reader.GetAttribute("ismechanical"); - obj.Runnable = reader.GetAttribute("runnable"); + obj.IsBios = reader.GetAttribute("isbios").AsYesNo(); + obj.IsDevice = reader.GetAttribute("isdevice").AsYesNo(); + obj.IsMechanical = reader.GetAttribute("ismechanical").AsYesNo(); + obj.Runnable = reader.GetAttribute("runnable").AsRunnable(); obj.CloneOf = reader.GetAttribute("cloneof"); obj.RomOf = reader.GetAttribute("romof"); obj.SampleOf = reader.GetAttribute("sampleof"); @@ -917,12 +919,12 @@ namespace SabreTools.Serialization.Readers { var obj = new Input(); - obj.Service = reader.GetAttribute("service"); - obj.Tilt = reader.GetAttribute("tilt"); - obj.Players = reader.GetAttribute("players"); + obj.Service = reader.GetAttribute("service").AsYesNo(); + obj.Tilt = reader.GetAttribute("tilt").AsYesNo(); + obj.Players = NumberHelper.ConvertToInt64(reader.GetAttribute("players")); obj.ControlAttr = reader.GetAttribute("control"); - obj.Buttons = reader.GetAttribute("buttons"); - obj.Coins = reader.GetAttribute("coins"); + obj.Buttons = NumberHelper.ConvertToInt64(reader.GetAttribute("buttons")); + obj.Coins = NumberHelper.ConvertToInt64(reader.GetAttribute("coins")); List controls = []; @@ -1026,7 +1028,7 @@ namespace SabreTools.Serialization.Readers var obj = new RamOption(); obj.Name = reader.GetAttribute("name"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); obj.Content = reader.ReadElementContentAsString(); return obj; @@ -1043,16 +1045,16 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Bios = reader.GetAttribute("bios"); - obj.Size = reader.GetAttribute("size"); + obj.Size = NumberHelper.ConvertToInt64(reader.GetAttribute("size")); obj.CRC = reader.GetAttribute("crc"); obj.SHA1 = reader.GetAttribute("sha1"); obj.Merge = reader.GetAttribute("merge"); obj.Region = reader.GetAttribute("region"); obj.Offset = reader.GetAttribute("offset"); - obj.Status = reader.GetAttribute("status"); - obj.Optional = reader.GetAttribute("optional"); - obj.Dispose = reader.GetAttribute("dispose"); - obj.SoundOnly = reader.GetAttribute("soundonly"); + obj.Status = reader.GetAttribute("status").AsItemStatus(); + obj.Optional = reader.GetAttribute("optional").AsYesNo(); + obj.Dispose = reader.GetAttribute("dispose").AsYesNo(); + obj.SoundOnly = reader.GetAttribute("soundonly").AsYesNo(); return obj; } @@ -1126,7 +1128,7 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.DevName = reader.GetAttribute("devname"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -1142,7 +1144,7 @@ namespace SabreTools.Serialization.Readers obj.Tag = reader.GetAttribute("tag"); obj.Name = reader.GetAttribute("name"); - obj.Status = reader.GetAttribute("status"); + obj.Status = reader.GetAttribute("status").AsSoftwareListStatus(); obj.Filter = reader.GetAttribute("filter"); return obj; @@ -1157,7 +1159,7 @@ namespace SabreTools.Serialization.Readers { var obj = new Sound(); - obj.Channels = reader.GetAttribute("channels"); + obj.Channels = NumberHelper.ConvertToInt64(reader.GetAttribute("channels")); return obj; } @@ -1171,13 +1173,13 @@ namespace SabreTools.Serialization.Readers { var obj = new Video(); - obj.Screen = reader.GetAttribute("screen"); - obj.Orientation = reader.GetAttribute("orientation"); - obj.Width = reader.GetAttribute("width"); - obj.Height = reader.GetAttribute("height"); - obj.AspectX = reader.GetAttribute("aspectx"); - obj.AspectY = reader.GetAttribute("aspecty"); - obj.Refresh = reader.GetAttribute("refresh"); + obj.Screen = reader.GetAttribute("screen").AsDisplayType(); + obj.Orientation = reader.GetAttribute("orientation").AsRotation(); + obj.Width = NumberHelper.ConvertToInt64(reader.GetAttribute("width")); + obj.Height = NumberHelper.ConvertToInt64(reader.GetAttribute("height")); + obj.AspectX = NumberHelper.ConvertToInt64(reader.GetAttribute("aspectx")); + obj.AspectY = NumberHelper.ConvertToInt64(reader.GetAttribute("aspecty")); + obj.Refresh = NumberHelper.ConvertToDouble(reader.GetAttribute("refresh")); return obj; } diff --git a/SabreTools.Serialization.Readers/Mess.cs b/SabreTools.Serialization.Readers/Mess.cs index 6419846c..74637da8 100644 --- a/SabreTools.Serialization.Readers/Mess.cs +++ b/SabreTools.Serialization.Readers/Mess.cs @@ -2,7 +2,9 @@ using System; using System.Collections.Generic; using System.IO; using System.Xml; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.Listxml; +using SabreTools.Text.Extensions; namespace SabreTools.Serialization.Readers { @@ -115,7 +117,7 @@ namespace SabreTools.Serialization.Readers var obj = new Adjuster(); obj.Name = reader.GetAttribute("name"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); while (reader.Read()) { @@ -170,7 +172,7 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Description = reader.GetAttribute("description"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -186,9 +188,9 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Tag = reader.GetAttribute("tag"); - obj.Type = reader.GetAttribute("type"); - obj.SoundOnly = reader.GetAttribute("soundonly"); - obj.Clock = reader.GetAttribute("clock"); + obj.Type = reader.GetAttribute("type").AsChipType(); + obj.SoundOnly = reader.GetAttribute("soundonly").AsYesNo(); + obj.Clock = NumberHelper.ConvertToInt64(reader.GetAttribute("clock")); return obj; } @@ -204,7 +206,7 @@ namespace SabreTools.Serialization.Readers obj.Tag = reader.GetAttribute("tag"); obj.Mask = reader.GetAttribute("mask"); - obj.Relation = reader.GetAttribute("relation"); + obj.Relation = reader.GetAttribute("relation").AsRelation(); obj.Value = reader.GetAttribute("value"); return obj; @@ -281,8 +283,8 @@ namespace SabreTools.Serialization.Readers var obj = new ConfLocation(); obj.Name = reader.GetAttribute("name"); - obj.Number = reader.GetAttribute("number"); - obj.Inverted = reader.GetAttribute("inverted"); + obj.Number = NumberHelper.ConvertToInt64(reader.GetAttribute("number")); + obj.Inverted = reader.GetAttribute("inverted").AsYesNo(); return obj; } @@ -298,7 +300,7 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Value = reader.GetAttribute("value"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); while (reader.Read()) { @@ -337,15 +339,15 @@ namespace SabreTools.Serialization.Readers { var obj = new Control(); - obj.Type = reader.GetAttribute("type"); - obj.Player = reader.GetAttribute("player"); - obj.Buttons = reader.GetAttribute("buttons"); - obj.ReqButtons = reader.GetAttribute("reqbuttons"); - obj.Minimum = reader.GetAttribute("minimum"); - obj.Maximum = reader.GetAttribute("maximum"); - obj.Sensitivity = reader.GetAttribute("sensitivity"); - obj.KeyDelta = reader.GetAttribute("keydelta"); - obj.Reverse = reader.GetAttribute("reverse"); + obj.Type = reader.GetAttribute("type").AsControlType(); + obj.Player = NumberHelper.ConvertToInt64(reader.GetAttribute("player")); + obj.Buttons = NumberHelper.ConvertToInt64(reader.GetAttribute("buttons")); + obj.ReqButtons = NumberHelper.ConvertToInt64(reader.GetAttribute("reqbuttons")); + obj.Minimum = NumberHelper.ConvertToInt64(reader.GetAttribute("minimum")); + obj.Maximum = NumberHelper.ConvertToInt64(reader.GetAttribute("maximum")); + obj.Sensitivity = NumberHelper.ConvertToInt64(reader.GetAttribute("sensitivity")); + obj.KeyDelta = NumberHelper.ConvertToInt64(reader.GetAttribute("keydelta")); + obj.Reverse = reader.GetAttribute("reverse").AsYesNo(); obj.Ways = reader.GetAttribute("ways"); obj.Ways2 = reader.GetAttribute("ways2"); obj.Ways3 = reader.GetAttribute("ways3"); @@ -362,10 +364,10 @@ namespace SabreTools.Serialization.Readers { var obj = new Device(); - obj.Type = reader.GetAttribute("type"); + obj.Type = reader.GetAttribute("type").AsDeviceType(); obj.Tag = reader.GetAttribute("tag"); obj.FixedImage = reader.GetAttribute("fixed_image"); - obj.Mandatory = reader.GetAttribute("mandatory"); + obj.Mandatory = reader.GetAttribute("mandatory").AsYesNo(); obj.Interface = reader.GetAttribute("interface"); List extensions = []; @@ -431,8 +433,8 @@ namespace SabreTools.Serialization.Readers var obj = new DipLocation(); obj.Name = reader.GetAttribute("name"); - obj.Number = reader.GetAttribute("number"); - obj.Inverted = reader.GetAttribute("inverted"); + obj.Number = NumberHelper.ConvertToInt64(reader.GetAttribute("number")); + obj.Inverted = reader.GetAttribute("inverted").AsYesNo(); return obj; } @@ -509,7 +511,7 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Value = reader.GetAttribute("value"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); while (reader.Read()) { @@ -553,10 +555,10 @@ 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.Writable = reader.GetAttribute("writable"); - obj.Status = reader.GetAttribute("status"); - obj.Optional = reader.GetAttribute("optional"); + 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(); return obj; } @@ -571,19 +573,19 @@ namespace SabreTools.Serialization.Readers var obj = new Display(); obj.Tag = reader.GetAttribute("tag"); - obj.Type = reader.GetAttribute("type"); - obj.Rotate = reader.GetAttribute("rotate"); - obj.FlipX = reader.GetAttribute("flipx"); - obj.Width = reader.GetAttribute("width"); - obj.Height = reader.GetAttribute("height"); - obj.Refresh = reader.GetAttribute("refresh"); - obj.PixClock = reader.GetAttribute("pixclock"); - obj.HTotal = reader.GetAttribute("htotal"); - obj.HBEnd = reader.GetAttribute("hbend"); - obj.HBStart = reader.GetAttribute("hbstart"); - obj.VTotal = reader.GetAttribute("vtotal"); - obj.VBEnd = reader.GetAttribute("vbend"); - obj.VBStart = reader.GetAttribute("vbstart"); + obj.Type = reader.GetAttribute("type").AsDisplayType(); + obj.Rotate = reader.GetAttribute("rotate").AsRotation(); + obj.FlipX = reader.GetAttribute("flipx").AsYesNo(); + obj.Width = NumberHelper.ConvertToInt64(reader.GetAttribute("width")); + obj.Height = NumberHelper.ConvertToInt64(reader.GetAttribute("height")); + obj.Refresh = NumberHelper.ConvertToDouble(reader.GetAttribute("refresh")); + obj.PixClock = NumberHelper.ConvertToInt64(reader.GetAttribute("pixclock")); + obj.HTotal = NumberHelper.ConvertToInt64(reader.GetAttribute("htotal")); + obj.HBEnd = NumberHelper.ConvertToInt64(reader.GetAttribute("hbend")); + obj.HBStart = NumberHelper.ConvertToInt64(reader.GetAttribute("hbstart")); + obj.VTotal = NumberHelper.ConvertToInt64(reader.GetAttribute("vtotal")); + obj.VBEnd = NumberHelper.ConvertToInt64(reader.GetAttribute("vbend")); + obj.VBStart = NumberHelper.ConvertToInt64(reader.GetAttribute("vbstart")); return obj; } @@ -597,17 +599,17 @@ namespace SabreTools.Serialization.Readers { var obj = new Driver(); - obj.Status = reader.GetAttribute("status"); - obj.Color = reader.GetAttribute("color"); - obj.Sound = reader.GetAttribute("sound"); + obj.Status = reader.GetAttribute("status").AsSupportStatus(); + obj.Color = reader.GetAttribute("color").AsSupportStatus(); + obj.Sound = reader.GetAttribute("sound").AsSupportStatus(); obj.PaletteSize = reader.GetAttribute("palettesize"); - obj.Emulation = reader.GetAttribute("emulation"); - obj.Cocktail = reader.GetAttribute("cocktail"); - obj.SaveState = reader.GetAttribute("savestate"); - obj.RequiresArtwork = reader.GetAttribute("requiresartwork"); - obj.Unofficial = reader.GetAttribute("unofficial"); - obj.NoSoundHardware = reader.GetAttribute("nosoundhardware"); - obj.Incomplete = reader.GetAttribute("incomplete"); + obj.Emulation = reader.GetAttribute("emulation").AsSupportStatus(); + obj.Cocktail = reader.GetAttribute("cocktail").AsSupportStatus(); + obj.SaveState = reader.GetAttribute("savestate").AsSupported(); + obj.RequiresArtwork = reader.GetAttribute("requiresartwork").AsYesNo(); + obj.Unofficial = reader.GetAttribute("unofficial").AsYesNo(); + obj.NoSoundHardware = reader.GetAttribute("nosoundhardware").AsYesNo(); + obj.Incomplete = reader.GetAttribute("incomplete").AsYesNo(); return obj; } @@ -635,9 +637,9 @@ namespace SabreTools.Serialization.Readers { var obj = new Feature(); - obj.Type = reader.GetAttribute("type"); - obj.Status = reader.GetAttribute("status"); - obj.Overall = reader.GetAttribute("overall"); + obj.Type = reader.GetAttribute("type").AsFeatureType(); + obj.Status = reader.GetAttribute("status").AsFeatureStatus(); + obj.Overall = reader.GetAttribute("overall").AsFeatureStatus(); return obj; } @@ -659,10 +661,10 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.SourceFile = reader.GetAttribute("sourcefile"); - obj.IsBios = reader.GetAttribute("isbios"); - obj.IsDevice = reader.GetAttribute("isdevice"); - obj.IsMechanical = reader.GetAttribute("ismechanical"); - obj.Runnable = reader.GetAttribute("runnable"); + obj.IsBios = reader.GetAttribute("isbios").AsYesNo(); + obj.IsDevice = reader.GetAttribute("isdevice").AsYesNo(); + obj.IsMechanical = reader.GetAttribute("ismechanical").AsYesNo(); + obj.Runnable = reader.GetAttribute("runnable").AsRunnable(); obj.CloneOf = reader.GetAttribute("cloneof"); obj.RomOf = reader.GetAttribute("romof"); obj.SampleOf = reader.GetAttribute("sampleof"); @@ -917,12 +919,12 @@ namespace SabreTools.Serialization.Readers { var obj = new Input(); - obj.Service = reader.GetAttribute("service"); - obj.Tilt = reader.GetAttribute("tilt"); - obj.Players = reader.GetAttribute("players"); + obj.Service = reader.GetAttribute("service").AsYesNo(); + obj.Tilt = reader.GetAttribute("tilt").AsYesNo(); + obj.Players = NumberHelper.ConvertToInt64(reader.GetAttribute("players")); obj.ControlAttr = reader.GetAttribute("control"); - obj.Buttons = reader.GetAttribute("buttons"); - obj.Coins = reader.GetAttribute("coins"); + obj.Buttons = NumberHelper.ConvertToInt64(reader.GetAttribute("buttons")); + obj.Coins = NumberHelper.ConvertToInt64(reader.GetAttribute("coins")); List controls = []; @@ -1026,7 +1028,7 @@ namespace SabreTools.Serialization.Readers var obj = new RamOption(); obj.Name = reader.GetAttribute("name"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); obj.Content = reader.ReadElementContentAsString(); return obj; @@ -1043,16 +1045,16 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Bios = reader.GetAttribute("bios"); - obj.Size = reader.GetAttribute("size"); + obj.Size = NumberHelper.ConvertToInt64(reader.GetAttribute("size")); obj.CRC = reader.GetAttribute("crc"); obj.SHA1 = reader.GetAttribute("sha1"); obj.Merge = reader.GetAttribute("merge"); obj.Region = reader.GetAttribute("region"); obj.Offset = reader.GetAttribute("offset"); - obj.Status = reader.GetAttribute("status"); - obj.Optional = reader.GetAttribute("optional"); - obj.Dispose = reader.GetAttribute("dispose"); - obj.SoundOnly = reader.GetAttribute("soundonly"); + obj.Status = reader.GetAttribute("status").AsItemStatus(); + obj.Optional = reader.GetAttribute("optional").AsYesNo(); + obj.Dispose = reader.GetAttribute("dispose").AsYesNo(); + obj.SoundOnly = reader.GetAttribute("soundonly").AsYesNo(); return obj; } @@ -1126,7 +1128,7 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.DevName = reader.GetAttribute("devname"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -1142,7 +1144,7 @@ namespace SabreTools.Serialization.Readers obj.Tag = reader.GetAttribute("tag"); obj.Name = reader.GetAttribute("name"); - obj.Status = reader.GetAttribute("status"); + obj.Status = reader.GetAttribute("status").AsSoftwareListStatus(); obj.Filter = reader.GetAttribute("filter"); return obj; @@ -1157,7 +1159,7 @@ namespace SabreTools.Serialization.Readers { var obj = new Sound(); - obj.Channels = reader.GetAttribute("channels"); + obj.Channels = NumberHelper.ConvertToInt64(reader.GetAttribute("channels")); return obj; } @@ -1171,13 +1173,13 @@ namespace SabreTools.Serialization.Readers { var obj = new Video(); - obj.Screen = reader.GetAttribute("screen"); - obj.Orientation = reader.GetAttribute("orientation"); - obj.Width = reader.GetAttribute("width"); - obj.Height = reader.GetAttribute("height"); - obj.AspectX = reader.GetAttribute("aspectx"); - obj.AspectY = reader.GetAttribute("aspecty"); - obj.Refresh = reader.GetAttribute("refresh"); + obj.Screen = reader.GetAttribute("screen").AsDisplayType(); + obj.Orientation = reader.GetAttribute("orientation").AsRotation(); + obj.Width = NumberHelper.ConvertToInt64(reader.GetAttribute("width")); + obj.Height = NumberHelper.ConvertToInt64(reader.GetAttribute("height")); + obj.AspectX = NumberHelper.ConvertToInt64(reader.GetAttribute("aspectx")); + obj.AspectY = NumberHelper.ConvertToInt64(reader.GetAttribute("aspecty")); + obj.Refresh = NumberHelper.ConvertToDouble(reader.GetAttribute("refresh")); return obj; } diff --git a/SabreTools.Serialization.Readers/NoIntroDatabase.cs b/SabreTools.Serialization.Readers/NoIntroDatabase.cs index 1109170c..b8a5f502 100644 --- a/SabreTools.Serialization.Readers/NoIntroDatabase.cs +++ b/SabreTools.Serialization.Readers/NoIntroDatabase.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Xml; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.NoIntroDatabase; namespace SabreTools.Serialization.Readers @@ -463,23 +464,23 @@ namespace SabreTools.Serialization.Readers obj.Section = reader.GetAttribute("section"); obj.RomInfo = reader.GetAttribute("rominfo"); obj.DumpDate = reader.GetAttribute("d_date"); - obj.DumpDateInfo = reader.GetAttribute("d_date_info"); + obj.DumpDateInfo = reader.GetAttribute("d_date_info").AsYesNo(); obj.ReleaseDate = reader.GetAttribute("r_date"); - obj.ReleaseDateInfo = reader.GetAttribute("r_date_info"); + obj.ReleaseDateInfo = reader.GetAttribute("r_date_info").AsYesNo(); obj.Dumper = reader.GetAttribute("dumper"); obj.Project = reader.GetAttribute("project"); obj.OriginalFormat = reader.GetAttribute("originalformat"); - obj.Nodump = reader.GetAttribute("nodump"); + obj.Nodump = reader.GetAttribute("nodump").AsYesNo(); obj.Tool = reader.GetAttribute("tool"); obj.Origin = reader.GetAttribute("origin"); obj.Comment1 = reader.GetAttribute("comment1"); obj.Comment2 = reader.GetAttribute("comment2"); obj.Link1 = reader.GetAttribute("link1"); - obj.Link1Public = reader.GetAttribute("link1_public"); + obj.Link1Public = reader.GetAttribute("link1_public").AsYesNo(); obj.Link2 = reader.GetAttribute("link2"); - obj.Link2Public = reader.GetAttribute("link2_public"); + obj.Link2Public = reader.GetAttribute("link2_public").AsYesNo(); obj.Link3 = reader.GetAttribute("link3"); - obj.Link3Public = reader.GetAttribute("link3_public"); + obj.Link3Public = reader.GetAttribute("link3_public").AsYesNo(); obj.Region = reader.GetAttribute("region"); obj.MediaTitle = reader.GetAttribute("media_title"); diff --git a/SabreTools.Serialization.Readers/OfflineList.cs b/SabreTools.Serialization.Readers/OfflineList.cs index ef32ea0f..58892a50 100644 --- a/SabreTools.Serialization.Readers/OfflineList.cs +++ b/SabreTools.Serialization.Readers/OfflineList.cs @@ -2,7 +2,9 @@ using System; using System.Collections.Generic; using System.IO; using System.Xml; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.OfflineList; +using SabreTools.Text.Extensions; namespace SabreTools.Serialization.Readers { @@ -167,7 +169,7 @@ namespace SabreTools.Serialization.Readers obj.Visible = reader.GetAttribute("visible"); obj.InNamingOption = reader.GetAttribute("inNamingOption"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -415,7 +417,7 @@ namespace SabreTools.Serialization.Readers if (obj.RomSize is not null && Debug) Console.WriteLine($"'{reader.Name}' element already found, overwriting"); - obj.RomSize = reader.ReadElementContentAsString(); + obj.RomSize = NumberHelper.ConvertToInt64(reader.ReadElementContentAsString()); break; case "publisher": if (obj.Publisher is not null && Debug) @@ -578,7 +580,7 @@ namespace SabreTools.Serialization.Readers obj.Visible = reader.GetAttribute("visible"); obj.InNamingOption = reader.GetAttribute("inNamingOption"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -594,7 +596,7 @@ namespace SabreTools.Serialization.Readers obj.Visible = reader.GetAttribute("visible"); obj.InNamingOption = reader.GetAttribute("inNamingOption"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -627,7 +629,7 @@ namespace SabreTools.Serialization.Readers obj.Visible = reader.GetAttribute("visible"); obj.InNamingOption = reader.GetAttribute("inNamingOption"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -822,7 +824,7 @@ namespace SabreTools.Serialization.Readers obj.Visible = reader.GetAttribute("visible"); obj.InNamingOption = reader.GetAttribute("inNamingOption"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -838,7 +840,7 @@ namespace SabreTools.Serialization.Readers obj.Visible = reader.GetAttribute("visible"); obj.InNamingOption = reader.GetAttribute("inNamingOption"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -854,7 +856,7 @@ namespace SabreTools.Serialization.Readers obj.Visible = reader.GetAttribute("visible"); obj.InNamingOption = reader.GetAttribute("inNamingOption"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -870,7 +872,7 @@ namespace SabreTools.Serialization.Readers obj.Visible = reader.GetAttribute("visible"); obj.InNamingOption = reader.GetAttribute("inNamingOption"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -886,7 +888,7 @@ namespace SabreTools.Serialization.Readers obj.Visible = reader.GetAttribute("visible"); obj.InNamingOption = reader.GetAttribute("inNamingOption"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -902,7 +904,7 @@ namespace SabreTools.Serialization.Readers obj.Visible = reader.GetAttribute("visible"); obj.InNamingOption = reader.GetAttribute("inNamingOption"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -918,7 +920,7 @@ namespace SabreTools.Serialization.Readers obj.Visible = reader.GetAttribute("visible"); obj.InNamingOption = reader.GetAttribute("inNamingOption"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -934,7 +936,7 @@ namespace SabreTools.Serialization.Readers obj.Visible = reader.GetAttribute("visible"); obj.InNamingOption = reader.GetAttribute("inNamingOption"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -950,7 +952,7 @@ namespace SabreTools.Serialization.Readers obj.Visible = reader.GetAttribute("visible"); obj.InNamingOption = reader.GetAttribute("inNamingOption"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -966,7 +968,7 @@ namespace SabreTools.Serialization.Readers obj.Visible = reader.GetAttribute("visible"); obj.InNamingOption = reader.GetAttribute("inNamingOption"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -1077,7 +1079,7 @@ namespace SabreTools.Serialization.Readers var obj = new To(); obj.Value = reader.GetAttribute("value"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); obj.Auto = reader.GetAttribute("auto"); List finds = []; diff --git a/SabreTools.Serialization.Readers/OpenMSX.cs b/SabreTools.Serialization.Readers/OpenMSX.cs index 015f92f1..a8b93211 100644 --- a/SabreTools.Serialization.Readers/OpenMSX.cs +++ b/SabreTools.Serialization.Readers/OpenMSX.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Xml; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.OpenMSX; namespace SabreTools.Serialization.Readers @@ -163,7 +164,7 @@ namespace SabreTools.Serialization.Readers { var obj = new Original(); - obj.Value = reader.GetAttribute("value"); + obj.Value = reader.GetAttribute("value").AsYesNo(); obj.Content = reader.ReadElementContentAsString(); return obj; diff --git a/SabreTools.Serialization.Readers/RomCenter.cs b/SabreTools.Serialization.Readers/RomCenter.cs index 22791773..020277e8 100644 --- a/SabreTools.Serialization.Readers/RomCenter.cs +++ b/SabreTools.Serialization.Readers/RomCenter.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Text; using SabreTools.Data.Models.RomCenter; +using SabreTools.Text.Extensions; using SabreTools.Text.INI; #pragma warning disable CA1847 // Use char literal for a single character lookup @@ -166,7 +167,7 @@ namespace SabreTools.Serialization.Readers GameDescription = splitLine[4], RomName = splitLine[5], RomCRC = splitLine[6], - RomSize = splitLine[7], + RomSize = NumberHelper.ConvertToInt64(splitLine[7]), RomOf = splitLine[8], MergeName = splitLine[9], // EMPTY = splitLine[10] diff --git a/SabreTools.Serialization.Readers/SeparatedValue.cs b/SabreTools.Serialization.Readers/SeparatedValue.cs index 7f97de47..9a9a0d40 100644 --- a/SabreTools.Serialization.Readers/SeparatedValue.cs +++ b/SabreTools.Serialization.Readers/SeparatedValue.cs @@ -1,7 +1,9 @@ using System.Collections.Generic; using System.IO; using System.Text; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.SeparatedValue; +using SabreTools.Text.Extensions; using SabreTools.Text.SeparatedValue; #pragma warning disable CA1822 // Mark members as static @@ -121,12 +123,12 @@ namespace SabreTools.Serialization.Readers Type = reader.Line[5], RomName = reader.Line[6], DiskName = reader.Line[7], - Size = reader.Line[8], + Size = NumberHelper.ConvertToInt64(reader.Line[8]), CRC = reader.Line[9], MD5 = reader.Line[10], SHA1 = reader.Line[11], SHA256 = reader.Line[12], - Status = reader.Line[13], + Status = reader.Line[13].AsItemStatus(), }; } else @@ -141,7 +143,7 @@ namespace SabreTools.Serialization.Readers Type = reader.Line[5], RomName = reader.Line[6], DiskName = reader.Line[7], - Size = reader.Line[8], + Size = NumberHelper.ConvertToInt64(reader.Line[8]), CRC = reader.Line[9], MD5 = reader.Line[10], SHA1 = reader.Line[11], @@ -149,7 +151,7 @@ namespace SabreTools.Serialization.Readers SHA384 = reader.Line[13], SHA512 = reader.Line[14], SpamSum = reader.Line[15], - Status = reader.Line[16], + Status = reader.Line[16].AsItemStatus(), }; } diff --git a/SabreTools.Serialization.Readers/SoftwareList.cs b/SabreTools.Serialization.Readers/SoftwareList.cs index 6efdf443..e139967e 100644 --- a/SabreTools.Serialization.Readers/SoftwareList.cs +++ b/SabreTools.Serialization.Readers/SoftwareList.cs @@ -2,7 +2,9 @@ using System; using System.Collections.Generic; using System.IO; using System.Xml; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.SoftwareList; +using SabreTools.Text.Extensions; namespace SabreTools.Serialization.Readers { @@ -124,9 +126,9 @@ namespace SabreTools.Serialization.Readers var obj = new DataArea(); obj.Name = reader.GetAttribute("name"); - obj.Size = reader.GetAttribute("size"); - obj.Width = reader.GetAttribute("width"); - obj.Endianness = reader.GetAttribute("endianness"); + obj.Size = NumberHelper.ConvertToInt64(reader.GetAttribute("size")); + obj.Width = reader.GetAttribute("width").AsWidth(); + obj.Endianness = reader.GetAttribute("endianness").AsEndianness(); List roms = []; @@ -224,7 +226,7 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.Value = reader.GetAttribute("value"); - obj.Default = reader.GetAttribute("default"); + obj.Default = reader.GetAttribute("default").AsYesNo(); return obj; } @@ -241,8 +243,8 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.MD5 = reader.GetAttribute("md5"); obj.SHA1 = reader.GetAttribute("sha1"); - obj.Status = reader.GetAttribute("status"); - obj.Writeable = reader.GetAttribute("writable"); + obj.Status = reader.GetAttribute("status").AsItemStatus(); + obj.Writeable = reader.GetAttribute("writable").AsYesNo(); return obj; } @@ -412,14 +414,14 @@ namespace SabreTools.Serialization.Readers var obj = new Rom(); obj.Name = reader.GetAttribute("name"); - obj.Size = reader.GetAttribute("size"); + obj.Size = NumberHelper.ConvertToInt64(reader.GetAttribute("size")); obj.Length = reader.GetAttribute("length"); obj.CRC = reader.GetAttribute("crc"); obj.SHA1 = reader.GetAttribute("sha1"); obj.Offset = reader.GetAttribute("offset"); obj.Value = reader.GetAttribute("value"); - obj.Status = reader.GetAttribute("status"); - obj.LoadFlag = reader.GetAttribute("loadflag"); + obj.Status = reader.GetAttribute("status").AsItemStatus(); + obj.LoadFlag = reader.GetAttribute("loadflag").AsLoadFlag(); return obj; } @@ -450,7 +452,7 @@ namespace SabreTools.Serialization.Readers obj.Name = reader.GetAttribute("name"); obj.CloneOf = reader.GetAttribute("cloneof"); - obj.Supported = reader.GetAttribute("supported"); + obj.Supported = reader.GetAttribute("supported")?.AsSupported(); List infos = []; List sharedFeats = []; 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); diff --git a/SabreTools.Serialization.Writers/AttractMode.cs b/SabreTools.Serialization.Writers/AttractMode.cs index 29898453..35b2be3d 100644 --- a/SabreTools.Serialization.Writers/AttractMode.cs +++ b/SabreTools.Serialization.Writers/AttractMode.cs @@ -186,7 +186,7 @@ namespace SabreTools.Serialization.Writers row.Tags, row.PlayedCount, row.PlayedTime, - row.FileIsAvailable, + row.FileIsAvailable.ToString()?.ToLowerInvariant(), ]; } else diff --git a/SabreTools.Serialization.Writers/ClrMamePro.cs b/SabreTools.Serialization.Writers/ClrMamePro.cs index 10e1e155..7bdce944 100644 --- a/SabreTools.Serialization.Writers/ClrMamePro.cs +++ b/SabreTools.Serialization.Writers/ClrMamePro.cs @@ -1,5 +1,6 @@ using System.IO; using System.Text; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.ClrMamePro; using SabreTools.IO.Extensions; using SabreTools.Text.ClrMamePro; @@ -110,9 +111,11 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalStandalone("comment", header.Comment); writer.WriteOptionalStandalone("header", header.Header); writer.WriteOptionalStandalone("type", header.Type); - writer.WriteOptionalStandalone("forcemerging", header.ForceMerging); - writer.WriteOptionalStandalone("forcezipping", header.ForceZipping); - writer.WriteOptionalStandalone("forcepacking", header.ForcePacking); + if (header.ForceMerging != Data.Models.Metadata.MergingFlag.None) + writer.WriteOptionalStandalone("forcemerging", header.ForceMerging.AsStringValue()); + writer.WriteOptionalStandalone("forcezipping", header.ForceZipping.FromYesNo()); + if (header.ForcePacking != Data.Models.Metadata.PackingFlag.None) + writer.WriteOptionalStandalone("forcepacking", header.ForcePacking.AsStringValue()); writer.WriteEndElement(); // clrmamepro writer.Flush(); @@ -217,7 +220,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("region", release.Region, throwOnError: true); writer.WriteOptionalAttributeString("language", release.Language); writer.WriteOptionalAttributeString("date", release.Date); - writer.WriteOptionalAttributeString("default", release.Default); + writer.WriteOptionalAttributeString("default", release.Default.FromYesNo()); writer.WriteEndElement(); // release } } @@ -238,7 +241,7 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("biosset"); writer.WriteRequiredAttributeString("name", biosset.Name, throwOnError: true); writer.WriteRequiredAttributeString("description", biosset.Description, throwOnError: true); - writer.WriteOptionalAttributeString("default", biosset.Default); + writer.WriteOptionalAttributeString("default", biosset.Default.FromYesNo()); writer.WriteEndElement(); // release } } @@ -258,7 +261,7 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("rom"); writer.WriteRequiredAttributeString("name", rom.Name, throwOnError: true); - writer.WriteRequiredAttributeString("size", rom.Size, throwOnError: true); + writer.WriteRequiredAttributeString("size", rom.Size?.ToString(), throwOnError: true); writer.WriteOptionalAttributeString("crc16", rom.CRC16); writer.WriteOptionalAttributeString("crc", rom.CRC); writer.WriteOptionalAttributeString("crc64", rom.CRC64); @@ -275,15 +278,15 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalAttributeString("xxh3_64", rom.xxHash364); writer.WriteOptionalAttributeString("xxh3_128", rom.xxHash3128); writer.WriteOptionalAttributeString("merge", rom.Merge); - writer.WriteOptionalAttributeString("status", rom.Status); + writer.WriteOptionalAttributeString("status", rom.Status?.AsStringValue()); writer.WriteOptionalAttributeString("region", rom.Region); writer.WriteOptionalAttributeString("flags", rom.Flags); writer.WriteOptionalAttributeString("offs", rom.Offs); writer.WriteOptionalAttributeString("serial", rom.Serial); writer.WriteOptionalAttributeString("header", rom.Header); writer.WriteOptionalAttributeString("date", rom.Date); - writer.WriteOptionalAttributeString("inverted", rom.Inverted); - writer.WriteOptionalAttributeString("mia", rom.MIA); + writer.WriteOptionalAttributeString("inverted", rom.Inverted.FromYesNo()); + writer.WriteOptionalAttributeString("mia", rom.MIA.FromYesNo()); writer.WriteEndElement(); // rom } } @@ -306,7 +309,7 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalAttributeString("md5", disk.MD5); writer.WriteOptionalAttributeString("sha1", disk.SHA1); writer.WriteOptionalAttributeString("merge", disk.Merge); - writer.WriteOptionalAttributeString("status", disk.Status); + writer.WriteOptionalAttributeString("status", disk.Status?.AsStringValue()); writer.WriteOptionalAttributeString("flags", disk.Flags); writer.WriteEndElement(); // disk } @@ -387,10 +390,10 @@ namespace SabreTools.Serialization.Writers foreach (var chip in chips) { writer.WriteStartElement("chip"); - writer.WriteRequiredAttributeString("type", chip.Type, throwOnError: true); + writer.WriteRequiredAttributeString("type", chip.Type?.AsStringValue(), throwOnError: true); writer.WriteRequiredAttributeString("name", chip.Name, throwOnError: true); writer.WriteOptionalAttributeString("flags", chip.Flags); - writer.WriteOptionalAttributeString("clock", chip.Clock); + writer.WriteOptionalAttributeString("clock", chip.Clock?.ToString()); writer.WriteEndElement(); // chip } } @@ -409,13 +412,13 @@ namespace SabreTools.Serialization.Writers foreach (var video in videos) { writer.WriteStartElement("video"); - writer.WriteRequiredAttributeString("screen", video.Screen, throwOnError: true); - writer.WriteRequiredAttributeString("orientation", video.Orientation, throwOnError: true); - writer.WriteOptionalAttributeString("x", video.X); - writer.WriteOptionalAttributeString("y", video.Y); - writer.WriteOptionalAttributeString("aspectx", video.AspectX); - writer.WriteOptionalAttributeString("aspecty", video.AspectY); - writer.WriteOptionalAttributeString("freq", video.Freq); + writer.WriteRequiredAttributeString("screen", video.Screen?.AsStringValue(), throwOnError: true); + writer.WriteRequiredAttributeString("orientation", video.Orientation?.AsStringValue(useSecond: true), throwOnError: true); + writer.WriteOptionalAttributeString("x", video.X?.ToString()); + writer.WriteOptionalAttributeString("y", video.Y.ToString()); + writer.WriteOptionalAttributeString("aspectx", video.AspectX.ToString()); + writer.WriteOptionalAttributeString("aspecty", video.AspectY.ToString()); + writer.WriteOptionalAttributeString("freq", video.Freq?.ToString("0.000000")); writer.WriteEndElement(); // video } } @@ -432,7 +435,7 @@ namespace SabreTools.Serialization.Writers return; writer.WriteStartElement("sound"); - writer.WriteRequiredAttributeString("channels", sound.Channels, throwOnError: true); + writer.WriteRequiredAttributeString("channels", sound.Channels?.ToString(), throwOnError: true); writer.WriteEndElement(); // sound } @@ -448,12 +451,12 @@ namespace SabreTools.Serialization.Writers return; writer.WriteStartElement("input"); - writer.WriteRequiredAttributeString("players", input.Players, throwOnError: true); + writer.WriteRequiredAttributeString("players", input.Players?.ToString(), throwOnError: true); writer.WriteOptionalAttributeString("control", input.Control); - writer.WriteRequiredAttributeString("buttons", input.Buttons, throwOnError: true); - writer.WriteOptionalAttributeString("coins", input.Coins); - writer.WriteOptionalAttributeString("tilt", input.Tilt); - writer.WriteOptionalAttributeString("service", input.Service); + writer.WriteRequiredAttributeString("buttons", input.Buttons?.ToString(), throwOnError: true); + writer.WriteOptionalAttributeString("coins", input.Coins?.ToString()); + writer.WriteOptionalAttributeString("tilt", input.Tilt.FromYesNo()); + writer.WriteOptionalAttributeString("service", input.Service.FromYesNo()); writer.WriteEndElement(); // input } @@ -477,7 +480,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("entry", entry); } - writer.WriteOptionalAttributeString("default", dipswitch.Default); + writer.WriteOptionalAttributeString("default", dipswitch.Default.FromYesNo()); writer.WriteEndElement(); // dipswitch } } @@ -494,11 +497,11 @@ namespace SabreTools.Serialization.Writers return; writer.WriteStartElement("driver"); - writer.WriteRequiredAttributeString("status", driver.Status, throwOnError: true); - writer.WriteOptionalAttributeString("color", driver.Color); // TODO: Probably actually required - writer.WriteOptionalAttributeString("sound", driver.Sound); // TODO: Probably actually required + writer.WriteRequiredAttributeString("status", driver.Status?.AsStringValue(), throwOnError: true); + writer.WriteOptionalAttributeString("color", driver.Color?.AsStringValue()); // TODO: Probably actually required + writer.WriteOptionalAttributeString("sound", driver.Sound?.AsStringValue()); // TODO: Probably actually required writer.WriteOptionalAttributeString("palettesize", driver.PaletteSize); - writer.WriteOptionalAttributeString("blit", driver.Blit); + writer.WriteOptionalAttributeString("blit", driver.Blit?.AsStringValue()); writer.WriteEndElement(); // driver } diff --git a/SabreTools.Serialization.Writers/DosCenter.cs b/SabreTools.Serialization.Writers/DosCenter.cs index 09b1dae8..000b6601 100644 --- a/SabreTools.Serialization.Writers/DosCenter.cs +++ b/SabreTools.Serialization.Writers/DosCenter.cs @@ -115,7 +115,7 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("file"); writer.WriteRequiredAttributeString("name", file.Name, throwOnError: true); - writer.WriteRequiredAttributeString("size", file.Size, throwOnError: true); + writer.WriteRequiredAttributeString("size", file.Size?.ToString(), throwOnError: true); writer.WriteOptionalAttributeString("date", file.Date); writer.WriteRequiredAttributeString("crc", file.CRC?.ToUpperInvariant(), throwOnError: true); writer.WriteRequiredAttributeString("sha1", file.SHA1?.ToUpperInvariant()); diff --git a/SabreTools.Serialization.Writers/EverdriveSMDB.cs b/SabreTools.Serialization.Writers/EverdriveSMDB.cs index c7f56504..87139c88 100644 --- a/SabreTools.Serialization.Writers/EverdriveSMDB.cs +++ b/SabreTools.Serialization.Writers/EverdriveSMDB.cs @@ -55,7 +55,7 @@ namespace SabreTools.Serialization.Writers }; if (row.Size is not null) - rowArray.Add(row.Size); + rowArray.Add(row.Size?.ToString()); writer.WriteValues([.. rowArray]); writer.Flush(); diff --git a/SabreTools.Serialization.Writers/Listrom.cs b/SabreTools.Serialization.Writers/Listrom.cs index 36bad621..f18e6bd4 100644 --- a/SabreTools.Serialization.Writers/Listrom.cs +++ b/SabreTools.Serialization.Writers/Listrom.cs @@ -116,7 +116,7 @@ namespace SabreTools.Serialization.Writers var rowBuilder = new StringBuilder(); - int padding = 40 - (row.Size?.Length ?? 0); + int padding = 40 - (row.Size?.ToString()?.Length ?? 0); if (padding < row.Name!.Length) padding = row.Name.Length + 2; diff --git a/SabreTools.Serialization.Writers/Listxml.cs b/SabreTools.Serialization.Writers/Listxml.cs index 2dfef2c8..89b638e1 100644 --- a/SabreTools.Serialization.Writers/Listxml.cs +++ b/SabreTools.Serialization.Writers/Listxml.cs @@ -1,6 +1,7 @@ using System.IO; using System.Text; using System.Xml; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.Listxml; using SabreTools.IO.Extensions; using SabreTools.Text.Extensions; @@ -49,7 +50,7 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("mame"); writer.WriteOptionalAttributeString("build", obj.Build); - writer.WriteOptionalAttributeString("debug", obj.Debug); + writer.WriteOptionalAttributeString("debug", obj.Debug.FromYesNo()); writer.WriteRequiredAttributeString("mameconfig", obj.MameConfig); if (obj.Game is not null && obj.Game.Length > 0) @@ -75,7 +76,7 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("adjuster"); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); if (obj.Condition is not null) WriteCondition(obj.Condition, writer); @@ -108,7 +109,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteRequiredAttributeString("description", obj.Description); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); writer.WriteEndElement(); } @@ -124,9 +125,9 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteOptionalAttributeString("tag", obj.Tag); - writer.WriteRequiredAttributeString("type", obj.Type); - writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly); - writer.WriteOptionalAttributeString("clock", obj.Clock); + writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); + writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly.FromYesNo()); + writer.WriteOptionalAttributeString("clock", obj.Clock?.ToString()); writer.WriteEndElement(); } @@ -142,7 +143,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("tag", obj.Tag); writer.WriteRequiredAttributeString("mask", obj.Mask); - writer.WriteRequiredAttributeString("relation", obj.Relation); + writer.WriteRequiredAttributeString("relation", obj.Relation?.AsStringValue()); writer.WriteRequiredAttributeString("value", obj.Value); writer.WriteEndElement(); @@ -193,8 +194,8 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("conflocation"); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteRequiredAttributeString("number", obj.Number); - writer.WriteOptionalAttributeString("inverted", obj.Inverted); + writer.WriteRequiredAttributeString("number", obj.Number?.ToString()); + writer.WriteOptionalAttributeString("inverted", obj.Inverted.FromYesNo()); writer.WriteEndElement(); } @@ -210,7 +211,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteRequiredAttributeString("value", obj.Value); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); if (obj.Condition is not null) WriteCondition(obj.Condition, writer); @@ -227,15 +228,15 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("control"); - writer.WriteRequiredAttributeString("type", obj.Type); - writer.WriteOptionalAttributeString("player", obj.Player); - writer.WriteOptionalAttributeString("buttons", obj.Buttons); - writer.WriteOptionalAttributeString("reqbuttons", obj.ReqButtons); - writer.WriteOptionalAttributeString("minimum", obj.Minimum); - writer.WriteOptionalAttributeString("maximum", obj.Maximum); - writer.WriteOptionalAttributeString("sensitivity", obj.Sensitivity); - writer.WriteOptionalAttributeString("keydelta", obj.KeyDelta); - writer.WriteOptionalAttributeString("reverse", obj.Reverse); + writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); + writer.WriteOptionalAttributeString("player", obj.Player?.ToString()); + writer.WriteOptionalAttributeString("buttons", obj.Buttons?.ToString()); + writer.WriteOptionalAttributeString("reqbuttons", obj.ReqButtons?.ToString()); + writer.WriteOptionalAttributeString("minimum", obj.Minimum?.ToString()); + writer.WriteOptionalAttributeString("maximum", obj.Maximum?.ToString()); + writer.WriteOptionalAttributeString("sensitivity", obj.Sensitivity?.ToString()); + writer.WriteOptionalAttributeString("keydelta", obj.KeyDelta?.ToString()); + writer.WriteOptionalAttributeString("reverse", obj.Reverse.FromYesNo()); writer.WriteOptionalAttributeString("ways", obj.Ways); writer.WriteOptionalAttributeString("ways2", obj.Ways2); writer.WriteOptionalAttributeString("ways3", obj.Ways3); @@ -252,10 +253,11 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("device"); - writer.WriteRequiredAttributeString("type", obj.Type); + writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); writer.WriteOptionalAttributeString("tag", obj.Tag); writer.WriteOptionalAttributeString("fixed_image", obj.FixedImage); - writer.WriteOptionalAttributeString("mandatory", obj.Mandatory); + if (obj.Mandatory is not null) + writer.WriteOptionalAttributeString("mandatory", obj.Mandatory.Value ? "1" : "0"); writer.WriteOptionalAttributeString("interface", obj.Interface); if (obj.Instance is not null) @@ -296,8 +298,8 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("diplocation"); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteRequiredAttributeString("number", obj.Number); - writer.WriteOptionalAttributeString("inverted", obj.Inverted); + writer.WriteRequiredAttributeString("number", obj.Number?.ToString()); + writer.WriteOptionalAttributeString("inverted", obj.Inverted.FromYesNo()); writer.WriteEndElement(); } @@ -348,7 +350,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteRequiredAttributeString("value", obj.Value); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); if (obj.Condition is not null) WriteCondition(obj.Condition, writer); @@ -370,10 +372,10 @@ 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("writable", obj.Writable); - writer.WriteOptionalAttributeString("status", obj.Status); - writer.WriteOptionalAttributeString("optional", obj.Optional); + writer.WriteOptionalAttributeString("index", obj.Index?.ToString()); + writer.WriteOptionalAttributeString("writable", obj.Writable.FromYesNo()); + writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue()); + writer.WriteOptionalAttributeString("optional", obj.Optional.FromYesNo()); writer.WriteEndElement(); } @@ -388,19 +390,19 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("display"); writer.WriteOptionalAttributeString("tag", obj.Tag); - writer.WriteRequiredAttributeString("type", obj.Type); - writer.WriteOptionalAttributeString("rotate", obj.Rotate); - writer.WriteOptionalAttributeString("flipx", obj.FlipX); - writer.WriteOptionalAttributeString("width", obj.Width); - writer.WriteOptionalAttributeString("height", obj.Height); - writer.WriteRequiredAttributeString("refresh", obj.Refresh); - writer.WriteOptionalAttributeString("pixclock", obj.PixClock); - writer.WriteOptionalAttributeString("htotal", obj.HTotal); - writer.WriteOptionalAttributeString("hbend", obj.HBEnd); - writer.WriteOptionalAttributeString("hbstart", obj.HBStart); - writer.WriteOptionalAttributeString("vtotal", obj.VTotal); - writer.WriteOptionalAttributeString("vbend", obj.VBEnd); - writer.WriteOptionalAttributeString("vbstart", obj.VBStart); + writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); + writer.WriteOptionalAttributeString("rotate", obj.Rotate?.AsStringValue(useSecond: false)); + writer.WriteOptionalAttributeString("flipx", obj.FlipX.FromYesNo()); + writer.WriteOptionalAttributeString("width", obj.Width?.ToString()); + writer.WriteOptionalAttributeString("height", obj.Height?.ToString()); + writer.WriteRequiredAttributeString("refresh", obj.Refresh?.ToString("0.000000")); + writer.WriteOptionalAttributeString("pixclock", obj.PixClock?.ToString()); + writer.WriteOptionalAttributeString("htotal", obj.HTotal?.ToString()); + writer.WriteOptionalAttributeString("hbend", obj.HBEnd?.ToString()); + writer.WriteOptionalAttributeString("hbstart", obj.HBStart?.ToString()); + writer.WriteOptionalAttributeString("vtotal", obj.VTotal?.ToString()); + writer.WriteOptionalAttributeString("vbend", obj.VBEnd?.ToString()); + writer.WriteOptionalAttributeString("vbstart", obj.VBStart?.ToString()); writer.WriteEndElement(); } @@ -414,17 +416,17 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("driver"); - writer.WriteRequiredAttributeString("status", obj.Status); - writer.WriteOptionalAttributeString("color", obj.Color); - writer.WriteOptionalAttributeString("sound", obj.Sound); + writer.WriteRequiredAttributeString("status", obj.Status?.AsStringValue()); + writer.WriteOptionalAttributeString("color", obj.Color?.AsStringValue()); + writer.WriteOptionalAttributeString("sound", obj.Sound?.AsStringValue()); writer.WriteOptionalAttributeString("palettesize", obj.PaletteSize); - writer.WriteRequiredAttributeString("emulation", obj.Emulation); - writer.WriteRequiredAttributeString("cocktail", obj.Cocktail); - writer.WriteRequiredAttributeString("savestate", obj.SaveState); - writer.WriteOptionalAttributeString("requiresartwork", obj.RequiresArtwork); - writer.WriteOptionalAttributeString("unofficial", obj.Unofficial); - writer.WriteOptionalAttributeString("nosoundhardware", obj.NoSoundHardware); - writer.WriteOptionalAttributeString("incomplete", obj.Incomplete); + writer.WriteRequiredAttributeString("emulation", obj.Emulation?.AsStringValue()); + writer.WriteRequiredAttributeString("cocktail", obj.Cocktail?.AsStringValue()); + writer.WriteRequiredAttributeString("savestate", obj.SaveState?.AsStringValue()); + writer.WriteOptionalAttributeString("requiresartwork", obj.RequiresArtwork.FromYesNo()); + writer.WriteOptionalAttributeString("unofficial", obj.Unofficial.FromYesNo()); + writer.WriteOptionalAttributeString("nosoundhardware", obj.NoSoundHardware.FromYesNo()); + writer.WriteOptionalAttributeString("incomplete", obj.Incomplete.FromYesNo()); writer.WriteEndElement(); } @@ -452,9 +454,9 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("feature"); - writer.WriteRequiredAttributeString("type", obj.Type); - writer.WriteOptionalAttributeString("status", obj.Status); - writer.WriteOptionalAttributeString("overall", obj.Overall); + writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); + writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue()); + writer.WriteOptionalAttributeString("overall", obj.Overall?.AsStringValue()); writer.WriteEndElement(); } @@ -475,10 +477,10 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteOptionalAttributeString("sourcefile", obj.SourceFile); - writer.WriteOptionalAttributeString("isbios", obj.IsBios); - writer.WriteOptionalAttributeString("isdevice", obj.IsDevice); - writer.WriteOptionalAttributeString("ismechanical", obj.IsMechanical); - writer.WriteOptionalAttributeString("runnable", obj.Runnable); + writer.WriteOptionalAttributeString("isbios", obj.IsBios.FromYesNo()); + writer.WriteOptionalAttributeString("isdevice", obj.IsDevice.FromYesNo()); + writer.WriteOptionalAttributeString("ismechanical", obj.IsMechanical.FromYesNo()); + writer.WriteOptionalAttributeString("runnable", obj.Runnable?.AsStringValue()); writer.WriteOptionalAttributeString("cloneof", obj.CloneOf); writer.WriteOptionalAttributeString("romof", obj.RomOf); writer.WriteOptionalAttributeString("sampleof", obj.SampleOf); @@ -645,12 +647,12 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("input"); - writer.WriteOptionalAttributeString("service", obj.Service); - writer.WriteOptionalAttributeString("tilt", obj.Tilt); - writer.WriteRequiredAttributeString("players", obj.Players); + writer.WriteOptionalAttributeString("service", obj.Service.FromYesNo()); + writer.WriteOptionalAttributeString("tilt", obj.Tilt.FromYesNo()); + writer.WriteRequiredAttributeString("players", obj.Players?.ToString()); writer.WriteOptionalAttributeString("control", obj.ControlAttr); - writer.WriteOptionalAttributeString("buttons", obj.Buttons); - writer.WriteOptionalAttributeString("coins", obj.Coins); + writer.WriteOptionalAttributeString("buttons", obj.Buttons?.ToString()); + writer.WriteOptionalAttributeString("coins", obj.Coins?.ToString()); if (obj.Control is not null && obj.Control.Length > 0) { @@ -710,7 +712,7 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("ramoption"); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); if (obj.Content is not null) writer.WriteValue(obj.Content); @@ -729,16 +731,16 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteOptionalAttributeString("bios", obj.Bios); - writer.WriteRequiredAttributeString("size", obj.Size); + writer.WriteRequiredAttributeString("size", obj.Size?.ToString()); writer.WriteOptionalAttributeString("crc", obj.CRC); writer.WriteOptionalAttributeString("sha1", obj.SHA1); writer.WriteOptionalAttributeString("merge", obj.Merge); writer.WriteOptionalAttributeString("region", obj.Region); writer.WriteOptionalAttributeString("offset", obj.Offset); - writer.WriteOptionalAttributeString("status", obj.Status); - writer.WriteOptionalAttributeString("optional", obj.Optional); - writer.WriteOptionalAttributeString("dispose", obj.Dispose); - writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly); + writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue()); + writer.WriteOptionalAttributeString("optional", obj.Optional.FromYesNo()); + writer.WriteOptionalAttributeString("dispose", obj.Dispose.FromYesNo()); + writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly.FromYesNo()); writer.WriteEndElement(); } @@ -790,7 +792,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteRequiredAttributeString("devname", obj.DevName); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); writer.WriteEndElement(); } @@ -806,7 +808,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("tag", obj.Tag); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteRequiredAttributeString("status", obj.Status); + writer.WriteRequiredAttributeString("status", obj.Status?.AsStringValue()); writer.WriteOptionalAttributeString("filter", obj.Filter); writer.WriteEndElement(); @@ -821,7 +823,7 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("sound"); - writer.WriteRequiredAttributeString("channels", obj.Channels); + writer.WriteRequiredAttributeString("channels", obj.Channels?.ToString()); writer.WriteEndElement(); } @@ -835,13 +837,13 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("video"); - writer.WriteRequiredAttributeString("screen", obj.Screen); - writer.WriteRequiredAttributeString("orientation", obj.Orientation); - writer.WriteOptionalAttributeString("width", obj.Width); - writer.WriteOptionalAttributeString("height", obj.Height); - writer.WriteOptionalAttributeString("aspectx", obj.AspectX); - writer.WriteOptionalAttributeString("aspecty", obj.AspectY); - writer.WriteRequiredAttributeString("refresh", obj.Refresh); + writer.WriteRequiredAttributeString("screen", obj.Screen?.AsStringValue()); + writer.WriteRequiredAttributeString("orientation", obj.Orientation?.AsStringValue(useSecond: true)); + writer.WriteOptionalAttributeString("width", obj.Width.ToString()); + writer.WriteOptionalAttributeString("height", obj.Height.ToString()); + writer.WriteOptionalAttributeString("aspectx", obj.AspectX.ToString()); + writer.WriteOptionalAttributeString("aspecty", obj.AspectY.ToString()); + writer.WriteRequiredAttributeString("refresh", obj.Refresh?.ToString("0.000000")); writer.WriteEndElement(); } diff --git a/SabreTools.Serialization.Writers/Logiqx.cs b/SabreTools.Serialization.Writers/Logiqx.cs index 7fc4030d..9ce88276 100644 --- a/SabreTools.Serialization.Writers/Logiqx.cs +++ b/SabreTools.Serialization.Writers/Logiqx.cs @@ -1,6 +1,7 @@ using System.IO; using System.Text; using System.Xml; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.Logiqx; using SabreTools.IO.Extensions; using SabreTools.Text.Extensions; @@ -76,7 +77,7 @@ namespace SabreTools.Serialization.Writers return stream; } - /// + /// /// Write a Datafile to an XmlTextWriter /// /// Datafile to write @@ -86,7 +87,7 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("datafile"); writer.WriteOptionalAttributeString("build", obj.Build); - writer.WriteOptionalAttributeString("debug", obj.Debug); + writer.WriteOptionalAttributeString("debug", obj.Debug.FromYesNo()); // TODO: Fix schema location writing // writer.WriteOptionalAttributeString("schemaLocation", obj.SchemaLocation); @@ -125,9 +126,12 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("clrmamepro"); writer.WriteOptionalAttributeString("header", obj.Header); - writer.WriteOptionalAttributeString("forcemerging", obj.ForceMerging); - writer.WriteOptionalAttributeString("forcenodump", obj.ForceNodump); - writer.WriteOptionalAttributeString("forcepacking", obj.ForcePacking); + if (obj.ForceMerging != Data.Models.Metadata.MergingFlag.None) + writer.WriteOptionalAttributeString("forcemerging", obj.ForceMerging.AsStringValue()); + if (obj.ForceNodump != Data.Models.Metadata.NodumpFlag.None) + writer.WriteOptionalAttributeString("forcenodump", obj.ForceNodump.AsStringValue()); + if (obj.ForcePacking != Data.Models.Metadata.PackingFlag.None) + writer.WriteOptionalAttributeString("forcepacking", obj.ForcePacking.AsStringValue()); writer.WriteEndElement(); } @@ -155,6 +159,9 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalElementString("comment", obj.Comment); writer.WriteOptionalElementString("type", obj.Type); + if (obj.RomVault is not null) + WriteRomVault(obj.RomVault, writer); + if (obj.ClrMamePro is not null) WriteClrMamePro(obj.ClrMamePro, writer); @@ -174,12 +181,36 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("romcenter"); writer.WriteOptionalAttributeString("plugin", obj.Plugin); - writer.WriteOptionalAttributeString("rommode", obj.RomMode); - writer.WriteOptionalAttributeString("biosmode", obj.BiosMode); - writer.WriteOptionalAttributeString("samplemode", obj.SampleMode); - writer.WriteOptionalAttributeString("lockrommode", obj.LockRomMode); - writer.WriteOptionalAttributeString("lockbiosmode", obj.LockBiosMode); - writer.WriteOptionalAttributeString("locksamplemode", obj.LockSampleMode); + + if (obj.RomMode != Data.Models.Metadata.MergingFlag.None) + writer.WriteOptionalAttributeString("rommode", obj.RomMode.AsStringValue()); + if (obj.BiosMode != Data.Models.Metadata.MergingFlag.None) + writer.WriteOptionalAttributeString("biosmode", obj.BiosMode.AsStringValue()); + if (obj.SampleMode != Data.Models.Metadata.MergingFlag.None) + writer.WriteOptionalAttributeString("samplemode", obj.SampleMode.AsStringValue()); + writer.WriteOptionalAttributeString("lockrommode", obj.LockRomMode.FromYesNo()); + writer.WriteOptionalAttributeString("lockbiosmode", obj.LockBiosMode.FromYesNo()); + writer.WriteOptionalAttributeString("locksamplemode", obj.LockSampleMode.FromYesNo()); + + writer.WriteEndElement(); + } + + /// + /// Write a RomVault to an XmlTextWriter + /// + /// RomVault to write + /// XmlTextReader to write to + private static void WriteRomVault(RomVault obj, XmlTextWriter writer) + { + writer.WriteStartElement("romvault"); + + writer.WriteOptionalAttributeString("header", obj.Header); + if (obj.ForceMerging != Data.Models.Metadata.MergingFlag.None) + writer.WriteOptionalAttributeString("forcemerging", obj.ForceMerging.AsStringValue()); + if (obj.ForceNodump != Data.Models.Metadata.NodumpFlag.None) + writer.WriteOptionalAttributeString("forcenodump", obj.ForceNodump.AsStringValue()); + if (obj.ForcePacking != Data.Models.Metadata.PackingFlag.None) + writer.WriteOptionalAttributeString("forcepacking", obj.ForcePacking.AsStringValue()); writer.WriteEndElement(); } @@ -213,7 +244,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteRequiredAttributeString("description", obj.Description); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); writer.WriteEndElement(); } @@ -275,7 +306,7 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalAttributeString("md5", obj.MD5); writer.WriteOptionalAttributeString("sha1", obj.SHA1); writer.WriteOptionalAttributeString("merge", obj.Merge); - writer.WriteOptionalAttributeString("status", obj.Status); + writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue()); writer.WriteOptionalAttributeString("region", obj.Region); writer.WriteEndElement(); @@ -290,14 +321,14 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("driver"); - writer.WriteRequiredAttributeString("status", obj.Status); - writer.WriteRequiredAttributeString("emulation", obj.Emulation); - writer.WriteRequiredAttributeString("cocktail", obj.Cocktail); - writer.WriteRequiredAttributeString("savestate", obj.SaveState); - writer.WriteOptionalAttributeString("requiresartwork", obj.RequiresArtwork); - writer.WriteOptionalAttributeString("unofficial", obj.Unofficial); - writer.WriteOptionalAttributeString("nosoundhardware", obj.NoSoundHardware); - writer.WriteOptionalAttributeString("incomplete", obj.Incomplete); + writer.WriteRequiredAttributeString("status", obj.Status?.AsStringValue()); + writer.WriteRequiredAttributeString("emulation", obj.Emulation?.AsStringValue()); + writer.WriteRequiredAttributeString("cocktail", obj.Cocktail?.AsStringValue()); + writer.WriteRequiredAttributeString("savestate", obj.SaveState?.AsStringValue()); + writer.WriteOptionalAttributeString("requiresartwork", obj.RequiresArtwork.FromYesNo()); + writer.WriteOptionalAttributeString("unofficial", obj.Unofficial.FromYesNo()); + writer.WriteOptionalAttributeString("nosoundhardware", obj.NoSoundHardware.FromYesNo()); + writer.WriteOptionalAttributeString("incomplete", obj.Incomplete.FromYesNo()); writer.WriteEndElement(); } @@ -318,9 +349,9 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteOptionalAttributeString("sourcefile", obj.SourceFile); - writer.WriteOptionalAttributeString("isbios", obj.IsBios); - writer.WriteOptionalAttributeString("isdevice", obj.IsDevice); - writer.WriteOptionalAttributeString("ismechanical", obj.IsMechanical); + writer.WriteOptionalAttributeString("isbios", obj.IsBios.FromYesNo()); + writer.WriteOptionalAttributeString("isdevice", obj.IsDevice.FromYesNo()); + writer.WriteOptionalAttributeString("ismechanical", obj.IsMechanical.FromYesNo()); writer.WriteOptionalAttributeString("cloneof", obj.CloneOf); writer.WriteOptionalAttributeString("romof", obj.RomOf); writer.WriteOptionalAttributeString("sampleof", obj.SampleOf); @@ -328,7 +359,7 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalAttributeString("rebuildto", obj.RebuildTo); writer.WriteOptionalAttributeString("id", obj.Id); writer.WriteOptionalAttributeString("cloneofid", obj.CloneOfId); - writer.WriteOptionalAttributeString("runnable", obj.Runnable); + writer.WriteOptionalAttributeString("runnable", obj.Runnable?.AsStringValue()); if (obj.Comment is not null && obj.Comment.Length > 0) { @@ -466,7 +497,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("region", obj.Region); writer.WriteOptionalAttributeString("language", obj.Language); writer.WriteOptionalAttributeString("date", obj.Date); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); writer.WriteEndElement(); } @@ -481,7 +512,7 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("rom"); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteRequiredAttributeString("size", obj.Size); + writer.WriteRequiredAttributeString("size", obj.Size?.ToString()); writer.WriteOptionalAttributeString("crc16", obj.CRC16); writer.WriteOptionalAttributeString("crc", obj.CRC); writer.WriteOptionalAttributeString("crc64", obj.CRC64); @@ -498,12 +529,12 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalAttributeString("xxh3_64", obj.xxHash364); writer.WriteOptionalAttributeString("xxh3_128", obj.xxHash3128); writer.WriteOptionalAttributeString("merge", obj.Merge); - writer.WriteOptionalAttributeString("status", obj.Status); + writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue()); writer.WriteOptionalAttributeString("serial", obj.Serial); writer.WriteOptionalAttributeString("header", obj.Header); writer.WriteOptionalAttributeString("date", obj.Date); - writer.WriteOptionalAttributeString("inverted", obj.Inverted); - writer.WriteOptionalAttributeString("mia", obj.MIA); + writer.WriteOptionalAttributeString("inverted", obj.Inverted.FromYesNo()); + writer.WriteOptionalAttributeString("mia", obj.MIA.FromYesNo()); writer.WriteEndElement(); } @@ -533,7 +564,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("tag", obj.Tag); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteRequiredAttributeString("status", obj.Status); + writer.WriteRequiredAttributeString("status", obj.Status?.AsStringValue()); writer.WriteOptionalAttributeString("filter", obj.Filter); writer.WriteEndElement(); diff --git a/SabreTools.Serialization.Writers/M1.cs b/SabreTools.Serialization.Writers/M1.cs index 0ebd55cf..af84c695 100644 --- a/SabreTools.Serialization.Writers/M1.cs +++ b/SabreTools.Serialization.Writers/M1.cs @@ -1,6 +1,7 @@ using System.IO; using System.Text; using System.Xml; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.Listxml; using SabreTools.IO.Extensions; using SabreTools.Text.Extensions; @@ -73,7 +74,7 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("adjuster"); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); if (obj.Condition is not null) WriteCondition(obj.Condition, writer); @@ -106,7 +107,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteRequiredAttributeString("description", obj.Description); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); writer.WriteEndElement(); } @@ -122,9 +123,9 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteOptionalAttributeString("tag", obj.Tag); - writer.WriteRequiredAttributeString("type", obj.Type); - writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly); - writer.WriteOptionalAttributeString("clock", obj.Clock); + writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); + writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly.FromYesNo()); + writer.WriteOptionalAttributeString("clock", obj.Clock?.ToString()); writer.WriteEndElement(); } @@ -140,7 +141,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("tag", obj.Tag); writer.WriteRequiredAttributeString("mask", obj.Mask); - writer.WriteRequiredAttributeString("relation", obj.Relation); + writer.WriteRequiredAttributeString("relation", obj.Relation?.AsStringValue()); writer.WriteRequiredAttributeString("value", obj.Value); writer.WriteEndElement(); @@ -191,8 +192,8 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("conflocation"); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteRequiredAttributeString("number", obj.Number); - writer.WriteOptionalAttributeString("inverted", obj.Inverted); + writer.WriteRequiredAttributeString("number", obj.Number?.ToString()); + writer.WriteOptionalAttributeString("inverted", obj.Inverted.FromYesNo()); writer.WriteEndElement(); } @@ -208,7 +209,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteRequiredAttributeString("value", obj.Value); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); if (obj.Condition is not null) WriteCondition(obj.Condition, writer); @@ -225,15 +226,15 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("control"); - writer.WriteRequiredAttributeString("type", obj.Type); - writer.WriteOptionalAttributeString("player", obj.Player); - writer.WriteOptionalAttributeString("buttons", obj.Buttons); - writer.WriteOptionalAttributeString("reqbuttons", obj.ReqButtons); - writer.WriteOptionalAttributeString("minimum", obj.Minimum); - writer.WriteOptionalAttributeString("maximum", obj.Maximum); - writer.WriteOptionalAttributeString("sensitivity", obj.Sensitivity); - writer.WriteOptionalAttributeString("keydelta", obj.KeyDelta); - writer.WriteOptionalAttributeString("reverse", obj.Reverse); + writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); + writer.WriteOptionalAttributeString("player", obj.Player?.ToString()); + writer.WriteOptionalAttributeString("buttons", obj.Buttons?.ToString()); + writer.WriteOptionalAttributeString("reqbuttons", obj.ReqButtons?.ToString()); + writer.WriteOptionalAttributeString("minimum", obj.Minimum?.ToString()); + writer.WriteOptionalAttributeString("maximum", obj.Maximum?.ToString()); + writer.WriteOptionalAttributeString("sensitivity", obj.Sensitivity?.ToString()); + writer.WriteOptionalAttributeString("keydelta", obj.KeyDelta?.ToString()); + writer.WriteOptionalAttributeString("reverse", obj.Reverse.FromYesNo()); writer.WriteOptionalAttributeString("ways", obj.Ways); writer.WriteOptionalAttributeString("ways2", obj.Ways2); writer.WriteOptionalAttributeString("ways3", obj.Ways3); @@ -250,10 +251,11 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("device"); - writer.WriteRequiredAttributeString("type", obj.Type); + writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); writer.WriteOptionalAttributeString("tag", obj.Tag); writer.WriteOptionalAttributeString("fixed_image", obj.FixedImage); - writer.WriteOptionalAttributeString("mandatory", obj.Mandatory); + if (obj.Mandatory is not null) + writer.WriteOptionalAttributeString("mandatory", obj.Mandatory.Value ? "1" : "0"); writer.WriteOptionalAttributeString("interface", obj.Interface); if (obj.Instance is not null) @@ -294,8 +296,8 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("diplocation"); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteRequiredAttributeString("number", obj.Number); - writer.WriteOptionalAttributeString("inverted", obj.Inverted); + writer.WriteRequiredAttributeString("number", obj.Number?.ToString()); + writer.WriteOptionalAttributeString("inverted", obj.Inverted.FromYesNo()); writer.WriteEndElement(); } @@ -346,7 +348,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteRequiredAttributeString("value", obj.Value); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); if (obj.Condition is not null) WriteCondition(obj.Condition, writer); @@ -368,10 +370,10 @@ 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("writable", obj.Writable); - writer.WriteOptionalAttributeString("status", obj.Status); - writer.WriteOptionalAttributeString("optional", obj.Optional); + writer.WriteOptionalAttributeString("index", obj.Index?.ToString()); + writer.WriteOptionalAttributeString("writable", obj.Writable.FromYesNo()); + writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue()); + writer.WriteOptionalAttributeString("optional", obj.Optional.FromYesNo()); writer.WriteEndElement(); } @@ -386,19 +388,19 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("display"); writer.WriteOptionalAttributeString("tag", obj.Tag); - writer.WriteRequiredAttributeString("type", obj.Type); - writer.WriteOptionalAttributeString("rotate", obj.Rotate); - writer.WriteOptionalAttributeString("flipx", obj.FlipX); - writer.WriteOptionalAttributeString("width", obj.Width); - writer.WriteOptionalAttributeString("height", obj.Height); - writer.WriteRequiredAttributeString("refresh", obj.Refresh); - writer.WriteOptionalAttributeString("pixclock", obj.PixClock); - writer.WriteOptionalAttributeString("htotal", obj.HTotal); - writer.WriteOptionalAttributeString("hbend", obj.HBEnd); - writer.WriteOptionalAttributeString("hbstart", obj.HBStart); - writer.WriteOptionalAttributeString("vtotal", obj.VTotal); - writer.WriteOptionalAttributeString("vbend", obj.VBEnd); - writer.WriteOptionalAttributeString("vbstart", obj.VBStart); + writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); + writer.WriteOptionalAttributeString("rotate", obj.Rotate?.AsStringValue(useSecond: false)); + writer.WriteOptionalAttributeString("flipx", obj.FlipX.FromYesNo()); + writer.WriteOptionalAttributeString("width", obj.Width?.ToString()); + writer.WriteOptionalAttributeString("height", obj.Height?.ToString()); + writer.WriteRequiredAttributeString("refresh", obj.Refresh?.ToString("0.000000")); + writer.WriteOptionalAttributeString("pixclock", obj.PixClock?.ToString()); + writer.WriteOptionalAttributeString("htotal", obj.HTotal?.ToString()); + writer.WriteOptionalAttributeString("hbend", obj.HBEnd?.ToString()); + writer.WriteOptionalAttributeString("hbstart", obj.HBStart?.ToString()); + writer.WriteOptionalAttributeString("vtotal", obj.VTotal?.ToString()); + writer.WriteOptionalAttributeString("vbend", obj.VBEnd?.ToString()); + writer.WriteOptionalAttributeString("vbstart", obj.VBStart?.ToString()); writer.WriteEndElement(); } @@ -412,17 +414,17 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("driver"); - writer.WriteRequiredAttributeString("status", obj.Status); - writer.WriteOptionalAttributeString("color", obj.Color); - writer.WriteOptionalAttributeString("sound", obj.Sound); + writer.WriteRequiredAttributeString("status", obj.Status?.AsStringValue()); + writer.WriteOptionalAttributeString("color", obj.Color?.AsStringValue()); + writer.WriteOptionalAttributeString("sound", obj.Sound?.AsStringValue()); writer.WriteOptionalAttributeString("palettesize", obj.PaletteSize); - writer.WriteRequiredAttributeString("emulation", obj.Emulation); - writer.WriteRequiredAttributeString("cocktail", obj.Cocktail); - writer.WriteRequiredAttributeString("savestate", obj.SaveState); - writer.WriteOptionalAttributeString("requiresartwork", obj.RequiresArtwork); - writer.WriteOptionalAttributeString("unofficial", obj.Unofficial); - writer.WriteOptionalAttributeString("nosoundhardware", obj.NoSoundHardware); - writer.WriteOptionalAttributeString("incomplete", obj.Incomplete); + writer.WriteRequiredAttributeString("emulation", obj.Emulation?.AsStringValue()); + writer.WriteRequiredAttributeString("cocktail", obj.Cocktail?.AsStringValue()); + writer.WriteRequiredAttributeString("savestate", obj.SaveState?.AsStringValue()); + writer.WriteOptionalAttributeString("requiresartwork", obj.RequiresArtwork.FromYesNo()); + writer.WriteOptionalAttributeString("unofficial", obj.Unofficial.FromYesNo()); + writer.WriteOptionalAttributeString("nosoundhardware", obj.NoSoundHardware.FromYesNo()); + writer.WriteOptionalAttributeString("incomplete", obj.Incomplete.FromYesNo()); writer.WriteEndElement(); } @@ -450,9 +452,9 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("feature"); - writer.WriteRequiredAttributeString("type", obj.Type); - writer.WriteOptionalAttributeString("status", obj.Status); - writer.WriteOptionalAttributeString("overall", obj.Overall); + writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); + writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue()); + writer.WriteOptionalAttributeString("overall", obj.Overall?.AsStringValue()); writer.WriteEndElement(); } @@ -473,10 +475,10 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteOptionalAttributeString("sourcefile", obj.SourceFile); - writer.WriteOptionalAttributeString("isbios", obj.IsBios); - writer.WriteOptionalAttributeString("isdevice", obj.IsDevice); - writer.WriteOptionalAttributeString("ismechanical", obj.IsMechanical); - writer.WriteOptionalAttributeString("runnable", obj.Runnable); + writer.WriteOptionalAttributeString("isbios", obj.IsBios.FromYesNo()); + writer.WriteOptionalAttributeString("isdevice", obj.IsDevice.FromYesNo()); + writer.WriteOptionalAttributeString("ismechanical", obj.IsMechanical.FromYesNo()); + writer.WriteOptionalAttributeString("runnable", obj.Runnable?.AsStringValue()); writer.WriteOptionalAttributeString("cloneof", obj.CloneOf); writer.WriteOptionalAttributeString("romof", obj.RomOf); writer.WriteOptionalAttributeString("sampleof", obj.SampleOf); @@ -643,12 +645,12 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("input"); - writer.WriteOptionalAttributeString("service", obj.Service); - writer.WriteOptionalAttributeString("tilt", obj.Tilt); - writer.WriteRequiredAttributeString("players", obj.Players); + writer.WriteOptionalAttributeString("service", obj.Service.FromYesNo()); + writer.WriteOptionalAttributeString("tilt", obj.Tilt.FromYesNo()); + writer.WriteRequiredAttributeString("players", obj.Players?.ToString()); writer.WriteOptionalAttributeString("control", obj.ControlAttr); - writer.WriteOptionalAttributeString("buttons", obj.Buttons); - writer.WriteOptionalAttributeString("coins", obj.Coins); + writer.WriteOptionalAttributeString("buttons", obj.Buttons?.ToString()); + writer.WriteOptionalAttributeString("coins", obj.Coins?.ToString()); if (obj.Control is not null && obj.Control.Length > 0) { @@ -708,7 +710,7 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("ramoption"); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); if (obj.Content is not null) writer.WriteValue(obj.Content); @@ -727,16 +729,16 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteOptionalAttributeString("bios", obj.Bios); - writer.WriteRequiredAttributeString("size", obj.Size); + writer.WriteRequiredAttributeString("size", obj.Size?.ToString()); writer.WriteOptionalAttributeString("crc", obj.CRC); writer.WriteOptionalAttributeString("sha1", obj.SHA1); writer.WriteOptionalAttributeString("merge", obj.Merge); writer.WriteOptionalAttributeString("region", obj.Region); writer.WriteOptionalAttributeString("offset", obj.Offset); - writer.WriteOptionalAttributeString("status", obj.Status); - writer.WriteOptionalAttributeString("optional", obj.Optional); - writer.WriteOptionalAttributeString("dispose", obj.Dispose); - writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly); + writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue()); + writer.WriteOptionalAttributeString("optional", obj.Optional.FromYesNo()); + writer.WriteOptionalAttributeString("dispose", obj.Dispose.FromYesNo()); + writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly.FromYesNo()); writer.WriteEndElement(); } @@ -788,7 +790,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteRequiredAttributeString("devname", obj.DevName); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); writer.WriteEndElement(); } @@ -804,7 +806,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("tag", obj.Tag); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteRequiredAttributeString("status", obj.Status); + writer.WriteRequiredAttributeString("status", obj.Status?.AsStringValue()); writer.WriteOptionalAttributeString("filter", obj.Filter); writer.WriteEndElement(); @@ -819,7 +821,7 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("sound"); - writer.WriteRequiredAttributeString("channels", obj.Channels); + writer.WriteRequiredAttributeString("channels", obj.Channels?.ToString()); writer.WriteEndElement(); } @@ -833,13 +835,13 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("video"); - writer.WriteRequiredAttributeString("screen", obj.Screen); - writer.WriteRequiredAttributeString("orientation", obj.Orientation); - writer.WriteOptionalAttributeString("width", obj.Width); - writer.WriteOptionalAttributeString("height", obj.Height); - writer.WriteOptionalAttributeString("aspectx", obj.AspectX); - writer.WriteOptionalAttributeString("aspecty", obj.AspectY); - writer.WriteRequiredAttributeString("refresh", obj.Refresh); + writer.WriteRequiredAttributeString("screen", obj.Screen?.AsStringValue()); + writer.WriteRequiredAttributeString("orientation", obj.Orientation?.AsStringValue(useSecond: true)); + writer.WriteOptionalAttributeString("width", obj.Width.ToString()); + writer.WriteOptionalAttributeString("height", obj.Height.ToString()); + writer.WriteOptionalAttributeString("aspectx", obj.AspectX.ToString()); + writer.WriteOptionalAttributeString("aspecty", obj.AspectY.ToString()); + writer.WriteRequiredAttributeString("refresh", obj.Refresh?.ToString("0.000000")); writer.WriteEndElement(); } diff --git a/SabreTools.Serialization.Writers/Mess.cs b/SabreTools.Serialization.Writers/Mess.cs index d37bfa3e..ada680f8 100644 --- a/SabreTools.Serialization.Writers/Mess.cs +++ b/SabreTools.Serialization.Writers/Mess.cs @@ -1,6 +1,7 @@ using System.IO; using System.Text; using System.Xml; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.Listxml; using SabreTools.IO.Extensions; using SabreTools.Text.Extensions; @@ -73,7 +74,7 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("adjuster"); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); if (obj.Condition is not null) WriteCondition(obj.Condition, writer); @@ -106,7 +107,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteRequiredAttributeString("description", obj.Description); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); writer.WriteEndElement(); } @@ -122,9 +123,9 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteOptionalAttributeString("tag", obj.Tag); - writer.WriteRequiredAttributeString("type", obj.Type); - writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly); - writer.WriteOptionalAttributeString("clock", obj.Clock); + writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); + writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly.FromYesNo()); + writer.WriteOptionalAttributeString("clock", obj.Clock?.ToString()); writer.WriteEndElement(); } @@ -140,7 +141,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("tag", obj.Tag); writer.WriteRequiredAttributeString("mask", obj.Mask); - writer.WriteRequiredAttributeString("relation", obj.Relation); + writer.WriteRequiredAttributeString("relation", obj.Relation?.AsStringValue()); writer.WriteRequiredAttributeString("value", obj.Value); writer.WriteEndElement(); @@ -191,8 +192,8 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("conflocation"); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteRequiredAttributeString("number", obj.Number); - writer.WriteOptionalAttributeString("inverted", obj.Inverted); + writer.WriteRequiredAttributeString("number", obj.Number?.ToString()); + writer.WriteOptionalAttributeString("inverted", obj.Inverted.FromYesNo()); writer.WriteEndElement(); } @@ -208,7 +209,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteRequiredAttributeString("value", obj.Value); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); if (obj.Condition is not null) WriteCondition(obj.Condition, writer); @@ -225,15 +226,15 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("control"); - writer.WriteRequiredAttributeString("type", obj.Type); - writer.WriteOptionalAttributeString("player", obj.Player); - writer.WriteOptionalAttributeString("buttons", obj.Buttons); - writer.WriteOptionalAttributeString("reqbuttons", obj.ReqButtons); - writer.WriteOptionalAttributeString("minimum", obj.Minimum); - writer.WriteOptionalAttributeString("maximum", obj.Maximum); - writer.WriteOptionalAttributeString("sensitivity", obj.Sensitivity); - writer.WriteOptionalAttributeString("keydelta", obj.KeyDelta); - writer.WriteOptionalAttributeString("reverse", obj.Reverse); + writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); + writer.WriteOptionalAttributeString("player", obj.Player?.ToString()); + writer.WriteOptionalAttributeString("buttons", obj.Buttons?.ToString()); + writer.WriteOptionalAttributeString("reqbuttons", obj.ReqButtons?.ToString()); + writer.WriteOptionalAttributeString("minimum", obj.Minimum?.ToString()); + writer.WriteOptionalAttributeString("maximum", obj.Maximum?.ToString()); + writer.WriteOptionalAttributeString("sensitivity", obj.Sensitivity?.ToString()); + writer.WriteOptionalAttributeString("keydelta", obj.KeyDelta?.ToString()); + writer.WriteOptionalAttributeString("reverse", obj.Reverse.FromYesNo()); writer.WriteOptionalAttributeString("ways", obj.Ways); writer.WriteOptionalAttributeString("ways2", obj.Ways2); writer.WriteOptionalAttributeString("ways3", obj.Ways3); @@ -250,10 +251,11 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("device"); - writer.WriteRequiredAttributeString("type", obj.Type); + writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); writer.WriteOptionalAttributeString("tag", obj.Tag); writer.WriteOptionalAttributeString("fixed_image", obj.FixedImage); - writer.WriteOptionalAttributeString("mandatory", obj.Mandatory); + if (obj.Mandatory is not null) + writer.WriteOptionalAttributeString("mandatory", obj.Mandatory.Value ? "1" : "0"); writer.WriteOptionalAttributeString("interface", obj.Interface); if (obj.Instance is not null) @@ -294,8 +296,8 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("diplocation"); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteRequiredAttributeString("number", obj.Number); - writer.WriteOptionalAttributeString("inverted", obj.Inverted); + writer.WriteRequiredAttributeString("number", obj.Number?.ToString()); + writer.WriteOptionalAttributeString("inverted", obj.Inverted.FromYesNo()); writer.WriteEndElement(); } @@ -346,7 +348,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteRequiredAttributeString("value", obj.Value); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); if (obj.Condition is not null) WriteCondition(obj.Condition, writer); @@ -368,10 +370,10 @@ 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("writable", obj.Writable); - writer.WriteOptionalAttributeString("status", obj.Status); - writer.WriteOptionalAttributeString("optional", obj.Optional); + writer.WriteOptionalAttributeString("index", obj.Index?.ToString()); + writer.WriteOptionalAttributeString("writable", obj.Writable.FromYesNo()); + writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue()); + writer.WriteOptionalAttributeString("optional", obj.Optional.FromYesNo()); writer.WriteEndElement(); } @@ -386,19 +388,19 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("display"); writer.WriteOptionalAttributeString("tag", obj.Tag); - writer.WriteRequiredAttributeString("type", obj.Type); - writer.WriteOptionalAttributeString("rotate", obj.Rotate); - writer.WriteOptionalAttributeString("flipx", obj.FlipX); - writer.WriteOptionalAttributeString("width", obj.Width); - writer.WriteOptionalAttributeString("height", obj.Height); - writer.WriteRequiredAttributeString("refresh", obj.Refresh); - writer.WriteOptionalAttributeString("pixclock", obj.PixClock); - writer.WriteOptionalAttributeString("htotal", obj.HTotal); - writer.WriteOptionalAttributeString("hbend", obj.HBEnd); - writer.WriteOptionalAttributeString("hbstart", obj.HBStart); - writer.WriteOptionalAttributeString("vtotal", obj.VTotal); - writer.WriteOptionalAttributeString("vbend", obj.VBEnd); - writer.WriteOptionalAttributeString("vbstart", obj.VBStart); + writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); + writer.WriteOptionalAttributeString("rotate", obj.Rotate?.AsStringValue(useSecond: false)); + writer.WriteOptionalAttributeString("flipx", obj.FlipX.FromYesNo()); + writer.WriteOptionalAttributeString("width", obj.Width?.ToString()); + writer.WriteOptionalAttributeString("height", obj.Height?.ToString()); + writer.WriteRequiredAttributeString("refresh", obj.Refresh?.ToString("0.000000")); + writer.WriteOptionalAttributeString("pixclock", obj.PixClock?.ToString()); + writer.WriteOptionalAttributeString("htotal", obj.HTotal?.ToString()); + writer.WriteOptionalAttributeString("hbend", obj.HBEnd?.ToString()); + writer.WriteOptionalAttributeString("hbstart", obj.HBStart?.ToString()); + writer.WriteOptionalAttributeString("vtotal", obj.VTotal?.ToString()); + writer.WriteOptionalAttributeString("vbend", obj.VBEnd?.ToString()); + writer.WriteOptionalAttributeString("vbstart", obj.VBStart?.ToString()); writer.WriteEndElement(); } @@ -412,17 +414,17 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("driver"); - writer.WriteRequiredAttributeString("status", obj.Status); - writer.WriteOptionalAttributeString("color", obj.Color); - writer.WriteOptionalAttributeString("sound", obj.Sound); + writer.WriteRequiredAttributeString("status", obj.Status?.AsStringValue()); + writer.WriteOptionalAttributeString("color", obj.Color?.AsStringValue()); + writer.WriteOptionalAttributeString("sound", obj.Sound?.AsStringValue()); writer.WriteOptionalAttributeString("palettesize", obj.PaletteSize); - writer.WriteRequiredAttributeString("emulation", obj.Emulation); - writer.WriteRequiredAttributeString("cocktail", obj.Cocktail); - writer.WriteRequiredAttributeString("savestate", obj.SaveState); - writer.WriteOptionalAttributeString("requiresartwork", obj.RequiresArtwork); - writer.WriteOptionalAttributeString("unofficial", obj.Unofficial); - writer.WriteOptionalAttributeString("nosoundhardware", obj.NoSoundHardware); - writer.WriteOptionalAttributeString("incomplete", obj.Incomplete); + writer.WriteRequiredAttributeString("emulation", obj.Emulation?.AsStringValue()); + writer.WriteRequiredAttributeString("cocktail", obj.Cocktail?.AsStringValue()); + writer.WriteRequiredAttributeString("savestate", obj.SaveState?.AsStringValue()); + writer.WriteOptionalAttributeString("requiresartwork", obj.RequiresArtwork.FromYesNo()); + writer.WriteOptionalAttributeString("unofficial", obj.Unofficial.FromYesNo()); + writer.WriteOptionalAttributeString("nosoundhardware", obj.NoSoundHardware.FromYesNo()); + writer.WriteOptionalAttributeString("incomplete", obj.Incomplete.FromYesNo()); writer.WriteEndElement(); } @@ -450,9 +452,9 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("feature"); - writer.WriteRequiredAttributeString("type", obj.Type); - writer.WriteOptionalAttributeString("status", obj.Status); - writer.WriteOptionalAttributeString("overall", obj.Overall); + writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); + writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue()); + writer.WriteOptionalAttributeString("overall", obj.Overall?.AsStringValue()); writer.WriteEndElement(); } @@ -473,10 +475,10 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteOptionalAttributeString("sourcefile", obj.SourceFile); - writer.WriteOptionalAttributeString("isbios", obj.IsBios); - writer.WriteOptionalAttributeString("isdevice", obj.IsDevice); - writer.WriteOptionalAttributeString("ismechanical", obj.IsMechanical); - writer.WriteOptionalAttributeString("runnable", obj.Runnable); + writer.WriteOptionalAttributeString("isbios", obj.IsBios.FromYesNo()); + writer.WriteOptionalAttributeString("isdevice", obj.IsDevice.FromYesNo()); + writer.WriteOptionalAttributeString("ismechanical", obj.IsMechanical.FromYesNo()); + writer.WriteOptionalAttributeString("runnable", obj.Runnable?.AsStringValue()); writer.WriteOptionalAttributeString("cloneof", obj.CloneOf); writer.WriteOptionalAttributeString("romof", obj.RomOf); writer.WriteOptionalAttributeString("sampleof", obj.SampleOf); @@ -643,12 +645,12 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("input"); - writer.WriteOptionalAttributeString("service", obj.Service); - writer.WriteOptionalAttributeString("tilt", obj.Tilt); - writer.WriteRequiredAttributeString("players", obj.Players); + writer.WriteOptionalAttributeString("service", obj.Service.FromYesNo()); + writer.WriteOptionalAttributeString("tilt", obj.Tilt.FromYesNo()); + writer.WriteRequiredAttributeString("players", obj.Players?.ToString()); writer.WriteOptionalAttributeString("control", obj.ControlAttr); - writer.WriteOptionalAttributeString("buttons", obj.Buttons); - writer.WriteOptionalAttributeString("coins", obj.Coins); + writer.WriteOptionalAttributeString("buttons", obj.Buttons?.ToString()); + writer.WriteOptionalAttributeString("coins", obj.Coins?.ToString()); if (obj.Control is not null && obj.Control.Length > 0) { @@ -708,7 +710,7 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("ramoption"); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); if (obj.Content is not null) writer.WriteValue(obj.Content); @@ -727,16 +729,16 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteOptionalAttributeString("bios", obj.Bios); - writer.WriteRequiredAttributeString("size", obj.Size); + writer.WriteRequiredAttributeString("size", obj.Size?.ToString()); writer.WriteOptionalAttributeString("crc", obj.CRC); writer.WriteOptionalAttributeString("sha1", obj.SHA1); writer.WriteOptionalAttributeString("merge", obj.Merge); writer.WriteOptionalAttributeString("region", obj.Region); writer.WriteOptionalAttributeString("offset", obj.Offset); - writer.WriteOptionalAttributeString("status", obj.Status); - writer.WriteOptionalAttributeString("optional", obj.Optional); - writer.WriteOptionalAttributeString("dispose", obj.Dispose); - writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly); + writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue()); + writer.WriteOptionalAttributeString("optional", obj.Optional.FromYesNo()); + writer.WriteOptionalAttributeString("dispose", obj.Dispose.FromYesNo()); + writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly.FromYesNo()); writer.WriteEndElement(); } @@ -788,7 +790,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteRequiredAttributeString("devname", obj.DevName); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); writer.WriteEndElement(); } @@ -804,7 +806,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("tag", obj.Tag); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteRequiredAttributeString("status", obj.Status); + writer.WriteRequiredAttributeString("status", obj.Status?.AsStringValue()); writer.WriteOptionalAttributeString("filter", obj.Filter); writer.WriteEndElement(); @@ -819,7 +821,7 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("sound"); - writer.WriteRequiredAttributeString("channels", obj.Channels); + writer.WriteRequiredAttributeString("channels", obj.Channels?.ToString()); writer.WriteEndElement(); } @@ -833,13 +835,13 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("video"); - writer.WriteRequiredAttributeString("screen", obj.Screen); - writer.WriteRequiredAttributeString("orientation", obj.Orientation); - writer.WriteOptionalAttributeString("width", obj.Width); - writer.WriteOptionalAttributeString("height", obj.Height); - writer.WriteOptionalAttributeString("aspectx", obj.AspectX); - writer.WriteOptionalAttributeString("aspecty", obj.AspectY); - writer.WriteRequiredAttributeString("refresh", obj.Refresh); + writer.WriteRequiredAttributeString("screen", obj.Screen?.AsStringValue()); + writer.WriteRequiredAttributeString("orientation", obj.Orientation?.AsStringValue(useSecond: true)); + writer.WriteOptionalAttributeString("width", obj.Width.ToString()); + writer.WriteOptionalAttributeString("height", obj.Height.ToString()); + writer.WriteOptionalAttributeString("aspectx", obj.AspectX.ToString()); + writer.WriteOptionalAttributeString("aspecty", obj.AspectY.ToString()); + writer.WriteRequiredAttributeString("refresh", obj.Refresh?.ToString("0.000000")); writer.WriteEndElement(); } diff --git a/SabreTools.Serialization.Writers/NoIntroDatabase.cs b/SabreTools.Serialization.Writers/NoIntroDatabase.cs index 1c391fd8..729150f2 100644 --- a/SabreTools.Serialization.Writers/NoIntroDatabase.cs +++ b/SabreTools.Serialization.Writers/NoIntroDatabase.cs @@ -305,7 +305,7 @@ namespace SabreTools.Serialization.Writers } } - writer.WriteEndElement(); + writer.WriteEndElement(); } /// @@ -322,23 +322,29 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalAttributeString("section", obj.Section); writer.WriteOptionalAttributeString("rominfo", obj.RomInfo); writer.WriteOptionalAttributeString("d_date", obj.DumpDate); - writer.WriteOptionalAttributeString("d_date_info", obj.DumpDateInfo); + if (obj.DumpDateInfo is not null) + writer.WriteOptionalAttributeString("d_date_info", obj.DumpDateInfo.Value ? "1" : "0"); writer.WriteOptionalAttributeString("r_date", obj.ReleaseDate); - writer.WriteOptionalAttributeString("r_date_info", obj.ReleaseDateInfo); + if (obj.ReleaseDateInfo is not null) + writer.WriteOptionalAttributeString("r_date_info", obj.ReleaseDateInfo.Value ? "1" : "0"); writer.WriteOptionalAttributeString("dumper", obj.Dumper); writer.WriteOptionalAttributeString("project", obj.Project); writer.WriteOptionalAttributeString("originalformat", obj.OriginalFormat); - writer.WriteOptionalAttributeString("nodump", obj.Nodump); + if (obj.Nodump is not null) + writer.WriteOptionalAttributeString("nodump", obj.Nodump.Value ? "1" : "0"); writer.WriteOptionalAttributeString("tool", obj.Tool); writer.WriteOptionalAttributeString("origin", obj.Origin); writer.WriteOptionalAttributeString("comment1", obj.Comment1); writer.WriteOptionalAttributeString("comment2", obj.Comment2); writer.WriteOptionalAttributeString("link1", obj.Link1); - writer.WriteOptionalAttributeString("link1_public", obj.Link1Public); + if (obj.Link1Public is not null) + writer.WriteOptionalAttributeString("link1_public", obj.Link1Public.Value ? "1" : "0"); writer.WriteOptionalAttributeString("link2", obj.Link2); - writer.WriteOptionalAttributeString("link2_public", obj.Link2Public); + if (obj.Link2Public is not null) + writer.WriteOptionalAttributeString("link2_public", obj.Link2Public.Value ? "1" : "0"); writer.WriteOptionalAttributeString("link3", obj.Link3); - writer.WriteOptionalAttributeString("link3_public", obj.Link3Public); + if (obj.Link3Public is not null) + writer.WriteOptionalAttributeString("link3_public", obj.Link3Public.Value ? "1" : "0"); writer.WriteOptionalAttributeString("region", obj.Region); writer.WriteOptionalAttributeString("media_title", obj.MediaTitle); diff --git a/SabreTools.Serialization.Writers/OfflineList.cs b/SabreTools.Serialization.Writers/OfflineList.cs index 05e9d9ad..7d0ed061 100644 --- a/SabreTools.Serialization.Writers/OfflineList.cs +++ b/SabreTools.Serialization.Writers/OfflineList.cs @@ -201,7 +201,7 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalElementString("releaseNumber", obj.ReleaseNumber); writer.WriteOptionalElementString("title", obj.Title); writer.WriteOptionalElementString("saveType", obj.SaveType); - writer.WriteOptionalElementString("romSize", obj.RomSize); + writer.WriteOptionalElementString("romSize", obj.RomSize?.ToString()); writer.WriteOptionalElementString("publisher", obj.Publisher); writer.WriteOptionalElementString("location", obj.Location); writer.WriteOptionalElementString("sourceRom", obj.SourceRom); @@ -333,7 +333,7 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalAttributeString("visible", obj.Visible); writer.WriteOptionalAttributeString("inNamingOption", obj.InNamingOption); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.ToString()?.ToLowerInvariant()); writer.WriteEndElement(); } @@ -441,7 +441,7 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("to"); writer.WriteOptionalAttributeString("value", obj.Value); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.ToString()?.ToLowerInvariant()); writer.WriteOptionalAttributeString("auto", obj.Auto); if (obj.Find is not null && obj.Find.Length > 0) diff --git a/SabreTools.Serialization.Writers/OpenMSX.cs b/SabreTools.Serialization.Writers/OpenMSX.cs index b788ae11..95a6d699 100644 --- a/SabreTools.Serialization.Writers/OpenMSX.cs +++ b/SabreTools.Serialization.Writers/OpenMSX.cs @@ -115,7 +115,7 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("original"); - writer.WriteOptionalAttributeString("value", obj.Value); + writer.WriteOptionalAttributeString("value", obj.Value?.ToString().ToLowerInvariant()); if (obj.Content is not null) writer.WriteRaw(obj.Content); diff --git a/SabreTools.Serialization.Writers/SabreTools.Serialization.Writers.csproj b/SabreTools.Serialization.Writers/SabreTools.Serialization.Writers.csproj index da86eb6b..355919c3 100644 --- a/SabreTools.Serialization.Writers/SabreTools.Serialization.Writers.csproj +++ b/SabreTools.Serialization.Writers/SabreTools.Serialization.Writers.csproj @@ -37,6 +37,7 @@ + diff --git a/SabreTools.Serialization.Writers/SeparatedValue.cs b/SabreTools.Serialization.Writers/SeparatedValue.cs index f4a96fc8..7ff3ee7d 100644 --- a/SabreTools.Serialization.Writers/SeparatedValue.cs +++ b/SabreTools.Serialization.Writers/SeparatedValue.cs @@ -1,5 +1,6 @@ using System.IO; using System.Text; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.SeparatedValue; using SabreTools.IO.Extensions; using SabreTools.Text.SeparatedValue; @@ -169,7 +170,7 @@ namespace SabreTools.Serialization.Writers row.Type, row.RomName, row.DiskName, - row.Size, + row.Size?.ToString(), row.CRC, row.MD5, row.SHA1, @@ -177,7 +178,7 @@ namespace SabreTools.Serialization.Writers row.SHA384, row.SHA512, row.SpamSum, - row.Status, + row.Status?.AsStringValue(), ]; } else @@ -192,12 +193,12 @@ namespace SabreTools.Serialization.Writers row.Type, row.RomName, row.DiskName, - row.Size, + row.Size?.ToString(), row.CRC, row.MD5, row.SHA1, row.SHA256, - row.Status, + row.Status?.AsStringValue(), ]; } diff --git a/SabreTools.Serialization.Writers/SoftwareList.cs b/SabreTools.Serialization.Writers/SoftwareList.cs index 64f202a0..14eab739 100644 --- a/SabreTools.Serialization.Writers/SoftwareList.cs +++ b/SabreTools.Serialization.Writers/SoftwareList.cs @@ -1,6 +1,7 @@ using System.IO; using System.Text; using System.Xml; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.SoftwareList; using SabreTools.IO.Extensions; using SabreTools.Text.Extensions; @@ -103,9 +104,9 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("dataarea"); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteRequiredAttributeString("size", obj.Size); - writer.WriteOptionalAttributeString("width", obj.Width); - writer.WriteOptionalAttributeString("endianness", obj.Endianness); + writer.WriteRequiredAttributeString("size", obj.Size?.ToString()); + writer.WriteOptionalAttributeString("width", obj.Width?.AsStringValue()); + writer.WriteOptionalAttributeString("endianness", obj.Endianness?.AsStringValue()); if (obj.Rom is not null && obj.Rom.Length > 0) { @@ -153,7 +154,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteRequiredAttributeString("value", obj.Value); - writer.WriteOptionalAttributeString("default", obj.Default); + writer.WriteOptionalAttributeString("default", obj.Default.FromYesNo()); writer.WriteEndElement(); } @@ -170,8 +171,8 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteOptionalAttributeString("md5", obj.MD5); writer.WriteOptionalAttributeString("sha1", obj.SHA1); - writer.WriteOptionalAttributeString("status", obj.Status); - writer.WriteOptionalAttributeString("writable", obj.Writeable); + writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue()); + writer.WriteOptionalAttributeString("writable", obj.Writeable.FromYesNo()); writer.WriteEndElement(); } @@ -285,14 +286,14 @@ namespace SabreTools.Serialization.Writers writer.WriteStartElement("rom"); writer.WriteRequiredAttributeString("name", obj.Name); - writer.WriteOptionalAttributeString("size", obj.Size); + writer.WriteOptionalAttributeString("size", obj.Size?.ToString()); writer.WriteOptionalAttributeString("length", obj.Length); writer.WriteOptionalAttributeString("crc", obj.CRC); writer.WriteOptionalAttributeString("sha1", obj.SHA1); writer.WriteOptionalAttributeString("offset", obj.Offset); writer.WriteOptionalAttributeString("value", obj.Value); - writer.WriteOptionalAttributeString("status", obj.Status); - writer.WriteOptionalAttributeString("loadflag", obj.LoadFlag); + writer.WriteOptionalAttributeString("status", obj.Status?.AsStringValue()); + writer.WriteOptionalAttributeString("loadflag", obj.LoadFlag?.AsStringValue()); writer.WriteEndElement(); } @@ -323,7 +324,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("name", obj.Name); writer.WriteOptionalAttributeString("cloneof", obj.CloneOf); - writer.WriteOptionalAttributeString("supported", obj.Supported); + writer.WriteOptionalAttributeString("supported", obj.Supported?.AsStringValue()); writer.WriteRequiredElementString("description", obj.Description); writer.WriteRequiredElementString("year", obj.Year); diff --git a/SabreTools.Serialization.sln b/SabreTools.Serialization.sln index 4d6f4e26..5c811755 100644 --- a/SabreTools.Serialization.sln +++ b/SabreTools.Serialization.sln @@ -35,12 +35,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Serialization.Re EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Serialization.Writers.Test", "SabreTools.Serialization.Writers.Test\SabreTools.Serialization.Writers.Test.csproj", "{99619CA9-6D7D-4653-BD1E-8F586F219607}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Metadata", "SabreTools.Metadata\SabreTools.Metadata.csproj", "{F4C9FAE7-6777-4C1A-BEE7-DA664CA3485B}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Metadata.Filter", "SabreTools.Metadata.Filter\SabreTools.Metadata.Filter.csproj", "{76E096C6-72A9-4A5C-A250-95D2BBBFA5D1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Metadata.Test", "SabreTools.Metadata.Test\SabreTools.Metadata.Test.csproj", "{D817566C-C94F-4ADE-A36A-F67B3F644299}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Metadata.Filter.Test", "SabreTools.Metadata.Filter.Test\SabreTools.Metadata.Filter.Test.csproj", "{43D66007-FCAA-4F69-893B-562B0B61B8B1}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Metadata.DatItems", "SabreTools.Metadata.DatItems\SabreTools.Metadata.DatItems.csproj", "{14931F5A-203A-4C22-A162-D38288B6A576}" @@ -253,18 +249,6 @@ Global {99619CA9-6D7D-4653-BD1E-8F586F219607}.Release|x64.Build.0 = Release|Any CPU {99619CA9-6D7D-4653-BD1E-8F586F219607}.Release|x86.ActiveCfg = Release|Any CPU {99619CA9-6D7D-4653-BD1E-8F586F219607}.Release|x86.Build.0 = Release|Any CPU - {F4C9FAE7-6777-4C1A-BEE7-DA664CA3485B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F4C9FAE7-6777-4C1A-BEE7-DA664CA3485B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F4C9FAE7-6777-4C1A-BEE7-DA664CA3485B}.Debug|x64.ActiveCfg = Debug|Any CPU - {F4C9FAE7-6777-4C1A-BEE7-DA664CA3485B}.Debug|x64.Build.0 = Debug|Any CPU - {F4C9FAE7-6777-4C1A-BEE7-DA664CA3485B}.Debug|x86.ActiveCfg = Debug|Any CPU - {F4C9FAE7-6777-4C1A-BEE7-DA664CA3485B}.Debug|x86.Build.0 = Debug|Any CPU - {F4C9FAE7-6777-4C1A-BEE7-DA664CA3485B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F4C9FAE7-6777-4C1A-BEE7-DA664CA3485B}.Release|Any CPU.Build.0 = Release|Any CPU - {F4C9FAE7-6777-4C1A-BEE7-DA664CA3485B}.Release|x64.ActiveCfg = Release|Any CPU - {F4C9FAE7-6777-4C1A-BEE7-DA664CA3485B}.Release|x64.Build.0 = Release|Any CPU - {F4C9FAE7-6777-4C1A-BEE7-DA664CA3485B}.Release|x86.ActiveCfg = Release|Any CPU - {F4C9FAE7-6777-4C1A-BEE7-DA664CA3485B}.Release|x86.Build.0 = Release|Any CPU {76E096C6-72A9-4A5C-A250-95D2BBBFA5D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {76E096C6-72A9-4A5C-A250-95D2BBBFA5D1}.Debug|Any CPU.Build.0 = Debug|Any CPU {76E096C6-72A9-4A5C-A250-95D2BBBFA5D1}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -277,18 +261,6 @@ Global {76E096C6-72A9-4A5C-A250-95D2BBBFA5D1}.Release|x64.Build.0 = Release|Any CPU {76E096C6-72A9-4A5C-A250-95D2BBBFA5D1}.Release|x86.ActiveCfg = Release|Any CPU {76E096C6-72A9-4A5C-A250-95D2BBBFA5D1}.Release|x86.Build.0 = Release|Any CPU - {D817566C-C94F-4ADE-A36A-F67B3F644299}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D817566C-C94F-4ADE-A36A-F67B3F644299}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D817566C-C94F-4ADE-A36A-F67B3F644299}.Debug|x64.ActiveCfg = Debug|Any CPU - {D817566C-C94F-4ADE-A36A-F67B3F644299}.Debug|x64.Build.0 = Debug|Any CPU - {D817566C-C94F-4ADE-A36A-F67B3F644299}.Debug|x86.ActiveCfg = Debug|Any CPU - {D817566C-C94F-4ADE-A36A-F67B3F644299}.Debug|x86.Build.0 = Debug|Any CPU - {D817566C-C94F-4ADE-A36A-F67B3F644299}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D817566C-C94F-4ADE-A36A-F67B3F644299}.Release|Any CPU.Build.0 = Release|Any CPU - {D817566C-C94F-4ADE-A36A-F67B3F644299}.Release|x64.ActiveCfg = Release|Any CPU - {D817566C-C94F-4ADE-A36A-F67B3F644299}.Release|x64.Build.0 = Release|Any CPU - {D817566C-C94F-4ADE-A36A-F67B3F644299}.Release|x86.ActiveCfg = Release|Any CPU - {D817566C-C94F-4ADE-A36A-F67B3F644299}.Release|x86.Build.0 = Release|Any CPU {43D66007-FCAA-4F69-893B-562B0B61B8B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {43D66007-FCAA-4F69-893B-562B0B61B8B1}.Debug|Any CPU.Build.0 = Debug|Any CPU {43D66007-FCAA-4F69-893B-562B0B61B8B1}.Debug|x64.ActiveCfg = Debug|Any CPU diff --git a/SabreTools.Serialization/SabreTools.Serialization.csproj b/SabreTools.Serialization/SabreTools.Serialization.csproj index e55b7136..0e55eabf 100644 --- a/SabreTools.Serialization/SabreTools.Serialization.csproj +++ b/SabreTools.Serialization/SabreTools.Serialization.csproj @@ -41,8 +41,6 @@ - - diff --git a/publish-nix.sh b/publish-nix.sh index d6052210..43ef7555 100755 --- a/publish-nix.sh +++ b/publish-nix.sh @@ -81,7 +81,6 @@ if [ $NO_BUILD = false ]; then if [ $INCLUDE_UNPUBLISHED = true ]; then dotnet pack SabreTools.Data.Extensions/SabreTools.Data.Extensions.csproj --output $BUILD_FOLDER dotnet pack SabreTools.Data.Models/SabreTools.Data.Models.csproj --output $BUILD_FOLDER - dotnet pack SabreTools.Metadata/SabreTools.Metadata.csproj --output $BUILD_FOLDER dotnet pack SabreTools.Metadata.DatFiles/SabreTools.Metadata.DatFiles.csproj --output $BUILD_FOLDER dotnet pack SabreTools.Metadata.DatItems/SabreTools.Metadata.DatItems.csproj --output $BUILD_FOLDER dotnet pack SabreTools.Metadata.Filter/SabreTools.Metadata.Filter.csproj --output $BUILD_FOLDER diff --git a/publish-win.ps1 b/publish-win.ps1 index 681204d0..e3ef7611 100644 --- a/publish-win.ps1 +++ b/publish-win.ps1 @@ -72,7 +72,6 @@ if (!$NO_BUILD.IsPresent) { if ($INCLUDE_UNPUBLISHED.IsPresent) { dotnet pack SabreTools.Data.Extensions\SabreTools.Data.Extensions.csproj --output $BUILD_FOLDER dotnet pack SabreTools.Data.Models\SabreTools.Data.Models.csproj --output $BUILD_FOLDER - dotnet pack SabreTools.Metadata\SabreTools.Metadata.csproj --output $BUILD_FOLDER dotnet pack SabreTools.Metadata.DatFiles\SabreTools.Metadata.DatFiles.csproj --output $BUILD_FOLDER dotnet pack SabreTools.Metadata.DatItems\SabreTools.Metadata.DatItems.csproj --output $BUILD_FOLDER dotnet pack SabreTools.Metadata.Filter\SabreTools.Metadata.Filter.csproj --output $BUILD_FOLDER