summaryrefslogtreecommitdiff
path: root/src/backup_progress.rs
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2021-01-05 12:54:53 +0200
committerLars Wirzenius <liw@liw.fi>2021-01-05 14:05:37 +0200
commit8a42fc1c9dc3da6936fe8e1d0d16fbe8a60ec520 (patch)
tree7c2d38852e6f1eec5c357b2304a04dc332b8d953 /src/backup_progress.rs
parent678e65c57ae983ef66d16e92965814b0f3f0d73f (diff)
downloadobnam2-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.rs45
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());
+ }
+}