From 154961ff98317a2597ce361d487cd1a4b71c9de5 Mon Sep 17 00:00:00 2001 From: Daniel M Date: Fri, 11 Jun 2021 12:54:17 +0200 Subject: [PATCH] Add number of files to progress - The progress updates now show the number of files completed --- src/dlreport.rs | 33 ++++++++++++++++++++++++--------- src/main.rs | 3 ++- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/dlreport.rs b/src/dlreport.rs index e77f570..7f40a42 100644 --- a/src/dlreport.rs +++ b/src/dlreport.rs @@ -28,6 +28,7 @@ pub enum DlStatus { DoneErr { filename: String }, + Skipped, Message(String) } @@ -83,7 +84,7 @@ impl InfoHolder { } -fn print_accumulated_report(statuses: & HashMap, msg_queue: &mut VecDeque, moved_lines: u16) -> ResBE { +fn print_accumulated_report(statuses: & HashMap, msg_queue: &mut VecDeque, moved_lines: u16, file_count_completed: i32, file_count_total: i32) -> ResBE { let mut dl_speed_sum = 0.0; execute!( @@ -129,7 +130,7 @@ fn print_accumulated_report(statuses: & HashMap, msg_queue: &mu stdout(), Clear(ClearType::CurrentLine), Print("\n"), - Print(format!(" =>> Accumulated download speed: {:6.2} mb/s", dl_speed_sum)), + Print(format!(" =>> Accumulated download speed: {:6.2} mb/s {}/{} files", dl_speed_sum, file_count_completed, file_count_total)), Clear(ClearType::UntilNewLine), Print("\n"), Clear(ClearType::FromCursorDown), @@ -140,7 +141,7 @@ fn print_accumulated_report(statuses: & HashMap, msg_queue: &mu Ok(statuses.len() as u16 + 3) } -pub async fn watch_and_print_reports(mut receiver: mpsc::UnboundedReceiver) -> ResBE<()> { +pub async fn watch_and_print_reports(mut receiver: mpsc::UnboundedReceiver, file_count_total: i32) -> ResBE<()> { let mut statuses: HashMap = HashMap::new(); let mut moved_lines = 0; @@ -148,6 +149,10 @@ pub async fn watch_and_print_reports(mut receiver: mpsc::UnboundedReceiver 500 { - moved_lines = print_accumulated_report(&statuses, &mut msg_queue, moved_lines)?; + moved_lines = print_accumulated_report(&statuses, &mut msg_queue, moved_lines, file_count_done, file_count_total)?; t_last = SystemTime::now(); } @@ -193,6 +198,9 @@ pub async fn watch_and_print_reports(mut receiver: mpsc::UnboundedReceiver { msg_queue.push_back(msg); - moved_lines = print_accumulated_report(&statuses, &mut msg_queue, moved_lines)?; + moved_lines = print_accumulated_report(&statuses, &mut msg_queue, moved_lines, file_count_done, file_count_total)?; t_last = SystemTime::now(); + }, + DlStatus::Skipped => { + file_count_completed += 1; + file_count_done += 1; } } } - print_accumulated_report(&statuses, &mut msg_queue, moved_lines)?; + print_accumulated_report(&statuses, &mut msg_queue, moved_lines, file_count_done, file_count_total)?; execute!( stdout(), MoveToPreviousLine(2), - Print("All done!\n"), + Print(format!("All done! {}/{} completed, {} failed\n", file_count_completed, file_count_total, file_count_failed)), Clear(ClearType::FromCursorDown) )?; diff --git a/src/main.rs b/src/main.rs index d42dbc2..796f26f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -313,6 +313,7 @@ async fn download_multiple(cli_args: CLIArguments) -> ResBE<()> { if filesize == local_filesize { rep.send(DlStatus::Message(format!("Skipping file '{}': already present", &file_name))); + rep.send(DlStatus::Skipped); continue; } else { rep.send(DlStatus::Message(format!("Replacing file '{}': present but not completed", &file_name))); @@ -348,7 +349,7 @@ async fn download_multiple(cli_args: CLIArguments) -> ResBE<()> { drop(tx); - dlreport::watch_and_print_reports(rx).await?; + dlreport::watch_and_print_reports(rx, cli_args.urls.len() as i32).await?; join_all(joiners).await;