main: clean up ui code
This commit is contained in:
28
src/main.rs
28
src/main.rs
@@ -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
35
src/ui.rs
Normal 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)
|
||||
}
|
||||
Reference in New Issue
Block a user