private async Task LoadData(bool isRefresh) { if (!NavigationService.IsNetworkAvailable || (_programmesLoaded && !isRefresh)) { return; } RecommendedProgramQuery query; if (_isWhatsOn) { query = new RecommendedProgramQuery { IsAiring = true, UserId = AuthenticationService.Current.LoggedInUserId }; } else { query = new RecommendedProgramQuery { HasAired = false, UserId = AuthenticationService.Current.LoggedInUserId }; } SetProgressBar(AppResources.SysTrayLoadingProgrammes); try { var items = await ApiClient.GetRecommendedLiveTvProgramsAsync(query); if (items != null && !items.Items.IsNullOrEmpty()) { Programmes = items.Items.ToList(); _programmesLoaded = true; } } catch (HttpException ex) { Utils.HandleHttpException(ex, "LoadData(" + isRefresh + ")", NavigationService, Log); } SetProgressBar(); }
public async Task<QueryResult<ProgramInfoDto>> GetRecommendedPrograms(RecommendedProgramQuery query, CancellationToken cancellationToken) { var internalResult = await GetRecommendedProgramsInternal(query, cancellationToken).ConfigureAwait(false); var user = _userManager.GetUserById(query.UserId); var returnArray = internalResult.Items .Select(i => { var channel = GetChannel(i); return _tvDtoService.GetProgramInfoDto(i, channel, user); }) .ToArray(); await AddRecordingInfo(returnArray, cancellationToken).ConfigureAwait(false); var result = new QueryResult<ProgramInfoDto> { Items = returnArray, TotalRecordCount = internalResult.TotalRecordCount }; return result; }
public async Task<QueryResult<LiveTvProgram>> GetRecommendedProgramsInternal(RecommendedProgramQuery query, CancellationToken cancellationToken) { IEnumerable<LiveTvProgram> programs = _programs.Values; var user = _userManager.GetUserById(query.UserId); // Avoid implicitly captured closure var currentUser = user; programs = programs.Where(i => i.IsParentalAllowed(currentUser)); if (query.IsAiring.HasValue) { var val = query.IsAiring.Value; programs = programs.Where(i => i.IsAiring == val); } if (query.HasAired.HasValue) { var val = query.HasAired.Value; programs = programs.Where(i => i.HasAired == val); } var serviceName = ActiveService.Name; var programList = programs.ToList(); var genres = programList.SelectMany(i => i.Genres) .Distinct(StringComparer.OrdinalIgnoreCase) .Select(i => _libraryManager.GetGenre(i)) .ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase); programs = programList.OrderBy(i => i.HasImage(ImageType.Primary) ? 0 : 1) .ThenByDescending(i => GetRecommendationScore(i, user.Id, serviceName, genres)) .ThenBy(i => i.StartDate); if (query.Limit.HasValue) { programs = programs.Take(query.Limit.Value) .OrderBy(i => i.StartDate); } programList = programs.ToList(); await RefreshIfNeeded(programList, cancellationToken).ConfigureAwait(false); var returnArray = programList.ToArray(); var result = new QueryResult<LiveTvProgram> { Items = returnArray, TotalRecordCount = returnArray.Length }; return result; }
public async Task<QueryResult<BaseItemDto>> GetRecommendedPrograms(RecommendedProgramQuery query, DtoOptions options, CancellationToken cancellationToken) { var internalResult = await GetRecommendedProgramsInternal(query, cancellationToken).ConfigureAwait(false); var user = _userManager.GetUserById(query.UserId); var returnArray = internalResult.Items .Select(i => new Tuple<BaseItemDto, string, string>(_dtoService.GetBaseItemDto(i, options, user), i.ServiceName, i.ExternalId)) .ToArray(); await AddRecordingInfo(returnArray, cancellationToken).ConfigureAwait(false); var result = new QueryResult<BaseItemDto> { Items = returnArray.Select(i => i.Item1).ToArray(), TotalRecordCount = internalResult.TotalRecordCount }; return result; }
public async Task<QueryResult<LiveTvProgram>> GetRecommendedProgramsInternal(RecommendedProgramQuery query, CancellationToken cancellationToken) { var user = _userManager.GetUserById(query.UserId); var internalQuery = new InternalItemsQuery { IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, IsAiring = query.IsAiring, IsMovie = query.IsMovie, IsSports = query.IsSports, IsKids = query.IsKids }; if (user != null) { internalQuery.MaxParentalRating = user.Policy.MaxParentalRating; if (user.Policy.BlockUnratedItems.Contains(UnratedItem.LiveTvProgram)) { internalQuery.HasParentalRating = true; } } if (query.HasAired.HasValue) { if (query.HasAired.Value) { internalQuery.MaxEndDate = DateTime.UtcNow; } else { internalQuery.MinEndDate = DateTime.UtcNow; } } IEnumerable<LiveTvProgram> programs = _libraryManager.QueryItems(internalQuery).Items.Cast<LiveTvProgram>(); var programList = programs.ToList(); var genres = programList.SelectMany(i => i.Genres) .Where(i => !string.IsNullOrWhiteSpace(i)) .DistinctNames() .Select(i => _libraryManager.GetGenre(i)) .DistinctBy(i => i.Id) .ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase); programs = programList.OrderBy(i => i.HasImage(ImageType.Primary) ? 0 : 1) .ThenByDescending(i => GetRecommendationScore(i, user.Id, genres)) .ThenBy(i => i.StartDate); if (query.Limit.HasValue) { programs = programs.Take(query.Limit.Value); } programList = programs.ToList(); var returnArray = programList.ToArray(); var result = new QueryResult<LiveTvProgram> { Items = returnArray, TotalRecordCount = returnArray.Length }; return result; }
public async Task<QueryResult<BaseItemDto>> GetRecommendedPrograms(RecommendedProgramQuery query, DtoOptions options, CancellationToken cancellationToken) { var internalResult = await GetRecommendedProgramsInternal(query, cancellationToken).ConfigureAwait(false); var user = _userManager.GetUserById(query.UserId); var returnArray = _dtoService.GetBaseItemDtos(internalResult.Items, options, user).ToArray(); var result = new QueryResult<BaseItemDto> { Items = returnArray, TotalRecordCount = internalResult.TotalRecordCount }; return result; }
public async Task<QueryResult<LiveTvProgram>> GetRecommendedProgramsInternal(RecommendedProgramQuery query, CancellationToken cancellationToken) { var internalQuery = new InternalItemsQuery { IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, IsAiring = query.IsAiring, IsMovie = query.IsMovie, IsSports = query.IsSports }; if (query.HasAired.HasValue) { if (query.HasAired.Value) { internalQuery.MaxEndDate = DateTime.UtcNow; } else { internalQuery.MinEndDate = DateTime.UtcNow; } } IEnumerable<LiveTvProgram> programs = _libraryManager.GetItems(internalQuery).Items.Cast<LiveTvProgram>(); var user = _userManager.GetUserById(query.UserId); // Avoid implicitly captured closure var currentUser = user; programs = programs.Where(i => i.IsVisible(currentUser)); var programList = programs.ToList(); var genres = programList.SelectMany(i => i.Genres) .DistinctNames() .Select(i => _libraryManager.GetGenre(i)) .ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase); programs = programList.OrderBy(i => i.HasImage(ImageType.Primary) ? 0 : 1) .ThenByDescending(i => GetRecommendationScore(i, user.Id, genres)) .ThenBy(i => i.StartDate); if (query.Limit.HasValue) { programs = programs.Take(query.Limit.Value) .OrderBy(i => i.StartDate); } programList = programs.ToList(); var returnArray = programList.ToArray(); var result = new QueryResult<LiveTvProgram> { Items = returnArray, TotalRecordCount = returnArray.Length }; return result; }
public async Task<QueryResult<LiveTvProgram>> GetRecommendedProgramsInternal(RecommendedProgramQuery query, DtoOptions options, CancellationToken cancellationToken) { var user = _userManager.GetUserById(query.UserId); var topFolder = await GetInternalLiveTvFolder(cancellationToken).ConfigureAwait(false); var internalQuery = new InternalItemsQuery(user) { IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, IsAiring = query.IsAiring, IsNews = query.IsNews, IsMovie = query.IsMovie, IsSeries = query.IsSeries, IsSports = query.IsSports, IsKids = query.IsKids, EnableTotalRecordCount = query.EnableTotalRecordCount, SortBy = new[] { ItemSortBy.StartDate }, TopParentIds = new[] { topFolder.Id.ToString("N") }, DtoOptions = options }; if (query.Limit.HasValue) { internalQuery.Limit = Math.Max(query.Limit.Value * 4, 200); } if (query.HasAired.HasValue) { if (query.HasAired.Value) { internalQuery.MaxEndDate = DateTime.UtcNow; } else { internalQuery.MinEndDate = DateTime.UtcNow; } } IEnumerable<LiveTvProgram> programs = _libraryManager.QueryItems(internalQuery).Items.Cast<LiveTvProgram>(); var programList = programs.ToList(); var factorChannelWatchCount = (query.IsAiring ?? false) || (query.IsKids ?? false) || (query.IsSports ?? false) || (query.IsMovie ?? false) || (query.IsNews ?? false) || (query.IsSeries ?? false); programs = programList.OrderBy(i => i.StartDate.Date) .ThenByDescending(i => GetRecommendationScore(i, user.Id, factorChannelWatchCount)) .ThenBy(i => i.StartDate); if (query.Limit.HasValue) { programs = programs.Take(query.Limit.Value); } programList = programs.ToList(); var returnArray = programList.ToArray(); var result = new QueryResult<LiveTvProgram> { Items = returnArray, TotalRecordCount = returnArray.Length }; return result; }
private async Task GetWhatsOn(bool isRefresh) { if (_whatsOnLoaded && !isRefresh && !LiveTvHelper.HasExpired(_whatsOnLastRun)) { return; } try { SetProgressBar(AppResources.SystemTrayGettingWhatsOn); var query = new RecommendedProgramQuery { IsAiring = true, Limit = 7, UserId = AuthenticationService.Current.LoggedInUserId }; var items = await ApiClient.GetRecommendedLiveTvProgramsAsync(query); if (items != null && !items.Items.IsNullOrEmpty()) { WhatsOn = items.Items.Take(6).ToList(); ShowMoreWhatsOn = items.Items.Count() > 6; _whatsOnLoaded = true; _whatsOnLastRun = DateTime.Now; } } catch (HttpException ex) { Utils.HandleHttpException("GetUpcoming()", ex, NavigationService, Log); } SetProgressBar(); }