diff options
| author | Luke <luke.pulverenti@gmail.com> | 2015-02-09 16:58:30 -0500 |
|---|---|---|
| committer | Luke <luke.pulverenti@gmail.com> | 2015-02-09 16:58:30 -0500 |
| commit | 4cc3b2f0ccd7c092a4acf72db4903415e175037a (patch) | |
| tree | f9f90f8665b726253b8b357674f2f141aa43abc9 /MediaBrowser.Server.Implementations/Library/MusicManager.cs | |
| parent | e7037a9b80843c127712f11430239f8fa3cb4aed (diff) | |
| parent | 3d7089a7dbabb652730c892206ca050f52f832b1 (diff) | |
Merge pull request #1005 from MediaBrowser/dev
3.0.5518.0
Diffstat (limited to 'MediaBrowser.Server.Implementations/Library/MusicManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Library/MusicManager.cs | 52 |
1 files changed, 44 insertions, 8 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/MusicManager.cs b/MediaBrowser.Server.Implementations/Library/MusicManager.cs index b8c29c19b..7733e7d37 100644 --- a/MediaBrowser.Server.Implementations/Library/MusicManager.cs +++ b/MediaBrowser.Server.Implementations/Library/MusicManager.cs @@ -32,8 +32,8 @@ namespace MediaBrowser.Server.Implementations.Library var artist = _libraryManager.GetArtist(name); var genres = user.RootFolder - .GetRecursiveChildren(user) - .OfType<Audio>() + .GetRecursiveChildren(user, i => i is Audio) + .Cast<Audio>() .Where(i => i.HasArtist(name)) .SelectMany(i => i.Genres) .Concat(artist.Genres) @@ -45,8 +45,8 @@ namespace MediaBrowser.Server.Implementations.Library public IEnumerable<Audio> GetInstantMixFromAlbum(MusicAlbum item, User user) { var genres = item - .GetRecursiveChildren(user, true) - .OfType<Audio>() + .GetRecursiveChildren(user, i => i is Audio) + .Cast<Audio>() .SelectMany(i => i.Genres) .Concat(item.Genres) .Distinct(StringComparer.OrdinalIgnoreCase); @@ -57,8 +57,8 @@ namespace MediaBrowser.Server.Implementations.Library public IEnumerable<Audio> GetInstantMixFromPlaylist(Playlist item, User user) { var genres = item - .GetRecursiveChildren(user, true) - .OfType<Audio>() + .GetRecursiveChildren(user, i => i is Audio) + .Cast<Audio>() .SelectMany(i => i.Genres) .Concat(item.Genres) .Distinct(StringComparer.OrdinalIgnoreCase); @@ -68,12 +68,13 @@ namespace MediaBrowser.Server.Implementations.Library public IEnumerable<Audio> GetInstantMixFromGenres(IEnumerable<string> genres, User user) { - var inputItems = user.RootFolder.GetRecursiveChildren(user); + var inputItems = user.RootFolder + .GetRecursiveChildren(user, i => i is Audio); var genresDictionary = genres.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); return inputItems - .OfType<Audio>() + .Cast<Audio>() .Select(i => new Tuple<Audio, int>(i, i.Genres.Count(genresDictionary.ContainsKey))) .Where(i => i.Item2 > 0) .OrderByDescending(i => i.Item2) @@ -82,5 +83,40 @@ namespace MediaBrowser.Server.Implementations.Library .Take(100) .OrderBy(i => Guid.NewGuid()); } + + public IEnumerable<Audio> GetInstantMixFromItem(BaseItem item, User user) + { + var genre = item as MusicGenre; + if (genre != null) + { + return GetInstantMixFromGenres(new[] { item.Name }, user); + } + + var playlist = item as Playlist; + if (playlist != null) + { + return GetInstantMixFromPlaylist(playlist, user); + } + + var album = item as MusicAlbum; + if (album != null) + { + return GetInstantMixFromAlbum(album, user); + } + + var artist = item as MusicArtist; + if (artist != null) + { + return GetInstantMixFromArtist(artist.Name, user); + } + + var song = item as Audio; + if (song != null) + { + return GetInstantMixFromSong(song, user); + } + + return new Audio[] { }; + } } } |
