aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Channels
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/Channels')
-rw-r--r--MediaBrowser.Server.Implementations/Channels/ChannelManager.cs42
-rw-r--r--MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs25
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);
}
}
}