[telepathy-mission-control/telepathy-mission-control-5.2] Get own nickname on new connections

Alberto Mardegan alberto.mardegan at nokia.com
Tue Sep 15 04:44:11 PDT 2009


When a new connection with aliases support is established, get our own
nickname.

Originally written by Simon McVittie <simon.mcvittie at collabora.co.uk>
---
 src/mcd-connection.c                     |   44 ++++++++++++++++++++++++++++++
 test/twisted/account-manager/nickname.py |   15 +++++++---
 2 files changed, 55 insertions(+), 4 deletions(-)

diff --git a/src/mcd-connection.c b/src/mcd-connection.c
index 4e4f262..507ffb4 100644
--- a/src/mcd-connection.c
+++ b/src/mcd-connection.c
@@ -917,15 +917,59 @@ _mcd_connection_set_nickname (McdConnection *connection,
 }
 
 static void
+_mcd_connection_get_aliases_cb (TpConnection *proxy,
+                                GHashTable *aliases,
+                                const GError *error,
+                                gpointer user_data,
+                                GObject *weak_object)
+{
+    McdConnectionPrivate *priv = user_data;
+    guint self_handle;
+    const gchar *alias;
+
+    DEBUG ("called");
+
+    if (error != NULL)
+    {
+        DEBUG ("GetAliases([SelfHandle]) failed: %s", error->message);
+        return;
+    }
+
+    self_handle = tp_connection_get_self_handle (proxy);
+
+    alias = g_hash_table_lookup (aliases,GUINT_TO_POINTER (self_handle));
+
+    if (alias != NULL &&
+        (priv->alias == NULL || tp_strdiff (priv->alias, alias)))
+    {
+            g_free (priv->alias);
+            priv->alias = g_strdup (alias);
+            g_signal_emit (weak_object, signals[SELF_NICKNAME_CHANGED], 0,
+                           alias);
+    }
+}
+
+static void
 _mcd_connection_setup_alias (McdConnection *connection)
 {
     McdConnectionPrivate *priv = connection->priv;
+    GArray *self_handle_array;
+    guint self_handle;
+
+    self_handle_array = g_array_sized_new (FALSE, FALSE, sizeof (guint), 1);
+    self_handle = tp_connection_get_self_handle (priv->tp_conn);
+    g_array_append_val (self_handle_array, self_handle);
 
     tp_cli_connection_interface_aliasing_connect_to_aliases_changed (priv->tp_conn,
 								     on_aliases_changed,
 								     priv, NULL,
 								     (GObject *)connection,
 								     NULL);
+
+    tp_cli_connection_interface_aliasing_call_get_aliases
+        (priv->tp_conn, -1, self_handle_array, _mcd_connection_get_aliases_cb,
+         priv, NULL, (GObject *) connection);
+    g_array_free (self_handle_array, TRUE);
 }
 
 static gboolean
diff --git a/test/twisted/account-manager/nickname.py b/test/twisted/account-manager/nickname.py
index 112cb14..c286507 100644
--- a/test/twisted/account-manager/nickname.py
+++ b/test/twisted/account-manager/nickname.py
@@ -49,16 +49,23 @@ def test(q, bus, mc):
     assert account_props.Get(cs.ACCOUNT, 'Nickname') == 'resiak'
 
     # OK, let's go online
-    conn, e = enable_fakecm_account(q, bus, mc, account, params,
-            has_aliasing=True,
+    conn, get_aliases, set_aliases = enable_fakecm_account(q, bus, mc,
+            account, params, has_aliasing=True,
             expect_after_connect=[
                 EventPattern('dbus-method-call',
+                    interface=cs.CONN_IFACE_ALIASING, method='GetAliases',
+                    handled=False),
+                EventPattern('dbus-method-call',
                     interface=cs.CONN_IFACE_ALIASING, method='SetAliases',
                     handled=False),
                 ])
 
-    assert e.args[0] == { conn.self_handle: 'resiak' }
-    q.dbus_return(e.message, signature='')
+    assert get_aliases.args[0] == [ conn.self_handle ]
+    q.dbus_return(get_aliases.message, { conn.self_handle: 'wjt at example.com' },
+            signature='a{us}')
+
+    assert set_aliases.args[0] == { conn.self_handle: 'resiak' }
+    q.dbus_return(set_aliases.message, signature='')
 
     # Change alias after going online
     call_async(q, account_props, 'Set', cs.ACCOUNT, 'Nickname',
-- 
1.5.6.5



More information about the telepathy-commits mailing list