[Telepathy-commits] [telepathy-glib/master] TpMessageMixin: implement GetPendingMessageContent
Simon McVittie
simon.mcvittie at collabora.co.uk
Thu Dec 18 10:41:30 PST 2008
20080416133157-53eee-35a9db1d67366049ed401b35f428df917373d572.gz
---
telepathy-glib/message-mixin.c | 66 ++++++++++++++++++++++++++++++++++++++-
1 files changed, 64 insertions(+), 2 deletions(-)
diff --git a/telepathy-glib/message-mixin.c b/telepathy-glib/message-mixin.c
index 70bd40e..bc7413f 100644
--- a/telepathy-glib/message-mixin.c
+++ b/telepathy-glib/message-mixin.c
@@ -613,9 +613,71 @@ tp_message_mixin_get_pending_message_content_async (
const GArray *part_numbers,
DBusGMethodInvocation *context)
{
- GError e = { TP_ERRORS, TP_ERROR_NOT_IMPLEMENTED, "Not implemented" };
+ TpMessageMixin *mixin = TP_MESSAGE_MIXIN (iface);
+ GList *node;
+ PendingItem *item;
+ GHashTable *ret;
+ guint i;
+ GValue empty = { 0 };
+
+ g_value_init (&empty, G_TYPE_STRING);
+ g_value_set_static_string (&empty, "");
+
+ node = g_queue_find_custom (mixin->priv->pending,
+ GUINT_TO_POINTER (message_id), pending_item_id_equals_data);
+
+ if (node == NULL)
+ {
+ GError *error = g_error_new (TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
+ "invalid message id %u", message_id);
+
+ DEBUG ("%s", error->message);
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ return;
+ }
+
+ item = node->data;
+
+ for (i = 0; i < part_numbers->len; i++)
+ {
+ guint part = g_array_index (part_numbers, guint, i);
+
+ if (part >= item->content->len)
+ {
+ GError *error = g_error_new (TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
+ "part number %u out of range", part);
+
+ DEBUG ("%s", error->message);
+ dbus_g_method_return_error (context, error);
+ g_error_free (error);
+ return;
+ }
+ }
+
+ ret = g_hash_table_new (NULL, NULL);
+
+ for (i = 0; i < part_numbers->len; i++)
+ {
+ guint part = g_array_index (part_numbers, guint, i);
+ GHashTable *part_data;
+ GValue *content;
+
+ g_assert (part < item->content->len);
+ part_data = g_ptr_array_index (item->content, part);
+
+ content = g_hash_table_lookup (part_data, "content");
+
+ if (content == NULL)
+ content = ∅
+
+ g_hash_table_insert (ret, GUINT_TO_POINTER (part), content);
+ }
+
+ tp_svc_channel_interface_messages_return_from_get_pending_message_content (
+ context, ret);
- dbus_g_method_return_error (context, &e);
+ g_hash_table_destroy (ret);
}
static void
--
1.5.6.5
More information about the Telepathy-commits
mailing list