X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/8dfcf7d1701e9f178ec6d8d756a8bd779854a3d9..4aa7b11f525aaa22b3ad6b0d247ea67f39b498de:/lib/dvb/dvbtime.cpp diff --git a/lib/dvb/dvbtime.cpp b/lib/dvb/dvbtime.cpp index 45430480..3bd0a78d 100644 --- a/lib/dvb/dvbtime.cpp +++ b/lib/dvb/dvbtime.cpp @@ -368,8 +368,9 @@ void eDVBLocalTimeHandler::DVBChannelAdded(eDVBChannel *chan) // eDebug("[eDVBLocalTimerHandler] add channel %p", chan); std::pair::iterator, bool> tmp = m_knownChannels.insert( std::pair(chan, channel_data()) ); - tmp.first->second.tdt = new TDT(chan); + 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,17 +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->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; } } }