summaryrefslogtreecommitdiff
path: root/src/backup_progress.rs
blob: 6c1d3e68382e6c5b98718f0c1d820ecb8fbd55b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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());
        self.progress.finish_and_clear();
    }
}