aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs11
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/EmbyTV/TimerManager.cs26
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 d4b02568a..5b82b0a1f 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<TimerInfo> 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 0c8d2ca2b..3ae38f382 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;