< Summary - Jellyfin

Information
Class: Emby.Server.Implementations.Library.SplashscreenPostScanTask
Assembly: Emby.Server.Implementations
File(s): /srv/git/jellyfin/Emby.Server.Implementations/Library/SplashscreenPostScanTask.cs
Line coverage
100%
Covered lines: 26
Uncovered lines: 0
Coverable lines: 26
Total lines: 79
Line coverage: 100%
Branch coverage
100%
Covered branches: 2
Total branches: 2
Branch coverage: 100%
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%
Run(...)100%22100%
GetItemsWithImageType(...)100%11100%

File(s)

/srv/git/jellyfin/Emby.Server.Implementations/Library/SplashscreenPostScanTask.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.Drawing;
 8using MediaBrowser.Controller.Dto;
 9using MediaBrowser.Controller.Entities;
 10using MediaBrowser.Controller.Library;
 11using MediaBrowser.Controller.Persistence;
 12using MediaBrowser.Model.Entities;
 13using MediaBrowser.Model.Querying;
 14using Microsoft.Extensions.Logging;
 15
 16namespace Emby.Server.Implementations.Library;
 17
 18/// <summary>
 19/// The splashscreen post scan task.
 20/// </summary>
 21public class SplashscreenPostScanTask : ILibraryPostScanTask
 22{
 23    private readonly IItemRepository _itemRepository;
 24    private readonly IImageEncoder _imageEncoder;
 25    private readonly ILogger<SplashscreenPostScanTask> _logger;
 26
 27    /// <summary>
 28    /// Initializes a new instance of the <see cref="SplashscreenPostScanTask"/> class.
 29    /// </summary>
 30    /// <param name="itemRepository">Instance of the <see cref="IItemRepository"/> interface.</param>
 31    /// <param name="imageEncoder">Instance of the <see cref="IImageEncoder"/> interface.</param>
 32    /// <param name="logger">Instance of the <see cref="ILogger{SplashscreenPostScanTask}"/> interface.</param>
 33    public SplashscreenPostScanTask(
 34        IItemRepository itemRepository,
 35        IImageEncoder imageEncoder,
 36        ILogger<SplashscreenPostScanTask> logger)
 37    {
 2238        _itemRepository = itemRepository;
 2239        _imageEncoder = imageEncoder;
 2240        _logger = logger;
 2241    }
 42
 43    /// <inheritdoc />
 44    public Task Run(IProgress<double> progress, CancellationToken cancellationToken)
 45    {
 1946        var posters = GetItemsWithImageType(ImageType.Primary).Select(x => x.GetImages(ImageType.Primary).First().Path).
 1947        var backdrops = GetItemsWithImageType(ImageType.Thumb).Select(x => x.GetImages(ImageType.Thumb).First().Path).To
 1948        if (backdrops.Count == 0)
 49        {
 50            // Thumb images fit better because they include the title in the image but are not provided with TMDb.
 51            // Using backdrops as a fallback to generate an image at all
 1952            _logger.LogDebug("No thumb images found. Using backdrops to generate splashscreen");
 1953            backdrops = GetItemsWithImageType(ImageType.Backdrop).Select(x => x.GetImages(ImageType.Backdrop).First().Pa
 54        }
 55
 1956        _imageEncoder.CreateSplashscreen(posters, backdrops);
 1957        return Task.CompletedTask;
 58    }
 59
 60    private IReadOnlyList<BaseItem> GetItemsWithImageType(ImageType imageType)
 61    {
 62        // TODO make included libraries configurable
 5763        return _itemRepository.GetItemList(new InternalItemsQuery
 5764        {
 5765            CollapseBoxSetItems = false,
 5766            Recursive = true,
 5767            DtoOptions = new DtoOptions(false),
 5768            ImageTypes = new[] { imageType },
 5769            Limit = 30,
 5770            // TODO max parental rating configurable
 5771            MaxParentalRating = 10,
 5772            OrderBy = new[]
 5773            {
 5774                (ItemSortBy.Random, SortOrder.Ascending)
 5775            },
 5776            IncludeItemTypes = new[] { BaseItemKind.Movie, BaseItemKind.Series }
 5777        });
 78    }
 79}