using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Jellyfin.Data.Enums; using Jellyfin.Database.Implementations.Enums; using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Configuration; namespace Emby.Server.Implementations.Library.SimilarItems; /// /// Provides similar items for music artists. /// public class MusicArtistSimilarItemsProvider : ILocalSimilarItemsProvider { private readonly ILibraryManager _libraryManager; /// /// Initializes a new instance of the class. /// /// The library manager. public MusicArtistSimilarItemsProvider(ILibraryManager libraryManager) { _libraryManager = libraryManager; } /// public string Name => "Local Genre/Tag"; /// public MetadataPluginType Type => MetadataPluginType.LocalSimilarityProvider; /// public Task> GetSimilarItemsAsync(MusicArtist item, SimilarItemsQuery query, CancellationToken cancellationToken) { var internalQuery = new InternalItemsQuery(query.User) { Genres = item.Genres, Tags = item.Tags, Limit = query.Limit, DtoOptions = query.DtoOptions ?? new DtoOptions(), ExcludeItemIds = [.. query.ExcludeItemIds], ExcludeArtistIds = [.. query.ExcludeArtistIds], IncludeItemTypes = [BaseItemKind.MusicArtist], EnableGroupByMetadataKey = false, EnableTotalRecordCount = true, OrderBy = [(ItemSortBy.Random, SortOrder.Ascending)] }; return Task.FromResult(_libraryManager.GetItemList(internalQuery)); } }