コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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);
                }
            }
        }