Browse Source

retry failed recordings

Luke Pulverenti 9 years ago
parent
commit
1ddee6724a

+ 9 - 2
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));
             }
         }
 

+ 18 - 8
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;