aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/dvbtime.cpp
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2005-12-17 15:25:32 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2005-12-17 15:25:32 +0000
commit358845c0c1b60f79831ee81ccf55c7c5f5d771e3 (patch)
tree7045d2bc860d3da0835dbc09961733f4117f40c5 /lib/dvb/dvbtime.cpp
parentde62aa9ce9d8b1ff8ffe12b334e68802c120e35b (diff)
downloadenigma2-358845c0c1b60f79831ee81ccf55c7c5f5d771e3.tar.gz
enigma2-358845c0c1b60f79831ee81ccf55c7c5f5d771e3.zip
fix channel state handling
Diffstat (limited to 'lib/dvb/dvbtime.cpp')
-rw-r--r--lib/dvb/dvbtime.cpp29
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;
}
}
}