diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-01-23 13:05:41 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-01-23 13:05:41 -0500 |
| commit | 145285784bfb6a2fcd0e9234d569d7ad5083516f (patch) | |
| tree | 67642bd67d7e05ce58e6592681e772974088ee10 /MediaBrowser.Server.Implementations | |
| parent | 6cfc103bd3112e0a91e1c9154261f62cdee4525f (diff) | |
trim tv objects
Diffstat (limited to 'MediaBrowser.Server.Implementations')
4 files changed, 153 insertions, 84 deletions
diff --git a/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs b/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs index d04ebe32d..f1e10e175 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/ChannelImageProvider.cs @@ -76,22 +76,20 @@ namespace MediaBrowser.Server.Implementations.LiveTv private async Task<bool> DownloadImage(LiveTvChannel item, CancellationToken cancellationToken) { - var channelInfo = item.ChannelInfo; - Stream imageStream = null; string contentType = null; - if (!string.IsNullOrEmpty(channelInfo.ImagePath)) + if (!string.IsNullOrEmpty(item.ProviderImagePath)) { - contentType = "image/" + Path.GetExtension(channelInfo.ImagePath).ToLower(); - imageStream = _fileSystem.GetFileStream(channelInfo.ImagePath, FileMode.Open, FileAccess.Read, FileShare.Read, true); + contentType = "image/" + Path.GetExtension(item.ProviderImagePath).ToLower(); + imageStream = _fileSystem.GetFileStream(item.ProviderImagePath, FileMode.Open, FileAccess.Read, FileShare.Read, true); } - else if (!string.IsNullOrEmpty(channelInfo.ImageUrl)) + else if (!string.IsNullOrEmpty(item.ProviderImageUrl)) { var options = new HttpRequestOptions { CancellationToken = cancellationToken, - Url = channelInfo.ImageUrl + Url = item.ProviderImageUrl }; var response = await _httpClient.GetResponse(options).ConfigureAwait(false); @@ -105,7 +103,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv imageStream = response.Content; contentType = response.ContentType; } - else if (channelInfo.HasImage ?? true) + else if (item.HasProviderImage ?? true) { var service = _liveTvManager.Services.FirstOrDefault(i => string.Equals(i.Name, item.ServiceName, StringComparison.OrdinalIgnoreCase)); @@ -113,7 +111,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv { try { - var response = await service.GetChannelImageAsync(channelInfo.Id, cancellationToken).ConfigureAwait(false); + var response = await service.GetChannelImageAsync(item.ExternalId, cancellationToken).ConfigureAwait(false); if (response != null) { @@ -131,7 +129,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv if (imageStream != null) { // Dummy up the original url - var url = item.ServiceName + channelInfo.Id; + var url = item.ServiceName + item.ExternalId; await _providerManager.SaveImage(item, imageStream, contentType, ImageType.Primary, null, url, cancellationToken).ConfigureAwait(false); return true; diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs index 2fea919b0..094506199 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs @@ -74,7 +74,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv if (channel != null) { - dto.ChannelName = channel.ChannelInfo.Name; + dto.ChannelName = channel.Name; } return dto; @@ -280,18 +280,16 @@ namespace MediaBrowser.Server.Implementations.LiveTv /// <returns>ChannelInfoDto.</returns> public ChannelInfoDto GetChannelInfoDto(LiveTvChannel info, LiveTvProgram currentProgram, User user = null) { - var channelInfo = info.ChannelInfo; - var dto = new ChannelInfoDto { Name = info.Name, ServiceName = info.ServiceName, - ChannelType = channelInfo.ChannelType, - Number = channelInfo.Number, + ChannelType = info.ChannelType, + Number = info.Number, Type = info.GetClientTypeName(), Id = info.Id.ToString("N"), MediaType = info.MediaType, - ExternalId = channelInfo.Id + ExternalId = info.ExternalId }; if (user != null) @@ -316,37 +314,40 @@ namespace MediaBrowser.Server.Implementations.LiveTv public ProgramInfoDto GetProgramInfoDto(LiveTvProgram item, LiveTvChannel channel, 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, + 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 = program.StartDate, - OfficialRating = program.OfficialRating, - IsHD = program.IsHD, - OriginalAirDate = program.OriginalAirDate, - Audio = program.Audio, - CommunityRating = GetClientCommunityRating(program.CommunityRating), - IsRepeat = program.IsRepeat, - EpisodeTitle = program.EpisodeTitle, - 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, + 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" }; + if (item.EndDate.HasValue) + { + dto.EndDate = item.EndDate.Value; + + dto.RunTimeTicks = (item.EndDate.Value - item.StartDate).Ticks; + } + if (channel != null) { dto.ChannelName = channel.Name; diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs index f62efd9da..92df78fb9 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs @@ -126,9 +126,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv { double number = 0; - if (!string.IsNullOrEmpty(i.ChannelInfo.Number)) + if (!string.IsNullOrEmpty(i.Number)) { - double.TryParse(i.ChannelInfo.Number, out number); + double.TryParse(i.Number, out number); } return number; @@ -140,9 +140,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv { double number = 0; - if (!string.IsNullOrEmpty(i.ChannelInfo.Number)) + if (!string.IsNullOrEmpty(i.Number)) { - double.TryParse(i.ChannelInfo.Number, out number); + double.TryParse(i.Number, out number); } return number; @@ -163,7 +163,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv } var returnChannels = allEnumerable - .Select(i => _tvDtoService.GetChannelInfoDto(i, GetCurrentProgram(i.ChannelInfo.Id), user)) + .Select(i => _tvDtoService.GetChannelInfoDto(i, GetCurrentProgram(i.ExternalId), user)) .ToArray(); var result = new QueryResult<ChannelInfoDto> @@ -251,9 +251,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv var channel = GetInternalChannel(id); - _logger.Info("Opening channel stream from {0}, external channel Id: {1}", service.Name, channel.ChannelInfo.Id); + _logger.Info("Opening channel stream from {0}, external channel Id: {1}", service.Name, channel.ExternalId); - var result = await service.GetChannelStream(channel.ChannelInfo.Id, cancellationToken).ConfigureAwait(false); + var result = await service.GetChannelStream(channel.ExternalId, cancellationToken).ConfigureAwait(false); if (!string.IsNullOrEmpty(result.Id)) { @@ -313,8 +313,18 @@ namespace MediaBrowser.Server.Implementations.LiveTv isNew = true; } - item.ChannelInfo = channelInfo; + item.ChannelType = channelInfo.ChannelType; + item.ProviderImageUrl = channelInfo.ImageUrl; + item.HasProviderImage = channelInfo.HasImage; + item.ProviderImagePath = channelInfo.ImagePath; + item.ExternalId = channelInfo.Id; item.ServiceName = serviceName; + item.Number = channelInfo.Number; + + if (string.IsNullOrEmpty(item.Name)) + { + item.Name = channelInfo.Name; + } // Set this now so we don't cause additional file system access during provider executions item.ResetResolveArgs(fileInfo); @@ -346,9 +356,34 @@ namespace MediaBrowser.Server.Implementations.LiveTv } item.ChannelType = channelType; - item.ProgramInfo = info; 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; + await item.RefreshMetadata(cancellationToken, forceSave: isNew, resetResolveArgs: false); return item; @@ -410,7 +445,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv private LiveTvChannel GetChannel(LiveTvProgram program) { - var programChannelId = program.ProgramInfo.ChannelId; + var programChannelId = program.ExternalChannelId; var internalProgramChannelId = _tvDtoService.GetInternalChannelId(program.ServiceName, programChannelId); @@ -438,28 +473,28 @@ namespace MediaBrowser.Server.Implementations.LiveTv { var val = query.MinEndDate.Value; - programs = programs.Where(i => i.ProgramInfo.EndDate >= val); + 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.ProgramInfo.StartDate >= val); + programs = programs.Where(i => i.StartDate >= val); } if (query.MaxEndDate.HasValue) { var val = query.MaxEndDate.Value; - programs = programs.Where(i => i.ProgramInfo.EndDate <= val); + 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.ProgramInfo.StartDate <= val); + programs = programs.Where(i => i.StartDate <= val); } if (query.ChannelIdList.Length > 0) @@ -469,7 +504,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv programs = programs.Where(i => { - var programChannelId = i.ProgramInfo.ChannelId; + var programChannelId = i.ExternalChannelId; var internalProgramChannelId = _tvDtoService.GetInternalChannelId(serviceName, programChannelId); @@ -537,13 +572,13 @@ namespace MediaBrowser.Server.Implementations.LiveTv .Select(i => _libraryManager.GetGenre(i)) .ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase); - programs = programList.OrderByDescending(i => GetRecommendationScore(i.ProgramInfo, user.Id, serviceName, genres)) - .ThenBy(i => i.ProgramInfo.StartDate); + programs = programList.OrderByDescending(i => GetRecommendationScore(i, user.Id, serviceName, genres)) + .ThenBy(i => i.StartDate); if (query.Limit.HasValue) { programs = programs.Take(query.Limit.Value) - .OrderBy(i => i.ProgramInfo.StartDate); + .OrderBy(i => i.StartDate); } var returnArray = programs @@ -566,7 +601,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv return result; } - private int GetRecommendationScore(ProgramInfo program, Guid userId, string serviceName, Dictionary<string, Genre> genres) + private int GetRecommendationScore(LiveTvProgram program, Guid userId, string serviceName, Dictionary<string, Genre> genres) { var score = 0; @@ -580,7 +615,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv score++; } - var internalChannelId = _tvDtoService.GetInternalChannelId(serviceName, program.ChannelId); + var internalChannelId = _tvDtoService.GetInternalChannelId(serviceName, program.ExternalChannelId); var channel = GetInternalChannel(internalChannelId); var channelUserdata = _userDataManager.GetUserData(userId, channel.GetUserDataKey()); @@ -724,9 +759,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv var start = DateTime.UtcNow.AddHours(-1); var end = start.AddDays(guideDays); - var channelPrograms = await service.GetProgramsAsync(currentChannel.ChannelInfo.Id, start, end, cancellationToken).ConfigureAwait(false); + var channelPrograms = await service.GetProgramsAsync(currentChannel.ExternalId, start, end, cancellationToken).ConfigureAwait(false); - var programTasks = channelPrograms.Select(program => GetProgram(program, currentChannel.ChannelInfo.ChannelType, service.Name, cancellationToken)); + var programTasks = channelPrograms.Select(program => GetProgram(program, currentChannel.ChannelType, service.Name, cancellationToken)); var programEntities = await Task.WhenAll(programTasks).ConfigureAwait(false); programs.AddRange(programEntities); @@ -1033,7 +1068,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv { var internalChannelId = _tvDtoService.GetInternalChannelId(service.Name, i.ChannelId); var channel = GetInternalChannel(internalChannelId); - channelName = channel == null ? null : channel.ChannelInfo.Name; + channelName = channel == null ? null : channel.Name; } return _tvDtoService.GetSeriesTimerInfoDto(i, service, channelName); @@ -1052,7 +1087,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv { var channel = GetInternalChannel(id); - var dto = _tvDtoService.GetChannelInfoDto(channel, GetCurrentProgram(channel.ChannelInfo.Id), user); + var dto = _tvDtoService.GetChannelInfoDto(channel, GetCurrentProgram(channel.ExternalId), user); return Task.FromResult(dto); } @@ -1062,15 +1097,48 @@ namespace MediaBrowser.Server.Implementations.LiveTv var now = DateTime.UtcNow; return _programs.Values - .Where(i => string.Equals(externalChannelId, i.ProgramInfo.ChannelId, StringComparison.OrdinalIgnoreCase)) - .OrderBy(i => i.ProgramInfo.StartDate) - .SkipWhile(i => now >= i.ProgramInfo.EndDate) + .Where(i => string.Equals(externalChannelId, i.ExternalChannelId, StringComparison.OrdinalIgnoreCase)) + .OrderBy(i => i.StartDate) + .SkipWhile(i => now >= (i.EndDate ?? DateTime.MinValue)) .FirstOrDefault(); } - private async Task<SeriesTimerInfo> GetNewTimerDefaultsInternal(CancellationToken cancellationToken, ProgramInfo program = null) + private async Task<SeriesTimerInfo> GetNewTimerDefaultsInternal(CancellationToken cancellationToken, LiveTvProgram program = null) { - var info = await ActiveService.GetNewTimerDefaultsAsync(cancellationToken, program).ConfigureAwait(false); + 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; @@ -1088,7 +1156,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv public async Task<SeriesTimerInfoDto> GetNewTimerDefaults(string programId, CancellationToken cancellationToken) { - var program = GetInternalProgram(programId).ProgramInfo; + var program = GetInternalProgram(programId); var programDto = await GetProgram(programId, cancellationToken).ConfigureAwait(false); var defaults = await GetNewTimerDefaultsInternal(cancellationToken, program).ConfigureAwait(false); @@ -1104,13 +1172,17 @@ namespace MediaBrowser.Server.Implementations.LiveTv info.Name = program.Name; info.ChannelId = programDto.ChannelId; info.ChannelName = programDto.ChannelName; - info.EndDate = program.EndDate; info.StartDate = program.StartDate; info.Name = program.Name; info.Overview = program.Overview; info.ProgramId = programDto.Id; info.ExternalProgramId = programDto.ExternalId; + if (program.EndDate.HasValue) + { + info.EndDate = program.EndDate.Value; + } + return info; } @@ -1299,8 +1371,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv { var programs = _programs.ToList(); - var startDate = programs.Select(i => i.Value.ProgramInfo.StartDate).Min(); - var endDate = programs.Select(i => i.Value.ProgramInfo.StartDate).Max(); + var startDate = programs.Select(i => i.Value.StartDate).Min(); + var endDate = programs.Select(i => i.Value.StartDate).Max(); return new GuideInfo { diff --git a/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs b/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs index 7c343f77c..041925cdd 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs @@ -76,22 +76,20 @@ namespace MediaBrowser.Server.Implementations.LiveTv private async Task<bool> DownloadImage(LiveTvProgram item, CancellationToken cancellationToken) { - var programInfo = item.ProgramInfo; - Stream imageStream = null; string contentType = null; - if (!string.IsNullOrEmpty(programInfo.ImagePath)) + if (!string.IsNullOrEmpty(item.ProviderImagePath)) { - contentType = "image/" + Path.GetExtension(programInfo.ImagePath).ToLower(); - imageStream = _fileSystem.GetFileStream(programInfo.ImagePath, FileMode.Open, FileAccess.Read, FileShare.Read, true); + contentType = "image/" + Path.GetExtension(item.ProviderImagePath).ToLower(); + imageStream = _fileSystem.GetFileStream(item.ProviderImagePath, FileMode.Open, FileAccess.Read, FileShare.Read, true); } - else if (!string.IsNullOrEmpty(programInfo.ImageUrl)) + else if (!string.IsNullOrEmpty(item.ProviderImageUrl)) { var options = new HttpRequestOptions { CancellationToken = cancellationToken, - Url = programInfo.ImageUrl + Url = item.ProviderImageUrl }; var response = await _httpClient.GetResponse(options).ConfigureAwait(false); @@ -105,7 +103,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv imageStream = response.Content; contentType = response.ContentType; } - else if (programInfo.HasImage ?? true) + else if (item.HasProviderImage ?? true) { var service = _liveTvManager.Services.FirstOrDefault(i => string.Equals(i.Name, item.ServiceName, StringComparison.OrdinalIgnoreCase)); @@ -113,7 +111,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv { try { - var response = await service.GetProgramImageAsync(programInfo.Id, programInfo.ChannelId, cancellationToken).ConfigureAwait(false); + var response = await service.GetProgramImageAsync(item.ExternalId, item.ExternalChannelId, cancellationToken).ConfigureAwait(false); if (response != null) { @@ -131,7 +129,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv if (imageStream != null) { // Dummy up the original url - var url = item.ServiceName + programInfo.Id; + var url = item.ServiceName + item.ExternalId; await _providerManager.SaveImage(item, imageStream, contentType, ImageType.Primary, null, url, cancellationToken).ConfigureAwait(false); return true; |
