diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-05-10 17:31:14 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-05-10 17:36:53 +0800 |
commit | 1b678e4f3f233e852dded51c069e8859e16aa3d5 (patch) | |
tree | b0584f2b4f69d5d10de24296db0237fa8ee8bfba | |
parent | 746b5f4f72a6b9403ea7bd2e71a6b6cf815efc8a (diff) | |
download | gsoc2013-empathy-1b678e4f3f233e852dded51c069e8859e16aa3d5.tar gsoc2013-empathy-1b678e4f3f233e852dded51c069e8859e16aa3d5.tar.gz gsoc2013-empathy-1b678e4f3f233e852dded51c069e8859e16aa3d5.tar.bz2 gsoc2013-empathy-1b678e4f3f233e852dded51c069e8859e16aa3d5.tar.lz gsoc2013-empathy-1b678e4f3f233e852dded51c069e8859e16aa3d5.tar.xz gsoc2013-empathy-1b678e4f3f233e852dded51c069e8859e16aa3d5.tar.zst gsoc2013-empathy-1b678e4f3f233e852dded51c069e8859e16aa3d5.zip |
add empathy_client_factory_dup_contact_by_id_async()
https://bugzilla.gnome.org/show_bug.cgi?id=675597
-rw-r--r-- | libempathy/empathy-client-factory.c | 64 | ||||
-rw-r--r-- | libempathy/empathy-client-factory.h | 15 |
2 files changed, 79 insertions, 0 deletions
diff --git a/libempathy/empathy-client-factory.c b/libempathy/empathy-client-factory.c index 9135562fb..d84d4454e 100644 --- a/libempathy/empathy-client-factory.c +++ b/libempathy/empathy-client-factory.c @@ -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); +} diff --git a/libempathy/empathy-client-factory.h b/libempathy/empathy-client-factory.h index c4d88e286..034f6e6fd 100644 --- a/libempathy/empathy-client-factory.h +++ b/libempathy/empathy-client-factory.h @@ -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__ */ |