From 2aca55a895e55a2ae1c0f40bbabf9a8763bc3766 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Mon, 6 Apr 2026 15:39:40 -0400 Subject: [PATCH] Add machine type analogue filtering again --- SabreTools.Metadata.Filter/FilterKey.cs | 8 ++++++ SabreTools.Metadata.Filter/FilterObject.cs | 30 ++++++++++++++++++++++ SabreTools.Metadata.Filter/FilterRunner.cs | 8 ------ 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/SabreTools.Metadata.Filter/FilterKey.cs b/SabreTools.Metadata.Filter/FilterKey.cs index 2136f482..d48200c3 100644 --- a/SabreTools.Metadata.Filter/FilterKey.cs +++ b/SabreTools.Metadata.Filter/FilterKey.cs @@ -335,6 +335,14 @@ namespace SabreTools.Metadata.Filter /// private static bool ParseMachineFilterId(ref string itemName, ref string fieldName) { + // Special case for machine type + if (string.Equals(fieldName, "type", StringComparison.OrdinalIgnoreCase)) + { + itemName = "machine"; + fieldName = "type"; + return true; + } + // Get the set of properties var properties = GetProperties(typeof(Machine)); if (properties is null) diff --git a/SabreTools.Metadata.Filter/FilterObject.cs b/SabreTools.Metadata.Filter/FilterObject.cs index cedc5e89..a73f8032 100644 --- a/SabreTools.Metadata.Filter/FilterObject.cs +++ b/SabreTools.Metadata.Filter/FilterObject.cs @@ -77,6 +77,21 @@ namespace SabreTools.Metadata.Filter /// private bool MatchesEqual(object obj) { + // 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); @@ -119,6 +134,21 @@ namespace SabreTools.Metadata.Filter /// private bool MatchesNotEqual(object obj) { + // 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, + }; + } + // Process the check value if (!GetCheckValue(obj, Key.FieldName, out string? checkValue)) return string.IsNullOrEmpty(Value); diff --git a/SabreTools.Metadata.Filter/FilterRunner.cs b/SabreTools.Metadata.Filter/FilterRunner.cs index 8ab6fa96..2bc9fef5 100644 --- a/SabreTools.Metadata.Filter/FilterRunner.cs +++ b/SabreTools.Metadata.Filter/FilterRunner.cs @@ -76,14 +76,6 @@ namespace SabreTools.Metadata.Filter // Get the key as a string string key = filter.Key.ToString(); - // Special case for machine types - if (filter.Key.ItemName == "machine" && filter.Key.FieldName == "isbios") - key = $"{"machine"}.COMBINEDTYPE"; - else if (filter.Key.ItemName == "machine" && filter.Key.FieldName == "isdevice") - key = $"{"machine"}.COMBINEDTYPE"; - else if (filter.Key.ItemName == "machine" && filter.Key.FieldName == "ismechanical") - key = $"{"machine"}.COMBINEDTYPE"; - // Set the expected group type GroupType groupType = GroupType.OR;