diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-07-29 13:16:00 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-07-29 13:16:00 -0400 |
| commit | 1f6b5a8c7c049bea309351dd495d99ec21eb32cb (patch) | |
| tree | 29238cb6854bbca3355fa1f3e40b30a461fddb34 /MediaBrowser.Server.Implementations/LiveTv/EmbyTV | |
| parent | 4d7f98361894e9de90ab964c3496fb7f613c28e2 (diff) | |
update live tv recordings
Diffstat (limited to 'MediaBrowser.Server.Implementations/LiveTv/EmbyTV')
| -rw-r--r-- | MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs | 36 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs | 39 |
2 files changed, 34 insertions, 41 deletions
diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs index 3374a3cc9c..2319a6c2ca 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs @@ -228,7 +228,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV public Task CreateSeriesTimerAsync(SeriesTimerInfo info, CancellationToken cancellationToken) { - info.Id = info.ProgramId.Substring(0, 10); + info.Id = Guid.NewGuid().ToString("N"); UpdateTimersForSeriesTimer(info); _seriesTimerProvider.Add(info); @@ -581,7 +581,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV epgData = GetEpgDataForChannel(seriesTimer.ChannelId); } - var newTimers = RecordingHelper.GetTimersForSeries(seriesTimer, epgData, _recordingProvider.GetAll(), _logger); + var newTimers = GetTimersForSeries(seriesTimer, epgData, _recordingProvider.GetAll()).ToList(); var existingTimers = _timerProvider.GetAll() .Where(i => string.Equals(i.SeriesTimerId, seriesTimer.Id, StringComparison.OrdinalIgnoreCase)) @@ -603,6 +603,38 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV } } + private IEnumerable<TimerInfo> GetTimersForSeries(SeriesTimerInfo seriesTimer, IEnumerable<ProgramInfo> allPrograms, IReadOnlyList<RecordingInfo> currentRecordings) + { + allPrograms = GetProgramsForSeries(seriesTimer, allPrograms); + + allPrograms = allPrograms.Where(epg => currentRecordings.All(r => r.ProgramId.Substring(0, 14) != epg.Id.Substring(0, 14))); //filtered recordings already running + + return allPrograms.Select(i => RecordingHelper.CreateTimer(i, seriesTimer)); + } + + private IEnumerable<ProgramInfo> GetProgramsForSeries(SeriesTimerInfo seriesTimer, IEnumerable<ProgramInfo> allPrograms) + { + if (!seriesTimer.RecordAnyTime) + { + allPrograms = allPrograms.Where(epg => (seriesTimer.StartDate.TimeOfDay == epg.StartDate.TimeOfDay)); + } + + if (seriesTimer.RecordNewOnly) + { + allPrograms = allPrograms.Where(epg => !epg.IsRepeat); //Filtered by New only + } + + if (!seriesTimer.RecordAnyChannel) + { + allPrograms = allPrograms.Where(epg => string.Equals(epg.ChannelId, seriesTimer.ChannelId, StringComparison.OrdinalIgnoreCase)); + } + + allPrograms = allPrograms.Where(epg => seriesTimer.Days.Contains(epg.StartDate.DayOfWeek)); + + // TODO: This assumption will require review once additional listing providers are added + return allPrograms.Where(epg => epg.Id.StartsWith(seriesTimer.ProgramId, StringComparison.OrdinalIgnoreCase)); + } + private string GetChannelEpgCachePath(string channelId) { return Path.Combine(DataPath, "epg", channelId + ".json"); diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs index db89680d2d..31fb072cdf 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs @@ -1,51 +1,12 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Controller.LiveTv; -using MediaBrowser.Model.Logging; using System; -using System.Collections.Generic; -using System.Linq; using System.Text; namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV { internal class RecordingHelper { - public static List<TimerInfo> GetTimersForSeries(SeriesTimerInfo seriesTimer, IEnumerable<ProgramInfo> epgData, IReadOnlyList<RecordingInfo> currentRecordings, ILogger logger) - { - List<TimerInfo> timers = new List<TimerInfo>(); - - // Filtered Per Show - var filteredEpg = epgData.Where(epg => epg.Id.Substring(0, 10) == seriesTimer.Id); - - if (!seriesTimer.RecordAnyTime) - { - filteredEpg = filteredEpg.Where(epg => (seriesTimer.StartDate.TimeOfDay == epg.StartDate.TimeOfDay)); - } - - if (seriesTimer.RecordNewOnly) - { - filteredEpg = filteredEpg.Where(epg => !epg.IsRepeat); //Filtered by New only - } - - if (!seriesTimer.RecordAnyChannel) - { - filteredEpg = filteredEpg.Where(epg => string.Equals(epg.ChannelId, seriesTimer.ChannelId, StringComparison.OrdinalIgnoreCase)); - } - - filteredEpg = filteredEpg.Where(epg => seriesTimer.Days.Contains(epg.StartDate.DayOfWeek)); - - filteredEpg = filteredEpg.Where(epg => currentRecordings.All(r => r.Id.Substring(0, 14) != epg.Id.Substring(0, 14))); //filtered recordings already running - - filteredEpg = filteredEpg.GroupBy(epg => epg.Id.Substring(0, 14)).Select(g => g.First()).ToList(); - - foreach (var epg in filteredEpg) - { - timers.Add(CreateTimer(epg, seriesTimer)); - } - - return timers; - } - public static DateTime GetStartTime(TimerInfo timer) { return timer.StartDate.AddSeconds(-timer.PrePaddingSeconds); |
