summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <egon@top>2005-12-06 22:59:31 +0100
committerMichael Vogt <egon@top>2005-12-06 22:59:31 +0100
commita5ffde4fbdcd5a6b4231bb2f1890cd4c7d5bd9cc (patch)
tree3166a794d480d1799d49bdd981e34d512e2c837c
parenta5be3591b8c7b53422b19575a7b085205763c2c3 (diff)
downloadpython-apt-a5ffde4fbdcd5a6b4231bb2f1890cd4c7d5bd9cc.tar.gz
* terminal/install-progress support added
-rw-r--r--DistUpgrade/DistUpgrade.glade78
-rw-r--r--DistUpgrade/DistUpgrade.py54
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 @@
<child>
<widget class="GtkVBox" id="vbox1">
+ <property name="border_width">6</property>
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">6</property>
<child>
- <widget class="GtkLabel" id="label2">
+ <widget class="GtkLabel" id="label_title">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;Distribution upgrade&lt;/b&gt;&lt;/big&gt;</property>
<property name="use_underline">False</property>
@@ -52,6 +53,35 @@
</child>
<child>
+ <placeholder/>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label_status">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
<widget class="GtkProgressBar" id="progressbar_cache">
<property name="visible">True</property>
<property name="orientation">GTK_PROGRESS_LEFT_TO_RIGHT</property>
@@ -67,7 +97,7 @@
</child>
<child>
- <widget class="GtkLabel" id="label_status">
+ <widget class="GtkLabel" id="label_extra_status">
<property name="visible">True</property>
<property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
@@ -92,7 +122,49 @@
</child>
<child>
- <placeholder/>
+ <widget class="GtkExpander" id="expander_terminal">
+ <property name="can_focus">True</property>
+ <property name="expanded">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="Custom" id="custom_terminal">
+ <property name="visible">True</property>
+ <property name="creation_function">create_terminal</property>
+ <property name="int1">0</property>
+ <property name="int2">0</property>
+ <property name="last_modification_time">Tue, 06 Dec 2005 20:03:08 GMT</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Terminal</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
</child>
</widget>
</child>
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):