X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=lib%2Fcomponents%2Fscan.cpp;h=a863d92323695db6ddda03041bc720002043309f;hb=09047544dbeddd0a5df972934c8863bef9e11a99;hp=6676af51d9ac4010f1238629519f03c3607938fd;hpb=b0e09a2cd9a05a002222d79fb71848f4c7820ff3;p=vuplus_dvbapp diff --git a/lib/components/scan.cpp b/lib/components/scan.cpp index 6676af5..a863d92 100644 --- a/lib/components/scan.cpp +++ b/lib/components/scan.cpp @@ -8,7 +8,7 @@ DEFINE_REF(eComponentScan); void eComponentScan::scanEvent(int evt) { - eDebug("scan event %d!", evt); +// eDebug("scan event %d!", evt); if (evt == eDVBScan::evtFinish) { @@ -28,10 +28,17 @@ void eComponentScan::scanEvent(int evt) } else { m_scan->insertInto(db); + db->flush(); eDebug("scan done!"); } } + if (evt == eDVBScan::evtNewService) + { + newService(); + return; + } + if (evt == eDVBScan::evtFail) { eDebug("scan failed."); @@ -77,7 +84,7 @@ void eComponentScan::addInitial(const eDVBFrontendParametersTerrestrial &p) } -int eComponentScan::start(int flags) +int eComponentScan::start(int feid, int flags) { if (m_initial.empty()) return -2; @@ -92,21 +99,66 @@ int eComponentScan::start(int flags) eUsePtr channel; - if (mgr->allocateRawChannel(channel)) + if (mgr->allocateRawChannel(channel, feid)) { - eDebug("scan: allocating raw channel failed!"); + eDebug("scan: allocating raw channel (on frontend %d) failed!", feid); return -1; } std::list > list; - m_scan = new eDVBScan(channel); m_scan->connectEvent(slot(*this, &eComponentScan::scanEvent), m_scan_event_connection); + + if (!(flags & scanRemoveServices)) + { + ePtr db; + ePtr res; + int err; + if ((err = eDVBResourceManager::getInstance(res)) != 0) + eDebug("no resource manager"); + else if ((err = res->getChannelList(db)) != 0) + eDebug("no channel list"); + else + { + if (m_initial.size() > 1) + { + iDVBFrontendParameters *tp = m_initial.first(); + int type; + if (tp && !tp->getSystem(type)) + { + switch(type) + { + case iDVBFrontend::feSatellite: + { + eDVBFrontendParametersSatellite parm; + tp->getDVBS(parm); + db->removeFlags(eDVBService::dxNewFound, -1, -1, -1, parm.orbital_position); + break; + } + case iDVBFrontend::feCable: + db->removeFlags(eDVBService::dxNewFound, 0xFFFF0000, -1, -1, -1); + break; + case iDVBFrontend::feTerrestrial: + db->removeFlags(eDVBService::dxNewFound, 0xEEEE0000, -1, -1, -1); + break; + } + } + } + } + } m_scan->start(m_initial, flags); - + return 0; } +RESULT eComponentScan::getFrontend(ePtr &fe) +{ + if (m_scan) + return m_scan->getFrontend(fe); + fe = 0; + return -1; +} + int eComponentScan::getProgress() { if (!m_scan) @@ -136,3 +188,10 @@ int eComponentScan::getError() { return m_failed; } + +void eComponentScan::getLastServiceName(std::string &string) +{ + if (!m_scan) + return; + m_scan->getLastServiceName(string); +}