diff options
| author | Michael Vogt <michael.vogt@ubuntu.com> | 2006-02-20 15:59:34 +0100 |
|---|---|---|
| committer | Michael Vogt <michael.vogt@ubuntu.com> | 2006-02-20 15:59:34 +0100 |
| commit | e5141921e05f57aaef3a0195171960871345fbfa (patch) | |
| tree | b8a0d51b48a27ffb9350ddf6b01d02528924acfb /DistUpgrade | |
| parent | 92515fd2901336f8f5dccef140dc58de26c954ae (diff) | |
| parent | d87c4020340ed0c869346c5b569a3b2e261b7be2 (diff) | |
| download | python-apt-e5141921e05f57aaef3a0195171960871345fbfa.tar.gz | |
* merged with sebi
* updated pt_BR translation
Diffstat (limited to 'DistUpgrade')
| -rw-r--r-- | DistUpgrade/DistUpgrade.glade | 309 | ||||
| -rw-r--r-- | DistUpgrade/DistUpgradeControler.py | 37 | ||||
| -rw-r--r-- | DistUpgrade/DistUpgradeViewGtk.py | 89 |
3 files changed, 315 insertions, 120 deletions
diff --git a/DistUpgrade/DistUpgrade.glade b/DistUpgrade/DistUpgrade.glade index 5b59fb4d..c28b20ad 100644 --- a/DistUpgrade/DistUpgrade.glade +++ b/DistUpgrade/DistUpgrade.glade @@ -12,7 +12,6 @@ <property name="modal">False</property> <property name="resizable">False</property> <property name="destroy_with_parent">False</property> - <property name="icon">update-manager.png</property> <property name="decorated">True</property> <property name="skip_taskbar_hint">False</property> <property name="skip_pager_hint">False</property> @@ -293,6 +292,7 @@ <widget class="GtkImage" id="image_step5"> <property name="width_request">18</property> <property name="height_request">18</property> + <property name="visible">True</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> <property name="xpad">0</property> @@ -309,7 +309,8 @@ <child> <widget class="GtkLabel" id="label_step5"> - <property name="label" translatable="yes"></property> + <property name="visible">True</property> + <property name="label" translatable="yes">Restarting the system</property> <property name="use_underline">False</property> <property name="use_markup">False</property> <property name="justify">GTK_JUSTIFY_LEFT</property> @@ -519,7 +520,7 @@ <property name="layout_style">GTK_BUTTONBOX_END</property> <child> - <widget class="GtkButton" id="button_changes_ok"> + <widget class="GtkButton" id="button_cancel"> <property name="visible">True</property> <property name="can_default">True</property> <property name="can_focus">True</property> @@ -532,11 +533,11 @@ </child> <child> - <widget class="GtkButton" id="button2"> + <widget class="GtkButton" id="button_start"> <property name="visible">True</property> <property name="can_default">True</property> <property name="can_focus">True</property> - <property name="label">_Continue</property> + <property name="label">_Start Upgrade</property> <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> @@ -553,106 +554,70 @@ </child> <child> - <widget class="GtkVBox" id="vbox3"> + <widget class="GtkHBox" id="hbox12"> <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="label_summary"> - <property name="visible">True</property> - <property name="label" translatable="yes"></property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">True</property> - <property name="selectable">False</property> - <property name="xalign">0</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> + <property name="spacing">12</property> <child> - <widget class="GtkLabel" id="label_changes"> + <widget class="GtkImage" id="image9"> <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="stock">gtk-dialog-question</property> + <property name="icon_size">6</property> <property name="xalign">0</property> - <property name="yalign">0.5</property> + <property name="yalign">0</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> + <property name="fill">True</property> </packing> </child> <child> - <widget class="GtkExpander" id="expander1"> + <widget class="GtkVBox" id="vbox3"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="expanded">False</property> - <property name="spacing">0</property> + <property name="homogeneous">False</property> + <property name="spacing">12</property> <child> - <widget class="GtkScrolledWindow" id="scrolledwindow1"> - <property name="width_request">400</property> - <property name="height_request">200</property> + <widget class="GtkLabel" id="label_summary"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_IN</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <widget class="GtkTreeView" id="treeview_details"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">False</property> - <property name="rules_hint">False</property> - <property name="reorderable">False</property> - <property name="enable_search">True</property> - <property name="fixed_height_mode">False</property> - <property name="hover_selection">False</property> - <property name="hover_expand">False</property> - </widget> - </child> + <property name="label" translatable="yes"></property> + <property name="use_underline">False</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">True</property> + <property name="selectable">False</property> + <property name="xalign">0</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="GtkLabel" id="label4"> + <widget class="GtkLabel" id="label_changes"> <property name="visible">True</property> - <property name="label" translatable="yes">Details</property> + <property name="label" translatable="yes"></property> <property name="use_underline">False</property> - <property name="use_markup">False</property> + <property name="use_markup">True</property> <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> + <property name="wrap">True</property> <property name="selectable">False</property> - <property name="xalign">0.5</property> + <property name="xalign">0</property> <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> @@ -662,7 +627,73 @@ <property name="angle">0</property> </widget> <packing> - <property name="type">label_item</property> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkExpander" id="expander_details"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="expanded">False</property> + <property name="spacing">6</property> + + <child> + <widget class="GtkScrolledWindow" id="scrolledwindow1"> + <property name="width_request">400</property> + <property name="height_request">200</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="shadow_type">GTK_SHADOW_IN</property> + <property name="window_placement">GTK_CORNER_TOP_LEFT</property> + + <child> + <widget class="GtkTreeView" id="treeview_details"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="headers_visible">False</property> + <property name="rules_hint">False</property> + <property name="reorderable">False</property> + <property name="enable_search">True</property> + <property name="fixed_height_mode">False</property> + <property name="hover_selection">False</property> + <property name="hover_expand">False</property> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="label" translatable="yes">Details</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> @@ -1285,4 +1316,128 @@ This is you last chance to cancel the upgrade.</property> </child> </widget> +<widget class="GtkDialog" id="dialog_cancel"> + <property name="border_width">6</property> + <property name="title" translatable="yes"></property> + <property name="type">GTK_WINDOW_TOPLEVEL</property> + <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property> + <property name="modal">False</property> + <property name="resizable">False</property> + <property name="destroy_with_parent">False</property> + <property name="decorated">True</property> + <property name="skip_taskbar_hint">True</property> + <property name="skip_pager_hint">True</property> + <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> + <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> + <property name="focus_on_map">True</property> + <property name="urgency_hint">True</property> + <property name="has_separator">False</property> + + <child internal-child="vbox"> + <widget class="GtkVBox" id="vbox11"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">12</property> + + <child internal-child="action_area"> + <widget class="GtkHButtonBox" id="hbuttonbox5"> + <property name="visible">True</property> + <property name="layout_style">GTK_BUTTONBOX_END</property> + + <child> + <widget class="GtkButton" id="button_cancel"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label">_Cancel Upgrade</property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <property name="response_id">-6</property> + </widget> + </child> + + <child> + <widget class="GtkButton" id="button_resume"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="has_default">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">_Resume Upgrade</property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <property name="response_id">-5</property> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="pack_type">GTK_PACK_END</property> + </packing> + </child> + + <child> + <widget class="GtkHBox" id="hbox11"> + <property name="border_width">6</property> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">12</property> + + <child> + <widget class="GtkImage" id="image8"> + <property name="visible">True</property> + <property name="stock">gtk-dialog-question</property> + <property name="icon_size">6</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label29"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b><big>Cancel the running upgrade?</big></b> + +The system could be in an unusable state if you cancel the upgrade. You are strongly adviced to resume the upgrade.</property> + <property name="use_underline">False</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">True</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0</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> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + </widget> + </child> +</widget> + </glade-interface> diff --git a/DistUpgrade/DistUpgradeControler.py b/DistUpgrade/DistUpgradeControler.py index 9fa717fe..6dcc0e2a 100644 --- a/DistUpgrade/DistUpgradeControler.py +++ b/DistUpgrade/DistUpgradeControler.py @@ -187,13 +187,16 @@ class DistUpgradeControler(object): st = os.statvfs(archivedir) free = st[statvfs.F_BAVAIL]*st[statvfs.F_FRSIZE] if self.cache.requiredDownload > free: - self._view.error(_("Not enough free space"), - _("There is not enough free space on your " - "system to download the required pacakges. " - "Please free some space before trying again " - "with e.g. 'sudo apt-get clean'")) - return False - res = self._view.confirmChanges(_("Perform Upgrade?"),changes, + free_at_least = apt_pkg.SizeToStr(self.cache.requiredDownload-free) + self._view.error(_("Not enough free disk space"), + _("The upgrade aborts now. " + "Please free at least %s of disk space. " + "Empty your trash and remove temporary " + "packages of former installations using " + "'sudo apt-get clean'." % free_at_least )) + return False + res = self._view.confirmChanges(_("Do you want to start the upgrade?"), + changes, self.cache.requiredDownload) return res @@ -208,12 +211,11 @@ class DistUpgradeControler(object): res = self.cache.commit(fprogress,iprogress) except SystemError, e: # installing the packages failed, can't be retried - self._view.error(_("Error during commit"), - _("Some problem occured during the upgrade. " - "Most likely packages failed to install. " - "Try 'sudo apt-get install -f' or synaptic " - "to fix your system."), - "%s" % e) + self._view.error(_("Could not install the upgrades"), + _("The upgrade aborts now. Your system " + "can be in an unusable state. Please " + "try 'sudo apt-get install -f' or Synaptic " + "to fix your system."), "%s" % e) return False except IOError, e: # fetch failed, will be retried @@ -225,11 +227,10 @@ class DistUpgradeControler(object): # maximum fetch-retries reached without a successful commit logging.debug("giving up on fetching after maximum retries") - self._view.error(_("Error fetching the packages"), - _("Some problem occured during the fetching " - "of the packages. This is most likely a network " - "problem. Please check your network and try " - "again. "), + self._view.error(_("Could not download the upgrades"), + _("The upgrade aborts now. Please check your "\ + "internet connection or "\ + "installation media and try again. "), "%s" % e) # abort here because we want our sources.list back self.abort() diff --git a/DistUpgrade/DistUpgradeViewGtk.py b/DistUpgrade/DistUpgradeViewGtk.py index 014efbd5..9bd55d24 100644 --- a/DistUpgrade/DistUpgradeViewGtk.py +++ b/DistUpgrade/DistUpgradeViewGtk.py @@ -39,6 +39,7 @@ from apt.progress import InstallProgress from DistUpgradeView import DistUpgradeView from UpdateManager.Common.SimpleGladeApp import SimpleGladeApp, bindtextdomain +import gettext from gettext import gettext as _ def utf8(str): @@ -74,7 +75,7 @@ class GtkFetchProgressAdapter(apt.progress.FetchProgress): def mediaChange(self, medium, drive): #print "mediaChange %s %s" % (medium, drive) msg = _("Please insert '%s' into the drive '%s'" % (medium,drive)) - dialog = gtk.MessageDialog(parent=self.main, + dialog = gtk.MessageDialog(parent=self.window_main, flags=gtk.DIALOG_MODAL, type=gtk.MESSAGE_QUESTION, buttons=gtk.BUTTONS_OK_CANCEL) @@ -140,17 +141,20 @@ class GtkInstallProgressAdapter(InstallProgress): "APT_LISTCHANGES_FRONTEND=none"] def error(self, pkg, errormsg): - logging.error("got a error from dpkg for pkg: '%s': '%s'" % (pkg, errormsg)) + logging.error("got an error from dpkg for pkg: '%s': '%s'" % (pkg, errormsg)) #self.expander_terminal.set_expanded(True) self.parent.dialog_error.set_transient_for(self.parent.window_main) summary = _("Could not install '%s'" % pkg) - msg = _("The upgrade will abort. Please report the bug.") + msg = _("The upgrade aborts now. Please report this bug.") markup="<big><b>%s</b></big>\n\n%s" % (summary, msg) + self.parent.dialog_error.realize() + self.parent.dialog_error.window.set_functions(gtk.gdk.FUNC_MOVE) self.parent.label_error.set_markup(markup) self.parent.textview_error.get_buffer().set_text(utf8(errormsg)) self.parent.scroll_error.show() self.parent.dialog_error.run() self.parent.dialog_error.hide() + def conffile(self, current, new): logging.debug("got a conffile-prompt from dpkg for file: '%s'" % current) self.expander.set_expanded(True) @@ -184,9 +188,13 @@ class DistUpgradeViewGtk(DistUpgradeView,SimpleGladeApp): # FIXME: i18n must be somewhere relative do this dir bindtextdomain("update-manager",os.path.join(os.getcwd(),"mo")) + icons = gtk.icon_theme_get_default() + gtk.window_set_default_icon(icons.load_icon("update-manager", 32, 0)) SimpleGladeApp.__init__(self, "DistUpgrade.glade", None, domain="update-manager") self.window_main.set_keep_above(True) + self.window_main.realize() + self.window_main.window.set_functions(gtk.gdk.FUNC_MOVE) self._opCacheProgress = GtkOpProgress(self.progressbar_cache) self._fetchProgress = GtkFetchProgressAdapter(self) self._installProgress = GtkInstallProgressAdapter(self) @@ -216,10 +224,9 @@ class DistUpgradeViewGtk(DistUpgradeView,SimpleGladeApp): lines = traceback.format_exception(type, value, tb) logging.error("not handled expection:\n%s" % "\n".join(lines)) self.error(_("A fatal error occured"), - _("During the operation a fatal error occured. " - "Please report this as a bug and include the " + _("Please report this as a bug and include the " "files ~/dist-upgrade.log and ~/dist-upgrade-apt.log " - "in your report. The upgrade will abort now. "), + "in your report. The upgrade aborts now. "), "\n".join(lines)) def create_terminal(self, arg1,arg2,arg3,arg4): @@ -282,8 +289,9 @@ class DistUpgradeViewGtk(DistUpgradeView,SimpleGladeApp): self.scroll_error.show() else: self.scroll_error.hide() + self.dialog_error.realize() + self.dialog_error.window.set_functions(gtk.gdk.FUNC_MOVE) self.dialog_error.run() - self.dialog_error.show() self.dialog_error.destroy() return False @@ -291,24 +299,51 @@ class DistUpgradeViewGtk(DistUpgradeView,SimpleGladeApp): # FIXME: add a whitelist here for packages that we expect to be # removed (how to calc this automatically?) DistUpgradeView.confirmChanges(self, summary, changes, downloadSize) + pkgs_remove = len(self.toRemove) + pkgs_inst = len(self.toInstall) + pkgs_upgrade = len(self.toUpgrade) + msg = "" + + if pkgs_remove > 0: + msg += gettext.ngettext("%s package is going to be removed." %\ + pkgs_remove, + "%s packages are going to be removed." %\ + pkgs_remove, pkgs_remove) + msg +=" " + if pkgs_inst > 0: + msg += gettext.ngettext("%s new package is going to be "\ + "installed." % pkgs_inst, + "%s new packages are going to be "\ + "installed." % pkgs_inst, pkgs_inst) + msg +=" " + if pkgs_upgrade > 0: + msg += gettext.ngettext("%s package is going to be upgraded." %\ + pkgs_upgrade, + "%s packages are going to be upgraded." %\ + pkgs_upgrade, pkgs_upgrade) + msg +=" " + if msg == "": + # FIXME: this should go into DistUpgradeController + summary = _("Could not find any upgrades") + msg = _("Your system has already been upgraded.") + self.error(summary, msg) + return False + else: + msg += _("You have to download a total of %s." %\ + apt_pkg.SizeToStr(downloadSize)) self.label_summary.set_markup("<big><b>%s</b></big>" % summary) - msg = _("%s packages are going to be removed.\n" - "%s packages are going to be newly installed.\n" - "%s packages are going to be upgraded.\n\n" - "%s needs to be fetched" % (len(self.toRemove), - len(self.toInstall), - len(self.toUpgrade), - apt_pkg.SizeToStr(downloadSize))) self.label_changes.set_text(msg) # fill in the details self.details_list.clear() for rm in self.toRemove: - self.details_list.append([_("<b>To be removed: %s</b>" % rm)]) + self.details_list.append([_("<b>Remove %s</b>" % rm)]) for inst in self.toInstall: - self.details_list.append([_("To be installed: %s" % inst)]) + self.details_list.append([_("Install %s" % inst)]) for up in self.toUpgrade: - self.details_list.append([_("To be upgraded: %s" % up)]) + self.details_list.append([_("Upgrade %s" % up)]) self.dialog_changes.set_transient_for(self.window_main) + self.dialog_changes.realize() + self.dialog_changes.window.set_functions(gtk.gdk.FUNC_MOVE) res = self.dialog_changes.run() self.dialog_changes.hide() if res == gtk.RESPONSE_YES: @@ -330,6 +365,8 @@ class DistUpgradeViewGtk(DistUpgradeView,SimpleGladeApp): def confirmRestart(self): self.dialog_restart.set_transient_for(self.window_main) + self.dialog_restart.realize() + self.dialog_restart.window.set_functions(gtk.gdk.FUNC_MOVE) res = self.dialog_restart.run() self.dialog_restart.hide() if res == gtk.RESPONSE_YES: @@ -337,14 +374,16 @@ class DistUpgradeViewGtk(DistUpgradeView,SimpleGladeApp): return False def on_window_main_delete_event(self, widget, event): - #print "on_window_main_delete_event()" - summary = _("Are you sure you want cancel?") - msg = _("Canceling during a upgrade can leave the system in a " - "unstable state. It is strongly adviced to continue " - "the operation. ") - if self.askYesNoQuestion(summary, msg): - self.exit(1) - return True + self.dialog_cancel.set_transient_for(self.window_main) + self.dialog_cancel.realize() + self.dialog_cancel.window.set_functions(gtk.gdk.FUNC_MOVE) + res = self.dialog_cancel.run() + self.dialog_cancel.hide() + if res == gtk.RESPONSE_CANCEL: + #FIXME: this does not work correctly and leaves a stalled + # dist-upgrade.py process + self.destroy() + return True if __name__ == "__main__": view = GtkDistUpgradeView() |
