diff --git a/Cargo.lock b/Cargo.lock index 33c4314..20f18a4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -161,6 +161,19 @@ dependencies = [ "winapi", ] +[[package]] +name = "console" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9b6515d269224923b26b5febea2ed42b2d5f2ce37284a4dd670fedd6cb8347a" +dependencies = [ + "encode_unicode 0.3.6", + "lazy_static", + "libc", + "unicode-width", + "windows-sys", +] + [[package]] name = "core-foundation-sys" version = "0.8.3" @@ -313,6 +326,7 @@ dependencies = [ "fxhash", "glob", "humansize", + "indicatif", "itertools", "prettytable-rs", "rayon", @@ -349,6 +363,12 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + [[package]] name = "encode_unicode" version = "1.0.0" @@ -459,6 +479,20 @@ dependencies = [ "cxx-build", ] +[[package]] +name = "indicatif" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4295cbb7573c16d310e99e713cf9e75101eb190ab31fccd35f2d2691b4352b19" +dependencies = [ + "console", + "number_prefix", + "portable-atomic", + "rayon", + "tokio", + "unicode-width", +] + [[package]] name = "io-lifetimes" version = "1.0.3" @@ -613,6 +647,12 @@ dependencies = [ "libc", ] +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + [[package]] name = "once_cell" version = "1.16.0" @@ -660,6 +700,12 @@ version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" +[[package]] +name = "portable-atomic" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26f6a7b87c2e435a3241addceeeff740ff8b7e76b74c13bf9acb17fa454ea00b" + [[package]] name = "prettytable-rs" version = "0.10.0" @@ -667,7 +713,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eea25e07510aa6ab6547308ebe3c036016d162b8da920dbb079e3ba8acf3d95a" dependencies = [ "csv", - "encode_unicode", + "encode_unicode 1.0.0", "is-terminal", "lazy_static", "term", diff --git a/Cargo.toml b/Cargo.toml index ba61aac..5f4e58a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,7 @@ crossterm = "0.25.0" fxhash = "0.2.1" glob = "0.3.0" humansize = "2.1.2" +indicatif = { version = "0.17.2", features = ["rayon", "tokio"] } itertools = "0.10.5" prettytable-rs = "0.10.0" rayon = "1.6.1" diff --git a/src/scanner.rs b/src/scanner.rs index e8d8088..21bb3ab 100644 --- a/src/scanner.rs +++ b/src/scanner.rs @@ -1,5 +1,5 @@ use std::{fs, path::PathBuf}; - +use indicatif::{HumanDuration, MultiProgress, ProgressBar, ProgressStyle, ParallelProgressIterator}; use anyhow::Result; use fxhash::hash32 as hasher; use glob::glob; @@ -46,6 +46,7 @@ fn scan(app_opts: &Params, connection: &sqlite::Connection) -> Result = glob_patterns .par_iter() + .progress_with_style(ProgressStyle::with_template("{spinner:.green} [scanning files] [{wide_bar:.cyan/blue}] {pos}/{len} files").unwrap()) .filter_map(|glob_pattern| glob(glob_pattern.as_os_str().to_str()?).ok()) .flat_map(|file_vec| { file_vec @@ -66,6 +67,7 @@ fn scan(app_opts: &Params, connection: &sqlite::Connection) -> Result, connection: &sqlite::Connection) -> Result<()> { let hashed: Vec = files .into_par_iter() + .progress_with_style(ProgressStyle::with_template("{spinner:.green} [indexing files] [{wide_bar:.cyan/blue}] {pos}/{len} files").unwrap()) .filter_map(|file| { let hash = hash_file(&file).ok()?; Some(database::File { path: file, hash })