/// <summary> /// Gets the items. /// </summary> /// <param name="request">The request.</param> /// <returns>Task{ItemsResult}.</returns> private async Task <ItemsResult> GetItems(GetItems request) { var user = _userManager.GetUserById(request.UserId); var items = GetItemsToSerialize(request, user); items = items.AsParallel(); items = ApplyAdditionalFilters(request, items, user); // Apply filters // 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, _userDataRepository); } items = items.AsEnumerable(); items = ApplySearchTerm(request, items); items = ApplySortOrder(request, items, user, _libraryManager); var itemsArray = items.ToArray(); var pagedItems = ApplyPaging(request, itemsArray); var fields = request.GetItemFields().ToList(); var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo); var returnItems = await Task.WhenAll(pagedItems.Select(i => dtoBuilder.GetBaseItemDto(i, fields, user))).ConfigureAwait(false); return(new ItemsResult { TotalRecordCount = itemsArray.Length, Items = returnItems }); }
/// <summary> /// Gets the items. /// </summary> /// <param name="request">The request.</param> /// <returns>Task{ItemsResult}.</returns> private ItemsResult GetItems(GetItems request) { var user = _userManager.GetUserById(request.UserId); var items = GetItemsToSerialize(request, user); items = items.AsParallel(); items = ApplyAdditionalFilters(request, items, user); // Apply filters // 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, _userDataRepository); } items = FilterVirtualEpisodes(request, items, user); items = items.AsEnumerable(); items = ApplySearchTerm(request, items); items = ApplySortOrder(request, items, user, _libraryManager); var itemsArray = items.ToList(); var pagedItems = ApplyPaging(request, itemsArray); var fields = request.GetItemFields().ToList(); var returnItems = pagedItems.Select(i => _dtoService.GetBaseItemDto(i, fields, user)).ToArray(); return(new ItemsResult { TotalRecordCount = itemsArray.Count, Items = returnItems }); }