update embytv
This commit is contained in:
parent
fe430acfc9
commit
671b861193
|
@ -58,7 +58,7 @@ namespace MediaBrowser.Common.ScheduledTasks
|
||||||
{
|
{
|
||||||
if (isApplicationStartup)
|
if (isApplicationStartup)
|
||||||
{
|
{
|
||||||
triggerDate = DateTime.UtcNow.AddMinutes(2);
|
triggerDate = DateTime.UtcNow.AddMinutes(1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -364,7 +364,47 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
|
||||||
return Task.FromResult((IEnumerable<SeriesTimerInfo>)_seriesTimerProvider.GetAll());
|
return Task.FromResult((IEnumerable<SeriesTimerInfo>)_seriesTimerProvider.GetAll());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task RefreshSeriesTimers(CancellationToken cancellationToken, IProgress<double> progress)
|
||||||
|
{
|
||||||
|
var timers = await GetSeriesTimersAsync(cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
|
List<ChannelInfo> channels = null;
|
||||||
|
|
||||||
|
foreach (var timer in timers)
|
||||||
|
{
|
||||||
|
List<ProgramInfo> epgData;
|
||||||
|
|
||||||
|
if (timer.RecordAnyChannel)
|
||||||
|
{
|
||||||
|
if (channels == null)
|
||||||
|
{
|
||||||
|
channels = (await GetChannelsAsync(true, CancellationToken.None).ConfigureAwait(false)).ToList();
|
||||||
|
}
|
||||||
|
var channelIds = channels.Select(i => i.Id).ToList();
|
||||||
|
epgData = GetEpgDataForChannels(channelIds);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
epgData = GetEpgDataForChannel(timer.ChannelId);
|
||||||
|
}
|
||||||
|
await UpdateTimersForSeriesTimer(epgData, timer).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<ProgramInfo>> GetProgramsAsync(string channelId, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
|
public async Task<IEnumerable<ProgramInfo>> GetProgramsAsync(string channelId, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return await GetProgramsAsyncInternal(channelId, startDateUtc, endDateUtc, cancellationToken).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.ErrorException("Error getting programs", ex);
|
||||||
|
return GetEpgDataForChannel(channelId).Where(i => i.StartDate <= endDateUtc && i.EndDate >= startDateUtc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<IEnumerable<ProgramInfo>> GetProgramsAsyncInternal(string channelId, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var channels = await GetChannelsAsync(true, cancellationToken).ConfigureAwait(false);
|
var channels = await GetChannelsAsync(true, cancellationToken).ConfigureAwait(false);
|
||||||
var channel = channels.First(i => string.Equals(i.Id, channelId, StringComparison.OrdinalIgnoreCase));
|
var channel = channels.First(i => string.Equals(i.Id, channelId, StringComparison.OrdinalIgnoreCase));
|
||||||
|
@ -373,6 +413,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
|
||||||
{
|
{
|
||||||
var programs = await provider.Item1.GetProgramsAsync(provider.Item2, channel.Number, startDateUtc, endDateUtc, cancellationToken)
|
var programs = await provider.Item1.GetProgramsAsync(provider.Item2, channel.Number, startDateUtc, endDateUtc, cancellationToken)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
var list = programs.ToList();
|
var list = programs.ToList();
|
||||||
|
|
||||||
// Replace the value that came from the provider with a normalized value
|
// Replace the value that came from the provider with a normalized value
|
||||||
|
@ -483,7 +524,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
|
||||||
var timer = e.Argument;
|
var timer = e.Argument;
|
||||||
|
|
||||||
_logger.Info("Recording timer fired.");
|
_logger.Info("Recording timer fired.");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var cancellationTokenSource = new CancellationTokenSource();
|
var cancellationTokenSource = new CancellationTokenSource();
|
||||||
|
@ -500,14 +541,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.ErrorException("Error recording stream", ex);
|
_logger.ErrorException("Error recording stream", ex);
|
||||||
|
|
||||||
if (DateTime.UtcNow < timer.EndDate)
|
|
||||||
{
|
|
||||||
const int retryIntervalSeconds = 60;
|
|
||||||
_logger.Info("Retrying recording in {0} seconds.", retryIntervalSeconds);
|
|
||||||
|
|
||||||
_timerProvider.StartTimer(timer, TimeSpan.FromSeconds(retryIntervalSeconds));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -626,15 +659,31 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
|
||||||
_logger.ErrorException("Error recording", ex);
|
_logger.ErrorException("Error recording", ex);
|
||||||
recording.Status = RecordingStatus.Error;
|
recording.Status = RecordingStatus.Error;
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
CancellationTokenSource removed;
|
||||||
|
_activeRecordings.TryRemove(timer.Id, out removed);
|
||||||
|
}
|
||||||
|
|
||||||
recording.DateLastUpdated = DateTime.UtcNow;
|
recording.DateLastUpdated = DateTime.UtcNow;
|
||||||
_recordingProvider.Update(recording);
|
_recordingProvider.Update(recording);
|
||||||
_timerProvider.Delete(timer);
|
|
||||||
_logger.Info("Recording was a success");
|
|
||||||
|
|
||||||
if (recording.Status == RecordingStatus.Completed)
|
if (recording.Status == RecordingStatus.Completed)
|
||||||
{
|
{
|
||||||
OnSuccessfulRecording(recording);
|
OnSuccessfulRecording(recording);
|
||||||
|
_timerProvider.Delete(timer);
|
||||||
|
}
|
||||||
|
else if (DateTime.UtcNow < timer.EndDate)
|
||||||
|
{
|
||||||
|
const int retryIntervalSeconds = 60;
|
||||||
|
_logger.Info("Retrying recording in {0} seconds.", retryIntervalSeconds);
|
||||||
|
|
||||||
|
_timerProvider.StartTimer(timer, TimeSpan.FromSeconds(retryIntervalSeconds));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_timerProvider.Delete(timer);
|
||||||
|
_recordingProvider.Delete(recording);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -216,20 +216,12 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings
|
||||||
// Helper.logger.Info("Modifyin channel " + channel.Number);
|
// Helper.logger.Info("Modifyin channel " + channel.Number);
|
||||||
if (_channelPair.ContainsKey(channel.Number))
|
if (_channelPair.ContainsKey(channel.Number))
|
||||||
{
|
{
|
||||||
string channelName;
|
|
||||||
if (_channelPair[channel.Number].logo != null)
|
if (_channelPair[channel.Number].logo != null)
|
||||||
{
|
{
|
||||||
channel.ImageUrl = _channelPair[channel.Number].logo.URL;
|
channel.ImageUrl = _channelPair[channel.Number].logo.URL;
|
||||||
channel.HasImage = true;
|
channel.HasImage = true;
|
||||||
}
|
}
|
||||||
if (_channelPair[channel.Number].affiliate != null)
|
string channelName = _channelPair[channel.Number].name;
|
||||||
{
|
|
||||||
channelName = _channelPair[channel.Number].affiliate;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
channelName = _channelPair[channel.Number].name;
|
|
||||||
}
|
|
||||||
channel.Name = channelName;
|
channel.Name = channelName;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -245,8 +237,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings
|
||||||
ScheduleDirect.ProgramDetails details)
|
ScheduleDirect.ProgramDetails details)
|
||||||
{
|
{
|
||||||
//_logger.Debug("Show type is: " + (details.showType ?? "No ShowType"));
|
//_logger.Debug("Show type is: " + (details.showType ?? "No ShowType"));
|
||||||
DateTime startAt = DateTime.ParseExact(programInfo.airDateTime, "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'",
|
DateTime startAt = GetDate(programInfo.airDateTime);
|
||||||
CultureInfo.InvariantCulture);
|
|
||||||
DateTime endAt = startAt.AddSeconds(programInfo.duration);
|
DateTime endAt = startAt.AddSeconds(programInfo.duration);
|
||||||
ProgramAudio audioType = ProgramAudio.Stereo;
|
ProgramAudio audioType = ProgramAudio.Stereo;
|
||||||
|
|
||||||
|
@ -369,6 +360,12 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private DateTime GetDate(string value)
|
||||||
|
{
|
||||||
|
return DateTime.ParseExact(value, "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'",
|
||||||
|
CultureInfo.InvariantCulture);
|
||||||
|
}
|
||||||
|
|
||||||
private string GetProgramLogo(string apiUrl, ScheduleDirect.ShowImages images)
|
private string GetProgramLogo(string apiUrl, ScheduleDirect.ShowImages images)
|
||||||
{
|
{
|
||||||
string url = "";
|
string url = "";
|
||||||
|
@ -408,7 +405,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings
|
||||||
{
|
{
|
||||||
imageIdString += "\"" + i.Substring(0, 10) + "\",";
|
imageIdString += "\"" + i.Substring(0, 10) + "\",";
|
||||||
}
|
}
|
||||||
;
|
|
||||||
});
|
});
|
||||||
imageIdString = imageIdString.TrimEnd(',') + "]";
|
imageIdString = imageIdString.TrimEnd(',') + "]";
|
||||||
|
|
||||||
|
@ -979,4 +975,4 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1082,6 +1082,13 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||||
await CleanDatabaseInternal(newChannelIdList, new[] { typeof(LiveTvChannel).Name }, progress, cancellationToken).ConfigureAwait(false);
|
await CleanDatabaseInternal(newChannelIdList, new[] { typeof(LiveTvChannel).Name }, progress, cancellationToken).ConfigureAwait(false);
|
||||||
await CleanDatabaseInternal(newProgramIdList, new[] { typeof(LiveTvProgram).Name }, progress, cancellationToken).ConfigureAwait(false);
|
await CleanDatabaseInternal(newProgramIdList, new[] { typeof(LiveTvProgram).Name }, progress, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
|
var coreService = _services.OfType<EmbyTV.EmbyTV>().FirstOrDefault();
|
||||||
|
|
||||||
|
if (coreService != null)
|
||||||
|
{
|
||||||
|
await coreService.RefreshSeriesTimers(cancellationToken, new Progress<double>()).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
// Load these now which will prefetch metadata
|
// Load these now which will prefetch metadata
|
||||||
var dtoOptions = new DtoOptions();
|
var dtoOptions = new DtoOptions();
|
||||||
dtoOptions.Fields.Remove(ItemFields.SyncInfo);
|
dtoOptions.Fields.Remove(ItemFields.SyncInfo);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user