void loadTimersFromConfig() { CConfigFile *config = new CConfigFile(','); if(!config->loadConfig(CONFIGFILE)) { /* set defaults if no configuration file exists */ dprintf("%s not found\n", CONFIGFILE); } else { vector<int> savedIDs; savedIDs = config->getInt32Vector ("IDS"); dprintf("%d timer(s) in config\n",savedIDs.size()); for(unsigned int i=0; i < savedIDs.size(); i++) { stringstream ostr; ostr << savedIDs[i]; string id=ostr.str(); CTimerd::CTimerEventTypes type=(CTimerd::CTimerEventTypes)config->getInt32 ("EVENT_TYPE_"+id,0); time_t now = time(NULL); switch(type) { case CTimerd::TIMER_SHUTDOWN : { CTimerEvent_Shutdown *event= new CTimerEvent_Shutdown(config, savedIDs[i]); if((event->alarmTime >= now) || (event->stopTime > now)) { CTimerManager::getInstance()->addEvent(event,false); } else if(event->eventRepeat != CTimerd::TIMERREPEAT_ONCE) { // old periodic timers need to be rescheduled event->eventState = CTimerd::TIMERSTATE_HASFINISHED; CTimerManager::getInstance()->addEvent(event,false); } else { dprintf("Timer too old %d/%d\n",(int)now,(int) event->alarmTime); delete event; } break; } case CTimerd::TIMER_NEXTPROGRAM : { CTimerEvent_NextProgram *event= new CTimerEvent_NextProgram(config, savedIDs[i]); if((event->alarmTime >= now) || (event->stopTime > now)) { CTimerManager::getInstance()->addEvent(event,false); } else if(event->eventRepeat != CTimerd::TIMERREPEAT_ONCE) { // old periodic timers need to be rescheduled event->eventState = CTimerd::TIMERSTATE_HASFINISHED; CTimerManager::getInstance()->addEvent(event,false); } else { dprintf("Timer too old %d/%d\n",(int)now,(int) event->alarmTime); delete event; } break; } case CTimerd::TIMER_ZAPTO : { CTimerEvent_Zapto *event= new CTimerEvent_Zapto(config, savedIDs[i]); if((event->alarmTime >= now) || (event->stopTime > now)) { CTimerManager::getInstance()->addEvent(event,false); } else if(event->eventRepeat != CTimerd::TIMERREPEAT_ONCE) { // old periodic timers need to be rescheduled event->eventState = CTimerd::TIMERSTATE_HASFINISHED; CTimerManager::getInstance()->addEvent(event,false); } else { dprintf("Timer too old %d/%d\n",(int)now,(int) event->alarmTime); delete event; } break; } case CTimerd::TIMER_STANDBY : { CTimerEvent_Standby *event= new CTimerEvent_Standby(config, savedIDs[i]); if((event->alarmTime >= now) || (event->stopTime > now)) { CTimerManager::getInstance()->addEvent(event,false); } else if(event->eventRepeat != CTimerd::TIMERREPEAT_ONCE) { // old periodic timers need to be rescheduled event->eventState = CTimerd::TIMERSTATE_HASFINISHED; CTimerManager::getInstance()->addEvent(event,false); } else { dprintf("Timer too old %d/%d\n",(int)now,(int) event->alarmTime); delete event; } break; } case CTimerd::TIMER_RECORD : { CTimerEvent_Record *event= new CTimerEvent_Record(config, savedIDs[i]); if((event->alarmTime >= now) || (event->stopTime > now)) { CTimerManager::getInstance()->addEvent(event,false); } else if(event->eventRepeat != CTimerd::TIMERREPEAT_ONCE) { // old periodic timers need to be rescheduled event->eventState = CTimerd::TIMERSTATE_HASFINISHED; CTimerManager::getInstance()->addEvent(event,false); } else { dprintf("Timer too old %d/%d\n",(int)now,(int) event->alarmTime); delete event; } break; } case CTimerd::TIMER_SLEEPTIMER : { CTimerEvent_Sleeptimer *event= new CTimerEvent_Sleeptimer(config, savedIDs[i]); if((event->alarmTime >= now) || (event->stopTime > now)) { CTimerManager::getInstance()->addEvent(event,false); } else if(event->eventRepeat != CTimerd::TIMERREPEAT_ONCE) { // old periodic timers need to be rescheduled event->eventState = CTimerd::TIMERSTATE_HASFINISHED; CTimerManager::getInstance()->addEvent(event,false); } else { dprintf("Timer too old %d/%d\n",(int)now,(int) event->alarmTime); delete event; } break; } case CTimerd::TIMER_REMIND : { CTimerEvent_Remind *event= new CTimerEvent_Remind(config, savedIDs[i]); if((event->alarmTime >= now) || (event->stopTime > now)) { CTimerManager::getInstance()->addEvent(event,false); } else if(event->eventRepeat != CTimerd::TIMERREPEAT_ONCE) { // old periodic timers need to be rescheduled event->eventState = CTimerd::TIMERSTATE_HASFINISHED; CTimerManager::getInstance()->addEvent(event,false); } else { dprintf("Timer too old %d/%d\n",(int)now,(int) event->alarmTime); delete event; } break; } default: dprintf("Unknown timer on load %d\n",type); } } } delete config; CTimerManager::getInstance()->saveEventsToConfig(); }