diff --git a/SabreTools.Core/Enums.cs b/SabreTools.Core/Enums.cs index a1c97755..4a58c3f1 100644 --- a/SabreTools.Core/Enums.cs +++ b/SabreTools.Core/Enums.cs @@ -594,6 +594,12 @@ namespace SabreTools.Core // Analog Analog_Mask, + // Archive + Number, + Clone, + RegParent, + Languages, + // BiosSet Description, diff --git a/SabreTools.DatItems/Formats/Archive.cs b/SabreTools.DatItems/Formats/Archive.cs index 260e287a..3d0b573f 100644 --- a/SabreTools.DatItems/Formats/Archive.cs +++ b/SabreTools.DatItems/Formats/Archive.cs @@ -18,6 +18,41 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string Name { get; set; } + /// + /// Archive ID number + /// + /// No-Intro database export only + [JsonProperty("number"), XmlElement("number")] + public string Number { get; set; } + + /// + /// Clone + /// + /// No-Intro database export only + [JsonProperty("clone"), XmlElement("clone")] + public string Clone { get; set; } + + /// + /// Regional parent + /// + /// No-Intro database export only + [JsonProperty("regparent"), XmlElement("regparent")] + public string RegParent { get; set; } + + /// + /// Region + /// + /// No-Intro database export only + [JsonProperty("region"), XmlElement("region")] + public string Region { get; set; } + + /// + /// Region + /// + /// No-Intro database export only + [JsonProperty("languages"), XmlElement("languages")] + public string Languages { get; set; } + #endregion #region Accessors @@ -57,6 +92,11 @@ namespace SabreTools.DatItems.Formats Remove = this.Remove, Name = this.Name, + Number = this.Number, + Clone = this.Clone, + RegParent = this.RegParent, + Region = this.Region, + Languages = this.Languages, }; } @@ -75,7 +115,12 @@ namespace SabreTools.DatItems.Formats Archive newOther = other as Archive; // If the archive information matches - return (Name == newOther.Name); + return (Name == newOther.Name + && Number == newOther.Number + && Clone == newOther.Clone + && RegParent == newOther.RegParent + && Region == newOther.Region + && Languages = newOther.Languages); } #endregion diff --git a/SabreTools.Filtering/DatItemFilter.cs b/SabreTools.Filtering/DatItemFilter.cs index 6ba26de1..905b6d24 100644 --- a/SabreTools.Filtering/DatItemFilter.cs +++ b/SabreTools.Filtering/DatItemFilter.cs @@ -83,6 +83,12 @@ namespace SabreTools.Filtering // Analog public FilterItem Analog_Mask { get; private set; } = new FilterItem(); + // Archive + public FilterItem Number { get; private set; } = new FilterItem(); + public FilterItem Clone { get; private set; } = new FilterItem(); + public FilterItem RegParent { get; private set; } = new FilterItem(); + public FilterItem Languages { get; private set; } = new FilterItem(); + // BiosSet public FilterItem Description { get; private set; } = new FilterItem(); @@ -434,6 +440,23 @@ namespace SabreTools.Filtering SetStringFilter(Analog_Mask, value, negate); break; + // Archive + case DatItemField.Number: + SetStringFilter(Number, value, negate); + break; + + case DatItemField.Clone: + SetStringFilter(Clone, value, negate); + break; + + case DatItemField.RegParent: + SetStringFilter(RegParent, value, negate); + break; + + case DatItemField.Languages: + SetStringFilter(Languages, value, negate); + break; + // BiosSet case DatItemField.Description: SetStringFilter(Description, value, negate); @@ -859,6 +882,7 @@ namespace SabreTools.Filtering { Adjuster adjuster => PassesFilters(adjuster), Analog analog => PassesFilters(analog), + Archive archive => PassesFilters(archive), BiosSet biosSet => PassesFilters(biosSet), Chip chip => PassesFilters(chip), Condition condition => PassesFilters(condition), @@ -934,6 +958,36 @@ namespace SabreTools.Filtering return true; } + /// + /// Check to see if an Archive passes the filters + /// + /// Archive to check + /// True if the item passed the filter, false otherwise + private bool PassesFilters(Archive archive) + { + // Filter on number + if (!PassStringFilter(Number, archive.Number)) + return false; + + // Filter on clone + if (!PassStringFilter(Clone, analog.Clone)) + return false; + + // Filter on regional parent + if (!PassStringFilter(RegParent, analog.RegParent)) + return false; + + // Filter on region + if (!PassStringFilter(Region, analog.Region)) + return false; + + // Filter on languages + if (!PassStringFilter(Languages, analog.Languages)) + return false; + + return true; + } + /// /// Check to see if a BiosSet passes the filters /// diff --git a/SabreTools.Filtering/DatItemRemover.cs b/SabreTools.Filtering/DatItemRemover.cs index 6d23653b..8dfe977c 100644 --- a/SabreTools.Filtering/DatItemRemover.cs +++ b/SabreTools.Filtering/DatItemRemover.cs @@ -88,6 +88,7 @@ namespace SabreTools.Filtering if (datItem is Adjuster) RemoveFields(datItem as Adjuster); else if (datItem is Analog) RemoveFields(datItem as Analog); + else if (datItem is Archive) RemoveFields(datItem as Archive); else if (datItem is BiosSet) RemoveFields(datItem as BiosSet); else if (datItem is Chip) RemoveFields(datItem as Chip); else if (datItem is Condition) RemoveFields(datItem as Condition); @@ -300,6 +301,28 @@ namespace SabreTools.Filtering analog.Mask = null; } + /// + /// Remove fields with given values + /// + /// Archive to remove fields from + private void RemoveFields(Archive archive) + { + if (DatItemFields.Contains(DatItemField.Number)) + archive.Number = null; + + if (DatItemFields.Contains(DatItemField.Clone)) + archive.Clone = null; + + if (DatItemFields.Contains(DatItemField.RegParent)) + archive.RegParent = null; + + if (DatItemFields.Contains(DatItemField.Region)) + archive.Region = null; + + if (DatItemFields.Contains(DatItemField.Languages)) + archive.Languages = null; + } + /// /// Remove fields with given values /// diff --git a/SabreTools.Filtering/Replacer.cs b/SabreTools.Filtering/Replacer.cs index 87792098..bb96fc2f 100644 --- a/SabreTools.Filtering/Replacer.cs +++ b/SabreTools.Filtering/Replacer.cs @@ -36,6 +36,7 @@ namespace SabreTools.Filtering if (datItem is Adjuster) ReplaceFields(datItem as Adjuster, repDatItem as Adjuster, datItemFields); else if (datItem is Analog) ReplaceFields(datItem as Analog, repDatItem as Analog, datItemFields); + else if (datItem is Archive) ReplaceFields(datItem as Archive, repDatItem as Archive, datItemFields); else if (datItem is BiosSet) ReplaceFields(datItem as BiosSet, repDatItem as BiosSet, datItemFields); else if (datItem is Chip) ReplaceFields(datItem as Chip, repDatItem as Chip, datItemFields); else if (datItem is Condition) ReplaceFields(datItem as Condition, repDatItem as Condition, datItemFields); @@ -254,6 +255,30 @@ namespace SabreTools.Filtering analog.Mask = newItem.Mask; } + /// + /// Replace fields with given values + /// + /// Archive to remove replace fields in + /// Archive to pull new information from + /// List of fields representing what should be updated + private static void ReplaceFields(Archive archive, Archive newItem, List datItemFields) + { + if (datItemFields.Contains(DatItemField.Number)) + archive.Number = newItem.Number; + + if (datItemFields.Contains(DatItemField.Clone)) + archive.Clone = newItem.Clone; + + if (datItemFields.Contains(DatItemField.RegParent)) + archive.RegParent = newItem.RegParent; + + if (datItemFields.Contains(DatItemField.Region)) + archive.Region = newItem.Region; + + if (datItemFields.Contains(DatItemField.Languages)) + archive.Languages = newItem.Languages; + } + /// /// Replace fields with given values /// diff --git a/SabreTools.Test/TestData/test-logiqx.xml b/SabreTools.Test/TestData/test-logiqx.xml index 5ab5cbcf..a8f4b638 100644 --- a/SabreTools.Test/TestData/test-logiqx.xml +++ b/SabreTools.Test/TestData/test-logiqx.xml @@ -49,7 +49,7 @@ - +