Add number of files to progress
- The progress updates now show the number of files completed
This commit is contained in:
parent
ad70cfa1dd
commit
154961ff98
@ -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)
|
||||
)?;
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user