[Telepathy-commits] [telepathy-haze/master] DO NOT MERGE work in progress implementing GetAliases and the Contactotron

Will Thompson will.thompson at collabora.co.uk
Mon Oct 27 17:50:08 PDT 2008


---
 src/connection-aliasing.c |   67 +++++++++++++++++++++++++++++++++++++++++++++
 src/connection-aliasing.h |    2 +
 src/connection.c          |    1 +
 3 files changed, 70 insertions(+), 0 deletions(-)

diff --git a/src/connection-aliasing.c b/src/connection-aliasing.c
index 8da5f07..6828eda 100644
--- a/src/connection-aliasing.c
+++ b/src/connection-aliasing.c
@@ -146,6 +146,17 @@ haze_connection_request_aliases (TpSvcConnectionInterfaceAliasing *self,
     g_free (aliases);
 }
 
+void
+haze_connection_get_aliases (TpSvcConnectionInterfaceAliasing *self,
+                             const GArray *contacts,
+                             DBusGMethodInvocation *context)
+{
+    /* FIXME: I think the spec should let us omit invalid contacts from the
+     * returned map...
+     */
+}
+
+
 struct _g_hash_table_foreach_all_in_my_brain
 {
     HazeConnection *conn;
@@ -256,6 +267,7 @@ haze_connection_aliasing_iface_init (gpointer g_iface,
     klass, haze_connection_##x)
     IMPLEMENT(get_alias_flags);
     IMPLEMENT(request_aliases);
+    IMPLEMENT(get_aliases);
     IMPLEMENT(set_aliases);
 #undef IMPLEMENT
 }
@@ -301,6 +313,53 @@ blist_node_aliased_cb (PurpleBlistNode *node,
     tp_handle_unref (contact_handles, handle);
 }
 
+static void
+conn_aliasing_fill_contact_attributes (GObject *obj,
+                                       const GArray *contacts,
+                                       GHashTable *attributes_hash)
+{
+    HazeConnection *self = HAZE_CONNECTION (obj);
+    TpBaseConnection *base_conn = (TpBaseConnection *) self;
+    TpHandleRepoIface *contact_handles = tp_base_connection_get_handles (
+        base_conn, TP_HANDLE_TYPE_CONTACT);
+    guint i;
+
+    for (int i = 0; i < contacts->len; i++)
+    {
+        TpHandle handle = g_array_index (contacts, TpHandle, i);
+        const gchar *alias;
+        GValue *val = tp_g_value_slice_new (G_TYPE_STRING);
+
+        if (handle == base_conn->self_handle)
+        {
+            alias = purple_connection_get_display_name (conn->account->gc);
+
+            if (alias == NULL)
+                alias = purple_account_get_username (conn->account);
+
+        }
+        else
+        {
+            const gchar *id = tp_handle_inspect (contact_handles, handle);
+            PurpleBuddy *buddy = purple_find_buddy (conn->account, id);
+
+            if (buddy != NULL)
+                alias = purple_buddy_get_alias (buddy);
+            else
+                alias = id;
+        }
+
+        g_assert (alias != NULL);
+
+        g_value_set_string (val, alias);
+
+        tp_contacts_mixin_set_contact_attribute (attributes_hash,
+            handle, TP_IFACE_CONNECTION_INTERFACE_ALIASING"/alias",
+            val);
+    }
+}
+
+
 void
 haze_connection_aliasing_class_init (GObjectClass *object_class)
 {
@@ -309,3 +368,11 @@ haze_connection_aliasing_class_init (GObjectClass *object_class)
     purple_signal_connect (blist_handle, "blist-node-aliased", object_class,
         PURPLE_CALLBACK (blist_node_aliased_cb), NULL);
 }
+
+void
+haze_connection_aliasing_init (HazeConnection *self)
+{
+    tp_contacts_mixin_add_contact_attributes_interface ((GObject *) self,
+        TP_IFACE_CONNECTION_INTERFACE_ALIASING,
+        conn_aliasing_fill_contact_attributes);
+}
diff --git a/src/connection-aliasing.h b/src/connection-aliasing.h
index e73ee73..d60ae19 100644
--- a/src/connection-aliasing.h
+++ b/src/connection-aliasing.h
@@ -31,4 +31,6 @@ haze_connection_aliasing_iface_init (gpointer g_iface,
 void
 haze_connection_aliasing_class_init (GObjectClass *object_class);
 
+void haze_connection_aliasing_init (HazeConnection *self);
+
 #endif
diff --git a/src/connection.c b/src/connection.c
index 55942ef..49162ea 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -597,6 +597,7 @@ haze_connection_init (HazeConnection *self)
 
     tp_base_connection_register_with_contacts_mixin (base_conn);
 
+    haze_connection_aliasing_init (self);
     haze_connection_presence_init (self);
 }
 
-- 
1.5.6.5



More information about the Telepathy-commits mailing list