< Summary - Jellyfin

Information
Class: Emby.Server.Implementations.Library.MusicManager
Assembly: Emby.Server.Implementations
File(s): /srv/git/jellyfin/Emby.Server.Implementations/Library/MusicManager.cs
Line coverage
3%
Covered lines: 2
Uncovered lines: 53
Coverable lines: 55
Total lines: 135
Line coverage: 3.6%
Branch coverage
0%
Covered branches: 0
Total branches: 12
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

File(s)

/srv/git/jellyfin/Emby.Server.Implementations/Library/MusicManager.cs

#LineLine coverage
 1#pragma warning disable CS1591
 2
 3using System;
 4using System.Collections.Generic;
 5using System.Linq;
 6using Jellyfin.Data.Entities;
 7using Jellyfin.Data.Enums;
 8using Jellyfin.Extensions;
 9using MediaBrowser.Controller.Dto;
 10using MediaBrowser.Controller.Entities;
 11using MediaBrowser.Controller.Entities.Audio;
 12using MediaBrowser.Controller.Library;
 13using MediaBrowser.Controller.Playlists;
 14using MusicAlbum = MediaBrowser.Controller.Entities.Audio.MusicAlbum;
 15
 16namespace Emby.Server.Implementations.Library
 17{
 18    public class MusicManager : IMusicManager
 19    {
 20        private readonly ILibraryManager _libraryManager;
 21
 22        public MusicManager(ILibraryManager libraryManager)
 23        {
 2224            _libraryManager = libraryManager;
 2225        }
 26
 27        public List<BaseItem> GetInstantMixFromSong(Audio item, User? user, DtoOptions dtoOptions)
 28        {
 029            var list = new List<BaseItem>
 030            {
 031                item
 032            };
 33
 034            list.AddRange(GetInstantMixFromGenres(item.Genres, user, dtoOptions));
 35
 036            return list;
 37        }
 38
 39        /// <inheritdoc />
 40        public List<BaseItem> GetInstantMixFromArtist(MusicArtist artist, User? user, DtoOptions dtoOptions)
 41        {
 042            return GetInstantMixFromGenres(artist.Genres, user, dtoOptions);
 43        }
 44
 45        public List<BaseItem> GetInstantMixFromAlbum(MusicAlbum item, User? user, DtoOptions dtoOptions)
 46        {
 047            return GetInstantMixFromGenres(item.Genres, user, dtoOptions);
 48        }
 49
 50        public List<BaseItem> GetInstantMixFromFolder(Folder item, User? user, DtoOptions dtoOptions)
 51        {
 052            var genres = item
 053               .GetRecursiveChildren(user, new InternalItemsQuery(user)
 054               {
 055                   IncludeItemTypes = [BaseItemKind.Audio],
 056                   DtoOptions = dtoOptions
 057               })
 058               .Cast<Audio>()
 059               .SelectMany(i => i.Genres)
 060               .Concat(item.Genres)
 061               .DistinctNames();
 62
 063            return GetInstantMixFromGenres(genres, user, dtoOptions);
 64        }
 65
 66        public List<BaseItem> GetInstantMixFromPlaylist(Playlist item, User? user, DtoOptions dtoOptions)
 67        {
 068            return GetInstantMixFromGenres(item.Genres, user, dtoOptions);
 69        }
 70
 71        public List<BaseItem> GetInstantMixFromGenres(IEnumerable<string> genres, User? user, DtoOptions dtoOptions)
 72        {
 073            var genreIds = genres.DistinctNames().Select(i =>
 074            {
 075                try
 076                {
 077                    return _libraryManager.GetMusicGenre(i).Id;
 078                }
 079                catch
 080                {
 081                    return Guid.Empty;
 082                }
 083            }).Where(i => !i.IsEmpty()).ToArray();
 84
 085            return GetInstantMixFromGenreIds(genreIds, user, dtoOptions);
 86        }
 87
 88        public List<BaseItem> GetInstantMixFromGenreIds(Guid[] genreIds, User? user, DtoOptions dtoOptions)
 89        {
 090            return _libraryManager.GetItemList(new InternalItemsQuery(user)
 091            {
 092                IncludeItemTypes = [BaseItemKind.Audio],
 093                GenreIds = genreIds,
 094                Limit = 200,
 095                OrderBy = [(ItemSortBy.Random, SortOrder.Ascending)],
 096                DtoOptions = dtoOptions
 097            });
 98        }
 99
 100        public List<BaseItem> GetInstantMixFromItem(BaseItem item, User? user, DtoOptions dtoOptions)
 101        {
 0102            if (item is MusicGenre)
 103            {
 0104                return GetInstantMixFromGenreIds([item.Id], user, dtoOptions);
 105            }
 106
 0107            if (item is Playlist playlist)
 108            {
 0109                return GetInstantMixFromPlaylist(playlist, user, dtoOptions);
 110            }
 111
 0112            if (item is MusicAlbum album)
 113            {
 0114                return GetInstantMixFromAlbum(album, user, dtoOptions);
 115            }
 116
 0117            if (item is MusicArtist artist)
 118            {
 0119                return GetInstantMixFromArtist(artist, user, dtoOptions);
 120            }
 121
 0122            if (item is Audio song)
 123            {
 0124                return GetInstantMixFromSong(song, user, dtoOptions);
 125            }
 126
 0127            if (item is Folder folder)
 128            {
 0129                return GetInstantMixFromFolder(folder, user, dtoOptions);
 130            }
 131
 0132            return new List<BaseItem>();
 133        }
 134    }
 135}