From 84a14bcc52e4e90adc74aef92ecee8ac5b276463 Mon Sep 17 00:00:00 2001 From: Gary Li Date: Fri, 12 May 2023 15:29:28 +0000 Subject: file-operations: make use of skip_files in compress operations Nautilus fails to create an archive if one of the folders selected cannot be read, despite selecting "Skip". This is because the compress operation does not use skip_files, which was populated by scan_sources. Remove source_files nodes if they should be skipped before passing the linked list to AutoarCompressor. Fixes: https://gitlab.gnome.org/GNOME/nautilus/-/issues/2928 --- src/nautilus-file-operations.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/nautilus-file-operations.c b/src/nautilus-file-operations.c index 59341d83e..d4e6774a2 100644 --- a/src/nautilus-file-operations.c +++ b/src/nautilus-file-operations.c @@ -9189,6 +9189,7 @@ compress_task_thread_func (GTask *task, CompressJob *compress_job = task_data; g_auto (SourceInfo) source_info = SOURCE_INFO_INIT; g_autoptr (AutoarCompressor) compressor = NULL; + GList *l; g_timer_start (compress_job->common.time); @@ -9202,6 +9203,26 @@ compress_task_thread_func (GTask *task, compress_job->total_files = source_info.num_files; compress_job->total_size = source_info.num_bytes; + /* take out files that should be skipped */ + l = compress_job->source_files; + while (l != NULL) + { + GList *next = l->next; + if (should_skip_file ((CommonJob *) compress_job, l->data)) + { + compress_job->source_files = g_list_remove_link (compress_job->source_files, l); + g_list_free_full (l, g_object_unref); + } + l = next; + } + + if (compress_job->source_files == NULL) + { + compress_job->success = FALSE; + g_clear_object (&compress_job->common.undo_info); + return; + } + compressor = autoar_compressor_new (compress_job->source_files, compress_job->output_file, compress_job->format, -- cgit v1.2.1