aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2016-06-27 18:53:42 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2016-06-27 18:53:42 -0400
commitc1e83beeac9c71481c6f1e0d6d0cad8a6c384fbe (patch)
tree5219a4134b66f61995d563a32cbb3a931af96a46
parent35e83dc73d1bf9a252b06cb32c4a5a54f28fbc68 (diff)
update search
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs86
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs9
2 files changed, 49 insertions, 46 deletions
diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
index 2d2d18524..8f56554f1 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
@@ -979,67 +979,57 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
var recordPath = GetRecordingPath(timer, info);
var recordingStatus = RecordingStatus.New;
+ var isResourceOpen = false;
+ SemaphoreSlim semaphore = null;
try
{
var result = await GetChannelStreamInternal(timer.ChannelId, null, CancellationToken.None).ConfigureAwait(false);
+ isResourceOpen = true;
+ semaphore = result.Item3;
var mediaStreamInfo = result.Item1;
- var isResourceOpen = true;
- // Unfortunately due to the semaphore we have to have a nested try/finally
- try
- {
- // HDHR doesn't seem to release the tuner right away after first probing with ffmpeg
- //await Task.Delay(3000, cancellationToken).ConfigureAwait(false);
-
- var recorder = await GetRecorder().ConfigureAwait(false);
+ // HDHR doesn't seem to release the tuner right away after first probing with ffmpeg
+ //await Task.Delay(3000, cancellationToken).ConfigureAwait(false);
- recordPath = recorder.GetOutputPath(mediaStreamInfo, recordPath);
- recordPath = EnsureFileUnique(recordPath, timer.Id);
+ var recorder = await GetRecorder().ConfigureAwait(false);
- _libraryMonitor.ReportFileSystemChangeBeginning(recordPath);
- _fileSystem.CreateDirectory(Path.GetDirectoryName(recordPath));
- activeRecordingInfo.Path = recordPath;
+ recordPath = recorder.GetOutputPath(mediaStreamInfo, recordPath);
+ recordPath = EnsureFileUnique(recordPath, timer.Id);
- var duration = recordingEndDate - DateTime.UtcNow;
+ _libraryMonitor.ReportFileSystemChangeBeginning(recordPath);
+ _fileSystem.CreateDirectory(Path.GetDirectoryName(recordPath));
+ activeRecordingInfo.Path = recordPath;
- _logger.Info("Beginning recording. Will record for {0} minutes.", duration.TotalMinutes.ToString(CultureInfo.InvariantCulture));
+ var duration = recordingEndDate - DateTime.UtcNow;
- _logger.Info("Writing file to path: " + recordPath);
- _logger.Info("Opening recording stream from tuner provider");
+ _logger.Info("Beginning recording. Will record for {0} minutes.", duration.TotalMinutes.ToString(CultureInfo.InvariantCulture));
- Action onStarted = () =>
- {
- timer.Status = RecordingStatus.InProgress;
- _timerProvider.AddOrUpdate(timer, false);
-
- result.Item3.Release();
- isResourceOpen = false;
- };
+ _logger.Info("Writing file to path: " + recordPath);
+ _logger.Info("Opening recording stream from tuner provider");
- var pathWithDuration = result.Item2.ApplyDuration(mediaStreamInfo.Path, duration);
+ Action onStarted = () =>
+ {
+ timer.Status = RecordingStatus.InProgress;
+ _timerProvider.AddOrUpdate(timer, false);
- // If it supports supplying duration via url
- if (!string.Equals(pathWithDuration, mediaStreamInfo.Path, StringComparison.OrdinalIgnoreCase))
- {
- mediaStreamInfo.Path = pathWithDuration;
- mediaStreamInfo.RunTimeTicks = duration.Ticks;
- }
+ result.Item3.Release();
+ isResourceOpen = false;
+ };
- await recorder.Record(mediaStreamInfo, recordPath, duration, onStarted, cancellationToken).ConfigureAwait(false);
+ var pathWithDuration = result.Item2.ApplyDuration(mediaStreamInfo.Path, duration);
- recordingStatus = RecordingStatus.Completed;
- _logger.Info("Recording completed: {0}", recordPath);
- }
- finally
+ // If it supports supplying duration via url
+ if (!string.Equals(pathWithDuration, mediaStreamInfo.Path, StringComparison.OrdinalIgnoreCase))
{
- if (isResourceOpen)
- {
- result.Item3.Release();
- }
-
- _libraryMonitor.ReportFileSystemChangeComplete(recordPath, true);
+ mediaStreamInfo.Path = pathWithDuration;
+ mediaStreamInfo.RunTimeTicks = duration.Ticks;
}
+
+ await recorder.Record(mediaStreamInfo, recordPath, duration, onStarted, cancellationToken).ConfigureAwait(false);
+
+ recordingStatus = RecordingStatus.Completed;
+ _logger.Info("Recording completed: {0}", recordPath);
}
catch (OperationCanceledException)
{
@@ -1053,6 +1043,13 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
}
finally
{
+ if (isResourceOpen && semaphore != null)
+ {
+ semaphore.Release();
+ }
+
+ _libraryMonitor.ReportFileSystemChangeComplete(recordPath, true);
+
ActiveRecordingInfo removed;
_activeRecordings.TryRemove(timer.Id, out removed);
}
@@ -1060,10 +1057,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
if (recordingStatus == RecordingStatus.Completed)
{
timer.Status = RecordingStatus.Completed;
- _timerProvider.AddOrUpdate(timer, false);
+ _timerProvider.Delete(timer);
OnSuccessfulRecording(info.IsSeries, recordPath);
- _timerProvider.Delete(timer);
}
else if (DateTime.UtcNow < timer.EndDate)
{
diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs
index cad300fac..21879f6f4 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs
@@ -62,7 +62,14 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
}
finally
{
- File.Delete(tempfile);
+ try
+ {
+ File.Delete(tempfile);
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error deleting recording temp file", ex);
+ }
}
}