aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Images/CollectionFolderImageProvider.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Server.Implementations/Images/CollectionFolderImageProvider.cs')
-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;