/// <summary> /// Gets the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns>Task{ItemsResult}.</returns> protected ItemsResult GetResult(GetItemsByName request) { User user = null; BaseItem item; if (request.UserId.HasValue) { user = UserManager.GetUserById(request.UserId.Value); item = string.IsNullOrEmpty(request.ParentId) ? user.RootFolder : DtoService.GetItemByDtoId(request.ParentId, user.Id); } else { item = string.IsNullOrEmpty(request.ParentId) ? LibraryManager.RootFolder : DtoService.GetItemByDtoId(request.ParentId); } IEnumerable <BaseItem> items; if (item.IsFolder) { var folder = (Folder)item; if (request.UserId.HasValue) { items = request.Recursive ? folder.GetRecursiveChildren(user) : folder.GetChildren(user, true); } else { items = request.Recursive ? folder.GetRecursiveChildren() : folder.Children; } } else { items = new[] { item }; } items = FilterItems(request, items); var extractedItems = GetAllItems(request, items); var filteredItems = FilterItems(request, extractedItems, user); filteredItems = FilterByLibraryItems(request, filteredItems, user); filteredItems = ItemsService.ApplySortOrder(request, filteredItems, user, LibraryManager).Cast <TItemType>(); var ibnItemsArray = filteredItems.ToList(); IEnumerable <TItemType> ibnItems = ibnItemsArray; var result = new ItemsResult { TotalRecordCount = ibnItemsArray.Count }; if (request.StartIndex.HasValue || request.Limit.HasValue) { if (request.StartIndex.HasValue) { ibnItems = ibnItems.Skip(request.StartIndex.Value); } if (request.Limit.HasValue) { ibnItems = ibnItems.Take(request.Limit.Value); } } var fields = request.GetItemFields().ToList(); var dtos = ibnItems.Select(i => GetDto(i, user, fields)); result.Items = dtos.Where(i => i != null).ToArray(); return(result); }
/// <summary> /// Filters the items. /// </summary> /// <param name="request">The request.</param> /// <param name="items">The items.</param> /// <param name="user">The user.</param> /// <returns>IEnumerable{`0}.</returns> private IEnumerable <TItemType> FilterItems(GetItemsByName request, IEnumerable <TItemType> items, User user) { if (!string.IsNullOrEmpty(request.NameStartsWithOrGreater)) { items = items.Where(i => string.Compare(request.NameStartsWithOrGreater, i.SortName, StringComparison.CurrentCultureIgnoreCase) < 1); } if (!string.IsNullOrEmpty(request.NameStartsWith)) { items = items.Where(i => string.Compare(request.NameStartsWith, i.SortName.Substring(0, 1), StringComparison.CurrentCultureIgnoreCase) == 0); } if (!string.IsNullOrEmpty(request.NameLessThan)) { items = items.Where(i => string.Compare(request.NameLessThan, i.SortName, StringComparison.CurrentCultureIgnoreCase) == 1); } var imageTypes = request.GetImageTypes().ToList(); if (imageTypes.Count > 0) { items = items.Where(item => imageTypes.Any(imageType => ItemsService.HasImage(item, imageType))); } var filters = request.GetFilters().ToList(); if (filters.Count == 0) { return(items); } items = items.AsParallel(); if (filters.Contains(ItemFilter.Dislikes)) { items = items.Where(i => { var userdata = UserDataRepository.GetUserData(user.Id, i.GetUserDataKey()); return(userdata != null && userdata.Likes.HasValue && !userdata.Likes.Value); }); } if (filters.Contains(ItemFilter.Likes)) { items = items.Where(i => { var userdata = UserDataRepository.GetUserData(user.Id, i.GetUserDataKey()); return(userdata != null && userdata.Likes.HasValue && userdata.Likes.Value); }); } if (filters.Contains(ItemFilter.IsFavoriteOrLikes)) { items = items.Where(i => { var userdata = UserDataRepository.GetUserData(user.Id, i.GetUserDataKey()); var likes = userdata.Likes ?? false; var favorite = userdata.IsFavorite; return(likes || favorite); }); } if (filters.Contains(ItemFilter.IsFavorite)) { items = items.Where(i => { var userdata = UserDataRepository.GetUserData(user.Id, i.GetUserDataKey()); return(userdata != null && userdata.IsFavorite); }); } return(items.AsEnumerable()); }