[gnome-software/gnome-3-20] Show a modal dialog when downloading the distro-upgrade failed



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]