X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d9ee52e4f0fbe9a1ae00d0e66f9e6f0a07fa319f..2acb465616ee1e910b345a0c5e9ec7429daf9f90:/lib/service/iservice.h diff --git a/lib/service/iservice.h b/lib/service/iservice.h index 5a8a0627..62be26c0 100644 --- a/lib/service/iservice.h +++ b/lib/service/iservice.h @@ -1,19 +1,12 @@ #ifndef __lib_dvb_iservice_h #define __lib_dvb_iservice_h +#include #include #include #include #include -#ifdef SWIG -#define TEMPLATE_TYPEDEF(x, y) \ -%template(y) x; \ -typedef x y -#else -#define TEMPLATE_TYPEDEF(x, y) typedef x y -#endif - class eServiceReference { public: @@ -142,23 +135,47 @@ public: } }; +typedef unsigned long long pts_t; + /* the reason we have the servicereference as additional argument is that we don't have to create one object for every entry in a possibly large list, provided that no state information is nessesary to deliver the required information. Anyway - ref *must* be the same as the argument to the info() or getIServiceInformation call! */ + + /* About the usage of SWIG_VOID: + SWIG_VOID(real_returntype_t) hides a return value from swig. This is used for + the "superflouus" RESULT return values. + + Python code has to check the returned pointer against 0. This works, + as all functions returning instances in smartpointers AND having a + RESULT have to BOTH return non-zero AND set the pointer to zero. + + Python code thus can't check for the reason, but the reason isn't + user-servicable anyway. If you want to return a real reason which + goes beyong "it just doesn't work", use extra variables for this, + not the RESULT. + + Hide the result only if there is another way to check for failure! */ + class iStaticServiceInformation: public iObject { public: - virtual RESULT getName(const eServiceReference &ref, std::string &name)=0; + virtual SWIG_VOID(RESULT) getName(const eServiceReference &ref, std::string &SWIG_OUTPUT)=0; + + // doesn't need to be implemented, should return -1 then. + virtual int getLength(const eServiceReference &ref)=0; }; TEMPLATE_TYPEDEF(ePtr, iStaticServiceInformationPtr); -class iServiceInformation: public iStaticServiceInformation +class eServiceEvent; + +class iServiceInformation: public iObject { public: - + virtual SWIG_VOID(RESULT) getName(std::string &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) getEvent(ePtr &SWIG_OUTPUT, int nownext); }; TEMPLATE_TYPEDEF(ePtr, iServiceInformationPtr); @@ -172,6 +189,16 @@ public: TEMPLATE_TYPEDEF(ePtr, iPauseableServicePtr); +class iSeekableService: public iObject +{ +public: + virtual RESULT getLength(pts_t &SWIG_OUTPUT)=0; + virtual RESULT seekTo(pts_t to)=0; + virtual RESULT getPlayPosition(pts_t &SWIG_OUTPUT)=0; +}; + +TEMPLATE_TYPEDEF(ePtr, iSeekableServicePtr); + class iPlayableService: public iObject { friend class iServiceHandler; @@ -179,13 +206,17 @@ public: enum { evStart, - evEnd + evEnd, + + // when iServiceInformation is implemented: + evUpdatedEventInfo }; virtual RESULT connectEvent(const Slot2 &event, ePtr &connection)=0; virtual RESULT start()=0; virtual RESULT stop()=0; - virtual RESULT pause(ePtr &ptr)=0; - virtual RESULT info(ePtr &ptr)=0; + virtual SWIG_VOID(RESULT) seek(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) pause(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) info(ePtr &SWIG_OUTPUT)=0; }; TEMPLATE_TYPEDEF(ePtr, iPlayableServicePtr); @@ -193,6 +224,7 @@ TEMPLATE_TYPEDEF(ePtr, iPlayableServicePtr); class iRecordableService: public iObject { public: + virtual RESULT prepare()=0; virtual RESULT start()=0; virtual RESULT stop()=0; }; @@ -204,7 +236,11 @@ TEMPLATE_TYPEDEF(ePtr, iRecordableServicePtr); class iListableService: public iObject { public: + /* legacy interface: get a list */ virtual RESULT getContent(std::list &list)=0; + + /* new, shiny interface: streaming. */ + virtual SWIG_VOID(RESULT) getNext(eServiceReference &SWIG_OUTPUT)=0; }; TEMPLATE_TYPEDEF(ePtr, iListableServicePtr); @@ -212,10 +248,10 @@ TEMPLATE_TYPEDEF(ePtr, iListableServicePtr); class iServiceHandler: public iObject { public: - virtual RESULT play(const eServiceReference &, ePtr &ptr)=0; - virtual RESULT record(const eServiceReference &, ePtr &ptr)=0; - virtual RESULT list(const eServiceReference &, ePtr &ptr)=0; - virtual RESULT info(const eServiceReference &, ePtr &ptr); + virtual SWIG_VOID(RESULT) play(const eServiceReference &, ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) record(const eServiceReference &, ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) list(const eServiceReference &, ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) info(const eServiceReference &, ePtr &SWIG_OUTPUT)=0; }; TEMPLATE_TYPEDEF(ePtr, iServiceHandlerPtr);