X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/2a6cdce89409dc0275e23523c3807972a82f2cf7..2e2cf81de863a180f7d27dca89e5122e1eb0acaa:/lib/service/iservice.h diff --git a/lib/service/iservice.h b/lib/service/iservice.h index 54d7b11f..5f861899 100644 --- a/lib/service/iservice.h +++ b/lib/service/iservice.h @@ -44,6 +44,10 @@ public: int data[8]; std::string path; +// only for override service names in bouquets or to give servicerefs a name which not have a +// real existing service ( for dvb eServiceDVB ) + std::string name; + eServiceReference() : type(idInvalid), flags(0) { @@ -203,6 +207,8 @@ class iSeekableService: public iObject 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; }; @@ -217,6 +223,7 @@ public: evStart, evEnd, + evTuneFailed, // when iServiceInformation is implemented: evUpdatedEventInfo }; @@ -233,7 +240,7 @@ TEMPLATE_TYPEDEF(ePtr, iPlayableServicePtr); class iRecordableService: public iObject { public: - virtual RESULT prepare()=0; + virtual RESULT prepare(const char *filename)=0; virtual RESULT start()=0; virtual RESULT stop()=0; }; @@ -242,6 +249,20 @@ TEMPLATE_TYPEDEF(ePtr, iRecordableServicePtr); // TEMPLATE_TYPEDEF(std::list, eServiceReferenceList); +class iMutableServiceList: public iObject +{ +public: + /* adds a service to a list */ + virtual RESULT addService(eServiceReference &ref)=0; + /* removes a service from a list */ + virtual RESULT removeService(eServiceReference &ref)=0; + /* 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; +}; + +TEMPLATE_TYPEDEF(ePtr, iMutableServiceListPtr); + class iListableService: public iObject { public: @@ -250,10 +271,31 @@ public: /* new, shiny interface: streaming. */ virtual SWIG_VOID(RESULT) getNext(eServiceReference &SWIG_OUTPUT)=0; + + /* use this for sorting. output is not sorted because of either + - performance reasons: the whole list must be buffered or + - the interface would be restricted to a list. streaming + (as well as a future "active" extension) won't be possible. + */ + virtual int compareLessEqual(const eServiceReference &, const eServiceReference &)=0; + + virtual SWIG_VOID(RESULT) startEdit(ePtr &SWIG_OUTPUT)=0; }; TEMPLATE_TYPEDEF(ePtr, iListableServicePtr); + /* a helper class which can be used as argument to stl's sort(). */ +class iListableServiceCompare +{ + ePtr m_list; +public: + iListableServiceCompare(iListableService *list): m_list(list) { } + bool operator()(const eServiceReference &a, const eServiceReference &b) + { + return m_list->compareLessEqual(a, b); + } +}; + class iServiceOfflineOperations: public iObject { public: @@ -266,6 +308,8 @@ public: // TODO: additional stuff, like a conversion interface? }; +TEMPLATE_TYPEDEF(ePtr, iServiceOfflineOperationsPtr); + class iServiceHandler: public iObject { public: