public async Task<QueryResult<RecordingInfoDto>> GetRecordings(RecordingQuery query, CancellationToken cancellationToken) { var service = ActiveService; if (service == null) { return new QueryResult<RecordingInfoDto> { Items = new RecordingInfoDto[] { } }; } var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId); var internalResult = await GetInternalRecordings(query, cancellationToken).ConfigureAwait(false); var returnArray = internalResult.Items.Cast<ILiveTvRecording>() .Select(i => { var channel = string.IsNullOrEmpty(i.RecordingInfo.ChannelId) ? null : GetInternalChannel(_tvDtoService.GetInternalChannelId(service.Name, i.RecordingInfo.ChannelId)); return _tvDtoService.GetRecordingInfoDto(i, channel, service, user); }) .ToArray(); return new QueryResult<RecordingInfoDto> { Items = returnArray, TotalRecordCount = internalResult.TotalRecordCount }; }
public async Task<QueryResult<BaseItemDto>> GetRecordings(RecordingQuery query, DtoOptions options, CancellationToken cancellationToken) { var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId); var internalResult = await GetInternalRecordings(query, cancellationToken).ConfigureAwait(false); var returnArray = internalResult.Items .Select(i => _dtoService.GetBaseItemDto(i, options, user)) .ToArray(); if (user != null) { _dtoService.FillSyncInfo(returnArray, new DtoOptions(), user); } return new QueryResult<BaseItemDto> { Items = returnArray, TotalRecordCount = internalResult.TotalRecordCount }; }
public async Task<QueryResult<BaseItem>> GetInternalRecordings(RecordingQuery query, CancellationToken cancellationToken) { var service = ActiveService; if (service == null) { return new QueryResult<BaseItem> { Items = new BaseItem[] { } }; } var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId); var recordings = await service.GetRecordingsAsync(cancellationToken).ConfigureAwait(false); if (user != null && !IsLiveTvEnabled(user)) { recordings = new List<RecordingInfo>(); } if (!string.IsNullOrEmpty(query.ChannelId)) { var guid = new Guid(query.ChannelId); var currentServiceName = service.Name; recordings = recordings .Where(i => _tvDtoService.GetInternalChannelId(currentServiceName, i.ChannelId) == guid); } if (!string.IsNullOrEmpty(query.Id)) { var guid = new Guid(query.Id); var currentServiceName = service.Name; recordings = recordings .Where(i => _tvDtoService.GetInternalRecordingId(currentServiceName, i.Id) == guid); } if (!string.IsNullOrEmpty(query.GroupId)) { var guid = new Guid(query.GroupId); recordings = recordings.Where(i => GetRecordingGroupIds(i).Contains(guid)); } if (query.IsInProgress.HasValue) { var val = query.IsInProgress.Value; recordings = recordings.Where(i => (i.Status == RecordingStatus.InProgress) == val); } if (query.Status.HasValue) { var val = query.Status.Value; recordings = recordings.Where(i => (i.Status == val)); } if (!string.IsNullOrEmpty(query.SeriesTimerId)) { var guid = new Guid(query.SeriesTimerId); var currentServiceName = service.Name; recordings = recordings .Where(i => _tvDtoService.GetInternalSeriesTimerId(currentServiceName, i.SeriesTimerId) == guid); } recordings = recordings.OrderByDescending(i => i.StartDate); IEnumerable<ILiveTvRecording> entities = await GetEntities(recordings, service.Name, cancellationToken).ConfigureAwait(false); if (user != null) { var currentUser = user; entities = entities.Where(i => i.IsParentalAllowed(currentUser)); } var entityList = entities.ToList(); entities = entityList; if (query.StartIndex.HasValue) { entities = entities.Skip(query.StartIndex.Value); } if (query.Limit.HasValue) { entities = entities.Take(query.Limit.Value); } return new QueryResult<BaseItem> { Items = entities.Cast<BaseItem>().ToArray(), TotalRecordCount = entityList.Count }; }
public async Task<QueryResult<BaseItemDto>> GetRecordings(RecordingQuery query, DtoOptions options, CancellationToken cancellationToken) { var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId); var internalResult = await GetInternalRecordings(query, cancellationToken).ConfigureAwait(false); var returnArray = _dtoService.GetBaseItemDtos(internalResult.Items, options, user).ToArray(); return new QueryResult<BaseItemDto> { Items = returnArray, TotalRecordCount = internalResult.TotalRecordCount }; }
public async Task<QueryResult<BaseItem>> GetInternalRecordings(RecordingQuery query, CancellationToken cancellationToken) { var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId); if (user != null && !IsLiveTvEnabled(user)) { return new QueryResult<BaseItem>(); } await RefreshRecordings(cancellationToken).ConfigureAwait(false); var internalQuery = new InternalItemsQuery { IncludeItemTypes = new[] { typeof(LiveTvVideoRecording).Name, typeof(LiveTvAudioRecording).Name } }; if (!string.IsNullOrEmpty(query.ChannelId)) { internalQuery.ChannelIds = new[] { query.ChannelId }; } var queryResult = _libraryManager.GetItems(internalQuery); IEnumerable<ILiveTvRecording> recordings = queryResult.Items.Cast<ILiveTvRecording>(); if (!string.IsNullOrEmpty(query.Id)) { var guid = new Guid(query.Id); recordings = recordings .Where(i => i.Id == guid); } if (!string.IsNullOrEmpty(query.GroupId)) { var guid = new Guid(query.GroupId); recordings = recordings.Where(i => GetRecordingGroupIds(i).Contains(guid)); } if (query.IsInProgress.HasValue) { var val = query.IsInProgress.Value; recordings = recordings.Where(i => (i.Status == RecordingStatus.InProgress) == val); } if (query.Status.HasValue) { var val = query.Status.Value; recordings = recordings.Where(i => (i.Status == val)); } if (!string.IsNullOrEmpty(query.SeriesTimerId)) { var guid = new Guid(query.SeriesTimerId); recordings = recordings .Where(i => _tvDtoService.GetInternalSeriesTimerId(i.ServiceName, i.SeriesTimerId) == guid); } recordings = recordings.OrderByDescending(i => i.StartDate); var entityList = recordings.ToList(); IEnumerable<ILiveTvRecording> entities = entityList; if (query.StartIndex.HasValue) { entities = entities.Skip(query.StartIndex.Value); } if (query.Limit.HasValue) { entities = entities.Take(query.Limit.Value); } return new QueryResult<BaseItem> { Items = entities.Cast<BaseItem>().ToArray(), TotalRecordCount = entityList.Count }; }
public async Task<QueryResult<BaseItemDto>> GetRecordingSeries(RecordingQuery query, DtoOptions options, CancellationToken cancellationToken) { var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId); if (user != null && !IsLiveTvEnabled(user)) { return new QueryResult<BaseItemDto>(); } if (_services.Count > 1) { return new QueryResult<BaseItemDto>(); } if (user == null || (query.IsInProgress ?? false)) { return new QueryResult<BaseItemDto>(); } var folders = EmbyTV.EmbyTV.Current.GetRecordingFolders() .SelectMany(i => i.Locations) .Distinct(StringComparer.OrdinalIgnoreCase) .Select(i => _libraryManager.FindByPath(i, true)) .Where(i => i != null) .Where(i => i.IsVisibleStandalone(user)) .ToList(); if (folders.Count == 0) { return new QueryResult<BaseItemDto>(); } var includeItemTypes = new List<string>(); var excludeItemTypes = new List<string>(); includeItemTypes.Add(typeof(Series).Name); var internalResult = _libraryManager.GetItemsResult(new InternalItemsQuery(user) { Recursive = true, AncestorIds = folders.Select(i => i.Id.ToString("N")).ToArray(), Limit = query.Limit, SortBy = new[] { ItemSortBy.DateCreated }, SortOrder = SortOrder.Descending, EnableTotalRecordCount = query.EnableTotalRecordCount, IncludeItemTypes = includeItemTypes.ToArray(), ExcludeItemTypes = excludeItemTypes.ToArray() }); RemoveFields(options); var returnArray = (await _dtoService.GetBaseItemDtos(internalResult.Items, options, user).ConfigureAwait(false)).ToArray(); return new QueryResult<BaseItemDto> { Items = returnArray, TotalRecordCount = internalResult.TotalRecordCount }; }
private QueryResult<BaseItem> GetEmbyRecordings(RecordingQuery query, User user) { if (user == null || (query.IsInProgress ?? false)) { return new QueryResult<BaseItem>(); } var folders = EmbyTV.EmbyTV.Current.GetRecordingFolders() .SelectMany(i => i.Locations) .Distinct(StringComparer.OrdinalIgnoreCase) .Select(i => _libraryManager.FindByPath(i, true)) .Where(i => i != null) .Where(i => i.IsVisibleStandalone(user)) .ToList(); var items = _libraryManager.GetItemsResult(new InternalItemsQuery(user) { MediaTypes = new[] { MediaType.Video }, Recursive = true, AncestorIds = folders.Select(i => i.Id.ToString("N")).ToArray(), ExcludeLocationTypes = new[] { LocationType.Virtual }, Limit = Math.Min(10, query.Limit ?? int.MaxValue) }); return items; }
private QueryResult<BaseItem> GetEmbyRecordings(RecordingQuery query, User user) { if (user == null || (query.IsInProgress ?? false)) { return new QueryResult<BaseItem>(); } var folders = EmbyTV.EmbyTV.Current.GetRecordingFolders() .SelectMany(i => i.Locations) .Distinct(StringComparer.OrdinalIgnoreCase) .Select(i => _libraryManager.FindByPath(i, true)) .Where(i => i != null) .Where(i => i.IsVisibleStandalone(user)) .ToList(); if (folders.Count == 0) { return new QueryResult<BaseItem>(); } return _libraryManager.GetItemsResult(new InternalItemsQuery(user) { MediaTypes = new[] { MediaType.Video }, Recursive = true, AncestorIds = folders.Select(i => i.Id.ToString("N")).ToArray(), IsFolder = false, ExcludeLocationTypes = new[] { LocationType.Virtual }, Limit = Math.Min(200, query.Limit ?? int.MaxValue), SortBy = new[] { ItemSortBy.DateCreated }, SortOrder = SortOrder.Descending, EnableTotalRecordCount = query.EnableTotalRecordCount }); }
private QueryResult<BaseItem> GetEmbyRecordings(RecordingQuery query, DtoOptions dtoOptions, User user) { if (user == null) { return new QueryResult<BaseItem>(); } if ((query.IsInProgress ?? false)) { return new QueryResult<BaseItem>(); } var folders = EmbyTV.EmbyTV.Current.GetRecordingFolders() .SelectMany(i => i.Locations) .Distinct(StringComparer.OrdinalIgnoreCase) .Select(i => _libraryManager.FindByPath(i, true)) .Where(i => i != null) .Where(i => i.IsVisibleStandalone(user)) .ToList(); if (folders.Count == 0) { return new QueryResult<BaseItem>(); } var includeItemTypes = new List<string>(); var excludeItemTypes = new List<string>(); var genres = new List<string>(); if (query.IsMovie.HasValue) { if (query.IsMovie.Value) { includeItemTypes.Add(typeof(Movie).Name); } else { excludeItemTypes.Add(typeof(Movie).Name); } } if (query.IsSeries.HasValue) { if (query.IsSeries.Value) { includeItemTypes.Add(typeof(Episode).Name); } else { excludeItemTypes.Add(typeof(Episode).Name); } } if (query.IsSports.HasValue) { if (query.IsSports.Value) { genres.Add("Sports"); } } if (query.IsKids.HasValue) { if (query.IsKids.Value) { genres.Add("Kids"); genres.Add("Children"); genres.Add("Family"); } } return _libraryManager.GetItemsResult(new InternalItemsQuery(user) { MediaTypes = new[] { MediaType.Video }, Recursive = true, AncestorIds = folders.Select(i => i.Id.ToString("N")).ToArray(), IsFolder = false, ExcludeLocationTypes = new[] { LocationType.Virtual }, Limit = query.Limit, SortBy = new[] { ItemSortBy.DateCreated }, SortOrder = SortOrder.Descending, EnableTotalRecordCount = query.EnableTotalRecordCount, IncludeItemTypes = includeItemTypes.ToArray(), ExcludeItemTypes = excludeItemTypes.ToArray(), Genres = genres.ToArray(), DtoOptions = dtoOptions }); }
private async Task LoadCurrentlyRecording(bool isRefresh) { if (!NavigationService.IsNetworkAvailable || (_currentlyRecordingLoaded && !isRefresh && !LiveTvHelper.HasExpired(_currentlyRecordingLastRun, 5))) { return; } try { SetProgressBar(AppResources.SysTrayGettingCurrentlyRecording); var query = new RecordingQuery { IsInProgress = true, Status = RecordingStatus.InProgress, UserId = AuthenticationService.Current.LoggedInUserId }; var items = await ApiClient.GetLiveTvRecordingsAsync(query); if (items != null && !items.Items.IsNullOrEmpty()) { CurrentlyRecording = items.Items.ToList(); _currentlyRecordingLoaded = true; _currentlyRecordingLastRun = DateTime.Now; } } catch (HttpException ex) { Utils.HandleHttpException(ex, "LoadCurrentlyRecording(" + isRefresh + ")", NavigationService, Log); } SetProgressBar(); }
private async Task<bool> GetAlreadyRecorded() { try { SetProgressBar(AppResources.SysTrayGettingRecordedItems); var query = new RecordingQuery { SeriesTimerId = SelectedSeries.Id, UserId = AuthenticationService.Current.LoggedInUserId }; var items = await ApiClient.GetLiveTvRecordingsAsync(query); if (items != null && !items.Items.IsNullOrEmpty()) { Recordings = items.Items.ToList(); SetProgressBar(); return true; } } catch (HttpException ex) { Utils.HandleHttpException(ex, "GetAlreadyRecorded()", NavigationService, Log); } SetProgressBar(); return false; }
public async Task<QueryResult<RecordingInfoDto>> GetRecordings(RecordingQuery query, CancellationToken cancellationToken) { var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(new Guid(query.UserId)); var list = new List<RecordingInfoDto>(); if (ActiveService != null) { var recordings = await ActiveService.GetRecordingsAsync(cancellationToken).ConfigureAwait(false); var dtos = recordings.Select(i => _tvDtoService.GetRecordingInfoDto(i, ActiveService, user)); list.AddRange(dtos); } if (!string.IsNullOrEmpty(query.ChannelId)) { list = list.Where(i => string.Equals(i.ChannelId, query.ChannelId)) .ToList(); } var returnArray = list.OrderByDescending(i => i.StartDate) .ToArray(); return new QueryResult<RecordingInfoDto> { Items = returnArray, TotalRecordCount = returnArray.Length }; }
public async Task<QueryResult<RecordingInfoDto>> GetRecordings(RecordingQuery query, CancellationToken cancellationToken) { var service = ActiveService; var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(new Guid(query.UserId)); var list = new List<RecordingInfo>(); var recordings = await service.GetRecordingsAsync(cancellationToken).ConfigureAwait(false); list.AddRange(recordings); if (!string.IsNullOrEmpty(query.ChannelId)) { list = list .Where(i => _tvDtoService.GetInternalChannelId(service.Name, i.ChannelId) == new Guid(query.ChannelId)) .ToList(); } if (!string.IsNullOrEmpty(query.Id)) { list = list .Where(i => _tvDtoService.GetInternalRecordingId(service.Name, i.Id) == new Guid(query.Id)) .ToList(); } var entities = await GetEntities(list, service.Name, cancellationToken).ConfigureAwait(false); if (user != null) { entities = entities.Where(i => i.IsParentalAllowed(user, _localization)).ToArray(); } var returnArray = entities .Select(i => { var channel = string.IsNullOrEmpty(i.RecordingInfo.ChannelId) ? null : GetInternalChannel(_tvDtoService.GetInternalChannelId(service.Name, i.RecordingInfo.ChannelId).ToString("N")); return _tvDtoService.GetRecordingInfoDto(i, channel, service, user); }) .OrderByDescending(i => i.StartDate) .ToArray(); return new QueryResult<RecordingInfoDto> { Items = returnArray, TotalRecordCount = returnArray.Length }; }
private async Task LoadProgrammes(bool isRefresh) { if (!NavigationService.IsNetworkAvailable || (_programmesLoaded && !isRefresh && !LiveTvHelper.HasExpired(_programmesLastRun))) { return; } try { SetProgressBar(AppResources.SysTrayGettingRecordedItems); var query = new RecordingQuery { IsInProgress = false, Status = RecordingStatus.Completed, UserId = AuthenticationService.Current.LoggedInUserId }; var items = await ApiClient.GetLiveTvRecordingsAsync(query); if (items != null && !items.Items.IsNullOrEmpty()) { RecordedProgrammes = items.Items.OrderBy(x => x.StartDate).ToList(); await GroupProgrammes(); _programmesLoaded = true; _programmesLastRun = DateTime.Now; } } catch (HttpException ex) { Utils.HandleHttpException(ex, "LoadProgrammes(" + isRefresh + ")", NavigationService, Log); } SetProgressBar(); }