diff options
author | Lars Wirzenius <liw@liw.fi> | 2021-01-05 12:54:53 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2021-01-05 14:05:37 +0200 |
commit | 8a42fc1c9dc3da6936fe8e1d0d16fbe8a60ec520 (patch) | |
tree | 7c2d38852e6f1eec5c357b2304a04dc332b8d953 /src/backup_progress.rs | |
parent | 678e65c57ae983ef66d16e92965814b0f3f0d73f (diff) | |
download | obnam2-8a42fc1c9dc3da6936fe8e1d0d16fbe8a60ec520.tar.gz |
refactor: move policy on whether to back up a file into a module
This commit also splits up the src/cmd/backup.rs module into other,
smaller, more cohesive modules that are easier to understand and use.
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()); + } +} |