diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-07-29 23:31:35 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-07-29 23:31:35 -0400 |
| commit | 51e964dae394ae4a211482d562dbc28e79c00c3c (patch) | |
| tree | 8cc6f351eeb9ceb2343cd818e84b26a94f072a62 /MediaBrowser.Server.Implementations/Channels/ChannelManager.cs | |
| parent | 063675bb07f78f99738a3ada061f3e2c16c9cda0 (diff) | |
support channels with dlna
Diffstat (limited to 'MediaBrowser.Server.Implementations/Channels/ChannelManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Channels/ChannelManager.cs | 67 |
1 files changed, 58 insertions, 9 deletions
diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs index 28cbd20e0..c7ca6bb30 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs +++ b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs @@ -106,7 +106,7 @@ namespace MediaBrowser.Server.Implementations.Channels .OrderBy(i => i.Name); } - public Task<QueryResult<BaseItemDto>> GetChannels(ChannelQuery query, CancellationToken cancellationToken) + public Task<QueryResult<Channel>> GetChannelsInternal(ChannelQuery query, CancellationToken cancellationToken) { var user = string.IsNullOrWhiteSpace(query.UserId) ? null @@ -148,21 +148,40 @@ namespace MediaBrowser.Server.Implementations.Channels all = all.Take(query.Limit.Value).ToList(); } + var returnItems = all.ToArray(); + + var result = new QueryResult<Channel> + { + Items = returnItems, + TotalRecordCount = totalCount + }; + + return Task.FromResult(result); + } + + public async Task<QueryResult<BaseItemDto>> GetChannels(ChannelQuery query, CancellationToken cancellationToken) + { + var user = string.IsNullOrWhiteSpace(query.UserId) + ? null + : _userManager.GetUserById(new Guid(query.UserId)); + + var internalResult = await GetChannelsInternal(query, cancellationToken).ConfigureAwait(false); + // Get everything var fields = Enum.GetNames(typeof(ItemFields)) .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)) .ToList(); - var returnItems = all.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) + var returnItems = internalResult.Items.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToArray(); var result = new QueryResult<BaseItemDto> { Items = returnItems, - TotalRecordCount = totalCount + TotalRecordCount = internalResult.TotalRecordCount }; - return Task.FromResult(result); + return result; } public async Task RefreshChannels(IProgress<double> progress, CancellationToken cancellationToken) @@ -846,7 +865,7 @@ namespace MediaBrowser.Server.Implementations.Channels } } - public async Task<QueryResult<BaseItemDto>> GetChannelItems(ChannelItemQuery query, CancellationToken cancellationToken) + public async Task<QueryResult<BaseItem>> GetChannelItemsInternal(ChannelItemQuery query, CancellationToken cancellationToken) { // Get the internal channel entity var channel = GetChannel(query.ChannelId); @@ -868,6 +887,12 @@ namespace MediaBrowser.Server.Implementations.Channels throw new ArgumentException(string.Format("{0} channel only supports a maximum of {1} records at a time.", channel.Name, channelInfo.MaxPageSize.Value)); } providerLimit = query.Limit; + + // This will cause some providers to fail + if (providerLimit == 0) + { + providerLimit = 1; + } } var user = string.IsNullOrWhiteSpace(query.UserId) @@ -913,6 +938,31 @@ namespace MediaBrowser.Server.Implementations.Channels return await GetReturnItems(internalItems, providerTotalRecordCount, user, query, cancellationToken).ConfigureAwait(false); } + public async Task<QueryResult<BaseItemDto>> GetChannelItems(ChannelItemQuery query, CancellationToken cancellationToken) + { + var user = string.IsNullOrWhiteSpace(query.UserId) + ? null + : _userManager.GetUserById(new Guid(query.UserId)); + + var internalResult = await GetChannelItemsInternal(query, cancellationToken).ConfigureAwait(false); + + // Get everything + var fields = Enum.GetNames(typeof(ItemFields)) + .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)) + .ToList(); + + var returnItems = internalResult.Items.Select(i => _dtoService.GetBaseItemDto(i, fields, user)) + .ToArray(); + + var result = new QueryResult<BaseItemDto> + { + Items = returnItems, + TotalRecordCount = internalResult.TotalRecordCount + }; + + return result; + } + private readonly SemaphoreSlim _resourcePool = new SemaphoreSlim(1, 1); private async Task<ChannelItemResult> GetChannelItems(IChannel channel, User user, @@ -1054,7 +1104,7 @@ namespace MediaBrowser.Server.Implementations.Channels filename + ".json"); } - private async Task<QueryResult<BaseItemDto>> GetReturnItems(IEnumerable<BaseItem> items, int? totalCountFromProvider, User user, ChannelItemQuery query, CancellationToken cancellationToken) + private async Task<QueryResult<BaseItem>> GetReturnItems(IEnumerable<BaseItem> items, int? totalCountFromProvider, User user, ChannelItemQuery query, CancellationToken cancellationToken) { items = ApplyFilters(items, query.Filters, user); @@ -1078,10 +1128,9 @@ namespace MediaBrowser.Server.Implementations.Channels await RefreshIfNeeded(all, cancellationToken).ConfigureAwait(false); - var returnItemArray = all.Select(i => _dtoService.GetBaseItemDto(i, query.Fields, user)) - .ToArray(); + var returnItemArray = all.ToArray(); - return new QueryResult<BaseItemDto> + return new QueryResult<BaseItem> { Items = returnItemArray, TotalRecordCount = totalCount |
