X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/9f51417be9d86ef8f21116d2ecd15e536f67783c..f990151461bd800976ffc1382b674a537b8f1a3a:/lib/dvb/scan.cpp diff --git a/lib/dvb/scan.cpp b/lib/dvb/scan.cpp index 70c3e6b3..3c952b8f 100644 --- a/lib/dvb/scan.cpp +++ b/lib/dvb/scan.cpp @@ -305,6 +305,12 @@ void eDVBScan::addChannelToScan(const eDVBChannelID &chid, iDVBFrontendParameter ++i; } + if (found_count > 0) + { + eDebug("already in todo list"); + return; + } + /* ... in the list of successfully scanned channels */ for (std::list >::const_iterator i(m_ch_scanned.begin()); i != m_ch_scanned.end(); ++i) if (sameChannel(*i, feparm)) @@ -370,12 +376,13 @@ void eDVBScan::channelDone() if (m_ready & validNIT) { int system; + std::list > m_ch_toScan_backup; m_ch_current->getSystem(system); SCAN_eDebug("dumping NIT"); if (m_flags & clearToScanOnFirstNIT) { + m_ch_toScan_backup = m_ch_toScan; m_ch_toScan.clear(); - m_flags &= ~clearToScanOnFirstNIT; } std::vector::const_iterator i; for (i = m_NIT->getSections().begin(); i != m_NIT->getSections().end(); ++i) @@ -468,9 +475,25 @@ void eDVBScan::channelDone() break; } } - } + } + + /* a pitfall is to have the clearToScanOnFirstNIT-flag set, and having channels which have + no or invalid NIT. this code will not erase the toScan list unless at least one valid entry + has been found. + + This is not a perfect solution, as the channel could contain a partial NIT. Life's bad. + */ + if (m_flags & clearToScanOnFirstNIT) + { + if (m_ch_toScan.empty()) + { + eWarning("clearToScanOnFirstNIT was set, but NIT is invalid. Refusing to stop scan."); + m_ch_toScan = m_ch_toScan_backup; + } else + m_flags &= ~clearToScanOnFirstNIT; + } m_ready &= ~validNIT; }