sakurs_cli/progress/
mod.rs

1//! Progress reporting module
2
3use indicatif::{ProgressBar, ProgressStyle};
4use std::time::Duration;
5
6/// Progress reporter for file processing
7pub struct ProgressReporter {
8    progress_bar: Option<ProgressBar>,
9    quiet: bool,
10}
11
12impl ProgressReporter {
13    /// Create a new progress reporter
14    pub fn new(quiet: bool) -> Self {
15        Self {
16            progress_bar: None,
17            quiet,
18        }
19    }
20
21    /// Initialize progress bar for file processing
22    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    /// Update progress for a completed file
40    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    /// Finish progress reporting
48    pub fn finish(&self) {
49        if let Some(pb) = &self.progress_bar {
50            pb.finish_with_message("Complete");
51        }
52    }
53}