summaryrefslogtreecommitdiff
path: root/UpdateManager
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2006-03-20 11:14:55 +0100
committerMichael Vogt <michael.vogt@ubuntu.com>2006-03-20 11:14:55 +0100
commit56fa71590be9df25acc234df153412ef68a30ae2 (patch)
tree8dcfba75b423316e15ec68e62433e918e3ce97fe /UpdateManager
parent011227402396588da9688bec6dc0fdb9271bfef9 (diff)
parent2fffae540e57f3afce498bbc5f62657a889a429f (diff)
downloadpython-apt-56fa71590be9df25acc234df153412ef68a30ae2.tar.gz
* merged from the laptop branch
Diffstat (limited to 'UpdateManager')
-rw-r--r--UpdateManager/Common/HelpViewer.py33
-rw-r--r--UpdateManager/GtkProgress.py36
-rw-r--r--UpdateManager/UpdateManager.py28
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()