[Telepathy-commits] [telepathy-mission-control/master] src/mcd-connection.c: Call SetSelfCapabilities at the right place: after TpConnection is ready

Alban Crequy alban.crequy at collabora.co.uk
Thu Nov 13 09:43:23 PST 2008


---
 src/mcd-connection.c |   45 +++++++++++++++++++++++++++++++++++++--------
 1 files changed, 37 insertions(+), 8 deletions(-)

diff --git a/src/mcd-connection.c b/src/mcd-connection.c
index b3001e2..48ee62e 100644
--- a/src/mcd-connection.c
+++ b/src/mcd-connection.c
@@ -102,11 +102,13 @@ struct _McdConnectionPrivate
 
     TpConnectionStatusReason abort_reason;
     guint got_capabilities : 1;
+    guint got_contact_capabilities : 1;
     guint setting_avatar : 1;
     guint has_presence_if : 1;
     guint has_avatars_if : 1;
     guint has_alias_if : 1;
     guint has_capabilities_if : 1;
+    guint has_contact_capabilities_if : 1;
     guint has_requests_if : 1;
 
     /* FALSE until the connection is ready for dispatching */
@@ -515,6 +517,36 @@ _mcd_connection_setup_capabilities (McdConnection *connection)
 }
 
 static void
+_mcd_connection_setup_contact_capabilities (McdConnection *connection)
+{
+    McdConnectionPrivate *priv = MCD_CONNECTION_PRIV (connection);
+    GPtrArray *capabilities;
+    GPtrArray *contact_capabilities;
+    const gchar *removed = NULL;
+    const gchar *protocol_name;
+    guint i;
+
+    if (!priv->has_contact_capabilities_if)
+    {
+	g_debug ("%s: connection does not support contact capabilities interface", G_STRFUNC);
+	priv->got_contact_capabilities = TRUE;
+	return;
+    }
+    protocol_name = mcd_account_get_protocol_name (priv->account);
+    capabilities = mcd_dispatcher_get_channel_capabilities (priv->dispatcher,
+							    protocol_name);
+    g_debug ("%s: advertising capabilities", G_STRFUNC);
+
+    contact_capabilities = g_ptr_array_new ();
+    mc_cli_connection_interface_contact_capabilities_call_set_self_capabilities
+      (priv->tp_conn, -1, contact_capabilities, NULL, NULL, NULL, NULL);
+    g_debug ("SetSelfCapabilities: Called.");
+
+    /* free the connection capabilities (FIXME) */
+    g_ptr_array_free (contact_capabilities, TRUE);
+}
+
+static void
 inspect_handles_cb (TpConnection *proxy, const gchar **names,
 		    const GError *error, gpointer user_data,
 		    GObject *weak_object)
@@ -999,14 +1031,6 @@ connect_cb (TpConnection *tp_conn, const GError *error,
 	g_warning ("%s: tp_conn_connect failed: %s",
 		   G_STRFUNC, error->message);
     }
-    else
-    {
-      GPtrArray *caps = g_ptr_array_new ();
-      g_debug ("calling SetSelfCapabilities");
-      mc_cli_connection_interface_contact_capabilities_call_set_self_capabilities
-        (tp_conn, -1, caps, NULL, NULL, NULL, NULL);
-      g_ptr_array_free (caps, TRUE);
-    }
 }
 
 static void
@@ -1227,6 +1251,8 @@ on_connection_ready (TpConnection *tp_conn, const GError *error,
 						       TP_IFACE_QUARK_CONNECTION_INTERFACE_ALIASING);
     priv->has_capabilities_if = tp_proxy_has_interface_by_id (tp_conn,
 							      TP_IFACE_QUARK_CONNECTION_INTERFACE_CAPABILITIES);
+    priv->has_contact_capabilities_if = tp_proxy_has_interface_by_id (tp_conn,
+        MC_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_CAPABILITIES);
     priv->has_requests_if = tp_proxy_has_interface_by_id (tp_conn,
         TP_IFACE_QUARK_CONNECTION_INTERFACE_REQUESTS);
 
@@ -1236,6 +1262,9 @@ on_connection_ready (TpConnection *tp_conn, const GError *error,
     if (priv->has_capabilities_if)
 	_mcd_connection_setup_capabilities (connection);
 
+    if (priv->has_contact_capabilities_if)
+	_mcd_connection_setup_contact_capabilities (connection);
+
     if (priv->has_avatars_if)
 	_mcd_connection_setup_avatar (connection);
 
-- 
1.5.6.5




More information about the Telepathy-commits mailing list