From 1ddee6724ae4afa098f0ef4539245b4f20c86756 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 22 Aug 2015 14:29:12 -0400 Subject: [PATCH] retry failed recordings --- .../LiveTv/EmbyTV/EmbyTV.cs | 11 ++++++-- .../LiveTv/EmbyTV/TimerManager.cs | 26 +++++++++++++------ 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs index d4b02568a9..5b82b0a1f2 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs @@ -463,13 +463,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV async void _timerProvider_TimerFired(object sender, GenericEventArgs e) { + var timer = e.Argument; + try { var cancellationTokenSource = new CancellationTokenSource(); - if (_activeRecordings.TryAdd(e.Argument.Id, cancellationTokenSource)) + if (_activeRecordings.TryAdd(timer.Id, cancellationTokenSource)) { - await RecordStream(e.Argument, cancellationTokenSource.Token).ConfigureAwait(false); + await RecordStream(timer, cancellationTokenSource.Token).ConfigureAwait(false); } } catch (OperationCanceledException) @@ -479,6 +481,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV catch (Exception ex) { _logger.ErrorException("Error recording stream", ex); + + const int retryIntervalSeconds = 60; + _logger.Debug("Retrying recording in {0} seconds.", retryIntervalSeconds); + + _timerProvider.StartTimer(timer, TimeSpan.FromSeconds(retryIntervalSeconds)); } } diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs index 0c8d2ca2ba..3ae38f382e 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs @@ -44,12 +44,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV public override void Delete(TimerInfo item) { base.Delete(item); - - Timer timer; - if (_timers.TryRemove(item.Id, out timer)) - { - timer.Dispose(); - } + StopTimer(item); } public override void Update(TimerInfo item) @@ -104,9 +99,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV return; } - var timespan = startDate - now; + var timerLength = startDate - now; + StartTimer(item, timerLength); + } - var timer = new Timer(TimerCallback, item.Id, timespan, TimeSpan.Zero); + public void StartTimer(TimerInfo item, TimeSpan length) + { + StopTimer(item); + + var timer = new Timer(TimerCallback, item.Id, length, TimeSpan.Zero); if (!_timers.TryAdd(item.Id, timer)) { @@ -114,6 +115,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV } } + private void StopTimer(TimerInfo item) + { + Timer timer; + if (_timers.TryRemove(item.Id, out timer)) + { + timer.Dispose(); + } + } + private void TimerCallback(object state) { var timerId = (string)state;