diff --git a/src/ui/activities/filetransfer_activity/layout.rs b/src/ui/activities/filetransfer_activity/layout.rs index 63adc6b..ff7f564 100644 --- a/src/ui/activities/filetransfer_activity/layout.rs +++ b/src/ui/activities/filetransfer_activity/layout.rs @@ -383,16 +383,16 @@ impl FileTransferActivity { /// Draw progress popup pub(super) fn draw_popup_progress(&self, text: String) -> Gauge { // Calculate ETA - let eta: String = match self.transfer_progress as u64 { + let eta: String = match self.transfer.progress as u64 { 0 => String::from("--:--"), // NOTE: would divide by 0 :D _ => { - let elapsed_secs: u64 = self.transfer_started.elapsed().as_secs(); + let elapsed_secs: u64 = self.transfer.started.elapsed().as_secs(); let eta: u64 = - ((elapsed_secs * 100) / (self.transfer_progress as u64)) - elapsed_secs; + ((elapsed_secs * 100) / (self.transfer.progress as u64)) - elapsed_secs; format!("{:0width$}:{:0width$}", (eta / 60), (eta % 60), width = 2) } }; - let label = format!("{:.2}% - ETA {}", self.transfer_progress, eta); + let label = format!("{:.2}% - ETA {}", self.transfer.progress, eta); Gauge::default() .block(Block::default().borders(Borders::ALL).title(text)) .gauge_style( @@ -402,7 +402,7 @@ impl FileTransferActivity { .add_modifier(Modifier::BOLD), ) .label(label) - .ratio(self.transfer_progress / 100.0) + .ratio(self.transfer.progress / 100.0) } /// ### draw_popup_wait diff --git a/src/ui/activities/filetransfer_activity/misc.rs b/src/ui/activities/filetransfer_activity/misc.rs index 1dea24f..27ec6f2 100644 --- a/src/ui/activities/filetransfer_activity/misc.rs +++ b/src/ui/activities/filetransfer_activity/misc.rs @@ -81,6 +81,6 @@ impl FileTransferActivity { } else if prog < 0.0 { prog = 0.0; } - self.transfer_progress = prog; + self.transfer.progress = prog; } } diff --git a/src/ui/activities/filetransfer_activity/mod.rs b/src/ui/activities/filetransfer_activity/mod.rs index 37f10c7..44ee3cd 100644 --- a/src/ui/activities/filetransfer_activity/mod.rs +++ b/src/ui/activities/filetransfer_activity/mod.rs @@ -205,6 +205,43 @@ impl LogRecord { } } +/// ### TransferStates +/// +/// TransferStates contains the states related to the transfer process +struct TransferStates { + pub progress: f64, // Current read/write progress (percentage) + pub started: Instant, // Instant the transfer process started + pub aborted: bool, // Describes whether the transfer process has been aborted +} + +impl TransferStates { + /// ### new + /// + /// Instantiates a new transfer states + pub fn new() -> TransferStates { + TransferStates { + progress: 0.0, + started: Instant::now(), + aborted: false, + } + } + + /// ### reset + /// + /// Re-intiialize transfer states + pub fn reset(&mut self) { + self.progress = 0.0; + self.started = Instant::now(); + self.aborted = false; + } +} + +impl Default for TransferStates { + fn default() -> Self { + Self::new() + } +} + /// ## FileTransferActivity /// /// FileTransferActivity is the data holder for the file transfer activity @@ -224,8 +261,7 @@ pub struct FileTransferActivity { input_field: InputField, // Current selected input mode input_txt: String, // Input text choice_opt: DialogYesNoOption, // Dialog popup selected option - transfer_progress: f64, // Current write/read progress (percentage) - transfer_started: Instant, // Instant when progress has started + transfer: TransferStates, // Transfer states } impl FileTransferActivity { @@ -254,8 +290,7 @@ impl FileTransferActivity { input_field: InputField::Explorer, input_txt: String::new(), choice_opt: DialogYesNoOption::Yes, - transfer_progress: 0.0, - transfer_started: Instant::now(), + transfer: TransferStates::default(), } } } diff --git a/src/ui/activities/filetransfer_activity/session.rs b/src/ui/activities/filetransfer_activity/session.rs index a048d1b..e3e4c12 100644 --- a/src/ui/activities/filetransfer_activity/session.rs +++ b/src/ui/activities/filetransfer_activity/session.rs @@ -23,7 +23,6 @@ use super::{FileTransferActivity, FsEntry, InputMode, LogLevel, PopupType}; use std::io::{Read, Seek, Write}; use std::path::{Path, PathBuf}; -use std::time::Instant; use tui::style::Color; impl FileTransferActivity { @@ -155,8 +154,8 @@ impl FileTransferActivity { "Uploading \"{}\"", file_name ))); - // Set started time - self.transfer_started = Instant::now(); + // Reset transfer states + self.transfer.reset(); let mut last_progress_val: f64 = 0.0; while total_bytes_written < file_size { // Read till you can @@ -212,10 +211,10 @@ impl FileTransferActivity { // Increase progress self.set_progress(total_bytes_written, file_size); // Draw only if a significant progress has been made (performance improvement) - if last_progress_val < self.transfer_progress - 1.0 { + if last_progress_val < self.transfer.progress - 1.0 { // Draw self.draw(); - last_progress_val = self.transfer_progress; + last_progress_val = self.transfer.progress; } } // Finalize stream @@ -407,8 +406,8 @@ impl FileTransferActivity { file_name ))); let mut total_bytes_written: usize = 0; - // Set started time - self.transfer_started = Instant::now(); + // Reset transfer states + self.transfer.reset(); // Write local file let mut last_progress_val: f64 = 0.0; while total_bytes_written < file.size { @@ -466,10 +465,10 @@ impl FileTransferActivity { // Set progress self.set_progress(total_bytes_written, file.size); // Draw only if a significant progress has been made (performance improvement) - if last_progress_val < self.transfer_progress - 1.0 { + if last_progress_val < self.transfer.progress - 1.0 { // Draw self.draw(); - last_progress_val = self.transfer_progress; + last_progress_val = self.transfer.progress; } } // Finalize stream