diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2005-02-07 09:14:02 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2005-02-07 09:14:02 +0000 |
| commit | d9ee52e4f0fbe9a1ae00d0e66f9e6f0a07fa319f (patch) | |
| tree | f1084b85919b5590615e281331cfe535c3a160c8 /lib/service/servicedvb.cpp | |
| parent | 4bc08995411e21f3564f09e136809be68ddf96a8 (diff) | |
| download | enigma2-d9ee52e4f0fbe9a1ae00d0e66f9e6f0a07fa319f.tar.gz enigma2-d9ee52e4f0fbe9a1ae00d0e66f9e6f0a07fa319f.zip | |
- 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
Diffstat (limited to 'lib/service/servicedvb.cpp')
| -rw-r--r-- | lib/service/servicedvb.cpp | 94 |
1 files changed, 90 insertions, 4 deletions
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 <lib/base/init_num.h> #include <lib/base/init.h> +#include <lib/dvb/dvb.h> +#include <lib/dvb/db.h> + 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<eServiceReference> &list) +{ + ePtr<iDVBChannelList> db; + ePtr<eDVBResourceManager> 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<iDVBChannelListQuery> query; + + ePtr<eDVBChannelQuery> 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<iPlayableService> &ptr) { // check resources... @@ -39,10 +89,46 @@ RESULT eServiceFactoryDVB::record(const eServiceReference &, ePtr<iRecordableSer return -1; } -RESULT eServiceFactoryDVB::list(const eServiceReference &, ePtr<iListableService> &ptr) +RESULT eServiceFactoryDVB::list(const eServiceReference &ref, ePtr<iListableService> &ptr) +{ + ptr = new eDVBServiceList(ref); + return 0; +} + +RESULT eServiceFactoryDVB::info(const eServiceReference &ref, ePtr<iStaticServiceInformation> &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<iDVBChannelList> db; + ePtr<eDVBResourceManager> 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<eDVBService> 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<void,iPlayableService*,int> &ev return -1; } -RESULT eDVBServicePlay::getIPausableService(ePtr<iPauseableService> &ptr) +RESULT eDVBServicePlay::pause(ePtr<iPauseableService> &ptr) { // not yet possible, maybe later... ptr = 0; return -1; } -RESULT eDVBServicePlay::getIServiceInformation(ePtr<iServiceInformation> &ptr) +RESULT eDVBServicePlay::info(ePtr<iServiceInformation> &ptr) { ptr = this; return 0; |
