Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Silva <sebastian@sugarlabs.org>2011-08-05 05:03:00 (GMT)
committer Sebastian Silva <sebastian@sugarlabs.org>2011-08-05 05:03:00 (GMT)
commit56913f7eb565ee216cc19c1567fbab2dd2afeae6 (patch)
tree00126aa8e6053b931e6fca4cc2fe0dc81023ac63
parent3b339eec82dee31d697daa6a2d5e692c6b5b372b (diff)
added progressbar for encoding
-rw-r--r--pippy_app.py45
1 files changed, 41 insertions, 4 deletions
diff --git a/pippy_app.py b/pippy_app.py
index 5cbde7d..ea05c7a 100644
--- a/pippy_app.py
+++ b/pippy_app.py
@@ -26,6 +26,7 @@ import popen2
import re
import shutil
import signal
+import sys
from activity import ViewSourceActivity
from sugar.activity.activity import ActivityToolbox, \
@@ -45,6 +46,7 @@ class ScreencastActivity(ViewSourceActivity):
"""Set up the Screencast activity."""
super(ScreencastActivity, self).__init__(handle)
self._logger = logging.getLogger('screencast-activity')
+ self.timed_id2 = None
from sugar.graphics.menuitem import MenuItem
from sugar.graphics.icon import Icon
@@ -98,14 +100,21 @@ class ScreencastActivity(ViewSourceActivity):
hbox.pack_start(self.record, expand=False, padding=40)
hbox.pack_start(self.stop, expand=False, padding=40)
+ # Encoding progress bar
+ self.progressbar=gtk.ProgressBar(adjustment=None)
+ self.progressbar.set_fraction(0)
+ self.progressbar.set_text("0% complete")
+
valign = gtk.Alignment(0.5, 0.4, 0, 0)
valign.add(vbox)
+ vbox.pack_end(self.progressbar, expand=True, padding=20)
vbox.pack_end(self.status, expand=True, padding=40)
vbox.pack_end(hbox, expand=True, fill=False)
vbox.pack_end(options, expand=True, padding=40)
self.set_canvas(valign)
self.show_all()
+ self.progressbar.hide()
def write_file (self, file_path):
print "Saving file to %s" % file_path
@@ -163,27 +172,54 @@ class ScreencastActivity(ViewSourceActivity):
execargs.append("31")
execargs.append("-o")
execargs.append(OUTFILE)
- print execargs
self.childp = popen2.Popen3(execargs, "t", 0)
flags = fcntl.fcntl(self.childp.childerr, fcntl.F_GETFL)
fcntl.fcntl(self.childp.childerr, fcntl.F_SETFL, flags|os.O_NONBLOCK)
+ flags = fcntl.fcntl(self.childp.fromchild, fcntl.F_GETFL)
+ fcntl.fcntl(self.childp.fromchild, fcntl.F_SETFL, flags|os.O_NONBLOCK)
self.timed_id = gobject.timeout_add(1000, self.check_status_cb)
self.status.set_text("Status: Recording")
def stop_cb(self, stop):
- print "Stop button clicked"
exitret = os.waitpid(self.childp.pid, os.WNOHANG)
if exitret[0] == 0:
os.kill(self.childp.pid, signal.SIGTERM)
self.stop.set_sensitive(False)
+ def update_counter(self):
+ self.progressbar.show()
+ while True:
+ try:
+ strstdout=self.childp.fromchild.read()
+ self.counter_fraction=float(re.search("[0-9][0-9]?[0-9]?", strstdout).group())
+ percentage=self.counter_fraction/100.0
+ if percentage>1.0:
+ percentage=1.0
+ #print "PORCENTAJE %s " % str(percentage)
+ self.progressbar.set_fraction(percentage)
+ self.progressbar.set_text("%d%%"%int(percentage*100)+' complete')
+ except IOError:
+ gtk.main_iteration(block=False)
+ except AttributeError:
+ break
+ except:
+ print "Unexpected error:", sys.exc_info()[0]
+ print "Unexpected error:", sys.exc_info()[1]
+ break
+
def check_status_cb(self):
if self.childp.pid:
exitret = os.waitpid(self.childp.pid, os.WNOHANG)
if exitret[0] != 0:
- print "no more record process"
# The recording process exited
self.status.set_text("Status: Stopped")
+ if self.timed_id2:
+ gobject.source_remove(self.timed_id2)
+ self.timed_id2 = None
+ self.progressbar.hide()
+ self.alert("Success:", "Saved recording to journal")
+ self.progressbar.set_fraction(0)
+ self.progressbar.set_text('0% complete')
self.record.set_sensitive(True)
self.audiocheckbox.set_sensitive(True)
self.qualitycombo.set_sensitive(True)
@@ -198,8 +234,9 @@ class ScreencastActivity(ViewSourceActivity):
while True:
try:
err_line = self.childp.childerr.readline()
- print err_line
if err_line.startswith("STATE:ENCODING"):
+ if not self.timed_id2:
+ self.timed_id2=gobject.timeout_add(300,self.update_counter)
self.status.set_text("Status: Encoding, please wait")
except:
break