diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2005-12-17 15:25:32 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2005-12-17 15:25:32 +0000 |
| commit | 358845c0c1b60f79831ee81ccf55c7c5f5d771e3 (patch) | |
| tree | 7045d2bc860d3da0835dbc09961733f4117f40c5 /lib/dvb/dvbtime.cpp | |
| parent | de62aa9ce9d8b1ff8ffe12b334e68802c120e35b (diff) | |
| download | enigma2-358845c0c1b60f79831ee81ccf55c7c5f5d771e3.tar.gz enigma2-358845c0c1b60f79831ee81ccf55c7c5f5d771e3.zip | |
fix channel state handling
Diffstat (limited to 'lib/dvb/dvbtime.cpp')
| -rw-r--r-- | lib/dvb/dvbtime.cpp | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/lib/dvb/dvbtime.cpp b/lib/dvb/dvbtime.cpp index 12e52a9f..3bd0a78d 100644 --- a/lib/dvb/dvbtime.cpp +++ b/lib/dvb/dvbtime.cpp @@ -370,6 +370,7 @@ void eDVBLocalTimeHandler::DVBChannelAdded(eDVBChannel *chan) m_knownChannels.insert( std::pair<iDVBChannel*, channel_data>(chan, channel_data()) ); tmp.first->second.tdt = NULL; tmp.first->second.channel = chan; + tmp.first->second.m_prevChannelState = -1; chan->connectStateChange(slot(*this, &eDVBLocalTimeHandler::DVBChannelStateChanged), tmp.first->second.m_stateChangedConn); } } @@ -382,18 +383,24 @@ void eDVBLocalTimeHandler::DVBChannelStateChanged(iDVBChannel *chan) { int state=0; chan->getState(state); - switch (state) + if ( state != it->second.m_prevChannelState ) { - case iDVBChannel::state_ok: - eDebug("[eDVBLocalTimerHandler] channel %p running", chan); - it->second.tdt = new TDT(it->second.channel); - it->second.tdt->start(); - break; - case iDVBChannel::state_release: - eDebug("[eDVBLocalTimerHandler] remove channel %p", chan); - delete it->second.tdt; - m_knownChannels.erase(it); - break; + switch (state) + { + case iDVBChannel::state_ok: + eDebug("[eDVBLocalTimerHandler] channel %p running", chan); + it->second.tdt = new TDT(it->second.channel); + it->second.tdt->start(); + break; + case iDVBChannel::state_release: + eDebug("[eDVBLocalTimerHandler] remove channel %p", chan); + delete it->second.tdt; + m_knownChannels.erase(it); + break; + default: // ignore all other events + return; + } + it->second.m_prevChannelState = state; } } } |
