[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