X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/f973710dc6bcfc13f8db4e5720dd2aeb1518b012..371447724a1e150c37a777e58a4725a3d2561c01:/lib/service/iservice.h diff --git a/lib/service/iservice.h b/lib/service/iservice.h index f84b9613..e74fa0a6 100644 --- a/lib/service/iservice.h +++ b/lib/service/iservice.h @@ -2,6 +2,7 @@ #define __lib_dvb_iservice_h #include +#include #include #include #include @@ -22,7 +23,6 @@ public: }; int type; - int flags; // flags will NOT be compared. enum { isDirectory=1, // SHOULD enter (implies mustDescent) @@ -40,21 +40,25 @@ public: hasSortKey=16, // has a sort key in data[3]. not having a sort key implies 0. sort1=32 // sort key is 1 instead of 0 }; + int flags; // flags will NOT be compared. inline int getSortKey() const { return (flags & hasSortKey) ? data[3] : ((flags & sort1) ? 1 : 0); } +#ifndef SWIG int data[8]; std::string path; +#endif std::string getPath() { return path; } + void setPath( const std::string &n ) { path=n; } - int getData(int num) const + int getData(unsigned int num) const { if ( num < sizeof(data)/sizeof(int) ) return data[num]; return 0; } - void setData(int num, int val) + void setData(unsigned int num, int val) { if ( num < sizeof(data)/sizeof(int) ) data[num] = val; @@ -62,9 +66,10 @@ public: // only for override service names in bouquets or to give servicerefs a name which not have a // real existing service ( for dvb eServiceDVB ) +#ifndef SWIG std::string name; +#endif std::string getName() { return name; } - void setName( const std::string &n ) { name=n; } eServiceReference() @@ -72,6 +77,7 @@ public: { memset(data, 0, sizeof(data)); } +#ifndef SWIG eServiceReference(int type, int flags) : type(type), flags(flags) { @@ -122,6 +128,7 @@ public: { memset(data, 0, sizeof(data)); } +#endif eServiceReference(const std::string &string); std::string toString() const; bool operator==(const eServiceReference &c) const @@ -160,6 +167,8 @@ public: SWIG_ALLOW_OUTPUT_SIMPLE(eServiceReference); +extern PyObject *New_eServiceReference(const eServiceReference &ref); // defined in enigma_python.i + typedef long long pts_t; /* the reason we have the servicereference as additional argument is @@ -185,12 +194,16 @@ typedef long long pts_t; class iStaticServiceInformation: public iObject { +#ifdef SWIG + iStaticServiceInformation(); + ~iStaticServiceInformation(); +#endif public: 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); - virtual SWIG_VOID(RESULT) getEvent(const eServiceReference &ref, ePtr &SWIG_OUTPUT, time_t start_time=0); + virtual SWIG_VOID(RESULT) getEvent(const eServiceReference &ref, ePtr &SWIG_OUTPUT, time_t start_time=-1); // returns true when not implemented virtual bool isPlayable(const eServiceReference &ref, const eServiceReference &ignore); @@ -204,6 +217,10 @@ TEMPLATE_TYPEDEF(ePtr, eServiceEventPtr); class iServiceInformation: public iObject { +#ifdef SWIG + iServiceInformation(); + ~iServiceInformation(); +#endif public: virtual SWIG_VOID(RESULT) getName(std::string &SWIG_OUTPUT)=0; virtual SWIG_VOID(RESULT) getEvent(ePtr &SWIG_OUTPUT, int nownext); @@ -235,6 +252,13 @@ public: sDescription, sTimeCreate, // unix time or string + + sTitle, + sArtist, + sAlbum, + sComment, + sTracknumber, + sGenre, }; enum { resNA = -1, resIsString = -2 }; @@ -246,19 +270,30 @@ TEMPLATE_TYPEDEF(ePtr, iServiceInformationPtr); class iFrontendStatusInformation: public iObject { +#ifdef SWIG + iFrontendStatusInformation(); + ~iFrontendStatusInformation(); +#endif public: enum { bitErrorRate, signalPower, - signalQuality + signalQuality, + LockState, + SyncState }; virtual int getFrontendInfo(int w)=0; + virtual PyObject *getFrontendData(bool original=false)=0; }; TEMPLATE_TYPEDEF(ePtr, iFrontendStatusInformationPtr); class iPauseableService: public iObject { +#ifdef SWIG + iPausableService(); + ~iPausableService(); +#endif public: virtual RESULT pause()=0; virtual RESULT unpause()=0; @@ -272,21 +307,36 @@ TEMPLATE_TYPEDEF(ePtr, iPauseableServicePtr); class iSeekableService: public iObject { +#ifdef SWIG + iSeekableService(); + ~iSeekableService(); +#endif public: virtual RESULT getLength(pts_t &SWIG_OUTPUT)=0; virtual RESULT seekTo(pts_t to)=0; enum { dirForward = +1, dirBackward = -1 }; virtual RESULT seekRelative(int direction, pts_t to)=0; virtual RESULT getPlayPosition(pts_t &SWIG_OUTPUT)=0; + /* if you want to do several seeks in a row, you can enable the trickmode. + audio will be switched off, sync will be disabled etc. */ + virtual RESULT setTrickmode(int trick=0)=0; + virtual RESULT isCurrentlySeekable()=0; }; TEMPLATE_TYPEDEF(ePtr, iSeekableServicePtr); struct iAudioTrackInfo { +#ifdef SWIG +private: + iAudioTrackInfo(); + ~iAudioTrackInfo(); +public: +#endif +#ifndef SWIG std::string m_description; std::string m_language; /* iso639 */ - +#endif std::string getDescription() { return m_description; } std::string getLanguage() { return m_language; } }; @@ -295,6 +345,10 @@ SWIG_ALLOW_OUTPUT_SIMPLE(iAudioTrackInfo); class iAudioTrackSelection: public iObject { +#ifdef SWIG + iAudioTrackSelection(); + ~iAudioTrackSelection(); +#endif public: virtual int getNumberOfTracks()=0; virtual RESULT selectTrack(unsigned int i)=0; @@ -305,6 +359,10 @@ TEMPLATE_TYPEDEF(ePtr, iAudioTrackSelectionPtr); class iSubserviceList: public iObject { +#ifdef SWIG + iSubserviceList(); + ~iSubserviceList(); +#endif public: virtual int getNumberOfSubservices()=0; virtual SWIG_VOID(RESULT) getSubservice(eServiceReference &SWIG_OUTPUT, unsigned int n)=0; @@ -314,19 +372,50 @@ TEMPLATE_TYPEDEF(ePtr, iSubserviceListPtr); class iTimeshiftService: public iObject { +#ifdef SWIG + iTimeshiftService(); + ~iTimeshiftService(); +#endif public: virtual RESULT startTimeshift()=0; virtual RESULT stopTimeshift()=0; + + virtual int isTimeshiftActive()=0; + /* this essentially seeks to the relative end of the timeshift buffer */ + virtual RESULT activateTimeshift()=0; }; TEMPLATE_TYPEDEF(ePtr, iTimeshiftServicePtr); + /* not related to eCueSheet */ +class iCueSheet: public iObject +{ +#ifdef SWIG + iCueSheet(); + ~iCueSheet(); +#endif +public: + /* returns a list of (pts, what)-tuples */ + virtual PyObject *getCutList() = 0; + virtual void setCutList(PyObject *list) = 0; + virtual void setCutListEnable(int enable) = 0; + enum { cutIn = 0, cutOut = 1, cutMark = 2 }; +}; + +TEMPLATE_TYPEDEF(ePtr, iCueSheetPtr); + class iPlayableService: public iObject { +#ifdef SWIG + iPlayableService(); + ~iPlaybleService(); +#endif friend class iServiceHandler; public: enum { + /* these first two events are magical, and should only + be generated if you know what you're doing. */ evStart, evEnd, @@ -334,6 +423,15 @@ public: // when iServiceInformation is implemented: evUpdatedEventInfo, evUpdatedInfo, + + /* when seek() is implemented: */ + evSeekableStatusChanged, /* for example when timeshifting */ + + evEOF, + evSOF, /* bounced against start of file (when seeking backwards) */ + + /* only when cueSheet is implemented */ + evCuesheetChanged, }; virtual RESULT connectEvent(const Slot2 &event, ePtr &connection)=0; virtual RESULT start()=0; @@ -345,14 +443,19 @@ public: virtual SWIG_VOID(RESULT) subServices(ePtr &SWIG_OUTPUT)=0; virtual SWIG_VOID(RESULT) frontendStatusInfo(ePtr &SWIG_OUTPUT)=0; virtual SWIG_VOID(RESULT) timeshift(ePtr &SWIG_OUTPUT)=0; + virtual SWIG_VOID(RESULT) cueSheet(ePtr &SWIG_OUTPUT)=0; }; TEMPLATE_TYPEDEF(ePtr, iPlayableServicePtr); class iRecordableService: public iObject { +#ifdef SWIG + iRecordableService(); + ~iRecordableService(); +#endif public: - virtual RESULT prepare(const char *filename)=0; + virtual RESULT prepare(const char *filename, time_t begTime=-1, time_t endTime=-1, int eit_event_id=-1)=0; virtual RESULT start()=0; virtual RESULT stop()=0; }; @@ -363,6 +466,10 @@ TEMPLATE_TYPEDEF(ePtr, iRecordableServicePtr); class iMutableServiceList: public iObject { +#ifdef SWIG + iMutableServiceList(); + ~iMutableServiceList(); +#endif public: /* flush changes */ virtual RESULT flushChanges()=0; @@ -373,16 +480,23 @@ public: /* moves a service in a list, only if list suppports a specific sort method. */ /* pos is the new, absolute position from 0..size-1 */ virtual RESULT moveService(eServiceReference &ref, int pos)=0; + /* set name of list, for bouquets this is the visible bouquet name */ + virtual RESULT setListName(const std::string &name)=0; }; TEMPLATE_TYPEDEF(ePtr, iMutableServiceListPtr); class iListableService: public iObject { +#ifdef SWIG + iListableService(); + ~iListableService(); +#endif public: /* legacy interface: get a list */ - virtual RESULT getContent(std::list &list)=0; - + virtual RESULT getContent(std::list &list, bool sorted=false)=0; + virtual RESULT getContent(PyObject *list, bool sorted=false)=0; + /* new, shiny interface: streaming. */ virtual SWIG_VOID(RESULT) getNext(eServiceReference &SWIG_OUTPUT)=0; @@ -398,6 +512,7 @@ public: TEMPLATE_TYPEDEF(ePtr, iListableServicePtr); +#ifndef SWIG /* a helper class which can be used as argument to stl's sort(). */ class iListableServiceCompare { @@ -409,9 +524,14 @@ public: return m_list->compareLessEqual(a, b); } }; +#endif class iServiceOfflineOperations: public iObject { +#ifdef SWIG + iServiceOfflineOperations(); + ~iServiceOfflineOperations(); +#endif public: /* to delete a service, forever. */ virtual RESULT deleteFromDisk(int simulate=1)=0; @@ -426,6 +546,10 @@ TEMPLATE_TYPEDEF(ePtr, iServiceOfflineOperationsPtr); class iServiceHandler: public iObject { +#ifdef SWIG + iServiceHandler(); + ~iServiceHandler(); +#endif public: virtual SWIG_VOID(RESULT) play(const eServiceReference &, ePtr &SWIG_OUTPUT)=0; virtual SWIG_VOID(RESULT) record(const eServiceReference &, ePtr &SWIG_OUTPUT)=0;