diff options
| author | iovar <iovar@f606c939-3180-4ac9-a4b8-4b8779d57d0a> | 2006-11-14 21:16:36 +0000 | 
|---|---|---|
| committer | iovar <iovar@f606c939-3180-4ac9-a4b8-4b8779d57d0a> | 2006-11-14 21:16:36 +0000 | 
| commit | 689efc1c65844a9a4e53a8152a869f92febe8686 (patch) | |
| tree | cd2794a75780f3d1970397b524bc0d96371d05b5 /gtk-recordmydesktop | |
| parent | 4bb51537763e8ff4f6490c7f5e481b22168903cf (diff) | |
added, encoding proccess monitor
git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@168 f606c939-3180-4ac9-a4b8-4b8779d57d0a
Diffstat (limited to 'gtk-recordmydesktop')
| -rw-r--r-- | gtk-recordmydesktop/configure.ac | 16 | ||||
| -rw-r--r-- | gtk-recordmydesktop/src/Makefile.am | 1 | ||||
| -rw-r--r-- | gtk-recordmydesktop/src/rmdMonitor.py | 73 | ||||
| -rw-r--r-- | gtk-recordmydesktop/src/rmdTrayIcon.py | 46 | 
4 files changed, 108 insertions, 28 deletions
| diff --git a/gtk-recordmydesktop/configure.ac b/gtk-recordmydesktop/configure.ac index 5ec0b9d..e88eea6 100644 --- a/gtk-recordmydesktop/configure.ac +++ b/gtk-recordmydesktop/configure.ac @@ -1,31 +1,31 @@  AC_PREREQ(2.59)  AC_INIT(src/gtk-recordMyDesktop) -AM_INIT_AUTOMAKE(gtk-recordMyDesktop, 0.2.1-r4) +AM_INIT_AUTOMAKE(gtk-recordMyDesktop, 0.3)  AS_AC_EXPAND(LIBDIR, $libdir)  AC_MSG_NOTICE(Storing library files in $LIBDIR)  AC_SUBST(PYGTK_REQ, 2.4) -#The following test is needed for the expansion bellow  +#The following test is needed for the expansion bellow  if test "x$prefix" == "xNONE"; then      export prefix="/usr/local/" -else  +else      echo "prefix set to $prefix"  fi  #this expansion is needed because in some cases the datadir expansion will  #not give an absolute path but one based on the $prefix env variable. -#This value gets directly in the rmdConfig.py file which will later fail  +#This value gets directly in the rmdConfig.py file which will later fail  #if it has a value of ${prefix}/something. So it needs to know which was the prefix during  #installation. And that's why the above test is needed. In case no prefix is given -#we still have to insert the default to avoid a path of NONE/something. and NONE can't be  +#we still have to insert the default to avoid a path of NONE/something. and NONE can't be  #replaced within the script since it is also a valid name for a directory.  #also,this behavior doesn't affect already existing dist tarballs and probably has to do with  #the environment that the autotools were used, to produce the tarballs -#(both cases were noticed with v1.7 of autowhatever, but on different environments)   +#(both cases were noticed with v1.7 of autowhatever, but on different environments)  #did you really read this? If you are a packager, you must be a very responsible one!Congrats! -AS_AC_EXPAND(PREFIX,$prefix)  +AS_AC_EXPAND(PREFIX,$prefix)  AS_AC_EXPAND(DATADIR, "$datadir")  AC_MSG_NOTICE(Storing data files in $DATADIR) @@ -71,7 +71,7 @@ export PYTHONPATH=$PYGST_DIR:$PYTHONPATH -AC_CONFIG_FILES([Makefile  +AC_CONFIG_FILES([Makefile          src/Makefile          src/rmdConfig.py          po/Makefile.in]) diff --git a/gtk-recordmydesktop/src/Makefile.am b/gtk-recordmydesktop/src/Makefile.am index 82d981e..79f206e 100644 --- a/gtk-recordmydesktop/src/Makefile.am +++ b/gtk-recordmydesktop/src/Makefile.am @@ -12,6 +12,7 @@ gtk_recordMyDesktop_PYTHON = \  							rmdPrefsWidget.py\  							rmdSimple.py\  							rmdConfig.py\ +							rmdMonitor.py\  							__init__.py  desktopdir = $(datadir)/applications diff --git a/gtk-recordmydesktop/src/rmdMonitor.py b/gtk-recordmydesktop/src/rmdMonitor.py new file mode 100644 index 0000000..eac2a3e --- /dev/null +++ b/gtk-recordmydesktop/src/rmdMonitor.py @@ -0,0 +1,73 @@ +import pygtk +pygtk.require('2.0') +import gtk +import gobject +import locale, gettext +import rmdConfig +_ = gettext.gettext +gettext.textdomain('gtk-recordMyDesktop') +gettext.bindtextdomain('gtk-recordMyDesktop',rmdConfig.locale_install_dir) +import popen2 +import os,fcntl,signal + +class rmdMonitor(object): +    labeString="Please wait while your recording is being encoded\nWARNING!!!\nIf you press Cancel or close this window,\nthis proccess cannot be resumed!" +    counter_fraction=0.0 + +    def destroy_and_kill(self,Event=None): +        self.destroy() +        self.stop_encoding() +    def destroy(self,Event=None): +        gobject.source_remove(self.timed_id) +        self.window.destroy() +        gtk.main_quit() +    def update_counter(self): +        strstdout="" +        try: +            strstdout=self.stdout.read() +            if strstdout =='': +                self.destroy() +        except: +            return True +        try: +            self.counter_fraction=float(strstdout.replace("[","").replace("%] ","")) +            percentage=self.counter_fraction/100.0 +            if percentage>1.0: +                percentage=1.0 +            self.progressbar.set_fraction(percentage) +            self.progressbar.set_text("%.2f%% complete"%(self.counter_fraction)) +        except: +            self.counter_fraction=0.0 + +        return True +    def stop_encoding(self,Event=None): +        os.kill(self.rmdPid,signal.SIGINT) + +    def __init__(self,out_stream,childPid): +        flags = fcntl.fcntl(out_stream, fcntl.F_GETFL) +        fcntl.fcntl(out_stream, fcntl.F_SETFL, flags | os.O_NONBLOCK) +        self.rmdPid=childPid +        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) +        self.window.connect("destroy", self.destroy_and_kill) +        self.window.set_border_width(10) +        self.window.set_title("recordMyDesktop-encoder") +        self.label=gtk.Label(self.labeString) +        self.label.set_justify(gtk.JUSTIFY_CENTER) +        self.label.show() +        self.progressbar=gtk.ProgressBar(adjustment=None) +        self.progressbar.set_fraction(self.counter_fraction) +        self.progressbar.set_text("0% complete") +        self.progressbar.show() +        self.stopbutton=gtk.Button(None,gtk.STOCK_CANCEL) +        self.stopbutton.connect("clicked",self.stop_encoding) +        self.box=gtk.VBox(homogeneous=False, spacing=20) +        self.box.pack_start(self.label,True,True) +        self.box.pack_start(self.progressbar,True,True) +        self.box.pack_start(self.stopbutton,expand=False,fill=False) +        self.box.show() +        self.stopbutton.show() +        self.window.add(self.box) +        self.window.show() +        self.stdout=out_stream +        self.timed_id=gobject.timeout_add(100,self.update_counter) +        gtk.main() diff --git a/gtk-recordmydesktop/src/rmdTrayIcon.py b/gtk-recordmydesktop/src/rmdTrayIcon.py index 48ea5d4..3069ae3 100644 --- a/gtk-recordmydesktop/src/rmdTrayIcon.py +++ b/gtk-recordmydesktop/src/rmdTrayIcon.py @@ -35,7 +35,8 @@ if USE_EGG==1:      import egg.trayicon  import rmdSelect as isel  import rmdTrayPopup as iTP -import os,signal +import rmdMonitor as imon +import os,signal,popen2  #values struct: @@ -78,8 +79,8 @@ class trayIcon(object):          13*256:'Cannot open file for writting.',          11:'Segmentation Fault'          } -  -  + +      state=0#0 stopped,1 recording,2 paused      rmdPid=None      optionsOpen=[1] @@ -97,9 +98,9 @@ class trayIcon(object):          else:              widget.set_from_stock(icon) -             +      def __buttonPress__(self,button): -        if button==1 : +        if button==1 and self.state>=0:              if self.state == 0:                  if self.optionsOpen[0]==1:                      self.parent.hide() @@ -119,9 +120,9 @@ class trayIcon(object):                  self.__set_icon__(self.trayIcon,gtk.STOCK_MEDIA_STOP)                  self.state=1                  self.__pauseRMD__() -               -        elif button == 3: + +        elif button == 3 and self.state>=0:              if self.state == 0:                  self.tray_popup.show()              elif self.state == 1: @@ -144,13 +145,13 @@ class trayIcon(object):              self.__set_icon__(self.trayIcon,gtk.STOCK_MEDIA_STOP)              self.state=1              self.__execRMD__() -          +      def __execRMD__(self):          self.parent.update()          execargs=["recordmydesktop","-o",'%s'%self.parent.values[4],                    "-fps","%d"%self.parent.values[0]]          if self.parent.values[2]==False : -            execargs.append("--nosound") +            execargs.append("--no-sound")          if self.parent.values[1] == 1:              execargs.append("-dummy-cursor")              execargs.append("white") @@ -159,7 +160,7 @@ class trayIcon(object):              execargs.append("black")          elif self.parent.values[1] == 3:              execargs.append("--no-cursor") -         +          if self.parent.values[3] == 0:              execargs.append("--full-shots")              if self.parent.values[13] == 0: @@ -202,18 +203,17 @@ class trayIcon(object):          execargs.append('%d'%self.parent.values[15])          if self.parent.values[16] == 0:              execargs.append('--quick-subsampling') -         -         + +          #print execargs -        self.rmdPid=os.fork() -        if self.rmdPid==0: -            res=os.execvp("recordmydesktop",execargs) -        else: -            self.timed_id=gobject.timeout_add(1000,self.__check_status__) -             -         + +        self.childP=popen2.Popen3(execargs,"t") +        self.rmdPid=self.childP.pid +        self.timed_id=gobject.timeout_add(1000,self.__check_status__) + +      def __exit_status_dialog(self,status):          dialog = gtk.Dialog(title=None, parent=None, flags=0, buttons=None)          label1=None @@ -234,7 +234,7 @@ class trayIcon(object):      def __pauseRMD__(self):          os.kill(self.rmdPid,signal.SIGUSR1) -         +      def __stopRMD__(self):          if self.timed_id!=None:              gobject.source_remove(self.timed_id) @@ -242,7 +242,13 @@ class trayIcon(object):          exit_ret=os.waitpid(self.rmdPid,os.WNOHANG)          if exit_ret[0] == 0:              os.kill(self.rmdPid,signal.SIGTERM) +            self.state=-1 +            monitor=imon.rmdMonitor(self.childP.fromchild,self.rmdPid) +              exit_ret=os.waitpid(self.rmdPid,0) + +            self.state=0 +                #os.slee              #if exit_ret[0]==self.rmdPid:              #self.__exit_status_dialog(exit_ret[1])          else: | 
