예제 #1
0
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);
}
예제 #2
0
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));
}