[next] telepathy-glib: Add tp_simple_client_factory_upgrade_contacts_async/ finish

Xavier Claessens xclaesse at kemper.freedesktop.org
Fri May 18 08:09:38 PDT 2012


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

Author: Xavier Claessens <xavier.claessens at collabora.co.uk>
Date:   Tue May 15 16:12:14 2012 +0200

Add tp_simple_client_factory_upgrade_contacts_async/finish

Use it everywhere we can

---

 docs/reference/telepathy-glib-sections.txt |    2 +
 telepathy-glib/connection-contact-list.c   |   37 ++++-------
 telepathy-glib/simple-client-factory.c     |   89 ++++++++++++++++++++++++++++
 telepathy-glib/simple-client-factory.h     |   14 ++++
 4 files changed, 119 insertions(+), 23 deletions(-)

diff --git a/docs/reference/telepathy-glib-sections.txt b/docs/reference/telepathy-glib-sections.txt
index 9c5ef18..302c508 100644
--- a/docs/reference/telepathy-glib-sections.txt
+++ b/docs/reference/telepathy-glib-sections.txt
@@ -6991,6 +6991,8 @@ tp_simple_client_factory_add_channel_features
 tp_simple_client_factory_add_channel_features_varargs
 <SUBSECTION>
 tp_simple_client_factory_ensure_contact
+tp_simple_client_factory_upgrade_contacts_async
+tp_simple_client_factory_upgrade_contacts_finish
 tp_simple_client_factory_ensure_contact_by_id_async
 tp_simple_client_factory_ensure_contact_by_id_finish
 tp_simple_client_factory_dup_contact_features
diff --git a/telepathy-glib/connection-contact-list.c b/telepathy-glib/connection-contact-list.c
index 2e6d597..d48a481 100644
--- a/telepathy-glib/connection-contact-list.c
+++ b/telepathy-glib/connection-contact-list.c
@@ -138,10 +138,12 @@ new_contacts_upgraded_cb (GObject *object,
     GAsyncResult *result,
     gpointer user_data)
 {
-  TpConnection *self = (TpConnection *) object;
+  TpSimpleClientFactory *factory = (TpSimpleClientFactory *) object;
+  TpConnection *self = user_data;
   GError *error = NULL;
 
-  if (!tp_connection_upgrade_contacts_finish (self, result, NULL, &error))
+  if (!tp_simple_client_factory_upgrade_contacts_finish (factory, result, NULL,
+          &error))
     {
       DEBUG ("Error upgrading new roster contacts: %s", error->message);
       g_clear_error (&error);
@@ -156,7 +158,6 @@ process_queued_contacts_changed (TpConnection *self)
   ContactsChangedItem *item;
   GHashTableIter iter;
   gpointer key, value;
-  GArray *features;
 
   item = g_queue_peek_head (self->priv->contacts_changed_queue);
   if (item == NULL)
@@ -187,15 +188,9 @@ process_queued_contacts_changed (TpConnection *self)
       return;
     }
 
-  features = tp_simple_client_factory_dup_contact_features (
-      tp_proxy_get_factory (self), self);
-
-  tp_connection_upgrade_contacts_async (self,
-      item->new_contacts->len, (TpContact **) item->new_contacts->pdata,
-      features->len, (TpContactFeature *) features->data,
-      new_contacts_upgraded_cb, NULL);
-
-  g_array_unref (features);
+  tp_simple_client_factory_upgrade_contacts_async (tp_proxy_get_factory (self),
+      self, item->new_contacts->len, (TpContact **) item->new_contacts->pdata,
+      new_contacts_upgraded_cb, self);
 }
 
 static void
@@ -1674,7 +1669,8 @@ blocked_contacts_upgraded_cb (GObject *object,
     GAsyncResult *result,
     gpointer user_data)
 {
-  TpConnection *self = (TpConnection *) object;
+  TpSimpleClientFactory *factory = (TpSimpleClientFactory *) object;
+  TpConnection *self = user_data;
   BlockedChangedItem *item;
   guint i;
   GPtrArray *added, *removed;
@@ -1683,7 +1679,8 @@ blocked_contacts_upgraded_cb (GObject *object,
 
   item = g_queue_peek_head (self->priv->blocked_changed_queue);
 
-  if (!tp_connection_upgrade_contacts_finish (self, result, &contacts, &error))
+  if (!tp_simple_client_factory_upgrade_contacts_finish (factory, result,
+          &contacts, &error))
     {
       DEBUG ("Error upgrading blocked contacts: %s", error->message);
       g_clear_error (&error);
@@ -1746,7 +1743,6 @@ process_queued_blocked_changed (TpConnection *self)
   BlockedChangedItem *item;
   GHashTableIter iter;
   gpointer key, value;
-  GArray *features;
   GPtrArray *contacts;
 
   item = g_queue_peek_head (self->priv->blocked_changed_queue);
@@ -1796,15 +1792,10 @@ process_queued_blocked_changed (TpConnection *self)
       return;
     }
 
-  features = tp_simple_client_factory_dup_contact_features (
-      tp_proxy_get_factory (self), self);
-
-  tp_connection_upgrade_contacts_async (self,
-      contacts->len, (TpContact **) contacts->pdata,
-      features->len, (TpContactFeature *) features->data,
-      blocked_contacts_upgraded_cb, NULL);
+  tp_simple_client_factory_upgrade_contacts_async (tp_proxy_get_factory (self),
+      self, contacts->len, (TpContact **) contacts->pdata,
+      blocked_contacts_upgraded_cb, self);
 
-  g_array_unref (features);
   g_ptr_array_unref (contacts);
 }
 
diff --git a/telepathy-glib/simple-client-factory.c b/telepathy-glib/simple-client-factory.c
index 8865293..51b9221 100644
--- a/telepathy-glib/simple-client-factory.c
+++ b/telepathy-glib/simple-client-factory.c
@@ -862,6 +862,95 @@ tp_simple_client_factory_ensure_contact (TpSimpleClientFactory *self,
 }
 
 static void
+upgrade_contacts_cb (GObject *source,
+    GAsyncResult *result,
+    gpointer user_data)
+{
+  TpConnection *connection = (TpConnection *) source;
+  GSimpleAsyncResult *my_result = user_data;
+  GPtrArray *contacts;
+  GError *error = NULL;
+
+  if (!tp_connection_upgrade_contacts_finish (connection, result,
+          &contacts, &error))
+    {
+      g_simple_async_result_take_error (my_result, error);
+    }
+  else
+    {
+      g_simple_async_result_set_op_res_gpointer (my_result, contacts,
+          (GDestroyNotify) g_ptr_array_unref);
+    }
+
+  g_simple_async_result_complete (my_result);
+  g_object_unref (my_result);
+}
+
+
+/**
+ * tp_simple_client_factory_upgrade_contacts_async:
+ * @self: a #TpSimpleClientFactory object
+ * @connection: a #TpConnection
+ * @n_contacts: The number of contacts in @contacts (must be at least 1)
+ * @contacts: (array length=n_contacts): An array of #TpContact objects
+ *  associated with @self
+ * @callback: a callback to call when the operation finishes
+ * @user_data: data to pass to @callback
+ *
+ * Same as tp_connection_upgrade_contacts_async(), but prepare contacts with all
+ * features previously passed to
+ * tp_simple_client_factory_add_contact_features().
+ *
+ * Since: 0.UNRELEASED
+ */
+void
+tp_simple_client_factory_upgrade_contacts_async (
+    TpSimpleClientFactory *self,
+    TpConnection *connection,
+    guint n_contacts,
+    TpContact * const *contacts,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  GSimpleAsyncResult *result;
+  GArray *features;
+
+  result = g_simple_async_result_new ((GObject *) self, callback, user_data,
+      tp_simple_client_factory_upgrade_contacts_async);
+
+  features = tp_simple_client_factory_dup_contact_features (self, connection);
+  tp_connection_upgrade_contacts_async (connection, n_contacts, contacts,
+      features->len, (TpContactFeature *) features->data,
+      upgrade_contacts_cb, result);
+  g_array_unref (features);
+}
+
+/**
+ * tp_simple_client_factory_upgrade_contacts_finish:
+ * @self: a #TpSimpleClientFactory
+ * @result: a #GAsyncResult
+ * @contacts: (element-type TelepathyGLib.Contact) (transfer container) (out) (allow-none):
+ *  a location to set a #GPtrArray of upgraded #TpContact, or %NULL.
+ * @error: a #GError to fill
+ *
+ * Finishes tp_simple_client_factory_upgrade_contacts_async()
+ *
+ * Returns: %TRUE on success, %FALSE otherwise.
+ * Since: 0.UNRELEASED
+ */
+gboolean
+tp_simple_client_factory_upgrade_contacts_finish (
+    TpSimpleClientFactory *self,
+    GAsyncResult *result,
+    GPtrArray **contacts,
+    GError **error)
+{
+  _tp_implement_finish_copy_pointer (self,
+      tp_simple_client_factory_upgrade_contacts_async,
+      g_ptr_array_ref, contacts);
+}
+
+static void
 dup_contact_by_id_cb (GObject *source,
     GAsyncResult *result,
     gpointer user_data)
diff --git a/telepathy-glib/simple-client-factory.h b/telepathy-glib/simple-client-factory.h
index fe5cfce..ced2504 100644
--- a/telepathy-glib/simple-client-factory.h
+++ b/telepathy-glib/simple-client-factory.h
@@ -176,6 +176,20 @@ TpContact *tp_simple_client_factory_ensure_contact (TpSimpleClientFactory *self,
     TpHandle handle,
     const gchar *identifier);
 _TP_AVAILABLE_IN_UNRELEASED
+void tp_simple_client_factory_upgrade_contacts_async (
+    TpSimpleClientFactory *self,
+    TpConnection *connection,
+    guint n_contacts,
+    TpContact * const *contacts,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+_TP_AVAILABLE_IN_UNRELEASED
+gboolean tp_simple_client_factory_upgrade_contacts_finish (
+    TpSimpleClientFactory *self,
+    GAsyncResult *result,
+    GPtrArray **contacts,
+    GError **error);
+_TP_AVAILABLE_IN_UNRELEASED
 void tp_simple_client_factory_ensure_contact_by_id_async (
     TpSimpleClientFactory *self,
     TpConnection *connection,



More information about the telepathy-commits mailing list