telepathy-glib: tp_message_set_variant: add and test

Guillaume Desmottes gdesmott at kemper.freedesktop.org
Wed Sep 26 05:52:41 PDT 2012


Module: telepathy-glib
Branch: master
Commit: 3db2b44439ee7330eaa15ab374ebb033e8296063
URL:    http://cgit.freedesktop.org/telepathy/telepathy-glib/commit/?id=3db2b44439ee7330eaa15ab374ebb033e8296063

Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Wed Sep 19 12:12:40 2012 +0100

tp_message_set_variant: add and test

https://bugs.freedesktop.org/show_bug.cgi?id=55096

---

 docs/reference/telepathy-glib-sections.txt |    1 +
 telepathy-glib/message.c                   |   41 +++++++++++++++++++++++++++-
 telepathy-glib/message.h                   |    3 ++
 tests/dbus/cm-message.c                    |    4 +-
 4 files changed, 46 insertions(+), 3 deletions(-)

diff --git a/docs/reference/telepathy-glib-sections.txt b/docs/reference/telepathy-glib-sections.txt
index 1ebf47c..f506227 100644
--- a/docs/reference/telepathy-glib-sections.txt
+++ b/docs/reference/telepathy-glib-sections.txt
@@ -2765,6 +2765,7 @@ tp_message_append_part
 tp_message_delete_key
 tp_message_delete_part
 tp_message_set
+tp_message_set_variant
 tp_message_set_boolean
 tp_message_set_bytes
 tp_message_set_int16
diff --git a/telepathy-glib/message.c b/telepathy-glib/message.c
index 508e86e..4b41070 100644
--- a/telepathy-glib/message.c
+++ b/telepathy-glib/message.c
@@ -614,13 +614,15 @@ tp_message_set_bytes (TpMessage *self,
  * @part: a part number, which must be strictly less than the number
  *  returned by tp_message_count_parts()
  * @key: a key in the mapping representing the part
- * @source: a value
+ * @source: a value, encoded as dbus-glib would
  *
  * Set @key in part @part of @self to have a copy of @source as its value.
  *
  * If @source represents a data structure containing handles, they should
  * all be referenced with tp_message_ref_handle() first.
  *
+ * In high-level language bindings, use tp_message_set_variant() instead.
+ *
  * Since: 0.7.21
  */
 void
@@ -639,6 +641,43 @@ tp_message_set (TpMessage *self,
 }
 
 /**
+ * tp_message_set_variant:
+ * @self: a message
+ * @part: a part number, which must be strictly less than the number
+ *  returned by tp_message_count_parts()
+ * @key: a key in the mapping representing the part
+ * @value: a value
+ *
+ * Set @key in part @part of @self to have @value as its value.
+ *
+ * If @value is a floating reference (see g_variant_ref_sink()), then this
+ * function will take ownership of it.
+ *
+ * Since: 0.UNRELEASED
+ */
+void
+tp_message_set_variant (TpMessage *self,
+    guint part,
+    const gchar *key,
+    GVariant *value)
+{
+  GValue *gvalue;
+
+  g_return_if_fail (part < self->parts->len);
+  g_return_if_fail (key != NULL);
+  g_return_if_fail (value != NULL);
+  g_return_if_fail (self->priv->mutable);
+
+  g_variant_ref_sink (value);
+  gvalue = g_slice_new0 (GValue);
+  dbus_g_value_parse_g_variant (value, gvalue);
+  g_variant_unref (value);
+
+  g_hash_table_insert (g_ptr_array_index (self->parts, part),
+      g_strdup (key), gvalue);
+}
+
+/**
  * tp_message_take_message:
  * @self: a #TpCMMessage
  * @part: a part number, which must be strictly less than the number
diff --git a/telepathy-glib/message.h b/telepathy-glib/message.h
index e4f7c28..50df7f2 100644
--- a/telepathy-glib/message.h
+++ b/telepathy-glib/message.h
@@ -74,6 +74,9 @@ void tp_message_set_bytes (TpMessage *self, guint part, const gchar *key,
     guint len, gconstpointer bytes);
 void tp_message_set (TpMessage *self, guint part, const gchar *key,
     const GValue *source);
+_TP_AVAILABLE_IN_UNRELEASED
+void tp_message_set_variant (TpMessage *self, guint part, const gchar *key,
+    GVariant *value);
 
 gchar * tp_message_to_text (TpMessage *message,
     TpChannelTextMessageFlags *out_flags) G_GNUC_WARN_UNUSED_RESULT;
diff --git a/tests/dbus/cm-message.c b/tests/dbus/cm-message.c
index 42f5de9..5e504b3 100644
--- a/tests/dbus/cm-message.c
+++ b/tests/dbus/cm-message.c
@@ -295,8 +295,8 @@ test_take_message (Test *test,
 
   tp_message_set_uint32 (msg, 0, "message-type",
       TP_CHANNEL_TEXT_MESSAGE_TYPE_DELIVERY_REPORT);
-  tp_message_set_uint32 (msg, 0, "delivery-status",
-      TP_DELIVERY_STATUS_DELIVERED);
+  tp_message_set_variant (msg, 0, "delivery-status",
+      g_variant_new_uint32 (TP_DELIVERY_STATUS_DELIVERED));
   tp_cm_message_take_message (msg, 0, "delivery-echo", echo);
 
   /* ensure the message was destroyed */



More information about the telepathy-commits mailing list