Add number of files to progress

- The progress updates now show the number of files completed
This commit is contained in:
Daniel M 2021-06-11 12:54:17 +02:00
parent ad70cfa1dd
commit 154961ff98
2 changed files with 26 additions and 10 deletions

View File

@ -28,6 +28,7 @@ pub enum DlStatus {
DoneErr { DoneErr {
filename: String filename: String
}, },
Skipped,
Message(String) Message(String)
} }
@ -83,7 +84,7 @@ impl InfoHolder {
} }
fn print_accumulated_report(statuses: & HashMap<u32, InfoHolder>, msg_queue: &mut VecDeque<String>, moved_lines: u16) -> ResBE<u16> { fn print_accumulated_report(statuses: & HashMap<u32, InfoHolder>, msg_queue: &mut VecDeque<String>, moved_lines: u16, file_count_completed: i32, file_count_total: i32) -> ResBE<u16> {
let mut dl_speed_sum = 0.0; let mut dl_speed_sum = 0.0;
execute!( execute!(
@ -129,7 +130,7 @@ fn print_accumulated_report(statuses: & HashMap<u32, InfoHolder>, msg_queue: &mu
stdout(), stdout(),
Clear(ClearType::CurrentLine), Clear(ClearType::CurrentLine),
Print("\n"), 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), Clear(ClearType::UntilNewLine),
Print("\n"), Print("\n"),
Clear(ClearType::FromCursorDown), Clear(ClearType::FromCursorDown),
@ -140,7 +141,7 @@ fn print_accumulated_report(statuses: & HashMap<u32, InfoHolder>, msg_queue: &mu
Ok(statuses.len() as u16 + 3) Ok(statuses.len() as u16 + 3)
} }
pub async fn watch_and_print_reports(mut receiver: mpsc::UnboundedReceiver<DlReport>) -> ResBE<()> { pub async fn watch_and_print_reports(mut receiver: mpsc::UnboundedReceiver<DlReport>, file_count_total: i32) -> ResBE<()> {
let mut statuses: HashMap<u32, InfoHolder> = HashMap::new(); let mut statuses: HashMap<u32, InfoHolder> = HashMap::new();
let mut moved_lines = 0; let mut moved_lines = 0;
@ -148,6 +149,10 @@ pub async fn watch_and_print_reports(mut receiver: mpsc::UnboundedReceiver<DlRep
let mut t_last = SystemTime::now(); let mut t_last = SystemTime::now();
let mut file_count_completed = 0;
let mut file_count_failed = 0;
let mut file_count_done = 0;
while let Some(update) = receiver.recv().await { while let Some(update) = receiver.recv().await {
match update.status { match update.status {
@ -159,7 +164,7 @@ pub async fn watch_and_print_reports(mut receiver: mpsc::UnboundedReceiver<DlRep
msg_queue.push_back(format!("Starting download for file '{}'", &filename)); msg_queue.push_back(format!("Starting download for file '{}'", &filename));
statuses.insert(update.id, InfoHolder::new(filename, bytes_total)); statuses.insert(update.id, InfoHolder::new(filename, bytes_total));
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)?;
}, },
DlStatus::Update { DlStatus::Update {
@ -175,7 +180,7 @@ pub async fn watch_and_print_reports(mut receiver: mpsc::UnboundedReceiver<DlRep
} }
if t_last.elapsed().unwrap().as_millis() > 500 { if t_last.elapsed().unwrap().as_millis() > 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(); t_last = SystemTime::now();
} }
@ -194,6 +199,9 @@ pub async fn watch_and_print_reports(mut receiver: mpsc::UnboundedReceiver<DlRep
statuses.remove(&update.id); statuses.remove(&update.id);
file_count_completed += 1;
file_count_done += 1;
}, },
DlStatus::DoneErr { DlStatus::DoneErr {
filename filename
@ -208,25 +216,32 @@ pub async fn watch_and_print_reports(mut receiver: mpsc::UnboundedReceiver<DlRep
// Refresh display // Refresh display
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(); t_last = SystemTime::now();
file_count_failed += 1;
file_count_done += 1;
}, },
DlStatus::Message(msg) => { DlStatus::Message(msg) => {
msg_queue.push_back(msg); 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(); 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!( execute!(
stdout(), stdout(),
MoveToPreviousLine(2), 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) Clear(ClearType::FromCursorDown)
)?; )?;

View File

@ -313,6 +313,7 @@ async fn download_multiple(cli_args: CLIArguments) -> ResBE<()> {
if filesize == local_filesize { if filesize == local_filesize {
rep.send(DlStatus::Message(format!("Skipping file '{}': already present", &file_name))); rep.send(DlStatus::Message(format!("Skipping file '{}': already present", &file_name)));
rep.send(DlStatus::Skipped);
continue; continue;
} else { } else {
rep.send(DlStatus::Message(format!("Replacing file '{}': present but not completed", &file_name))); 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); 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; join_all(joiners).await;