diff options
Diffstat (limited to 'MediaBrowser.Controller')
| -rw-r--r-- | MediaBrowser.Controller/Entities/InternalItemsQuery.cs | 5 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/UserViewBuilder.cs | 193 |
2 files changed, 123 insertions, 75 deletions
diff --git a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs index 5236b0a278..ae38f6143d 100644 --- a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs +++ b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs @@ -182,6 +182,11 @@ namespace MediaBrowser.Controller.Entities public InternalItemsQuery(User user) : this() { + SetUser(user); + } + + public void SetUser(User user) + { if (user != null) { var policy = user.Policy; diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs index ba496fa5c1..f58debf930 100644 --- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs +++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs @@ -125,13 +125,13 @@ namespace MediaBrowser.Controller.Entities case CollectionType.HomeVideos: case CollectionType.Games: case CollectionType.MusicVideos: - { - if (query.Recursive) { - return GetResult(queryParent.GetRecursiveChildren(user, true), queryParent, query); + if (query.Recursive) + { + return GetResult(queryParent.GetRecursiveChildren(user, true), queryParent, query); + } + return GetResult(queryParent.GetChildren(user, true), queryParent, query); } - return GetResult(queryParent.GetChildren(user, true), queryParent, query); - } case CollectionType.Folders: return GetResult(user.RootFolder.GetChildren(user, true), queryParent, query); @@ -140,7 +140,7 @@ namespace MediaBrowser.Controller.Entities return await GetPlaylistsView(queryParent, user, query).ConfigureAwait(false); case CollectionType.BoxSets: - return await GetBoxsetView(queryParent, user, query).ConfigureAwait(false); + return GetBoxsetView(queryParent, user, query); case CollectionType.TvShows: return await GetTvView(queryParent, user, query).ConfigureAwait(false); @@ -206,7 +206,7 @@ namespace MediaBrowser.Controller.Entities return GetMusicLatest(queryParent, user, query); case SpecialFolder.MusicPlaylists: - return await GetMusicPlaylists(queryParent, user, query).ConfigureAwait(false); + return GetMusicPlaylists(queryParent, user, query); case SpecialFolder.MusicAlbums: return GetMusicAlbums(queryParent, user, query); @@ -310,14 +310,14 @@ namespace MediaBrowser.Controller.Entities private async Task<QueryResult<BaseItem>> 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<IHasAlbumArtist>(); + 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<BaseItem> GetMusicAlbumArtists(Folder parent, User user, InternalItemsQuery query) @@ -353,26 +353,36 @@ namespace MediaBrowser.Controller.Entities return GetResult(artists, parent, query); } - private Task<QueryResult<BaseItem>> GetMusicPlaylists(Folder parent, User user, InternalItemsQuery query) + private QueryResult<BaseItem> GetMusicPlaylists(Folder parent, User user, InternalItemsQuery query) { - query.IncludeItemTypes = new[] { "Playlist" }; + query.ParentId = null; + query.IncludeItemTypes = new[] { typeof(Playlist).Name }; + query.SetUser(user); query.Recursive = true; - return parent.GetItems(query); + return _libraryManager.GetItemsResult(query); } private QueryResult<BaseItem> 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<BaseItem> 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<BaseItem> GetMusicLatest(Folder parent, User user, InternalItemsQuery query) @@ -396,20 +406,24 @@ namespace MediaBrowser.Controller.Entities private QueryResult<BaseItem> 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<BaseItem> 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<QueryResult<BaseItem>> FindPlaylists(Folder parent, User user, InternalItemsQuery query) @@ -428,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<BaseItem>(); @@ -457,43 +465,51 @@ namespace MediaBrowser.Controller.Entities private QueryResult<BaseItem> 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<BaseItem> 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<BaseItem> 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<BaseItem> 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<BaseItem> 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<BaseItem> GetMovieLatest(Folder parent, User user, InternalItemsQuery query) @@ -501,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<BaseItem> GetMovieResume(Folder parent, User user, InternalItemsQuery query) @@ -511,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<QueryResult<BaseItem>> GetMovieGenres(Folder parent, User user, InternalItemsQuery query) @@ -547,11 +570,14 @@ namespace MediaBrowser.Controller.Entities private async Task<QueryResult<BaseItem>> 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<QueryResult<BaseItem>> GetPlaylistsView(Folder parent, User user, InternalItemsQuery query) @@ -559,11 +585,14 @@ namespace MediaBrowser.Controller.Entities return GetResult(_playlistManager.GetPlaylists(user.Id.ToString("N")), parent, query); } - private async Task<QueryResult<BaseItem>> GetBoxsetView(Folder parent, User user, InternalItemsQuery query) + private QueryResult<BaseItem> GetBoxsetView(Folder parent, User user, InternalItemsQuery query) { - var collections = _collectionManager.GetCollections(user); + query.ParentId = null; + query.IncludeItemTypes = new[] { typeof(BoxSet).Name }; + query.SetUser(user); + query.Recursive = true; - return GetResult(collections, parent, query); + return _libraryManager.GetItemsResult(query); } private async Task<QueryResult<BaseItem>> GetTvView(Folder parent, User user, InternalItemsQuery query) @@ -593,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<BaseItem> GetTvNextUp(Folder parent, InternalItemsQuery query) @@ -618,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<BaseItem> 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<QueryResult<BaseItem>> GetTvGenres(Folder parent, User user, InternalItemsQuery query) @@ -661,11 +701,14 @@ namespace MediaBrowser.Controller.Entities private async Task<QueryResult<BaseItem>> 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); + + query.IncludeItemTypes = new[] { typeof(Series).Name }; - return GetResult(items, queryParent, query); + return _libraryManager.GetItemsResult(query); } private QueryResult<BaseItem> GetResult<T>(QueryResult<T> result) @@ -1735,7 +1778,7 @@ namespace MediaBrowser.Controller.Entities if (query.SeriesStatuses.Length > 0) { - var ok = new[] { item }.OfType<Series>().Any(p => p.Status.HasValue && query.SeriesStatuses.Contains(p.Status.Value)); + var ok = new[] { item }.OfType<Series>().Any(p => p.Status.HasValue && query.SeriesStatuses.Contains(p.Status.Value)); if (!ok) { return false; |
