service: add sort of servicelist including all required layers
[enigma2.git] / lib / service / iservice.h
index 62be26c0ac782cddaa708125bc5c3333c27b1a2c..d0dc1e2b2cb93bdb9bbfb8f1b85422fdcaf0cd8c 100644 (file)
@@ -130,11 +130,18 @@ public:
                return path < c.path;
        }
        operator bool() const
+       {
+               return valid();
+       }
+       
+       int valid() const
        {
                return type != idInvalid;
        }
 };
 
+SWIG_ALLOW_OUTPUT_SIMPLE(eServiceReference);
+
 typedef unsigned long long pts_t;
 
        /* the reason we have the servicereference as additional argument is
@@ -171,6 +178,8 @@ TEMPLATE_TYPEDEF(ePtr<iStaticServiceInformation>, iStaticServiceInformationPtr);
 
 class eServiceEvent;
 
+TEMPLATE_TYPEDEF(ePtr<eServiceEvent>, eServiceEventPtr);
+
 class iServiceInformation: public iObject
 {
 public:
@@ -241,10 +250,41 @@ 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:
+               /* to delete a service, forever. */
+       virtual RESULT deleteFromDisk(int simulate=1)=0;
+       
+               /* for transferring a service... */
+       virtual SWIG_VOID(RESULT) getListOfFilenames(std::list<std::string> &SWIG_OUTPUT)=0;
+       
+               // TODO: additional stuff, like a conversion interface?
+};
+
 class iServiceHandler: public iObject
 {
 public:
@@ -252,6 +292,7 @@ public:
        virtual SWIG_VOID(RESULT) record(const eServiceReference &, ePtr<iRecordableService> &SWIG_OUTPUT)=0;
        virtual SWIG_VOID(RESULT) list(const eServiceReference &, ePtr<iListableService> &SWIG_OUTPUT)=0;
        virtual SWIG_VOID(RESULT) info(const eServiceReference &, ePtr<iStaticServiceInformation> &SWIG_OUTPUT)=0;
+       virtual SWIG_VOID(RESULT) offlineOperations(const eServiceReference &, ePtr<iServiceOfflineOperations> &SWIG_OUTPUT)=0;
 };
 
 TEMPLATE_TYPEDEF(ePtr<iServiceHandler>, iServiceHandlerPtr);