< Summary - Jellyfin

Information
Class: MediaBrowser.Providers.Trickplay.TrickplayMoveImagesTask
Assembly: MediaBrowser.Providers
File(s): /srv/git/jellyfin/MediaBrowser.Providers/Trickplay/TrickplayMoveImagesTask.cs
Line coverage
60%
Covered lines: 6
Uncovered lines: 4
Coverable lines: 10
Total lines: 110
Line coverage: 60%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_Name()100%210%
get_Description()100%210%
get_Key()100%210%
get_Category()100%210%
GetDefaultTriggers()100%11100%

File(s)

/srv/git/jellyfin/MediaBrowser.Providers/Trickplay/TrickplayMoveImagesTask.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using System.Threading;
 5using System.Threading.Tasks;
 6using Jellyfin.Data.Enums;
 7using MediaBrowser.Controller.Entities;
 8using MediaBrowser.Controller.Library;
 9using MediaBrowser.Controller.Trickplay;
 10using MediaBrowser.Model.Globalization;
 11using MediaBrowser.Model.Tasks;
 12using Microsoft.Extensions.Logging;
 13
 14namespace MediaBrowser.Providers.Trickplay;
 15
 16/// <summary>
 17/// Class TrickplayMoveImagesTask.
 18/// </summary>
 19public class TrickplayMoveImagesTask : IScheduledTask
 20{
 21    private const int QueryPageLimit = 100;
 22
 23    private readonly ILogger<TrickplayMoveImagesTask> _logger;
 24    private readonly ILibraryManager _libraryManager;
 25    private readonly ILocalizationManager _localization;
 26    private readonly ITrickplayManager _trickplayManager;
 27
 28    /// <summary>
 29    /// Initializes a new instance of the <see cref="TrickplayMoveImagesTask"/> class.
 30    /// </summary>
 31    /// <param name="logger">The logger.</param>
 32    /// <param name="libraryManager">The library manager.</param>
 33    /// <param name="localization">The localization manager.</param>
 34    /// <param name="trickplayManager">The trickplay manager.</param>
 35    public TrickplayMoveImagesTask(
 36        ILogger<TrickplayMoveImagesTask> logger,
 37        ILibraryManager libraryManager,
 38        ILocalizationManager localization,
 39        ITrickplayManager trickplayManager)
 40    {
 2241        _libraryManager = libraryManager;
 2242        _logger = logger;
 2243        _localization = localization;
 2244        _trickplayManager = trickplayManager;
 2245    }
 46
 47    /// <inheritdoc />
 048    public string Name => _localization.GetLocalizedString("TaskMoveTrickplayImages");
 49
 50    /// <inheritdoc />
 051    public string Description => _localization.GetLocalizedString("TaskMoveTrickplayImagesDescription");
 52
 53    /// <inheritdoc />
 054    public string Key => "MoveTrickplayImages";
 55
 56    /// <inheritdoc />
 057    public string Category => _localization.GetLocalizedString("TasksMaintenanceCategory");
 58
 59    /// <inheritdoc />
 2260    public IEnumerable<TaskTriggerInfo> GetDefaultTriggers() => [];
 61
 62    /// <inheritdoc />
 63    public async Task ExecuteAsync(IProgress<double> progress, CancellationToken cancellationToken)
 64    {
 65        var trickplayItems = await _trickplayManager.GetTrickplayItemsAsync().ConfigureAwait(false);
 66        var query = new InternalItemsQuery
 67        {
 68            MediaTypes = [MediaType.Video],
 69            SourceTypes = [SourceType.Library],
 70            IsVirtualItem = false,
 71            IsFolder = false,
 72            Recursive = true,
 73            Limit = QueryPageLimit
 74        };
 75
 76        var numberOfVideos = _libraryManager.GetCount(query);
 77
 78        var startIndex = 0;
 79        var numComplete = 0;
 80
 81        while (startIndex < numberOfVideos)
 82        {
 83            query.StartIndex = startIndex;
 84            var videos = _libraryManager.GetItemList(query).OfType<Video>().ToList();
 85            videos.RemoveAll(i => !trickplayItems.Contains(i.Id));
 86
 87            foreach (var video in videos)
 88            {
 89                cancellationToken.ThrowIfCancellationRequested();
 90
 91                try
 92                {
 93                    var libraryOptions = _libraryManager.GetLibraryOptions(video);
 94                    await _trickplayManager.MoveGeneratedTrickplayDataAsync(video, libraryOptions, cancellationToken).Co
 95                }
 96                catch (Exception ex)
 97                {
 98                    _logger.LogError(ex, "Error moving trickplay files for {ItemName}", video.Name);
 99                }
 100
 101                numComplete++;
 102                progress.Report(100d * numComplete / numberOfVideos);
 103            }
 104
 105            startIndex += QueryPageLimit;
 106        }
 107
 108        progress.Report(100);
 109    }
 110}