public IEnumerable<Episode> GetNextUpEpisodes(NextUpQuery request, User user, IEnumerable<Series> series) { // Avoid implicitly captured closure var currentUser = user; return FilterSeries(request, series) .AsParallel() .Select(i => GetNextUp(i, currentUser)) .Where(i => i.Item1 != null) .OrderByDescending(i => { var episode = i.Item1; var seriesUserData = _userDataManager.GetUserData(user.Id, episode.Series.GetUserDataKey()); if (seriesUserData.IsFavorite) { return 2; } if (seriesUserData.Likes.HasValue) { return seriesUserData.Likes.Value ? 1 : -1; } return 0; }) .ThenByDescending(i => i.Item2) .ThenByDescending(i => i.Item1.PremiereDate ?? DateTime.MinValue) .Select(i => i.Item1); }
public IEnumerable<Episode> GetNextUpEpisodes(NextUpQuery request, User user, IEnumerable<Series> series) { // Avoid implicitly captured closure var currentUser = user; return FilterSeries(request, series) .AsParallel() .Select(i => GetNextUp(i, currentUser)) // Include if an episode was found, and either the series is not unwatched or the specific series was requested .Where(i => i.Item1 != null && (!i.Item3 || !string.IsNullOrWhiteSpace(request.SeriesId))) .OrderByDescending(i => { var episode = i.Item1; var seriesUserData = _userDataManager.GetUserData(user.Id, episode.Series.GetUserDataKey()); if (seriesUserData.IsFavorite) { return 2; } if (seriesUserData.Likes.HasValue) { return seriesUserData.Likes.Value ? 1 : -1; } return 0; }) .ThenByDescending(i => i.Item2) .ThenByDescending(i => i.Item1.PremiereDate ?? DateTime.MinValue) .Select(i => i.Item1); }
public QueryResult<BaseItem> GetNextUp(NextUpQuery request) { var user = _userManager.GetUserById(request.UserId); if (user == null) { throw new ArgumentException("User not found"); } var parentIds = string.IsNullOrEmpty(request.ParentId) ? new string[] { } : new[] { request.ParentId }; var items = _libraryManager.GetItems(new InternalItemsQuery(user) { IncludeItemTypes = new[] { typeof(Series).Name }, SortOrder = SortOrder.Ascending }, parentIds).Cast<Series>(); // Avoid implicitly captured closure var episodes = GetNextUpEpisodes(request, user, items); return GetResult(episodes, null, request); }
public QueryResult<BaseItem> GetNextUp(NextUpQuery request, IEnumerable<Folder> parentsFolders) { var user = _userManager.GetUserById(new Guid(request.UserId)); if (user == null) { throw new ArgumentException("User not found"); } var items = parentsFolders.SelectMany(i => i.GetRecursiveChildren(user)) .OfType<Series>(); // Avoid implicitly captured closure var episodes = GetNextUpEpisodes(request, user, items); return GetResult(episodes, null, request); }
public QueryResult<BaseItem> GetNextUp(NextUpQuery request) { var user = _userManager.GetUserById(request.UserId); if (user == null) { throw new ArgumentException("User not found"); } var parentIdGuid = string.IsNullOrWhiteSpace(request.ParentId) ? (Guid?)null : new Guid(request.ParentId); string presentationUniqueKey = null; int? limit = null; if (!string.IsNullOrWhiteSpace(request.SeriesId)) { var series = _libraryManager.GetItemById(request.SeriesId); if (series != null) { presentationUniqueKey = GetUniqueSeriesKey(series); limit = 1; } } if (string.IsNullOrWhiteSpace(presentationUniqueKey) && limit.HasValue) { limit = limit.Value + 10; } var items = _libraryManager.GetItemList(new InternalItemsQuery(user) { IncludeItemTypes = new[] { typeof(Series).Name }, SortOrder = SortOrder.Ascending, PresentationUniqueKey = presentationUniqueKey, Limit = limit, ParentId = parentIdGuid, Recursive = true }).Cast<Series>(); // Avoid implicitly captured closure var episodes = GetNextUpEpisodes(request, user, items); return GetResult(episodes, null, request); }
public QueryResult<BaseItem> GetNextUp(NextUpQuery request, IEnumerable<Folder> parentsFolders) { var user = _userManager.GetUserById(request.UserId); if (user == null) { throw new ArgumentException("User not found"); } string presentationUniqueKey = null; int? limit = null; if (!string.IsNullOrWhiteSpace(request.SeriesId)) { var series = _libraryManager.GetItemById(request.SeriesId); if (series != null) { presentationUniqueKey = GetUniqueSeriesKey(series); limit = 1; } } if (string.IsNullOrWhiteSpace(presentationUniqueKey) && limit.HasValue) { limit = limit.Value + 10; } var items = _libraryManager.GetItemList(new InternalItemsQuery(user) { IncludeItemTypes = new[] { typeof(Series).Name }, SortOrder = SortOrder.Ascending, PresentationUniqueKey = presentationUniqueKey, Limit = limit }, parentsFolders.Select(i => i.Id.ToString("N"))).Cast<Series>(); // Avoid implicitly captured closure var episodes = GetNextUpEpisodes(request, user, items); return GetResult(episodes, null, request); }
public QueryResult<BaseItem> GetNextUp(NextUpQuery request) { var user = _userManager.GetUserById(request.UserId); if (user == null) { throw new ArgumentException("User not found"); } var parentIds = string.IsNullOrEmpty(request.ParentId) ? new string[] { } : new[] { request.ParentId }; var items = GetAllLibraryItems(user, parentIds, i => i is Series) .Cast<Series>(); // Avoid implicitly captured closure var episodes = GetNextUpEpisodes(request, user, items); return GetResult(episodes, null, request); }
public QueryResult<BaseItem> GetNextUp(NextUpQuery request, IEnumerable<Folder> parentsFolders) { var user = _userManager.GetUserById(request.UserId); if (user == null) { throw new ArgumentException("User not found"); } var items = _libraryManager.GetItems(new InternalItemsQuery(user) { IncludeItemTypes = new[] { typeof(Series).Name }, SortOrder = SortOrder.Ascending }, parentsFolders.Select(i => i.Id.ToString("N"))).Cast<Series>(); // Avoid implicitly captured closure var episodes = GetNextUpEpisodes(request, user, items); return GetResult(episodes, null, request); }
public QueryResult<BaseItem> GetNextUp(NextUpQuery request) { var user = _userManager.GetUserById(request.UserId); if (user == null) { throw new ArgumentException("User not found"); } var parentIds = string.IsNullOrEmpty(request.ParentId) ? new string[] { } : new[] { request.ParentId }; string presentationUniqueKey = null; int? limit = null; if (!string.IsNullOrWhiteSpace(request.SeriesId)) { var series = _libraryManager.GetItemById(request.SeriesId); if (series != null) { presentationUniqueKey = series.PresentationUniqueKey; limit = 1; } } var items = _libraryManager.GetItemList(new InternalItemsQuery(user) { IncludeItemTypes = new[] { typeof(Series).Name }, SortOrder = SortOrder.Ascending, PresentationUniqueKey = presentationUniqueKey, Limit = limit }, parentIds).Cast<Series>(); // Avoid implicitly captured closure var episodes = GetNextUpEpisodes(request, user, items); return GetResult(episodes, null, request); }
private async Task<bool> GetNextUp() { try { SetProgressBar("Getting next up items..."); var query = new NextUpQuery { UserId = AuthenticationService.Current.LoggedInUser.Id }; Log.Info("Getting next up items"); var itemResponse = await _apiClient.GetNextUpAsync(query); return SetNextUpItems(itemResponse); } catch (HttpException ex) { Log.ErrorException("GetNextUp()", ex); } SetProgressBar(); return false; }
private QueryResult<BaseItem> GetResult(IEnumerable<BaseItem> items, int? totalRecordLimit, NextUpQuery query) { var itemsArray = totalRecordLimit.HasValue ? items.Take(totalRecordLimit.Value).ToArray() : items.ToArray(); var totalCount = itemsArray.Length; if (query.Limit.HasValue) { itemsArray = itemsArray.Skip(query.StartIndex ?? 0).Take(query.Limit.Value).ToArray(); } else if (query.StartIndex.HasValue) { itemsArray = itemsArray.Skip(query.StartIndex.Value).ToArray(); } return new QueryResult<BaseItem> { TotalRecordCount = totalCount, Items = itemsArray }; }
private IEnumerable<Series> FilterSeries(NextUpQuery request, IEnumerable<Series> items) { if (!string.IsNullOrWhiteSpace(request.SeriesId)) { var id = new Guid(request.SeriesId); items = items.Where(i => i.Id == id); } return items; }
private async Task<ItemsResult> GetNextUpAsync(ItemListViewModel viewModel) { var query = new NextUpQuery { Fields = new[] { ItemFields.PrimaryImageAspectRatio, ItemFields.DateCreated, ItemFields.DisplayPreferencesId }, UserId = _sessionManager.CurrentUser.Id, Limit = 15 }; var result = await ApiClient.GetNextUpAsync(query); ShowNextUp = result.TotalRecordCount > 0; return result; }
public IEnumerable<Episode> GetNextUpEpisodes(NextUpQuery request, User user, IEnumerable<Series> series) { // Avoid implicitly captured closure var currentUser = user; var allNextUp = series .Select(i => GetNextUp(i, currentUser)) .Where(i => i.Item1 != null) // Include if an episode was found, and either the series is not unwatched or the specific series was requested .OrderByDescending(i => i.Item2) .ThenByDescending(i => i.Item1.PremiereDate ?? DateTime.MinValue) .ToList(); // If viewing all next up for all series, remove first episodes if (string.IsNullOrWhiteSpace(request.SeriesId)) { var withoutFirstEpisode = allNextUp .Where(i => !i.Item3) .ToList(); // But if that returns empty, keep those first episodes (avoid completely empty view) if (withoutFirstEpisode.Count > 0) { allNextUp = withoutFirstEpisode; } } return allNextUp .Select(i => i.Item1) .Take(request.Limit ?? int.MaxValue); }
private async Task<bool> GetNextUp() { try { SetProgressBar(AppResources.SysTrayGettingNextUp); var query = new NextUpQuery { ParentId = _parentId, UserId = AuthenticationService.Current.LoggedInUserId, Fields = new[] { ItemFields.PrimaryImageAspectRatio, ItemFields.ParentId, ItemFields.MediaSources, ItemFields.SyncInfo }, ImageTypeLimit = 1, EnableImageTypes = new []{ImageType.Backdrop, ImageType.Primary} }; Log.Info("Getting next up items"); var itemResponse = await ApiClient.GetNextUpEpisodesAsync(query); return SetNextUpItems(itemResponse); } catch (HttpException ex) { Utils.HandleHttpException("GetNextUp()", ex, NavigationService, Log); } SetProgressBar(); return false; }