< Summary - Jellyfin

Information
Class: Emby.Server.Implementations.Images.DynamicImageProvider
Assembly: Emby.Server.Implementations
File(s): /srv/git/jellyfin/Emby.Server.Implementations/Images/DynamicImageProvider.cs
Line coverage
4%
Covered lines: 3
Uncovered lines: 71
Coverable lines: 74
Total lines: 137
Line coverage: 4%
Branch coverage
0%
Covered branches: 0
Total branches: 20
Branch coverage: 0%
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%
GetItemsWithImages(...)0%156120%
Supports(...)0%620%
IsUsingCollectionStrip(...)0%2040%
CreateImage(...)0%620%

File(s)

/srv/git/jellyfin/Emby.Server.Implementations/Images/DynamicImageProvider.cs

#LineLine coverage
 1#nullable disable
 2
 3#pragma warning disable CS1591
 4
 5using System;
 6using System.Collections.Generic;
 7using System.IO;
 8using System.Linq;
 9using Jellyfin.Data.Enums;
 10using Jellyfin.Extensions;
 11using MediaBrowser.Common.Configuration;
 12using MediaBrowser.Controller.Drawing;
 13using MediaBrowser.Controller.Dto;
 14using MediaBrowser.Controller.Entities;
 15using MediaBrowser.Controller.Entities.Audio;
 16using MediaBrowser.Controller.Entities.TV;
 17using MediaBrowser.Controller.Library;
 18using MediaBrowser.Controller.Providers;
 19using MediaBrowser.Model.Entities;
 20using MediaBrowser.Model.IO;
 21
 22namespace Emby.Server.Implementations.Images
 23{
 24    public class DynamicImageProvider : BaseDynamicImageProvider<UserView>
 25    {
 26        private readonly IUserManager _userManager;
 27
 28        public DynamicImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicat
 2229            : base(fileSystem, providerManager, applicationPaths, imageProcessor)
 30        {
 2231            _userManager = userManager;
 2232        }
 33
 34        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
 35        {
 036            var view = (UserView)item;
 37
 038            var isUsingCollectionStrip = IsUsingCollectionStrip(view);
 039            var recursive = isUsingCollectionStrip && view?.ViewType is not null && view.ViewType != CollectionType.boxs
 40
 041            var result = view.GetItemList(new InternalItemsQuery
 042            {
 043                User = view.UserId.HasValue ? _userManager.GetUserById(view.UserId.Value) : null,
 044                CollapseBoxSetItems = false,
 045                Recursive = recursive,
 046                ExcludeItemTypes = new[] { BaseItemKind.UserView, BaseItemKind.CollectionFolder, BaseItemKind.Person },
 047                DtoOptions = new DtoOptions(false)
 048            });
 49
 050            var items = result.Select(i =>
 051            {
 052                if (i is Episode episode)
 053                {
 054                    var series = episode.Series;
 055                    if (series is not null)
 056                    {
 057                        return series;
 058                    }
 059
 060                    return episode;
 061                }
 062
 063                if (i is Season season)
 064                {
 065                    var series = season.Series;
 066                    if (series is not null)
 067                    {
 068                        return series;
 069                    }
 070
 071                    return season;
 072                }
 073
 074                if (i is Audio audio)
 075                {
 076                    var album = audio.AlbumEntity;
 077                    if (album is not null && album.HasImage(ImageType.Primary))
 078                    {
 079                        return album;
 080                    }
 081                }
 082
 083                return i;
 084            }).DistinctBy(x => x.Id);
 85
 86            List<BaseItem> returnItems;
 087            if (isUsingCollectionStrip)
 88            {
 089                returnItems = items
 090                    .Where(i => i.HasImage(ImageType.Primary) || i.HasImage(ImageType.Thumb))
 091                    .ToList();
 092                returnItems.Shuffle();
 093                return returnItems;
 94            }
 95
 096            returnItems = items
 097                .Where(i => i.HasImage(ImageType.Primary))
 098                .ToList();
 099            returnItems.Shuffle();
 0100            return returnItems;
 101        }
 102
 103        protected override bool Supports(BaseItem item)
 104        {
 0105            if (item is UserView view)
 106            {
 0107                return IsUsingCollectionStrip(view);
 108            }
 109
 0110            return false;
 111        }
 112
 113        private static bool IsUsingCollectionStrip(UserView view)
 114        {
 0115            CollectionType[] collectionStripViewTypes =
 0116            {
 0117                CollectionType.movies,
 0118                CollectionType.tvshows,
 0119                CollectionType.playlists
 0120            };
 121
 0122            return view?.ViewType is not null && collectionStripViewTypes.Contains(view.ViewType.Value);
 123        }
 124
 125        protected override string CreateImage(BaseItem item, IReadOnlyCollection<BaseItem> itemsWithImages, string outpu
 126        {
 0127            if (itemsWithImages.Count == 0)
 128            {
 0129                return null;
 130            }
 131
 0132            var outputPath = Path.ChangeExtension(outputPathWithoutExtension, ".png");
 133
 0134            return CreateThumbCollage(item, itemsWithImages, outputPath, 960, 540);
 135        }
 136    }
 137}