static void ft_manager_update_buttons (EmpathyFTManager *manager) { GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; EmpathyFTHandler *handler; gboolean open_enabled = FALSE; gboolean abort_enabled = FALSE; gboolean clear_enabled = FALSE; gboolean is_completed, is_cancelled; GHashTableIter hash_iter; EmpathyFTManagerPriv *priv = GET_PRIV (manager); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview)); if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gtk_tree_model_get (model, &iter, COL_FT_OBJECT, &handler, -1); is_completed = empathy_ft_handler_is_completed (handler); is_cancelled = empathy_ft_handler_is_cancelled (handler); /* I can open the file if the transfer is completed and was incoming */ open_enabled = (is_completed && empathy_ft_handler_is_incoming (handler)); /* I can abort if the transfer is not already finished */ abort_enabled = (is_cancelled == FALSE && is_completed == FALSE); g_object_unref (handler); } g_hash_table_iter_init (&hash_iter, priv->ft_handler_to_row_ref); while (g_hash_table_iter_next (&hash_iter, (gpointer *) &handler, NULL)) { if (empathy_ft_handler_is_completed (handler) || empathy_ft_handler_is_cancelled (handler)) clear_enabled = TRUE; if (clear_enabled) break; } gtk_widget_set_sensitive (priv->open_button, open_enabled); gtk_widget_set_sensitive (priv->abort_button, abort_enabled); if (clear_enabled) gtk_widget_set_sensitive (priv->clear_button, TRUE); }
static void ft_transfer_progress_callback (EmpathyTpFile *tp_file, guint64 transferred_bytes, gpointer user_data) { EmpathyFTHandler *handler = user_data; EmpathyFTHandlerPriv *priv = GET_PRIV (handler); if (empathy_ft_handler_is_cancelled (handler)) return; if (transferred_bytes == 0) { priv->last_update_time = empathy_time_get_current (); g_signal_emit (handler, signals[TRANSFER_STARTED], 0, tp_file); } if (priv->transferred_bytes != transferred_bytes) { update_remaining_time_and_speed (handler, transferred_bytes); g_signal_emit (handler, signals[TRANSFER_PROGRESS], 0, transferred_bytes, priv->total_bytes, priv->remaining_time, priv->speed); } }
static void ft_transfer_transferred_bytes_cb (TpFileTransferChannel *channel, GParamSpec *pspec, EmpathyFTHandler *handler) { EmpathyFTHandlerPriv *priv = handler->priv; guint64 bytes; (void)pspec; /* suppress unused-parameter warning */ if (empathy_ft_handler_is_cancelled (handler)) return; bytes = tp_file_transfer_channel_get_transferred_bytes (channel); if (priv->transferred_bytes == 0) { priv->last_update_time = time_get_current (); g_signal_emit (handler, signals[TRANSFER_STARTED], 0, channel); } if (priv->transferred_bytes != bytes) { update_remaining_time_and_speed (handler, bytes); g_signal_emit (handler, signals[TRANSFER_PROGRESS], 0, bytes, priv->total_bytes, priv->remaining_time, priv->speed); } }
static gboolean remove_finished_transfer_foreach (gpointer key, gpointer value, gpointer user_data) { EmpathyFTHandler *handler = key; EmpathyFTManager *manager = user_data; if (empathy_ft_handler_is_completed (handler) || empathy_ft_handler_is_cancelled (handler)) { ft_manager_remove_file_from_model (manager, handler); return TRUE; } return FALSE; }