diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs index 098deede..1a1b25fd 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs @@ -141,10 +141,12 @@ namespace SabreTools.Metadata.DatFiles.Test ValidatePartFeature(partFeature); // All other fields are tested separately - Rom? partRom = Array.Find(datItems, item => item is Rom rom && rom.DataAreaSpecified && rom.PartInterface is not null) as Rom; + Rom? partRom = Array.Find(datItems, item => item is Rom rom && rom.DataAreaName is not null && rom.PartInterface is not null) as Rom; Assert.NotNull(partRom); - DataArea? romDataArea = partRom.DataArea; - ValidateDataArea(romDataArea); + Assert.Equal(Data.Models.Metadata.Endianness.Big, partRom.DataAreaEndianness); + Assert.Equal("name", partRom.DataAreaName); + Assert.Equal(12345, partRom.DataAreaSize); + Assert.Equal(Data.Models.Metadata.Width.Long, partRom.DataAreaWidth); Assert.Equal("interface", partRom.PartInterface); Assert.Equal("name", partRom.PartName); @@ -157,7 +159,7 @@ namespace SabreTools.Metadata.DatFiles.Test Release? release = Array.Find(datItems, item => item is Release) as Release; ValidateRelease(release); - Rom? rom = Array.Find(datItems, item => item is Rom rom && !rom.DataAreaSpecified && rom.PartInterface is null && rom.OpenMSXMediaType is null) as Rom; + Rom? rom = Array.Find(datItems, item => item is Rom rom && rom.DataAreaName is null && rom.PartInterface is null && rom.OpenMSXMediaType is null) as Rom; ValidateRom(rom); Sample? sample = Array.Find(datItems, item => item is Sample) as Sample; @@ -1205,15 +1207,6 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.Equal("ways3", control.Ways3); } - private static void ValidateDataArea(DataArea? dataArea) - { - Assert.NotNull(dataArea); - Assert.Equal(Data.Models.Metadata.Endianness.Big, dataArea.Endianness); - Assert.Equal("name", dataArea.Name); - Assert.Equal(12345, dataArea.Size); - Assert.Equal(Data.Models.Metadata.Width.Long, dataArea.Width); - } - private static void ValidateDevice(Device? device) { Assert.NotNull(device); @@ -1299,12 +1292,6 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.True(disk.Writable); } - private static void ValidateDiskArea(DiskArea? diskArea) - { - Assert.NotNull(diskArea); - Assert.Equal("name", diskArea.Name); - } - private static void ValidateDisplay(Display? display) { Assert.NotNull(display); diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs index 0700a7fa..c5efd5ff 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs @@ -152,13 +152,6 @@ namespace SabreTools.Metadata.DatFiles.Test return item; } - private static DataArea CreateDataArea(Machine machine) - { - DataArea item = new DataArea(CreateMetadataDataArea()); - item.CopyMachineInformation(machine); - return item; - } - private static DeviceRef CreateDeviceRef(Machine machine) { DeviceRef item = new DeviceRef(CreateMetadataDeviceRef()); @@ -283,7 +276,10 @@ namespace SabreTools.Metadata.DatFiles.Test { Rom item = new Rom(CreateMetadataRom()); item.CopyMachineInformation(machine); - item.DataArea = CreateDataArea(machine); + item.DataAreaEndianness = Data.Models.Metadata.Endianness.Big; + item.DataAreaName = "name"; + item.DataAreaSize = 12345; + item.DataAreaWidth = Data.Models.Metadata.Width.Long; item.PartInterface = "interface"; item.PartName = "name"; return item; diff --git a/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs b/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs index 9c3d4c84..33be66c7 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs @@ -588,7 +588,6 @@ namespace SabreTools.Metadata.DatFiles { foreach (var dataArea in dataAreas) { - var dataAreaItem = new DataArea(dataArea, machine, source); var roms = dataArea.Rom; if (roms is null) continue; @@ -617,7 +616,10 @@ namespace SabreTools.Metadata.DatFiles continue; } - romItem.DataArea = dataAreaItem; + romItem.DataAreaEndianness = dataArea.Endianness; + romItem.DataAreaName = dataArea.Name; + romItem.DataAreaSize = dataArea.Size; + romItem.DataAreaWidth = dataArea.Width; romItem.PartInterface = item.Interface; romItem.PartName = item.Name; diff --git a/SabreTools.Metadata.DatFiles/DatFile.ToMetadata.cs b/SabreTools.Metadata.DatFiles/DatFile.ToMetadata.cs index 7c673c95..015baa45 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.ToMetadata.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.ToMetadata.cs @@ -217,15 +217,23 @@ namespace SabreTools.Metadata.DatFiles machine.Rom = [.. machine.Rom, romItem]; // Add Part and DataArea mappings - if ((rom.PartInterface is not null || rom.PartName is not null) && rom.DataArea is not null) + if ((rom.PartInterface is not null || rom.PartName is not null) + && (rom.DataAreaEndianness is not null || rom.DataAreaName is not null || rom.DataAreaSize is not null || rom.DataAreaWidth is not null)) { var partItemInternal = new Data.Models.Metadata.Part { Interface = rom.PartInterface, Name = rom.PartName, }; + var dataAreaItemInternal = new Data.Models.Metadata.DataArea + { + Endianness = rom.DataAreaEndianness, + Name = rom.DataAreaName, + Size = rom.DataAreaSize, + Width = rom.DataAreaWidth, + }; partMappings[partItemInternal] = romItem; - dataAreaMappings[partItemInternal] = (rom.DataArea.GetInternalClone(), romItem); + dataAreaMappings[partItemInternal] = (dataAreaItemInternal, romItem); } break; @@ -555,15 +563,23 @@ namespace SabreTools.Metadata.DatFiles machine.Rom = [.. machine.Rom, romItem]; // Add Part and DataArea mappings - if ((rom.PartInterface is not null || rom.PartName is not null) && rom.DataArea is not null) + if ((rom.PartInterface is not null || rom.PartName is not null) + && (rom.DataAreaEndianness is not null || rom.DataAreaName is not null || rom.DataAreaSize is not null || rom.DataAreaWidth is not null)) { var partItemInternal = new Data.Models.Metadata.Part { Interface = rom.PartInterface, Name = rom.PartName, }; + var dataAreaItemInternal = new Data.Models.Metadata.DataArea + { + Endianness = rom.DataAreaEndianness, + Name = rom.DataAreaName, + Size = rom.DataAreaSize, + Width = rom.DataAreaWidth, + }; partMappings[partItemInternal] = romItem; - dataAreaMappings[partItemInternal] = (rom.DataArea.GetInternalClone(), romItem); + dataAreaMappings[partItemInternal] = (dataAreaItemInternal, romItem); } break; diff --git a/SabreTools.Metadata.DatFiles/Formats/SabreJSON.cs b/SabreTools.Metadata.DatFiles/Formats/SabreJSON.cs index 6c35055f..c95d87b9 100644 --- a/SabreTools.Metadata.DatFiles/Formats/SabreJSON.cs +++ b/SabreTools.Metadata.DatFiles/Formats/SabreJSON.cs @@ -282,9 +282,6 @@ namespace SabreTools.Metadata.DatFiles.Formats case Data.Models.Metadata.ItemType.Control: datItem = datItemObj.ToObject(); break; - case Data.Models.Metadata.ItemType.DataArea: - datItem = datItemObj.ToObject(); - break; case Data.Models.Metadata.ItemType.Device: datItem = datItemObj.ToObject(); break; @@ -303,9 +300,6 @@ namespace SabreTools.Metadata.DatFiles.Formats case Data.Models.Metadata.ItemType.Disk: datItem = datItemObj.ToObject(); break; - case Data.Models.Metadata.ItemType.DiskArea: - datItem = datItemObj.ToObject(); - break; case Data.Models.Metadata.ItemType.Display: datItem = datItemObj.ToObject(); break; @@ -373,6 +367,12 @@ namespace SabreTools.Metadata.DatFiles.Formats datItem = datItemObj.ToObject(); break; + // Removed + case Data.Models.Metadata.ItemType.DataArea: + case Data.Models.Metadata.ItemType.DiskArea: + case Data.Models.Metadata.ItemType.Part: + break; + // TODO: Implement these? case Data.Models.Metadata.ItemType.Dump: case Data.Models.Metadata.ItemType.Video: diff --git a/SabreTools.Metadata.DatFiles/Formats/SoftwareList.cs b/SabreTools.Metadata.DatFiles/Formats/SoftwareList.cs index d5676386..d1ec2c8c 100644 --- a/SabreTools.Metadata.DatFiles/Formats/SoftwareList.cs +++ b/SabreTools.Metadata.DatFiles/Formats/SoftwareList.cs @@ -107,18 +107,10 @@ namespace SabreTools.Metadata.DatFiles.Formats switch (datItem) { case DipSwitch dipSwitch: - if (dipSwitch.PartInterface is null && dipSwitch.PartName is null) - { + if (string.IsNullOrEmpty(dipSwitch.PartName)) missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); + if (string.IsNullOrEmpty(dipSwitch.PartInterface)) missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); - } - else - { - if (string.IsNullOrEmpty(dipSwitch.PartName)) - missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); - if (string.IsNullOrEmpty(dipSwitch.PartInterface)) - missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); - } if (string.IsNullOrEmpty(dipSwitch.Name)) missingFields.Add(nameof(Data.Models.Metadata.DipSwitch.Name)); @@ -138,18 +130,10 @@ namespace SabreTools.Metadata.DatFiles.Formats break; case Disk disk: - if (disk.PartInterface is null && disk.PartName is null) - { + if (string.IsNullOrEmpty(disk.PartName)) missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); + if (string.IsNullOrEmpty(disk.PartInterface)) missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); - } - else - { - if (string.IsNullOrEmpty(disk.PartName)) - missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); - if (string.IsNullOrEmpty(disk.PartInterface)) - missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); - } if (disk.DiskAreaName is null) missingFields.Add(nameof(Data.Models.Metadata.DiskArea.Name)); @@ -164,31 +148,15 @@ namespace SabreTools.Metadata.DatFiles.Formats break; case Rom rom: - if (rom.PartInterface is null && rom.PartName is null) - { + if (string.IsNullOrEmpty(rom.PartName)) missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); + if (string.IsNullOrEmpty(rom.PartInterface)) missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); - } - else - { - if (string.IsNullOrEmpty(rom.PartName)) - missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); - if (string.IsNullOrEmpty(rom.PartInterface)) - missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); - } - if (!rom.DataAreaSpecified) - { + if (string.IsNullOrEmpty(rom.DataAreaName)) missingFields.Add(nameof(Data.Models.Metadata.DataArea.Name)); + if (rom.DataAreaSize is null) missingFields.Add(nameof(Data.Models.Metadata.DataArea.Size)); - } - else - { - 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; diff --git a/SabreTools.Metadata.DatItems.Test/Formats/DiskTests.cs b/SabreTools.Metadata.DatItems.Test/Formats/DiskTests.cs index b8cbed3d..9886ef0f 100644 --- a/SabreTools.Metadata.DatItems.Test/Formats/DiskTests.cs +++ b/SabreTools.Metadata.DatItems.Test/Formats/DiskTests.cs @@ -34,6 +34,8 @@ namespace SabreTools.Metadata.DatItems.Formats.Test Rom actual = disk.ConvertToRom(); + Assert.Equal(Data.Models.Metadata.Endianness.Little, actual.DataAreaEndianness); + Assert.Equal("name", actual.DataAreaName); Assert.Equal(DupeType.All | DupeType.External, actual.DupeType); Assert.Equal(HashType.MD5.ZeroString, actual.MD5); Assert.Equal("merge", actual.Merge); @@ -46,10 +48,6 @@ namespace SabreTools.Metadata.DatItems.Formats.Test Assert.Equal(HashType.SHA1.ZeroString, actual.SHA1); Assert.Equal(Data.Models.Metadata.ItemStatus.Good, actual.Status); - DataArea? actualDataArea = actual.DataArea; - Assert.NotNull(actualDataArea); - Assert.Equal("name", actualDataArea.Name); - Machine? actualMachine = actual.Machine; Assert.NotNull(actualMachine); Assert.Equal("name", actualMachine.Name); diff --git a/SabreTools.Metadata.DatItems/DatItem.cs b/SabreTools.Metadata.DatItems/DatItem.cs index f25d2276..ac3834f9 100644 --- a/SabreTools.Metadata.DatItems/DatItem.cs +++ b/SabreTools.Metadata.DatItems/DatItem.cs @@ -20,7 +20,6 @@ namespace SabreTools.Metadata.DatItems [XmlInclude(typeof(ConfLocation))] [XmlInclude(typeof(ConfSetting))] [XmlInclude(typeof(Control))] - [XmlInclude(typeof(DataArea))] [XmlInclude(typeof(Device))] [XmlInclude(typeof(DeviceRef))] [XmlInclude(typeof(DipLocation))] diff --git a/SabreTools.Metadata.DatItems/Formats/DataArea.cs b/SabreTools.Metadata.DatItems/Formats/DataArea.cs deleted file mode 100644 index 79c4a6fc..00000000 --- a/SabreTools.Metadata.DatItems/Formats/DataArea.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System.Xml.Serialization; -using Newtonsoft.Json; - -namespace SabreTools.Metadata.DatItems.Formats -{ - /// - /// SoftwareList dataarea information - /// - /// One DataArea can contain multiple Rom items - [JsonObject("dataarea"), XmlRoot("dataarea")] - public sealed class DataArea : DatItem - { - #region Properties - - public Data.Models.Metadata.Endianness? Endianness - { - get => _internal.Endianness; - set => _internal.Endianness = value; - } - - /// /> - public override Data.Models.Metadata.ItemType ItemType - => Data.Models.Metadata.ItemType.DataArea; - - public string? Name - { - get => _internal.Name; - set => _internal.Name = value; - } - - public long? Size - { - get => _internal.Size; - set => _internal.Size = value; - } - - public Data.Models.Metadata.Width? Width - { - get => _internal.Width; - set => _internal.Width = value; - } - - #endregion - - #region Constructors - - public DataArea() : base() { } - - public DataArea(Data.Models.Metadata.DataArea item) - { - _internal = item.Clone() as Data.Models.Metadata.DataArea ?? new(); - - // Clear all lists - _internal.Rom = null; - } - - public DataArea(Data.Models.Metadata.DataArea item, Machine machine, Source source) : this(item) - { - 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(GetInternalClone()); - - /// - public override Data.Models.Metadata.DataArea GetInternalClone() - => _internal.Clone() as Data.Models.Metadata.DataArea ?? 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 DataArea otherDataArea) - return _internal.Equals(otherDataArea._internal); - - // Everything else fails - return false; - } - - #endregion - } -} diff --git a/SabreTools.Metadata.DatItems/Formats/Disk.cs b/SabreTools.Metadata.DatItems/Formats/Disk.cs index cb22780f..c59b3192 100644 --- a/SabreTools.Metadata.DatItems/Formats/Disk.cs +++ b/SabreTools.Metadata.DatItems/Formats/Disk.cs @@ -144,8 +144,8 @@ namespace SabreTools.Metadata.DatItems.Formats // Create a DataArea if there was an existing DiskArea if (DiskAreaName is not null) { - var dataArea = new DataArea { Name = DiskAreaName }; - rom.DataArea = dataArea; + rom.DataAreaEndianness = Endianness.Little; + rom.DataAreaName = DiskAreaName; } rom.DupeType = DupeType; diff --git a/SabreTools.Metadata.DatItems/Formats/DiskArea.cs b/SabreTools.Metadata.DatItems/Formats/DiskArea.cs deleted file mode 100644 index dd1b6b01..00000000 --- a/SabreTools.Metadata.DatItems/Formats/DiskArea.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System.Xml.Serialization; -using Newtonsoft.Json; - -namespace SabreTools.Metadata.DatItems.Formats -{ - /// - /// SoftwareList diskarea information - /// - /// One DiskArea can contain multiple Disk items - [JsonObject("diskarea"), XmlRoot("diskarea")] - public sealed class DiskArea : DatItem - { - #region Properties - - /// /> - public override Data.Models.Metadata.ItemType ItemType - => Data.Models.Metadata.ItemType.DiskArea; - - public string? Name - { - get => _internal.Name; - set => _internal.Name = value; - } - - #endregion - - #region Constructors - - public DiskArea() : base() { } - - public DiskArea(Data.Models.Metadata.DiskArea item) : base(item) - { - _internal = item.Clone() as Data.Models.Metadata.DiskArea ?? new(); - - // Clear all lists - _internal.Disk = null; - } - - public DiskArea(Data.Models.Metadata.DiskArea item, Machine machine, Source source) : this(item) - { - 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(GetInternalClone()); - - /// - public override Data.Models.Metadata.DiskArea GetInternalClone() - => _internal.Clone() as Data.Models.Metadata.DiskArea ?? 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 DiskArea otherDiskArea) - return _internal.Equals(otherDiskArea._internal); - - // Everything else fails - return false; - } - - #endregion - } -} diff --git a/SabreTools.Metadata.DatItems/Formats/Rom.cs b/SabreTools.Metadata.DatItems/Formats/Rom.cs index b15cbf81..04fc9857 100644 --- a/SabreTools.Metadata.DatItems/Formats/Rom.cs +++ b/SabreTools.Metadata.DatItems/Formats/Rom.cs @@ -2,7 +2,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; using SabreTools.Data.Extensions; using SabreTools.Data.Models.Metadata; -using SabreTools.Metadata.Filter; using SabreTools.Text.Extensions; namespace SabreTools.Metadata.DatItems.Formats @@ -117,20 +116,13 @@ namespace SabreTools.Metadata.DatItems.Formats set => _internal.Creator = value; } - public DataArea? DataArea { get; set; } + public Endianness? DataAreaEndianness { get; set; } - [JsonIgnore] - public bool DataAreaSpecified - { - get - { - 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? DataAreaName { get; set; } + + public long? DataAreaSize { get; set; } + + public Width? DataAreaWidth { get; set; } public string? Date { @@ -933,31 +925,6 @@ namespace SabreTools.Metadata.DatItems.Formats #endregion - #region Manipulation - - /// - public override bool PassesFilter(FilterRunner filterRunner) - { - if (Machine is not null && !Machine.PassesFilter(filterRunner)) - return false; - - // TODO: DataArea - // TODO: Part - - return filterRunner.Run(_internal); - } - - /// - public override bool PassesFilterDB(FilterRunner filterRunner) - { - // TODO: DataArea - // TODO: Part - - return filterRunner.Run(_internal); - } - - #endregion - #region Sorting and Merging ///