fix subtitle configlist crash
[enigma2.git] / lib / python / Components / Console.py
old mode 100644 (file)
new mode 100755 (executable)
index 45da72f..a41317e
@@ -8,7 +8,7 @@ class Console(object):
                self.callbacks = {}
                self.extra_args = {}
 
-       def ePopen(self, cmd, callback, extra_args=[]):
+       def ePopen(self, cmd, callback=None, extra_args=[]):
                name = cmd
                i = 0
                while self.appContainers.has_key(name):
@@ -19,21 +19,48 @@ class Console(object):
                self.extra_args[name] = extra_args
                self.callbacks[name] = callback
                self.appContainers[name] = eConsoleAppContainer()
-               self.appContainers[name].dataAvail.get().append(boundFunction(self.dataAvailCB,name))
-               self.appContainers[name].appClosed.get().append(boundFunction(self.finishedCB,name))
-               retval = self.appContainers[name].execute(cmd)
+               self.appContainers[name].dataAvail.append(boundFunction(self.dataAvailCB,name))
+               self.appContainers[name].appClosed.append(boundFunction(self.finishedCB,name))
+               if isinstance(cmd, str): # until .execute supports a better api
+                       cmd = [cmd]
+               retval = self.appContainers[name].execute(*cmd)
                if retval:
                        self.finishedCB(name, retval)
 
+       def eBatch(self, cmds, callback, extra_args=[], debug=False):
+               self.debug = debug
+               cmd = cmds.pop(0)
+               self.ePopen(cmd, self.eBatchCB, [cmds, callback, extra_args])
+
+       def eBatchCB(self, data, retval, _extra_args):
+               (cmds, callback, extra_args) = _extra_args
+               if self.debug:
+                       print '[eBatch] retval=%s, cmds left=%d, data:\n%s' % (retval, len(cmds), data)
+               if len(cmds):
+                       cmd = cmds.pop(0)
+                       self.ePopen(cmd, self.eBatchCB, [cmds, callback, extra_args])
+               else:
+                       callback(extra_args)
+
        def dataAvailCB(self, name, data):
                self.appResults[name] += data
 
        def finishedCB(self, name, retval):
-               del self.appContainers[name].dataAvail.get()[:]
-               del self.appContainers[name].appClosed.get()[:]
+               del self.appContainers[name].dataAvail[:]
+               del self.appContainers[name].appClosed[:]
                data = self.appResults[name]
                extra_args = self.extra_args[name]
                del self.appContainers[name]
                del self.extra_args[name]
-               self.callbacks[name](data,retval,extra_args)
+               if self.callbacks[name]:
+                       self.callbacks[name](data,retval,extra_args)
                del self.callbacks[name]
+
+       def kill(self,name):
+               if name in self.appContainers:
+                       print "[Console] killing: ",self.appContainers[name]
+                       self.appContainers[name].kill()
+
+       def killAll(self):
+               for name in self.appContainers:
+                       self.kill(name)