diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-03-14 00:50:23 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-03-14 00:50:23 -0400 |
| commit | dbb7fd61ff0545f8ebf7b9ece432f1408d43040c (patch) | |
| tree | 68d1c42e2bcd4a4be0398c8f4c0f1ba88d42e56e /MediaBrowser.Providers | |
| parent | 7c99b0a14a276fbf604c5ce2ce4e392222523f43 (diff) | |
add dynamic images
Diffstat (limited to 'MediaBrowser.Providers')
| -rw-r--r-- | MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs | 10 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Manager/ProviderManager.cs | 82 |
2 files changed, 85 insertions, 7 deletions
diff --git a/MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs b/MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs index 9e1cfdd069..73a1de8898 100644 --- a/MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs +++ b/MediaBrowser.Providers/FolderImages/DefaultImageProvider.cs @@ -36,16 +36,16 @@ namespace MediaBrowser.Providers.FolderImages if (view != null) { - return GetImages(view.ViewType, view.UserId.HasValue, cancellationToken); + return GetImages(view.ViewType, view.ParentId != Guid.Empty, cancellationToken); } var folder = (ICollectionFolder)item; return GetImages(folder.CollectionType, false, cancellationToken); } - private Task<IEnumerable<RemoteImageInfo>> GetImages(string viewType, bool isUserSpecificView, CancellationToken cancellationToken) + private Task<IEnumerable<RemoteImageInfo>> GetImages(string viewType, bool isSubView, CancellationToken cancellationToken) { - var url = GetImageUrl(viewType, isUserSpecificView); + var url = GetImageUrl(viewType, isSubView); var list = new List<RemoteImageInfo>(); if (!string.IsNullOrWhiteSpace(url)) @@ -71,7 +71,7 @@ namespace MediaBrowser.Providers.FolderImages return Task.FromResult<IEnumerable<RemoteImageInfo>>(list); } - private string GetImageUrl(string viewType, bool isUserSpecificView) + private string GetImageUrl(string viewType, bool isSubView) { const string urlPrefix = "https://raw.githubusercontent.com/MediaBrowser/MediaBrowser.Resources/master/images/folders/"; @@ -108,7 +108,7 @@ namespace MediaBrowser.Providers.FolderImages return urlPrefix + "movies.png"; } - if (isUserSpecificView) + if (isSubView) { return null; } diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index 55a4549778..392fcd5ae8 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -26,7 +26,7 @@ namespace MediaBrowser.Providers.Manager /// <summary> /// Class ProviderManager /// </summary> - public class ProviderManager : IProviderManager + public class ProviderManager : IProviderManager, IDisposable { /// <summary> /// The _logger @@ -63,6 +63,8 @@ namespace MediaBrowser.Providers.Manager private IExternalId[] _externalIds; + private readonly Func<ILibraryManager> _libraryManagerFactory; + /// <summary> /// Initializes a new instance of the <see cref="ProviderManager" /> class. /// </summary> @@ -71,7 +73,7 @@ namespace MediaBrowser.Providers.Manager /// <param name="libraryMonitor">The directory watchers.</param> /// <param name="logManager">The log manager.</param> /// <param name="fileSystem">The file system.</param> - public ProviderManager(IHttpClient httpClient, IServerConfigurationManager configurationManager, ILibraryMonitor libraryMonitor, ILogManager logManager, IFileSystem fileSystem, IServerApplicationPaths appPaths) + public ProviderManager(IHttpClient httpClient, IServerConfigurationManager configurationManager, ILibraryMonitor libraryMonitor, ILogManager logManager, IFileSystem fileSystem, IServerApplicationPaths appPaths, Func<ILibraryManager> libraryManagerFactory) { _logger = logManager.GetLogger("ProviderManager"); _httpClient = httpClient; @@ -79,6 +81,7 @@ namespace MediaBrowser.Providers.Manager _libraryMonitor = libraryMonitor; _fileSystem = fileSystem; _appPaths = appPaths; + _libraryManagerFactory = libraryManagerFactory; } /// <summary> @@ -841,5 +844,80 @@ namespace MediaBrowser.Providers.Manager }); } + + private readonly ConcurrentQueue<Tuple<Guid, MetadataRefreshOptions>> _refreshQueue = + new ConcurrentQueue<Tuple<Guid, MetadataRefreshOptions>>(); + + private readonly object _refreshTimerLock = new object(); + private Timer _refreshTimer; + + public void QueueRefresh(Guid id, MetadataRefreshOptions options) + { + if (_disposed) + { + return; + } + + _refreshQueue.Enqueue(new Tuple<Guid, MetadataRefreshOptions>(id, options)); + StartRefreshTimer(); + } + + private void StartRefreshTimer() + { + lock (_refreshTimerLock) + { + if (_refreshTimer == null) + { + _refreshTimer = new Timer(RefreshTimerCallback, null, 100, Timeout.Infinite); + } + } + } + + private void StopRefreshTimer() + { + lock (_refreshTimerLock) + { + if (_refreshTimer != null) + { + _refreshTimer.Dispose(); + _refreshTimer = null; + } + } + } + + private async void RefreshTimerCallback(object state) + { + Tuple<Guid, MetadataRefreshOptions> refreshItem; + var libraryManager = _libraryManagerFactory(); + + while (_refreshQueue.TryDequeue(out refreshItem)) + { + if (_disposed) + { + return; + } + + try + { + var item = libraryManager.GetItemById(refreshItem.Item1); + if (item != null) + { + await item.RefreshMetadata(refreshItem.Item2, CancellationToken.None).ConfigureAwait(false); + } + } + catch (Exception ex) + { + _logger.ErrorException("Error refreshing item", ex); + } + } + + StopRefreshTimer(); + } + + private bool _disposed; + public void Dispose() + { + _disposed = true; + } } }
\ No newline at end of file |
