[gnome-control-center/gnome-3-8] info: Improve error handling for PackageKit version check



commit 1d91d618bf12ad02108b3a6f52566db92b56cf32
Author: Kalev Lember <kalevlember gmail com>
Date:   Fri Apr 12 22:57:18 2013 +0200

    info: Improve error handling for PackageKit version check
    
    Fixes critical errors when PackageKit isn't installed.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=697821

 panels/info/cc-info-panel.c | 36 ++++++++++++++++++++++++++----------
 1 file changed, 26 insertions(+), 10 deletions(-)
---
diff --git a/panels/info/cc-info-panel.c b/panels/info/cc-info-panel.c
index 1a8bc41..8a775a5 100644
--- a/panels/info/cc-info-panel.c
+++ b/panels/info/cc-info-panel.c
@@ -1758,13 +1758,28 @@ on_updates_button_clicked (GtkWidget   *widget,
     }
 }
 
+static gboolean
+get_pk_version_property (GDBusProxy *pk_proxy,
+                         const char *property,
+                         guint32 *retval)
+{
+  GVariant *v;
+
+  v = g_dbus_proxy_get_cached_property (pk_proxy, property);
+  if (!v)
+    return FALSE;
+
+  g_variant_get (v, "u", retval);
+  g_variant_unref (v);
+  return TRUE;
+}
+
 static void
 got_pk_proxy_cb (GObject *source_object,
                 GAsyncResult *res,
                 CcInfoPanel *self)
 {
   GError *error = NULL;
-  GVariant *v;
   guint32 major, minor, micro;
 
   self->priv->pk_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
@@ -1778,15 +1793,16 @@ got_pk_proxy_cb (GObject *source_object,
       return;
     }
 
-  v = g_dbus_proxy_get_cached_property (self->priv->pk_proxy, "VersionMajor");
-  g_variant_get (v, "u", &major);
-  g_variant_unref (v);
-  v = g_dbus_proxy_get_cached_property (self->priv->pk_proxy, "VersionMinor");
-  g_variant_get (v, "u", &minor);
-  g_variant_unref (v);
-  v = g_dbus_proxy_get_cached_property (self->priv->pk_proxy, "VersionMicro");
-  g_variant_get (v, "u", &micro);
-  g_variant_unref (v);
+  if (!get_pk_version_property(self->priv->pk_proxy, "VersionMajor", &major) ||
+      !get_pk_version_property(self->priv->pk_proxy, "VersionMinor", &minor) ||
+      !get_pk_version_property(self->priv->pk_proxy, "VersionMicro", &micro))
+    {
+      g_warning ("Unable to get PackageKit version");
+      g_clear_object (&self->priv->pk_proxy);
+      self->priv->updates_state = PK_NOT_AVAILABLE;
+      refresh_update_button (self);
+      return;
+    }
 
   if (major != 0 || minor != 8)
     {


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