diff options
Diffstat (limited to 'src/nautilus-file-operations.c')
-rw-r--r-- | src/nautilus-file-operations.c | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/src/nautilus-file-operations.c b/src/nautilus-file-operations.c index fb5168c2e..d9aaace36 100644 --- a/src/nautilus-file-operations.c +++ b/src/nautilus-file-operations.c @@ -210,6 +210,7 @@ typedef struct guint64 archive_compressed_size; guint64 total_compressed_size; + gint total_files; NautilusExtractCallback done_callback; gpointer done_callback_data; @@ -8327,6 +8328,7 @@ extract_job_on_error (AutoarExtractor *extractor, GFile *source_file; GFile *destination; gint response_id; + gint remaining_files; g_autofree gchar *basename = NULL; source_file = autoar_extractor_get_source_file (extractor); @@ -8348,25 +8350,35 @@ extract_job_on_error (AutoarExtractor *extractor, g_object_unref (destination); } + if (extract_job->common.skip_all_error) + { + return; + } + basename = get_basename (source_file); nautilus_progress_info_take_status (extract_job->common.progress, g_strdup_printf (_("Error extracting “%s”"), basename)); - response_id = run_warning ((CommonJob *) extract_job, - g_strdup_printf (_("There was an error while extracting “%s”."), - basename), - g_strdup (error->message), - NULL, - FALSE, - CANCEL, - SKIP, - NULL); + remaining_files = g_list_length (g_list_find_custom (extract_job->source_files, + source_file, + (GCompareFunc) g_file_equal)) - 1; + response_id = run_cancel_or_skip_warning ((CommonJob *) extract_job, + g_strdup_printf (_("There was an error while extracting “%s”."), + basename), + g_strdup (error->message), + NULL, + extract_job->total_files, + remaining_files); if (response_id == 0 || response_id == GTK_RESPONSE_DELETE_EVENT) { abort_job ((CommonJob *) extract_job); } + else if (response_id == 1) + { + extract_job->common.skip_all_error = TRUE; + } } static void @@ -8598,7 +8610,6 @@ extract_task_thread_func (GTask *task, { ExtractJob *extract_job = task_data; GList *l; - gint total_files; g_autofree guint64 *archive_compressed_sizes = NULL; gint i; @@ -8609,9 +8620,10 @@ extract_task_thread_func (GTask *task, nautilus_progress_info_set_details (extract_job->common.progress, _("Preparing to extract")); - total_files = g_list_length (extract_job->source_files); + extract_job->total_files = g_list_length (extract_job->source_files); - archive_compressed_sizes = g_malloc0_n (total_files, sizeof (guint64)); + archive_compressed_sizes = g_malloc0_n (extract_job->total_files, + sizeof (guint64)); extract_job->total_compressed_size = 0; for (l = extract_job->source_files, i = 0; @@ -8682,7 +8694,7 @@ extract_task_thread_func (GTask *task, if (!job_aborted ((CommonJob *) extract_job)) { - report_extract_final_progress (extract_job, total_files); + report_extract_final_progress (extract_job, extract_job->total_files); } if (extract_job->common.undo_info) |