#include #include #include #include #include DEFINE_REF(eComponentScan); void eComponentScan::scanEvent(int evt) { eDebug("scan event %d!", evt); if (evt == eDVBScan::evtFinish) { m_done = 1; ePtr db; ePtr res; int err; if ((err = eDVBResourceManager::getInstance(res)) != 0) { eDebug("no resource manager"); m_failed = 2; } else if ((err = res->getChannelList(db)) != 0) { m_failed = 3; eDebug("no channel list"); } else { m_scan->insertInto(db); db->flush(); eDebug("scan done!"); } } if (evt == eDVBScan::evtFail) { eDebug("scan failed."); m_failed = 1; m_done = 1; } statusChanged(); } eComponentScan::eComponentScan(): m_done(-1), m_failed(0) { } eComponentScan::~eComponentScan() { } void eComponentScan::clear() { m_initial.clear(); } void eComponentScan::addInitial(const eDVBFrontendParametersSatellite &p) { ePtr parm = new eDVBFrontendParameters(); parm->setDVBS(p); m_initial.push_back(parm); } void eComponentScan::addInitial(const eDVBFrontendParametersCable &p) { ePtr parm = new eDVBFrontendParameters(); parm->setDVBC(p); m_initial.push_back(parm); } void eComponentScan::addInitial(const eDVBFrontendParametersTerrestrial &p) { ePtr parm = new eDVBFrontendParameters(); parm->setDVBT(p); m_initial.push_back(parm); } int eComponentScan::start(int feid, int flags) { if (m_initial.empty()) return -2; if (m_done != -1) return -1; m_done = 0; ePtr mgr; eDVBResourceManager::getInstance(mgr); eUsePtr channel; if (mgr->allocateRawChannel(channel, feid)) { 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); m_scan->start(m_initial, flags); return 0; } int eComponentScan::getProgress() { if (!m_scan) return 0; int done, total, services; m_scan->getStats(done, total, services); if (!total) return 0; return done * 100 / total; } int eComponentScan::getNumServices() { if (!m_scan) return 0; int done, total, services; m_scan->getStats(done, total, services); return services; } int eComponentScan::isDone() { return m_done; } int eComponentScan::getError() { return m_failed; }