41 lines
1.4 KiB
Rust
41 lines
1.4 KiB
Rust
use clap::Parser;
|
|
use indicatif::ProgressBar;
|
|
use packie::{PackieBuilder, repo::SyncEvent};
|
|
use rust_i18n::t;
|
|
|
|
#[derive(Debug, Parser)]
|
|
pub struct Cli {}
|
|
|
|
pub fn main(cli: Cli) -> Result<(), crate::Error> {
|
|
let mut packie = PackieBuilder::new().build()?;
|
|
let progress_bar =
|
|
ProgressBar::new(0).with_style(crate::common::progress_style_multidownload());
|
|
packie
|
|
.sync_repo()
|
|
.on_event(|ev| match ev {
|
|
SyncEvent::BeginRepo(repo) => {
|
|
progress_bar.set_prefix(repo.clone());
|
|
progress_bar.println(t!("update.begin_repo", repo = repo));
|
|
}
|
|
SyncEvent::Progress(progress) => {
|
|
progress_bar.set_length(progress.total_bytes);
|
|
progress_bar.set_position(progress.downloaded_bytes);
|
|
}
|
|
SyncEvent::Error(repo, url, err) => match (repo, url) {
|
|
(Some(repo), Some(url)) => {
|
|
progress_bar.println(format!(
|
|
"failed to update repository \"{repo}\" from \"{url}\": {err}"
|
|
));
|
|
}
|
|
(Some(repo), None) => {
|
|
progress_bar.println(format!("failed to update repository \"{repo}\": {err}"));
|
|
}
|
|
_ => {
|
|
progress_bar.println(format!("failed to update repositories: {err}"));
|
|
}
|
|
},
|
|
})
|
|
.run();
|
|
Ok(())
|
|
}
|