mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-07-19 04:34:18 +01:00
update channels
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user