< Summary - Jellyfin

Information
Class: Emby.Server.Implementations.Images.CollectionFolderImageProvider
Assembly: Emby.Server.Implementations
File(s): /srv/git/jellyfin/Emby.Server.Implementations/Images/CollectionFolderImageProvider.cs
Line coverage
81%
Covered lines: 22
Uncovered lines: 5
Coverable lines: 27
Total lines: 80
Line coverage: 81.4%
Branch coverage
50%
Covered branches: 3
Total branches: 6
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100 5/1/2026 - 12:13:05 AM Line coverage: 57.1% (24/42) Branch coverage: 31.2% (5/16) Total lines: 1086/30/2026 - 12:15:32 AM Line coverage: 84% (21/25) Branch coverage: 50% (2/4) Total lines: 747/21/2026 - 12:16:33 AM Line coverage: 81.4% (22/27) Branch coverage: 50% (3/6) Total lines: 80 5/1/2026 - 12:13:05 AM Line coverage: 57.1% (24/42) Branch coverage: 31.2% (5/16) Total lines: 1086/30/2026 - 12:15:32 AM Line coverage: 84% (21/25) Branch coverage: 50% (2/4) Total lines: 747/21/2026 - 12:16:33 AM Line coverage: 81.4% (22/27) Branch coverage: 50% (3/6) Total lines: 80

Coverage delta

Coverage delta 27 -27

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
GetItemsWithImages(...)50%2293.75%
Supports(...)100%11100%
CreateImage(...)50%5466.66%
HasChangedByDate(...)100%210%

File(s)

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

#LineLine coverage
 1#nullable disable
 2
 3#pragma warning disable CS1591
 4
 5using System;
 6using System.Collections.Generic;
 7using System.IO;
 8using Jellyfin.Api.Extensions;
 9using Jellyfin.Data.Enums;
 10using Jellyfin.Database.Implementations.Enums;
 11using MediaBrowser.Common.Configuration;
 12using MediaBrowser.Controller.Drawing;
 13using MediaBrowser.Controller.Dto;
 14using MediaBrowser.Controller.Entities;
 15using MediaBrowser.Controller.Providers;
 16using MediaBrowser.Model.Entities;
 17using MediaBrowser.Model.IO;
 18
 19namespace Emby.Server.Implementations.Images
 20{
 21    public class CollectionFolderImageProvider : BaseDynamicImageProvider<CollectionFolder>
 22    {
 2223        public CollectionFolderImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths
 24        {
 2225        }
 26
 27        protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
 28        {
 1729            var view = (CollectionFolder)item;
 1730            var viewType = view.CollectionType;
 1731            var includeItemTypes = DtoExtensions.GetBaseItemKindsForCollectionType(viewType);
 1732            var recursive = viewType != CollectionType.playlists;
 33
 1734            if (viewType == CollectionType.music)
 35            {
 36                // Music albums usually don't have dedicated backdrops, so use artist instead
 037                includeItemTypes = [BaseItemKind.MusicArtist];
 38            }
 39
 1740            return view.GetItemList(new InternalItemsQuery
 1741            {
 1742                CollapseBoxSetItems = false,
 1743                Recursive = recursive,
 1744                DtoOptions = new DtoOptions(false),
 1745                ImageTypes = [ImageType.Primary],
 1746                Limit = 8,
 1747                OrderBy = [(ItemSortBy.Random, SortOrder.Ascending)],
 1748                IncludeItemTypes = includeItemTypes
 1749            });
 50        }
 51
 52        protected override bool Supports(BaseItem item)
 53        {
 1754            return item is CollectionFolder;
 55        }
 56
 57        protected override string CreateImage(BaseItem item, IReadOnlyCollection<BaseItem> itemsWithImages, string outpu
 58        {
 259            var outputPath = Path.ChangeExtension(outputPathWithoutExtension, ".png");
 60
 261            if (imageType == ImageType.Primary)
 62            {
 263                if (itemsWithImages.Count == 0)
 64                {
 265                    return null;
 66                }
 67
 068                return CreateThumbCollage(item, itemsWithImages, outputPath, 960, 540);
 69            }
 70
 071            return base.CreateImage(item, itemsWithImages, outputPath, imageType, imageIndex);
 72        }
 73
 74        protected override bool HasChangedByDate(BaseItem item, ItemImageInfo image)
 75        {
 076            var age = DateTime.UtcNow - image.DateModified;
 077            return age.TotalDays > 7;
 78        }
 79    }
 80}