diff options
author | Cosimo Cecchi <cosimoc@gnome.org> | 2009-05-18 22:59:19 +0800 |
---|---|---|
committer | Cosimo Cecchi <cosimoc@gnome.org> | 2009-06-01 23:53:21 +0800 |
commit | 9e3494b16c494577ea54fb809f7dadba1ba482b4 (patch) | |
tree | d5e37992759612488be80c52eb9305961746adf3 | |
parent | f131fb616483531a97334890c56376fc0e2f4cf2 (diff) | |
download | gsoc2013-empathy-9e3494b16c494577ea54fb809f7dadba1ba482b4.tar gsoc2013-empathy-9e3494b16c494577ea54fb809f7dadba1ba482b4.tar.gz gsoc2013-empathy-9e3494b16c494577ea54fb809f7dadba1ba482b4.tar.bz2 gsoc2013-empathy-9e3494b16c494577ea54fb809f7dadba1ba482b4.tar.lz gsoc2013-empathy-9e3494b16c494577ea54fb809f7dadba1ba482b4.tar.xz gsoc2013-empathy-9e3494b16c494577ea54fb809f7dadba1ba482b4.tar.zst gsoc2013-empathy-9e3494b16c494577ea54fb809f7dadba1ba482b4.zip |
Use the new function in EmpathyFTHandler
-rw-r--r-- | libempathy/empathy-ft-handler.c | 71 |
1 files changed, 36 insertions, 35 deletions
diff --git a/libempathy/empathy-ft-handler.c b/libempathy/empathy-ft-handler.c index beb57b1ed..bd789ff29 100644 --- a/libempathy/empathy-ft-handler.c +++ b/libempathy/empathy-ft-handler.c @@ -117,6 +117,8 @@ typedef struct { GCancellable *cancellable; gboolean use_hash; + EmpathyDispatcher *dispatcher; + /* request for the new transfer */ GHashTable *request; @@ -236,6 +238,12 @@ do_dispose (GObject *object) g_hash_table_unref (priv->request); priv->request = NULL; } + + if (priv->dispatcher != NULL) + { + g_object_unref (priv->dispatcher); + priv->dispatcher = NULL; + } G_OBJECT_CLASS (empathy_ft_handler_parent_class)->dispose (object); } @@ -442,6 +450,7 @@ empathy_ft_handler_init (EmpathyFTHandler *self) self->priv = priv; priv->cancellable = g_cancellable_new (); + priv->dispatcher = empathy_dispatcher_dup_singleton (); } /* private functions */ @@ -659,46 +668,16 @@ ft_handler_create_channel_cb (EmpathyDispatchOperation *operation, static void ft_handler_push_to_dispatcher (EmpathyFTHandler *handler) { - EmpathyDispatcher *dispatcher; TpConnection *connection; EmpathyFTHandlerPriv *priv = GET_PRIV (handler); DEBUG ("Pushing request to the dispatcher"); - dispatcher = empathy_dispatcher_dup_singleton (); connection = empathy_contact_get_connection (priv->contact); /* I want to own a reference to the request, and destroy it later */ - empathy_dispatcher_create_channel (dispatcher, connection, + empathy_dispatcher_create_channel (priv->dispatcher, connection, g_hash_table_ref (priv->request), ft_handler_create_channel_cb, handler); - - g_object_unref (dispatcher); -} - -static gboolean -ft_handler_check_if_allowed (EmpathyFTHandler *handler) -{ - EmpathyDispatcher *dispatcher; - EmpathyFTHandlerPriv *priv = GET_PRIV (handler); - TpConnection *connection; - GStrv allowed; - gboolean res = TRUE; - - dispatcher = empathy_dispatcher_dup_singleton (); - connection = empathy_contact_get_connection (priv->contact); - - allowed = empathy_dispatcher_find_channel_class (dispatcher, connection, - TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER, TP_HANDLE_TYPE_CONTACT); - - if (!tp_strv_contains ((const gchar * const *) allowed, - TP_IFACE_CHANNEL ".TargetHandle")) - res = FALSE; - - DEBUG ("check if FT allowed: %s", res ? "True" : "False"); - - g_object_unref (dispatcher); - - return res; } static void @@ -954,13 +933,21 @@ ft_handler_read_async_cb (GObject *source, } static void -ft_handler_complete_request (EmpathyFTHandler *handler) -{ +find_channel_class_cb (GStrv channel_class, + gpointer user_data) +{ + EmpathyFTHandler *handler = user_data; EmpathyFTHandlerPriv *priv = GET_PRIV (handler); + gboolean allowed = TRUE; GError *myerr = NULL; - /* check if FT is allowed before firing up the I/O machinery */ - if (!ft_handler_check_if_allowed (handler)) + if (!tp_strv_contains ((const gchar * const *) channel_class, + TP_IFACE_CHANNEL ".TargetHandle")) + allowed = FALSE; + + DEBUG ("check if FT allowed: %s", allowed ? "True" : "False"); + + if (!allowed) { g_set_error_literal (&myerr, EMPATHY_FT_ERROR_QUARK, EMPATHY_FT_ERROR_NOT_SUPPORTED, @@ -985,6 +972,20 @@ ft_handler_complete_request (EmpathyFTHandler *handler) } static void +ft_handler_complete_request (EmpathyFTHandler *handler) +{ + EmpathyFTHandlerPriv *priv = GET_PRIV (handler); + TpConnection *connection; + + /* check if FT is allowed before firing up the I/O machinery */ + connection = empathy_contact_get_connection (priv->contact); + + empathy_dispatcher_find_channel_class_async (priv->dispatcher, connection, + TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER, TP_HANDLE_TYPE_CONTACT, + find_channel_class_cb, handler); +} + +static void callbacks_data_free (gpointer user_data) { CallbacksData *data = user_data; |