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); } } } }
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); } }
protected virtual void OnProviderRequested(IMediaListProvider provider) { ProviderRequested?.Invoke(this, new ProviderEventArgs(provider)); }
public ProviderWrapper(IMediaListProvider provider) { _provider = provider; _nextUpdateTime = DateTime.MinValue; }
public ProviderEventArgs(IMediaListProvider provider) { _provider = provider; }
public void Add(string key, IMediaListProvider value) { lock (_syncObj) _providers.Add(key, new ProviderWrapper(value)); }