public async Task<QueryResult<ProgramInfoDto>> GetPrograms(ProgramQuery query, CancellationToken cancellationToken) { IEnumerable<LiveTvProgram> programs = _programs.Values; if (query.MinEndDate.HasValue) { var val = query.MinEndDate.Value; programs = programs.Where(i => i.EndDate.HasValue && i.EndDate.Value >= val); } if (query.MinStartDate.HasValue) { var val = query.MinStartDate.Value; programs = programs.Where(i => i.StartDate >= val); } if (query.MaxEndDate.HasValue) { var val = query.MaxEndDate.Value; programs = programs.Where(i => i.EndDate.HasValue && i.EndDate.Value <= val); } if (query.MaxStartDate.HasValue) { var val = query.MaxStartDate.Value; programs = programs.Where(i => i.StartDate <= val); } if (query.ChannelIdList.Length > 0) { var guids = query.ChannelIdList.Select(i => new Guid(i)).ToList(); var serviceName = ActiveService.Name; programs = programs.Where(i => { var programChannelId = i.ExternalChannelId; var internalProgramChannelId = _tvDtoService.GetInternalChannelId(serviceName, programChannelId); return guids.Contains(internalProgramChannelId); }); } var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId); if (user != null) { // Avoid implicitly captured closure var currentUser = user; programs = programs.Where(i => i.IsParentalAllowed(currentUser)); } var programList = programs.ToList(); var returnArray = programList .Select(i => { var channel = GetChannel(i); return _tvDtoService.GetProgramInfoDto(i, channel, user); }) .ToArray(); await RefreshIfNeeded(programList, cancellationToken).ConfigureAwait(false); await AddRecordingInfo(returnArray, cancellationToken).ConfigureAwait(false); var result = new QueryResult<ProgramInfoDto> { Items = returnArray, TotalRecordCount = returnArray.Length }; return result; }
public async Task<QueryResult<BaseItemDto>> GetPrograms(ProgramQuery query, DtoOptions options, CancellationToken cancellationToken) { var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId); var internalQuery = new InternalItemsQuery(user) { IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, MinEndDate = query.MinEndDate, MinStartDate = query.MinStartDate, MaxEndDate = query.MaxEndDate, MaxStartDate = query.MaxStartDate, ChannelIds = query.ChannelIds, IsMovie = query.IsMovie, IsSports = query.IsSports, IsKids = query.IsKids, Genres = query.Genres, StartIndex = query.StartIndex, Limit = query.Limit, SortBy = query.SortBy, SortOrder = query.SortOrder ?? SortOrder.Ascending, EnableTotalRecordCount = query.EnableTotalRecordCount }; if (query.HasAired.HasValue) { if (query.HasAired.Value) { internalQuery.MaxEndDate = DateTime.UtcNow; } else { internalQuery.MinEndDate = DateTime.UtcNow; } } var queryResult = _libraryManager.QueryItems(internalQuery); var returnArray = _dtoService.GetBaseItemDtos(queryResult.Items, options, user).ToArray(); var result = new QueryResult<BaseItemDto> { Items = returnArray, TotalRecordCount = queryResult.TotalRecordCount }; return result; }
public async Task<QueryResult<BaseItemDto>> GetPrograms(ProgramQuery query, DtoOptions options, CancellationToken cancellationToken) { var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId); var internalQuery = new InternalItemsQuery { IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, MinEndDate = query.MinEndDate, MinStartDate = query.MinStartDate, MaxEndDate = query.MaxEndDate, MaxStartDate = query.MaxStartDate, ChannelIds = query.ChannelIds, IsMovie = query.IsMovie, IsSports = query.IsSports, IsKids = query.IsKids, Genres = query.Genres, StartIndex = query.StartIndex, Limit = query.Limit, SortBy = query.SortBy, SortOrder = query.SortOrder ?? SortOrder.Ascending }; 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; } } var queryResult = _libraryManager.QueryItems(internalQuery); var returnArray = queryResult.Items .Cast<LiveTvProgram>() .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 = queryResult.TotalRecordCount }; return result; }
public async Task<QueryResult<BaseItemDto>> GetPrograms(ProgramQuery query, CancellationToken cancellationToken) { var internalQuery = new InternalItemsQuery { IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, MinEndDate = query.MinEndDate, MinStartDate = query.MinStartDate, MaxEndDate = query.MaxEndDate, MaxStartDate = query.MaxStartDate, ChannelIds = query.ChannelIds, 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>(); // Apply genre filter if (query.Genres.Length > 0) { programs = programs.Where(p => p.Genres.Any(g => query.Genres.Contains(g, StringComparer.OrdinalIgnoreCase))); } var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId); if (user != null) { // Avoid implicitly captured closure var currentUser = user; programs = programs.Where(i => i.IsVisible(currentUser)); } programs = _libraryManager.Sort(programs, user, query.SortBy, query.SortOrder ?? SortOrder.Ascending) .Cast<LiveTvProgram>(); var programList = programs.ToList(); IEnumerable<LiveTvProgram> returnPrograms = programList; if (query.StartIndex.HasValue) { returnPrograms = returnPrograms.Skip(query.StartIndex.Value); } if (query.Limit.HasValue) { returnPrograms = returnPrograms.Take(query.Limit.Value); } var returnArray = returnPrograms .Select(i => _dtoService.GetBaseItemDto(i, new DtoOptions(), user)) .ToArray(); await AddRecordingInfo(returnArray, cancellationToken).ConfigureAwait(false); var result = new QueryResult<BaseItemDto> { Items = returnArray, TotalRecordCount = programList.Count }; return result; }
private async Task GetProgrammes(bool refresh) { if (!NavigationService.IsNetworkAvailable || (_programmesLoaded && !refresh)) { return; } try { SetProgressBar(AppResources.SysTrayGettingProgrammes); var query = new ProgramQuery { UserId = AuthenticationService.Current.LoggedInUserId, ChannelIds = new[] {SelectedChannel.Id}, MaxEndDate = DateTime.Now.AddDays(1).Date }; var items = await ApiClient.GetLiveTvProgramsAsync(query); if (items != null && !items.Items.IsNullOrEmpty()) { Programmes = items.Items.ToObservableCollection(); } _programmesLoaded = true; } catch (HttpException ex) { Utils.HandleHttpException(ex, "GetProgrammes()", NavigationService, Log); } SetProgressBar(); }
public async Task<QueryResult<BaseItemDto>> GetPrograms(ProgramQuery query, DtoOptions options, CancellationToken cancellationToken) { var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId); var topFolder = await GetInternalLiveTvFolder(cancellationToken).ConfigureAwait(false); if (query.SortBy.Length == 0) { // Unless something else was specified, order by start date to take advantage of a specialized index query.SortBy = new[] { ItemSortBy.StartDate }; } var internalQuery = new InternalItemsQuery(user) { IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, MinEndDate = query.MinEndDate, MinStartDate = query.MinStartDate, MaxEndDate = query.MaxEndDate, MaxStartDate = query.MaxStartDate, ChannelIds = query.ChannelIds, IsMovie = query.IsMovie, IsSeries = query.IsSeries, IsSports = query.IsSports, IsKids = query.IsKids, IsNews = query.IsNews, Genres = query.Genres, StartIndex = query.StartIndex, Limit = query.Limit, SortBy = query.SortBy, SortOrder = query.SortOrder ?? SortOrder.Ascending, EnableTotalRecordCount = query.EnableTotalRecordCount, TopParentIds = new[] { topFolder.Id.ToString("N") }, Name = query.Name, DtoOptions = options }; if (!string.IsNullOrWhiteSpace(query.SeriesTimerId)) { var seriesTimers = await GetSeriesTimersInternal(new SeriesTimerQuery { }, cancellationToken).ConfigureAwait(false); var seriesTimer = seriesTimers.Items.FirstOrDefault(i => string.Equals(_tvDtoService.GetInternalSeriesTimerId(i.ServiceName, i.Id).ToString("N"), query.SeriesTimerId, StringComparison.OrdinalIgnoreCase)); if (seriesTimer != null) { internalQuery.ExternalSeriesId = seriesTimer.SeriesId; if (string.IsNullOrWhiteSpace(seriesTimer.SeriesId)) { // Better to return nothing than every program in the database return new QueryResult<BaseItemDto>(); } } else { // Better to return nothing than every program in the database return new QueryResult<BaseItemDto>(); } } if (query.HasAired.HasValue) { if (query.HasAired.Value) { internalQuery.MaxEndDate = DateTime.UtcNow; } else { internalQuery.MinEndDate = DateTime.UtcNow; } } var queryResult = _libraryManager.QueryItems(internalQuery); RemoveFields(options); var returnArray = (await _dtoService.GetBaseItemDtos(queryResult.Items, options, user).ConfigureAwait(false)).ToArray(); var result = new QueryResult<BaseItemDto> { Items = returnArray, TotalRecordCount = queryResult.TotalRecordCount }; return result; }
public async Task<QueryResult<BaseItemDto>> GetPrograms(ProgramQuery query, DtoOptions options, CancellationToken cancellationToken) { var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId); var topFolder = await GetInternalLiveTvFolder(cancellationToken).ConfigureAwait(false); if (query.SortBy.Length == 0) { // Unless something else was specified, order by start date to take advantage of a specialized index query.SortBy = new[] { ItemSortBy.StartDate }; } var internalQuery = new InternalItemsQuery(user) { IncludeItemTypes = new[] { typeof(LiveTvProgram).Name }, MinEndDate = query.MinEndDate, MinStartDate = query.MinStartDate, MaxEndDate = query.MaxEndDate, MaxStartDate = query.MaxStartDate, ChannelIds = query.ChannelIds, IsMovie = query.IsMovie, IsSports = query.IsSports, IsKids = query.IsKids, Genres = query.Genres, StartIndex = query.StartIndex, Limit = query.Limit, SortBy = query.SortBy, SortOrder = query.SortOrder ?? SortOrder.Ascending, EnableTotalRecordCount = query.EnableTotalRecordCount, TopParentIds = new[] { topFolder.Id.ToString("N") } }; if (query.HasAired.HasValue) { if (query.HasAired.Value) { internalQuery.MaxEndDate = DateTime.UtcNow; } else { internalQuery.MinEndDate = DateTime.UtcNow; } } var queryResult = _libraryManager.QueryItems(internalQuery); RemoveFields(options); var returnArray = (await _dtoService.GetBaseItemDtos(queryResult.Items, options, user).ConfigureAwait(false)).ToArray(); var result = new QueryResult<BaseItemDto> { Items = returnArray, TotalRecordCount = queryResult.TotalRecordCount }; return result; }
public Task<QueryResult<ProgramInfoDto>> GetPrograms(ProgramQuery query, CancellationToken cancellationToken) { IEnumerable<ProgramInfoDto> programs = _programs .OrderBy(i => i.StartDate) .ThenBy(i => i.EndDate); if (query.ChannelIdList.Length > 0) { var guids = query.ChannelIdList.Select(i => new Guid(i)).ToList(); programs = programs.Where(i => guids.Contains(new Guid(i.ChannelId))); } var returnArray = programs.ToArray(); var result = new QueryResult<ProgramInfoDto> { Items = returnArray, TotalRecordCount = returnArray.Length }; return Task.FromResult(result); }
public IEnumerable<ProgramInfo> GetPrograms(ProgramQuery query) { var programs = _guide.Values.SelectMany(i => i); if (!string.IsNullOrEmpty(query.ServiceName)) { programs = programs.Where(i => string.Equals(i.ServiceName, query.ServiceName, StringComparison.OrdinalIgnoreCase)); } if (query.ChannelIdList.Length > 0) { var guids = query.ChannelIdList.Select(i => new Guid(i)).ToList(); programs = programs.Where(i => guids.Contains(new Guid(i.ChannelId))); } return programs; }
public async Task<QueryResult<ProgramInfoDto>> GetPrograms(ProgramQuery query, CancellationToken cancellationToken) { IEnumerable<LiveTvProgram> programs = _programs.Values; if (query.ChannelIdList.Length > 0) { var guids = query.ChannelIdList.Select(i => new Guid(i)).ToList(); var serviceName = ActiveService.Name; programs = programs.Where(i => { var programChannelId = i.ProgramInfo.ChannelId; var internalProgramChannelId = _tvDtoService.GetInternalChannelId(serviceName, programChannelId); return guids.Contains(internalProgramChannelId); }); } var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(new Guid(query.UserId)); if (user != null) { programs = programs.Where(i => i.IsParentalAllowed(user, _localization)); } var returnArray = programs .OrderBy(i => i.ProgramInfo.StartDate) .Select(i => _tvDtoService.GetProgramInfoDto(i, user)) .ToArray(); await AddRecordingInfo(returnArray, cancellationToken).ConfigureAwait(false); var result = new QueryResult<ProgramInfoDto> { Items = returnArray, TotalRecordCount = returnArray.Length }; return result; }