aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Trickplay
diff options
context:
space:
mode:
authorCody Robibero <cody@robibe.ro>2024-09-23 09:09:23 -0600
committerGitHub <noreply@github.com>2024-09-23 09:09:23 -0600
commit3c639c2e80f2a17eea3f5f1a70c1b287bc99aba4 (patch)
tree0d15c42ffee4c02603be75c8dc44863b8e72da02 /MediaBrowser.Providers/Trickplay
parent0539fdc5e3a164b694d12d8d3f8437e2cc5b6457 (diff)
Tweak Trickplay migration for speed (#12643)
Diffstat (limited to 'MediaBrowser.Providers/Trickplay')
-rw-r--r--MediaBrowser.Providers/Trickplay/TrickplayMoveImagesTask.cs51
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);
}