Files
packie/cli/src/update.rs
T
2026-08-09 21:16:48 +08:00

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(())
}