[nautilus/wip/oholy/progress-fixes: 1/2] file-operations: Do not report remaining time if progress is not reported




commit a1fc6c45bce068670fa5142a60ecb6b0bf5b54ee
Author: Ondrej Holy <oholy redhat com>
Date:   Mon Oct 5 15:02:06 2020 +0200

    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.

 src/nautilus-file-operations.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)
---
diff --git a/src/nautilus-file-operations.c b/src/nautilus-file-operations.c
index 690c286a2..413419a84 100644
--- a/src/nautilus-file-operations.c
+++ b/src/nautilus-file-operations.c
@@ -181,6 +181,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
@@ -4066,7 +4075,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)
         {
@@ -5064,6 +5074,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)


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