#include "empathy-ft-manager.h"
+#include "extensions/extensions.h"
+
/**
* SECTION:empathy-ft-manager
* @short_description: File transfer dialog
secs = interval;
if (hours > 0)
+ /* Translators: time left, when it is more than one hour */
return g_strdup_printf (_("%u:%02u.%02u"), hours, mins, secs);
else
+ /* Translators: time left, when is is less than one hour */
return g_strdup_printf (_("%02u.%02u"), mins, secs);
}
GtkTreeModel *model;
GtkTreeIter iter;
EmpathyTpFile *tp_file;
- EmpFileTransferState state;
+ TpFileTransferState state;
gboolean open_enabled = FALSE;
gboolean abort_enabled = FALSE;
state = empathy_tp_file_get_state (tp_file, NULL);
/* I can open the file if the transfer is completed and was incoming */
- open_enabled = (state == EMP_FILE_TRANSFER_STATE_COMPLETED &&
+ open_enabled = (state == TP_FILE_TRANSFER_STATE_COMPLETED &&
empathy_tp_file_is_incoming (tp_file));
/* I can abort if the transfer is not already finished */
- abort_enabled = (state != EMP_FILE_TRANSFER_STATE_CANCELLED &&
- state != EMP_FILE_TRANSFER_STATE_COMPLETED);
+ abort_enabled = (state != TP_FILE_TRANSFER_STATE_CANCELLED &&
+ state != TP_FILE_TRANSFER_STATE_COMPLETED);
g_object_unref (tp_file);
}
}
static const gchar *
-ft_manager_state_change_reason_to_string (EmpFileTransferStateChangeReason reason)
+ft_manager_state_change_reason_to_string (TpFileTransferStateChangeReason reason)
{
switch (reason)
{
- case EMP_FILE_TRANSFER_STATE_CHANGE_REASON_NONE:
+ case TP_FILE_TRANSFER_STATE_CHANGE_REASON_NONE:
return _("No reason was specified");
- case EMP_FILE_TRANSFER_STATE_CHANGE_REASON_REQUESTED:
+ case TP_FILE_TRANSFER_STATE_CHANGE_REASON_REQUESTED:
return _("The change in state was requested");
- case EMP_FILE_TRANSFER_STATE_CHANGE_REASON_LOCAL_STOPPED:
+ case TP_FILE_TRANSFER_STATE_CHANGE_REASON_LOCAL_STOPPED:
return _("You canceled the file transfer");
- case EMP_FILE_TRANSFER_STATE_CHANGE_REASON_REMOTE_STOPPED:
+ case TP_FILE_TRANSFER_STATE_CHANGE_REASON_REMOTE_STOPPED:
return _("The other participant canceled the file transfer");
- case EMP_FILE_TRANSFER_STATE_CHANGE_REASON_LOCAL_ERROR:
+ case TP_FILE_TRANSFER_STATE_CHANGE_REASON_LOCAL_ERROR:
return _("Error while trying to transfer the file");
- case EMP_FILE_TRANSFER_STATE_CHANGE_REASON_REMOTE_ERROR:
+ case TP_FILE_TRANSFER_STATE_CHANGE_REASON_REMOTE_ERROR:
return _("The other participant is unable to transfer the file");
}
return _("Unknown reason");
guint64 total_size;
gint remaining = -1;
gint percent;
- EmpFileTransferState state;
- EmpFileTransferStateChangeReason reason;
+ TpFileTransferState state;
+ TpFileTransferStateChangeReason reason;
gboolean incoming;
row_ref = ft_manager_get_row_from_tp_file (ft_manager, tp_file);
switch (state)
{
- case EMP_FILE_TRANSFER_STATE_NONE:
+ case TP_FILE_TRANSFER_STATE_NONE:
/* This should never happen, the CM is broken. But we avoid warning
* because it's not our fault. */
DEBUG ("State is NONE, probably a broken CM");
break;
- case EMP_FILE_TRANSFER_STATE_PENDING:
- case EMP_FILE_TRANSFER_STATE_OPEN:
- case EMP_FILE_TRANSFER_STATE_ACCEPTED:
+ case TP_FILE_TRANSFER_STATE_PENDING:
+ case TP_FILE_TRANSFER_STATE_OPEN:
+ case TP_FILE_TRANSFER_STATE_ACCEPTED:
if (incoming)
/* translators: first %s is filename, second %s is the contact name */
first_line_format = _("Receiving \"%s\" from %s");
first_line = g_strdup_printf (first_line_format, filename, contact_name);
- if (state == EMP_FILE_TRANSFER_STATE_OPEN || incoming)
+ if (state == TP_FILE_TRANSFER_STATE_OPEN || incoming)
{
gchar *total_size_str;
gchar *transferred_bytes_str;
}
else
- second_line = g_strdup (_("Waiting the other participant's response"));
+ second_line = g_strdup (_("Waiting for the other participant's response"));
remaining = empathy_tp_file_get_remaining_time (tp_file);
break;
- case EMP_FILE_TRANSFER_STATE_COMPLETED:
+ case TP_FILE_TRANSFER_STATE_COMPLETED:
if (incoming)
/* translators: first %s is filename, second %s
* is the contact name */
break;
- case EMP_FILE_TRANSFER_STATE_CANCELLED:
+ case TP_FILE_TRANSFER_STATE_CANCELLED:
if (incoming)
/* translators: first %s is filename, second %s
* is the contact name */
if (remaining < 0)
{
- if (state != EMP_FILE_TRANSFER_STATE_COMPLETED &&
- state != EMP_FILE_TRANSFER_STATE_CANCELLED)
+ if (state != TP_FILE_TRANSFER_STATE_COMPLETED &&
+ state != TP_FILE_TRANSFER_STATE_CANCELLED)
remaining_str = g_strdup (C_("remaining time", "Unknown"));
}
else
if (update_selection)
gtk_tree_selection_select_iter (selection, &iter);
+
+ empathy_tp_file_close (tp_file);
}
static gboolean
{
EmpathyTpFile *tp_file = EMPATHY_TP_FILE (key);
EmpathyFTManager *self = EMPATHY_FT_MANAGER (user_data);
- EmpFileTransferState state;
+ TpFileTransferState state;
state = empathy_tp_file_get_state (tp_file, NULL);
- if (state == EMP_FILE_TRANSFER_STATE_COMPLETED ||
- state == EMP_FILE_TRANSFER_STATE_CANCELLED)
+ if (state == TP_FILE_TRANSFER_STATE_COMPLETED ||
+ state == TP_FILE_TRANSFER_STATE_CANCELLED)
{
ft_manager_remove_file_from_model (self, tp_file);
return TRUE;
EmpathyFTManager *ft_manager)
{
if (empathy_tp_file_get_state (tp_file, NULL) ==
- EMP_FILE_TRANSFER_STATE_COMPLETED)
+ TP_FILE_TRANSFER_STATE_COMPLETED)
{
GtkRecentManager *manager;
const gchar *uri;
ft_manager_update_ft_row (ft_manager, tp_file);
}
-static void
-ft_manager_add_tp_file_to_list (EmpathyFTManager *ft_manager,
- EmpathyTpFile *tp_file)
-{
- GtkTreeRowReference *row_ref;
- GtkTreeIter iter;
- GtkTreeSelection *selection;
- GtkTreePath *path;
- GIcon *icon;
- const gchar *content_type;
-
- /* Get the icon name from the mime-type of the file. */
- content_type = empathy_tp_file_get_content_type (tp_file);
- icon = g_content_type_get_icon (content_type);
-
- /* Append the ft in the store */
- gtk_list_store_insert_with_values (GTK_LIST_STORE (ft_manager->priv->model),
- &iter, G_MAXINT, COL_FT_OBJECT, tp_file, COL_ICON, icon, -1);
-
- g_object_unref (icon);
-
- /* Insert the new row_ref in the hash table */
- path = gtk_tree_model_get_path (GTK_TREE_MODEL (ft_manager->priv->model),
- &iter);
- row_ref = gtk_tree_row_reference_new (GTK_TREE_MODEL (
- ft_manager->priv->model), path);
- gtk_tree_path_free (path);
- g_hash_table_insert (ft_manager->priv->tp_file_to_row_ref,
- g_object_ref (tp_file), row_ref);
-
- /* Select the new row */
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (
- ft_manager->priv->treeview));
- gtk_tree_selection_select_iter (selection, &iter);
-
- /* Update the row with the initial values, and keep track of changes */
- ft_manager_update_ft_row (ft_manager, tp_file);
- g_signal_connect (tp_file, "notify::state",
- G_CALLBACK (ft_manager_state_changed_cb), ft_manager);
- g_signal_connect (tp_file, "notify::transferred-bytes",
- G_CALLBACK (ft_manager_transferred_bytes_changed_cb), ft_manager);
-
- gtk_window_present (GTK_WINDOW (ft_manager->priv->window));
-}
-
static void
ft_manager_clear (EmpathyFTManager *ft_manager)
{
ft_manager_destroy_cb (GtkWidget *widget,
EmpathyFTManager *ft_manager)
{
- g_object_unref (ft_manager);
+ ft_manager->priv->window = NULL;
+ if (ft_manager->priv->save_geometry_id != 0)
+ g_source_remove (ft_manager->priv->save_geometry_id);
+ g_hash_table_remove_all (ft_manager->priv->tp_file_to_row_ref);
}
static void
ft_manager_build_ui (EmpathyFTManager *ft_manager)
{
- GladeXML *glade;
+ GtkBuilder *gui;
gint x, y, w, h;
GtkTreeView *view;
GtkListStore *liststore;
GtkTreeSelection *selection;
gchar *filename;
- filename = empathy_file_lookup ("empathy-ft-manager.glade", "src");
- glade = empathy_glade_get_file (filename,
- "ft_manager_dialog", NULL,
+ if (ft_manager->priv->window != NULL)
+ return;
+
+ filename = empathy_file_lookup ("empathy-ft-manager.ui", "src");
+ gui = empathy_builder_get_file (filename,
"ft_manager_dialog", &ft_manager->priv->window,
"ft_list", &ft_manager->priv->treeview,
"open_button", &ft_manager->priv->open_button,
NULL);
g_free (filename);
- empathy_glade_connect (glade, ft_manager,
+ empathy_builder_connect (gui, ft_manager,
"ft_manager_dialog", "destroy", ft_manager_destroy_cb,
"ft_manager_dialog", "response", ft_manager_response_cb,
"ft_manager_dialog", "delete-event", ft_manager_delete_event_cb,
"ft_manager_dialog", "configure-event", ft_manager_configure_event_cb,
NULL);
- g_object_unref (glade);
+ g_object_unref (gui);
/* Window geometry. */
empathy_geometry_load ("ft-manager", &x, &y, &w, &h);
if (w > 0 && h > 0)
{
- /* Use the defaults from the glade file if we don't have
+ /* Use the defaults from the ui file if we don't have
* good w, h geometry. */
gtk_window_resize (GTK_WINDOW (ft_manager->priv->window), w, h);
}
DEBUG ("%p", object);
- g_hash_table_destroy (ft_manager->priv->tp_file_to_row_ref);
+ if (ft_manager->priv->window)
+ gtk_widget_destroy (ft_manager->priv->window);
- if (ft_manager->priv->save_geometry_id != 0)
- g_source_remove (ft_manager->priv->save_geometry_id);
+ g_hash_table_destroy (ft_manager->priv->tp_file_to_row_ref);
G_OBJECT_CLASS (empathy_ft_manager_parent_class)->finalize (object);
}
priv->tp_file_to_row_ref = g_hash_table_new_full (g_direct_hash,
g_direct_equal, (GDestroyNotify) g_object_unref,
(GDestroyNotify) gtk_tree_row_reference_free);
-
- ft_manager_build_ui (ft_manager);
}
static GObject *
(type, n_props, props);
manager_singleton = EMPATHY_FT_MANAGER (retval);
- g_object_add_weak_pointer (retval, (gpointer *) &manager_singleton);
+ g_object_add_weak_pointer (retval, (gpointer) &manager_singleton);
}
return retval;
{
g_return_val_if_fail (EMPATHY_IS_FT_MANAGER (ft_manager), NULL);
+ ft_manager_build_ui (ft_manager);
+
return ft_manager->priv->window;
}
+static void
+ft_manager_add_tp_file_to_list (EmpathyFTManager *ft_manager,
+ EmpathyTpFile *tp_file)
+{
+ GtkTreeRowReference *row_ref;
+ GtkTreeIter iter;
+ GtkTreeSelection *selection;
+ GtkTreePath *path;
+ GIcon *icon;
+ const gchar *content_type;
+
+ ft_manager_build_ui (ft_manager);
+
+ /* Get the icon name from the mime-type of the file. */
+ content_type = empathy_tp_file_get_content_type (tp_file);
+ icon = g_content_type_get_icon (content_type);
+
+ /* Append the ft in the store */
+ gtk_list_store_insert_with_values (GTK_LIST_STORE (ft_manager->priv->model),
+ &iter, G_MAXINT, COL_FT_OBJECT, tp_file, COL_ICON, icon, -1);
+
+ g_object_unref (icon);
+
+ /* Insert the new row_ref in the hash table */
+ path = gtk_tree_model_get_path (GTK_TREE_MODEL (ft_manager->priv->model),
+ &iter);
+ row_ref = gtk_tree_row_reference_new (GTK_TREE_MODEL (
+ ft_manager->priv->model), path);
+ gtk_tree_path_free (path);
+ g_hash_table_insert (ft_manager->priv->tp_file_to_row_ref,
+ g_object_ref (tp_file), row_ref);
+
+ /* Select the new row */
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (
+ ft_manager->priv->treeview));
+ gtk_tree_selection_select_iter (selection, &iter);
+
+ /* Update the row with the initial values, and keep track of changes */
+ ft_manager_update_ft_row (ft_manager, tp_file);
+ g_signal_connect (tp_file, "notify::state",
+ G_CALLBACK (ft_manager_state_changed_cb), ft_manager);
+ g_signal_connect (tp_file, "notify::transferred-bytes",
+ G_CALLBACK (ft_manager_transferred_bytes_changed_cb), ft_manager);
+
+ gtk_window_present (GTK_WINDOW (ft_manager->priv->window));
+}
+
typedef struct {
EmpathyFTManager *ft_manager;
EmpathyTpFile *tp_file;
gtk_message_dialog_format_secondary_text
(GTK_MESSAGE_DIALOG (dialog),
+ /* Translators: the first %s is the file name, the second %s is the file size */
_("Do you want to accept the file \"%s\" (%s)?"),
filename, size_str);
empathy_ft_manager_add_tp_file (EmpathyFTManager *ft_manager,
EmpathyTpFile *tp_file)
{
- EmpFileTransferState state;
+ TpFileTransferState state;
g_return_if_fail (EMPATHY_IS_FT_MANAGER (ft_manager));
g_return_if_fail (EMPATHY_IS_TP_FILE (tp_file));
empathy_contact_get_name (empathy_tp_file_get_contact (tp_file)),
empathy_tp_file_get_filename (tp_file), state);
- if (state == EMP_FILE_TRANSFER_STATE_PENDING &&
+ if (state == TP_FILE_TRANSFER_STATE_PENDING &&
empathy_tp_file_is_incoming (tp_file))
ft_manager_display_accept_dialog (ft_manager, tp_file);
else