aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/Entities/InternalItemsQuery.cs5
-rw-r--r--MediaBrowser.Controller/Entities/UserViewBuilder.cs203
2 files changed, 129 insertions, 79 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..a4fe2e178f 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)
@@ -389,27 +399,29 @@ namespace MediaBrowser.Controller.Entities
query.SortBy = new string[] { };
- //var items = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }, i => i is MusicVideo || i is Audio.Audio && FilterItem(i, query));
-
return PostFilterAndSort(items, parent, null, query);
}
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 +440,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);
+ query.Recursive = true;
+ query.ParentId = parent.Id;
+ query.SetUser(user);
- //var collections = _collectionManager.CollapseItemsWithinBoxSets(recursiveItems, user).ToList();
+ query.IncludeItemTypes = new[] { typeof(Movie).Name, typeof(BoxSet).Name };
- //if (collections.Count > 0)
- //{
- // recursiveItems.AddRange(_collectionManager.CollapseItemsWithinBoxSets(recursiveItems, user));
- // recursiveItems = recursiveItems.DistinctBy(i => i.Id).ToList();
- //}
-
- return GetResult(recursiveItems, parent, query);
+ return _libraryManager.GetItemsResult(query);
}
var list = new List<BaseItem>();
@@ -457,43 +463,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 +515,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 +529,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 +568,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,20 +583,27 @@ 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)
{
if (query.Recursive)
{
- var items = GetRecursiveChildren(parent, user, new[] { CollectionType.TvShows, string.Empty }, i => (i is Series || i is Season || i is Episode) && 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, typeof(Season).Name, typeof(Episode).Name };
+
+ return _libraryManager.GetItemsResult(query);
}
var list = new List<BaseItem>();
@@ -593,9 +624,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 +653,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 +703,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 +1780,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;