diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-01-25 01:34:50 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-01-25 01:34:50 -0500 |
| commit | a1a56557ece84d8b726a6c06b2620fa43ff22461 (patch) | |
| tree | a9b96eccbe5fd08c34174f5c5cff8e01ac822fea /MediaBrowser.Controller/Playlists | |
| parent | 67559378009062a26173888ad457d0c9116bfc9a (diff) | |
sync updates
Diffstat (limited to 'MediaBrowser.Controller/Playlists')
| -rw-r--r-- | MediaBrowser.Controller/Playlists/Playlist.cs | 60 |
1 files changed, 32 insertions, 28 deletions
diff --git a/MediaBrowser.Controller/Playlists/Playlist.cs b/MediaBrowser.Controller/Playlists/Playlist.cs index e48cddaaa6..071a9bf934 100644 --- a/MediaBrowser.Controller/Playlists/Playlist.cs +++ b/MediaBrowser.Controller/Playlists/Playlist.cs @@ -50,9 +50,16 @@ namespace MediaBrowser.Controller.Playlists return GetPlayableItems(user); } - public override IEnumerable<BaseItem> GetRecursiveChildren(User user, bool includeLinkedChildren = true) + public override IEnumerable<BaseItem> GetRecursiveChildren(User user, Func<BaseItem, bool> filter) { - return GetPlayableItems(user); + var items = GetPlayableItems(user); + + if (filter != null) + { + items = items.Where(filter); + } + + return items; } public IEnumerable<Tuple<LinkedChild, BaseItem>> GetManageableItems() @@ -76,38 +83,38 @@ namespace MediaBrowser.Controller.Playlists .Where(m => string.Equals(m.MediaType, playlistMediaType, StringComparison.OrdinalIgnoreCase)); } - private static IEnumerable<BaseItem> GetPlaylistItems(BaseItem i, User user) + private static IEnumerable<BaseItem> GetPlaylistItems(BaseItem item, User user) { - var musicGenre = i as MusicGenre; + var musicGenre = item as MusicGenre; if (musicGenre != null) { - var items = user == null - ? LibraryManager.RootFolder.GetRecursiveChildren() - : user.RootFolder.GetRecursiveChildren(user, true); + Func<BaseItem, bool> filter = i => i is Audio && i.Genres.Contains(musicGenre.Name, StringComparer.OrdinalIgnoreCase); - var songs = items - .OfType<Audio>() - .Where(a => a.Genres.Contains(musicGenre.Name, StringComparer.OrdinalIgnoreCase)); + var items = user == null + ? LibraryManager.RootFolder.GetRecursiveChildren(filter) + : user.RootFolder.GetRecursiveChildren(user, filter); - return LibraryManager.Sort(songs, user, new[] { ItemSortBy.AlbumArtist, ItemSortBy.Album, ItemSortBy.SortName }, SortOrder.Ascending); + return LibraryManager.Sort(items, user, new[] { ItemSortBy.AlbumArtist, ItemSortBy.Album, ItemSortBy.SortName }, SortOrder.Ascending); } - var musicArtist = i as MusicArtist; + var musicArtist = item as MusicArtist; if (musicArtist != null) { - var items = user == null - ? LibraryManager.RootFolder.GetRecursiveChildren() - : user.RootFolder.GetRecursiveChildren(user, true); + Func<BaseItem, bool> filter = i => + { + var audio = i as Audio; + return audio != null && audio.HasArtist(musicArtist.Name); + }; - var songs = items - .OfType<Audio>() - .Where(a => a.HasArtist(musicArtist.Name)); + var items = user == null + ? LibraryManager.RootFolder.GetRecursiveChildren(filter) + : user.RootFolder.GetRecursiveChildren(user, filter); - return LibraryManager.Sort(songs, user, new[] { ItemSortBy.AlbumArtist, ItemSortBy.Album, ItemSortBy.SortName }, SortOrder.Ascending); + return LibraryManager.Sort(items, user, new[] { ItemSortBy.AlbumArtist, ItemSortBy.Album, ItemSortBy.SortName }, SortOrder.Ascending); } // Grab these explicitly to avoid the sorting that will happen below - var collection = i as BoxSet; + var collection = item as BoxSet; if (collection != null) { var items = user == null @@ -119,7 +126,7 @@ namespace MediaBrowser.Controller.Playlists } // Grab these explicitly to avoid the sorting that will happen below - var season = i as Season; + var season = item as Season; if (season != null) { var items = user == null @@ -130,21 +137,18 @@ namespace MediaBrowser.Controller.Playlists .Where(m => !m.IsFolder); } - var folder = i as Folder; + var folder = item as Folder; if (folder != null) { var items = user == null - ? folder.GetRecursiveChildren() - : folder.GetRecursiveChildren(user, true); - - items = items - .Where(m => !m.IsFolder); + ? folder.GetRecursiveChildren(m => !m.IsFolder) + : folder.GetRecursiveChildren(user, m => !m.IsFolder); return LibraryManager.Sort(items, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending); } - return new[] { i }; + return new[] { item }; } [IgnoreDataMember] |
