main: clean up ui code

This commit is contained in:
2025-11-27 23:43:48 +01:00
parent 9c15490774
commit 601630beee
2 changed files with 38 additions and 25 deletions

View File

@@ -1,6 +1,5 @@
use std::env;
use std::io::Write;
use std::time::Duration;
extern crate clap;
use clap::{arg, command, Command};
@@ -16,6 +15,8 @@ use changelog::generate_entry;
use log::{info, error};
use indicatif_log_bridge::LogWrapper;
mod ui;
fn main() {
let rt = tokio::runtime::Runtime::new().unwrap();
let logger =
@@ -67,30 +68,7 @@ fn main() {
let ppa = sub_matches.get_one::<String>("ppa").map(|s| s.as_str()).unwrap_or("");
// Since get is async, we need to block on it
let pb = multi.add(indicatif::ProgressBar::new(0));
pb.enable_steady_tick(Duration::from_millis(50));
let mut progress_callback = |prefix: &str, msg: &str, progress: usize, total: usize| {
if progress != 0 && total != 0 {
pb.set_style(indicatif::ProgressStyle::default_bar()
.template("> {spinner:.blue} {prefix}\n {msg} [{bar:40.cyan/blue}] {pos}/{len} ({eta})")
.unwrap()
.progress_chars("=> "));
} else {
pb.set_style(indicatif::ProgressStyle::default_bar()
.template("> {spinner:.blue} {prefix}")
.unwrap());
}
if ! prefix.is_empty() {
pb.set_prefix(prefix.to_string());
}
pb.set_message(msg.to_string());
pb.set_length(total as u64);
pb.set_position(progress as u64);
};
let (pb, mut progress_callback) = ui::create_progress_bar(&multi);
if let Err(e) = rt.block_on(get(package, version, series, "", ppa, None, Some(&mut progress_callback))) {
pb.finish_and_clear();

35
src/ui.rs Normal file
View File

@@ -0,0 +1,35 @@
use std::time::Duration;
use indicatif::{MultiProgress, ProgressBar, ProgressStyle};
pub fn create_progress_bar(multi: &MultiProgress) -> (ProgressBar, impl Fn(&str, &str, usize, usize) + '_) {
let pb = multi.add(ProgressBar::new(0));
pb.enable_steady_tick(Duration::from_millis(50));
pb.set_style(ProgressStyle::default_bar()
.template("> {spinner:.blue} {prefix}")
.unwrap());
let pb_clone = pb.clone();
let callback = move |prefix: &str, msg: &str, progress: usize, total: usize| {
let pb = &pb_clone;
if progress != 0 && total != 0 {
pb.set_style(ProgressStyle::default_bar()
.template("> {spinner:.blue} {prefix}\n {msg} [{bar:40.cyan/blue}] {pos}/{len} ({eta})")
.unwrap()
.progress_chars("=> "));
} else {
pb.set_style(ProgressStyle::default_bar()
.template("> {spinner:.blue} {prefix}")
.unwrap());
}
if !prefix.is_empty() {
pb.set_prefix(prefix.to_string());
}
pb.set_message(msg.to_string());
pb.set_length(total as u64);
pb.set_position(progress as u64);
};
(pb, callback)
}