protected async Task<IItemDetailSection> GetItemsSection(ItemsResult itemsResult, Func<ItemsResult, bool> listCondition, bool expandSingleItem = true) { if (itemsResult.Items.Length == 1 && expandSingleItem && itemsResult.Items[0].IsFolder) { var query = new ItemQuery { ParentId = itemsResult.Items[0].Id, UserId = _sessionManager.CurrentUser.Id }; return await GetItemsSection(await _apiClient.GetItemsAsync(query), listCondition); } if (listCondition(itemsResult)) { return new ItemsListViewModel(itemsResult, _apiClient, _imageManager, _serverEvents, _navigator, _playbackManager); } return new ItemsGridViewModel(itemsResult, _apiClient, _imageManager, _serverEvents, _navigator, _playbackManager); }
public ItemsListViewModel(ItemsResult itemsResult, IApiClient apiClient, IImageManager imageManager, IServerEvents serverEvents, INavigator navigator, IPlaybackManager playbackManager) { _itemsResult = itemsResult; _apiClient = apiClient; _imageManager = imageManager; _serverEvents = serverEvents; _navigator = navigator; _playbackManager = playbackManager; var itemType = itemsResult.Items.Length > 0 ? itemsResult.Items.First().Type : null; if (itemType == "Episode") { _preferredImageTypes = new[] { ImageType.Screenshot, ImageType.Thumb, ImageType.Art, ImageType.Primary }; } else { _preferredImageTypes = new[] { ImageType.Backdrop, ImageType.Thumb, ImageType.Art }; } Title = SelectHeader(itemsResult.Items.Length > 0 ? itemsResult.Items.First().Type : null); Items = new RangeObservableCollection<ItemTileViewModel>(); LoadItems(); }
private async Task<object> GetResult(IEnumerable<Audio> items, User user, BaseGetSimilarItems request) { var list = items.ToList(); var result = new ItemsResult { TotalRecordCount = list.Count }; var dtoOptions = GetDtoOptions(request); result.Items = (await _dtoService.GetBaseItemDtos(list.Take(request.Limit ?? list.Count), dtoOptions, user).ConfigureAwait(false)).ToArray(); return ToOptimizedResult(result); }
private object GetResult(IEnumerable<Audio> items, User user, BaseGetSimilarItems request) { var fields = request.GetItemFields().ToList(); var list = items.ToList(); var result = new ItemsResult { TotalRecordCount = list.Count }; var dtos = list.Take(request.Limit ?? list.Count) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)); result.Items = dtos.ToArray(); return ToOptimizedResult(result); }
protected async Task<IItemDetailSection> GetItemsSection(ItemsResult itemsResult, bool expandSingleItem = true) { return await GetItemsSection(itemsResult, result => (result.Items.Length > 0 && result.Items[0].Type == "Episode") || result.Items.Length > ListThreshold, expandSingleItem); }
private bool SetLatestUnwatched(ItemsResult itemResponse) { SetProgressBar(); if (itemResponse == null || !itemResponse.Items.Any()) { return false; } LatestUnwatched = itemResponse.Items.ToList(); return true; }
private Task<ItemsResult> GetResumeablesAsync(ItemListViewModel viewModel) { var result = new ItemsResult { Items = _tvView.ResumableEpisodes.ToArray(), TotalRecordCount = _tvView.ResumableEpisodes.Count }; ResumeVisibility = result.TotalRecordCount > 0 ? Visibility.Visible : Visibility.Collapsed; return Task.FromResult(result); }
private async Task<Boolean> GeSearchPeopleAsync() { SearchHintResult searchHintResult = await _apiClient.GetSearchHintsAsync(new SearchQuery { UserId = _apiClient.CurrentUserId, SearchTerm = CurrentSearch, IncludePeople = true, IncludeArtists = false, IncludeGenres = false, IncludeMedia = false, IncludeStudios = false, Limit = 9 }); var ids = (searchHintResult.TotalRecordCount > 0) ? searchHintResult.SearchHints.Select(s => s.ItemId).ToArray() : null; if (ids != null && ids.Length > 0) { var query = new ItemQuery { Ids = ids, UserId = _apiClient.CurrentUserId, Fields = FolderPage.QueryFields }; _searchedPeopleItemsResult = await _apiClient.GetItemsAsync(query); } else { _searchedPeopleItemsResult = _emptyItemsResult; } return true; }
private async Task<bool> SetBoxsets(ItemsResult itemResponse) { if (itemResponse == null) { return false; } Boxsets = await Utils.GroupItemsByName(itemResponse.Items); SetProgressBar(); return true; }
private ItemsResult GetInstantMixResult(BaseGetSimilarItems request, IEnumerable<string> genres) { var user = request.UserId.HasValue ? _userManager.GetUserById(request.UserId.Value) : null; var fields = request.GetItemFields().ToList(); var inputItems = user == null ? _libraryManager.RootFolder.RecursiveChildren : user.RootFolder.GetRecursiveChildren(user); var genresDictionary = genres.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); var limit = request.Limit.HasValue ? request.Limit.Value * 2 : 100; var items = inputItems .OfType<Audio>() .Select(i => new Tuple<Audio, int>(i, i.Genres.Count(genresDictionary.ContainsKey))) .OrderByDescending(i => i.Item2) .ThenBy(i => Guid.NewGuid()) .Select(i => i.Item1) .Take(limit) .OrderBy(i => Guid.NewGuid()) .ToList(); var result = new ItemsResult { TotalRecordCount = items.Count }; var dtos = items.Take(request.Limit ?? items.Count) .Select(i => _dtoService.GetBaseItemDto(i, fields, user)); result.Items = dtos.ToArray(); return result; }
private bool SetUpcomingItems(ItemsResult itemResponse) { SetProgressBar(); if (itemResponse == null || !itemResponse.Items.Any()) { return false; } var upcomingItems = itemResponse.Items; var groupedItems = (from u in upcomingItems group u by u.PremiereDate.HasValue ? u.PremiereDate.Value.ToLocalTime().Date : DateTime.MinValue into grp orderby grp.Key select new Group<BaseItemDto>(Utils.CoolDateName(grp.Key.ToLocalTime().Date), grp)).ToList(); Upcoming = groupedItems; return true; }
private async Task<bool> SetFilms(ItemsResult itemResponse) { Films = await Utils.GroupItemsByName(itemResponse.Items); SetProgressBar(); return true; }
private async Task SendItemsToPlaylist(ItemsResult itemResponse) { if (itemResponse == null || itemResponse.Items.IsNullOrEmpty()) { return; } var items = itemResponse.Items.ToList(); var newList = await items.ToPlayListItems(ApiClient); Messenger.Default.Send(new NotificationMessage<List<PlaylistItem>>(newList, Constants.Messages.SetPlaylistAsMsg)); Deployment.Current.Dispatcher.BeginInvoke(() => NavigationService.NavigateTo(Constants.Pages.NowPlayingView)); }
private async Task<ItemsResult> GetInstantMixResult(BaseGetSimilarItems request, IEnumerable<string> genres) { var user = request.UserId.HasValue ? _userManager.GetUserById(request.UserId.Value) : null; var fields = request.GetItemFields().ToList(); var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo); var inputItems = user == null ? _libraryManager.RootFolder.RecursiveChildren : user.RootFolder.GetRecursiveChildren(user); var genresDictionary = genres.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); var limit = request.Limit.HasValue ? request.Limit.Value * 2 : 100; var items = inputItems .OfType<Audio>() .Select(i => new Tuple<Audio, int>(i, i.Genres.Count(genresDictionary.ContainsKey))) .OrderByDescending(i => i.Item2) .ThenBy(i => Guid.NewGuid()) .Select(i => i.Item1) .Take(limit) .OrderBy(i => Guid.NewGuid()) .ToArray(); var result = new ItemsResult { TotalRecordCount = items.Length }; var tasks = items.Take(request.Limit ?? items.Length) .Select(i => dtoBuilder.GetBaseItemDto(i, fields, user)); result.Items = await Task.WhenAll(tasks).ConfigureAwait(false); return result; }
private Task<ItemsResult> GetLatestMoviesAsync(ItemListViewModel viewModel) { var result = new ItemsResult { Items = _moviesView.LatestMovies.ToArray(), TotalRecordCount = _moviesView.LatestMovies.Count }; return Task.FromResult(result); }
private async Task<bool> SetMovies(ItemsResult moviesResponse) { if (moviesResponse != null) { Movies = await Utils.GroupItemsByName(moviesResponse.Items); } SetProgressBar(); return true; }
private Task<ItemsResult> GetGameSystems(ItemListViewModel viewModel) { var result = new ItemsResult { Items = _gamesView.GameSystems.ToArray(), TotalRecordCount = _gamesView.GameSystems.Count }; return Task.FromResult(result); }
private bool SetLatestUnwatched(ItemsResult itemResponse) { if (itemResponse != null && !itemResponse.Items.IsNullOrEmpty()) { var items = itemResponse.Items.ToList(); UnseenHeader = items[0]; items.RemoveAt(0); LatestUnwatched = items; SetProgressBar(); return true; } return false; }
private Task<ItemsResult> GetRecentlyPlayedAsync(ItemListViewModel viewModel) { var result = new ItemsResult { Items = _gamesView.RecentlyPlayedGames.ToArray(), TotalRecordCount = _gamesView.RecentlyPlayedGames.Count }; RecentlyPlayedVisibility = result.Items.Length > 0 ? Visibility.Visible : Visibility.Collapsed; return Task.FromResult(result); }
private async void UpdateSearch() { MatchedPeopleVisibility = String.IsNullOrEmpty(CurrentSearch) ? Visibility.Hidden : Visibility.Visible; MatchedItemsVisibility = String.IsNullOrEmpty(CurrentSearch) ? Visibility.Hidden : Visibility.Visible; if (EmptyResultsTextBlockVisibility == Visibility.Visible) EmptyResultsTextBlockVisibility = Visibility.Collapsed; if (!String.IsNullOrEmpty(CurrentSearch)) { var searchTasks = new Task[2]; searchTasks[0] = Task.Run(() => GeSearchItemsAsync()); searchTasks[1] = Task.Run(() => GeSearchPeopleAsync()); await Task.WhenAll(searchTasks); } else { _searchedItemsResult = _emptyItemsResult; _searchedPeopleItemsResult = _emptyItemsResult; } await MatchedItemsViewModel.ReloadItems(true); await MatchedPeopleViewModel.ReloadItems(true); }
private ItemsResult GetSimilarItemsResult(BaseGetSimilarItemsFromItem request, Func<BaseItem, List<PersonInfo>, List<PersonInfo>, BaseItem, int> getSimilarityScore) { var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null; var item = string.IsNullOrEmpty(request.Id) ? (!string.IsNullOrWhiteSpace(request.UserId) ? user.RootFolder : _libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id); var inputItems = _libraryManager.GetArtists(user.RootFolder.GetRecursiveChildren(user, i => i is IHasArtist).OfType<IHasArtist>()); var list = inputItems.ToList(); var items = SimilarItemsHelper.GetSimilaritems(item, _libraryManager, list, getSimilarityScore).ToList(); IEnumerable<BaseItem> returnItems = items; if (request.Limit.HasValue) { returnItems = returnItems.Take(request.Limit.Value); } var dtoOptions = GetDtoOptions(request); var result = new ItemsResult { Items = _dtoService.GetBaseItemDtos(returnItems, dtoOptions, user).ToArray(), TotalRecordCount = items.Count }; return result; }
private async Task<bool> SetShows(ItemsResult itemResponse) { SetProgressBar(); if (itemResponse == null || itemResponse.Items.IsNullOrEmpty()) { return false; } Shows = await Utils.GroupItemsByName(itemResponse.Items.ToList()); return true; }
private void SendItemsToPlaylist(ItemsResult itemResponse) { if (itemResponse == null || itemResponse.Items.IsNullOrEmpty()) { return; } var items = itemResponse.Items.ToList(); var newList = items.ToPlayListItems(_apiClient); Messenger.Default.Send(new NotificationMessage<List<PlaylistItem>>(newList, Constants.Messages.SetPlaylistAsMsg)); _navigationService.NavigateTo(Constants.Pages.NowPlayingView); }
private bool SetNextUpItems(ItemsResult itemResponse) { SetProgressBar(); if (itemResponse == null || !itemResponse.Items.Any()) { return false; } NextUpList = itemResponse.Items.ToList(); return true; }
private async void LoadItems(ItemsResult result) { BaseItemDto[] items = result.Items; for (int i = 0; i < items.Length; i++) { if (Items.Count > i) { Items[i].Item = items[i]; } else { ItemTileViewModel vm = CreateItem(); vm.Item = items[i]; Items.Add(vm); } } if (Items.Count > items.Length) { List<ItemTileViewModel> toRemove = Items.Skip(items.Length).ToList(); Items.RemoveRange(toRemove); } IsVisible = Items.Count > 0; OnPropertyChanged("Size"); }