aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs26
1 files changed, 22 insertions, 4 deletions
diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
index ee1614104..f188e484f 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
@@ -664,12 +664,22 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
throw new ArgumentNullException("timer");
}
+ ProgramInfo info = null;
+
if (string.IsNullOrWhiteSpace(timer.ProgramId))
{
- throw new InvalidOperationException("timer.ProgramId is null. Cannot record.");
+ _logger.Info("Timer {0} has null programId", timer.Id);
+ }
+ else
+ {
+ info = GetProgramInfoFromCache(timer.ChannelId, timer.ProgramId);
}
- var info = GetProgramInfoFromCache(timer.ChannelId, timer.ProgramId);
+ if (info == null)
+ {
+ _logger.Info("Unable to find program with Id {0}. Will search using start date", timer.ProgramId);
+ info = GetProgramInfoFromCache(timer.ChannelId, timer.StartDate);
+ }
if (info == null)
{
@@ -775,14 +785,14 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
using (var response = await _httpClient.SendAsync(httpRequestOptions, "GET").ConfigureAwait(false))
{
_logger.Info("Opened recording stream from tuner provider");
-
+
using (var output = _fileSystem.GetFileStream(recordPath, FileMode.Create, FileAccess.Write, FileShare.Read))
{
result.Item2.Release();
isResourceOpen = false;
_logger.Info("Copying recording stream to file stream");
-
+
await response.Content.CopyToAsync(output, StreamDefaults.DefaultCopyToBufferSize, linkedToken).ConfigureAwait(false);
}
}
@@ -867,6 +877,14 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
return epgData.FirstOrDefault(p => string.Equals(p.Id, programId, StringComparison.OrdinalIgnoreCase));
}
+ private ProgramInfo GetProgramInfoFromCache(string channelId, DateTime startDateUtc)
+ {
+ var epgData = GetEpgDataForChannel(channelId);
+ var startDateTicks = startDateUtc.Ticks;
+ // Find the first program that starts within 3 minutes
+ return epgData.FirstOrDefault(p => Math.Abs(startDateTicks - p.StartDate.Ticks) <= TimeSpan.FromMinutes(3).Ticks);
+ }
+
private string RecordingPath
{
get