swig: some more simplifying magic
authorFelix Domke <tmbinc@elitedvb.net>
Thu, 29 Sep 2005 22:07:36 +0000 (22:07 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Thu, 29 Sep 2005 22:07:36 +0000 (22:07 +0000)
Navigation.py
ServiceReference.py
lib/python/enigma_python.i
lib/python/swig.h
lib/service/iservice.h

index 5fe2651783d94c40276346badf41f17f95ff2f33..03a1c618398c14c5b405847741ba35029415bffa 100644 (file)
@@ -57,9 +57,11 @@ class Navigation:
                return self.pnav.enqueueService(ref)
        
        def getCurrentService(self):
-               service = iPlayableServicePtr()
-               if self.pnav.getCurrentService(service):
+               service = self.pnav.getCurrentService()
+               
+               if service is None:
                        return None
+               
                return service
        
        def getPlaylist(self):
index c4c2f467ef93ca9a6114e686708327a5aa35ce9a..14ac5b29d75f3b3edd2ea9d35557a21366d0bbed 100644 (file)
@@ -10,17 +10,14 @@ class ServiceReference(eServiceReference):
                self.ref = ref
 
        def getStaticServiceInformation(self):
-               info = iStaticServiceInformationPtr()
-               if NavigationInstance.instance.ServiceHandler.info(self.ref, info):
-                       info = None
-               return info
+               return NavigationInstance.instance.ServiceHandler.info(self.ref)
        
        def __str__(self):
                return self.ref.toString()
        
        def getServiceName(self):
                info = self.getStaticServiceInformation()
-               if not info:
+               if info is not None:
                        return None
                
                return info.getName(self.ref)
index 79f9296e3251e1abac39ac38ae9fe929561a1af4..8b918bf0511d4f64707ecd1c482070a857d279b8 100644 (file)
@@ -83,9 +83,10 @@ extern PSignal1<void,int> &keyPressedSignal();
 %feature("ref")   iObject "$this->AddRef(); eDebug(\"AddRef (%s:%d)!\", __FILE__, __LINE__); "
 %feature("unref") iObject "$this->Release(); eDebug(\"Release! %s:%d\", __FILE__, __LINE__); "
 
+
 /* this magic allows smartpointer to be used as OUTPUT arguments, i.e. call-by-reference-styled return value. */
 
-%define %typemap_output_ptr(Type)
+%define %typemap_output_simple(Type)
  %typemap(in,numinputs=0) Type *OUTPUT ($*1_ltype temp),
               Type &OUTPUT ($*1_ltype temp)
    "$1 = new Type;";
@@ -95,7 +96,17 @@ extern PSignal1<void,int> &keyPressedSignal();
    "$result = t_output_helper($result, (SWIG_NewPointerObj((void*)($1), $1_descriptor, 1)));"
 %enddef
 
-%newobject eDebugClassPtr::operator->;
+%define %typemap_output_ptr(Type)
+ %typemap(in,numinputs=0) Type *OUTPUT ($*1_ltype temp),
+              Type &OUTPUT ($*1_ltype temp)
+   "$1 = new Type;";
+ %fragment("t_out_helper"{Type},"header",
+     fragment="t_output_helper") {}
+ %typemap(argout,fragment="t_out_helper"{Type}) Type *OUTPUT, Type &OUTPUT
+               // generate None if smartpointer is NULL
+   "$result = t_output_helper($result, ((*$1) ? SWIG_NewPointerObj((void*)($1), $1_descriptor, 1) : (Py_INCREF(Py_None), Py_None)));"
+%enddef
+
 
 #define DEBUG
 %include "typemaps.i"
index ae0bfd07934a6f2b774a4106f2cf1b588b58f8ce..23ce9aad71cff41a281671448405e578256addc2 100644 (file)
@@ -6,10 +6,13 @@
 %template(y) x; \
 typedef x y; \
 %typemap_output_ptr(x);
+#define SWIG_ALLOW_OUTPUT_SIMPLE(x) %typemap_output_simple(x);
 #else
 #define TEMPLATE_TYPEDEF(x, y) typedef x y
+#define SWIG_ALLOW_OUTPUT_SIMPLE(x) 
 #endif
 
+
 #ifdef SWIG
 #define SWIG_INPUT INPUT
 #define SWIG_OUTPUT OUTPUT
index 62be26c0ac782cddaa708125bc5c3333c27b1a2c..54d7b11f29d494aa76b90ab6bc541dde00f10ce5 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:
@@ -245,6 +254,18 @@ public:
 
 TEMPLATE_TYPEDEF(ePtr<iListableService>, iListableServicePtr);
 
+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 +273,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);