[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