From efbf766fa6201b6157e2c905f50add0684ed124e Mon Sep 17 00:00:00 2001 From: Jonny Lamb Date: Fri, 21 Nov 2008 16:17:57 +0000 Subject: [PATCH] Made property-getting synchronous again so there isn't a massive race condition (Jonny Lamb) This is more of a workaround than a fix and should be fixed fairly soonish. Signed-off-by: Jonny Lamb svn path=/trunk/; revision=1802 --- libempathy/empathy-tp-file.c | 75 +++++++++++++++--------------------- 1 file changed, 30 insertions(+), 45 deletions(-) diff --git a/libempathy/empathy-tp-file.c b/libempathy/empathy-tp-file.c index 020e7af6..ee9f01e9 100644 --- a/libempathy/empathy-tp-file.c +++ b/libempathy/empathy-tp-file.c @@ -389,49 +389,6 @@ 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) -{ - EmpathyTpFile *tp_file = (EmpathyTpFile *) user_data; - - if (error) - { - DEBUG ("Failed to get properties: %s", error->message); - return; - } - - tp_file->priv->size = g_value_get_uint64 ( - g_hash_table_lookup (properties, "Size")); - - tp_file->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. */ - tp_file->priv->state_change_reason = -1; - - tp_file->priv->transferred_bytes = g_value_get_uint64 ( - g_hash_table_lookup (properties, "TransferredBytes")); - - tp_file->priv->filename = g_value_dup_string ( - g_hash_table_lookup (properties, "Filename")); - - tp_file->priv->content_hash = g_value_dup_string ( - g_hash_table_lookup (properties, "ContentHash")); - - tp_file->priv->description = g_value_dup_string ( - g_hash_table_lookup (properties, "Description")); - - if (tp_file->priv->state == EMP_FILE_TRANSFER_STATE_LOCAL_PENDING) - tp_file->priv->incoming = TRUE; - - g_hash_table_destroy (properties); -} - static void tp_file_closed_cb (TpChannel *file_channel, EmpathyTpFile *tp_file, @@ -584,6 +541,7 @@ tp_file_constructor (GType type, GObject *file_obj; EmpathyTpFile *tp_file; TpHandle handle; + GHashTable *properties; file_obj = G_OBJECT_CLASS (empathy_tp_file_parent_class)->constructor (type, n_props, props); @@ -616,8 +574,35 @@ tp_file_constructor (GType type, tp_file->priv->contact = empathy_contact_factory_get_from_handle ( tp_file->priv->factory, tp_file->priv->account, (guint) handle); - tp_cli_dbus_properties_call_get_all (tp_file->priv->channel, - -1, EMP_IFACE_CHANNEL_TYPE_FILE, tp_file_get_all_cb, tp_file, NULL, NULL); + tp_cli_dbus_properties_run_get_all (tp_file->priv->channel, + -1, EMP_IFACE_CHANNEL_TYPE_FILE, &properties, NULL, NULL); + + tp_file->priv->size = g_value_get_uint64 ( + g_hash_table_lookup (properties, "Size")); + + tp_file->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. */ + tp_file->priv->state_change_reason = -1; + + tp_file->priv->transferred_bytes = g_value_get_uint64 ( + g_hash_table_lookup (properties, "TransferredBytes")); + + tp_file->priv->filename = g_value_dup_string ( + g_hash_table_lookup (properties, "Filename")); + + tp_file->priv->content_hash = g_value_dup_string ( + g_hash_table_lookup (properties, "ContentHash")); + + tp_file->priv->description = g_value_dup_string ( + g_hash_table_lookup (properties, "Description")); + + if (tp_file->priv->state == EMP_FILE_TRANSFER_STATE_LOCAL_PENDING) + tp_file->priv->incoming = TRUE; + + g_hash_table_destroy (properties); return file_obj; } -- 2.39.2