diff options
| author | Michael Vogt <michael.vogt@ubuntu.com> | 2006-03-20 11:14:55 +0100 |
|---|---|---|
| committer | Michael Vogt <michael.vogt@ubuntu.com> | 2006-03-20 11:14:55 +0100 |
| commit | 56fa71590be9df25acc234df153412ef68a30ae2 (patch) | |
| tree | 8dcfba75b423316e15ec68e62433e918e3ce97fe /UpdateManager | |
| parent | 011227402396588da9688bec6dc0fdb9271bfef9 (diff) | |
| parent | 2fffae540e57f3afce498bbc5f62657a889a429f (diff) | |
| download | python-apt-56fa71590be9df25acc234df153412ef68a30ae2.tar.gz | |
* merged from the laptop branch
Diffstat (limited to 'UpdateManager')
| -rw-r--r-- | UpdateManager/Common/HelpViewer.py | 33 | ||||
| -rw-r--r-- | UpdateManager/GtkProgress.py | 36 | ||||
| -rw-r--r-- | UpdateManager/UpdateManager.py | 28 |
3 files changed, 78 insertions, 19 deletions
diff --git a/UpdateManager/Common/HelpViewer.py b/UpdateManager/Common/HelpViewer.py new file mode 100644 index 00000000..c8b099cc --- /dev/null +++ b/UpdateManager/Common/HelpViewer.py @@ -0,0 +1,33 @@ +# helpviewer.py + +import os +import subprocess + +# Hardcoded list of available help viewers +# FIXME: khelpcenter support would be nice +#KNOWN_VIEWERS = ["/usr/bin/yelp", "/usr/bin/khelpcenter"] +KNOWN_VIEWERS = ["/usr/bin/yelp"] + +class HelpViewer: + def __init__(self, docu): + self.command = [] + self.docu = docu + for viewer in KNOWN_VIEWERS: + if os.path.exists(viewer): + self.command = [viewer, "ghelp:%s" % docu] + break + + def check(self): + """check if a viewer is available""" + if self.command == []: + return False + else: + return True + + def run(self): + """open the documentation in the viewer""" + # avoid running the help viewer as root + if os.getuid() == 0 and os.environ.has_key('SUDO_USER'): + self.command = ['sudo', '-u', os.environ['SUDO_USER']] +\ + self.command + subprocess.Popen(self.command) diff --git a/UpdateManager/GtkProgress.py b/UpdateManager/GtkProgress.py index d11ca3e9..54f60384 100644 --- a/UpdateManager/GtkProgress.py +++ b/UpdateManager/GtkProgress.py @@ -26,8 +26,19 @@ import apt import apt_pkg from gettext import gettext as _ +# intervals of the start up progress +# 3x caching and menu creation +STEPS_UPDATE_CACHE = [33, 66, 100] + class GtkOpProgress(apt.OpProgress): - def __init__(self, host_window, progressbar, status, parent): + def __init__(self, host_window, progressbar, status, parent, + steps=STEPS_UPDATE_CACHE): + # used for the "one run progressbar" + self.steps = steps[:] + self.base = 0 + self.old = 0 + self.next = int(self.steps.pop(0)) + self._parent = parent self._window = host_window self._status = status @@ -35,27 +46,32 @@ class GtkOpProgress(apt.OpProgress): # Do not show the close button self._window.realize() host_window.window.set_functions(gtk.gdk.FUNC_MOVE) - #self._progressbar.set_pulse_step(0.01) - #self._progressbar.pulse() self._window.set_transient_for(parent) + def update(self, percent): #print percent #print self.Op #print self.SubOp - # Use pulse until apt doesn't restarts the progress bar - # several times self._window.show() self._parent.set_sensitive(False) + # if the old percent was higher, a new progress was started + if self.old > percent: + # set the borders to the next interval + self.base = self.next + try: + self.next = int(self.steps.pop(0)) + except: + pass + progress = self.base + percent/100 * (self.next - self.base) + self.old = percent self._status.set_markup("<i>%s</i>" % self.op) - self._progressbar.set_fraction(percent/100.0) - #if percent > 99: - # self._progressbar.set_fraction(1) - #else: - # self._progressbar.pulse() + self._progressbar.set_fraction(progress/100.0) while gtk.events_pending(): gtk.main_iteration() + def done(self): self._parent.set_sensitive(True) + def hide(self): self._window.hide() class GtkFetchProgress(apt.progress.FetchProgress): diff --git a/UpdateManager/UpdateManager.py b/UpdateManager/UpdateManager.py index 590391b9..07634d87 100644 --- a/UpdateManager/UpdateManager.py +++ b/UpdateManager/UpdateManager.py @@ -47,6 +47,7 @@ import pwd import time import thread import xml.sax.saxutils +from Common.HelpViewer import HelpViewer from gettext import gettext as _ @@ -283,6 +284,12 @@ class UpdateManager(SimpleGladeApp): opener = urllib2.build_opener(proxy_support) urllib2.install_opener(opener) + # setup the help viewer and disable the help button if there + # is no viewer available + self.help_viewer = HelpViewer("update-manager") + if self.help_viewer.check() == False: + self.button_help.set_sensitive(False) + self.gconfclient = gconf.client_get_default() # restore state self.restore_state() @@ -409,6 +416,7 @@ class UpdateManager(SimpleGladeApp): text_header = "<big><b>"+gettext.ngettext("You can install one update", "You can install %s updates" % len(self.store), len(self.store))+"</b></big>" text_download = _("Download size: %s" % apt_pkg.SizeToStr(self.dl_size)) + self.treeview_update.set_cursor(0) self.expander_details.set_sensitive(True) self.treeview_update.set_sensitive(True) self.button_install.grab_default() @@ -458,10 +466,9 @@ class UpdateManager(SimpleGladeApp): def on_button_reload_clicked(self, widget): #print "on_button_reload_clicked" self.invoke_manager(UPDATE) - self.fillstore() def on_button_help_clicked(self, widget): - subprocess.Popen(["/usr/bin/yelp", "ghelp:update-manager"]) + self.help_viewer.run() def on_button_install_clicked(self, widget): #print "on_button_install_clicked" @@ -649,7 +656,7 @@ class UpdateManager(SimpleGladeApp): # self.gconfclient.set_string("/apps/update-manager/seen_dist",name) #dialog.destroy() self.frame_new_release.show() - self.label_new_release.set_markup("<b>New distribution release codename '%s' available</b>" % upgradable_to.name) + self.label_new_release.set_markup("<b>New distribution release '%s' is available</b>" % upgradable_to.name) self.new_dist = upgradable_to @@ -666,8 +673,8 @@ class UpdateManager(SimpleGladeApp): d.set_markup("<big><b>%s</b></big>\n\n%s" % ( _("Only one software management tool is allowed to " "run at the same time"), - _("Please close the other application e.g. \"aptitude\" " - "or \"Synaptic\" at first."))) + _("Please close the other application e.g. 'aptitude' " + "or 'Synaptic' first."))) print "error from apt: '%s'" % e d.set_title("") res = d.run() @@ -675,10 +682,11 @@ class UpdateManager(SimpleGladeApp): sys.exit() try: - self.cache = MyCache(GtkProgress.GtkOpProgress(self.dialog_cacheprogress, - self.progressbar_cache, - self.label_cache, - self.window_main)) + progress = GtkProgress.GtkOpProgress(self.dialog_cacheprogress, + self.progressbar_cache, + self.label_cache, + self.window_main) + self.cache = MyCache(progress) except AssertionError: # we assert a clean cache msg=("<big><b>%s</b></big>\n\n%s"% \ @@ -695,6 +703,8 @@ class UpdateManager(SimpleGladeApp): dialog.run() dialog.destroy() sys.exit(1) + else: + progress.hide() #apt_pkg.Config.Set("Debug::pkgPolicy","1") #self.depcache = apt_pkg.GetDepCache(self.cache) self.cache._depcache.ReadPinFile() |
