public TimerInfoDto GetTimerInfoDto(TimerInfo info, ILiveTvService service, LiveTvProgram program, LiveTvChannel channel) { var dto = new TimerInfoDto { Id = GetInternalTimerId(service.Name, info.Id).ToString("N"), Overview = info.Overview, EndDate = info.EndDate, Name = info.Name, StartDate = info.StartDate, ExternalId = info.Id, ChannelId = GetInternalChannelId(service.Name, info.ChannelId).ToString("N"), Status = info.Status, SeriesTimerId = string.IsNullOrEmpty(info.SeriesTimerId) ? null : GetInternalSeriesTimerId(service.Name, info.SeriesTimerId).ToString("N"), PrePaddingSeconds = info.PrePaddingSeconds, PostPaddingSeconds = info.PostPaddingSeconds, IsPostPaddingRequired = info.IsPostPaddingRequired, IsPrePaddingRequired = info.IsPrePaddingRequired, KeepUntil = info.KeepUntil, ExternalChannelId = info.ChannelId, ExternalSeriesTimerId = info.SeriesTimerId, ServiceName = service.Name, ExternalProgramId = info.ProgramId, Priority = info.Priority, RunTimeTicks = (info.EndDate - info.StartDate).Ticks, ServerId = _appHost.SystemId }; if (!string.IsNullOrEmpty(info.ProgramId)) { dto.ProgramId = GetInternalProgramId(service.Name, info.ProgramId).ToString("N"); } if (program != null) { dto.ProgramInfo = _dtoService.GetBaseItemDto(program, new DtoOptions()); if (info.Status != RecordingStatus.Cancelled && info.Status != RecordingStatus.Error) { dto.ProgramInfo.TimerId = dto.Id; dto.ProgramInfo.Status = info.Status.ToString(); } dto.ProgramInfo.SeriesTimerId = dto.SeriesTimerId; } if (channel != null) { dto.ChannelName = channel.Name; } return dto; }
public TimerInfoDto GetTimerInfoDto(TimerInfo info, ILiveTvService service, LiveTvProgram program, LiveTvChannel channel) { var dto = new TimerInfoDto { Id = GetInternalTimerId(service.Name, info.Id).ToString("N"), Overview = info.Overview, EndDate = info.EndDate, Name = info.Name, StartDate = info.StartDate, ExternalId = info.Id, ChannelId = GetInternalChannelId(service.Name, info.ChannelId).ToString("N"), Status = info.Status, SeriesTimerId = string.IsNullOrEmpty(info.SeriesTimerId) ? null : GetInternalSeriesTimerId(service.Name, info.SeriesTimerId).ToString("N"), PrePaddingSeconds = info.PrePaddingSeconds, PostPaddingSeconds = info.PostPaddingSeconds, IsPostPaddingRequired = info.IsPostPaddingRequired, IsPrePaddingRequired = info.IsPrePaddingRequired, ExternalChannelId = info.ChannelId, ExternalSeriesTimerId = info.SeriesTimerId, ServiceName = service.Name, ExternalProgramId = info.ProgramId, Priority = info.Priority, RunTimeTicks = (info.EndDate - info.StartDate).Ticks }; if (!string.IsNullOrEmpty(info.ProgramId)) { dto.ProgramId = GetInternalProgramId(service.Name, info.ProgramId).ToString("N"); } if (program != null) { dto.ProgramInfo = GetProgramInfoDto(program, channel); dto.ProgramInfo.TimerId = dto.Id; dto.ProgramInfo.SeriesTimerId = dto.SeriesTimerId; } if (channel != null) { dto.ChannelName = channel.Name; } return dto; }
private int GetRecommendationScore(LiveTvProgram program, Guid userId, string serviceName, Dictionary<string, Genre> genres) { var score = 0; if (program.IsLive) { score++; } if (program.IsSeries && !program.IsRepeat) { score++; } var internalChannelId = _tvDtoService.GetInternalChannelId(serviceName, program.ExternalChannelId); var channel = GetInternalChannel(internalChannelId); var channelUserdata = _userDataManager.GetUserData(userId, channel.GetUserDataKey()); if ((channelUserdata.Likes ?? false)) { score += 2; } else if (!(channelUserdata.Likes ?? true)) { score -= 2; } if (channelUserdata.IsFavorite) { score += 3; } score += GetGenreScore(program.Genres, userId, genres); return score; }
private LiveTvChannel GetChannel(LiveTvProgram program) { var programChannelId = program.ExternalChannelId; if (string.IsNullOrWhiteSpace(programChannelId)) return null; var internalProgramChannelId = _tvDtoService.GetInternalChannelId(program.ServiceName, programChannelId); return GetInternalChannel(internalProgramChannelId); }
private LiveTvProgram GetProgram(ProgramInfo info, ChannelType channelType, string serviceName, CancellationToken cancellationToken) { var id = _tvDtoService.GetInternalProgramId(serviceName, info.Id); var item = _itemRepo.RetrieveItem(id) as LiveTvProgram; if (item == null) { item = new LiveTvProgram { Name = info.Name, Id = id, DateCreated = DateTime.UtcNow, DateModified = DateTime.UtcNow }; } item.ChannelType = channelType; item.ServiceName = serviceName; item.Audio = info.Audio; item.ExternalChannelId = info.ChannelId; item.CommunityRating = info.CommunityRating; item.EndDate = info.EndDate; item.EpisodeTitle = info.EpisodeTitle; item.ExternalId = info.Id; item.Genres = info.Genres; item.HasProviderImage = info.HasImage; item.IsHD = info.IsHD; item.IsKids = info.IsKids; item.IsLive = info.IsLive; item.IsMovie = info.IsMovie; item.IsNews = info.IsNews; item.IsPremiere = info.IsPremiere; item.IsRepeat = info.IsRepeat; item.IsSeries = info.IsSeries; item.IsSports = info.IsSports; item.Name = info.Name; item.OfficialRating = info.OfficialRating; item.Overview = info.Overview; item.PremiereDate = info.OriginalAirDate; item.ProviderImagePath = info.ImagePath; item.ProviderImageUrl = info.ImageUrl; item.RunTimeTicks = (info.EndDate - info.StartDate).Ticks; item.StartDate = info.StartDate; return item; }
private async Task RefreshIfNeeded(LiveTvProgram program, CancellationToken cancellationToken) { if (_refreshedPrograms.ContainsKey(program.Id)) { return; } _refreshedPrograms.TryAdd(program.Id, true); await program.RefreshMetadata(cancellationToken).ConfigureAwait(false); }
private async Task<SeriesTimerInfo> GetNewTimerDefaultsInternal(CancellationToken cancellationToken, LiveTvProgram program = null) { ProgramInfo programInfo = null; if (program != null) { programInfo = new ProgramInfo { Audio = program.Audio, ChannelId = program.ExternalChannelId, CommunityRating = program.CommunityRating, EndDate = program.EndDate ?? DateTime.MinValue, EpisodeTitle = program.EpisodeTitle, Genres = program.Genres, HasImage = program.HasProviderImage, Id = program.ExternalId, IsHD = program.IsHD, IsKids = program.IsKids, IsLive = program.IsLive, IsMovie = program.IsMovie, IsNews = program.IsNews, IsPremiere = program.IsPremiere, IsRepeat = program.IsRepeat, IsSeries = program.IsSeries, IsSports = program.IsSports, OriginalAirDate = program.PremiereDate, Overview = program.Overview, StartDate = program.StartDate, ImagePath = program.ProviderImagePath, ImageUrl = program.ProviderImageUrl, Name = program.Name, OfficialRating = program.OfficialRating }; } var info = await ActiveService.GetNewTimerDefaultsAsync(cancellationToken, programInfo).ConfigureAwait(false); info.Id = null; return info; }
public ProgramInfoDto GetProgramInfoDto(LiveTvProgram item, User user = null) { var program = item.ProgramInfo; var dto = new ProgramInfoDto { Id = GetInternalProgramId(item.ServiceName, program.Id).ToString("N"), ChannelId = GetInternalChannelId(item.ServiceName, program.ChannelId).ToString("N"), Overview = program.Overview, EndDate = program.EndDate, Genres = program.Genres, ExternalId = program.Id, Name = program.Name, ServiceName = item.ServiceName, StartDate = program.StartDate, OfficialRating = program.OfficialRating, IsHD = program.IsHD, OriginalAirDate = program.OriginalAirDate, Audio = program.Audio, CommunityRating = GetClientCommunityRating(program.CommunityRating), AspectRatio = program.AspectRatio, IsRepeat = program.IsRepeat, EpisodeTitle = program.EpisodeTitle, ChannelName = program.ChannelName, IsMovie = program.IsMovie, IsSeries = program.IsSeries, IsSports = program.IsSports, IsLive = program.IsLive, IsNews = program.IsNews, IsKids = program.IsKids, IsPremiere = program.IsPremiere, RunTimeTicks = (program.EndDate - program.StartDate).Ticks }; if (user != null) { dto.UserData = _dtoService.GetUserItemDataDto(_userDataManager.GetUserData(user.Id, item.GetUserDataKey())); } return dto; }
public override double?GetDefaultPrimaryImageAspectRatio() { return(LiveTvProgram.GetDefaultPrimaryImageAspectRatio(this)); }
private async Task<LiveTvProgram> GetProgram(ProgramInfo info, string channelId, ChannelType channelType, string serviceName, CancellationToken cancellationToken) { var id = _tvDtoService.GetInternalProgramId(serviceName, info.Id); var item = _libraryManager.GetItemById(id) as LiveTvProgram; var isNew = false; if (item == null) { isNew = true; item = new LiveTvProgram { Name = info.Name, Id = id, DateCreated = DateTime.UtcNow, DateModified = DateTime.UtcNow }; } item.ChannelType = channelType; item.ServiceName = serviceName; item.Audio = info.Audio; item.ChannelId = channelId; item.CommunityRating = item.CommunityRating ?? info.CommunityRating; item.EndDate = info.EndDate; item.EpisodeTitle = info.EpisodeTitle; item.ExternalId = info.Id; item.Genres = info.Genres; item.HasProviderImage = info.HasImage; item.IsHD = info.IsHD; item.IsKids = info.IsKids; item.IsLive = info.IsLive; item.IsMovie = info.IsMovie; item.IsNews = info.IsNews; item.IsPremiere = info.IsPremiere; item.IsRepeat = info.IsRepeat; item.IsSeries = info.IsSeries; item.IsSports = info.IsSports; item.Name = info.Name; item.OfficialRating = item.OfficialRating ?? info.OfficialRating; item.Overview = item.Overview ?? info.Overview; item.OriginalAirDate = info.OriginalAirDate; item.ProviderImagePath = info.ImagePath; item.ProviderImageUrl = info.ImageUrl; item.RunTimeTicks = (info.EndDate - info.StartDate).Ticks; item.StartDate = info.StartDate; item.ProductionYear = info.ProductionYear; item.PremiereDate = item.PremiereDate ?? info.OriginalAirDate; if (isNew) { await _libraryManager.CreateItem(item, cancellationToken).ConfigureAwait(false); } else { await _libraryManager.UpdateItem(item, ItemUpdateType.MetadataImport, cancellationToken).ConfigureAwait(false); } _providerManager.QueueRefresh(item.Id, new MetadataRefreshOptions()); return item; }
private Tuple<LiveTvProgram, bool, bool> GetProgram(ProgramInfo info, Dictionary<Guid, LiveTvProgram> allExistingPrograms, LiveTvChannel channel, ChannelType channelType, string serviceName, CancellationToken cancellationToken) { var id = _tvDtoService.GetInternalProgramId(serviceName, info.Id); LiveTvProgram item = null; allExistingPrograms.TryGetValue(id, out item); var isNew = false; var forceUpdate = false; if (item == null) { isNew = true; item = new LiveTvProgram { Name = info.Name, Id = id, DateCreated = DateTime.UtcNow, DateModified = DateTime.UtcNow, ExternalEtag = info.Etag }; } var seriesId = info.SeriesId; if (!item.ParentId.Equals(channel.Id)) { forceUpdate = true; } item.ParentId = channel.Id; //item.ChannelType = channelType; if (!string.Equals(item.ServiceName, serviceName, StringComparison.Ordinal)) { forceUpdate = true; } item.ServiceName = serviceName; item.Audio = info.Audio; item.ChannelId = channel.Id.ToString("N"); item.CommunityRating = item.CommunityRating ?? info.CommunityRating; item.EpisodeTitle = info.EpisodeTitle; item.ExternalId = info.Id; item.ExternalSeriesIdLegacy = seriesId; if (!string.IsNullOrWhiteSpace(seriesId) && !string.Equals(item.ExternalSeriesId, seriesId, StringComparison.Ordinal)) { forceUpdate = true; } item.ExternalSeriesId = seriesId; item.Genres = info.Genres; item.IsHD = info.IsHD; item.IsKids = info.IsKids; item.IsLive = info.IsLive; item.IsMovie = info.IsMovie; item.IsNews = info.IsNews; item.IsPremiere = info.IsPremiere; item.IsRepeat = info.IsRepeat; item.IsSeries = info.IsSeries; item.IsSports = info.IsSports; item.Name = info.Name; item.OfficialRating = item.OfficialRating ?? info.OfficialRating; item.Overview = item.Overview ?? info.Overview; item.RunTimeTicks = (info.EndDate - info.StartDate).Ticks; if (item.StartDate != info.StartDate) { forceUpdate = true; } item.StartDate = info.StartDate; if (item.EndDate != info.EndDate) { forceUpdate = true; } item.EndDate = info.EndDate; item.HomePageUrl = info.HomePageUrl; item.ProductionYear = info.ProductionYear; if (!info.IsSeries || info.IsRepeat) { item.PremiereDate = info.OriginalAirDate; } item.IndexNumber = info.EpisodeNumber; item.ParentIndexNumber = info.SeasonNumber; if (!item.HasImage(ImageType.Primary)) { if (!string.IsNullOrWhiteSpace(info.ImagePath)) { item.SetImage(new ItemImageInfo { Path = info.ImagePath, Type = ImageType.Primary, IsPlaceholder = true }, 0); } else if (!string.IsNullOrWhiteSpace(info.ImageUrl)) { item.SetImage(new ItemImageInfo { Path = info.ImageUrl, Type = ImageType.Primary, IsPlaceholder = true }, 0); } } var isUpdated = false; if (isNew) { } else if (forceUpdate || string.IsNullOrWhiteSpace(info.Etag)) { isUpdated = true; } else { // Increment this whenver some internal change deems it necessary var etag = info.Etag + "4"; if (!string.Equals(etag, item.ExternalEtag, StringComparison.OrdinalIgnoreCase)) { item.ExternalEtag = etag; isUpdated = true; } } return new Tuple<LiveTvProgram, bool, bool>(item, isNew, isUpdated); }
private int GetRecommendationScore(LiveTvProgram program, Guid userId, bool factorChannelWatchCount) { var score = 0; if (program.IsLive) { score++; } if (program.IsSeries && !program.IsRepeat) { score++; } var channel = GetInternalChannel(program.ChannelId); var channelUserdata = _userDataManager.GetUserData(userId, channel); if (channelUserdata.Likes ?? false) { score += 2; } else if (!(channelUserdata.Likes ?? true)) { score -= 2; } if (channelUserdata.IsFavorite) { score += 3; } if (factorChannelWatchCount) { score += channelUserdata.PlayCount; } return score; }
/// <summary> /// Gets the channel info dto. /// </summary> /// <param name="info">The info.</param> /// <param name="currentProgram">The current program.</param> /// <param name="user">The user.</param> /// <returns>ChannelInfoDto.</returns> public ChannelInfoDto GetChannelInfoDto(LiveTvChannel info, LiveTvProgram currentProgram, User user = null) { var dto = new ChannelInfoDto { Name = info.Name, ServiceName = info.ServiceName, ChannelType = info.ChannelType, Number = info.Number, Type = info.GetClientTypeName(), Id = info.Id.ToString("N"), MediaType = info.MediaType, ExternalId = info.ExternalId, MediaSources = _dtoService.GetMediaSources(info) }; if (user != null) { dto.UserData = _dtoService.GetUserItemDataDto(_userDataManager.GetUserData(user.Id, info.GetUserDataKey())); dto.PlayAccess = info.GetPlayAccess(user); } var imageTag = GetImageTag(info); if (imageTag.HasValue) { dto.ImageTags[ImageType.Primary] = imageTag.Value; } if (currentProgram != null) { dto.CurrentProgram = GetProgramInfoDto(currentProgram, info, user); } return dto; }
private LiveTvChannel GetChannel(LiveTvProgram program) { var programChannelId = program.ExternalChannelId; var internalProgramChannelId = _tvDtoService.GetInternalChannelId(program.ServiceName, programChannelId); return GetInternalChannel(internalProgramChannelId); }
private async Task<bool> DownloadImage(LiveTvProgram item, CancellationToken cancellationToken) { Stream imageStream = null; string contentType = null; if (!string.IsNullOrEmpty(item.ProviderImagePath)) { contentType = "image/" + Path.GetExtension(item.ProviderImagePath).ToLower(); imageStream = _fileSystem.GetFileStream(item.ProviderImagePath, FileMode.Open, FileAccess.Read, FileShare.Read, true); } else if (!string.IsNullOrEmpty(item.ProviderImageUrl)) { var options = new HttpRequestOptions { CancellationToken = cancellationToken, Url = item.ProviderImageUrl }; var response = await _httpClient.GetResponse(options).ConfigureAwait(false); if (!response.ContentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase)) { Logger.Error("Provider did not return an image content type."); return false; } imageStream = response.Content; contentType = response.ContentType; } else if (item.HasProviderImage ?? true) { var service = _liveTvManager.Services.FirstOrDefault(i => string.Equals(i.Name, item.ServiceName, StringComparison.OrdinalIgnoreCase)); if (service != null) { try { var response = await service.GetProgramImageAsync(item.ExternalId, item.ExternalChannelId, cancellationToken).ConfigureAwait(false); if (response != null) { imageStream = response.Stream; contentType = response.MimeType; } } catch (NotImplementedException) { return false; } } } if (imageStream != null) { // Dummy up the original url var url = item.ServiceName + item.ExternalId; await _providerManager.SaveImage(item, imageStream, contentType, ImageType.Primary, null, url, cancellationToken).ConfigureAwait(false); return true; } return false; }
private async Task<Tuple<SeriesTimerInfo, ILiveTvService>> GetNewTimerDefaultsInternal(CancellationToken cancellationToken, LiveTvProgram program = null) { var service = program != null && !string.IsNullOrWhiteSpace(program.ServiceName) ? GetService(program) : _services.FirstOrDefault(); ProgramInfo programInfo = null; if (program != null) { var channel = GetInternalChannel(program.ChannelId); programInfo = new ProgramInfo { Audio = program.Audio, ChannelId = channel.ExternalId, CommunityRating = program.CommunityRating, EndDate = program.EndDate ?? DateTime.MinValue, EpisodeTitle = program.EpisodeTitle, Genres = program.Genres, Id = program.ExternalId, IsHD = program.IsHD, IsKids = program.IsKids, IsLive = program.IsLive, IsMovie = program.IsMovie, IsNews = program.IsNews, IsPremiere = program.IsPremiere, IsRepeat = program.IsRepeat, IsSeries = program.IsSeries, IsSports = program.IsSports, OriginalAirDate = program.PremiereDate, Overview = program.Overview, StartDate = program.StartDate, //ImagePath = program.ExternalImagePath, Name = program.Name, OfficialRating = program.OfficialRating }; } var info = await service.GetNewTimerDefaultsAsync(cancellationToken, programInfo).ConfigureAwait(false); info.Id = null; return new Tuple<SeriesTimerInfo, ILiveTvService>(info, service); }
/// <summary> /// Gets the channel info dto. /// </summary> /// <param name="info">The info.</param> /// <param name="currentProgram">The current program.</param> /// <param name="user">The user.</param> /// <returns>ChannelInfoDto.</returns> public ChannelInfoDto GetChannelInfoDto(LiveTvChannel info, LiveTvProgram currentProgram, User user = null) { var dto = new ChannelInfoDto { Name = info.Name, ServiceName = info.ServiceName, ChannelType = info.ChannelType, Number = info.Number, Type = info.GetClientTypeName(), Id = info.Id.ToString("N"), MediaType = info.MediaType, ExternalId = info.ExternalId, MediaSources = info.GetMediaSources(true).ToList() }; if (user != null) { dto.UserData = _userDataManager.GetUserDataDto(info, user); dto.PlayAccess = info.GetPlayAccess(user); } var imageTag = GetImageTag(info); if (imageTag != null) { dto.ImageTags[ImageType.Primary] = imageTag; _dtoService.AttachPrimaryImageAspectRatio(dto, info); } if (currentProgram != null) { dto.CurrentProgram = GetProgramInfoDto(currentProgram, info, user); } return dto; }
private async Task<LiveTvProgram> GetProgram(ProgramInfo info, LiveTvChannel channel, ChannelType channelType, string serviceName, CancellationToken cancellationToken) { var id = _tvDtoService.GetInternalProgramId(serviceName, info.Id); var item = _libraryManager.GetItemById(id) as LiveTvProgram; var isNew = false; var forceUpdate = false; if (item == null) { isNew = true; item = new LiveTvProgram { Name = info.Name, Id = id, DateCreated = DateTime.UtcNow, DateModified = DateTime.UtcNow, ExternalEtag = info.Etag }; } //item.ChannelType = channelType; if (!string.Equals(item.ServiceName, serviceName, StringComparison.Ordinal)) { forceUpdate = true; } item.ServiceName = serviceName; item.Audio = info.Audio; item.ChannelId = channel.Id.ToString("N"); item.CommunityRating = item.CommunityRating ?? info.CommunityRating; item.EndDate = info.EndDate; item.EpisodeTitle = info.EpisodeTitle; item.ExternalId = info.Id; item.Genres = info.Genres; item.IsHD = info.IsHD; item.IsKids = info.IsKids; item.IsLive = info.IsLive; item.IsMovie = info.IsMovie; item.IsNews = info.IsNews; item.IsPremiere = info.IsPremiere; item.IsRepeat = info.IsRepeat; item.IsSeries = info.IsSeries; item.IsSports = info.IsSports; item.Name = info.Name; item.OfficialRating = item.OfficialRating ?? info.OfficialRating; item.Overview = item.Overview ?? info.Overview; item.RunTimeTicks = (info.EndDate - info.StartDate).Ticks; item.StartDate = info.StartDate; item.HomePageUrl = info.HomePageUrl; item.ProductionYear = info.ProductionYear; item.PremiereDate = info.OriginalAirDate; item.IndexNumber = info.EpisodeNumber; item.ParentIndexNumber = info.SeasonNumber; if (!item.HasImage(ImageType.Primary)) { if (!string.IsNullOrWhiteSpace(info.ImagePath)) { item.SetImage(new ItemImageInfo { Path = info.ImagePath, Type = ImageType.Primary, IsPlaceholder = true }, 0); } else if (!string.IsNullOrWhiteSpace(info.ImageUrl)) { item.SetImage(new ItemImageInfo { Path = info.ImageUrl, Type = ImageType.Primary, IsPlaceholder = true }, 0); } } if (isNew) { await _libraryManager.CreateItem(item, cancellationToken).ConfigureAwait(false); } else if (forceUpdate || string.IsNullOrWhiteSpace(info.Etag)) { await _libraryManager.UpdateItem(item, ItemUpdateType.MetadataImport, cancellationToken).ConfigureAwait(false); } else { // Increment this whenver some internal change deems it necessary var etag = info.Etag + "4"; if (!string.Equals(etag, item.ExternalEtag, StringComparison.OrdinalIgnoreCase)) { item.ExternalEtag = etag; await _libraryManager.UpdateItem(item, ItemUpdateType.MetadataImport, cancellationToken).ConfigureAwait(false); } } _providerManager.QueueRefresh(item.Id, new MetadataRefreshOptions(_fileSystem)); return item; }
public ProgramInfoDto GetProgramInfoDto(LiveTvProgram item, LiveTvChannel channel, User user = null) { var dto = new ProgramInfoDto { Id = GetInternalProgramId(item.ServiceName, item.ExternalId).ToString("N"), ChannelId = GetInternalChannelId(item.ServiceName, item.ExternalChannelId).ToString("N"), Overview = item.Overview, Genres = item.Genres, ExternalId = item.ExternalId, Name = item.Name, ServiceName = item.ServiceName, StartDate = item.StartDate, OfficialRating = item.OfficialRating, IsHD = item.IsHD, OriginalAirDate = item.PremiereDate, Audio = item.Audio, CommunityRating = GetClientCommunityRating(item.CommunityRating), IsRepeat = item.IsRepeat, EpisodeTitle = item.EpisodeTitle, IsMovie = item.IsMovie, IsSeries = item.IsSeries, IsSports = item.IsSports, IsLive = item.IsLive, IsNews = item.IsNews, IsKids = item.IsKids, IsPremiere = item.IsPremiere, Type = "Program", MediaType = item.MediaType }; if (item.EndDate.HasValue) { dto.EndDate = item.EndDate.Value; dto.RunTimeTicks = (item.EndDate.Value - item.StartDate).Ticks; } if (channel != null) { dto.ChannelName = channel.Name; if (!string.IsNullOrEmpty(channel.PrimaryImagePath)) { dto.ChannelPrimaryImageTag = GetImageTag(channel); } } var imageTag = GetImageTag(item); if (imageTag != null) { dto.ImageTags[ImageType.Primary] = imageTag; _dtoService.AttachPrimaryImageAspectRatio(dto, item); } if (user != null) { dto.UserData = _userDataManager.GetUserDataDto(item, user); dto.PlayAccess = item.GetPlayAccess(user); } return dto; }
private async Task<LiveTvProgram> GetProgram(ProgramInfo info, ChannelType channelType, string serviceName, CancellationToken cancellationToken) { var isNew = false; var id = _tvDtoService.GetInternalProgramId(serviceName, info.Id); var item = _itemRepo.RetrieveItem(id) as LiveTvProgram; if (item == null) { item = new LiveTvProgram { Name = info.Name, Id = id, DateCreated = DateTime.UtcNow, DateModified = DateTime.UtcNow }; isNew = true; } item.ChannelType = channelType; item.ProgramInfo = info; item.ServiceName = serviceName; await item.RefreshMetadata(cancellationToken, forceSave: isNew, resetResolveArgs: false); return item; }