diff options
| author | Nick <20588554+nicknsy@users.noreply.github.com> | 2023-05-18 00:45:12 -0700 |
|---|---|---|
| committer | Nick <20588554+nicknsy@users.noreply.github.com> | 2023-06-22 16:23:52 -0700 |
| commit | f82af0478122d668294affecd21f89fcec69a61d (patch) | |
| tree | 712eb88b6e86cee87ae541347224c5b8977dfac6 | |
| parent | d338253242f3b7996e735b94eacfa9d67ed0913a (diff) | |
Trickplay task pagination
| -rw-r--r-- | MediaBrowser.Providers/Trickplay/TrickplayImagesTask.cs | 52 |
1 files changed, 31 insertions, 21 deletions
diff --git a/MediaBrowser.Providers/Trickplay/TrickplayImagesTask.cs b/MediaBrowser.Providers/Trickplay/TrickplayImagesTask.cs index 8ac7641aa..b090745bf 100644 --- a/MediaBrowser.Providers/Trickplay/TrickplayImagesTask.cs +++ b/MediaBrowser.Providers/Trickplay/TrickplayImagesTask.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Trickplay; @@ -11,6 +10,7 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Tasks; using Microsoft.Extensions.Logging; +using TagLib.Ape; namespace MediaBrowser.Providers.Trickplay; @@ -19,6 +19,8 @@ namespace MediaBrowser.Providers.Trickplay; /// </summary> public class TrickplayImagesTask : IScheduledTask { + private const int QueryPageLimit = 100; + private readonly ILogger<TrickplayImagesTask> _logger; private readonly ILibraryManager _libraryManager; private readonly ILocalizationManager _localization; @@ -71,38 +73,46 @@ public class TrickplayImagesTask : IScheduledTask /// <inheritdoc /> public async Task ExecuteAsync(IProgress<double> progress, CancellationToken cancellationToken) { - var items = _libraryManager.GetItemList(new InternalItemsQuery + var query = new InternalItemsQuery { MediaTypes = new[] { MediaType.Video }, + SourceTypes = new[] { SourceType.Library }, IsVirtualItem = false, IsFolder = false, - Recursive = true - }).OfType<Video>().ToList(); + Recursive = true, + Limit = QueryPageLimit + }; + + var numberOfVideos = _libraryManager.GetCount(query); + var startIndex = 0; var numComplete = 0; - foreach (var item in items) + while (startIndex < numberOfVideos) { - try + query.StartIndex = startIndex; + var videos = _libraryManager.GetItemList(query).OfType<Video>().ToList(); + + foreach (var video in videos) { cancellationToken.ThrowIfCancellationRequested(); - await _trickplayManager.RefreshTrickplayDataAsync(item, false, cancellationToken).ConfigureAwait(false); - } - catch (OperationCanceledException) - { - break; - } - catch (Exception ex) - { - _logger.LogError(ex, "Error creating trickplay files for {ItemName}", item.Name); - } - numComplete++; - double percent = numComplete; - percent /= items.Count; - percent *= 100; + try + { + await _trickplayManager.RefreshTrickplayDataAsync(video, false, cancellationToken).ConfigureAwait(false); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error creating trickplay files for {ItemName}", video.Name); + } - progress.Report(percent); + numComplete++; + progress.Report(100d * numComplete / numberOfVideos); + } + + startIndex += QueryPageLimit; } + + progress.Report(100); } } |
