Project "Tuxbox-GIT: apps": The branch, master has been updated via 877c1529f160f5ff5b166ee0b2309ef328c2a01f (commit) from 2385089284b6762acf16fc1de3478cbc3ef51ad0 (commit)
Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 877c1529f160f5ff5b166ee0b2309ef328c2a01f Author: Christian Schuett <gaucho...@hotmail.com> Date: Sun Mar 15 16:46:11 2015 +0100 Neutrino: use existing code in timerd to skip repeat timer in timerlist Signed-off-by: Christian Schuett <gaucho...@hotmail.com> Signed-off-by: GetAway <get-a...@t-online.de> diff --git a/tuxbox/neutrino/daemons/timerd/timerd.cpp b/tuxbox/neutrino/daemons/timerd/timerd.cpp index d51a694..592ae7d 100644 --- a/tuxbox/neutrino/daemons/timerd/timerd.cpp +++ b/tuxbox/neutrino/daemons/timerd/timerd.cpp @@ -207,10 +207,11 @@ bool parse_command(CBasicMessage::Header &rmsg, int connfd) CTimerManager::getInstance()->unlockEvents(); break; - case CTimerdMsg::CMD_RESCHEDULETIMER: // event nach vorne oder hinten schieben + case CTimerdMsg::CMD_RESCHEDULETIMER: // event verschieben { - CBasicServer::receive_data(connfd,&msgModifyTimer, sizeof(msgModifyTimer)); - int ret=CTimerManager::getInstance()->rescheduleEvent(msgModifyTimer.eventID,msgModifyTimer.announceTime,msgModifyTimer.alarmTime, msgModifyTimer.stopTime); + CTimerdMsg::commandRescheduleTimer msgRescheduleTimer; + CBasicServer::receive_data(connfd, &msgRescheduleTimer, sizeof(msgRescheduleTimer)); + int ret = CTimerManager::getInstance()->rescheduleEvent(msgRescheduleTimer.eventID); CTimerdMsg::responseStatus rspStatus; rspStatus.status = (ret!=0); CBasicServer::send_data(connfd, &rspStatus, sizeof(rspStatus)); diff --git a/tuxbox/neutrino/daemons/timerd/timermanager.cpp b/tuxbox/neutrino/daemons/timerd/timermanager.cpp index 2d07185..5efb20d 100644 --- a/tuxbox/neutrino/daemons/timerd/timermanager.cpp +++ b/tuxbox/neutrino/daemons/timerd/timermanager.cpp @@ -274,8 +274,6 @@ bool CTimerManager::removeEvent(int ev_ID) events[ev_ID]->eventState = CTimerd::TIMERSTATE_TERMINATED; // set the state to terminated res = true; // so timerthread will do the rest for us } - else - res = false; pthread_mutex_unlock(&tm_eventsMutex); return res; } @@ -291,8 +289,6 @@ bool CTimerManager::stopEvent(int ev_ID) events[ev_ID]->eventState = CTimerd::TIMERSTATE_HASFINISHED; // set the state to finished res = true; // so timerthread will do the rest for us } - else - res = false; pthread_mutex_unlock(&tm_eventsMutex); return res; } @@ -333,8 +329,6 @@ CTimerd::CTimerEventTypes* CTimerManager::getEventType(int ev_ID) { res = &(events[ev_ID]->eventType); } - else - res = NULL; pthread_mutex_unlock(&tm_eventsMutex); return res; } @@ -391,8 +385,6 @@ int CTimerManager::modifyEvent(int ev_ID, time_t announceTime, time_t alarmTime, m_saveEvents=true; res = ev_ID; } - else - res = 0; pthread_mutex_unlock(&tm_eventsMutex); return res; } @@ -422,26 +414,20 @@ int CTimerManager::modifyEvent(int ev_ID, unsigned char apids) return res; } -int CTimerManager::rescheduleEvent(int ev_ID, time_t announceTime, time_t alarmTime, time_t stopTime) +int CTimerManager::rescheduleEvent(int ev_ID) { int res = 0; pthread_mutex_lock(&tm_eventsMutex); - if (events.find(ev_ID) != events.end()) { CTimerEvent *event = events[ev_ID]; - if(event->announceTime > 0) - event->announceTime += announceTime; - if(event->alarmTime > 0) - event->alarmTime += alarmTime; - if(event->stopTime > 0) - event->stopTime += stopTime; - event->eventState = CTimerd::TIMERSTATE_SCHEDULED; - m_saveEvents=true; - res = ev_ID; + if (event->eventRepeat != CTimerd::TIMERREPEAT_ONCE && event->repeatCount != 1) + { + event->Reschedule(true); + m_saveEvents=true; + res = ev_ID; + } } - else - res = 0; pthread_mutex_unlock(&tm_eventsMutex); return res; } @@ -886,7 +872,7 @@ CTimerEvent::CTimerEvent(CTimerd::CTimerEventTypes evtype,CConfigFile *config, i dprintf("read PREVIOUS_STATE_%s %d\n",id.c_str(),previousState); } //------------------------------------------------------------ -void CTimerEvent::Reschedule() +void CTimerEvent::Reschedule(bool force) { if(eventRepeat == CTimerd::TIMERREPEAT_ONCE) { @@ -896,7 +882,7 @@ void CTimerEvent::Reschedule() else { time_t now = time(NULL); - while(alarmTime <= now) + while(alarmTime <= now || force) { time_t diff = 0; struct tm *t= localtime(&alarmTime); @@ -964,10 +950,12 @@ void CTimerEvent::Reschedule() announceTime += diff; if(stopTime > 0) stopTime += diff; + if(force) + break; } eventState = CTimerd::TIMERSTATE_SCHEDULED; if (repeatCount > 0) - repeatCount -= 1; + repeatCount--; dprintf("event %d rescheduled\n",eventID); } } @@ -1240,12 +1228,12 @@ void CTimerEvent_Record::saveToConfig(CConfigFile *config) dprintf("set EPG_TITLE_%s to %s (%p)\n",id.c_str(),epgTitle.c_str(), &epgTitle); } //------------------------------------------------------------ -void CTimerEvent_Record::Reschedule() +void CTimerEvent_Record::Reschedule(bool force) { // clear epgId on reschedule eventInfo.epgID = 0; eventInfo.epg_starttime = 0; - CTimerEvent::Reschedule(); + CTimerEvent::Reschedule(force); getEpgId(); } //------------------------------------------------------------ @@ -1407,12 +1395,12 @@ void CTimerEvent_NextProgram::saveToConfig(CConfigFile *config) dprintf("set EVENT_INFO_APIDS_%s to 0x%X (%p)\n",id.c_str(),eventInfo.apids,&eventInfo.apids); } //------------------------------------------------------------ -void CTimerEvent_NextProgram::Reschedule() +void CTimerEvent_NextProgram::Reschedule(bool force) { // clear eogId on reschedule eventInfo.epgID = 0; eventInfo.epg_starttime = 0; - CTimerEvent::Reschedule(); + CTimerEvent::Reschedule(force); } //============================================================= // Remind Event diff --git a/tuxbox/neutrino/daemons/timerd/timermanager.h b/tuxbox/neutrino/daemons/timerd/timermanager.h index 632a850..25cf8fb 100644 --- a/tuxbox/neutrino/daemons/timerd/timermanager.h +++ b/tuxbox/neutrino/daemons/timerd/timermanager.h @@ -63,7 +63,7 @@ class CTimerEvent static int remain_min(const time_t t) {return (t - time(NULL)) / 60;}; void printEvent(void); - virtual void Reschedule(); + virtual void Reschedule(bool force = false); virtual void fireEvent(){}; virtual void stopEvent(){}; @@ -133,7 +133,7 @@ class CTimerEvent_Record : public CTimerEvent virtual void announceEvent(); virtual void stopEvent(); virtual void saveToConfig(CConfigFile *config); - virtual void Reschedule(); + virtual void Reschedule(bool force = false); virtual void getEpgId(); virtual void Refresh(); }; @@ -175,7 +175,7 @@ class CTimerEvent_NextProgram : public CTimerEvent virtual void fireEvent(); virtual void announceEvent(); virtual void saveToConfig(CConfigFile *config); - virtual void Reschedule(); + virtual void Reschedule(bool force = false); }; class CTimerEvent_Remind : public CTimerEvent @@ -243,7 +243,7 @@ public: // int modifyEvent(int eventID, time_t announceTime, time_t alarmTime, time_t stopTime, uint repeatcount, CTimerd::CTimerEventRepeat evrepeat = CTimerd::TIMERREPEAT_ONCE); int modifyEvent(int eventID, time_t announceTime, time_t alarmTime, time_t stopTime, uint repeatcount, CTimerd::CTimerEventRepeat evrepeat, CTimerd::responseGetTimer& data); int modifyEvent(int eventID, unsigned char apids); - int rescheduleEvent(int eventID, time_t announceTime, time_t alarmTime, time_t stopTime); + int rescheduleEvent(int eventID); void saveEventsToConfig(); void loadEventsFromConfig(); bool shutdown(); diff --git a/tuxbox/neutrino/lib/timerdclient/timerdclient.cpp b/tuxbox/neutrino/lib/timerdclient/timerdclient.cpp index b085f7e..eeee6b4 100644 --- a/tuxbox/neutrino/lib/timerdclient/timerdclient.cpp +++ b/tuxbox/neutrino/lib/timerdclient/timerdclient.cpp @@ -194,22 +194,12 @@ bool CTimerdClient::modifyRecordTimerEvent(int eventid, time_t announcetime, tim } //------------------------------------------------------------------------- -bool CTimerdClient::rescheduleTimerEvent(int eventid, time_t diff) +bool CTimerdClient::rescheduleTimerEvent(int eventid) { - rescheduleTimerEvent(eventid,diff,diff,diff); - return true; -} -//------------------------------------------------------------------------- - -bool CTimerdClient::rescheduleTimerEvent(int eventid, time_t announcediff, time_t alarmdiff, time_t stopdiff) -{ - CTimerdMsg::commandModifyTimer msgModifyTimer; - msgModifyTimer.eventID = eventid; - msgModifyTimer.announceTime = announcediff; - msgModifyTimer.alarmTime = alarmdiff; - msgModifyTimer.stopTime = stopdiff; + CTimerdMsg::commandRescheduleTimer msgRescheduleTimer; + msgRescheduleTimer.eventID = eventid; - send(CTimerdMsg::CMD_RESCHEDULETIMER, (char*) &msgModifyTimer, sizeof(msgModifyTimer)); + send(CTimerdMsg::CMD_RESCHEDULETIMER, (char*) &msgRescheduleTimer, sizeof(msgRescheduleTimer)); CTimerdMsg::responseStatus response; receive_data((char*)&response, sizeof(response)); diff --git a/tuxbox/neutrino/lib/timerdclient/timerdclient.h b/tuxbox/neutrino/lib/timerdclient/timerdclient.h index 038c1da..f35449e 100644 --- a/tuxbox/neutrino/lib/timerdclient/timerdclient.h +++ b/tuxbox/neutrino/lib/timerdclient/timerdclient.h @@ -93,12 +93,8 @@ class CTimerdClient:private CBasicClient // returns remaining mins, -1 if no sleeptimer exists int getSleepTimerRemaining(); - - // add diff to existing timer event - bool rescheduleTimerEvent(int eventid, time_t diff); - - // add diff to existing timer event - bool rescheduleTimerEvent(int eventid, time_t announcediff, time_t alarmdiff, time_t stoptime); + // reschedule existing timer event + bool rescheduleTimerEvent(int eventid); // adds new sleeptimer event int addSleepTimerEvent(time_t announcetime,time_t alarmtime) // sleeptimer setzen diff --git a/tuxbox/neutrino/lib/timerdclient/timerdmsg.h b/tuxbox/neutrino/lib/timerdclient/timerdmsg.h index 82c0637..20e335b 100644 --- a/tuxbox/neutrino/lib/timerdclient/timerdmsg.h +++ b/tuxbox/neutrino/lib/timerdclient/timerdmsg.h @@ -88,6 +88,10 @@ class CTimerdMsg : public CBasicMessage uint repeatCount; }; + struct commandRescheduleTimer + { + int eventID; + }; struct commandRemind { diff --git a/tuxbox/neutrino/src/gui/timerlist.cpp b/tuxbox/neutrino/src/gui/timerlist.cpp index f663d66..2a88102 100644 --- a/tuxbox/neutrino/src/gui/timerlist.cpp +++ b/tuxbox/neutrino/src/gui/timerlist.cpp @@ -504,7 +504,8 @@ int CTimerList::show() } else if (msg == CRCInput::RC_blue && !timerlist.empty()) { - update = skipTimer(); + // skip timer + update = Timer->rescheduleTimerEvent(timerlist[selected].eventID); } else if (CRCInput::isNumeric(msg)) { @@ -1149,89 +1150,6 @@ int CTimerList::newTimer() return ret; } -bool CTimerList::skipTimer() -{ - CTimerd::responseGetTimer* timer = &timerlist[selected]; - if (timer->eventRepeat != CTimerd::TIMERREPEAT_ONCE && timer->repeatCount != 1) - { - struct tm *t = localtime(&timer->alarmTime); - int isdst1 = t->tm_isdst; - switch (timer->eventRepeat) - { - case CTimerd::TIMERREPEAT_DAILY: - t->tm_mday++; - break; - case CTimerd::TIMERREPEAT_WEEKLY: - t->tm_mday += 7; - break; - case CTimerd::TIMERREPEAT_BIWEEKLY: - t->tm_mday += 14; - break; - case CTimerd::TIMERREPEAT_FOURWEEKLY: - t->tm_mday += 28; - break; - case CTimerd::TIMERREPEAT_MONTHLY: - t->tm_mon++; - break; - default: - if (timer->eventRepeat >= CTimerd::TIMERREPEAT_WEEKDAYS) - { - int weekdays = ((int)timer->eventRepeat) >> 9; - if (weekdays > 0) - { - bool weekday_arr[7]; - weekday_arr[0] = ((weekdays & 0x40) > 0); //So - weekday_arr[1] = ((weekdays & 0x1) > 0); //Mo - weekday_arr[2] = ((weekdays & 0x2) > 0); //Di - weekday_arr[3] = ((weekdays & 0x4) > 0); //Mi - weekday_arr[4] = ((weekdays & 0x8) > 0); //Do - weekday_arr[5] = ((weekdays & 0x10) > 0); //Fr - weekday_arr[6] = ((weekdays & 0x20) > 0); //Sa - struct tm *t2 = localtime(&timer->alarmTime); - int day = 1; - for (; !weekday_arr[(t2->tm_wday + day) % 7]; day++); - t2->tm_mday += day; - } - } - } - time_t diff = mktime(t) - timer->alarmTime; - timer->alarmTime += diff; - t = localtime(&timer->alarmTime); - int isdst2 = t->tm_isdst; - if (isdst2 > isdst1) //change from winter to summer - { - diff -= 3600; - timer->alarmTime -= 3600; - } - else if (isdst1 > isdst2) //change from summer to winter - { - diff += 3600; - timer->alarmTime += 3600; - } - if (timer->announceTime > 0) - timer->announceTime += diff; - if (timer->stopTime > 0) - timer->stopTime += diff; - if (timer->repeatCount > 0) - timer->repeatCount--; - - if (timer->eventType == CTimerd::TIMER_RECORD) - { - Timer->modifyRecordTimerEvent(timer->eventID, timer->announceTime, timer->alarmTime, - timer->stopTime, timer->eventRepeat, timer->repeatCount, timer->recordingDir); - } - else - { - Timer->modifyTimerEvent(timer->eventID, timer->announceTime, timer->alarmTime, - timer->stopTime, timer->eventRepeat, timer->repeatCount); - } - - return true; - } - - return false; -} - bool askUserOnTimerConflict(time_t announceTime, time_t stopTime) { CTimerdClient Timer; diff --git a/tuxbox/neutrino/src/gui/timerlist.h b/tuxbox/neutrino/src/gui/timerlist.h index a0ddf6b..5cd0f49 100644 --- a/tuxbox/neutrino/src/gui/timerlist.h +++ b/tuxbox/neutrino/src/gui/timerlist.h @@ -82,7 +82,6 @@ class CTimerList : public CMenuTarget void updateSelection(unsigned int newpos); int modifyTimer(); int newTimer(); - bool skipTimer(); public: CTimerList(); ----------------------------------------------------------------------- Summary of changes: tuxbox/neutrino/daemons/timerd/timerd.cpp | 7 +- tuxbox/neutrino/daemons/timerd/timermanager.cpp | 44 ++++------- tuxbox/neutrino/daemons/timerd/timermanager.h | 8 +- tuxbox/neutrino/lib/timerdclient/timerdclient.cpp | 18 +---- tuxbox/neutrino/lib/timerdclient/timerdclient.h | 8 +-- tuxbox/neutrino/lib/timerdclient/timerdmsg.h | 4 + tuxbox/neutrino/src/gui/timerlist.cpp | 86 +-------------------- tuxbox/neutrino/src/gui/timerlist.h | 1 - 8 files changed, 36 insertions(+), 140 deletions(-) -- Tuxbox-GIT: apps ------------------------------------------------------------------------------ Dive into the World of Parallel Programming The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net/ _______________________________________________ Tuxbox-cvs-commits mailing list Tuxbox-cvs-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tuxbox-cvs-commits