diff options
-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__ */ |