Author: dmeyer
Date: Tue Feb 13 20:32:03 2007
New Revision: 2486

Modified:
   trunk/base/src/notifier/popen.py
   trunk/beacon/src/server/videothumb.py
   trunk/popcorn/src/backends/gstreamer/player.py
   trunk/popcorn/src/backends/mplayer/ipc.py
   trunk/popcorn/src/backends/mplayer/player.py
   trunk/popcorn/src/backends/xine/player.py
   trunk/popcorn/src/utils/ipc.py

Log:
Remove the "completed" signal from Process and return an InProgress
object instead on start(). Since an InProgress object is a Signal
the only difference for current code is that you can only register
after start and need to reregister on each start. There is no problem
with short running processes, the signal won't be called before the
next main loop iteration, enough time to register.
The good think about this is that you can use this InProgress object
in async functions using yield_execution. It also makes the interface
look similar to code already using InProgress.
As a next step I will use InProgress for Threads. Since InProgress
objects contain a second Signal for exceptions, this would make the
interface simpler.


Modified: trunk/base/src/notifier/popen.py
==============================================================================
--- trunk/base/src/notifier/popen.py    (original)
+++ trunk/base/src/notifier/popen.py    Tue Feb 13 20:32:03 2007
@@ -58,6 +58,7 @@
 import nf_wrapper as notifier
 from callback import Signal, Callback
 from thread import MainThreadCallback, is_mainthread
+from async import InProgress
 
 # get logging object
 log = logging.getLogger('notifier')
@@ -79,7 +80,6 @@
         self.signals = {
             "stderr": Signal(),
             "stdout": Signal(),
-            "completed": Signal(),
         }
 
         self._cmd = self._normalize_cmd(cmd)
@@ -89,6 +89,7 @@
         self.stopping = False
         self.__kill_timer = None
         self.child = None
+        self.in_progress = None
 
 
     def _normalize_cmd(self, cmd):
@@ -163,6 +164,8 @@
             MainThreadCallback(_watcher.append, self, self.__child_died )
         else:
             _watcher.append( self, self.__child_died )
+        self.in_progress = InProgress()
+        return self.in_progress
 
 
     def write( self, line ):
@@ -311,7 +314,8 @@
         self.child = None
         if self.__kill_timer:
             notifier.timer_remove( self.__kill_timer )
-        self.signals["completed"].emit(status >> 8)
+        self.in_progress.finished(status >> 8)
+        self.in_progress = None
 
 
 

Modified: trunk/beacon/src/server/videothumb.py
==============================================================================
--- trunk/beacon/src/server/videothumb.py       (original)
+++ trunk/beacon/src/server/videothumb.py       Tue Feb 13 20:32:03 2007
@@ -68,7 +68,6 @@
         self.child = kaa.notifier.Process(['mplayer', '-nosound', '-vo', 
'png:z=2', 
                                            '-frames', '10', '-osdlevel', '0', 
'-nocache',
                                            '-zoom', '-ss' ])
-        self.child.signals['completed'].connect(self._completed)
         self.child.signals['stdout'].connect(self._handle_std)
         self.child.signals['stderr'].connect(self._handle_std)
 
@@ -119,7 +118,7 @@
                 pos = str(int(pos))
 
         self._child_std = []
-        self.child.start([pos, self._current.filename])
+        self.child.start([pos, 
self._current.filename]).connect(self._completed)
 
 
     def _completed(self, code):

Modified: trunk/popcorn/src/backends/gstreamer/player.py
==============================================================================
--- trunk/popcorn/src/backends/gstreamer/player.py      (original)
+++ trunk/popcorn/src/backends/gstreamer/player.py      Tue Feb 13 20:32:03 2007
@@ -64,9 +64,8 @@
         if not self._gst:
             script = os.path.join(os.path.dirname(__file__), 'main.py')
             self._gst = ChildProcess(self, script)
-            self._gst.signals["completed"].connect_weak(self._child_exited)
             self._gst.set_stop_command(WeakCallback(self._gst.die))
-            self._gst.start()
+            self._gst.start().connect_weak(self._child_exited)
         self._position = 0.0
         self._state = STATE_OPENING
         self._gst.open(self._mrl)

Modified: trunk/popcorn/src/backends/mplayer/ipc.py
==============================================================================
--- trunk/popcorn/src/backends/mplayer/ipc.py   (original)
+++ trunk/popcorn/src/backends/mplayer/ipc.py   Tue Feb 13 20:32:03 2007
@@ -113,12 +113,12 @@
         log.info("spawn: %s %s", self._mp_cmd, ' '.join(args))
 
         if USE_GDB:
-            self._child.start(self._command)
+            signal = self._child.start(self._command)
             self._child.write("run %s\n" % ' '.join(args))
             self._child.signals["stdout"].connect_weak(self._child_handle_line)
             self._child.signals["stderr"].connect_weak(self._child_handle_line)
-        else:
-            self._child.start(args)
+            return signal
+        return self._child.start(args)
 
 
     def _child_stop(self):

Modified: trunk/popcorn/src/backends/mplayer/player.py
==============================================================================
--- trunk/popcorn/src/backends/mplayer/player.py        (original)
+++ trunk/popcorn/src/backends/mplayer/player.py        Tue Feb 13 20:32:03 2007
@@ -341,10 +341,10 @@
         # work that way so we have to run mplayer with -identify first.
         args = "-nolirc -nojoystick -identify -vo null -ao null -frames 0 
-nocache"
         ident = kaa.notifier.Process(self._mp_cmd)
-        ident.start(args.split(' ') + self._media.mplayer_args)
+        signal = ident.start(args.split(' ') + self._media.mplayer_args)
+        signal.connect_weak(self._ident_exited)
         ident.signals["stdout"].connect_weak(self._child_handle_line)
         ident.signals["stderr"].connect_weak(self._child_handle_line)
-        ident.signals["completed"].connect_weak(self._ident_exited)
 
 
     def _ident_exited(self, code):
@@ -541,10 +541,9 @@
         # connect to signals
         self._mplayer.signals["stdout"].connect_weak(self._child_handle_line)
         self._mplayer.signals["stderr"].connect_weak(self._child_handle_line)
-        self._mplayer.signals["completed"].connect_weak(self._child_exited)
 
         # start playback
-        self._mplayer.start(self._media)
+        self._mplayer.start(self._media).connect_weak(self._child_exited)
 
 
     def stop(self):

Modified: trunk/popcorn/src/backends/xine/player.py
==============================================================================
--- trunk/popcorn/src/backends/xine/player.py   (original)
+++ trunk/popcorn/src/backends/xine/player.py   Tue Feb 13 20:32:03 2007
@@ -70,9 +70,9 @@
         # Launch self (-u is unbuffered stdout)
         script = os.path.join(os.path.dirname(__file__), 'main.py')
         self._xine = ChildProcess(self, script)
-        self._xine.signals["completed"].connect_weak(self._child_exited)
         self._xine.set_stop_command(kaa.notifier.WeakCallback(self._xine.die))
-        self._xine.start(str(self._osd_shmkey), str(self._frame_shmkey))
+        signal = self._xine.start(str(self._osd_shmkey), 
str(self._frame_shmkey))
+        signal.connect_weak(self._child_exited)
         self._xine_configured = False
 
 

Modified: trunk/popcorn/src/utils/ipc.py
==============================================================================
--- trunk/popcorn/src/utils/ipc.py      (original)
+++ trunk/popcorn/src/utils/ipc.py      Tue Feb 13 20:32:03 2007
@@ -87,8 +87,9 @@
         """
         if not self._gdb:
             return self._child.start(args)
-        self._child.start(sys.executable)
+        signal = self._child.start(sys.executable)
         self._child.write("run -u %s %s\n" % (self._gdb, ' '.join(args)))
+        return signal
 
 
     def _handle_line(self, line):

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to