diff --git a/SabreTools.Filter/FilterRunner.cs b/SabreTools.Filter/FilterRunner.cs index e7c480f6..5a62aef1 100644 --- a/SabreTools.Filter/FilterRunner.cs +++ b/SabreTools.Filter/FilterRunner.cs @@ -45,14 +45,13 @@ namespace SabreTools.Filter { Header => MetadataFile.HeaderKey, Machine => MetadataFile.MachineKey, - DatItem => dictionaryBase.ReadString(DatItem.TypeKey), + DatItem => TypeHelper.GetXmlRootAttributeElementName(dictionaryBase.GetType()), _ => null, }; // Loop through and run each filter in order foreach (var filter in this.Filters) { - // TODO: Make this step more accurate // If the filter isn't for this object type, skip if (filter.Key[0] != itemName) continue; diff --git a/SabreTools.Filter/TypeHelper.cs b/SabreTools.Filter/TypeHelper.cs index b028e4e6..6f0ce016 100644 --- a/SabreTools.Filter/TypeHelper.cs +++ b/SabreTools.Filter/TypeHelper.cs @@ -40,7 +40,18 @@ namespace SabreTools.Filter return AppDomain.CurrentDomain.GetAssemblies() .SelectMany(a => a.GetTypes()) .Where(t => t.IsAssignableFrom(typeof(DatItem)) && t.IsClass) - .FirstOrDefault(t => t.GetCustomAttribute()?.ElementName == itemType); + .FirstOrDefault(t => GetXmlRootAttributeElementName(t) == itemType); + } + + /// + /// Attempt to get the XmlRootAttribute.ElementName value from a type + /// + public static string? GetXmlRootAttributeElementName(Type? type) + { + if (type == null) + return null; + + return type.GetCustomAttribute()?.ElementName; } } } diff --git a/SabreTools.Models/Internal/ItemType.cs b/SabreTools.Models/Internal/ItemType.cs index 0e495af9..581594ae 100644 --- a/SabreTools.Models/Internal/ItemType.cs +++ b/SabreTools.Models/Internal/ItemType.cs @@ -3,7 +3,6 @@ namespace SabreTools.Models.Internal /// /// Determine what type of file an item is /// - /// TODO: Create attribute for internal names public enum ItemType { ///