From a5ffde4fbdcd5a6b4231bb2f1890cd4c7d5bd9cc Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 6 Dec 2005 22:59:31 +0100 Subject: * terminal/install-progress support added --- DistUpgrade/DistUpgrade.glade | 78 +++++++++++++++++++++++++++++++++++++++++-- DistUpgrade/DistUpgrade.py | 54 +++++++++++++++++++++++++++--- 2 files changed, 125 insertions(+), 7 deletions(-) diff --git a/DistUpgrade/DistUpgrade.glade b/DistUpgrade/DistUpgrade.glade index 789262d3..f705cf3d 100644 --- a/DistUpgrade/DistUpgrade.glade +++ b/DistUpgrade/DistUpgrade.glade @@ -22,12 +22,13 @@ + 6 True False 6 - + True <big><b>Distribution upgrade</b></big> False @@ -51,6 +52,35 @@ + + + + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + True @@ -67,7 +97,7 @@ - + True False @@ -92,7 +122,49 @@ - + + True + False + 0 + + + + True + create_terminal + 0 + 0 + Tue, 06 Dec 2005 20:03:08 GMT + + + + + + True + Terminal + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 0 + True + True + diff --git a/DistUpgrade/DistUpgrade.py b/DistUpgrade/DistUpgrade.py index 6f2010db..932ddba1 100644 --- a/DistUpgrade/DistUpgrade.py +++ b/DistUpgrade/DistUpgrade.py @@ -5,17 +5,21 @@ pygtk.require('2.0') import gtk import gtk.gdk import gtk.glade +import vte import gobject import apt import apt_pkg import sys +import os import subprocess from UpdateManager.Common.SimpleGladeApp import SimpleGladeApp from UpdateManager.GtkProgress import GtkOpProgress from SoftwareProperties.aptsources import SourcesList, SourceEntry from gettext import gettext as _ +from apt.progress import InstallProgress + class MyCache(apt.Cache): @property @@ -34,9 +38,6 @@ class MyCache(apt.Cache): return False return ver.Downloadable - - - class DistUpgradeView(object): " abstraction for the upgrade view " def __init__(self): @@ -83,7 +84,7 @@ class GtkDistUpgradeView(DistUpgradeView,SimpleGladeApp): # FIXME2: we need to thing about mediaCheck here too def __init__(self, parent): # if this is set to false the download will cancel - self.status = parent.label_status + self.status = parent.label_extra_status self.progress = parent.progressbar_cache def start(self): self.progress.show() @@ -107,6 +108,42 @@ class GtkDistUpgradeView(DistUpgradeView,SimpleGladeApp): gtk.main_iteration() return True + class GtkInstallProgressAdapter(InstallProgress): + def __init__(self,parent): + InstallProgress.__init__(self) + self.status = parent.label_extra_status + self.progress = parent.progressbar_cache + self.expander = parent.expander_terminal + self.term = parent._term + # setup the child waiting + reaper = vte.reaper_get() + reaper.connect("child-exited", self.child_exited) + self.finished = False + def startUpdate(self): + self.status.set_text(_("Installing updates ...")) + self.progress.set_fraction(0.0) + self.expander.show() + self.term.show() + self.env = ["VTE_PTY_KEEP_FD=%s"% self.writefd] + def fork(self): + return self.term.forkpty(envv=self.env) + def child_exited(self, term, pid, status): + #print "child_exited: %s %s %s %s" % (self,term,pid,status) + self.apt_status = os.WEXITSTATUS(status) + self.finished = True + def waitChild(self): + while not self.finished: + self.updateInterface() + return self.apt_status + def finishUpdate(self): + pass + def updateInterface(self): + InstallProgress.updateInterface(self) + self.progress.set_fraction(self.percent) + while gtk.events_pending(): + gtk.main_iteration() + + def __init__(self): # FIXME: i18n must be somewhere relative do this dir @@ -114,6 +151,7 @@ class GtkDistUpgradeView(DistUpgradeView,SimpleGladeApp): None, domain="update-manager") self._opCacheProgress = GtkOpProgress(self.progressbar_cache) self._fetchProgress = self.GtkFetchProgressAdapter(self) + self._installProgress = self.GtkInstallProgressAdapter(self) # details dialog self.details_list = gtk.ListStore(gobject.TYPE_STRING) column = gtk.TreeViewColumn("") @@ -123,8 +161,16 @@ class GtkDistUpgradeView(DistUpgradeView,SimpleGladeApp): self.treeview_details.append_column(column) self.treeview_details.set_model(self.details_list) + def create_terminal(self, arg1,arg2,arg3,arg4): + " helper to create a vte terminal " + print "create_vte (for the custom glade widget)" + self._term = vte.Terminal() + self._term.set_font_from_string("monospace 10") + return self._term def getFetchProgress(self): return self._fetchProgress + def getInstallProgress(self): + return self._installProgress def getOpCacheProgress(self): return self._opCacheProgress def updateStatus(self, msg): -- cgit v1.2.3