diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Channels')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Channels/ChannelManager.cs | 42 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs | 25 |
2 files changed, 35 insertions, 32 deletions
diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs index 23c1522b5..c66db51db 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs +++ b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs @@ -730,10 +730,6 @@ namespace MediaBrowser.Server.Implementations.Channels public async Task<QueryResult<BaseItem>> GetAllMediaInternal(AllChannelMediaQuery query, CancellationToken cancellationToken) { - var user = string.IsNullOrWhiteSpace(query.UserId) - ? null - : _userManager.GetUserById(query.UserId); - var channels = GetAllChannels(); if (query.ChannelIds.Length > 0) @@ -745,9 +741,6 @@ namespace MediaBrowser.Server.Implementations.Channels .ToArray(); } - // Avoid implicitly captured closure - var userId = query.UserId; - var tasks = channels .Select(async i => { @@ -757,7 +750,14 @@ namespace MediaBrowser.Server.Implementations.Channels { try { - var result = await GetAllItems(indexable, i, userId, cancellationToken).ConfigureAwait(false); + var result = await GetAllItems(indexable, i, new InternalAllChannelMediaQuery + { + UserId = query.UserId, + ContentTypes = query.ContentTypes, + ExtraTypes = query.ExtraTypes, + TrailerTypes = query.TrailerTypes + + }, cancellationToken).ConfigureAwait(false); return new Tuple<IChannel, ChannelItemResult>(i, result); } @@ -777,21 +777,6 @@ namespace MediaBrowser.Server.Implementations.Channels .SelectMany(i => i.Item2.Items.Select(m => new Tuple<IChannel, ChannelItemInfo>(i.Item1, m))) .OrderBy(i => i.Item2.Name); - if (query.ContentTypes.Length > 0) - { - // Avoid implicitly captured closure - var contentTypes = query.ContentTypes; - - items = items.Where(i => contentTypes.Contains(i.Item2.ContentType)); - } - if (query.ExtraTypes.Length > 0) - { - // Avoid implicitly captured closure - var contentTypes = query.ExtraTypes; - - items = items.Where(i => contentTypes.Contains(i.Item2.ExtraType)); - } - if (query.StartIndex.HasValue) { items = items.Skip(query.StartIndex.Value); @@ -847,10 +832,11 @@ namespace MediaBrowser.Server.Implementations.Channels return result; } - private async Task<ChannelItemResult> GetAllItems(IIndexableChannel indexable, IChannel channel, string userId, CancellationToken cancellationToken) + private async Task<ChannelItemResult> GetAllItems(IIndexableChannel indexable, IChannel channel, InternalAllChannelMediaQuery query, CancellationToken cancellationToken) { var cacheLength = CacheLength; - var cachePath = GetChannelDataCachePath(channel, userId, "channelmanager-allitems", null, false); + var folderId = _jsonSerializer.SerializeToString(query).GetMD5().ToString("N"); + var cachePath = GetChannelDataCachePath(channel, query.UserId, folderId, null, false); try { @@ -888,11 +874,7 @@ namespace MediaBrowser.Server.Implementations.Channels } - var result = await indexable.GetAllMedia(new InternalAllChannelMediaQuery - { - UserId = userId - - }, cancellationToken).ConfigureAwait(false); + var result = await indexable.GetAllMedia(query, cancellationToken).ConfigureAwait(false); CacheResponse(result, cachePath); diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs b/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs index 6df12e669..1dff669ae 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs +++ b/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs @@ -136,22 +136,43 @@ namespace MediaBrowser.Server.Implementations.Channels totalCount = result.TotalRecordCount; } + progress.Report(50); + if (currentRefreshLevel < maxRefreshLevel) { + var numComplete = 0; + var numItems = folderItems.Count; + foreach (var folder in folderItems) { try { - var innerProgress = new Progress<double>(); - + var innerProgress = new ActionableProgress<double>(); + + var startingNumberComplete = numComplete; + innerProgress.RegisterAction(p => + { + double innerPercent = startingNumberComplete; + innerPercent += (p / 100); + innerPercent /= numItems; + progress.Report((innerPercent * 50) + 50); + }); + await GetAllItems(user, channelId, folder, currentRefreshLevel + 1, maxRefreshLevel, innerProgress, cancellationToken).ConfigureAwait(false); } catch (Exception ex) { _logger.ErrorException("Error getting channel content", ex); } + + numComplete++; + double percent = numComplete; + percent /= numItems; + progress.Report(percent * 100); } } + + progress.Report(100); } } } |
