private Task CreateTimer(CancellationToken cancellationToken, Program program, Timers timers) { if (!timers.Timer.Any(t => t.ChannelId == program.ChannelId && GeneralExtensions.GetScheduleTime(t.Date, t.Start).AddMinutes(t.PreEPG) == GeneralExtensions.GetProgramTime(program.Start) && GeneralExtensions.GetScheduleTime(t.Date, t.Start).AddMinutes(t.Duration).AddMinutes(-t.PostEPG) == GeneralExtensions.GetProgramTime(program.Stop))) { var builder = new StringBuilder("api/timeradd.html?"); builder.AppendFormat("title={0}&", (program.EpisodeTitle != null ? program.Name + " - " + program.EpisodeTitle : program.Name).ToUrlString()); builder.AppendFormat("series={0}&", program.Name.ToUrlString()); builder.AppendFormat("encoding={0}&", 255); builder.AppendFormat("ch={0}&", program.ChannelId); builder.AppendFormat("dor={0}&", GeneralExtensions.GetProgramTime(program.Start).ToDelphiDate()); builder.AppendFormat("start={0}&", GeneralExtensions.GetProgramTime(program.Start).AddMinutes(-(double)Configuration.TimerPrePadding).ToLocalTime().TimeOfDay.TotalMinutes); builder.AppendFormat("stop={0}&", GeneralExtensions.GetProgramTime(program.Stop).AddMinutes((double)Configuration.TimerPostPadding).ToLocalTime().TimeOfDay.TotalMinutes); builder.AppendFormat("pre={0}&", Configuration.TimerPrePadding); builder.AppendFormat("post={0}&", Configuration.TimerPostPadding); builder.AppendFormat("prio={0}&", 49); builder.AppendFormat("after={0}&", !String.IsNullOrWhiteSpace(Configuration.TimerTask) ? Configuration.TimerTask.ToUrlString() : String.Empty); builder.Remove(builder.Length - 1, 1); Plugin.Logger.Info("Create new schedule: {0} - {1}, StartTime: {2}, EndTime: {3}, ChannelId: {4}", program.Name, program.EpisodeTitle, program.Start, program.Stop, program.ChannelId); return(Task.FromResult(GetToService(cancellationToken, builder.ToString()))); } return(Task.Delay(0)); }
private Task CreateTimer(CancellationToken cancellationToken, Program program, Timers timers) { var channels = _tvServiceProxy.GetChannelList(cancellationToken).Root.ChannelGroup.SelectMany(c => c.Channel); var guide = GetFromService <Guide>(cancellationToken, typeof(Guide), "api/epg.html?lvl=2&channel={0}&start={1}&end={2}", program.ChannelEPGID, GeneralExtensions.FloatDateTime(GeneralExtensions.GetProgramTime(program.Start)), GeneralExtensions.FloatDateTime(GeneralExtensions.GetProgramTime(program.Stop))); var episodeTitle = program.EpisodeTitle; if (!timers.Timer.Any(t => t.ChannelId == program.ChannelId && GeneralExtensions.GetScheduleTime(t.Date, t.Start).AddMinutes(t.PreEPG) == GeneralExtensions.GetProgramTime(program.Start) && GeneralExtensions.GetScheduleTime(t.Date, t.Start).AddMinutes(t.Duration).AddMinutes(-t.PostEPG) == GeneralExtensions.GetProgramTime(program.Stop))) { var builder = new StringBuilder("api/timeradd.html?"); builder.AppendFormat("title={0}&", (episodeTitle != null ? program.Name + " - " + episodeTitle : program.Name).ToUrlString()); builder.AppendFormat("series={0}&", program.Name.ToUrlString()); builder.AppendFormat("encoding={0}&", 255); builder.AppendFormat("ch={0}&", program.ChannelId); builder.AppendFormat("dor={0}&", GeneralExtensions.GetProgramTime(program.Start).ToDelphiDate()); builder.AppendFormat("start={0}&", GeneralExtensions.GetProgramTime(program.Start).AddMinutes(-(double)Configuration.TimerPrePadding).ToLocalTime().TimeOfDay.TotalMinutes); builder.AppendFormat("stop={0}&", GeneralExtensions.GetProgramTime(program.Stop).AddMinutes((double)Configuration.TimerPostPadding).ToLocalTime().TimeOfDay.TotalMinutes); builder.AppendFormat("pre={0}&", Configuration.TimerPrePadding); builder.AppendFormat("post={0}&", Configuration.TimerPostPadding); builder.AppendFormat("after={0}&", !String.IsNullOrWhiteSpace(Configuration.TimerTask) ? Configuration.TimerTask.ToUrlString() : String.Empty); builder.Remove(builder.Length - 1, 1); Plugin.Logger.Info("Create new schedule: {0}, StartTime: {1}, EndTime: {2}, ChannelId: {3}", program.Name, program.Start, program.Stop, program.ChannelId); return(Task.FromResult(GetToService(cancellationToken, builder.ToString()))); } return(Task.Delay(0)); }