diff --git a/src/util_io.rs b/src/util_io.rs index 59563a6..769e92d 100644 --- a/src/util_io.rs +++ b/src/util_io.rs @@ -4,19 +4,48 @@ use std::{ time::{ SystemTime, Duration }, }; -use super::{ XResult, new_box_ioerror }; -use super::util_size::get_display_size; -use super::util_msg::print_lastline; -use super::util_file::resolve_file_path; +use crate::{ XResult, new_box_ioerror }; +use crate::util_size; +use crate::util_msg; +use crate::util_file; +use crate::util_time; pub const DEFAULT_BUF_SIZE: usize = 8 * 1024; +// TODO add to print status line +pub struct PrintStatusContext { + pub print_interval_time: Duration, + pub print_interval_bytes: usize, + pub last_print_time: u128, + pub last_print_bytes: usize, +} + +impl PrintStatusContext { + pub fn new() -> Self { + Self::new_with(Duration::from_millis(100), 512 * 1024) + } + + pub fn new_with(print_interval_time: Duration, print_interval_bytes: usize) -> Self { + Self { + print_interval_time, + print_interval_bytes, + last_print_time: util_time::get_current_millis(), + last_print_bytes: 0, + } + } +} + +impl Default for PrintStatusContext { + fn default() -> Self { + PrintStatusContext::new() + } +} pub fn get_read_stdin_or_file(file: &str) -> XResult> { if file.is_empty() { Ok(Box::new(io::stdin())) } else { - match File::open(&resolve_file_path(file)) { + match File::open(&util_file::resolve_file_path(file)) { Ok(f) => Ok(Box::new(f)), Err(err) => Err(new_box_ioerror(&format!("Open file {}, erorr: {}", file, err))), } @@ -40,26 +69,6 @@ pub fn copy_io(reader: &mut R, writer: &mut W, total: i64) copy_io_with_head(reader, writer, total, "Downloading") } -pub fn print_status_last_line(head: &str, total: i64, written: i64, cost: Duration) { - let mut download_speed = "-".to_string(); - let cost_as_secs = cost.as_secs(); - if cost_as_secs > 0 { - download_speed = format!("{}/s", get_display_size((written / (cost_as_secs as i64)) as i64)); - } - if total > 0 { - print_lastline(&format!("{}, Total: {}, Finished: {}, Speed: {}", - head, - get_display_size(total), - get_display_size(written), - download_speed)); - } else { - print_lastline(&format!("{}, Finished: {}, Speed: {}", - head, - get_display_size(written), - download_speed)); - } -} - pub fn copy_io_with_head(reader: &mut R, writer: &mut W, total: i64, head: &str) -> io::Result where R: io::Read, W: io::Write { let start = SystemTime::now(); @@ -89,3 +98,23 @@ pub fn copy_io_callback(reader: &mut R, writer: callback(total, written, len); } } + +pub fn print_status_last_line(head: &str, total: i64, written: i64, cost: Duration) { + let mut download_speed = "-".to_string(); + let cost_as_secs = cost.as_secs(); + if cost_as_secs > 0 { + download_speed = format!("{}/s", util_size::get_display_size((written / (cost_as_secs as i64)) as i64)); + } + if total > 0 { + util_msg::print_lastline(&format!("{}, Total: {}, Finished: {}, Speed: {}", + head, + util_size::get_display_size(total), + util_size::get_display_size(written), + download_speed)); + } else { + util_msg::print_lastline(&format!("{}, Finished: {}, Speed: {}", + head, + util_size::get_display_size(written), + download_speed)); + } +} diff --git a/src/util_size.rs b/src/util_size.rs index 17d93e0..14bba85 100644 --- a/src/util_size.rs +++ b/src/util_size.rs @@ -1,4 +1,4 @@ -use super::XResult; +use crate::XResult; pub const SIZE_KB: i64 = 1024; pub const SIZE_MB: i64 = SIZE_KB * SIZE_KB;