From d9ee52e4f0fbe9a1ae00d0e66f9e6f0a07fa319f Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 7 Feb 2005 09:14:02 +0000 Subject: - added iStaticServiceInformation - added service list interface for dvb - started work on queries (currently only "instr" on servicename) - started work on infobar - added listbox with service - fixed dvbdb - remove some debug output --- lib/service/servicedvb.cpp | 94 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 90 insertions(+), 4 deletions(-) (limited to 'lib/service/servicedvb.cpp') diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 0c6d72bd..d1ebeb30 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -6,6 +6,9 @@ #include #include +#include +#include + DEFINE_REF(eServiceFactoryDVB) eServiceFactoryDVB::eServiceFactoryDVB() @@ -26,6 +29,53 @@ eServiceFactoryDVB::~eServiceFactoryDVB() sc->removeServiceFactory(eServiceFactoryDVB::id); } +DEFINE_REF(eDVBServiceList); + +eDVBServiceList::eDVBServiceList(const eServiceReference &parent): m_parent(parent) +{ +} + +eDVBServiceList::~eDVBServiceList() +{ +} + +RESULT eDVBServiceList::getContent(std::list &list) +{ + ePtr db; + ePtr res; + + int err; + if ((err = eDVBResourceManager::getInstance(res)) != 0) + { + eDebug("no resource manager"); + return err; + } + if ((err = res->getChannelList(db)) != 0) + { + eDebug("no channel list"); + return err; + } + + ePtr query; + + ePtr q; + + if (m_parent.path.size()) + eDVBChannelQuery::compile(q, m_parent.path); + + if ((err = db->startQuery(query, q)) != 0) + { + eDebug("startQuery failed"); + return err; + } + + eServiceReferenceDVB ref; + + while (!query->getNextResult(ref)) + list.push_back(ref); + return 0; +} + RESULT eServiceFactoryDVB::play(const eServiceReference &ref, ePtr &ptr) { // check resources... @@ -39,10 +89,46 @@ RESULT eServiceFactoryDVB::record(const eServiceReference &, ePtr &ptr) +RESULT eServiceFactoryDVB::list(const eServiceReference &ref, ePtr &ptr) +{ + ptr = new eDVBServiceList(ref); + return 0; +} + +RESULT eServiceFactoryDVB::info(const eServiceReference &ref, ePtr &ptr) { ptr = 0; - return -1; + // TODO: handle the listing itself + // if (ref.... == -1) .. return "... bouquets ..."; + // could be also done in another serviceFactory (with seperate ID) to seperate actual services and lists + // TODO: cache + ePtr db; + ePtr res; + + int err; + if ((err = eDVBResourceManager::getInstance(res)) != 0) + { + eDebug("no resource manager"); + return err; + } + if ((err = res->getChannelList(db)) != 0) + { + eDebug("no channel list"); + return err; + } + + ePtr service; + + /* we are sure to have a ..DVB reference as the info() call was forwarded here according to it's ID. */ + if ((err = db->getService((eServiceReferenceDVB&)ref, service)) != 0) + { + eDebug("getService failed!"); + return err; + } + + /* eDVBService has the iStaticServiceInformation interface, so we pass it here. */ + ptr = service; + return 0; } eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref): @@ -145,14 +231,14 @@ RESULT eDVBServicePlay::connectEvent(const Slot2 &ev return -1; } -RESULT eDVBServicePlay::getIPausableService(ePtr &ptr) +RESULT eDVBServicePlay::pause(ePtr &ptr) { // not yet possible, maybe later... ptr = 0; return -1; } -RESULT eDVBServicePlay::getIServiceInformation(ePtr &ptr) +RESULT eDVBServicePlay::info(ePtr &ptr) { ptr = this; return 0; -- cgit v1.2.3