X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/1cdf6cb021fcaa6548b90ba7b6765cf1e8b8b37b..5561f5ec4f0a55d9256c3eab0ce121ae82ee5c90:/lib/service/servicedvb.cpp diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 48d00d65..a32ce326 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -9,6 +9,8 @@ #include #include +#include + DEFINE_REF(eServiceFactoryDVB) eServiceFactoryDVB::eServiceFactoryDVB() @@ -78,15 +80,19 @@ RESULT eDVBServiceList::getContent(std::list &list) RESULT eServiceFactoryDVB::play(const eServiceReference &ref, ePtr &ptr) { + ePtr service; + int r = lookupService(service, ref); + if (r) + service = 0; // check resources... - ptr = new eDVBServicePlay(ref); + ptr = new eDVBServicePlay(ref, service); return 0; } -RESULT eServiceFactoryDVB::record(const eServiceReference &, ePtr &ptr) +RESULT eServiceFactoryDVB::record(const eServiceReference &ref, ePtr &ptr) { - ptr = 0; - return -1; + ptr = new eDVBServiceRecord((eServiceReferenceDVB&)ref); + return 0; } RESULT eServiceFactoryDVB::list(const eServiceReference &ref, ePtr &ptr) @@ -97,7 +103,17 @@ RESULT eServiceFactoryDVB::list(const eServiceReference &ref, ePtr &ptr) { - ptr = 0; + ePtr service; + int r = lookupService(service, ref); + if (r) + return r; + /* eDVBService has the iStaticServiceInformation interface, so we pass it here. */ + ptr = service; + return 0; +} + +RESULT eServiceFactoryDVB::lookupService(ePtr &service, const eServiceReference &ref) +{ // 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 @@ -117,22 +133,18 @@ RESULT eServiceFactoryDVB::info(const eServiceReference &ref, 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): - m_reference(ref) +eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref, eDVBService *service): + m_reference(ref), m_dvb_service(service) { CONNECT(m_service_handler.serviceEvent, eDVBServicePlay::serviceEvent); CONNECT(m_event_handler.m_eit_changed, eDVBServicePlay::gotNewEvent); @@ -246,6 +258,7 @@ void eDVBServicePlay::serviceEvent(int event) RESULT eDVBServicePlay::start() { eDebug("starting DVB service"); + m_event(this, evStart); return m_service_handler.tune((eServiceReferenceDVB&)m_reference); } @@ -274,9 +287,12 @@ RESULT eDVBServicePlay::info(ePtr &ptr) return 0; } -RESULT eDVBServicePlay::getName(const eServiceReference &ref, std::string &name) +RESULT eDVBServicePlay::getName(std::string &name) { - name = "DVB service"; + if (m_dvb_service) + m_dvb_service->getName(m_reference, name); + else + name = "DVB service"; return 0; }