diff options
Diffstat (limited to 'MediaBrowser.Api/UserLibrary/ItemsService.cs')
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/ItemsService.cs | 54 |
1 files changed, 19 insertions, 35 deletions
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index aed84e07f..675ac0cd5 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -1,6 +1,8 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Dto; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Querying; using ServiceStack.ServiceHost; @@ -148,6 +150,7 @@ namespace MediaBrowser.Api.UserLibrary /// The _user manager /// </summary> private readonly IUserManager _userManager; + private readonly IUserDataRepository _userDataRepository; /// <summary> /// The _library manager @@ -161,11 +164,13 @@ namespace MediaBrowser.Api.UserLibrary /// <param name="userManager">The user manager.</param> /// <param name="libraryManager">The library manager.</param> /// <param name="searchEngine">The search engine.</param> - public ItemsService(IUserManager userManager, ILibraryManager libraryManager, ILibrarySearchEngine searchEngine) + /// <param name="userDataRepository">The user data repository.</param> + public ItemsService(IUserManager userManager, ILibraryManager libraryManager, ILibrarySearchEngine searchEngine, IUserDataRepository userDataRepository) { _userManager = userManager; _libraryManager = libraryManager; _searchEngine = searchEngine; + _userDataRepository = userDataRepository; } /// <summary> @@ -199,7 +204,7 @@ namespace MediaBrowser.Api.UserLibrary // Run them starting with the ones that are likely to reduce the list the most foreach (var filter in request.GetFilters().OrderByDescending(f => (int)f)) { - items = ApplyFilter(items, filter, user, _userManager); + items = ApplyFilter(items, filter, user, _userDataRepository); } items = items.AsEnumerable(); @@ -214,7 +219,7 @@ namespace MediaBrowser.Api.UserLibrary var fields = request.GetItemFields().ToList(); - var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userManager); + var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository); var returnItems = await Task.WhenAll(pagedItems.Select(i => dtoBuilder.GetBaseItemDto(i, user, fields))).ConfigureAwait(false); @@ -274,9 +279,9 @@ namespace MediaBrowser.Api.UserLibrary /// <param name="items">The items.</param> /// <param name="filter">The filter.</param> /// <param name="user">The user.</param> - /// <param name="userManager">The user manager.</param> + /// <param name="repository">The repository.</param> /// <returns>IEnumerable{BaseItem}.</returns> - internal static IEnumerable<BaseItem> ApplyFilter(IEnumerable<BaseItem> items, ItemFilter filter, User user, IUserManager userManager) + internal static IEnumerable<BaseItem> ApplyFilter(IEnumerable<BaseItem> items, ItemFilter filter, User user, IUserDataRepository repository) { // Avoids implicitly captured closure var currentUser = user; @@ -286,7 +291,7 @@ namespace MediaBrowser.Api.UserLibrary case ItemFilter.Likes: return items.Where(item => { - var userdata = userManager.GetUserData(user.Id, item.UserDataId).Result; + var userdata = repository.GetUserData(user.Id, item.GetUserDataKey()).Result; return userdata != null && userdata.Likes.HasValue && userdata.Likes.Value; }); @@ -294,7 +299,7 @@ namespace MediaBrowser.Api.UserLibrary case ItemFilter.Dislikes: return items.Where(item => { - var userdata = userManager.GetUserData(user.Id, item.UserDataId).Result; + var userdata = repository.GetUserData(user.Id, item.GetUserDataKey()).Result; return userdata != null && userdata.Likes.HasValue && !userdata.Likes.Value; }); @@ -302,7 +307,7 @@ namespace MediaBrowser.Api.UserLibrary case ItemFilter.IsFavorite: return items.Where(item => { - var userdata = userManager.GetUserData(user.Id, item.UserDataId).Result; + var userdata = repository.GetUserData(user.Id, item.GetUserDataKey()).Result; return userdata != null && userdata.IsFavorite; }); @@ -313,7 +318,7 @@ namespace MediaBrowser.Api.UserLibrary case ItemFilter.IsResumable: return items.Where(item => { - var userdata = userManager.GetUserData(user.Id, item.UserDataId).Result; + var userdata = repository.GetUserData(user.Id, item.GetUserDataKey()).Result; return userdata != null && userdata.PlaybackPositionTicks > 0; }); @@ -321,7 +326,7 @@ namespace MediaBrowser.Api.UserLibrary case ItemFilter.IsPlayed: return items.Where(item => { - var userdata = userManager.GetUserData(user.Id, item.UserDataId).Result; + var userdata = repository.GetUserData(user.Id, item.GetUserDataKey()).Result; return userdata != null && userdata.PlayCount > 0; }); @@ -329,7 +334,7 @@ namespace MediaBrowser.Api.UserLibrary case ItemFilter.IsUnplayed: return items.Where(item => { - var userdata = userManager.GetUserData(user.Id, item.UserDataId).Result; + var userdata = repository.GetUserData(user.Id, item.GetUserDataKey()).Result; return userdata == null || userdata.PlayCount == 0; }); @@ -347,32 +352,11 @@ namespace MediaBrowser.Api.UserLibrary /// <summary> /// Applies the additional filters. /// </summary> - /// <param name="itemsRequest">The items request.</param> + /// <param name="request">The request.</param> /// <param name="items">The items.</param> /// <returns>IEnumerable{BaseItem}.</returns> - internal static IEnumerable<BaseItem> ApplyAdditionalFilters(BaseItemsRequest itemsRequest, IEnumerable<BaseItem> items) + internal static IEnumerable<BaseItem> ApplyAdditionalFilters(GetItems request, IEnumerable<BaseItem> items) { - // Exclude item types - if (!string.IsNullOrEmpty(itemsRequest.ExcludeItemTypes)) - { - var vals = itemsRequest.ExcludeItemTypes.Split(','); - items = items.Where(f => !vals.Contains(f.GetType().Name, StringComparer.OrdinalIgnoreCase)); - } - - // Include item types - if (!string.IsNullOrEmpty(itemsRequest.IncludeItemTypes)) - { - var vals = itemsRequest.IncludeItemTypes.Split(','); - items = items.Where(f => vals.Contains(f.GetType().Name, StringComparer.OrdinalIgnoreCase)); - } - - var request = itemsRequest as GetItems; - - if (request == null) - { - return items; - } - // Filter by Series Status if (!string.IsNullOrEmpty(request.SeriesStatus)) { |
