aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Images
diff options
context:
space:
mode:
authorShadowghost <Shadowghost@users.noreply.github.com>2026-09-27 16:30:52 -0400
committerCody Robibero <cody@robibe.ro>2026-09-27 16:30:52 -0400
commite31699cd3eee6d90d12f6308bdb85aecba2a1eaf (patch)
tree7a85a206558e3dc751236c9af94ddb758e75bd58 /Emby.Server.Implementations/Images
parent0d1483e2ddb43faf7904ef09fb022a4100397260 (diff)
Backport pull request #18148 from jellyfin/release-12.z
Scope the music library cover image to that library's artists Original-merge: c60c5e0516da24b768122ebbee20b0ded887e517 Merged-by: crobibero <cody@robibe.ro> Backported-by: Cody Robibero <cody@robibe.ro>
Diffstat (limited to 'Emby.Server.Implementations/Images')
-rw-r--r--Emby.Server.Implementations/Images/CollectionFolderImageProvider.cs27
1 files changed, 24 insertions, 3 deletions
diff --git a/Emby.Server.Implementations/Images/CollectionFolderImageProvider.cs b/Emby.Server.Implementations/Images/CollectionFolderImageProvider.cs
index 7cae2a671b..1d3cc3d383 100644
--- a/Emby.Server.Implementations/Images/CollectionFolderImageProvider.cs
+++ b/Emby.Server.Implementations/Images/CollectionFolderImageProvider.cs
@@ -5,6 +5,7 @@
using System;
using System.Collections.Generic;
using System.IO;
+using System.Linq;
using Jellyfin.Api.Extensions;
using Jellyfin.Data.Enums;
using Jellyfin.Database.Implementations.Enums;
@@ -12,6 +13,7 @@ using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.IO;
@@ -20,8 +22,11 @@ namespace Emby.Server.Implementations.Images
{
public class CollectionFolderImageProvider : BaseDynamicImageProvider<CollectionFolder>
{
- public CollectionFolderImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
+ private readonly ILibraryManager _libraryManager;
+
+ public CollectionFolderImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
{
+ _libraryManager = libraryManager;
}
protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
@@ -33,8 +38,11 @@ namespace Emby.Server.Implementations.Images
if (viewType == CollectionType.music)
{
- // Music albums usually don't have dedicated backdrops, so use artist instead
- includeItemTypes = [BaseItemKind.MusicArtist];
+ // Music albums usually don't have dedicated backdrops, so use artist instead.
+ // Artists carry no library of their own, so an item query for them is not
+ // restricted to this library and would collage the artists of every music
+ // library. Resolve them through the tracks that credit them instead.
+ return GetArtistsWithImages(view);
}
return view.GetItemList(new InternalItemsQuery
@@ -49,6 +57,19 @@ namespace Emby.Server.Implementations.Images
});
}
+ private IReadOnlyList<BaseItem> GetArtistsWithImages(CollectionFolder view)
+ {
+ return _libraryManager.GetAllArtists(new InternalItemsQuery
+ {
+ AncestorIds = [view.Id],
+ DtoOptions = new DtoOptions(false),
+ EnableTotalRecordCount = false,
+ ImageTypes = [ImageType.Primary],
+ Limit = 8,
+ OrderBy = [(ItemSortBy.Random, SortOrder.Ascending)]
+ }).Items.Select(i => i.Item).ToArray();
+ }
+
protected override bool Supports(BaseItem item)
{
return item is CollectionFolder;