コード例 #1
0
        public void InitProviders()
        {
            lock (_syncObj)
            {
                if (_listProviders != null)
                {
                    return;
                }
                _listProviders = new MediaListProviderDictionary();
                _listProviders.ProviderRequested += OnProviderRequested;

                _providerPluginItemStateTracker = new FixedItemStateTracker("Media Lists - Provider registration");

                IPluginManager pluginManager = ServiceRegistration.Get <IPluginManager>();
                foreach (PluginItemMetadata itemMetadata in pluginManager.GetAllPluginItemMetadata(MediaListProviderBuilder.MEDIA_LIST_PROVIDER_PATH))
                {
                    try
                    {
                        MediaListProviderRegistration providerRegistration = pluginManager.RequestPluginItem <MediaListProviderRegistration>(MediaListProviderBuilder.MEDIA_LIST_PROVIDER_PATH, itemMetadata.Id, _providerPluginItemStateTracker);
                        if (providerRegistration == null)
                        {
                            ServiceRegistration.Get <ILogger>().Warn("Could not instantiate Media List provider with id '{0}'", itemMetadata.Id);
                        }
                        else
                        {
                            IMediaListProvider provider = Activator.CreateInstance(providerRegistration.ProviderClass) as IMediaListProvider;
                            if (provider == null)
                            {
                                throw new PluginInvalidStateException("Could not create IMediaListProvider instance of class {0}", providerRegistration.ProviderClass);
                            }
                            if (_listProviders.ContainsKey(providerRegistration.Key))
                            {
                                //The default providers cannot replace existing providers
                                if (provider.GetType().Assembly != System.Reflection.Assembly.GetExecutingAssembly())
                                {
                                    //Replace the provider
                                    _listProviders[providerRegistration.Key] = provider;
                                    ServiceRegistration.Get <ILogger>().Info("Successfully replaced Media List '{1}' with provider '{0}' (Id '{2}')", itemMetadata.Attributes["ClassName"], itemMetadata.Attributes["Key"], itemMetadata.Id);
                                }
                            }
                            else
                            {
                                _listProviders.Add(providerRegistration.Key, provider);
                                ServiceRegistration.Get <ILogger>().Info("Successfully activated Media List '{1}' with provider '{0}' (Id '{2}')", itemMetadata.Attributes["ClassName"], itemMetadata.Attributes["Key"], itemMetadata.Id);
                            }
                        }
                    }
                    catch (PluginInvalidStateException e)
                    {
                        ServiceRegistration.Get <ILogger>().Warn("Cannot add IMediaListProvider extension with id '{0}'", e, itemMetadata.Id);
                    }
                }
            }
        }
コード例 #2
0
 public async Task <bool> UpdateProviderAsync(IMediaListProvider provider, int maxItems, UpdateReason updateReason)
 {
     try
     {
         return(await provider.UpdateItemsAsync(maxItems, updateReason));
     }
     catch (Exception ex)
     {
         ServiceRegistration.Get <ILogger>().Error("Error updating Media List {0}", provider.GetType().Name, ex);
         return(false);
     }
 }
コード例 #3
0
 protected virtual void OnProviderRequested(IMediaListProvider provider)
 {
     ProviderRequested?.Invoke(this, new ProviderEventArgs(provider));
 }
コード例 #4
0
 public ProviderWrapper(IMediaListProvider provider)
 {
     _provider       = provider;
     _nextUpdateTime = DateTime.MinValue;
 }
コード例 #5
0
 public ProviderEventArgs(IMediaListProvider provider)
 {
     _provider = provider;
 }
コード例 #6
0
 public void Add(string key, IMediaListProvider value)
 {
     lock (_syncObj)
         _providers.Add(key, new ProviderWrapper(value));
 }