[Telepathy-commits] [telepathy-salut/master] Add avatars to the Contacts interface

Sjoerd Simons sjoerd.simons at collabora.co.uk
Tue Aug 19 08:39:23 PDT 2008


---
 src/salut-connection.c |   54 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 54 insertions(+), 0 deletions(-)

diff --git a/src/salut-connection.c b/src/salut-connection.c
index 4c86301..45d8287 100644
--- a/src/salut-connection.c
+++ b/src/salut-connection.c
@@ -233,6 +233,9 @@ salut_connection_shut_down (TpBaseConnection *self);
 static gboolean
 salut_connection_start_connecting (TpBaseConnection *self, GError **error);
 
+static void salut_connection_avatars_fill_contact_attributes (GObject *obj,
+    const GArray *contacts, GHashTable *attributes_hash);
+
 static void
 salut_connection_init (SalutConnection *obj)
 {
@@ -281,6 +284,10 @@ salut_connection_constructor (GType type,
   tp_base_connection_register_with_contacts_mixin (TP_BASE_CONNECTION (obj));
   tp_presence_mixin_simple_presence_register_with_contacts_mixin (obj);
 
+  tp_contacts_mixin_add_contact_attributes_iface (obj,
+      TP_IFACE_CONNECTION_INTERFACE_AVATARS,
+      salut_connection_avatars_fill_contact_attributes);
+
   return obj;
 }
 
@@ -1300,6 +1307,53 @@ salut_connection_get_known_avatar_tokens (
 }
 
 static void
+salut_connection_avatars_fill_contact_attributes (GObject *obj,
+    const GArray *contacts, GHashTable *attributes_hash)
+{
+  guint i;
+  SalutConnection *self = SALUT_CONNECTION (obj);
+  SalutConnectionPrivate *priv = SALUT_CONNECTION_GET_PRIVATE (self);
+  TpBaseConnection *base = TP_BASE_CONNECTION (base);
+
+  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 = salut_contact_manager_get_contact (
+              priv->contact_manager, handle);
+          if (contact != NULL)
+            {
+              if (contact->avatar_token != NULL)
+                tokens = g_strdup (contact->avatar_token);
+              else
+                /* We always know the tokens, if it's unset then it's "" */
+                tokens = g_strdup ("");
+
+              g_object_unref (contact);
+            }
+        }
+
+      if (tokens != NULL)
+        {
+          GValue *val = tp_g_value_slice_new (G_TYPE_STRING);
+
+          g_value_take_string (val, tokens);
+
+          tp_contacts_mixin_set_contact_attribute (attributes_hash, handle,
+            TP_IFACE_CONNECTION_INTERFACE_AVATARS"/token", val);
+        }
+    }
+}
+
+
+static void
 _request_avatars_cb (SalutContact *contact, guint8 *avatar, gsize size,
     gpointer user_data)
 {
-- 
1.5.6.3




More information about the Telepathy-commits mailing list