diff --git a/SabreTools.Data.Extensions/MetadataExtensions.cs b/SabreTools.Data.Extensions/MetadataExtensions.cs index 89b1116e..77d4714f 100644 --- a/SabreTools.Data.Extensions/MetadataExtensions.cs +++ b/SabreTools.Data.Extensions/MetadataExtensions.cs @@ -369,6 +369,10 @@ namespace SabreTools.Data.Extensions cloneSoftwareList.Status = selfSoftwareList.Status; cloneSoftwareList.Tag = selfSoftwareList.Tag; } + else if (self is Sound selfSound && clone is Sound cloneSound) + { + cloneSound.Channels = selfSound.Channels; + } else if (self is Video selfVideo && clone is Video cloneVideo) { cloneVideo.Screen = selfVideo.Screen; 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/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/Metadata/Sound.cs b/SabreTools.Data.Models/Metadata/Sound.cs index 480d1537..2d14fee5 100644 --- a/SabreTools.Data.Models/Metadata/Sound.cs +++ b/SabreTools.Data.Models/Metadata/Sound.cs @@ -6,10 +6,9 @@ namespace SabreTools.Data.Models.Metadata [JsonObject("sound"), XmlRoot("sound")] public class Sound : DatItem { - #region Keys + #region Properties - /// long - public const string ChannelsKey = "channels"; + public long? Channels { get; set; } #endregion diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs index 7bbcd309..947c6f36 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs @@ -961,7 +961,7 @@ namespace SabreTools.Metadata.DatFiles.Test { return new Data.Models.Metadata.Sound { - [Data.Models.Metadata.Sound.ChannelsKey] = 12345L, + Channels = 12345L, }; } @@ -1635,7 +1635,7 @@ namespace SabreTools.Metadata.DatFiles.Test private static void ValidateSound(Sound? sound) { Assert.NotNull(sound); - Assert.Equal(12345L, sound.ReadLong(Data.Models.Metadata.Sound.ChannelsKey)); + Assert.Equal(12345L, sound.Channels); } // TODO: Figure out why so many fields are omitted diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs index 9345937e..d12014b2 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs @@ -1200,7 +1200,7 @@ namespace SabreTools.Metadata.DatFiles.Test private static void ValidateMetadataSound(Data.Models.Metadata.Sound? sound) { Assert.NotNull(sound); - Assert.Equal(12345, sound.ReadLong(Data.Models.Metadata.Sound.ChannelsKey)); + Assert.Equal(12345, sound.Channels); } private static void ValidateMetadataSourceDetails(Data.Models.Metadata.SourceDetails? sourceDetails) diff --git a/SabreTools.Metadata.DatFiles.Test/FormatsTests.cs b/SabreTools.Metadata.DatFiles.Test/FormatsTests.cs index 35439552..5e0d3f74 100644 --- a/SabreTools.Metadata.DatFiles.Test/FormatsTests.cs +++ b/SabreTools.Metadata.DatFiles.Test/FormatsTests.cs @@ -215,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), ])); } @@ -894,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), ])); } diff --git a/SabreTools.Metadata.DatFiles/Formats/ClrMamePro.cs b/SabreTools.Metadata.DatFiles/Formats/ClrMamePro.cs index e4f16d58..c11b02e0 100644 --- a/SabreTools.Metadata.DatFiles/Formats/ClrMamePro.cs +++ b/SabreTools.Metadata.DatFiles/Formats/ClrMamePro.cs @@ -147,8 +147,8 @@ namespace SabreTools.Metadata.DatFiles.Formats 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: diff --git a/SabreTools.Metadata.DatFiles/Formats/Listxml.cs b/SabreTools.Metadata.DatFiles/Formats/Listxml.cs index fbdc657a..27e985fe 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Listxml.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Listxml.cs @@ -315,8 +315,8 @@ namespace SabreTools.Metadata.DatFiles.Formats 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: diff --git a/SabreTools.Metadata.DatItems/Formats/Sound.cs b/SabreTools.Metadata.DatItems/Formats/Sound.cs index e726ff69..f5db3d17 100644 --- a/SabreTools.Metadata.DatItems/Formats/Sound.cs +++ b/SabreTools.Metadata.DatItems/Formats/Sound.cs @@ -12,6 +12,12 @@ namespace SabreTools.Metadata.DatItems.Formats { #region Fields + public long? Channels + { + get => (_internal as Data.Models.Metadata.Sound)?.Channels; + set => (_internal as Data.Models.Metadata.Sound)?.Channels = value; + } + /// /> public override Data.Models.Metadata.ItemType ItemType => Data.Models.Metadata.ItemType.Sound; @@ -22,13 +28,7 @@ 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) { diff --git a/SabreTools.Metadata.Filter/FilterObject.cs b/SabreTools.Metadata.Filter/FilterObject.cs index e3ab5156..aa13aa9a 100644 --- a/SabreTools.Metadata.Filter/FilterObject.cs +++ b/SabreTools.Metadata.Filter/FilterObject.cs @@ -739,6 +739,10 @@ namespace SabreTools.Metadata.Filter checkValue = item.Tag; return true; + case Sound item when fieldName == "channels": + checkValue = item.Channels?.ToString(); + return true; + case Video item when fieldName == "screen": checkValue = item.Screen?.AsStringValue(); return true; diff --git a/SabreTools.Serialization.CrossModel.Test/ClrMameProTests.cs b/SabreTools.Serialization.CrossModel.Test/ClrMameProTests.cs index 8660b78e..14ff0570 100644 --- a/SabreTools.Serialization.CrossModel.Test/ClrMameProTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/ClrMameProTests.cs @@ -175,7 +175,7 @@ namespace SabreTools.Serialization.CrossModel.Test var sound = new Data.Models.ClrMamePro.Sound { - Channels = "XXXXXX", + Channels = 12345L, }; var input = new Data.Models.ClrMamePro.Input @@ -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(12345L, sound.Channels); } /// diff --git a/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs b/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs index 3783410d..f8d265c8 100644 --- a/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs @@ -149,7 +149,7 @@ namespace SabreTools.Serialization.CrossModel.Test var sound = new Data.Models.Listxml.Sound { - Channels = "XXXXXX", + Channels = 12345L, }; var control = new Data.Models.Listxml.Control @@ -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(12345L, sound.Channels); } /// diff --git a/SabreTools.Serialization.CrossModel.Test/M1Tests.cs b/SabreTools.Serialization.CrossModel.Test/M1Tests.cs index 4bd22fb2..d3b3bbda 100644 --- a/SabreTools.Serialization.CrossModel.Test/M1Tests.cs +++ b/SabreTools.Serialization.CrossModel.Test/M1Tests.cs @@ -145,7 +145,7 @@ namespace SabreTools.Serialization.CrossModel.Test var sound = new Data.Models.Listxml.Sound { - Channels = "XXXXXX", + Channels = 12345L, }; var control = new Data.Models.Listxml.Control @@ -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(12345L, sound.Channels); } /// diff --git a/SabreTools.Serialization.CrossModel.Test/MessTests.cs b/SabreTools.Serialization.CrossModel.Test/MessTests.cs index e0f8517d..d8107b27 100644 --- a/SabreTools.Serialization.CrossModel.Test/MessTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/MessTests.cs @@ -145,7 +145,7 @@ namespace SabreTools.Serialization.CrossModel.Test var sound = new Data.Models.Listxml.Sound { - Channels = "XXXXXX", + Channels = 12345L, }; var control = new Data.Models.Listxml.Control @@ -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(12345L, sound.Channels); } /// diff --git a/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs b/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs index 24a7ed8f..abc250fb 100644 --- a/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs @@ -328,7 +328,7 @@ namespace SabreTools.Serialization.CrossModel { var sound = new Sound { - Channels = item.ReadString(Data.Models.Metadata.Sound.ChannelsKey), + Channels = item.Channels, }; return sound; } diff --git a/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs b/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs index 3e3a1b30..99b281ce 100644 --- a/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs @@ -341,7 +341,7 @@ namespace SabreTools.Serialization.CrossModel { var sound = new Data.Models.Metadata.Sound { - [Data.Models.Metadata.Sound.ChannelsKey] = item.Channels, + Channels = item.Channels, }; return sound; } diff --git a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs index e36a8a08..15058bcd 100644 --- a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs @@ -646,7 +646,7 @@ namespace SabreTools.Serialization.CrossModel { var sound = new Sound { - Channels = item.ReadString(Data.Models.Metadata.Sound.ChannelsKey), + Channels = item.Channels, }; return sound; } diff --git a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs index 6cd096b6..c4687ff2 100644 --- a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs @@ -687,7 +687,7 @@ namespace SabreTools.Serialization.CrossModel { var sound = new Data.Models.Metadata.Sound { - [Data.Models.Metadata.Sound.ChannelsKey] = item.Channels, + Channels = item.Channels, }; return sound; } diff --git a/SabreTools.Serialization.Readers.Test/ClrMameProTests.cs b/SabreTools.Serialization.Readers.Test/ClrMameProTests.cs index 731bfba5..afe24853 100644 --- a/SabreTools.Serialization.Readers.Test/ClrMameProTests.cs +++ b/SabreTools.Serialization.Readers.Test/ClrMameProTests.cs @@ -292,7 +292,7 @@ namespace SabreTools.Serialization.Readers.Test var sound = new Data.Models.ClrMamePro.Sound { - Channels = "XXXXXX", + Channels = 12345L, }; var input = new Data.Models.ClrMamePro.Input @@ -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(12345L, sound.Channels); } /// diff --git a/SabreTools.Serialization.Readers.Test/ListxmlTests.cs b/SabreTools.Serialization.Readers.Test/ListxmlTests.cs index c317c05c..de443527 100644 --- a/SabreTools.Serialization.Readers.Test/ListxmlTests.cs +++ b/SabreTools.Serialization.Readers.Test/ListxmlTests.cs @@ -216,7 +216,7 @@ namespace SabreTools.Serialization.Readers.Test var sound = new Data.Models.Listxml.Sound { - Channels = "XXXXXX", + Channels = 12345L, }; var control = new Data.Models.Listxml.Control @@ -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(12345L, sound.Channels); } /// diff --git a/SabreTools.Serialization.Readers.Test/M1Tests.cs b/SabreTools.Serialization.Readers.Test/M1Tests.cs index 21c4a6eb..64c85fea 100644 --- a/SabreTools.Serialization.Readers.Test/M1Tests.cs +++ b/SabreTools.Serialization.Readers.Test/M1Tests.cs @@ -212,7 +212,7 @@ namespace SabreTools.Serialization.Readers.Test var sound = new Data.Models.Listxml.Sound { - Channels = "XXXXXX", + Channels = 12345L, }; var control = new Data.Models.Listxml.Control @@ -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(12345L, sound.Channels); } /// diff --git a/SabreTools.Serialization.Readers.Test/MessTests.cs b/SabreTools.Serialization.Readers.Test/MessTests.cs index 6e6d0895..5570a6b8 100644 --- a/SabreTools.Serialization.Readers.Test/MessTests.cs +++ b/SabreTools.Serialization.Readers.Test/MessTests.cs @@ -212,7 +212,7 @@ namespace SabreTools.Serialization.Readers.Test var sound = new Data.Models.Listxml.Sound { - Channels = "XXXXXX", + Channels = 12345L, }; var control = new Data.Models.Listxml.Control @@ -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(12345L, sound.Channels); } /// diff --git a/SabreTools.Serialization.Readers/ClrMamePro.cs b/SabreTools.Serialization.Readers/ClrMamePro.cs index 0ce08e58..2761c576 100644 --- a/SabreTools.Serialization.Readers/ClrMamePro.cs +++ b/SabreTools.Serialization.Readers/ClrMamePro.cs @@ -5,6 +5,7 @@ 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 @@ -847,7 +848,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 diff --git a/SabreTools.Serialization.Readers/Listxml.cs b/SabreTools.Serialization.Readers/Listxml.cs index 9e38ba06..aaa70299 100644 --- a/SabreTools.Serialization.Readers/Listxml.cs +++ b/SabreTools.Serialization.Readers/Listxml.cs @@ -4,6 +4,7 @@ using System.IO; using System.Xml; using SabreTools.Data.Extensions; using SabreTools.Data.Models.Listxml; +using SabreTools.Text.Extensions; namespace SabreTools.Serialization.Readers { @@ -1160,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; } diff --git a/SabreTools.Serialization.Readers/M1.cs b/SabreTools.Serialization.Readers/M1.cs index 154c9aab..5a2b94df 100644 --- a/SabreTools.Serialization.Readers/M1.cs +++ b/SabreTools.Serialization.Readers/M1.cs @@ -4,6 +4,7 @@ using System.IO; using System.Xml; using SabreTools.Data.Extensions; using SabreTools.Data.Models.Listxml; +using SabreTools.Text.Extensions; namespace SabreTools.Serialization.Readers { @@ -1158,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; } diff --git a/SabreTools.Serialization.Readers/Mess.cs b/SabreTools.Serialization.Readers/Mess.cs index a39567c4..534a9717 100644 --- a/SabreTools.Serialization.Readers/Mess.cs +++ b/SabreTools.Serialization.Readers/Mess.cs @@ -4,6 +4,7 @@ using System.IO; using System.Xml; using SabreTools.Data.Extensions; using SabreTools.Data.Models.Listxml; +using SabreTools.Text.Extensions; namespace SabreTools.Serialization.Readers { @@ -1158,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; } diff --git a/SabreTools.Serialization.Writers/ClrMamePro.cs b/SabreTools.Serialization.Writers/ClrMamePro.cs index f56bddbc..cd4f9df1 100644 --- a/SabreTools.Serialization.Writers/ClrMamePro.cs +++ b/SabreTools.Serialization.Writers/ClrMamePro.cs @@ -435,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 } diff --git a/SabreTools.Serialization.Writers/Listxml.cs b/SabreTools.Serialization.Writers/Listxml.cs index cc458cf6..edb20f88 100644 --- a/SabreTools.Serialization.Writers/Listxml.cs +++ b/SabreTools.Serialization.Writers/Listxml.cs @@ -823,7 +823,7 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("sound"); - writer.WriteRequiredAttributeString("channels", obj.Channels); + writer.WriteRequiredAttributeString("channels", obj.Channels?.ToString()); writer.WriteEndElement(); } diff --git a/SabreTools.Serialization.Writers/M1.cs b/SabreTools.Serialization.Writers/M1.cs index 7f4137e6..59599972 100644 --- a/SabreTools.Serialization.Writers/M1.cs +++ b/SabreTools.Serialization.Writers/M1.cs @@ -821,7 +821,7 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("sound"); - writer.WriteRequiredAttributeString("channels", obj.Channels); + writer.WriteRequiredAttributeString("channels", obj.Channels?.ToString()); writer.WriteEndElement(); } diff --git a/SabreTools.Serialization.Writers/Mess.cs b/SabreTools.Serialization.Writers/Mess.cs index c74c693a..c705d657 100644 --- a/SabreTools.Serialization.Writers/Mess.cs +++ b/SabreTools.Serialization.Writers/Mess.cs @@ -821,7 +821,7 @@ namespace SabreTools.Serialization.Writers { writer.WriteStartElement("sound"); - writer.WriteRequiredAttributeString("channels", obj.Channels); + writer.WriteRequiredAttributeString("channels", obj.Channels?.ToString()); writer.WriteEndElement(); }