diff options
| author | Luke <luke.pulverenti@gmail.com> | 2017-04-20 23:49:50 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-04-20 23:49:50 -0400 |
| commit | f525f5a89e68248a81ab7cfdfa044fbe45e51863 (patch) | |
| tree | f029e380a0867d6e8db7895e63d9a69e0cfd426f /Emby.Server.Implementations/LiveTv | |
| parent | 5dca8cb077fb544628f62939bbda292d8c91b637 (diff) | |
| parent | b9fe720e736abacc57ffb846e4ce6644bc110f61 (diff) | |
Merge pull request #2591 from MediaBrowser/beta
Beta
Diffstat (limited to 'Emby.Server.Implementations/LiveTv')
5 files changed, 96 insertions, 22 deletions
diff --git a/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs index 0ea1b38b14..666c1fdcd4 100644 --- a/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs +++ b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs @@ -39,6 +39,7 @@ using MediaBrowser.Model.FileOrganization; using MediaBrowser.Model.System; using MediaBrowser.Model.Threading; using MediaBrowser.Model.Extensions; +using MediaBrowser.Model.Querying; namespace Emby.Server.Implementations.LiveTv.EmbyTV { @@ -1512,7 +1513,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV _timerProvider.AddOrUpdate(timer, false); SaveRecordingMetadata(timer, recordPath, seriesPath); - EnforceKeepUpTo(timer); + EnforceKeepUpTo(timer, seriesPath); }; await recorder.Record(mediaStreamInfo, recordPath, duration, onStarted, cancellationToken) @@ -1583,12 +1584,16 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV }, _logger); } - private async void EnforceKeepUpTo(TimerInfo timer) + private async void EnforceKeepUpTo(TimerInfo timer, string seriesPath) { if (string.IsNullOrWhiteSpace(timer.SeriesTimerId)) { return; } + if (string.IsNullOrWhiteSpace(seriesPath)) + { + return; + } var seriesTimerId = timer.SeriesTimerId; var seriesTimer = _seriesTimerProvider.GetAll().FirstOrDefault(i => string.Equals(i.Id, seriesTimerId, StringComparison.OrdinalIgnoreCase)); @@ -1621,6 +1626,43 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV .ToList(); await DeleteLibraryItemsForTimers(timersToDelete).ConfigureAwait(false); + + var librarySeries = _libraryManager.FindByPath(seriesPath, true) as Folder; + + if (librarySeries == null) + { + return; + } + + var episodesToDelete = (await librarySeries.GetItems(new InternalItemsQuery + { + SortBy = new[] { ItemSortBy.DateCreated }, + SortOrder = SortOrder.Descending, + IsVirtualItem = false, + IsFolder = false, + Recursive = true + + }).ConfigureAwait(false)) + .Items + .Where(i => i.LocationType == LocationType.FileSystem && _fileSystem.FileExists(i.Path)) + .Skip(seriesTimer.KeepUpTo - 1) + .ToList(); + + foreach (var item in episodesToDelete) + { + try + { + await _libraryManager.DeleteItem(item, new DeleteOptions + { + DeleteFileLocation = true + + }).ConfigureAwait(false); + } + catch (Exception ex) + { + _logger.ErrorException("Error deleting item", ex); + } + } } finally { @@ -1658,7 +1700,8 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV await _libraryManager.DeleteItem(libraryItem, new DeleteOptions { DeleteFileLocation = true - }); + + }).ConfigureAwait(false); } else { diff --git a/Emby.Server.Implementations/LiveTv/LiveStreamHelper.cs b/Emby.Server.Implementations/LiveTv/LiveStreamHelper.cs index 3906df0005..d56ddc57dd 100644 --- a/Emby.Server.Implementations/LiveTv/LiveStreamHelper.cs +++ b/Emby.Server.Implementations/LiveTv/LiveStreamHelper.cs @@ -30,8 +30,6 @@ namespace Emby.Server.Implementations.LiveTv var now = DateTime.UtcNow; - var allowVideoStreamCopy = mediaSource.MediaStreams.Any(i => i.Type == MediaStreamType.Video && i.AllowStreamCopy); - var info = await _mediaEncoder.GetMediaInfo(new MediaInfoRequest { InputPath = mediaSource.Path, @@ -76,25 +74,28 @@ namespace Emby.Server.Implementations.LiveTv var videoStream = mediaSource.MediaStreams.FirstOrDefault(i => i.Type == MediaBrowser.Model.Entities.MediaStreamType.Video); if (videoStream != null) { - videoStream.AllowStreamCopy = allowVideoStreamCopy; - if (!videoStream.BitRate.HasValue) { var width = videoStream.Width ?? 1920; - if (width >= 1900) + if (width >= 3000) { - videoStream.BitRate = 8000000; + videoStream.BitRate = 30000000; } - else if (width >= 1260) + else if (width >= 1900) { - videoStream.BitRate = 3000000; + videoStream.BitRate = 20000000; + } + + else if (width >= 1200) + { + videoStream.BitRate = 8000000; } else if (width >= 700) { - videoStream.BitRate = 1000000; + videoStream.BitRate = 2000000; } } diff --git a/Emby.Server.Implementations/LiveTv/LiveTvManager.cs b/Emby.Server.Implementations/LiveTv/LiveTvManager.cs index 4ffea3571f..a898d30844 100644 --- a/Emby.Server.Implementations/LiveTv/LiveTvManager.cs +++ b/Emby.Server.Implementations/LiveTv/LiveTvManager.cs @@ -490,7 +490,6 @@ namespace Emby.Server.Implementations.LiveTv if (stream.Type == MediaStreamType.Video) { stream.IsInterlaced = true; - stream.AllowStreamCopy = false; } } } @@ -2284,7 +2283,7 @@ namespace Emby.Server.Implementations.LiveTv }; } - public void AddChannelInfo(List<Tuple<BaseItemDto, LiveTvChannel>> tuples, DtoOptions options, User user) + public async Task AddChannelInfo(List<Tuple<BaseItemDto, LiveTvChannel>> tuples, DtoOptions options, User user) { var now = DateTime.UtcNow; @@ -2304,6 +2303,12 @@ namespace Emby.Server.Implementations.LiveTv RemoveFields(options); + var currentProgramsList = new List<BaseItem>(); + var currentChannelsDict = new Dictionary<string, BaseItemDto>(); + + var addCurrentProgram = options.AddCurrentProgram; + var addMediaSources = options.Fields.Contains(ItemFields.MediaSources); + foreach (var tuple in tuples) { var dto = tuple.Item1; @@ -2314,19 +2319,38 @@ namespace Emby.Server.Implementations.LiveTv dto.ChannelType = channel.ChannelType; dto.ServiceName = channel.ServiceName; - if (options.Fields.Contains(ItemFields.MediaSources)) + currentChannelsDict[dto.Id] = dto; + + if (addMediaSources) { dto.MediaSources = channel.GetMediaSources(true).ToList(); } - if (options.AddCurrentProgram) + if (addCurrentProgram) { var channelIdString = channel.Id.ToString("N"); var currentProgram = programs.FirstOrDefault(i => string.Equals(i.ChannelId, channelIdString)); if (currentProgram != null) { - dto.CurrentProgram = _dtoService.GetBaseItemDto(currentProgram, options, user); + currentProgramsList.Add(currentProgram); + } + } + } + + if (addCurrentProgram) + { + var currentProgramDtos = await _dtoService.GetBaseItemDtos(currentProgramsList, options, user).ConfigureAwait(false); + + foreach (var programDto in currentProgramDtos) + { + if (!string.IsNullOrWhiteSpace(programDto.ChannelId)) + { + BaseItemDto channelDto; + if (currentChannelsDict.TryGetValue(programDto.ChannelId, out channelDto)) + { + channelDto.CurrentProgram = programDto; + } } } } diff --git a/Emby.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs b/Emby.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs index a9c449f837..0329ea6066 100644 --- a/Emby.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs +++ b/Emby.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs @@ -183,19 +183,24 @@ namespace Emby.Server.Implementations.LiveTv { var width = videoStream.Width ?? 1920; - if (width >= 1900) + if (width >= 3000) { - videoStream.BitRate = 8000000; + videoStream.BitRate = 30000000; } - else if (width >= 1260) + else if (width >= 1900) { - videoStream.BitRate = 3000000; + videoStream.BitRate = 20000000; + } + + else if (width >= 1200) + { + videoStream.BitRate = 8000000; } else if (width >= 700) { - videoStream.BitRate = 1000000; + videoStream.BitRate = 2000000; } } } diff --git a/Emby.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs index 4ec70f8026..8cf1106f0f 100644 --- a/Emby.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs +++ b/Emby.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs @@ -145,6 +145,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts }, RequiresOpening = true, RequiresClosing = true, + RequiresLooping = true, ReadAtNativeFramerate = false, |
