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