retry failed recordings

This commit is contained in:
Luke Pulverenti 2015-08-22 14:29:12 -04:00
parent 19796847d8
commit 1ddee6724a
2 changed files with 27 additions and 10 deletions

View file

@ -463,13 +463,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
async void _timerProvider_TimerFired(object sender, GenericEventArgs<TimerInfo> e) async void _timerProvider_TimerFired(object sender, GenericEventArgs<TimerInfo> e)
{ {
var timer = e.Argument;
try try
{ {
var cancellationTokenSource = new CancellationTokenSource(); 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) catch (OperationCanceledException)
@ -479,6 +481,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
catch (Exception ex) catch (Exception ex)
{ {
_logger.ErrorException("Error recording stream", 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));
} }
} }

View file

@ -44,12 +44,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
public override void Delete(TimerInfo item) public override void Delete(TimerInfo item)
{ {
base.Delete(item); base.Delete(item);
StopTimer(item);
Timer timer;
if (_timers.TryRemove(item.Id, out timer))
{
timer.Dispose();
}
} }
public override void Update(TimerInfo item) public override void Update(TimerInfo item)
@ -104,9 +99,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
return; 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)) 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) private void TimerCallback(object state)
{ {
var timerId = (string)state; var timerId = (string)state;