diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/dvb/dvbtime.cpp | 16 | ||||
| -rw-r--r-- | lib/dvb/dvbtime.h | 2 |
2 files changed, 16 insertions, 2 deletions
diff --git a/lib/dvb/dvbtime.cpp b/lib/dvb/dvbtime.cpp index c4335795..d879cfac 100644 --- a/lib/dvb/dvbtime.cpp +++ b/lib/dvb/dvbtime.cpp @@ -11,6 +11,8 @@ #define FP_IOCTL_SET_RTC 0x101 #define FP_IOCTL_GET_RTC 0x102 +#define TIME_UPDATE_INTERVAL (30*60*1000) + static time_t prev_time; void setRTC(time_t time) @@ -143,7 +145,7 @@ eDVBLocalTimeHandler *eDVBLocalTimeHandler::instance; DEFINE_REF(eDVBLocalTimeHandler); eDVBLocalTimeHandler::eDVBLocalTimeHandler() - :m_time_ready(false) + :m_time_ready(false), m_updateNonTunedTimer(eTimer::create(eApp)) { if ( !instance ) instance=this; @@ -164,6 +166,7 @@ eDVBLocalTimeHandler::eDVBLocalTimeHandler() /*emit*/ m_timeUpdated(); } } + CONNECT(m_updateNonTunedTimer->timeout, eDVBLocalTimeHandler::updateNonTuned); } eDVBLocalTimeHandler::~eDVBLocalTimeHandler() @@ -211,6 +214,12 @@ void eDVBLocalTimeHandler::writeTimeOffsetData( const char* filename ) } } +void eDVBLocalTimeHandler::updateNonTuned() +{ + updateTime(-1, 0, 0); + m_updateNonTunedTimer->start(TIME_UPDATE_INTERVAL, true); +} + void eDVBLocalTimeHandler::updateTime( time_t tp_time, eDVBChannel *chan, int update_count ) { int time_difference; @@ -397,7 +406,7 @@ void eDVBLocalTimeHandler::updateTime( time_t tp_time, eDVBChannel *chan, int up int updateCount = it->second.tdt->getUpdateCount(); it->second.tdt = 0; it->second.tdt = new TDT(chan, updateCount); - it->second.tdt->startTimer(60*60*1000); // restart TDT for this transponder in 60min + it->second.tdt->startTimer(TIME_UPDATE_INTERVAL); // restart TDT for this transponder in 30min } } } @@ -430,12 +439,15 @@ void eDVBLocalTimeHandler::DVBChannelStateChanged(iDVBChannel *chan) { case iDVBChannel::state_ok: eDebug("[eDVBLocalTimerHandler] channel %p running", chan); + m_updateNonTunedTimer->stop(); it->second.tdt = new TDT(it->second.channel); it->second.tdt->start(); break; case iDVBChannel::state_release: eDebug("[eDVBLocalTimerHandler] remove channel %p", chan); m_knownChannels.erase(it); + if (m_knownChannels.empty()) + m_updateNonTunedTimer->start(TIME_UPDATE_INTERVAL, true); break; default: // ignore all other events return; diff --git a/lib/dvb/dvbtime.h b/lib/dvb/dvbtime.h index f403ffd4..3f8d9b7d 100644 --- a/lib/dvb/dvbtime.h +++ b/lib/dvb/dvbtime.h @@ -54,6 +54,7 @@ class eDVBLocalTimeHandler: public Object ePtr<eConnection> m_stateChangedConn; int m_prevChannelState; }; + ePtr<eTimer> m_updateNonTunedTimer; friend class TDT; std::map<iDVBChannel*, channel_data> m_knownChannels; std::map<eDVBChannelID,int> m_timeOffsetMap; @@ -66,6 +67,7 @@ class eDVBLocalTimeHandler: public Object void readTimeOffsetData(const char*); void writeTimeOffsetData(const char*); void updateTime(time_t tp_time, eDVBChannel*, int updateCount); + void updateNonTuned(); static eDVBLocalTimeHandler *instance; #ifdef SWIG eDVBLocalTimeHandler(); |
