From 43f0a1bbfe36e76cee773a6ba774b2b0dd7c3740 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 7 Mar 2015 18:39:24 -0500 Subject: get dynamic media sources --- .../Library/MediaSourceManager.cs | 38 +++++++++++++++++++--- 1 file changed, 34 insertions(+), 4 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Library') diff --git a/MediaBrowser.Server.Implementations/Library/MediaSourceManager.cs b/MediaBrowser.Server.Implementations/Library/MediaSourceManager.cs index 97b50a48b..93fb101a9 100644 --- a/MediaBrowser.Server.Implementations/Library/MediaSourceManager.cs +++ b/MediaBrowser.Server.Implementations/Library/MediaSourceManager.cs @@ -5,6 +5,7 @@ using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; using System.Linq; @@ -21,13 +22,15 @@ namespace MediaBrowser.Server.Implementations.Library private readonly IChannelManager _channelManager; private IMediaSourceProvider[] _providers; + private readonly ILogger _logger; - public MediaSourceManager(IItemRepository itemRepo, IUserManager userManager, ILibraryManager libraryManager, IChannelManager channelManager) + public MediaSourceManager(IItemRepository itemRepo, IUserManager userManager, ILibraryManager libraryManager, IChannelManager channelManager, ILogger logger) { _itemRepo = itemRepo; _userManager = userManager; _libraryManager = libraryManager; _channelManager = channelManager; + _logger = logger; } public void AddParts(IEnumerable providers) @@ -127,6 +130,7 @@ namespace MediaBrowser.Server.Implementations.Library var item = _libraryManager.GetItemById(id); IEnumerable mediaSources; + var hasMediaSources = (IHasMediaSources)item; var channelItem = item as IChannelMediaItem; if (channelItem != null) @@ -136,8 +140,6 @@ namespace MediaBrowser.Server.Implementations.Library } else { - var hasMediaSources = (IHasMediaSources)item; - if (string.IsNullOrWhiteSpace(userId)) { mediaSources = hasMediaSources.GetMediaSources(true); @@ -149,7 +151,35 @@ namespace MediaBrowser.Server.Implementations.Library } } - return mediaSources; + var dynamicMediaSources = await GetDynamicMediaSources(hasMediaSources, cancellationToken).ConfigureAwait(false); + + var list = new List(); + + list.AddRange(mediaSources); + list.AddRange(dynamicMediaSources); + + return SortMediaSources(list); + } + + private async Task> GetDynamicMediaSources(IHasMediaSources item, CancellationToken cancellationToken) + { + var tasks = _providers.Select(i => GetDynamicMediaSources(item, i, cancellationToken)); + var results = await Task.WhenAll(tasks).ConfigureAwait(false); + + return results.SelectMany(i => i.ToList()); + } + + private async Task> GetDynamicMediaSources(IHasMediaSources item, IMediaSourceProvider provider, CancellationToken cancellationToken) + { + try + { + return await provider.GetMediaSources(item, cancellationToken).ConfigureAwait(false); + } + catch (Exception ex) + { + _logger.ErrorException("Error getting media sources", ex); + return new List(); + } } public Task> GetPlayackMediaSources(string id, CancellationToken cancellationToken) -- cgit v1.2.3