diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-03-07 18:39:24 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-03-07 18:39:24 -0500 |
| commit | 43f0a1bbfe36e76cee773a6ba774b2b0dd7c3740 (patch) | |
| tree | e92b97572917c44e239998621c515910d3eea61f /MediaBrowser.Server.Implementations | |
| parent | de01c956afdc76070bf7e46eee30bc56e8c48bdf (diff) | |
get dynamic media sources
Diffstat (limited to 'MediaBrowser.Server.Implementations')
3 files changed, 60 insertions, 4 deletions
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<IMediaSourceProvider> providers) @@ -127,6 +130,7 @@ namespace MediaBrowser.Server.Implementations.Library var item = _libraryManager.GetItemById(id); IEnumerable<MediaSourceInfo> 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<MediaSourceInfo>(); + + list.AddRange(mediaSources); + list.AddRange(dynamicMediaSources); + + return SortMediaSources(list); + } + + private async Task<IEnumerable<MediaSourceInfo>> 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<IEnumerable<MediaSourceInfo>> 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<MediaSourceInfo>(); + } } public Task<IEnumerable<MediaSourceInfo>> GetPlayackMediaSources(string id, CancellationToken cancellationToken) diff --git a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs index 05d804cbb..b0f48e7f5 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncRepository.cs @@ -539,6 +539,11 @@ namespace MediaBrowser.Server.Implementations.Sync whereClauses.Add("JobId=@JobId"); cmd.Parameters.Add(cmd, "@JobId", DbType.String).Value = query.JobId; } + if (!string.IsNullOrWhiteSpace(query.ItemId)) + { + whereClauses.Add("ItemId=@ItemId"); + cmd.Parameters.Add(cmd, "@ItemId", DbType.String).Value = query.ItemId; + } if (!string.IsNullOrWhiteSpace(query.TargetId)) { whereClauses.Add("TargetId=@TargetId"); diff --git a/MediaBrowser.Server.Implementations/Sync/SyncedMediaSourceProvider.cs b/MediaBrowser.Server.Implementations/Sync/SyncedMediaSourceProvider.cs index 19383b316..9194ff1c9 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncedMediaSourceProvider.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncedMediaSourceProvider.cs @@ -1,7 +1,10 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Sync; using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Sync; using System.Collections.Generic; +using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -9,8 +12,26 @@ namespace MediaBrowser.Server.Implementations.Sync { public class SyncedMediaSourceProvider : IMediaSourceProvider { + private readonly ISyncManager _syncManager; + + public SyncedMediaSourceProvider(ISyncManager syncManager) + { + _syncManager = syncManager; + } + public async Task<IEnumerable<MediaSourceInfo>> GetMediaSources(IHasMediaSources item, CancellationToken cancellationToken) { + var jobItemResult = _syncManager.GetJobItems(new SyncJobItemQuery + { + AddMetadata = false, + Statuses = new List<SyncJobItemStatus> { SyncJobItemStatus.Synced }, + ItemId = item.Id.ToString("N") + }); + + var jobItems = jobItemResult + .Items + .Where(i => true); + return new List<MediaSourceInfo>(); } } |
