[empathy: 104/148] Set use_hash according to what the CM returns



commit 24c1b03b78ee231e78a52ec79eb15e2f41e80338
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Mon May 18 14:55:01 2009 +0200

    Set use_hash according to what the CM returns
    
    Set use_hash according to what the CM returns and not what the user
    would like it to be, so that clients won't be confused about whether
    they should connect to "hashing-started" after "transfer-done".
---
 libempathy/empathy-ft-handler.c |   11 +++++++++++
 src/empathy-ft-manager.c        |   10 +++++++---
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/libempathy/empathy-ft-handler.c b/libempathy/empathy-ft-handler.c
index e2172bc..beb57b1 100644
--- a/libempathy/empathy-ft-handler.c
+++ b/libempathy/empathy-ft-handler.c
@@ -1277,14 +1277,25 @@ empathy_ft_handler_incoming_set_destination (EmpathyFTHandler *handler,
     GFile *destination,
     gboolean use_hash)
 {
+  EmpathyFTHandlerPriv *priv;
+
   DEBUG ("Set incoming destination, use hash %s",
          use_hash ? "True" : "False");
 
   g_return_if_fail (EMPATHY_IS_FT_HANDLER (handler));
   g_return_if_fail (G_IS_FILE (destination));
 
+  priv = GET_PRIV (handler);
+
   g_object_set (handler, "gfile", destination,
       "use-hash", use_hash, NULL);
+
+  /* check if hash is really supported. if it isn't, set use_hash to FALSE
+   * anyway, so that clients won't be expecting us to checksum.
+   */
+  if (EMP_STR_EMPTY (priv->content_hash) ||
+      priv->content_hash_type == TP_FILE_HASH_TYPE_NONE)
+    priv->use_hash = FALSE;
 }
 
 /**
diff --git a/src/empathy-ft-manager.c b/src/empathy-ft-manager.c
index 858b212..7b3e88a 100644
--- a/src/empathy-ft-manager.c
+++ b/src/empathy-ft-manager.c
@@ -491,16 +491,20 @@ ft_handler_transfer_done_cb (EmpathyFTHandler *handler,
                              EmpathyTpFile *tp_file,
                              EmpathyFTManager *manager)
 {
-  DEBUG ("Transfer done");
-
   if (empathy_ft_handler_is_incoming (handler) &&
       empathy_ft_handler_get_use_hash (handler))
     {
-      /* connect to the signal */
+      DEBUG ("Transfer done, waiting for hashing-started");
+
+      /* connect to the signal and return early */
       g_signal_connect (handler, "hashing-started",
           G_CALLBACK (ft_handler_hashing_started_cb), manager);
+
+      return;
     }
 
+  DEBUG ("Transfer done, no hashing");
+
   do_real_transfer_done (manager, handler);
 }
 



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