]> git.0d.be Git - empathy.git/commitdiff
Made property-getting synchronous again so there isn't a massive race condition ...
authorJonny Lamb <jonny.lamb@collabora.co.uk>
Fri, 21 Nov 2008 16:17:57 +0000 (16:17 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Fri, 21 Nov 2008 16:17:57 +0000 (16:17 +0000)
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>
svn path=/trunk/; revision=1802

libempathy/empathy-tp-file.c

index 020e7af67f751f793dc5fa1b9e0afe933b65ee26..ee9f01e9b0a99f83d47bf9cf647bc422e2b36b53 100644 (file)
@@ -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;
 }