summaryrefslogtreecommitdiff
path: root/telepathy-glib/cm-message.c
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2010-11-09 15:22:25 +0100
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2010-12-09 13:56:28 +0100
commit08de02db0ea2e1b5a4cb69611251abc9d69f82fb (patch)
treeeaece7dc87f56196f0b56026a69f057493c517cd /telepathy-glib/cm-message.c
parent3a8ab74d203877ac3fa0185f8cc9a6d31817d78a (diff)
downloadtelepathy-glib-08de02db0ea2e1b5a4cb69611251abc9d69f82fb.tar.gz
add _tp_cm_message_new_from_parts()
Diffstat (limited to 'telepathy-glib/cm-message.c')
-rw-r--r--telepathy-glib/cm-message.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/telepathy-glib/cm-message.c b/telepathy-glib/cm-message.c
index 32c071619..f4ac60338 100644
--- a/telepathy-glib/cm-message.c
+++ b/telepathy-glib/cm-message.c
@@ -297,3 +297,35 @@ tp_cm_message_set_sender (TpMessage *self,
if (id != NULL)
tp_message_set_string (self, 0, "message-sender-id", id);
}
+
+TpMessage *
+_tp_cm_message_new_from_parts (const GPtrArray *parts)
+{
+ TpMessage *self;
+ guint i;
+ const GHashTable *header;
+ TpHandle sender;
+
+ g_return_val_if_fail (parts != NULL, NULL);
+ g_return_val_if_fail (parts->len > 0, NULL);
+
+ self = g_object_new (TP_TYPE_CM_MESSAGE,
+ "initial-parts", parts->len,
+ "size-hint", parts->len,
+ NULL);
+
+ for (i = 0; i < parts->len; i++)
+ {
+ tp_g_hash_table_update (g_ptr_array_index (self->parts, i),
+ g_ptr_array_index (parts, i),
+ (GBoxedCopyFunc) g_strdup,
+ (GBoxedCopyFunc) tp_g_value_slice_dup);
+ }
+
+ header = tp_message_peek (self, 0);
+ sender = tp_asv_get_uint32 (header, "message-sender", NULL);
+ if (sender != 0)
+ tp_cm_message_ref_handle (self, TP_HANDLE_TYPE_CONTACT, sender);
+
+ return self;
+}