empathy r1802 - trunk/libempathy



Author: xclaesse
Date: Fri Nov 21 16:17:57 2008
New Revision: 1802
URL: http://svn.gnome.org/viewvc/empathy?rev=1802&view=rev

Log:
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 <jonny lamb collabora co uk>

Modified:
   trunk/libempathy/empathy-tp-file.c

Modified: trunk/libempathy/empathy-tp-file.c
==============================================================================
--- trunk/libempathy/empathy-tp-file.c	(original)
+++ trunk/libempathy/empathy-tp-file.c	Fri Nov 21 16:17:57 2008
@@ -390,49 +390,6 @@
 }
 
 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,
                    GObject *weak_object)
@@ -584,6 +541,7 @@
   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->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;
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]