diff --git a/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs b/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs
index ad1aabcb..6cb95ee8 100644
--- a/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs
+++ b/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs
@@ -1406,5 +1406,89 @@ namespace SabreTools.Metadata.Filter.Test
}
#endregion
+
+ #region Media
+
+ [Theory]
+ [InlineData("media.md5", "md5")]
+ [InlineData("media.name", "name")]
+ [InlineData("media.sha1", "sha1")]
+ [InlineData("media.sha256", "sha256")]
+ [InlineData("media.spamsum", "spamsum")]
+ public void Matches_Media(string itemField, string value)
+ {
+ var filter = new FilterObject(itemField, value, Operation.Equals);
+ Media obj = new Media
+ {
+ MD5 = "md5",
+ Name = "name",
+ SHA1 = "sha1",
+ SHA256 = "sha256",
+ SpamSum = "spamsum",
+ };
+
+ bool actual = filter.Matches(obj);
+ Assert.True(actual);
+ }
+
+ #endregion
+
+ #region Original
+
+ [Theory]
+ [InlineData("original.content", "content")]
+ [InlineData("original.value", "yes")]
+ public void Matches_Original(string itemField, string value)
+ {
+ var filter = new FilterObject(itemField, value, Operation.Equals);
+ Original obj = new Original
+ {
+ Content = "content",
+ Value = true,
+ };
+
+ bool actual = filter.Matches(obj);
+ Assert.True(actual);
+ }
+
+ #endregion
+
+ #region Part
+
+ [Theory]
+ [InlineData("part.interface", "interface")]
+ [InlineData("part.name", "name")]
+ public void Matches_Part(string itemField, string value)
+ {
+ var filter = new FilterObject(itemField, value, Operation.Equals);
+ Part obj = new Part
+ {
+ Interface = "interface",
+ Name = "name",
+ };
+
+ bool actual = filter.Matches(obj);
+ Assert.True(actual);
+ }
+
+ #endregion
+
+ #region Port
+
+ [Theory]
+ [InlineData("port.tag", "tag")]
+ public void Matches_Port(string itemField, string value)
+ {
+ var filter = new FilterObject(itemField, value, Operation.Equals);
+ Port obj = new Port
+ {
+ Tag = "tag",
+ };
+
+ bool actual = filter.Matches(obj);
+ Assert.True(actual);
+ }
+
+ #endregion
}
}
diff --git a/SabreTools.Metadata.Filter/FilterKey.cs b/SabreTools.Metadata.Filter/FilterKey.cs
index 792b9f60..4e35717a 100644
--- a/SabreTools.Metadata.Filter/FilterKey.cs
+++ b/SabreTools.Metadata.Filter/FilterKey.cs
@@ -478,6 +478,44 @@ namespace SabreTools.Metadata.Filter
"year",
];
+ ///
+ /// Known keys for Media
+ ///
+ private static readonly string[] _mediaKeys =
+ [
+ "md5",
+ "name",
+ "sha1",
+ "sha256",
+ "spamsum",
+ ];
+
+ ///
+ /// Known keys for Original
+ ///
+ private static readonly string[] _originalKeys =
+ [
+ "content",
+ "value",
+ ];
+
+ ///
+ /// Known keys for Part
+ ///
+ private static readonly string[] _partKeys =
+ [
+ "interface",
+ "name",
+ ];
+
+ ///
+ /// Known keys for Port
+ ///
+ private static readonly string[] _portKeys =
+ [
+ "tag",
+ ];
+
#endregion
///
@@ -676,9 +714,15 @@ namespace SabreTools.Metadata.Filter
"driver" => _driverKeys,
"extension" => _extensionKeys,
"feature" or "partfeature" => _featureKeys,
+ "game" or "machine" or "resource" or "set" => _machineKeys,
+ "header" => _headerKeys,
"info" => _infoKeys,
"input" => _inputKeys,
"instance" => _instanceKeys,
+ "media" => _mediaKeys,
+ "original" => _originalKeys,
+ "part" => _partKeys,
+ "port" => _portKeys,
_ => null,
};