diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-08-18 21:42:53 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-08-18 21:42:53 -0400 |
| commit | b48d15296c1708545f358dc0ccbc48fea9b2cf00 (patch) | |
| tree | e1d13ad0810dd614a4b3f8da5e05cbc8f52fcb30 /MediaBrowser.Controller | |
| parent | 6a2f6782d32603593c669632d825f29fb43f3ea6 (diff) | |
support custom ordering of user views
Diffstat (limited to 'MediaBrowser.Controller')
| -rw-r--r-- | MediaBrowser.Controller/Playlists/Playlist.cs | 59 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Providers/ItemIdentities.cs | 5 |
2 files changed, 42 insertions, 22 deletions
diff --git a/MediaBrowser.Controller/Playlists/Playlist.cs b/MediaBrowser.Controller/Playlists/Playlist.cs index 05a894223..84fcbb91a 100644 --- a/MediaBrowser.Controller/Playlists/Playlist.cs +++ b/MediaBrowser.Controller/Playlists/Playlist.cs @@ -1,4 +1,5 @@ using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Querying; using System; @@ -47,32 +48,54 @@ namespace MediaBrowser.Controller.Playlists inputItems = inputItems.Where(i => i.IsVisible(user)); } - inputItems = inputItems.SelectMany(i => + return inputItems.SelectMany(i => GetPlaylistItems(i, user)) + .Where(m => string.Equals(m.MediaType, playlistMediaType, StringComparison.OrdinalIgnoreCase)); + } + + private static IEnumerable<BaseItem> GetPlaylistItems(BaseItem i, User user) + { + var musicGenre = i as MusicGenre; + if (musicGenre != null) { - var folder = i as Folder; + var songs = user.RootFolder + .GetRecursiveChildren(user) + .OfType<Audio>() + .Where(a => a.Genres.Contains(musicGenre.Name, StringComparer.OrdinalIgnoreCase)); - if (folder != null) - { - var items = user == null - ? folder.GetRecursiveChildren() - : folder.GetRecursiveChildren(user, true); + return LibraryManager.Sort(songs, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending); + } - items = items - .Where(m => !m.IsFolder); + var musicArtist = i as MusicArtist; + if (musicArtist != null) + { + var songs = user.RootFolder + .GetRecursiveChildren(user) + .OfType<Audio>() + .Where(a => a.HasArtist(musicArtist.Name)); - if (!folder.IsPreSorted) - { - items = LibraryManager.Sort(items, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending); - } + return LibraryManager.Sort(songs, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending); + } + + var folder = i as Folder; - return items; - } + if (folder != null) + { + var items = user == null + ? folder.GetRecursiveChildren() + : folder.GetRecursiveChildren(user, true); + + items = items + .Where(m => !m.IsFolder); - return new[] { i }; + if (!folder.IsPreSorted) + { + items = LibraryManager.Sort(items, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending); + } - }).Where(m => string.Equals(m.MediaType, playlistMediaType, StringComparison.OrdinalIgnoreCase)); + return items; + } - return inputItems; + return new[] { i }; } [IgnoreDataMember] diff --git a/MediaBrowser.Controller/Providers/ItemIdentities.cs b/MediaBrowser.Controller/Providers/ItemIdentities.cs index 93d468af0..8d24f6c1f 100644 --- a/MediaBrowser.Controller/Providers/ItemIdentities.cs +++ b/MediaBrowser.Controller/Providers/ItemIdentities.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; |
