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 {
filename: String
},
Skipped,
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;
execute!(
@ -129,7 +130,7 @@ fn print_accumulated_report(statuses: & HashMap<u32, InfoHolder>, 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<u32, InfoHolder>, msg_queue: &mu
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 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 file_count_completed = 0;
let mut file_count_failed = 0;
let mut file_count_done = 0;
while let Some(update) = receiver.recv().await {
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));
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 {
@ -175,7 +180,7 @@ pub async fn watch_and_print_reports(mut receiver: mpsc::UnboundedReceiver<DlRep
}
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();
}
@ -193,6 +198,9 @@ pub async fn watch_and_print_reports(mut receiver: mpsc::UnboundedReceiver<DlRep
));
statuses.remove(&update.id);
file_count_completed += 1;
file_count_done += 1;
},
DlStatus::DoneErr {
@ -208,25 +216,32 @@ pub async fn watch_and_print_reports(mut receiver: mpsc::UnboundedReceiver<DlRep
// 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();
file_count_failed += 1;
file_count_done += 1;
},
DlStatus::Message(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();
},
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)
)?;

View File

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