diff options
Diffstat (limited to 'src/backup_progress.rs')
-rw-r--r-- | src/backup_progress.rs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/backup_progress.rs b/src/backup_progress.rs new file mode 100644 index 0000000..d65f104 --- /dev/null +++ b/src/backup_progress.rs @@ -0,0 +1,45 @@ +use indicatif::{ProgressBar, ProgressStyle}; +use std::path::Path; + +pub struct BackupProgress { + progress: ProgressBar, +} + +impl BackupProgress { + pub fn new() -> Self { + let progress = if true { + ProgressBar::new(0) + } else { + ProgressBar::hidden() + }; + let parts = vec![ + "{wide_bar}", + "elapsed: {elapsed}", + "files: {pos}/{len}", + "current: {wide_msg}", + "{spinner}", + ]; + progress.set_style(ProgressStyle::default_bar().template(&parts.join("\n"))); + progress.enable_steady_tick(100); + + Self { progress } + } + + pub fn files_in_previous_generation(&self, count: u64) { + self.progress.set_length(count); + } + + pub fn found_problem(&self) { + self.progress.inc(1); + } + + pub fn found_live_file(&self, filename: &Path) { + self.progress.inc(1); + self.progress + .set_message(&format!("{}", filename.display())); + } + + pub fn finish(&self) { + self.progress.set_length(self.progress.position()); + } +} |