- split iStaticServiceInformation against iServiceInformation
authorFelix Domke <tmbinc@elitedvb.net>
Wed, 18 May 2005 01:53:43 +0000 (01:53 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Wed, 18 May 2005 01:53:43 +0000 (01:53 +0000)
 - add proper getName for DVB services
 - add missing event evStart for DVB service
 - display service name in Components.ServiceName

lib/python/Components/ServiceName.py
lib/service/iservice.h
lib/service/servicedvb.cpp
lib/service/servicedvb.h
lib/service/servicemp3.cpp
lib/service/servicemp3.h

index bb11616..c96b79f 100644 (file)
@@ -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("");
index f7f6d5c..4592a97 100644 (file)
@@ -152,9 +152,12 @@ TEMPLATE_TYPEDEF(ePtr<iStaticServiceInformation>, 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<eServiceEvent> &evt, int nownext);
 };
 
index 2fb051c..a32ce32 100644 (file)
@@ -80,8 +80,12 @@ RESULT eDVBServiceList::getContent(std::list<eServiceReference> &list)
 
 RESULT eServiceFactoryDVB::play(const eServiceReference &ref, ePtr<iPlayableService> &ptr)
 {
+       ePtr<eDVBService> 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<iListableServ
 
 RESULT eServiceFactoryDVB::info(const eServiceReference &ref, ePtr<iStaticServiceInformation> &ptr)
 {
-       ptr = 0;
+       ePtr<eDVBService> 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<eDVBService> &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<iStaticServic
                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): 
-       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<iServiceInformation> &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;
 }
 
index 5dd2f3b..e9489cd 100644 (file)
@@ -20,6 +20,8 @@ public:
        RESULT record(const eServiceReference &, ePtr<iRecordableService> &ptr);
        RESULT list(const eServiceReference &, ePtr<iListableService> &ptr);
        RESULT info(const eServiceReference &, ePtr<iStaticServiceInformation> &ptr);
+private:
+       RESULT lookupService(ePtr<eDVBService> &ptr, const eServiceReference &ref);
 };
 
 class eDVBServiceList: public iListableService
@@ -41,12 +43,14 @@ private:
        friend class eServiceFactoryDVB;
        eServiceReference m_reference;
        
+       ePtr<eDVBService> m_dvb_service;
+       
        ePtr<iTSMPEGDecoder> 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<iServiceInformation> &ptr);
        
                // iServiceInformation
-       RESULT getName(const eServiceReference &ref, std::string &name);
+       RESULT getName(std::string &name);
        RESULT getEvent(ePtr<eServiceEvent> &evt, int nownext);
 };
 
index a5f1b77..21c6cba 100644 (file)
@@ -142,7 +142,7 @@ RESULT eServiceMP3::unpause() { printf("mp3 unpauses!\n"); return 0; }
 
 RESULT eServiceMP3::info(ePtr<iServiceInformation>&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;
index 4bec736..12ad770 100644 (file)
@@ -22,7 +22,7 @@ private:
        ePtr<eStaticServiceMP3Info> 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>&);
        
                // iServiceInformation
-       RESULT getName(const eServiceReference &ref, std::string &name);
+       RESULT getName(std::string &name);
 };
 
 #endif