< Summary - Jellyfin

Information
Class: MediaBrowser.Providers.Trickplay.TrickplayImagesTask
Assembly: MediaBrowser.Providers
File(s): /srv/git/jellyfin/MediaBrowser.Providers/Trickplay/TrickplayImagesTask.cs
Line coverage
82%
Covered lines: 14
Uncovered lines: 3
Coverable lines: 17
Total lines: 118
Line coverage: 82.3%
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%11100%
get_Description()100%210%
get_Key()100%210%
get_Category()100%210%
GetDefaultTriggers()100%11100%

File(s)

/srv/git/jellyfin/MediaBrowser.Providers/Trickplay/TrickplayImagesTask.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 TrickplayImagesTask.
 18/// </summary>
 19public class TrickplayImagesTask : IScheduledTask
 20{
 21    private const int QueryPageLimit = 100;
 22
 23    private readonly ILogger<TrickplayImagesTask> _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="TrickplayImagesTask"/> 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 TrickplayImagesTask(
 36        ILogger<TrickplayImagesTask> 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 />
 2248    public string Name => _localization.GetLocalizedString("TaskRefreshTrickplayImages");
 49
 50    /// <inheritdoc />
 051    public string Description => _localization.GetLocalizedString("TaskRefreshTrickplayImagesDescription");
 52
 53    /// <inheritdoc />
 054    public string Key => "RefreshTrickplayImages";
 55
 56    /// <inheritdoc />
 057    public string Category => _localization.GetLocalizedString("TasksLibraryCategory");
 58
 59    /// <inheritdoc />
 60    public IEnumerable<TaskTriggerInfo> GetDefaultTriggers()
 61    {
 2262        return new[]
 2263        {
 2264            new TaskTriggerInfo
 2265            {
 2266                Type = TaskTriggerInfo.TriggerDaily,
 2267                TimeOfDayTicks = TimeSpan.FromHours(3).Ticks
 2268            }
 2269        };
 70    }
 71
 72    /// <inheritdoc />
 73    public async Task ExecuteAsync(IProgress<double> progress, CancellationToken cancellationToken)
 74    {
 75        var query = new InternalItemsQuery
 76        {
 77            MediaTypes = new[] { MediaType.Video },
 78            SourceTypes = new[] { SourceType.Library },
 79            IsVirtualItem = false,
 80            IsFolder = false,
 81            Recursive = true,
 82            Limit = QueryPageLimit
 83        };
 84
 85        var numberOfVideos = _libraryManager.GetCount(query);
 86
 87        var startIndex = 0;
 88        var numComplete = 0;
 89
 90        while (startIndex < numberOfVideos)
 91        {
 92            query.StartIndex = startIndex;
 93            var videos = _libraryManager.GetItemList(query).OfType<Video>();
 94
 95            foreach (var video in videos)
 96            {
 97                cancellationToken.ThrowIfCancellationRequested();
 98
 99                try
 100                {
 101                    var libraryOptions = _libraryManager.GetLibraryOptions(video);
 102                    await _trickplayManager.RefreshTrickplayDataAsync(video, false, libraryOptions, cancellationToken).C
 103                }
 104                catch (Exception ex)
 105                {
 106                    _logger.LogError(ex, "Error creating trickplay files for {ItemName}", video.Name);
 107                }
 108
 109                numComplete++;
 110                progress.Report(100d * numComplete / numberOfVideos);
 111            }
 112
 113            startIndex += QueryPageLimit;
 114        }
 115
 116        progress.Report(100);
 117    }
 118}