[gnome-software/gnome-3-20] Show a modal dialog when downloading the distro-upgrade failed
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software/gnome-3-20] Show a modal dialog when downloading the distro-upgrade failed
- Date: Fri, 22 Apr 2016 17:17:38 +0000 (UTC)
commit 80fc3d49147ca4fa27ddc5cea70011fd55067e07
Author: Richard Hughes <richard hughsie com>
Date: Fri Apr 22 12:36:46 2016 +0100
Show a modal dialog when downloading the distro-upgrade failed
src/gs-shell-updates.c | 51 ++++++++++++++++++++++++++++++++++++++++++++---
src/gs-utils.c | 1 +
2 files changed, 48 insertions(+), 4 deletions(-)
---
diff --git a/src/gs-shell-updates.c b/src/gs-shell-updates.c
index 7f51330..8bc514d 100644
--- a/src/gs-shell-updates.c
+++ b/src/gs-shell-updates.c
@@ -988,16 +988,54 @@ gs_shell_updates_button_update_all_cb (GtkButton *button,
self);
}
+typedef struct {
+ GsApp *app;
+ GsShellUpdates *self;
+} GsPageHelper;
+
+static void
+gs_page_helper_free (GsPageHelper *helper)
+{
+ if (helper->app != NULL)
+ g_object_unref (helper->app);
+ if (helper->self != NULL)
+ g_object_unref (helper->self);
+ g_slice_free (GsPageHelper, helper);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GsPageHelper, gs_page_helper_free);
+
static void
upgrade_download_finished_cb (GObject *source,
GAsyncResult *res,
gpointer user_data)
{
- GsShellUpdates *self = (GsShellUpdates *) user_data;
+ GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source);
+ GError *last_error;
g_autoptr(GError) error = NULL;
+ g_autoptr(GsPageHelper) helper = (GsPageHelper *) user_data;
- if (!gs_plugin_loader_app_action_finish (self->plugin_loader, res, &error)) {
- g_warning ("failed to download upgrade: %s", error->message);
+ if (!gs_plugin_loader_app_action_finish (plugin_loader, res, &error)) {
+ g_warning ("failed to upgrade-download: %s", error->message);
+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ return;
+ gs_app_notify_failed_modal (helper->app,
+ gs_shell_get_window (helper->self->shell),
+ GS_PLUGIN_LOADER_ACTION_UPGRADE_DOWNLOAD,
+ error);
+ return;
+ }
+
+ /* non-fatal error */
+ last_error = gs_app_get_last_error (helper->app);
+ if (last_error != NULL) {
+ g_warning ("failed to upgrade-download %s: %s",
+ gs_app_get_id (helper->app),
+ last_error->message);
+ gs_app_notify_failed_modal (helper->app,
+ gs_shell_get_window (helper->self->shell),
+ GS_PLUGIN_LOADER_ACTION_UPGRADE_DOWNLOAD,
+ last_error);
return;
}
}
@@ -1007,6 +1045,7 @@ gs_shell_updates_upgrade_download_cb (GsUpgradeBanner *upgrade_banner,
GsShellUpdates *self)
{
GsApp *app;
+ GsPageHelper *helper;
app = gs_upgrade_banner_get_app (upgrade_banner);
if (app == NULL) {
@@ -1014,6 +1053,10 @@ gs_shell_updates_upgrade_download_cb (GsUpgradeBanner *upgrade_banner,
return;
}
+ helper = g_slice_new0 (GsPageHelper);
+ helper->app = g_object_ref (app);
+ helper->self = g_object_ref (self);
+
if (self->cancellable_upgrade_download != NULL)
g_object_unref (self->cancellable_upgrade_download);
self->cancellable_upgrade_download = g_cancellable_new ();
@@ -1022,7 +1065,7 @@ gs_shell_updates_upgrade_download_cb (GsUpgradeBanner *upgrade_banner,
GS_PLUGIN_LOADER_ACTION_UPGRADE_DOWNLOAD,
self->cancellable_upgrade_download,
upgrade_download_finished_cb,
- self);
+ helper);
}
static void
diff --git a/src/gs-utils.c b/src/gs-utils.c
index 634389e..e7b1fbe 100644
--- a/src/gs-utils.c
+++ b/src/gs-utils.c
@@ -171,6 +171,7 @@ gs_app_notify_failed_modal (GsApp *app,
msg = g_string_new ("");
switch (action) {
case GS_PLUGIN_LOADER_ACTION_INSTALL:
+ case GS_PLUGIN_LOADER_ACTION_UPGRADE_DOWNLOAD:
/* TRANSLATORS: this is when the install fails */
g_string_append_printf (msg, _("Installation of %s failed."),
gs_app_get_name (app));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]