static void ft_handler_transfer_started_cb (EmpathyFTHandler *handler, TpFileTransferChannel *channel, EmpathyFTManager *manager) { guint64 transferred_bytes, total_bytes; DEBUG ("Transfer started"); g_signal_connect (handler, "transfer-progress", G_CALLBACK (ft_handler_transfer_progress_cb), manager); g_signal_connect (handler, "transfer-done", G_CALLBACK (ft_handler_transfer_done_cb), manager); transferred_bytes = empathy_ft_handler_get_transferred_bytes (handler); total_bytes = empathy_ft_handler_get_total_bytes (handler); ft_handler_transfer_progress_cb (handler, transferred_bytes, total_bytes, 0, -1, manager); }
static void file_manager_receive_file_response_cb (GtkDialog *dialog, GtkResponseType response, EmpathyFTHandler *handler) { EmpathyFTFactory *factory; GFile *file; if (response == GTK_RESPONSE_OK) { GFile *parent; GFileInfo *info; guint64 free_space, file_size; GError *error = NULL; file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); parent = g_file_get_parent (file); info = g_file_query_filesystem_info (parent, G_FILE_ATTRIBUTE_FILESYSTEM_FREE, NULL, &error); g_object_unref (parent); if (error != NULL) { g_warning ("Error: %s", error->message); g_object_unref (file); return; } free_space = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE); file_size = empathy_ft_handler_get_total_bytes (handler); g_object_unref (info); if (file_size > free_space) { GtkWidget *message = gtk_message_dialog_new (GTK_WINDOW (dialog), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Insufficient free space to save file")); char *file_size_str, *free_space_str; file_size_str = g_format_size (file_size); free_space_str = g_format_size (free_space); gtk_message_dialog_format_secondary_text ( GTK_MESSAGE_DIALOG (message), _("%s of free space are required to save this " "file, but only %s is available. Please " "choose another location."), file_size_str, free_space_str); gtk_dialog_run (GTK_DIALOG (message)); g_free (file_size_str); g_free (free_space_str); gtk_widget_destroy (message); g_object_unref (file); return; } factory = empathy_ft_factory_dup_singleton (); empathy_ft_factory_set_destination_for_incoming_handler ( factory, handler, file); g_object_unref (factory); g_object_unref (file); } else { /* unref the handler, as we dismissed the file chooser, * and refused the transfer. */ g_object_unref (handler); } gtk_widget_destroy (GTK_WIDGET (dialog)); }