diff --git a/SabreTools.Data.Extensions/MetadataExtensions.cs b/SabreTools.Data.Extensions/MetadataExtensions.cs index f5fb30cd..d4bfdab6 100644 --- a/SabreTools.Data.Extensions/MetadataExtensions.cs +++ b/SabreTools.Data.Extensions/MetadataExtensions.cs @@ -147,6 +147,8 @@ namespace SabreTools.Data.Extensions return adjuster.Clone() as Adjuster; else if (self is Analog analog) return analog.Clone() as Analog; + else if (self is Archive archive) + return archive.Clone() as Archive; else if (self is BiosSet biosSet) return biosSet.Clone() as BiosSet; else if (self is Blank blank) @@ -224,11 +226,7 @@ namespace SabreTools.Data.Extensions return null; // Handle individual type properties - if (self is Archive selfArchive && clone is Archive cloneArchive) - { - cloneArchive.Description = selfArchive.Description; - } - else if (self is DataArea selfDataArea && clone is DataArea cloneDataArea) + if (self is DataArea selfDataArea && clone is DataArea cloneDataArea) { cloneDataArea.Endianness = selfDataArea.Endianness; cloneDataArea.Size = selfDataArea.Size; diff --git a/SabreTools.Data.Models/Metadata/Archive.cs b/SabreTools.Data.Models/Metadata/Archive.cs index 35277983..d46641c2 100644 --- a/SabreTools.Data.Models/Metadata/Archive.cs +++ b/SabreTools.Data.Models/Metadata/Archive.cs @@ -1,117 +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 Properties + /// No-Intro DB extension + public string? Additional { get; set; } + + /// (0|1) "0", No-Intro DB extension + public bool? Adult { get; set; } + + /// (0|1) "0", No-Intro DB extension + public bool? Alt { get; set; } + + /// (0|1) "0", No-Intro DB extension + public bool? Bios { get; set; } + + /// No-Intro DB extension + public string? Categories { get; set; } + + /// No-Intro DB extension + public string? CloneTag { get; set; } + + /// (0|1) "0", No-Intro DB extension + public bool? Complete { get; set; } + + /// (0|1) "0", No-Intro DB extension + public bool? Dat { get; set; } + + /// No-Intro DB extension + public string? DatterNote { get; set; } + /// No-Intro DB extension public string? Description { get; set; } + /// No-Intro DB extension + public string? DevStatus { get; set; } + + /// No-Intro DB extension + public string? GameId1 { get; set; } + + /// No-Intro DB extension + public string? GameId2 { get; set; } + + /// No-Intro DB extension + public string? LangChecked { get; set; } + + /// No-Intro DB extension + public string? Languages { get; set; } + + /// (0|1) "0", No-Intro DB extension + public bool? Licensed { get; set; } + + /// (0|1) "0", No-Intro DB extension + public bool? Listed { get; set; } + + /// No-Intro DB extension + public string? MergeOf { get; set; } + + /// No-Intro DB extension + public string? MergeName { get; set; } + public string? Name { get; set; } - #endregion + /// No-Intro DB extension + public string? NameAlt { get; set; } - #region Keys + /// No-Intro DB extension + public string? Number { get; set; } - /// string, No-Intro DB extension - public const string NumberKey = "number"; + /// (0|1) "0", No-Intro DB extension + public bool? Physical { get; set; } - /// string, No-Intro DB extension - public const string CloneKey = "clone"; + /// (0|1) "0", No-Intro DB extension + public bool? Pirate { get; set; } - /// string, No-Intro DB extension - public const string RegParentKey = "regparent"; + /// (0|1) "0", No-Intro DB extension + public bool? Private { get; set; } - /// string, No-Intro DB extension - public const string MergeOfKey = "mergeof"; + /// No-Intro DB extension + public string? Region { get; set; } - /// string, No-Intro DB extension - public const string MergeNameKey = "mergename"; + /// No-Intro DB extension + public string? RegParent { get; set; } - /// string, No-Intro DB extension - public const string NameAltKey = "name_alt"; + /// (0|1) "0", No-Intro DB extension + public bool? ShowLang { get; set; } - /// string, No-Intro DB extension - public const string RegionKey = "region"; + /// No-Intro DB extension + public string? Special1 { get; set; } - /// string, No-Intro DB extension - public const string LanguagesKey = "languages"; + /// No-Intro DB extension + public string? Special2 { get; set; } - /// byte, No-Intro DB extension - public const string ShowLangKey = "showlang"; + /// No-Intro DB extension + public string? StickyNote { get; set; } - /// string, No-Intro DB extension - public const string LangCheckedKey = "langchecked"; + /// No-Intro DB extension + public string? Version1 { get; set; } - /// string, No-Intro DB extension - public const string Version1Key = "version1"; - - /// string, No-Intro DB extension - public const string Version2Key = "version2"; - - /// string, No-Intro DB extension - public const string DevStatusKey = "devstatus"; - - /// string, No-Intro DB extension - public const string AdditionalKey = "additional"; - - /// string, No-Intro DB extension - public const string Special1Key = "special1"; - - /// string, No-Intro DB extension - public const string Special2Key = "special2"; - - /// byte, No-Intro DB extension - public const string AltKey = "alt"; - - /// string, No-Intro DB extension - public const string GameId1Key = "gameid1"; - - /// string, No-Intro DB extension - public const string GameId2Key = "gameid2"; - - /// byte, No-Intro DB extension - public const string BiosKey = "bios"; - - /// byte, No-Intro DB extension - public const string LicensedKey = "licensed"; - - /// byte, No-Intro DB extension - public const string PirateKey = "pirate"; - - /// byte, No-Intro DB extension - public const string PhysicalKey = "physical"; - - /// byte, No-Intro DB extension - public const string CompleteKey = "complete"; - - /// byte, No-Intro DB extension - public const string AdultKey = "adult"; - - /// byte, No-Intro DB extension - public const string DatKey = "dat"; - - /// byte, No-Intro DB extension - public const string ListedKey = "listed"; - - /// byte, No-Intro DB extension - public const string PrivateKey = "private"; - - /// string, No-Intro DB extension - public const string StickyNoteKey = "stickynote"; - - /// string, No-Intro DB extension - public const string DatterNoteKey = "datternote"; - - /// string, No-Intro DB extension - public const string CategoriesKey = "categories"; + /// No-Intro DB extension + public string? Version2 { get; set; } #endregion 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.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs index ce8685b3..f71b1e8a 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs @@ -352,39 +352,39 @@ namespace SabreTools.Metadata.DatFiles.Test { return new Data.Models.Metadata.Archive { - [Data.Models.Metadata.Archive.NumberKey] = "number", - [Data.Models.Metadata.Archive.CloneKey] = "clone", - [Data.Models.Metadata.Archive.RegParentKey] = "regparent", - [Data.Models.Metadata.Archive.MergeOfKey] = "mergeof", - [Data.Models.Metadata.Archive.MergeNameKey] = "mergename", + Number = "number", + CloneTag = "clone", + RegParent = "regparent", + MergeOf = "mergeof", + MergeName = "mergename", Name = "name", - [Data.Models.Metadata.Archive.NameAltKey] = "name_alt", - [Data.Models.Metadata.Archive.RegionKey] = "region", - [Data.Models.Metadata.Archive.LanguagesKey] = "languages", - [Data.Models.Metadata.Archive.ShowLangKey] = "showlang", - [Data.Models.Metadata.Archive.LangCheckedKey] = "langchecked", - [Data.Models.Metadata.Archive.Version1Key] = "version1", - [Data.Models.Metadata.Archive.Version2Key] = "version2", - [Data.Models.Metadata.Archive.DevStatusKey] = "devstatus", - [Data.Models.Metadata.Archive.AdditionalKey] = "additional", - [Data.Models.Metadata.Archive.Special1Key] = "special1", - [Data.Models.Metadata.Archive.Special2Key] = "special2", - [Data.Models.Metadata.Archive.AltKey] = "alt", - [Data.Models.Metadata.Archive.GameId1Key] = "gameid1", - [Data.Models.Metadata.Archive.GameId2Key] = "gameid2", + NameAlt = "name_alt", + Region = "region", + Languages = "languages", + ShowLang = true, + LangChecked = "langchecked", + Version1 = "version1", + Version2 = "version2", + DevStatus = "devstatus", + Additional = "additional", + Special1 = "special1", + Special2 = "special2", + Alt = true, + GameId1 = "gameid1", + GameId2 = "gameid2", Description = "description", - [Data.Models.Metadata.Archive.BiosKey] = "bios", - [Data.Models.Metadata.Archive.LicensedKey] = "licensed", - [Data.Models.Metadata.Archive.PirateKey] = "pirate", - [Data.Models.Metadata.Archive.PhysicalKey] = "physical", - [Data.Models.Metadata.Archive.CompleteKey] = "complete", - [Data.Models.Metadata.Archive.AdultKey] = "adult", - [Data.Models.Metadata.Archive.DatKey] = "dat", - [Data.Models.Metadata.Archive.ListedKey] = "listed", - [Data.Models.Metadata.Archive.PrivateKey] = "private", - [Data.Models.Metadata.Archive.StickyNoteKey] = "stickynote", - [Data.Models.Metadata.Archive.DatterNoteKey] = "datternote", - [Data.Models.Metadata.Archive.CategoriesKey] = "categories", + Bios = true, + Licensed = true, + Pirate = true, + Physical = true, + Complete = true, + Adult = true, + Dat = true, + Listed = true, + Private = true, + StickyNote = "stickynote", + DatterNote = "datternote", + Categories = "categories", }; } diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs index b8899df2..22f60775 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs @@ -635,39 +635,39 @@ namespace SabreTools.Metadata.DatFiles.Test private static void ValidateMetadataArchive(Data.Models.Metadata.Archive? archive) { Assert.NotNull(archive); - Assert.Equal("number", archive.ReadString(Data.Models.Metadata.Archive.NumberKey)); - Assert.Equal("clone", archive.ReadString(Data.Models.Metadata.Archive.CloneKey)); - Assert.Equal("regparent", archive.ReadString(Data.Models.Metadata.Archive.RegParentKey)); - Assert.Equal("mergeof", archive.ReadString(Data.Models.Metadata.Archive.MergeOfKey)); - Assert.Equal("mergename", archive.ReadString(Data.Models.Metadata.Archive.MergeNameKey)); + Assert.Equal("number", archive.Number); + Assert.Equal("clone", archive.CloneTag); + Assert.Equal("regparent", archive.RegParent); + Assert.Equal("mergeof", archive.MergeOf); + Assert.Equal("mergename", archive.MergeName); Assert.Equal("name", archive.Name); - Assert.Equal("name_alt", archive.ReadString(Data.Models.Metadata.Archive.NameAltKey)); - Assert.Equal("region", archive.ReadString(Data.Models.Metadata.Archive.RegionKey)); - Assert.Equal("languages", archive.ReadString(Data.Models.Metadata.Archive.LanguagesKey)); - Assert.Equal("showlang", archive.ReadString(Data.Models.Metadata.Archive.ShowLangKey)); - Assert.Equal("langchecked", archive.ReadString(Data.Models.Metadata.Archive.LangCheckedKey)); - Assert.Equal("version1", archive.ReadString(Data.Models.Metadata.Archive.Version1Key)); - Assert.Equal("version2", archive.ReadString(Data.Models.Metadata.Archive.Version2Key)); - Assert.Equal("devstatus", archive.ReadString(Data.Models.Metadata.Archive.DevStatusKey)); - Assert.Equal("additional", archive.ReadString(Data.Models.Metadata.Archive.AdditionalKey)); - Assert.Equal("special1", archive.ReadString(Data.Models.Metadata.Archive.Special1Key)); - Assert.Equal("special2", archive.ReadString(Data.Models.Metadata.Archive.Special2Key)); - Assert.Equal("alt", archive.ReadString(Data.Models.Metadata.Archive.AltKey)); - Assert.Equal("gameid1", archive.ReadString(Data.Models.Metadata.Archive.GameId1Key)); - Assert.Equal("gameid2", archive.ReadString(Data.Models.Metadata.Archive.GameId2Key)); + Assert.Equal("name_alt", archive.NameAlt); + Assert.Equal("region", archive.Region); + Assert.Equal("languages", archive.Languages); + Assert.Equal(true, archive.ShowLang); + Assert.Equal("langchecked", archive.LangChecked); + Assert.Equal("version1", archive.Version1); + Assert.Equal("version2", archive.Version2); + Assert.Equal("devstatus", archive.DevStatus); + Assert.Equal("additional", archive.Additional); + Assert.Equal("special1", archive.Special1); + Assert.Equal("special2", archive.Special2); + Assert.Equal(true, archive.Alt); + Assert.Equal("gameid1", archive.GameId1); + Assert.Equal("gameid2", archive.GameId2); Assert.Equal("description", archive.Description); - Assert.Equal("bios", archive.ReadString(Data.Models.Metadata.Archive.BiosKey)); - Assert.Equal("licensed", archive.ReadString(Data.Models.Metadata.Archive.LicensedKey)); - Assert.Equal("pirate", archive.ReadString(Data.Models.Metadata.Archive.PirateKey)); - Assert.Equal("physical", archive.ReadString(Data.Models.Metadata.Archive.PhysicalKey)); - Assert.Equal("complete", archive.ReadString(Data.Models.Metadata.Archive.CompleteKey)); - Assert.Equal("adult", archive.ReadString(Data.Models.Metadata.Archive.AdultKey)); - Assert.Equal("dat", archive.ReadString(Data.Models.Metadata.Archive.DatKey)); - Assert.Equal("listed", archive.ReadString(Data.Models.Metadata.Archive.ListedKey)); - Assert.Equal("private", archive.ReadString(Data.Models.Metadata.Archive.PrivateKey)); - Assert.Equal("stickynote", archive.ReadString(Data.Models.Metadata.Archive.StickyNoteKey)); - Assert.Equal("datternote", archive.ReadString(Data.Models.Metadata.Archive.DatterNoteKey)); - Assert.Equal("categories", archive.ReadString(Data.Models.Metadata.Archive.CategoriesKey)); + Assert.Equal(true, archive.Bios); + Assert.Equal(true, archive.Licensed); + Assert.Equal(true, archive.Pirate); + Assert.Equal(true, archive.Physical); + Assert.Equal(true, archive.Complete); + Assert.Equal(true, archive.Adult); + Assert.Equal(true, archive.Dat); + Assert.Equal(true, archive.Listed); + Assert.Equal(true, archive.Private); + Assert.Equal("stickynote", archive.StickyNote); + Assert.Equal("datternote", archive.DatterNote); + Assert.Equal("categories", archive.Categories); } private static void ValidateMetadataBiosSet(Data.Models.Metadata.BiosSet? biosSet) diff --git a/SabreTools.Metadata.DatItems/Formats/Archive.cs b/SabreTools.Metadata.DatItems/Formats/Archive.cs index 4a266c33..3b6348e1 100644 --- a/SabreTools.Metadata.DatItems/Formats/Archive.cs +++ b/SabreTools.Metadata.DatItems/Formats/Archive.cs @@ -12,16 +12,207 @@ namespace SabreTools.Metadata.DatItems.Formats { #region Fields + public string? Additional + { + get => (_internal as Data.Models.Metadata.Archive)?.Additional; + set => (_internal as Data.Models.Metadata.Archive)?.Additional = value; + } + + public bool? Adult + { + get => (_internal as Data.Models.Metadata.Archive)?.Adult; + set => (_internal as Data.Models.Metadata.Archive)?.Adult = value; + } + + public bool? Alt + { + get => (_internal as Data.Models.Metadata.Archive)?.Alt; + set => (_internal as Data.Models.Metadata.Archive)?.Alt = value; + } + + public bool? Bios + { + get => (_internal as Data.Models.Metadata.Archive)?.Bios; + set => (_internal as Data.Models.Metadata.Archive)?.Bios = value; + } + + public string? Categories + { + get => (_internal as Data.Models.Metadata.Archive)?.Categories; + set => (_internal as Data.Models.Metadata.Archive)?.Categories = value; + } + + public string? CloneTag + { + get => (_internal as Data.Models.Metadata.Archive)?.CloneTag; + set => (_internal as Data.Models.Metadata.Archive)?.CloneTag = value; + } + + public bool? Complete + { + get => (_internal as Data.Models.Metadata.Archive)?.Complete; + set => (_internal as Data.Models.Metadata.Archive)?.Complete = value; + } + + public bool? Dat + { + get => (_internal as Data.Models.Metadata.Archive)?.Dat; + set => (_internal as Data.Models.Metadata.Archive)?.Dat = value; + } + + public string? DatterNote + { + get => (_internal as Data.Models.Metadata.Archive)?.DatterNote; + set => (_internal as Data.Models.Metadata.Archive)?.DatterNote = value; + } + public string? Description + { + get => (_internal as Data.Models.Metadata.Archive)?.Description; + set => (_internal as Data.Models.Metadata.Archive)?.Description = value; + } + + public string? DevStatus + { + get => (_internal as Data.Models.Metadata.Archive)?.DevStatus; + set => (_internal as Data.Models.Metadata.Archive)?.DevStatus = value; + } + + public string? GameId1 + { + get => (_internal as Data.Models.Metadata.Archive)?.GameId1; + set => (_internal as Data.Models.Metadata.Archive)?.GameId1 = value; + } + + public string? GameId2 + { + get => (_internal as Data.Models.Metadata.Archive)?.GameId2; + set => (_internal as Data.Models.Metadata.Archive)?.GameId2 = value; + } + /// /> public override Data.Models.Metadata.ItemType ItemType => Data.Models.Metadata.ItemType.Archive; + public string? LangChecked + { + get => (_internal as Data.Models.Metadata.Archive)?.LangChecked; + set => (_internal as Data.Models.Metadata.Archive)?.LangChecked = value; + } + + public string? Languages + { + get => (_internal as Data.Models.Metadata.Archive)?.Languages; + set => (_internal as Data.Models.Metadata.Archive)?.Languages = value; + } + + public bool? Licensed + { + get => (_internal as Data.Models.Metadata.Archive)?.Licensed; + set => (_internal as Data.Models.Metadata.Archive)?.Licensed = value; + } + + public bool? Listed + { + get => (_internal as Data.Models.Metadata.Archive)?.Listed; + set => (_internal as Data.Models.Metadata.Archive)?.Listed = value; + } + + public string? MergeOf + { + get => (_internal as Data.Models.Metadata.Archive)?.MergeOf; + set => (_internal as Data.Models.Metadata.Archive)?.MergeOf = value; + } + + public string? MergeName + { + get => (_internal as Data.Models.Metadata.Archive)?.MergeName; + set => (_internal as Data.Models.Metadata.Archive)?.MergeName = value; + } + public string? Name { get => (_internal as Data.Models.Metadata.Archive)?.Name; set => (_internal as Data.Models.Metadata.Archive)?.Name = value; } + public string? NameAlt + { + get => (_internal as Data.Models.Metadata.Archive)?.NameAlt; + set => (_internal as Data.Models.Metadata.Archive)?.NameAlt = value; + } + + public string? Number + { + get => (_internal as Data.Models.Metadata.Archive)?.Number; + set => (_internal as Data.Models.Metadata.Archive)?.Number = value; + } + + public bool? Physical + { + get => (_internal as Data.Models.Metadata.Archive)?.Physical; + set => (_internal as Data.Models.Metadata.Archive)?.Physical = value; + } + + public bool? Pirate + { + get => (_internal as Data.Models.Metadata.Archive)?.Pirate; + set => (_internal as Data.Models.Metadata.Archive)?.Pirate = value; + } + + public bool? Private + { + get => (_internal as Data.Models.Metadata.Archive)?.Private; + set => (_internal as Data.Models.Metadata.Archive)?.Private = value; + } + + public string? Region + { + get => (_internal as Data.Models.Metadata.Archive)?.Region; + set => (_internal as Data.Models.Metadata.Archive)?.Region = value; + } + + public string? RegParent + { + get => (_internal as Data.Models.Metadata.Archive)?.RegParent; + set => (_internal as Data.Models.Metadata.Archive)?.RegParent = value; + } + + public bool? ShowLang + { + get => (_internal as Data.Models.Metadata.Archive)?.ShowLang; + set => (_internal as Data.Models.Metadata.Archive)?.ShowLang = value; + } + + public string? Special1 + { + get => (_internal as Data.Models.Metadata.Archive)?.Special1; + set => (_internal as Data.Models.Metadata.Archive)?.Special1 = value; + } + + public string? Special2 + { + get => (_internal as Data.Models.Metadata.Archive)?.Special2; + set => (_internal as Data.Models.Metadata.Archive)?.Special2 = value; + } + + public string? StickyNote + { + get => (_internal as Data.Models.Metadata.Archive)?.StickyNote; + set => (_internal as Data.Models.Metadata.Archive)?.StickyNote = value; + } + + public string? Version1 + { + get => (_internal as Data.Models.Metadata.Archive)?.Version1; + set => (_internal as Data.Models.Metadata.Archive)?.Version1 = value; + } + + public string? Version2 + { + get => (_internal as Data.Models.Metadata.Archive)?.Version2; + set => (_internal as Data.Models.Metadata.Archive)?.Version2 = value; + } + #endregion #region Constructors diff --git a/SabreTools.Metadata.Filter/FilterObject.cs b/SabreTools.Metadata.Filter/FilterObject.cs index e1cdb2d7..77945415 100644 --- a/SabreTools.Metadata.Filter/FilterObject.cs +++ b/SabreTools.Metadata.Filter/FilterObject.cs @@ -356,9 +356,102 @@ namespace SabreTools.Metadata.Filter checkValue = item.Mask; return true; + case Archive item when fieldName == "additional": + checkValue = item.Additional; + return true; + case Archive item when fieldName == "adult": + checkValue = item.Adult is null ? null : (item.Adult == true ? "1" : "0"); + return true; + case Archive item when fieldName == "alt": + checkValue = item.Alt is null ? null : (item.Alt == true ? "1" : "0"); + return true; + case Archive item when fieldName == "bios": + checkValue = item.Bios is null ? null : (item.Bios == true ? "1" : "0"); + return true; + case Archive item when fieldName == "categories": + checkValue = item.Categories; + return true; + case Archive item when fieldName == "clone": + checkValue = item.CloneTag; + return true; + case Archive item when fieldName == "complete": + checkValue = item.Complete is null ? null : (item.Complete == true ? "1" : "0"); + return true; + case Archive item when fieldName == "dat": + checkValue = item.Dat is null ? null : (item.Dat == true ? "1" : "0"); + return true; + case Archive item when fieldName == "datternote": + checkValue = item.DatterNote; + return true; case Archive item when fieldName == "description": checkValue = item.Description; return true; + case Archive item when fieldName == "devstatus": + checkValue = item.DevStatus; + return true; + case Archive item when fieldName == "gameid1": + checkValue = item.GameId1; + return true; + case Archive item when fieldName == "gameid2": + checkValue = item.GameId2; + return true; + case Archive item when fieldName == "langchecked": + checkValue = item.LangChecked; + return true; + case Archive item when fieldName == "languages": + checkValue = item.Languages; + return true; + case Archive item when fieldName == "licensed": + checkValue = item.Licensed is null ? null : (item.Licensed == true ? "1" : "0"); + return true; + case Archive item when fieldName == "listed": + checkValue = item.Listed is null ? null : (item.Listed == true ? "1" : "0"); + return true; + case Archive item when fieldName == "mergeof": + checkValue = item.MergeOf; + return true; + case Archive item when fieldName == "mergename": + checkValue = item.MergeName; + return true; + case Archive item when fieldName == "namealt": + checkValue = item.NameAlt; + return true; + case Archive item when fieldName == "number": + checkValue = item.Number; + return true; + case Archive item when fieldName == "physical": + checkValue = item.Physical is null ? null : (item.Physical == true ? "1" : "0"); + return true; + case Archive item when fieldName == "pirate": + checkValue = item.Pirate is null ? null : (item.Pirate == true ? "1" : "0"); + return true; + case Archive item when fieldName == "private": + checkValue = item.Private is null ? null : (item.Private == true ? "1" : "0"); + return true; + case Archive item when fieldName == "region": + checkValue = item.Region; + return true; + case Archive item when fieldName == "regparent": + checkValue = item.RegParent; + return true; + case Archive item when fieldName == "showlang": + checkValue = item.ShowLang is null ? null : (item.ShowLang == true ? "1" : "0"); + return true; + case Archive item when fieldName == "special1": + checkValue = item.Special1; + return true; + case Archive item when fieldName == "special2": + checkValue = item.Special2; + return true; + case Archive item when fieldName == "stickynote": + checkValue = item.StickyNote; + return true; + case Archive item when fieldName == "version1": + checkValue = item.Version1; + return true; + case Archive item when fieldName == "version2": + checkValue = item.Version2; + return true; case BiosSet item when fieldName == "default": checkValue = item.Default.FromYesNo(); diff --git a/SabreTools.Metadata/DictionaryBaseExtensions.cs b/SabreTools.Metadata/DictionaryBaseExtensions.cs index d41e4054..865469c7 100644 --- a/SabreTools.Metadata/DictionaryBaseExtensions.cs +++ b/SabreTools.Metadata/DictionaryBaseExtensions.cs @@ -74,7 +74,7 @@ namespace SabreTools.Metadata } else if (self is Archive selfArchive && other is Archive otherArchive) { - if (selfArchive.Description != otherArchive.Description) + if (!selfArchive.Equals(otherArchive)) return false; } else if (self is BiosSet selfBiosSet && other is BiosSet otherBiosSet)