aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libempathy-gtk/empathy-ft-manager.c2
-rw-r--r--libempathy/empathy-tp-file.c165
-rw-r--r--libempathy/empathy-utils.c18
-rw-r--r--src/empathy-event-manager.c87
4 files changed, 143 insertions, 129 deletions
diff --git a/libempathy-gtk/empathy-ft-manager.c b/libempathy-gtk/empathy-ft-manager.c
index 9ca971099..536e2e7f4 100644
--- a/libempathy-gtk/empathy-ft-manager.c
+++ b/libempathy-gtk/empathy-ft-manager.c
@@ -1158,7 +1158,7 @@ ft_manager_receive_file_response_cb (GtkWidget *dialog,
else
{
channel = empathy_tp_file_get_channel (response_data->tp_file);
- tp_cli_channel_run_close (channel, -1, NULL, NULL);
+ tp_cli_channel_call_close (channel, -1, NULL, NULL, NULL, NULL);
free_receive_response_data (response_data);
}
diff --git a/libempathy/empathy-tp-file.c b/libempathy/empathy-tp-file.c
index 9ce2e3be7..fec91af5a 100644
--- a/libempathy/empathy-tp-file.c
+++ b/libempathy/empathy-tp-file.c
@@ -268,7 +268,7 @@ tp_file_finalize (GObject *object)
DEBUG ("Closing channel..");
g_signal_handlers_disconnect_by_func (priv->channel,
tp_file_destroy_cb, object);
- tp_cli_channel_run_close (priv->channel, -1, NULL, NULL);
+ tp_cli_channel_call_close (priv->channel, -1, NULL, NULL, NULL, NULL);
if (G_IS_OBJECT (priv->channel))
g_object_unref (priv->channel);
}
@@ -308,6 +308,49 @@ tp_file_finalize (GObject *object)
G_OBJECT_CLASS (empathy_tp_file_parent_class)->finalize (object);
}
+static void
+tp_file_get_all_cb (TpProxy *proxy,
+ GHashTable *properties,
+ const GError *error,
+ gpointer user_data,
+ GObject *weak_object)
+{
+ EmpathyTpFilePriv *priv = (EmpathyTpFilePriv *) user_data;
+
+ if (error)
+ {
+ DEBUG ("Failed to get properties: %s", error->message);
+ return;
+ }
+
+ priv->size = g_value_get_uint64 (
+ g_hash_table_lookup (properties, "Size"));
+
+ priv->state = g_value_get_uint (
+ g_hash_table_lookup (properties, "State"));
+
+ /* Invalid reason, so empathy_file_get_state_change_reason() can give
+ * a warning if called for a not closed file transfer. */
+ priv->state_change_reason = -1;
+
+ priv->transferred_bytes = g_value_get_uint64 (
+ g_hash_table_lookup (properties, "TransferredBytes"));
+
+ priv->filename = g_value_dup_string (
+ g_hash_table_lookup (properties, "Filename"));
+
+ priv->content_hash = g_value_dup_string (
+ g_hash_table_lookup (properties, "ContentHash"));
+
+ priv->description = g_value_dup_string (
+ g_hash_table_lookup (properties, "Description"));
+
+ if (priv->state == EMP_FILE_TRANSFER_STATE_LOCAL_PENDING)
+ priv->incoming = TRUE;
+
+ g_hash_table_destroy (properties);
+}
+
static GObject *
tp_file_constructor (GType type,
guint n_props,
@@ -315,8 +358,6 @@ tp_file_constructor (GType type,
{
GObject *tp_file;
EmpathyTpFilePriv *priv;
- GError *error = NULL;
- GHashTable *properties;
TpHandle handle;
tp_file = G_OBJECT_CLASS (empathy_tp_file_parent_class)->constructor (type,
@@ -352,39 +393,8 @@ tp_file_constructor (GType type,
priv->account,
(guint) handle);
- if (!tp_cli_dbus_properties_run_get_all (priv->channel,
- -1, EMP_IFACE_CHANNEL_TYPE_FILE, &properties, &error, NULL))
- {
- DEBUG ("Failed to get properties: %s",
- error ? error->message : "No error given");
- g_clear_error (&error);
- return NULL;
- }
-
- priv->size = g_value_get_uint64 (g_hash_table_lookup (properties, "Size"));
-
- priv->state = g_value_get_uint (g_hash_table_lookup (properties, "State"));
-
- /* Invalid reason, so empathy_file_get_state_change_reason() can give
- * a warning if called for a not closed file transfer. */
- priv->state_change_reason = -1;
-
- priv->transferred_bytes = g_value_get_uint64 (g_hash_table_lookup (
- properties, "TransferredBytes"));
-
- priv->filename = g_value_dup_string (g_hash_table_lookup (properties,
- "Filename"));
-
- priv->content_hash = g_value_dup_string (g_hash_table_lookup (properties,
- "ContentHash"));
-
- priv->description = g_value_dup_string (g_hash_table_lookup (properties,
- "Description"));
-
- if (priv->state == EMP_FILE_TRANSFER_STATE_LOCAL_PENDING)
- priv->incoming = TRUE;
-
- g_hash_table_destroy (properties);
+ tp_cli_dbus_properties_call_get_all (priv->channel,
+ -1, EMP_IFACE_CHANNEL_TYPE_FILE, tp_file_get_all_cb, priv, NULL, NULL);
return tp_file;
}
@@ -421,13 +431,9 @@ tp_file_channel_set_dbus_property (gpointer proxy,
const GValue *value)
{
DEBUG ("Setting %s property", property);
- tp_cli_dbus_properties_run_set (TP_PROXY (proxy),
- -1,
- EMP_IFACE_CHANNEL_TYPE_FILE,
- property,
- value,
- NULL, NULL);
- DEBUG ("done");
+ tp_cli_dbus_properties_call_set (TP_PROXY (proxy), -1,
+ EMP_IFACE_CHANNEL_TYPE_FILE, property, value,
+ NULL, NULL, NULL, NULL);
}
@@ -615,6 +621,30 @@ _get_local_socket (EmpathyTpFile *tp_file)
return fd;
}
+static void
+tp_file_method_cb (TpProxy *proxy,
+ const GValue *address,
+ const GError *error,
+ gpointer user_data,
+ GObject *weak_object)
+{
+ EmpathyTpFilePriv *priv = (EmpathyTpFilePriv *) user_data;
+
+ if (error)
+ {
+ DEBUG ("Error: %s", error->message);
+ return;
+ }
+
+ if (priv->unix_socket_path)
+ g_free (priv->unix_socket_path);
+
+ priv->unix_socket_path = g_value_dup_string (address);
+
+ DEBUG ("Got unix socket path: %s", priv->unix_socket_path);
+}
+
+
/**
* empathy_tp_file_accept:
* @tp_file: an #EmpathyTpFile
@@ -627,9 +657,7 @@ empathy_tp_file_accept (EmpathyTpFile *tp_file,
guint64 offset)
{
EmpathyTpFilePriv *priv;
- GValue *address;
GValue nothing = { 0 };
- GError *error = NULL;
g_return_if_fail (EMPATHY_IS_TP_FILE (tp_file));
@@ -642,31 +670,22 @@ empathy_tp_file_accept (EmpathyTpFile *tp_file,
g_value_init (&nothing, G_TYPE_STRING);
g_value_set_string (&nothing, "");
- if (!emp_cli_channel_type_file_run_accept_file (TP_PROXY (priv->channel),
+ emp_cli_channel_type_file_call_accept_file (TP_PROXY (priv->channel),
-1, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST,
- &nothing, offset, &address, &error, NULL))
- {
- DEBUG ("Accept error: %s",
- error ? error->message : "No message given");
- g_clear_error (&error);
- return;
- }
-
- if (priv->unix_socket_path)
- g_free (priv->unix_socket_path);
-
- priv->unix_socket_path = g_value_dup_string (address);
- g_value_unset (address);
-
- DEBUG ("Got unix socket path: %s", priv->unix_socket_path);
+ &nothing, offset, tp_file_method_cb, priv, NULL, NULL);
}
+/**
+ * empathy_tp_file_offer:
+ * @tp_file: an #EmpathyTpFile
+ *
+ * Offers a file transfer that's in the "not offered" state (i.e.
+ * EMP_FILE_TRANSFER_STATE_NOT_OFFERED).
+ */
void
empathy_tp_file_offer (EmpathyTpFile *tp_file)
{
EmpathyTpFilePriv *priv;
- GValue *address;
- GError *error = NULL;
GValue nothing = { 0 };
g_return_if_fail (EMPATHY_IS_TP_FILE (tp_file));
@@ -676,23 +695,9 @@ empathy_tp_file_offer (EmpathyTpFile *tp_file)
g_value_init (&nothing, G_TYPE_STRING);
g_value_set_string (&nothing, "");
- if (!emp_cli_channel_type_file_run_offer_file (TP_PROXY (priv->channel),
+ emp_cli_channel_type_file_call_offer_file (TP_PROXY (priv->channel),
-1, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST,
- &nothing, &address, &error, NULL))
- {
- DEBUG ("OfferFile error: %s",
- error ? error->message : "No message given");
- g_clear_error (&error);
- return;
- }
-
- if (priv->unix_socket_path)
- g_free (priv->unix_socket_path);
-
- priv->unix_socket_path = g_value_dup_string (address);
- g_value_unset (address);
-
- DEBUG ("Got unix socket path: %s", priv->unix_socket_path);
+ &nothing, tp_file_method_cb, priv, NULL, NULL);
}
static void
@@ -925,7 +930,7 @@ empathy_tp_file_cancel (EmpathyTpFile *tp_file)
priv = GET_PRIV (tp_file);
- tp_cli_channel_run_close (priv->channel, -1, NULL, NULL);
+ tp_cli_channel_call_close (priv->channel, -1, NULL, NULL, NULL, NULL);
g_cancellable_cancel (priv->cancellable);
}
diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c
index 7397a0784..a789fdc31 100644
--- a/libempathy/empathy-utils.c
+++ b/libempathy/empathy-utils.c
@@ -843,23 +843,23 @@ empathy_send_file (EmpathyContact *contact,
g_value_init (&value, G_TYPE_STRING);
g_value_set_string (&value, g_filename_display_basename (filename));
- tp_cli_dbus_properties_run_set (TP_PROXY (channel),
- -1, EMP_IFACE_CHANNEL_TYPE_FILE, "Filename",
- &value, NULL, NULL);
+ tp_cli_dbus_properties_call_set (TP_PROXY (channel), -1,
+ EMP_IFACE_CHANNEL_TYPE_FILE, "Filename",
+ &value, NULL, NULL, NULL, NULL);
g_value_reset (&value);
g_value_set_string (&value, g_file_info_get_content_type (info));
- tp_cli_dbus_properties_run_set (TP_PROXY (channel),
- -1, EMP_IFACE_CHANNEL_TYPE_FILE, "ContentType",
- &value, NULL, NULL);
+ tp_cli_dbus_properties_call_set (TP_PROXY (channel), -1,
+ EMP_IFACE_CHANNEL_TYPE_FILE, "Filename",
+ &value, NULL, NULL, NULL, NULL);
g_value_unset (&value);
g_value_init (&value, G_TYPE_UINT64);
g_value_set_uint64 (&value, size);
- tp_cli_dbus_properties_run_set (TP_PROXY (channel),
- -1, EMP_IFACE_CHANNEL_TYPE_FILE, "Size",
- &value, NULL, NULL);
+ tp_cli_dbus_properties_call_set (TP_PROXY (channel), -1,
+ EMP_IFACE_CHANNEL_TYPE_FILE, "Size",
+ &value, NULL, NULL, NULL, NULL);
g_value_unset (&value);
tp_file = empathy_tp_file_new (account, channel);
diff --git a/src/empathy-event-manager.c b/src/empathy-event-manager.c
index 913e69c9f..fdc3fc332 100644
--- a/src/empathy-event-manager.c
+++ b/src/empathy-event-manager.c
@@ -189,6 +189,48 @@ event_channel_file_process_func (EventPriv *event)
}
static void
+file_channel_state_cb (TpProxy *proxy,
+ const GValue *state,
+ const GError *error,
+ gpointer user_data,
+ GObject *weak_object)
+{
+ TpChannel *channel = (TpChannel *) weak_object;
+ EmpathyEventManager *manager = (EmpathyEventManager *) user_data;
+
+ if (error) {
+ DEBUG ("Error: %s", error->message);
+ return;
+ }
+
+ /* Only deal with incoming channels */
+ if (g_value_get_uint (state) ==
+ EMP_FILE_TRANSFER_STATE_LOCAL_PENDING) {
+ EmpathyContact *contact;
+ gchar *msg;
+ McAccount *account;
+ EmpathyTpFile *tp_file;
+
+ account = empathy_channel_get_account (channel);
+ tp_file = empathy_tp_file_new (account, channel);
+
+ contact = empathy_tp_file_get_contact (tp_file);
+
+ msg = g_strdup_printf (_("Incoming file transfer from %s"),
+ empathy_contact_get_name (contact));
+
+ event_manager_add (manager, contact,
+ EMPATHY_IMAGE_DOCUMENT_SEND,
+ msg,
+ channel,
+ event_channel_file_process_func,
+ tp_file);
+
+ g_free (msg);
+ }
+}
+
+static void
event_manager_filter_channel_cb (EmpathyDispatcher *dispatcher,
TpChannel *channel,
EmpathyEventManager *manager)
@@ -227,45 +269,12 @@ event_manager_filter_channel_cb (EmpathyDispatcher *dispatcher,
g_object_unref (tp_group);
}
else if (!tp_strdiff (channel_type, EMP_IFACE_CHANNEL_TYPE_FILE)) {
- GValue *state;
-
- tp_cli_dbus_properties_run_get (channel,
- -1,
- EMP_IFACE_CHANNEL_TYPE_FILE,
- "State",
- &state,
- NULL,
- NULL);
-
- DEBUG ("file channel with state %u", g_value_get_uint (state));
-
- /* Only deal with incoming channels */
- if (g_value_get_uint (state) ==
- EMP_FILE_TRANSFER_STATE_LOCAL_PENDING) {
- EmpathyContact *contact;
- gchar *msg;
- McAccount *account;
- EmpathyTpFile *tp_file;
-
- account = empathy_channel_get_account (channel);
- tp_file = empathy_tp_file_new (account, channel);
-
- contact = empathy_tp_file_get_contact (tp_file);
-
- msg = g_strdup_printf (_("Incoming file transfer from %s"),
- empathy_contact_get_name (contact));
-
- event_manager_add (manager, contact,
- EMPATHY_IMAGE_DOCUMENT_SEND,
- msg,
- channel,
- event_channel_file_process_func,
- tp_file);
-
- g_free (msg);
- }
-
- g_value_unset (state);
+ tp_cli_dbus_properties_call_get (channel, -1,
+ EMP_IFACE_CHANNEL_TYPE_FILE,
+ "State",
+ file_channel_state_cb,
+ manager, NULL,
+ G_OBJECT (channel));
}
g_free (channel_type);