[gnome-builder] flatpak: try to be more clever about flatpak transfer title



commit 4d296f0329c2b6586cf082b2c51639f48a7a0f16
Author: Christian Hergert <chergert redhat com>
Date:   Sat Feb 18 14:56:32 2017 -0800

    flatpak: try to be more clever about flatpak transfer title
    
    This tries to track a little more closely the title based on install,
    update, and if the transfer is active.

 plugins/flatpak/gbp-flatpak-transfer.c |   92 +++++++++++++++++++++++++++++---
 1 files changed, 84 insertions(+), 8 deletions(-)
---
diff --git a/plugins/flatpak/gbp-flatpak-transfer.c b/plugins/flatpak/gbp-flatpak-transfer.c
index 7643bbf..7dc12f4 100644
--- a/plugins/flatpak/gbp-flatpak-transfer.c
+++ b/plugins/flatpak/gbp-flatpak-transfer.c
@@ -32,8 +32,12 @@ struct _GbpFlatpakTransfer
   gchar       *arch;
   gchar       *branch;
   gchar       *status;
+  gchar       *title;
   gdouble      progress;
+  guint        has_runtime : 1;
   guint        force_update : 1;
+  guint        finished : 1;
+  guint        failed : 1;
 };
 
 enum {
@@ -57,6 +61,41 @@ G_DEFINE_TYPE_WITH_CODE (GbpFlatpakTransfer, gbp_flatpak_transfer, G_TYPE_OBJECT
 static GParamSpec *properties [N_PROPS];
 
 static void
+gbp_flatpak_transfer_update_title (GbpFlatpakTransfer *self)
+{
+  GString *str;
+
+  g_return_if_fail (GBP_IS_FLATPAK_TRANSFER (self));
+
+  str = g_string_new (NULL);
+
+  if (!self->failed)
+    {
+      if (self->has_runtime)
+        {
+          if (self->finished)
+            g_string_append (str, _("Updated "));
+          else
+            g_string_append (str, _("Updating "));
+        }
+      else
+        {
+          if (self->finished)
+            g_string_append (str, _("Installed "));
+          else
+            g_string_append (str, _("Installing "));
+        }
+    }
+
+  g_string_append_printf (str, "%s %s", self->id, self->branch);
+
+  g_free (self->title);
+  self->title = g_string_free (str, FALSE);
+
+  g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_TITLE]);
+}
+
+static void
 proxy_notify (GbpFlatpakTransfer *self,
               GParamSpec         *pspec,
               IdeProgress        *progress)
@@ -102,6 +141,19 @@ gbp_flatpak_transfer_execute_cb (GObject      *object,
 }
 
 static void
+task_completed (GbpFlatpakTransfer *self,
+                GParamSpec         *pspec,
+                GTask              *task)
+{
+  g_assert (GBP_IS_FLATPAK_TRANSFER (self));
+  g_assert (G_IS_TASK (task));
+
+  self->finished = TRUE;
+  gbp_flatpak_transfer_update_title (self);
+  g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_STATUS]);
+}
+
+static void
 gbp_flatpak_transfer_execute_async (IdeTransfer         *transfer,
                                     GCancellable        *cancellable,
                                     GAsyncReadyCallback  callback,
@@ -120,14 +172,26 @@ gbp_flatpak_transfer_execute_async (IdeTransfer         *transfer,
   task = g_task_new (self, cancellable, callback, user_data);
   g_task_set_source_tag (task, gbp_flatpak_transfer_execute_async);
 
+  g_signal_connect_object (task,
+                           "notify::completed",
+                           G_CALLBACK (task_completed),
+                           self,
+                           G_CONNECT_SWAPPED);
+
   addin = gbp_flatpak_application_addin_get_default ();
 
-  if (gbp_flatpak_application_addin_has_runtime (addin, self->id, self->arch, self->branch) && 
!self->force_update)
+  self->failed = FALSE;
+  self->finished = FALSE;
+  self->has_runtime = gbp_flatpak_application_addin_has_runtime (addin, self->id, self->arch, self->branch);
+
+  if (self->has_runtime && !self->force_update)
     {
       g_task_return_boolean (task, TRUE);
       IDE_EXIT;
     }
 
+  gbp_flatpak_transfer_update_title (self);
+
   gbp_flatpak_application_addin_install_runtime_async (addin,
                                                        self->id,
                                                        self->arch,
@@ -157,15 +221,22 @@ gbp_flatpak_transfer_execute_finish (IdeTransfer   *transfer,
                                      GAsyncResult  *result,
                                      GError       **error)
 {
+  GbpFlatpakTransfer *self = (GbpFlatpakTransfer *)transfer;
   gboolean ret;
 
   IDE_ENTRY;
 
-  g_assert (GBP_IS_FLATPAK_TRANSFER (transfer));
+  g_assert (GBP_IS_FLATPAK_TRANSFER (self));
   g_assert (G_IS_TASK (result));
 
   ret = g_task_propagate_boolean (G_TASK (result), error);
 
+  if (ret == FALSE)
+    {
+      self->failed = TRUE;
+      gbp_flatpak_transfer_update_title (self);
+    }
+
   IDE_RETURN (ret);
 }
 
@@ -186,6 +257,8 @@ gbp_flatpak_transfer_finalize (GObject *object)
   g_clear_pointer (&self->id, g_free);
   g_clear_pointer (&self->arch, g_free);
   g_clear_pointer (&self->branch, g_free);
+  g_clear_pointer (&self->title, g_free);
+  g_clear_pointer (&self->status, g_free);
 
   G_OBJECT_CLASS (gbp_flatpak_transfer_parent_class)->finalize (object);
 
@@ -203,15 +276,18 @@ gbp_flatpak_transfer_get_property (GObject    *object,
   switch (prop_id)
     {
     case PROP_STATUS:
-      g_value_set_string (value, self->status);
+      if (self->failed)
+        g_value_set_static_string (value, _("Failed to install runtime"));
+      else if (self->finished && self->has_runtime)
+        g_value_set_static_string (value, _("Runtime has been updated"));
+      else if (self->finished)
+        g_value_set_static_string (value, _("Runtime has been installed"));
+      else
+        g_value_set_string (value, self->status);
       break;
 
     case PROP_TITLE:
-      if (g_str_equal (self->arch, flatpak_get_default_arch ()))
-        g_value_take_string (value, g_strdup_printf (_("Installing %s %s"), self->id, self->branch));
-      else
-        g_value_take_string (value, g_strdup_printf (_("Installing %s %s for %s"),
-                                                     self->id, self->branch, self->arch));
+      g_value_set_string (value, self->title);
       break;
 
     case PROP_ICON_NAME:


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]