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 <[email protected]>
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 <[email protected]>
Signed-off-by: GetAway <[email protected]>
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/tuxbox-cvs-commits