]> git.0d.be Git - empathy.git/commitdiff
add empathy_client_factory_dup_contact_by_id_async()
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Thu, 10 May 2012 09:31:14 +0000 (11:31 +0200)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Thu, 10 May 2012 09:36:53 +0000 (11:36 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=675597

libempathy/empathy-client-factory.c
libempathy/empathy-client-factory.h

index 9135562fbd02c73f689663a0183f347b20d5f1cc..d84d4454e0bb9facae3106309bb81fa9dba3ef8b 100644 (file)
@@ -213,3 +213,67 @@ empathy_client_factory_dup (void)
 
   return singleton;
 }
+
+static void
+dup_contact_cb (GObject *source,
+    GAsyncResult *result,
+    gpointer user_data)
+{
+  GSimpleAsyncResult *my_result = user_data;
+  GError *error = NULL;
+  TpContact *contact;
+
+  contact = tp_connection_dup_contact_by_id_finish (TP_CONNECTION (source),
+      result, &error);
+
+  if (contact == NULL)
+    {
+      g_simple_async_result_take_error (my_result, error);
+    }
+  else
+    {
+      g_simple_async_result_set_op_res_gpointer (my_result,
+          empathy_contact_dup_from_tp_contact (contact), g_object_unref);
+
+      g_object_unref (contact);
+    }
+
+  g_simple_async_result_complete (my_result);
+  g_object_unref (my_result);
+}
+
+void
+empathy_client_factory_dup_contact_by_id_async (
+    EmpathyClientFactory *self,
+    TpConnection *connection,
+    const gchar *id,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  GSimpleAsyncResult *result;
+  GArray *features;
+
+  g_return_if_fail (EMPATHY_IS_CLIENT_FACTORY (self));
+  g_return_if_fail (id != NULL);
+
+  result = g_simple_async_result_new ((GObject *) self, callback, user_data,
+      empathy_client_factory_dup_contact_by_id_async);
+
+  features = empathy_client_factory_dup_contact_features (
+      TP_SIMPLE_CLIENT_FACTORY (self), connection);
+
+  tp_connection_dup_contact_by_id_async (connection, id, features->len,
+      (TpContactFeature * ) features->data, dup_contact_cb, result);
+
+  g_array_unref (features);
+}
+
+EmpathyContact *
+empathy_client_factory_dup_contact_by_id_finish (
+    EmpathyClientFactory *self,
+    GAsyncResult *result,
+    GError **error)
+{
+  empathy_implement_finish_return_copy_pointer (self,
+      empathy_client_factory_dup_contact_by_id_async, g_object_ref);
+}
index c4d88e2861556546d4ac6f6cfe3911e74ee94792..034f6e6fd1c2e9c844688e71281ae6efe204b301 100644 (file)
@@ -24,6 +24,9 @@
 
 #include <telepathy-glib/telepathy-glib.h>
 
+
+#include "empathy-contact.h"
+
 G_BEGIN_DECLS
 
 #define EMPATHY_TYPE_CLIENT_FACTORY         (empathy_client_factory_get_type ())
@@ -52,5 +55,17 @@ GType empathy_client_factory_get_type (void) G_GNUC_CONST;
 
 EmpathyClientFactory * empathy_client_factory_dup (void);
 
+void empathy_client_factory_dup_contact_by_id_async (
+    EmpathyClientFactory *self,
+    TpConnection *connection,
+    const gchar *id,
+    GAsyncReadyCallback callback,
+    gpointer user_data);
+
+EmpathyContact * empathy_client_factory_dup_contact_by_id_finish (
+    EmpathyClientFactory *self,
+    GAsyncResult *result,
+    GError **error) G_GNUC_WARN_UNUSED_RESULT;
+
 G_END_DECLS
 #endif /* __EMPATHY_CLIENT_FACTORY_H__ */