diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs index caf160f029..f58debf930 100644 --- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs +++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs @@ -310,14 +310,14 @@ namespace MediaBrowser.Controller.Entities private async Task> GetMusicGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query) { - var items = GetRecursiveChildren(queryParent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }) - .Where(i => !i.IsFolder) - .Where(i => i.Genres.Contains(displayParent.Name, StringComparer.OrdinalIgnoreCase)) - .OfType(); + query.Recursive = true; + query.ParentId = queryParent.Id; + query.Genres = new[] { displayParent.Name }; + query.SetUser(user); - var artists = _libraryManager.GetAlbumArtists(items); + query.IncludeItemTypes = new[] { typeof(MusicAlbum).Name }; - return GetResult(artists, queryParent, query); + return _libraryManager.GetItemsResult(query); } private QueryResult GetMusicAlbumArtists(Folder parent, User user, InternalItemsQuery query) @@ -365,16 +365,24 @@ namespace MediaBrowser.Controller.Entities private QueryResult GetMusicAlbums(Folder parent, User user, InternalItemsQuery query) { - var items = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }, i => i is MusicAlbum && FilterItem(i, query)); + query.Recursive = true; + query.ParentId = parent.Id; + query.SetUser(user); - return PostFilterAndSort(items, parent, null, query); + query.IncludeItemTypes = new[] { typeof(MusicAlbum).Name }; + + return _libraryManager.GetItemsResult(query); } private QueryResult GetMusicSongs(Folder parent, User user, InternalItemsQuery query) { - var items = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }, i => i is Audio.Audio && FilterItem(i, query)); + query.Recursive = true; + query.ParentId = parent.Id; + query.SetUser(user); - return PostFilterAndSort(items, parent, null, query); + query.IncludeItemTypes = new[] { typeof(Audio.Audio).Name }; + + return _libraryManager.GetItemsResult(query); } private QueryResult GetMusicLatest(Folder parent, User user, InternalItemsQuery query) @@ -398,20 +406,24 @@ namespace MediaBrowser.Controller.Entities private QueryResult GetFavoriteSongs(Folder parent, User user, InternalItemsQuery query) { + query.Recursive = true; + query.ParentId = parent.Id; + query.SetUser(user); query.IsFavorite = true; + query.IncludeItemTypes = new[] { typeof(Audio.Audio).Name }; - var items = GetRecursiveChildren(parent, user, new[] { CollectionType.Music }, i => i is Audio.Audio && FilterItem(i, query)); - - return PostFilterAndSort(items, parent, null, query); + return _libraryManager.GetItemsResult(query); } private QueryResult GetFavoriteAlbums(Folder parent, User user, InternalItemsQuery query) { + query.Recursive = true; + query.ParentId = parent.Id; + query.SetUser(user); query.IsFavorite = true; + query.IncludeItemTypes = new[] { typeof(MusicAlbum).Name }; - var items = GetRecursiveChildren(parent, user, new[] { CollectionType.Music }, i => i is MusicAlbum && FilterItem(i, query)); - - return PostFilterAndSort(items, parent, null, query); + return _libraryManager.GetItemsResult(query); } private async Task> FindPlaylists(Folder parent, User user, InternalItemsQuery query) @@ -430,19 +442,13 @@ namespace MediaBrowser.Controller.Entities { if (query.Recursive) { - var recursiveItems = GetRecursiveChildren(parent, user, - new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }) - .Where(i => i is Movie || i is BoxSet); - - //var collections = _collectionManager.CollapseItemsWithinBoxSets(recursiveItems, user).ToList(); + query.Recursive = true; + query.ParentId = parent.Id; + query.SetUser(user); - //if (collections.Count > 0) - //{ - // recursiveItems.AddRange(_collectionManager.CollapseItemsWithinBoxSets(recursiveItems, user)); - // recursiveItems = recursiveItems.DistinctBy(i => i.Id).ToList(); - //} + query.IncludeItemTypes = new[] { typeof(Movie).Name, typeof(BoxSet).Name }; - return GetResult(recursiveItems, parent, query); + return _libraryManager.GetItemsResult(query); } var list = new List(); @@ -459,43 +465,51 @@ namespace MediaBrowser.Controller.Entities private QueryResult GetFavoriteMovies(Folder parent, User user, InternalItemsQuery query) { + query.Recursive = true; + query.ParentId = parent.Id; + query.SetUser(user); query.IsFavorite = true; + query.IncludeItemTypes = new[] { typeof(Movie).Name }; - var items = GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }, i => i is Movie && FilterItem(i, query)); - - return PostFilterAndSort(items, parent, null, query); + return _libraryManager.GetItemsResult(query); } private QueryResult GetFavoriteSeries(Folder parent, User user, InternalItemsQuery query) { + query.Recursive = true; + query.ParentId = parent.Id; + query.SetUser(user); query.IsFavorite = true; + query.IncludeItemTypes = new[] { typeof(Series).Name }; - var items = GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }, i => i is Series && FilterItem(i, query)); - - return PostFilterAndSort(items, parent, null, query); + return _libraryManager.GetItemsResult(query); } private QueryResult GetFavoriteEpisodes(Folder parent, User user, InternalItemsQuery query) { + query.Recursive = true; + query.ParentId = parent.Id; + query.SetUser(user); query.IsFavorite = true; + query.IncludeItemTypes = new[] { typeof(Episode).Name }; - var items = GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }, i => i is Episode && FilterItem(i, query)); - - return PostFilterAndSort(items, parent, null, query); + return _libraryManager.GetItemsResult(query); } private QueryResult GetMovieMovies(Folder parent, User user, InternalItemsQuery query) { - var items = GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }, i => i is Movie && FilterItem(i, query)); + query.Recursive = true; + query.ParentId = parent.Id; + query.SetUser(user); - return PostFilterAndSort(items, parent, null, query); + query.IncludeItemTypes = new[] { typeof(Movie).Name }; + + return _libraryManager.GetItemsResult(query); } private QueryResult GetMovieCollections(Folder parent, User user, InternalItemsQuery query) { - var items = GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }, i => i is BoxSet && FilterItem(i, query)); - - return PostFilterAndSort(items, parent, null, query); + return GetBoxsetView(parent, user, query); } private QueryResult GetMovieLatest(Folder parent, User user, InternalItemsQuery query) @@ -503,9 +517,13 @@ namespace MediaBrowser.Controller.Entities query.SortBy = new[] { ItemSortBy.DateCreated, ItemSortBy.SortName }; query.SortOrder = SortOrder.Descending; - var items = GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }, i => i is Movie && FilterItem(i, query)); + query.Recursive = true; + query.ParentId = parent.Id; + query.SetUser(user); + query.Limit = GetSpecialItemsLimit(); + query.IncludeItemTypes = new[] { typeof(Movie).Name }; - return PostFilterAndSort(items, parent, GetSpecialItemsLimit(), query); + return _libraryManager.GetItemsResult(query); } private QueryResult GetMovieResume(Folder parent, User user, InternalItemsQuery query) @@ -513,10 +531,13 @@ namespace MediaBrowser.Controller.Entities query.SortBy = new[] { ItemSortBy.DatePlayed, ItemSortBy.SortName }; query.SortOrder = SortOrder.Descending; query.IsResumable = true; + query.Recursive = true; + query.ParentId = parent.Id; + query.SetUser(user); + query.Limit = GetSpecialItemsLimit(); + query.IncludeItemTypes = new[] { typeof(Movie).Name }; - var items = GetRecursiveChildren(parent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }, i => i is Movie && FilterItem(i, query)); - - return PostFilterAndSort(items, parent, GetSpecialItemsLimit(), query); + return _libraryManager.GetItemsResult(query); } private async Task> GetMovieGenres(Folder parent, User user, InternalItemsQuery query) @@ -549,11 +570,14 @@ namespace MediaBrowser.Controller.Entities private async Task> GetMovieGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query) { - var items = GetRecursiveChildren(queryParent, user, new[] { CollectionType.Movies, CollectionType.BoxSets, string.Empty }) - .Where(i => i is Movie) - .Where(i => i.Genres.Contains(displayParent.Name, StringComparer.OrdinalIgnoreCase)); + query.Recursive = true; + query.ParentId = queryParent.Id; + query.Genres = new[] { displayParent.Name }; + query.SetUser(user); + + query.IncludeItemTypes = new[] { typeof(Movie).Name }; - return GetResult(items, queryParent, query); + return _libraryManager.GetItemsResult(query); } private async Task> GetPlaylistsView(Folder parent, User user, InternalItemsQuery query) @@ -598,9 +622,13 @@ namespace MediaBrowser.Controller.Entities query.SortBy = new[] { ItemSortBy.DateCreated, ItemSortBy.SortName }; query.SortOrder = SortOrder.Descending; - var items = GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }, i => i is Episode && FilterItem(i, query)); + query.Recursive = true; + query.ParentId = parent.Id; + query.SetUser(user); + query.Limit = GetSpecialItemsLimit(); + query.IncludeItemTypes = new[] { typeof(Episode).Name }; - return PostFilterAndSort(items, parent, GetSpecialItemsLimit(), query); + return _libraryManager.GetItemsResult(query); } private QueryResult GetTvNextUp(Folder parent, InternalItemsQuery query) @@ -623,17 +651,24 @@ namespace MediaBrowser.Controller.Entities query.SortBy = new[] { ItemSortBy.DatePlayed, ItemSortBy.SortName }; query.SortOrder = SortOrder.Descending; query.IsResumable = true; + query.Recursive = true; + query.ParentId = parent.Id; + query.SetUser(user); + query.Limit = GetSpecialItemsLimit(); + query.IncludeItemTypes = new[] { typeof(Episode).Name }; - var items = GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }, i => i is Episode && FilterItem(i, query)); - - return PostFilterAndSort(items, parent, GetSpecialItemsLimit(), query); + return _libraryManager.GetItemsResult(query); } private QueryResult GetTvSeries(Folder parent, User user, InternalItemsQuery query) { - var items = GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }, i => i is Series && FilterItem(i, query)); + query.Recursive = true; + query.ParentId = parent.Id; + query.SetUser(user); - return PostFilterAndSort(items, parent, null, query); + query.IncludeItemTypes = new[] { typeof(Series).Name }; + + return _libraryManager.GetItemsResult(query); } private async Task> GetTvGenres(Folder parent, User user, InternalItemsQuery query) @@ -666,11 +701,14 @@ namespace MediaBrowser.Controller.Entities private async Task> GetTvGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query) { - var items = GetRecursiveChildren(queryParent, user, new[] { CollectionType.TvShows, string.Empty }) - .Where(i => i is Series) - .Where(i => i.Genres.Contains(displayParent.Name, StringComparer.OrdinalIgnoreCase)); + query.Recursive = true; + query.ParentId = queryParent.Id; + query.Genres = new[] { displayParent.Name }; + query.SetUser(user); - return GetResult(items, queryParent, query); + query.IncludeItemTypes = new[] { typeof(Series).Name }; + + return _libraryManager.GetItemsResult(query); } private QueryResult GetResult(QueryResult result)