[Pkg-telepathy-commits] [telepathy-mission-control-6] 97/280: mcd_keyfile_set_value: implement in terms of a new mcd_keyfile_set_variant

Simon McVittie smcv at debian.org
Thu Mar 27 20:07:10 UTC 2014


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to branch debian
in repository telepathy-mission-control-6.

commit 0c9e4d546b48416dfc2a433f5a49249fa09c025a
Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Wed Sep 12 14:46:48 2012 +0100

    mcd_keyfile_set_value: implement in terms of a new mcd_keyfile_set_variant
    
    Bug: https://bugs.freedesktop.org/show_bug.cgi?id=54874
    Reviewed-by: Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>
---
 src/mcd-storage.c | 133 +++++++++++++++++++++++++++++++++++++++---------------
 src/mcd-storage.h |   4 ++
 2 files changed, 100 insertions(+), 37 deletions(-)

diff --git a/src/mcd-storage.c b/src/mcd-storage.c
index 44f77b5..337d946 100644
--- a/src/mcd-storage.c
+++ b/src/mcd-storage.c
@@ -1872,6 +1872,44 @@ mcd_keyfile_set_value (GKeyFile *keyfile,
 
   if (value == NULL)
     {
+      return mcd_keyfile_set_variant (keyfile, name, key, NULL);
+    }
+  else
+    {
+      GVariant *variant = dbus_g_value_build_g_variant (value);
+      gboolean ret;
+
+      g_variant_ref_sink (variant);
+      ret = mcd_keyfile_set_variant (keyfile, name, key, variant);
+      g_variant_unref (variant);
+      return ret;
+    }
+}
+
+/*
+ * mcd_keyfile_set_variant:
+ * @keyfile: a keyfile
+ * @name: the name of a group
+ * @key: the key in the group
+ * @value: the value to be stored (or %NULL to erase it)
+ *
+ * Escape @variant and store it in the keyfile.
+ *
+ * Returns: %TRUE if the keyfile actually changed,
+ * so that the caller can decide whether to request a commit to
+ * long term storage or not.
+ */
+gboolean
+mcd_keyfile_set_variant (GKeyFile *keyfile,
+    const gchar *name,
+    const gchar *key,
+    GVariant *value)
+{
+  g_return_val_if_fail (name != NULL, FALSE);
+  g_return_val_if_fail (key != NULL, FALSE);
+
+  if (value == NULL)
+    {
       gchar *old = g_key_file_get_value (keyfile, name, key, NULL);
       gboolean updated = (old != NULL);
 
@@ -1886,75 +1924,88 @@ mcd_keyfile_set_value (GKeyFile *keyfile,
       gchar *new = NULL;
       gchar *buf = NULL;
 
-      switch (G_VALUE_TYPE (value))
+      switch (g_variant_classify (value))
         {
-          case G_TYPE_STRING:
+          case G_VARIANT_CLASS_STRING:
+          case G_VARIANT_CLASS_OBJECT_PATH:
+          case G_VARIANT_CLASS_SIGNATURE:
             g_key_file_set_string (keyfile, name, key,
-                g_value_get_string (value));
+                g_variant_get_string (value, NULL));
+            break;
+
+          case G_VARIANT_CLASS_UINT16:
+            buf = g_strdup_printf ("%u", g_variant_get_uint16 (value));
             break;
 
-          case G_TYPE_UINT:
-            buf = g_strdup_printf ("%u", g_value_get_uint (value));
+          case G_VARIANT_CLASS_UINT32:
+            buf = g_strdup_printf ("%u", g_variant_get_uint32 (value));
             break;
 
-          case G_TYPE_INT:
-            g_key_file_set_integer (keyfile, name, key,
-                g_value_get_int (value));
+          case G_VARIANT_CLASS_INT16:
+            buf = g_strdup_printf ("%d", g_variant_get_int16 (value));
             break;
 
-          case G_TYPE_BOOLEAN:
+          case G_VARIANT_CLASS_INT32:
+            buf = g_strdup_printf ("%d", g_variant_get_int32 (value));
+            break;
+
+          case G_VARIANT_CLASS_BOOLEAN:
             g_key_file_set_boolean (keyfile, name, key,
-                g_value_get_boolean (value));
+                g_variant_get_boolean (value));
             break;
 
-          case G_TYPE_UCHAR:
-            buf = g_strdup_printf ("%u", g_value_get_uchar (value));
+          case G_VARIANT_CLASS_BYTE:
+            buf = g_strdup_printf ("%u", g_variant_get_byte (value));
             break;
 
-          case G_TYPE_UINT64:
+          case G_VARIANT_CLASS_UINT64:
             buf = g_strdup_printf ("%" G_GUINT64_FORMAT,
-                                   g_value_get_uint64 (value));
+                                   g_variant_get_uint64 (value));
             break;
 
-          case G_TYPE_INT64:
+          case G_VARIANT_CLASS_INT64:
             buf = g_strdup_printf ("%" G_GINT64_FORMAT,
-                                   g_value_get_int64 (value));
+                                   g_variant_get_int64 (value));
             break;
 
-          case G_TYPE_DOUBLE:
+          case G_VARIANT_CLASS_DOUBLE:
             g_key_file_set_double (keyfile, name, key,
-                g_value_get_double (value));
+                g_variant_get_double (value));
             break;
 
-          default:
-            if (G_VALUE_HOLDS (value, G_TYPE_STRV))
+          case G_VARIANT_CLASS_ARRAY:
+            if (g_variant_is_of_type (value, G_VARIANT_TYPE_STRING_ARRAY))
               {
-                gchar **strings = g_value_get_boxed (value);
+                gsize len;
+                const gchar **strings = g_variant_get_strv (value, &len);
 
-                g_key_file_set_string_list (keyfile, name, key,
-                    (const gchar **)strings,
-                    g_strv_length (strings));
+                g_key_file_set_string_list (keyfile, name, key, strings, len);
               }
-            else if (G_VALUE_HOLDS (value, DBUS_TYPE_G_OBJECT_PATH))
+            else if (g_variant_is_of_type (value,
+                  G_VARIANT_TYPE_OBJECT_PATH_ARRAY))
               {
-                g_key_file_set_string (keyfile, name, key,
-                    g_value_get_boxed (value));
+                gsize len;
+                const gchar **strings = g_variant_get_objv (value, &len);
+
+                g_key_file_set_string_list (keyfile, name, key, strings, len);
               }
-            else if (G_VALUE_HOLDS (value, TP_ARRAY_TYPE_OBJECT_PATH_LIST))
+            else
               {
-                GPtrArray *arr = g_value_get_boxed (value);
-
-                g_key_file_set_string_list (keyfile, name, key,
-                    (const gchar * const *) arr->pdata, arr->len);
+                g_warning ("Unexpected array type %s",
+                    g_variant_get_type_string (value));
+                return FALSE;
               }
-            else if (G_VALUE_HOLDS (value, TP_STRUCT_TYPE_SIMPLE_PRESENCE))
+            break;
+
+          case G_VARIANT_CLASS_TUPLE:
+            if (g_variant_is_of_type (value, G_VARIANT_TYPE ("(uss)")))
               {
-                guint type;
+                guint32 type;
                 /* enough for "4294967296" + \0 */
                 gchar printf_buf[11];
                 const gchar * strv[4] = { NULL, NULL, NULL, NULL };
 
-                tp_value_array_unpack (g_value_get_boxed (value), 3,
+                g_variant_get (value, "(u&s&s)",
                     &type,
                     &(strv[1]),
                     &(strv[2]));
@@ -1965,8 +2016,16 @@ mcd_keyfile_set_value (GKeyFile *keyfile,
               }
             else
               {
-                g_warning ("Unexpected param type %s",
-                    G_VALUE_TYPE_NAME (value));
+                g_warning ("Unexpected struct type %s",
+                    g_variant_get_type_string (value));
+                return FALSE;
+              }
+            break;
+
+          default:
+              {
+                g_warning ("Unexpected variant type %s",
+                    g_variant_get_type_string (value));
                 return FALSE;
               }
         }
diff --git a/src/mcd-storage.h b/src/mcd-storage.h
index 14dc890..e440845 100644
--- a/src/mcd-storage.h
+++ b/src/mcd-storage.h
@@ -145,6 +145,10 @@ gboolean mcd_keyfile_get_value (GKeyFile *keyfile,
     const gchar *key,
     GValue *value,
     GError **error);
+gboolean mcd_keyfile_set_variant (GKeyFile *keyfile,
+    const gchar *name,
+    const gchar *key,
+    GVariant *value);
 gboolean mcd_keyfile_set_value (GKeyFile *keyfile,
     const gchar *name,
     const gchar *key,

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-telepathy/telepathy-mission-control-6.git



More information about the Pkg-telepathy-commits mailing list