int CScheduler::Check(bool forcecheck){ if (!thePrefs.IsSchedulerEnabled() || theApp.scheduler->GetCount()==0 || !theApp.emuledlg->IsRunning()) return -1; Schedule_Struct* schedule; struct tm tmTemp; CTime tNow = CTime(safe_mktime(CTime::GetCurrentTime().GetLocalTm(&tmTemp))); if (!forcecheck && tNow.GetMinute()==m_iLastCheckedMinute) return -1; m_iLastCheckedMinute=tNow.GetMinute(); theApp.scheduler->RestoreOriginals(); for (uint8 si=0;si<theApp.scheduler->GetCount();si++) { schedule=theApp.scheduler->GetSchedule(si); if (schedule->actions[0]==0 || !schedule->enabled) continue; // check day of week if (schedule->day!=DAY_DAYLY) { int dow=tNow.GetDayOfWeek(); switch (schedule->day) { case DAY_MO : if (dow!=2) continue; break; case DAY_DI : if (dow!=3) continue; break; case DAY_MI : if (dow!=4) continue; break; case DAY_DO : if (dow!=5) continue; break; case DAY_FR : if (dow!=6) continue; break; case DAY_SA : if (dow!=7) continue; break; case DAY_SO : if (dow!=1) continue; break; case DAY_MO_FR : if (dow==7 || dow==1 ) continue; break; case DAY_MO_SA : if (dow==1) continue; break; case DAY_SA_SO : if (dow>=2 && dow<=6) continue; } } //check time UINT h1,h2,m1,m2; CTime t1=CTime(schedule->time); CTime t2=CTime(schedule->time2); h1=t1.GetHour(); h2=t2.GetHour(); m1=t1.GetMinute(); m2=t2.GetMinute(); int it1,it2, itn; it1=h1*60 + m1; it2=h2*60 + m2; itn=tNow.GetHour()*60 + tNow.GetMinute(); if (it1<=it2) { // normal timespan if ( !(itn>=it1 && itn<it2) ) continue; } else { // reversed timespan (23:30 to 5:10) now 10 if ( !(itn>=it1 || itn<it2)) continue; } // ok, lets do the actions of this schedule ActivateSchedule(si,schedule->time2==0); } return -1; }
int CScheduler::Check(bool forcecheck){ if (!thePrefs.IsSchedulerEnabled() || theApp.scheduler->GetCount()==0 || !theApp.emuledlg->IsRunning()) return -1; Schedule_Struct* schedule; struct tm tmTemp; CTime tNow = CTime(safe_mktime(CTime::GetCurrentTime().GetLocalTm(&tmTemp))); if (!forcecheck && tNow.GetMinute()==m_iLastCheckedMinute) return -1; m_iLastCheckedMinute=tNow.GetMinute(); theApp.scheduler->RestoreOriginals(); for (uint8 si=0;si<theApp.scheduler->GetCount();si++) { schedule=theApp.scheduler->GetSchedule(si); if (schedule->actions[0]==0 || !schedule->enabled) continue; // check day of week if (schedule->day!=DAY_DAYLY) { int dow=tNow.GetDayOfWeek(); switch (schedule->day) { case DAY_MO : if (dow!=2) continue; break; case DAY_DI : if (dow!=3) continue; break; case DAY_MI : if (dow!=4) continue; break; case DAY_DO : if (dow!=5) continue; break; case DAY_FR : if (dow!=6) continue; break; case DAY_SA : if (dow!=7) continue; break; case DAY_SO : if (dow!=1) continue; break; case DAY_MO_FR : if (dow==7 || dow==1 ) continue; break; case DAY_MO_SA : if (dow==1) continue; break; case DAY_SA_SO : if (dow>=2 && dow<=6) continue; } } //check time UINT h1,h2,m1,m2; CTime t1=CTime(schedule->time); CTime t2=CTime(schedule->time2); h1=t1.GetHour(); h2=t2.GetHour(); m1=t1.GetMinute(); m2=t2.GetMinute(); int it1,it2, itn; it1=h1*60 + m1; it2=h2*60 + m2; // ==> handling of one-time-events [Mighty Knife] - Stulle // if start-time=end-time, this is an event that should // occur once in that minute. In that case we add 1 to it2 to make sure // it happens (because of the timespan-comparison below, which happens // once per minute, too...) if (it2==it1) it2++; // <== handling of one-time-events [Mighty Knife] - Stulle itn=tNow.GetHour()*60 + tNow.GetMinute(); if (it1<=it2) { // normal timespan if ( !(itn>=it1 && itn<it2) ) continue; } else { // reversed timespan (23:30 to 5:10) now 10 if ( !(itn>=it1 || itn<it2)) continue; } // ok, lets do the actions of this schedule ActivateSchedule(si,schedule->time2==0); } return -1; }