sakurs_cli/progress/
mod.rs1use indicatif::{ProgressBar, ProgressStyle};
4use std::time::Duration;
5
6pub struct ProgressReporter {
8 progress_bar: Option<ProgressBar>,
9 quiet: bool,
10}
11
12impl ProgressReporter {
13 pub fn new(quiet: bool) -> Self {
15 Self {
16 progress_bar: None,
17 quiet,
18 }
19 }
20
21 pub fn init_files(&mut self, total_files: u64) {
23 if self.quiet {
24 return;
25 }
26
27 let pb = ProgressBar::new(total_files);
28 pb.set_style(
29 ProgressStyle::default_bar()
30 .template("[{elapsed_precise}] {bar:40.cyan/blue} {pos}/{len} files {msg}")
31 .unwrap()
32 .progress_chars("##-"),
33 );
34 pb.enable_steady_tick(Duration::from_millis(100));
35
36 self.progress_bar = Some(pb);
37 }
38
39 pub fn file_completed(&self, filename: &str) {
41 if let Some(pb) = &self.progress_bar {
42 pb.set_message(format!("Processed: {filename}"));
43 pb.inc(1);
44 }
45 }
46
47 pub fn finish(&self) {
49 if let Some(pb) = &self.progress_bar {
50 pb.finish_with_message("Complete");
51 }
52 }
53}