From c9e7f4dc8b469e81a337945b3ab26554edde3f3d Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Tue, 12 Feb 2019 10:35:18 +0100 Subject: [PATCH] backup: add optional progress callback to ChunkIterator Signed-off-by: Wolfgang Bumiller --- src/backup/chunk_store.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/backup/chunk_store.rs b/src/backup/chunk_store.rs index 4977d9e7..d1ec724d 100644 --- a/src/backup/chunk_store.rs +++ b/src/backup/chunk_store.rs @@ -65,6 +65,7 @@ pub struct ChunkIterator { Tied>> >, subdir_fd: RawFd, + progress: Option, } impl ChunkIterator { @@ -74,9 +75,16 @@ impl ChunkIterator { index: 0, subdir: None, subdir_fd: 0, + progress: None, } } + fn with_progress(base_dir: nix::dir::Dir, progress: fn(u8)) -> Self { + let mut me = Self::new(base_dir); + me.progress = Some(progress); + me + } + fn next_subdir(&mut self) -> Result { if self.index == 0x10000 { return Ok(false); @@ -84,6 +92,13 @@ impl ChunkIterator { let l1name = PathBuf::from(format!("{:04x}", self.index)); self.index += 1; + if let Some(cb) = self.progress { + let prev = ((self.index-1) * 100) / 0x10000; + let now = (self.index * 100) / 0x10000; + if prev != now { + cb(now as u8); + } + } use nix::dir::{Dir, Entry}; use nix::fcntl::OFlag;