< 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
84%
Covered lines: 21
Uncovered lines: 4
Coverable lines: 25
Total lines: 74
Line coverage: 84%
Branch coverage
50%
Covered branches: 2
Total branches: 4
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100 3/26/2026 - 12:14:14 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: 74 3/26/2026 - 12:14:14 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: 74

Coverage delta

Coverage delta 27 -27

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
GetItemsWithImages(...)100%11100%
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        {
 1429            var view = (CollectionFolder)item;
 1430            var viewType = view.CollectionType;
 1431            var includeItemTypes = DtoExtensions.GetBaseItemKindsForCollectionType(viewType);
 1432            var recursive = viewType != CollectionType.playlists;
 33
 1434            return view.GetItemList(new InternalItemsQuery
 1435            {
 1436                CollapseBoxSetItems = false,
 1437                Recursive = recursive,
 1438                DtoOptions = new DtoOptions(false),
 1439                ImageTypes = [ImageType.Primary],
 1440                Limit = 8,
 1441                OrderBy = [(ItemSortBy.Random, SortOrder.Ascending)],
 1442                IncludeItemTypes = includeItemTypes
 1443            });
 44        }
 45
 46        protected override bool Supports(BaseItem item)
 47        {
 1448            return item is CollectionFolder;
 49        }
 50
 51        protected override string CreateImage(BaseItem item, IReadOnlyCollection<BaseItem> itemsWithImages, string outpu
 52        {
 253            var outputPath = Path.ChangeExtension(outputPathWithoutExtension, ".png");
 54
 255            if (imageType == ImageType.Primary)
 56            {
 257                if (itemsWithImages.Count == 0)
 58                {
 259                    return null;
 60                }
 61
 062                return CreateThumbCollage(item, itemsWithImages, outputPath, 960, 540);
 63            }
 64
 065            return base.CreateImage(item, itemsWithImages, outputPath, imageType, imageIndex);
 66        }
 67
 68        protected override bool HasChangedByDate(BaseItem item, ItemImageInfo image)
 69        {
 070            var age = DateTime.UtcNow - image.DateModified;
 071            return age.TotalDays > 7;
 72        }
 73    }
 74}