X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/ddc3964ed95d01e72229dc9af968a327cd84e56c..0af11516cabc973907890f548925a66313c8d18c:/lib/service/iservice.h diff --git a/lib/service/iservice.h b/lib/service/iservice.h index a6369574..4a19378c 100644 --- a/lib/service/iservice.h +++ b/lib/service/iservice.h @@ -1,6 +1,7 @@ #ifndef __lib_dvb_iservice_h #define __lib_dvb_iservice_h +#include #include #include #include @@ -134,13 +135,39 @@ 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! */ +class iStaticServiceInformation: public iObject +{ +public: + virtual RESULT getName(const eServiceReference &ref, std::string &name)=0; + + // doesn't need to be implemented, should return -1 then. + virtual int getLength(const eServiceReference &ref)=0; + + // FOR SWIG + std::string getName(const eServiceReference &ref) { std::string temp; getName(ref, temp); return temp; } +}; + +TEMPLATE_TYPEDEF(ePtr, iStaticServiceInformationPtr); + +class eServiceEvent; + 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); }; -typedef ePtr iServiceInformationPtr; +TEMPLATE_TYPEDEF(ePtr, iServiceInformationPtr); class iPauseableService: public iObject { @@ -149,7 +176,17 @@ public: virtual RESULT unpause()=0; }; -typedef ePtr iPauseableServicePtr; +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 { @@ -158,33 +195,44 @@ 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 getIPausableService(ePtr &ptr)=0; - virtual RESULT getIServiceInformation(ePtr &ptr)=0; + virtual RESULT seek(ePtr &ptr)=0; + virtual RESULT pause(ePtr &ptr)=0; + virtual RESULT info(ePtr &ptr)=0; }; -typedef ePtr iPlayableServicePtr; +TEMPLATE_TYPEDEF(ePtr, iPlayableServicePtr); class iRecordableService: public iObject { public: + virtual RESULT prepare()=0; virtual RESULT start()=0; virtual RESULT stop()=0; }; -typedef ePtr iRecordableServicePtr; +TEMPLATE_TYPEDEF(ePtr, iRecordableServicePtr); + +// TEMPLATE_TYPEDEF(std::list, eServiceReferenceList); class iListableService: public iObject { public: + /* legacy interface: get a list */ virtual RESULT getContent(std::list &list)=0; + + /* new, shiny interface: streaming. */ + virtual RESULT getNext(eServiceReference &ptr)=0; }; -typedef ePtr iListableServicePtr; +TEMPLATE_TYPEDEF(ePtr, iListableServicePtr); class iServiceHandler: public iObject { @@ -192,8 +240,9 @@ 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); }; -typedef ePtr iServiceHandlerPtr; +TEMPLATE_TYPEDEF(ePtr, iServiceHandlerPtr); #endif