diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2010-11-09 15:22:25 +0100 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2010-12-09 13:56:28 +0100 |
commit | 08de02db0ea2e1b5a4cb69611251abc9d69f82fb (patch) | |
tree | eaece7dc87f56196f0b56026a69f057493c517cd /telepathy-glib/cm-message.c | |
parent | 3a8ab74d203877ac3fa0185f8cc9a6d31817d78a (diff) | |
download | telepathy-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.c | 32 |
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; +} |