From: Felix Domke Date: Wed, 18 May 2005 01:53:43 +0000 (+0000) Subject: - split iStaticServiceInformation against iServiceInformation X-Git-Tag: 2.6.0~5850 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/181d3463e3545890e0a0c60081e84af67d302614 - split iStaticServiceInformation against iServiceInformation - add proper getName for DVB services - add missing event evStart for DVB service - display service name in Components.ServiceName --- diff --git a/lib/python/Components/ServiceName.py b/lib/python/Components/ServiceName.py index bb116160..c96b79f4 100644 --- a/lib/python/Components/ServiceName.py +++ b/lib/python/Components/ServiceName.py @@ -1,5 +1,6 @@ from PerServiceDisplay import * -from enigma import pNavigation + +from enigma import pNavigation, iServiceInformationPtr class ServiceName(PerServiceDisplay): def __init__(self, navcore): @@ -11,11 +12,11 @@ class ServiceName(PerServiceDisplay): def newService(self): info = iServiceInformationPtr() - service = self.navcore.getCurrentService(service) + service = self.navcore.getCurrentService() if service != None: if not service.info(info): - self.setText("no name known, but it should be here :)") + self.setText(info.getName()) def stopEvent(self): self.setText(""); diff --git a/lib/service/iservice.h b/lib/service/iservice.h index f7f6d5cd..4592a971 100644 --- a/lib/service/iservice.h +++ b/lib/service/iservice.h @@ -152,9 +152,12 @@ TEMPLATE_TYPEDEF(ePtr, iStaticServiceInformationPtr); class eServiceEvent; -class iServiceInformation: public iStaticServiceInformation +class iServiceInformation: public iObject { public: + virtual RESULT getName(std::string &name)=0; + // FOR SWIG + std::string getName() { std::string temp; getName(temp); return temp; } virtual RESULT getEvent(ePtr &evt, int nownext); }; diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 2fb051c1..a32ce326 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -80,8 +80,12 @@ 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; } @@ -99,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 @@ -119,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); @@ -248,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); } @@ -276,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; } diff --git a/lib/service/servicedvb.h b/lib/service/servicedvb.h index 5dd2f3b2..e9489cd5 100644 --- a/lib/service/servicedvb.h +++ b/lib/service/servicedvb.h @@ -20,6 +20,8 @@ public: RESULT record(const eServiceReference &, ePtr &ptr); RESULT list(const eServiceReference &, ePtr &ptr); RESULT info(const eServiceReference &, ePtr &ptr); +private: + RESULT lookupService(ePtr &ptr, const eServiceReference &ref); }; class eDVBServiceList: public iListableService @@ -41,12 +43,14 @@ private: friend class eServiceFactoryDVB; eServiceReference m_reference; + ePtr m_dvb_service; + ePtr m_decoder; eDVBServicePMTHandler m_service_handler; eDVBServiceEITHandler m_event_handler; - eDVBServicePlay(const eServiceReference &ref); + eDVBServicePlay(const eServiceReference &ref, eDVBService *service); void gotNewEvent(); @@ -63,7 +67,7 @@ public: RESULT info(ePtr &ptr); // iServiceInformation - RESULT getName(const eServiceReference &ref, std::string &name); + RESULT getName(std::string &name); RESULT getEvent(ePtr &evt, int nownext); }; diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp index a5f1b773..21c6cba0 100644 --- a/lib/service/servicemp3.cpp +++ b/lib/service/servicemp3.cpp @@ -142,7 +142,7 @@ RESULT eServiceMP3::unpause() { printf("mp3 unpauses!\n"); return 0; } RESULT eServiceMP3::info(ePtr&i) { i = this; return 0; } -RESULT eServiceMP3::getName(const eServiceReference &ref, std::string &name) +RESULT eServiceMP3::getName(std::string &name) { name = "MP3 File: " + filename; return 0; diff --git a/lib/service/servicemp3.h b/lib/service/servicemp3.h index 4bec7365..12ad7706 100644 --- a/lib/service/servicemp3.h +++ b/lib/service/servicemp3.h @@ -22,7 +22,7 @@ private: ePtr m_service_info; }; -class eStaticServiceMP3Info: public iServiceInformation +class eStaticServiceMP3Info: public iStaticServiceInformation { DECLARE_REF(eStaticServiceMP3Info); friend class eServiceFactoryMP3; @@ -62,7 +62,7 @@ public: RESULT info(ePtr&); // iServiceInformation - RESULT getName(const eServiceReference &ref, std::string &name); + RESULT getName(std::string &name); }; #endif