]> git.0d.be Git - empathy.git/commitdiff
Use _call_request_channel instead of _run_request_channel. (Jonny Lamb)
authorJonny Lamb <jonny.lamb@collabora.co.uk>
Fri, 21 Nov 2008 16:20:16 +0000 (16:20 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Fri, 21 Nov 2008 16:20:16 +0000 (16:20 +0000)
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
svn path=/trunk/; revision=1839

libempathy/empathy-dispatcher.c
libempathy/empathy-dispatcher.h

index 69a8e80cc8d5dc3ef77665a2408ab9cf7aa3ff90..433a9f19c6fb5e5cf61d82e9e2275d89e7fb2884 100644 (file)
@@ -927,67 +927,52 @@ empathy_dispatcher_chat_with_contact_id (McAccount   *account,
        g_object_unref (factory);
 }
 
-EmpathyTpFile *
-empathy_dispatcher_send_file (EmpathyContact *contact,
-                             GFile          *gfile)
+typedef struct {
+       GFile *gfile;
+       TpHandle handle;
+       EmpathyContact *contact;
+} FileChannelRequest;
+
+static void
+file_channel_request_cb (TpConnection *connection,
+                        const gchar  *object_path,
+                        const GError *error,
+                        gpointer      user_data,
+                        GObject      *weak_object)
 {
-       GFileInfo      *info;
-       guint64         size;
-       MissionControl *mc;
-       McAccount      *account;
-       TpConnection   *connection;
-       guint           handle;
-       gchar          *object_path;
-       TpChannel      *channel;
-       EmpathyTpFile  *tp_file;
-       GError         *error = NULL;
-       GValue          value = { 0 };
-       gchar          *filename;
+       GValue value = { 0 };
+       GFileInfo *info;
+       guint64 size;
+       gchar *filename;
+       TpChannel *channel;
+       EmpathyTpFile *tp_file;
+       FileChannelRequest *request = (FileChannelRequest *) user_data;
 
-       g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
-       g_return_val_if_fail (G_IS_FILE (gfile), NULL);
+       if (error) {
+               DEBUG ("Couldn't request channel: %s", error->message);
+               return;
+       }
 
-       info = g_file_query_info (gfile,
+       info = g_file_query_info (request->gfile,
                                  G_FILE_ATTRIBUTE_STANDARD_SIZE ","
                                  G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
                                  0, NULL, NULL);
        size = info ? g_file_info_get_size (info) : EMPATHY_TP_FILE_UNKNOWN_SIZE;
-       filename = g_file_get_basename (gfile);
-       mc = empathy_mission_control_new ();
-       account = empathy_contact_get_account (contact);
-       connection = mission_control_get_tpconnection (mc, account, NULL);
+       filename = g_file_get_basename (request->gfile);
        tp_connection_run_until_ready (connection, FALSE, NULL, NULL);
-       handle = empathy_contact_get_handle (contact);
 
        DEBUG ("Sending %s from a stream to %s (size %llu, content-type %s)",
-              filename, empathy_contact_get_name (contact), size,
+              filename, empathy_contact_get_name (request->contact), size,
               g_file_info_get_content_type (info));
 
-       if (!tp_cli_connection_run_request_channel (connection, -1,
-                                                   EMP_IFACE_CHANNEL_TYPE_FILE,
-                                                   TP_HANDLE_TYPE_CONTACT,
-                                                   handle,
-                                                   TRUE,
-                                                   &object_path,
-                                                   &error,
-                                                   NULL)) {
-               DEBUG ("Couldn't request channel: %s",
-                      error ? error->message : "No error given");
-               g_clear_error (&error);
-               g_object_unref (mc);
-               g_object_unref (connection);
-               return NULL;
-       }
-
        channel = tp_channel_new (connection,
-                                 object_path,
-                                 EMP_IFACE_CHANNEL_TYPE_FILE,
-                                 TP_HANDLE_TYPE_CONTACT,
-                                 handle,
-                                 NULL);
+                                object_path,
+                                EMP_IFACE_CHANNEL_TYPE_FILE,
+                                TP_HANDLE_TYPE_CONTACT,
+                                request->handle,
+                                NULL);
 
        /* FIXME: this should go in CreateChannel in the new requests API */
-
        g_value_init (&value, G_TYPE_STRING);
        g_value_set_string (&value, g_filename_display_basename (filename));
        tp_cli_dbus_properties_call_set (TP_PROXY (channel), -1,
@@ -1012,15 +997,50 @@ empathy_dispatcher_send_file (EmpathyContact *contact,
        tp_file = empathy_tp_file_new (channel);
 
        if (tp_file) {
-               empathy_tp_file_set_gfile (tp_file, gfile, NULL);
+               empathy_tp_file_set_gfile (tp_file, request->gfile, NULL);
        }
 
        empathy_tp_file_offer (tp_file);
 
-       g_object_unref (mc);
-       g_object_unref (connection);
+       g_object_unref (request->gfile);
+       g_slice_free (FileChannelRequest, request);
        g_object_unref (channel);
-       g_free (object_path);
+       g_free (filename);
+}
+
+void
+empathy_dispatcher_send_file (EmpathyContact *contact,
+                             GFile          *gfile)
+{
+       MissionControl *mc;
+       McAccount      *account;
+       TpConnection   *connection;
+       guint           handle;
+       FileChannelRequest *request;
+
+       g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+       g_return_if_fail (G_IS_FILE (gfile));
+
+       mc = empathy_mission_control_new ();
+       account = empathy_contact_get_account (contact);
+       connection = mission_control_get_tpconnection (mc, account, NULL);
+       handle = empathy_contact_get_handle (contact);
+
+       request = g_slice_new0 (FileChannelRequest);
+       request->gfile = g_object_ref (gfile);
+       request->handle = handle;
+       request->contact = contact;
 
-       return tp_file;
+       tp_cli_connection_call_request_channel (connection, -1,
+                                               EMP_IFACE_CHANNEL_TYPE_FILE,
+                                               TP_HANDLE_TYPE_CONTACT,
+                                               handle,
+                                               TRUE,
+                                               file_channel_request_cb,
+                                               request,
+                                               NULL,
+                                               NULL);
+
+       g_object_unref (mc);
+       g_object_unref (connection);
 }
index 491089d30c3936f5abbe43325878447d1fbab8ca..4c47df65166f7256efef96374db93d8745f7ed11 100644 (file)
@@ -73,7 +73,7 @@ void                   empathy_dispatcher_call_with_contact_id (McAccount
 void                   empathy_dispatcher_chat_with_contact_id (McAccount             *account,
                                                                const gchar           *contact_id);
 void                   empathy_dispatcher_chat_with_contact    (EmpathyContact        *contact);
-EmpathyTpFile *        empathy_dispatcher_send_file            (EmpathyContact        *contact,
+void                   empathy_dispatcher_send_file            (EmpathyContact        *contact,
                                                                GFile                 *gfile);
 
 G_END_DECLS