summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Holy <oholy@redhat.com>2020-10-05 15:02:06 +0200
committerAntónio Fernandes <antoniojpfernandes@gmail.com>2021-01-17 22:50:56 +0000
commit1ebadd63c27ab682a08db9cb902092101f49f3c6 (patch)
tree579e592a58158d9e1b4647b727b3004ea292b283
parent7d29b05e4513e38c3f1cccf7b8092d7dc2ef8530 (diff)
downloadnautilus-1ebadd63c27ab682a08db9cb902092101f49f3c6.tar.gz
file-operations: Do not report remaining time if progress is not reported
Some GVfs backends doesn't report progress except the total file size. With the previous patch applied, the remaining time is calculated after each successfully transfered file for such backends. This is fine for small files, but looks weird for big files as the estimated time is not updated regularly, so it looks like hang. One possible solution would be to update the remaining time periodically even if progress is not reported from GIO. However, this could again lead to situations, which would look like that the transfer is hanged. Let's do not report remaining time at all when progress is not reported to reduce confusion.
-rw-r--r--src/nautilus-file-operations.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/nautilus-file-operations.c b/src/nautilus-file-operations.c
index 1be9770be..084ea1469 100644
--- a/src/nautilus-file-operations.c
+++ b/src/nautilus-file-operations.c
@@ -188,6 +188,15 @@ typedef struct
OpKind op;
guint64 last_report_time;
int last_reported_files_left;
+
+ /*
+ * This is used when reporting progress for copy/move operations to not show
+ * the remaining time. This is needed because some GVfs backends doesn't
+ * report progress from those operations. Consequently it looks like that it
+ * is hanged when the remaining time is not updated regularly. See:
+ * https://gitlab.gnome.org/GNOME/nautilus/-/merge_requests/605
+ */
+ gboolean partial_progress;
} TransferInfo;
typedef struct
@@ -4149,7 +4158,8 @@ report_copy_progress (CopyMoveJob *copy_job,
}
if (elapsed < SECONDS_NEEDED_FOR_RELIABLE_TRANSFER_RATE ||
- transfer_rate == 0)
+ transfer_rate == 0 ||
+ !transfer_info->partial_progress)
{
if (source_info->num_files == 1)
{
@@ -5181,6 +5191,12 @@ copy_file_progress_callback (goffset current_num_bytes,
pdata = user_data;
+ if (current_num_bytes != 0 &&
+ current_num_bytes != total_num_bytes)
+ {
+ pdata->transfer_info->partial_progress = TRUE;
+ }
+
new_size = current_num_bytes - pdata->last_size;
if (new_size > 0)