/// <summary> /// Reads filter settings for <see cref="BaseNavigationInitializer"/> derived classes from plugin.xml. /// </summary> protected void BuildFilters() { if (_tracker != null) { return; } _tracker = new FixedItemStateTracker("BaseNavigationInitializer - Media navigation filter registration"); IPluginManager pluginManager = ServiceRegistration.Get <IPluginManager>(); foreach (PluginItemMetadata itemMetadata in pluginManager.GetAllPluginItemMetadata(MediaNavigationFilterBuilder.MEDIA_FILTERS_PATH)) { try { MediaNavigationFilter navigationFilter = pluginManager.RequestPluginItem <MediaNavigationFilter>( MediaNavigationFilterBuilder.MEDIA_FILTERS_PATH, itemMetadata.Id, _tracker); if (navigationFilter == null) { ServiceRegistration.Get <ILogger>().Warn("Could not instantiate Media navigation filter with id '{0}'", itemMetadata.Id); } else { string extensionClass = navigationFilter.ClassName; if (extensionClass == null) { throw new PluginInvalidStateException("Could not find class type for Media navigation filter {0}", navigationFilter.ClassName); } if (extensionClass != GetType().Name) { continue; } _filters.Add(navigationFilter.Filter); } } catch (PluginInvalidStateException e) { ServiceRegistration.Get <ILogger>().Warn("Cannot add Media navigation filter with id '{0}'", e, itemMetadata.Id); } } if (_filters.Count == 0) { _filter = null; return; } _filter = _filters.Count == 1 ? // Single filter _filters[0] : // Or a "AND" combined filter new BooleanCombinationFilter(BooleanOperator.And, _filters); }
private void InitNavigationFilters() { if (_tracker != null) { return; } _tracker = new FixedItemStateTracker("MediaListProvider - Media navigation filter registration"); _navigationFilters = new Dictionary <string, IList <IFilter> >(); IPluginManager pluginManager = ServiceRegistration.Get <IPluginManager>(); foreach (PluginItemMetadata itemMetadata in pluginManager.GetAllPluginItemMetadata(MediaNavigationFilterBuilder.MEDIA_FILTERS_PATH)) { try { MediaNavigationFilter navigationFilter = pluginManager.RequestPluginItem <MediaNavigationFilter>( MediaNavigationFilterBuilder.MEDIA_FILTERS_PATH, itemMetadata.Id, _tracker); if (navigationFilter == null) { ServiceRegistration.Get <ILogger>().Warn("MediaListProvider: Could not instantiate Media navigation filter with id '{0}'", itemMetadata.Id); } else { string extensionClass = navigationFilter.ClassName; if (extensionClass == null) { throw new PluginInvalidStateException("MediaListProvider: Could not find class type for Media navigation filter {0}", navigationFilter.ClassName); } IList <IFilter> filters; if (!_navigationFilters.TryGetValue(extensionClass, out filters)) { _navigationFilters[extensionClass] = filters = new List <IFilter>(); } filters.Add(navigationFilter.Filter); } } catch (PluginInvalidStateException e) { ServiceRegistration.Get <ILogger>().Warn("MediaListProvider: Cannot add Media navigation filter with id '{0}'", e, itemMetadata.Id); } } }