public DateTime GetNextWakeupTime(DateTime earliestWakeupTime)
{
TvBusinessLayer layer = new TvBusinessLayer();
Schedule recSchedule = null;
DateTime scheduleWakeupTime = DateTime.MaxValue;
DateTime nextWakeuptime = DateTime.MaxValue;
foreach (Schedule schedule in Schedule.ListAll())
{
if (schedule.Canceled != Schedule.MinSchedule) continue;
List<Schedule> schedules = layer.GetRecordingTimes(schedule);
if (schedules.Count > 0)
{
int i = 0;
// Take first occurrence of this schedule if not a canceled serie
while (i < schedules.Count)
{
recSchedule = schedules[i];
if (!recSchedule.IsSerieIsCanceled(recSchedule.StartTime))
break;
i++;
}
if (recSchedule != null)
{
scheduleWakeupTime = recSchedule.StartTime.AddMinutes(-recSchedule.PreRecordInterval);
}
}
if (recSchedule == null)
{
// manually determine schedule's wakeup time of no guide data is present
scheduleWakeupTime = GetWakeupTime(schedule);
}
if (scheduleWakeupTime < nextWakeuptime && scheduleWakeupTime >= earliestWakeupTime)
nextWakeuptime = scheduleWakeupTime;
}
return nextWakeuptime;
}