[next] telepathy-glib: TpStreamTubeChannel: Stop using tp_connection_get_contacts_by_handle()

Xavier Claessens xclaesse at kemper.freedesktop.org
Mon May 14 04:28:10 PDT 2012


Module: telepathy-glib
Branch: next
Commit: c473c3c06d1e671c38dcaa58bcdac97157d1128e
URL:    http://cgit.freedesktop.org/telepathy/telepathy-glib/commit/?id=c473c3c06d1e671c38dcaa58bcdac97157d1128e

Author: Xavier Claessens <xavier.claessens at collabora.co.uk>
Date:   Thu May 10 19:05:58 2012 +0200

TpStreamTubeChannel: Stop using tp_connection_get_contacts_by_handle()

---

 telepathy-glib/stream-tube-channel.c |   66 +++++++++++++++++-----------------
 1 files changed, 33 insertions(+), 33 deletions(-)

diff --git a/telepathy-glib/stream-tube-channel.c b/telepathy-glib/stream-tube-channel.c
index 0d15978..adee1b4 100644
--- a/telepathy-glib/stream-tube-channel.c
+++ b/telepathy-glib/stream-tube-channel.c
@@ -80,6 +80,7 @@ G_DEFINE_TYPE (TpStreamTubeChannel, tp_stream_tube_channel, TP_TYPE_CHANNEL)
 typedef struct
 {
   TpHandle handle;
+  gchar *id;
   GValue *param;
   guint connection_id;
   gboolean rejected;
@@ -87,6 +88,7 @@ typedef struct
 
 static SigWaitingConn *
 sig_waiting_conn_new (TpHandle handle,
+    const gchar *id,
     const GValue *param,
     guint connection_id,
     gboolean rejected)
@@ -94,6 +96,7 @@ sig_waiting_conn_new (TpHandle handle,
   SigWaitingConn *ret = g_slice_new0 (SigWaitingConn);
 
   ret->handle = handle;
+  ret->id = g_strdup (id);
   ret->param = tp_g_value_slice_dup (param);
   ret->connection_id = connection_id;
   ret->rejected = rejected;
@@ -105,6 +108,7 @@ sig_waiting_conn_free (SigWaitingConn *sig)
 {
   g_assert (sig != NULL);
 
+  g_free (sig->id);
   tp_g_value_slice_free (sig->param);
   g_slice_free (SigWaitingConn, sig);
 }
@@ -897,32 +901,25 @@ tp_stream_tube_channel_accept_finish (TpStreamTubeChannel *self,
 }
 
 static void
-_new_remote_connection_with_contact (TpConnection *conn,
-    guint n_contacts,
-    TpContact * const *contacts,
-    guint n_failed,
-    const TpHandle *failed,
-    const GError *in_error,
-    gpointer user_data,
-    GObject *obj)
+_new_remote_connection_with_contact (GObject *object,
+    GAsyncResult *result,
+    gpointer user_data)
 {
-  TpStreamTubeChannel *self = (TpStreamTubeChannel *) obj;
-  TpContact *contact;
+  TpConnection *connection = (TpConnection *) object;
   TpStreamTubeConnection *tube_conn = user_data;
+  TpStreamTubeChannel *self = tp_stream_tube_connection_get_channel (tube_conn);
+  GPtrArray *contacts;
+  TpContact *contact;
+  GError *error;
 
-  if (in_error != NULL)
-    {
-      DEBUG ("Failed to prepare TpContact: %s", in_error->message);
-      return;
-    }
-
-  if (n_failed > 0)
+  if (!tp_connection_upgrade_contacts_finish (connection, result,
+          &contacts, &error))
     {
-      DEBUG ("Failed to prepare TpContact (InvalidHandle)");
-      return;
+      DEBUG ("Failed to prepare TpContact: %s", error->message);
+      g_clear_error (&error);
     }
 
-  contact = contacts[0];
+  contact = g_ptr_array_index (contacts, 0);
 
   _tp_stream_tube_connection_set_contact (tube_conn, contact);
 
@@ -932,6 +929,8 @@ _new_remote_connection_with_contact (TpConnection *conn,
   g_signal_emit (self, _signals[INCOMING], 0, tube_conn);
 
   /* anyone receiving the signal is required to hold their own reference */
+  g_object_unref (tube_conn);
+  g_ptr_array_unref (contacts);
 }
 
 static gboolean
@@ -1014,6 +1013,7 @@ static void
 connection_identified (TpStreamTubeChannel *self,
     GSocketConnection *conn,
     TpHandle handle,
+    const gchar *id,
     guint connection_id)
 {
   TpStreamTubeConnection *tube_conn;
@@ -1029,21 +1029,21 @@ connection_identified (TpStreamTubeChannel *self,
   if (can_identify_contact (self))
     {
       TpConnection *connection;
+      TpClientFactory *factory;
       GArray *features;
+      TpContact *contact;
 
       connection = tp_channel_borrow_connection (TP_CHANNEL (self));
-      features = tp_client_factory_dup_contact_features (
-          tp_proxy_get_factory (connection), connection);
-
-      /* Spec does not give the id with the handle */
-      G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-      /* Pass the ref on tube_conn to the function */
-      tp_connection_get_contacts_by_handle (connection,
-          1, &handle,
+      factory = tp_proxy_get_factory (connection);
+      features = tp_client_factory_dup_contact_features (factory, connection);
+
+      contact = tp_client_factory_ensure_contact (factory, connection,
+          handle, id);
+
+      tp_connection_upgrade_contacts_async (connection, 1, &contact,
           (const GQuark *) features->data,
           _new_remote_connection_with_contact,
-          tube_conn, g_object_unref, G_OBJECT (self));
-       G_GNUC_END_IGNORE_DEPRECATIONS
+          tube_conn);
 
       g_array_unref (features);
     }
@@ -1111,7 +1111,7 @@ _new_remote_connection (TpChannel *channel,
       rejected = TRUE;
     }
 
-  sig = sig_waiting_conn_new (handle, param, connection_id, rejected);
+  sig = sig_waiting_conn_new (handle, id, param, connection_id, rejected);
 
   for (l = self->priv->conn_waiting_sig; l != NULL && found_conn == NULL;
       l = g_slist_next (l))
@@ -1141,7 +1141,7 @@ _new_remote_connection (TpChannel *channel,
   if (rejected)
     connection_rejected (self, found_conn->conn, handle, connection_id);
   else
-    connection_identified (self, found_conn->conn, handle, connection_id);
+    connection_identified (self, found_conn->conn, handle, id, connection_id);
 
   sig_waiting_conn_free (sig);
   conn_waiting_sig_free (found_conn);
@@ -1263,7 +1263,7 @@ credentials_received (TpStreamTubeChannel *self,
   if (sig->rejected)
     connection_rejected (self, conn, sig->handle, sig->connection_id);
   else
-    connection_identified (self, conn, sig->handle, sig->connection_id);
+    connection_identified (self, conn, sig->handle, sig->id, sig->connection_id);
 
   sig_waiting_conn_free (sig);
   conn_waiting_sig_free (c);



More information about the telepathy-commits mailing list