diff options
| author | Cody Robibero <cody@robibe.ro> | 2024-09-23 09:09:23 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-23 09:09:23 -0600 |
| commit | 3c639c2e80f2a17eea3f5f1a70c1b287bc99aba4 (patch) | |
| tree | 0d15c42ffee4c02603be75c8dc44863b8e72da02 /MediaBrowser.Providers/Trickplay | |
| parent | 0539fdc5e3a164b694d12d8d3f8437e2cc5b6457 (diff) | |
Tweak Trickplay migration for speed (#12643)
Diffstat (limited to 'MediaBrowser.Providers/Trickplay')
| -rw-r--r-- | MediaBrowser.Providers/Trickplay/TrickplayMoveImagesTask.cs | 51 |
1 files changed, 30 insertions, 21 deletions
diff --git a/MediaBrowser.Providers/Trickplay/TrickplayMoveImagesTask.cs b/MediaBrowser.Providers/Trickplay/TrickplayMoveImagesTask.cs index c581fd26c..c0b8a8c75 100644 --- a/MediaBrowser.Providers/Trickplay/TrickplayMoveImagesTask.cs +++ b/MediaBrowser.Providers/Trickplay/TrickplayMoveImagesTask.cs @@ -18,8 +18,6 @@ namespace MediaBrowser.Providers.Trickplay; /// </summary> public class TrickplayMoveImagesTask : IScheduledTask { - private const int QueryPageLimit = 100; - private readonly ILogger<TrickplayMoveImagesTask> _logger; private readonly ILibraryManager _libraryManager; private readonly ILocalizationManager _localization; @@ -62,32 +60,46 @@ public class TrickplayMoveImagesTask : IScheduledTask /// <inheritdoc /> public async Task ExecuteAsync(IProgress<double> progress, CancellationToken cancellationToken) { - var trickplayItems = await _trickplayManager.GetTrickplayItemsAsync().ConfigureAwait(false); - var query = new InternalItemsQuery + const int Limit = 100; + int itemCount = 0, offset = 0, previousCount; + + // This count may not be accurate, but just get something to show progress on the dashboard. + var totalVideoCount = _libraryManager.GetCount(new InternalItemsQuery { MediaTypes = [MediaType.Video], SourceTypes = [SourceType.Library], IsVirtualItem = false, IsFolder = false, - Recursive = true, - Limit = QueryPageLimit - }; - - var numberOfVideos = _libraryManager.GetCount(query); + Recursive = true + }); - var startIndex = 0; - var numComplete = 0; + var trickplayQuery = new InternalItemsQuery + { + MediaTypes = [MediaType.Video], + SourceTypes = [SourceType.Library], + IsVirtualItem = false, + IsFolder = false + }; - while (startIndex < numberOfVideos) + do { - query.StartIndex = startIndex; - var videos = _libraryManager.GetItemList(query).OfType<Video>().ToList(); - videos.RemoveAll(i => !trickplayItems.Contains(i.Id)); + var trickplayInfos = await _trickplayManager.GetTrickplayItemsAsync(Limit, offset).ConfigureAwait(false); + previousCount = trickplayInfos.Count; + offset += Limit; - foreach (var video in videos) + trickplayQuery.ItemIds = trickplayInfos.Select(i => i.ItemId).Distinct().ToArray(); + var items = _libraryManager.GetItemList(trickplayQuery); + foreach (var trickplayInfo in trickplayInfos) { cancellationToken.ThrowIfCancellationRequested(); + var video = items.OfType<Video>().FirstOrDefault(i => i.Id.Equals(trickplayInfo.ItemId)); + if (video is null) + { + continue; + } + + itemCount++; try { var libraryOptions = _libraryManager.GetLibraryOptions(video); @@ -97,13 +109,10 @@ public class TrickplayMoveImagesTask : IScheduledTask { _logger.LogError(ex, "Error moving trickplay files for {ItemName}", video.Name); } - - numComplete++; - progress.Report(100d * numComplete / numberOfVideos); } - startIndex += QueryPageLimit; - } + progress.Report(100d * itemCount / totalVideoCount); + } while (previousCount == Limit); progress.Report(100); } |
