[next] telepathy-glib: tp_message_dup_part: add

Simon McVittie smcv at kemper.freedesktop.org
Mon Oct 8 08:23:33 PDT 2012


Module: telepathy-glib
Branch: next
Commit: 9720a304317d43b9ada1555b4542bcece7457c8a
URL:    http://cgit.freedesktop.org/telepathy/telepathy-glib/commit/?id=9720a304317d43b9ada1555b4542bcece7457c8a

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

tp_message_dup_part: add

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

---

 docs/reference/telepathy-glib-sections.txt |    1 +
 telepathy-glib/message.c                   |   24 ++++++++++++++++++++++++
 telepathy-glib/message.h                   |    2 ++
 tests/dbus/cm-message.c                    |   12 ++++++++++++
 4 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/docs/reference/telepathy-glib-sections.txt b/docs/reference/telepathy-glib-sections.txt
index f4bbeed..1ebf47c 100644
--- a/docs/reference/telepathy-glib-sections.txt
+++ b/docs/reference/telepathy-glib-sections.txt
@@ -2746,6 +2746,7 @@ TpMessageMixinPrivate
 <TITLE>TpMessage</TITLE>
 TpMessage
 tp_message_count_parts
+tp_message_dup_part
 tp_message_peek
 tp_message_to_text
 tp_message_get_message_type
diff --git a/telepathy-glib/message.c b/telepathy-glib/message.c
index 2cc79a6..508e86e 100644
--- a/telepathy-glib/message.c
+++ b/telepathy-glib/message.c
@@ -39,6 +39,7 @@
 #include <telepathy-glib/dbus.h>
 #include <telepathy-glib/gtypes.h>
 #include <telepathy-glib/util.h>
+#include <telepathy-glib/variant-util-internal.h>
 
 #define DEBUG_FLAG TP_DEBUG_MISC
 #include "telepathy-glib/debug-internal.h"
@@ -199,6 +200,29 @@ tp_message_peek (TpMessage *self,
   return g_ptr_array_index (self->parts, part);
 }
 
+/**
+ * tp_message_dup_part:
+ * @self: a message
+ * @part: a part number
+ *
+ * <!-- nothing more to say -->
+ *
+ * Returns: (transfer full):
+ *  the current contents of the given part, or %NULL if the part number is
+ *  out of range
+ *
+ * Since: 0.UNRELEASED
+ */
+GVariant *
+tp_message_dup_part (TpMessage *self,
+    guint part)
+{
+  if (part >= self->parts->len)
+    return NULL;
+
+  return _tp_asv_to_vardict (g_ptr_array_index (self->parts, part));
+}
+
 
 /**
  * tp_message_append_part:
diff --git a/telepathy-glib/message.h b/telepathy-glib/message.h
index 5f2ddf8..e4f7c28 100644
--- a/telepathy-glib/message.h
+++ b/telepathy-glib/message.h
@@ -46,6 +46,8 @@ GType tp_message_get_type (void);
 void tp_message_destroy (TpMessage *self);
 guint tp_message_count_parts (TpMessage *self);
 const GHashTable *tp_message_peek (TpMessage *self, guint part);
+_TP_AVAILABLE_IN_UNRELEASED
+GVariant *tp_message_dup_part (TpMessage *self, guint part);
 guint tp_message_append_part (TpMessage *self);
 void tp_message_delete_part (TpMessage *self, guint part);
 
diff --git a/tests/dbus/cm-message.c b/tests/dbus/cm-message.c
index 39ad3de..42f5de9 100644
--- a/tests/dbus/cm-message.c
+++ b/tests/dbus/cm-message.c
@@ -50,7 +50,9 @@ test_new_from_parts (Test *test,
   TpHandle sender;
   TpMessage *msg;
   const GHashTable *part;
+  GVariant *part_vardict;
   gboolean valid;
+  const gchar *s;
 
   parts = g_ptr_array_new_full (2, (GDestroyNotify) g_hash_table_unref);
 
@@ -93,6 +95,16 @@ test_new_from_parts (Test *test,
   g_assert_cmpstr (tp_asv_get_string (part, "content"), ==,
       "Badger");
 
+  part_vardict = tp_message_dup_part (msg, 1);
+  g_assert_cmpstr (g_variant_get_type_string (part_vardict), ==, "a{sv}");
+  valid = g_variant_lookup (part_vardict, "content-type", "&s", &s);
+  g_assert (valid);
+  g_assert_cmpstr (s, ==, "text/plain");
+  valid = g_variant_lookup (part_vardict, "content", "&s", &s);
+  g_assert (valid);
+  g_assert_cmpstr (s, ==, "Badger");
+  g_variant_unref (part_vardict);
+
   g_assert_cmpuint (tp_message_get_message_type (msg), ==,
       TP_CHANNEL_TEXT_MESSAGE_TYPE_NOTICE);
   g_assert_cmpuint (tp_cm_message_get_sender (msg), ==, sender);



More information about the telepathy-commits mailing list