Transfer states

This commit is contained in:
ChristianVisintin
2020-12-12 21:32:11 +01:00
parent 794dfb8cee
commit 3e72787625
4 changed files with 53 additions and 19 deletions

View File

@@ -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

View File

@@ -81,6 +81,6 @@ impl FileTransferActivity {
} else if prog < 0.0 {
prog = 0.0;
}
self.transfer_progress = prog;
self.transfer.progress = prog;
}
}

View File

@@ -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(),
}
}
}

View File

@@ -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