diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2016-03-24 23:53:42 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2016-03-24 23:53:42 -0400 |
| commit | 3c43e85d877c243562ed621d0ad5434a02645705 (patch) | |
| tree | 1ed09d58af0c204d555eba08e5fb00bfdb1b0837 /MediaBrowser.Api/Library/LibraryService.cs | |
| parent | 71b6d5d4393b654909519640c5be4cde28244028 (diff) | |
update music queries
Diffstat (limited to 'MediaBrowser.Api/Library/LibraryService.cs')
| -rw-r--r-- | MediaBrowser.Api/Library/LibraryService.cs | 112 |
1 files changed, 29 insertions, 83 deletions
diff --git a/MediaBrowser.Api/Library/LibraryService.cs b/MediaBrowser.Api/Library/LibraryService.cs index 871f5e8a8..097546af6 100644 --- a/MediaBrowser.Api/Library/LibraryService.cs +++ b/MediaBrowser.Api/Library/LibraryService.cs @@ -397,7 +397,7 @@ namespace MediaBrowser.Api.Library }); } - if (item is Series || (program != null && program.IsSeries) ) + if (item is Series || (program != null && program.IsSeries)) { return new TvShowsService(_userManager, _userDataManager, _libraryManager, _itemRepo, _dtoService, _tvManager) { @@ -659,87 +659,38 @@ namespace MediaBrowser.Api.Library /// <returns>System.Object.</returns> public object Get(GetItemCounts request) { - var filteredItems = GetAllLibraryItems(request.UserId, _userManager, _libraryManager, null, i => i.LocationType != LocationType.Virtual && FilterItem(i, request, request.UserId)); + var user = string.IsNullOrWhiteSpace(request.UserId) ? null : _userManager.GetUserById(request.UserId); var counts = new ItemCounts { - AlbumCount = filteredItems.Count(i => i is MusicAlbum), - EpisodeCount = filteredItems.Count(i => i is Episode), - GameCount = filteredItems.Count(i => i is Game), - GameSystemCount = filteredItems.Count(i => i is GameSystem), - MovieCount = filteredItems.Count(i => i is Movie), - SeriesCount = filteredItems.Count(i => i is Series), - SongCount = filteredItems.Count(i => i is Audio), - MusicVideoCount = filteredItems.Count(i => i is MusicVideo), - BoxSetCount = filteredItems.Count(i => i is BoxSet), - BookCount = filteredItems.Count(i => i is Book), - - UniqueTypes = filteredItems.Select(i => i.GetClientTypeName()).Distinct().ToList() + AlbumCount = GetCount(typeof(MusicAlbum), user, request), + EpisodeCount = GetCount(typeof(Episode), user, request), + GameCount = GetCount(typeof(Game), user, request), + GameSystemCount = GetCount(typeof(GameSystem), user, request), + MovieCount = GetCount(typeof(Movie), user, request), + SeriesCount = GetCount(typeof(Series), user, request), + SongCount = GetCount(typeof(Audio), user, request), + MusicVideoCount = GetCount(typeof(MusicVideo), user, request), + BoxSetCount = GetCount(typeof(BoxSet), user, request), + BookCount = GetCount(typeof(Book), user, request) }; return ToOptimizedSerializedResultUsingCache(counts); } - private IList<BaseItem> GetAllLibraryItems(string userId, IUserManager userManager, ILibraryManager libraryManager, string parentId, Func<BaseItem, bool> filter) + private int GetCount(Type type, User user, GetItemCounts request) { - if (!string.IsNullOrEmpty(parentId)) - { - var folder = (Folder)libraryManager.GetItemById(new Guid(parentId)); - - if (!string.IsNullOrWhiteSpace(userId)) - { - var user = userManager.GetUserById(userId); - - if (user == null) - { - throw new ArgumentException("User not found"); - } - - return folder - .GetRecursiveChildren(user, filter) - .ToList(); - } - - return folder - .GetRecursiveChildren(filter); - } - if (!string.IsNullOrWhiteSpace(userId)) - { - var user = userManager.GetUserById(userId); - - if (user == null) - { - throw new ArgumentException("User not found"); - } - - return userManager - .GetUserById(userId) - .RootFolder - .GetRecursiveChildren(user, filter) - .ToList(); - } - - return libraryManager - .RootFolder - .GetRecursiveChildren(filter); - } - - private bool FilterItem(BaseItem item, GetItemCounts request, string userId) - { - if (!string.IsNullOrWhiteSpace(userId)) - { - if (request.IsFavorite.HasValue) - { - var val = request.IsFavorite.Value; - - if (_userDataManager.GetUserData(userId, item.GetUserDataKey()).IsFavorite != val) - { - return false; - } - } - } + var query = new InternalItemsQuery(user) + { + IncludeItemTypes = new[] { type.Name }, + Limit = 0, + Recursive = true, + ExcludeLocationTypes = new[] { LocationType.Virtual }, + SourceTypes = new[] { SourceType.Library }, + IsFavorite = request.IsFavorite + }; - return true; + return _libraryManager.GetItemsResult(query).TotalRecordCount; } /// <summary> @@ -980,20 +931,15 @@ namespace MediaBrowser.Api.Library ? new string[] { } : request.IncludeItemTypes.Split(','); - Func<BaseItem, bool> filter = i => + var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null; + + var query = new InternalItemsQuery(user) { - if (includeTypes.Length > 0) - { - if (!includeTypes.Contains(i.GetType().Name, StringComparer.OrdinalIgnoreCase)) - { - return false; - } - } - - return true; + IncludeItemTypes = includeTypes, + Recursive = true }; - IEnumerable<BaseItem> items = GetAllLibraryItems(request.UserId, _userManager, _libraryManager, null, filter); + var items = _libraryManager.GetItemList(query); var lookup = items .ToLookup(i => i.ProductionYear ?? -1) |
