From 80c67c8aa8be04074407fd586f58eb5213ef09aa Mon Sep 17 00:00:00 2001 From: veeso Date: Tue, 13 Jul 2021 16:43:27 +0200 Subject: [PATCH] Fixed transfer interruption: it was not possible to abort a transfer if the size of the file was less than 65k --- CHANGELOG.md | 1 + src/ui/activities/filetransfer/session.rs | 28 ++++++++++++++++------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b43ba55..9bfe2f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,7 @@ Released on FIXME: ?? - Bugfix: - Fixed broken input cursor when typing UTF8 characters (tui-realm 0.3.2) - Fixed save bookmark dialog: you could switch out from dialog with `` + - Fixed transfer interruption: it was not possible to abort a transfer if the size of the file was less than 65k - Dependencies: - Added `argh 0.1.5` - Added `open 1.7.0` diff --git a/src/ui/activities/filetransfer/session.rs b/src/ui/activities/filetransfer/session.rs index 5180ef7..e864f1b 100644 --- a/src/ui/activities/filetransfer/session.rs +++ b/src/ui/activities/filetransfer/session.rs @@ -450,16 +450,22 @@ impl FileTransferActivity { // Write remote file let mut total_bytes_written: usize = 0; let mut last_progress_val: f64 = 0.0; - let mut last_input_event_fetch: Instant = Instant::now(); + let mut last_input_event_fetch: Option = None; // While the entire file hasn't been completely written, // Or filetransfer has been aborted while total_bytes_written < file_size && !self.transfer.aborted() { - // Handle input events (each 500ms) - if last_input_event_fetch.elapsed().as_millis() >= 500 { + // Handle input events (each 500ms) or if never fetched before + if last_input_event_fetch.is_none() + || last_input_event_fetch + .unwrap_or_else(Instant::now) + .elapsed() + .as_millis() + >= 500 + { // Read events self.read_input_event(); // Reset instant - last_input_event_fetch = Instant::now(); + last_input_event_fetch = Some(Instant::now()); } // Read till you can let mut buffer: [u8; 65536] = [0; 65536]; @@ -790,16 +796,22 @@ impl FileTransferActivity { self.transfer.partial.init(remote.size); // Write local file let mut last_progress_val: f64 = 0.0; - let mut last_input_event_fetch: Instant = Instant::now(); + let mut last_input_event_fetch: Option = None; // While the entire file hasn't been completely read, // Or filetransfer has been aborted while total_bytes_written < remote.size && !self.transfer.aborted() { - // Handle input events (each 500 ms) - if last_input_event_fetch.elapsed().as_millis() >= 500 { + // Handle input events (each 500 ms) or is None + if last_input_event_fetch.is_none() + || last_input_event_fetch + .unwrap_or_else(Instant::now) + .elapsed() + .as_millis() + >= 500 + { // Read events self.read_input_event(); // Reset instant - last_input_event_fetch = Instant::now(); + last_input_event_fetch = Some(Instant::now()); } // Read till you can let mut buffer: [u8; 65536] = [0; 65536];