diff options
| author | Bond-009 <bond.009@outlook.com> | 2026-05-15 10:00:53 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-05-15 10:00:53 +0200 |
| commit | 8e602f982f79201cc316f64baf018a5a536d38f6 (patch) | |
| tree | 94af198766ed00d736b31918b709e366f226845b /Emby.Server.Implementations/Library/SimilarItems/AudioSimilarItemsProvider.cs | |
| parent | 097097300a473c7abe9d578169f60c39174345f1 (diff) | |
| parent | 0b209fe66b33bfeed1b1259efba31ceb643c4e0e (diff) | |
Merge pull request #15970 from Shadowghost/similarity
Implement similarity providers
Diffstat (limited to 'Emby.Server.Implementations/Library/SimilarItems/AudioSimilarItemsProvider.cs')
| -rw-r--r-- | Emby.Server.Implementations/Library/SimilarItems/AudioSimilarItemsProvider.cs | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/Emby.Server.Implementations/Library/SimilarItems/AudioSimilarItemsProvider.cs b/Emby.Server.Implementations/Library/SimilarItems/AudioSimilarItemsProvider.cs new file mode 100644 index 0000000000..1cc670b8ee --- /dev/null +++ b/Emby.Server.Implementations/Library/SimilarItems/AudioSimilarItemsProvider.cs @@ -0,0 +1,55 @@ +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; + +/// <summary> +/// Provides similar items for audio tracks. +/// </summary> +public class AudioSimilarItemsProvider : ILocalSimilarItemsProvider<Audio> +{ + private readonly ILibraryManager _libraryManager; + + /// <summary> + /// Initializes a new instance of the <see cref="AudioSimilarItemsProvider"/> class. + /// </summary> + /// <param name="libraryManager">The library manager.</param> + public AudioSimilarItemsProvider(ILibraryManager libraryManager) + { + _libraryManager = libraryManager; + } + + /// <inheritdoc/> + public string Name => "Local Genre/Tag"; + + /// <inheritdoc/> + public MetadataPluginType Type => MetadataPluginType.LocalSimilarityProvider; + + /// <inheritdoc/> + public Task<IReadOnlyList<BaseItem>> GetSimilarItemsAsync(Audio 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.Audio], + EnableGroupByMetadataKey = false, + EnableTotalRecordCount = true, + OrderBy = [(ItemSortBy.Random, SortOrder.Ascending)] + }; + + return Task.FromResult(_libraryManager.GetItemList(internalQuery)); + } +} |
