[file-roller: 107/123] progress dialog: better description and progressbar precision



commit 0bc86155596edae8bc5fa3f613f8a596c5334672
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Mon Aug 6 12:09:28 2012 +0200

    progress dialog: better description and progressbar precision

 src/fr-archive-libarchive.c |   42 ++++++++++----------------------
 src/fr-archive.c            |    7 ++++-
 src/fr-window.c             |   56 +++++++++++++++++++++++++++++-------------
 3 files changed, 57 insertions(+), 48 deletions(-)
---
diff --git a/src/fr-archive-libarchive.c b/src/fr-archive-libarchive.c
index c8066f1..195388e 100644
--- a/src/fr-archive-libarchive.c
+++ b/src/fr-archive-libarchive.c
@@ -254,25 +254,6 @@ _g_file_get_size (GFile        *file,
 }
 
 
-#if 1 /* FIXME: delete if not needed */
-
-static gssize
-_archive_read_data_skip (struct archive *a)
-{
-	int         r;
-	const void *buff;
-	size_t      size;
-	int64_t     offset;
-
-	while ((r = archive_read_data_block (a, &buff, &size, &offset)) == ARCHIVE_OK)
-		/* void */;
-
-	return (r == ARCHIVE_EOF) ? (gssize) offset + size : 0;
-}
-
-#endif
-
-
 static void
 list_archive_thread (GSimpleAsyncResult *result,
 		     GObject            *object,
@@ -282,7 +263,6 @@ list_archive_thread (GSimpleAsyncResult *result,
 	struct archive       *a;
 	struct archive_entry *entry;
 	int                   r;
-	gssize                skipped_size = 0;
 
 	load_data = g_simple_async_result_get_op_res_gpointer (result);
 
@@ -340,15 +320,10 @@ list_archive_thread (GSimpleAsyncResult *result,
 
 		fr_archive_add_file (load_data->archive, file_data);
 
-		skipped_size += _archive_read_data_skip (a);
+		archive_read_data_skip (a);
 	}
 	archive_read_free (a);
 
-	g_print ("compressed size: %" G_GSSIZE_FORMAT ", uncompressed size: %" G_GSSIZE_FORMAT ", skipped: %" G_GSSIZE_FORMAT "\n",
-			FR_ARCHIVE_LIBARCHIVE (load_data->archive)->priv->compressed_size,
-			FR_ARCHIVE_LIBARCHIVE (load_data->archive)->priv->uncompressed_size,
-			skipped_size);
-
 	if ((load_data->error == NULL) && (r != ARCHIVE_EOF) && (archive_error_string (a) != NULL))
 		load_data->error = g_error_new_literal (FR_ERROR, FR_ERROR_COMMAND_ERROR, archive_error_string (a));
 	if (load_data->error == NULL)
@@ -1442,9 +1417,12 @@ static void
 _remove_files_begin (SaveData *save_data,
 		     gpointer  user_data)
 {
+	LoadData   *load_data = LOAD_DATA (save_data);
 	RemoveData *remove_data = user_data;
 
-	fr_archive_progress_set_total_files (LOAD_DATA (save_data)->archive, remove_data->n_files_to_remove);
+	fr_archive_progress_set_total_files (load_data->archive, remove_data->n_files_to_remove);
+	fr_archive_progress_set_total_bytes (load_data->archive,
+				FR_ARCHIVE_LIBARCHIVE (load_data->archive)->priv->uncompressed_size);
 }
 
 
@@ -1462,9 +1440,10 @@ _remove_files_entry_action (SaveData             *save_data,
 	pathname = archive_entry_pathname (w_entry);
 	if (g_hash_table_lookup (remove_data->files_to_remove, pathname)) {
 		action = WRITE_ACTION_SKIP_ENTRY;
-		fr_archive_progress_inc_completed_files (load_data->archive, 1);
 		remove_data->n_files_to_remove--;
 		g_hash_table_remove (remove_data->files_to_remove, pathname);
+		fr_archive_progress_inc_completed_bytes (load_data->archive, archive_entry_size (w_entry));
+		fr_archive_progress_inc_completed_files (load_data->archive, 1);
 	}
 
 	return action;
@@ -1530,9 +1509,12 @@ static void
 _rename_files_begin (SaveData *save_data,
 		     gpointer  user_data)
 {
+	LoadData   *load_data = LOAD_DATA (save_data);
 	RenameData *rename_data = user_data;
 
-	fr_archive_progress_set_total_files (LOAD_DATA (save_data)->archive, rename_data->n_files_to_rename);
+	fr_archive_progress_set_total_files (load_data->archive, rename_data->n_files_to_rename);
+	fr_archive_progress_set_total_bytes (load_data->archive,
+				FR_ARCHIVE_LIBARCHIVE (load_data->archive)->priv->uncompressed_size);
 }
 
 
@@ -1644,6 +1626,8 @@ fr_archive_libarchive_paste_clipboard (FrArchive           *archive,
 
 	add_data = add_data_new ();
 
+	fr_archive_action_started (archive, FR_ACTION_ADDING_FILES);
+
 	current_dir = current_dir + 1;
 	for (scan = files; scan; scan = scan->next) {
 		const char *old_name = (char *) scan->data;
diff --git a/src/fr-archive.c b/src/fr-archive.c
index b8273b3..b4ff898 100644
--- a/src/fr-archive.c
+++ b/src/fr-archive.c
@@ -1245,7 +1245,7 @@ fr_archive_remove (FrArchive           *archive,
 {
 	g_return_if_fail (! archive->read_only);
 
-	archive->priv->progress_event = g_timeout_add (PROGRESS_DELAY, _fr_archive_update_progress_cb, archive);
+	_fr_archive_activate_progress_update (archive);
 
 	FR_ARCHIVE_GET_CLASS (archive)->remove_files (archive,
 						      file_list,
@@ -1488,6 +1488,8 @@ fr_archive_rename (FrArchive           *archive,
 		   GAsyncReadyCallback  callback,
 		   gpointer             user_data)
 {
+	_fr_archive_activate_progress_update (archive);
+
 	FR_ARCHIVE_GET_CLASS (archive)->rename (archive,
 						file_list,
 						old_name,
@@ -1518,6 +1520,8 @@ fr_archive_paste_clipboard (FrArchive           *archive,
 			    GAsyncReadyCallback  callback,
 			    gpointer             user_data)
 {
+	_fr_archive_activate_progress_update (archive);
+
 	FR_ARCHIVE_GET_CLASS (archive)->paste_clipboard (archive,
 							 file,
 							 password,
@@ -1867,6 +1871,7 @@ fr_archive_update_open_files (FrArchive           *archive,
 			      GAsyncReadyCallback  callback,
 			      gpointer             user_data)
 {
+	_fr_archive_activate_progress_update (archive);
 	FR_ARCHIVE_GET_CLASS (archive)->update_open_files (archive,
 							   file_list,
 							   dir_list,
diff --git a/src/fr-window.c b/src/fr-window.c
index 6bee0c7..c46f881 100644
--- a/src/fr-window.c
+++ b/src/fr-window.c
@@ -375,6 +375,7 @@ struct _FrWindowPrivate {
 	double            pd_last_fraction;
 	char             *pd_last_message;
 	gboolean          use_progress_dialog;
+	char             *custom_action_message;
 
 	/* update dialog data */
 
@@ -577,6 +578,7 @@ fr_window_free_private_data (FrWindow *window)
 
 	g_free (window->priv->password);
 	g_free (window->priv->password_for_paste);
+	g_free (window->priv->custom_action_message);
 
 	g_object_unref (window->priv->list_store);
 
@@ -2348,8 +2350,9 @@ progress_dialog_response (GtkDialog *dialog,
 }
 
 
-static char*
-get_action_description (FrAction  action,
+static char *
+get_action_description (FrWindow *window,
+			FrAction  action,
 			GFile    *file)
 {
 	char *basename;
@@ -2373,7 +2376,7 @@ get_action_description (FrAction  action,
 		break;
 	case FR_ACTION_DELETING_FILES:
 		/* Translators: %s is a filename */
-		message = g_strdup_printf (_("Deleting files from \"%s\""), basename);
+		message = g_strdup_printf (_("Deleting the files from \"%s\""), basename);
 		break;
 	case FR_ACTION_TESTING_ARCHIVE:
 		/* Translators: %s is a filename */
@@ -2388,11 +2391,11 @@ get_action_description (FrAction  action,
 		break;
 	case FR_ACTION_ADDING_FILES:
 		/* Translators: %s is a filename */
-		message = g_strdup_printf (_("Adding files to \"%s\""), basename);
+		message = g_strdup_printf (_("Adding the files to \"%s\""), basename);
 		break;
 	case FR_ACTION_EXTRACTING_FILES:
 		/* Translators: %s is a filename */
-		message = g_strdup_printf (_("Extracting files from \"%s\""), basename);
+		message = g_strdup_printf (_("Extracting the files from \"%s\""), basename);
 		break;
 	case FR_ACTION_COPYING_FILES_TO_REMOTE:
 		message = g_strdup (_("Copying the extracted files to the destination"));
@@ -2405,19 +2408,18 @@ get_action_description (FrAction  action,
 		/* Translators: %s is a filename */
 		message = g_strdup_printf (_("Saving \"%s\""), basename);
 		break;
+	case FR_ACTION_PASTING_FILES:
+		message = g_strdup (window->priv->custom_action_message);
+		break;
 	case FR_ACTION_RENAMING_FILES:
 		/* Translators: %s is a filename */
 		message = g_strdup_printf (_("Renaming the files in \"%s\""), basename);
 		break;
-	case FR_ACTION_PASTING_FILES:
-		/* Translators: %s is a filename */
-		message = g_strdup_printf (_("Pasting the files from the clipboard into \"%s\""), basename);
-		break;
 	case FR_ACTION_UPDATING_FILES:
 		/* Translators: %s is a filename */
 		message = g_strdup_printf (_("Updating the files in \"%s\""), basename);
 		break;
-	case FR_ACTION_NONE:
+	default:
 		break;
 	}
 
@@ -2461,7 +2463,7 @@ progress_dialog_update_action_description (FrWindow *window)
 	if (current_archive != NULL)
 		window->priv->pd_last_archive = g_object_ref (current_archive);
 
-	description = get_action_description (window->priv->action, window->priv->pd_last_archive);
+	description = get_action_description (window, window->priv->action, window->priv->pd_last_archive);
 	progress_dialog_set_action_description (window, description);
 
 	g_free (description);
@@ -2548,7 +2550,7 @@ fr_archive_start_cb (FrArchive *archive,
 {
 	char *description;
 
-	description = get_action_description (action, fr_archive_get_file (archive));
+	description = get_action_description (window, action, fr_archive_get_file (archive));
 	fr_archive_message_cb (archive, description, window);
 
 	g_free (description);
@@ -2700,15 +2702,18 @@ fr_archive_progress_cb (FrArchive *archive,
 			char *message = NULL;
 			int   remaining_files;
 
-			remaining_files = fr_archive_progress_get_total_files (archive) - fr_archive_progress_get_completed_files (archive) + 1;
+			remaining_files = fr_archive_progress_get_total_files (archive) - fr_archive_progress_get_completed_files (archive);
 
 			switch (window->priv->action) {
 			case FR_ACTION_ADDING_FILES:
 			case FR_ACTION_EXTRACTING_FILES:
 			case FR_ACTION_DELETING_FILES:
-				message = g_strdup_printf (ngettext ("%d file remaining",
-								     "%'d files remaining",
-								     remaining_files), remaining_files);
+				if (remaining_files > 0)
+					message = g_strdup_printf (ngettext ("%d file remaining",
+									     "%'d files remaining",
+									     remaining_files), remaining_files);
+				else
+					message = g_strdup (_("Operation completed"));
 				break;
 			default:
 				break;
@@ -3265,7 +3270,7 @@ _archive_operation_started (FrWindow *window,
 	archive = window->priv->pd_last_archive;
 	if (archive == NULL)
 		archive =  window->priv->archive_file;
-	message = get_action_description (action, archive);
+	message = get_action_description (window, action, archive);
 	fr_window_push_message (window, message);
 	g_free (message);
 
@@ -6362,7 +6367,7 @@ _fr_window_notify_creation_complete (FrWindow *window)
 	GList              *caps;
 	NotifyData         *notify_data;
 
-	title = get_action_description (window->priv->action, window->priv->pd_last_archive);
+	title = get_action_description (window, window->priv->action, window->priv->pd_last_archive);
 	basename = _g_file_get_display_basename (window->priv->convert_data.new_file);
 	/* Translators: %s is a filename */
 	message = g_strdup_printf (_("\"%s\" created successfully"), basename);
@@ -8294,6 +8299,7 @@ paste_from_archive_extract_ready_cb (GObject      *source_object,
 	}
 
 	if (window->priv->clipboard_data->op == FR_CLIPBOARD_OP_CUT) {
+		fr_archive_action_started (window->priv->copy_from_archive, FR_ACTION_DELETING_FILES);
 		fr_archive_remove (window->priv->copy_from_archive,
 				   window->priv->clipboard_data->files,
 				   window->priv->compression,
@@ -8364,6 +8370,8 @@ fr_window_paste_from_clipboard_data (FrWindow        *window,
 	const char *current_dir_relative;
 	GHashTable *created_dirs;
 	GList      *scan;
+	char       *from_archive;
+	char       *to_archive;
 
 	if (window->priv->password_for_paste != NULL)
 		fr_clipboard_data_set_password (data, window->priv->password_for_paste);
@@ -8406,12 +8414,24 @@ fr_window_paste_from_clipboard_data (FrWindow        *window,
 
 	/**/
 
+	g_free (window->priv->custom_action_message);
+	from_archive = _g_file_get_display_basename (data->file);
+	to_archive = _g_file_get_display_basename (window->priv->archive_file);
+	if (data->op == FR_CLIPBOARD_OP_CUT)
+		/* Translators: %s are archive filenames */
+		window->priv->custom_action_message = g_strdup_printf (_("Moving the files from \"%s\" to \"%s\""), from_archive, to_archive);
+	else
+		/* Translators: %s are archive filenames */
+		window->priv->custom_action_message = g_strdup_printf (_("Copying the files from \"%s\" to \"%s\""), from_archive, to_archive);
 	_archive_operation_started (window, FR_ACTION_PASTING_FILES);
 
 	fr_archive_open (data->file,
 			 window->priv->cancellable,
 			 paste_from_archive_open_cb,
 			 window);
+
+	g_free (to_archive);
+	g_free (from_archive);
 }
 
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]