summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSjoerd Simons <sjoerd.simons@collabora.co.uk>2008-01-04 20:03:19 +0000
committerSjoerd Simons <sjoerd.simons@collabora.co.uk>2008-01-04 20:03:19 +0000
commitf91670a95d9006a5903e09cd131dab69a9ef7913 (patch)
tree707a6de8b3c254280661d5a6725685546f019089
parentdd82dd17b4294379853521326d2fe17f6991d316 (diff)
downloadtelepathy-salut-f91670a95d9006a5903e09cd131dab69a9ef7913.tar.gz
SalutConnection: Implement GetKnownAvatarTokens
20080104200319-b58c9-58b59f2989d85486a36ed90989133e5c388b8329.gz
-rw-r--r--src/salut-connection.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/salut-connection.c b/src/salut-connection.c
index 3ce3d4c7..c4924f69 100644
--- a/src/salut-connection.c
+++ b/src/salut-connection.c
@@ -1070,6 +1070,7 @@ salut_connection_set_avatar(TpSvcConnectionInterfaceAvatars *iface,
context, priv->self->avatar_token);
}
+
static void
salut_connection_get_avatar_tokens(TpSvcConnectionInterfaceAvatars *iface,
const GArray *contacts,
@@ -1118,6 +1119,67 @@ salut_connection_get_avatar_tokens(TpSvcConnectionInterfaceAvatars *iface,
}
static void
+salut_connection_get_known_avatar_tokens(
+ TpSvcConnectionInterfaceAvatars *iface,
+ const GArray *contacts,
+ DBusGMethodInvocation *context)
+{
+ int i;
+ GHashTable *ret;
+ GError *err = NULL;
+ SalutConnection *self = SALUT_CONNECTION (iface);
+ SalutConnectionPrivate *priv = SALUT_CONNECTION_GET_PRIVATE (self);
+ TpBaseConnection *base = TP_BASE_CONNECTION (self);
+
+ TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context);
+
+ TpHandleRepoIface *handle_repo = tp_base_connection_get_handles (base,
+ TP_HANDLE_TYPE_CONTACT);
+
+ if (!tp_handles_are_valid (handle_repo, contacts, FALSE, &err))
+ {
+ dbus_g_method_return_error (context, err);
+ g_error_free (err);
+ return;
+ }
+
+ ret = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free);
+
+ for (i = 0; i < contacts->len ; i++)
+ {
+ TpHandle handle = g_array_index (contacts, TpHandle, i);
+ gchar *tokens = NULL;
+
+ if (base->self_handle == handle)
+ {
+ tokens = g_strdup (priv->self->avatar_token);
+ }
+ else
+ {
+ SalutContact *contact;
+ contact =
+ salut_contact_manager_get_contact (priv->contact_manager, handle);
+ if (contact != NULL)
+ {
+ tokens = g_strdup (contact->avatar_token);
+ g_object_unref (contact);
+ }
+ }
+
+ if (tokens == NULL)
+ tokens = g_strdup ("");
+
+ g_hash_table_insert (ret, GUINT_TO_POINTER (handle), tokens);
+ }
+
+ tp_svc_connection_interface_avatars_return_from_get_known_avatar_tokens (
+ context, ret);
+
+ g_hash_table_destroy (ret);
+}
+
+
+static void
_request_avatar_cb(SalutContact *contact, guint8 *avatar, gsize size,
gpointer user_data) {
DBusGMethodInvocation *context = (DBusGMethodInvocation *) user_data;
@@ -1205,6 +1267,7 @@ TpSvcConnectionInterfaceAvatarsClass *klass =
(klass, salut_connection_##x)
IMPLEMENT(get_avatar_requirements);
IMPLEMENT(get_avatar_tokens);
+ IMPLEMENT(get_known_avatar_tokens);
IMPLEMENT(request_avatar);
IMPLEMENT(set_avatar);
IMPLEMENT(clear_avatar);