summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Li <gary.li1@uwaterloo.ca>2023-05-12 15:29:28 +0000
committerCorey Berla <corey@berla.me>2023-05-12 15:29:28 +0000
commit84a14bcc52e4e90adc74aef92ecee8ac5b276463 (patch)
tree91647e235035f49806226185f5c2f1d3ed0341b0
parentfdb95bdeec7e50ccce6c9095e77c9a86cfa02059 (diff)
downloadnautilus-84a14bcc52e4e90adc74aef92ecee8ac5b276463.tar.gz
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
-rw-r--r--src/nautilus-file-operations.c21
1 files changed, 21 insertions, 0 deletions
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,