backup: add optional progress callback to ChunkIterator
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
parent
4070096c6a
commit
c9e7f4dc8b
|
@ -65,6 +65,7 @@ pub struct ChunkIterator {
|
||||||
Tied<nix::dir::Dir, Iterator<Item = nix::Result<nix::dir::Entry>>>
|
Tied<nix::dir::Dir, Iterator<Item = nix::Result<nix::dir::Entry>>>
|
||||||
>,
|
>,
|
||||||
subdir_fd: RawFd,
|
subdir_fd: RawFd,
|
||||||
|
progress: Option<fn(u8)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ChunkIterator {
|
impl ChunkIterator {
|
||||||
|
@ -74,9 +75,16 @@ impl ChunkIterator {
|
||||||
index: 0,
|
index: 0,
|
||||||
subdir: None,
|
subdir: None,
|
||||||
subdir_fd: 0,
|
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<bool, Error> {
|
fn next_subdir(&mut self) -> Result<bool, Error> {
|
||||||
if self.index == 0x10000 {
|
if self.index == 0x10000 {
|
||||||
return Ok(false);
|
return Ok(false);
|
||||||
|
@ -84,6 +92,13 @@ impl ChunkIterator {
|
||||||
|
|
||||||
let l1name = PathBuf::from(format!("{:04x}", self.index));
|
let l1name = PathBuf::from(format!("{:04x}", self.index));
|
||||||
self.index += 1;
|
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::dir::{Dir, Entry};
|
||||||
use nix::fcntl::OFlag;
|
use nix::fcntl::OFlag;
|
||||||
|
|
Loading…
Reference in New Issue