add SeekRelative stuff
[enigma2.git] / lib / service / iservice.h
index 54d7b11..15631fd 100644 (file)
@@ -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<iPlayableService>, 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;
 };
@@ -250,10 +257,29 @@ 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;
 };
 
 TEMPLATE_TYPEDEF(ePtr<iListableService>, iListableServicePtr);
 
+       /* a helper class which can be used as argument to stl's sort(). */
+class iListableServiceCompare
+{
+       ePtr<iListableService> 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 +292,8 @@ public:
                // TODO: additional stuff, like a conversion interface?
 };
 
+TEMPLATE_TYPEDEF(ePtr<iServiceOfflineOperations>, iServiceOfflineOperationsPtr);
+
 class iServiceHandler: public iObject
 {
 public: