incorporate new class to support own asynchronous implementation of a "popen" system...
authorAndreas Frisch <andreas.frisch@multimedia-labs.de>
Mon, 27 Oct 2008 09:24:27 +0000 (09:24 +0000)
committerAndreas Frisch <andreas.frisch@multimedia-labs.de>
Mon, 27 Oct 2008 09:24:27 +0000 (09:24 +0000)
lib/python/Components/Console.py [new file with mode: 0644]

diff --git a/lib/python/Components/Console.py b/lib/python/Components/Console.py
new file mode 100644 (file)
index 0000000..45da72f
--- /dev/null
@@ -0,0 +1,39 @@
+from enigma import eConsoleAppContainer
+from Tools.BoundFunction import boundFunction
+
+class Console(object):
+       def __init__(self):
+               self.appContainers = {}
+               self.appResults = {}
+               self.callbacks = {}
+               self.extra_args = {}
+
+       def ePopen(self, cmd, callback, extra_args=[]):
+               name = cmd
+               i = 0
+               while self.appContainers.has_key(name):
+                       name = cmd +'_'+ str(i)
+                       i += 1
+               print "[ePopen] command:", cmd
+               self.appResults[name] = ""
+               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)
+               if retval:
+                       self.finishedCB(name, retval)
+
+       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()[:]
+               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)
+               del self.callbacks[name]