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); }