private void InitProviders(string providerPath) { lock (_syncObj) { if (_providersInititialized) { return; } _providersInititialized = true; _listProviders = new ContentListProviderDictionary(); _listProviders.ProviderRequested += OnProviderRequested; _providerPluginItemStateTracker = new FixedItemStateTracker($"Content Lists - Provider registration for path {providerPath}"); IPluginManager pluginManager = ServiceRegistration.Get <IPluginManager>(); foreach (PluginItemMetadata itemMetadata in pluginManager.GetAllPluginItemMetadata(providerPath)) { try { ContentListProviderRegistration providerRegistration = pluginManager.RequestPluginItem <ContentListProviderRegistration>(providerPath, itemMetadata.Id, _providerPluginItemStateTracker); if (providerRegistration == null) { ServiceRegistration.Get <ILogger>().Warn("Could not instantiate Content List provider with id '{0}'", itemMetadata.Id); } else { IContentListProvider provider = Activator.CreateInstance(providerRegistration.ProviderClass) as IContentListProvider; if (provider == null) { throw new PluginInvalidStateException("Could not create IContentListProvider 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 Content 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 Content List '{1}' with provider '{0}' (Id '{2}')", itemMetadata.Attributes["ClassName"], itemMetadata.Attributes["Key"], itemMetadata.Id); } } } catch (PluginInvalidStateException e) { ServiceRegistration.Get <ILogger>().Warn("Cannot add IContentListProvider extension with id '{0}'", e, itemMetadata.Id); } } } }
protected virtual async Task <bool> UpdateProviderAsync(IContentListProvider provider, int maxItems, UpdateReason updateReason) { try { return(await provider.UpdateItemsAsync(maxItems, updateReason)); } catch (Exception ex) { ServiceRegistration.Get <ILogger>().Error("Error updating Content List {0}", ex, provider.GetType().Name); return(false); } }
public void Add(string key, IContentListProvider value) { lock (_syncObj) _providers.Add(key, new ProviderWrapper(value)); }
protected virtual void OnProviderRequested(IContentListProvider provider) { ProviderRequested?.Invoke(this, new ProviderEventArgs(provider)); }
public ProviderWrapper(IContentListProvider provider) { _provider = provider; _nextUpdateTime = DateTime.MinValue; }
public ProviderEventArgs(IContentListProvider provider) { _provider = provider; }