Example #1
0
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);
    }
}
Example #3
0
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);
    }
}
Example #4
0
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;
}