mirror of
https://github.com/sreedevk/deduplicator.git
synced 2026-09-07 10:34:22 +00:00
Merge pull request #18 from sreedevk/progress-bar
[Feature] Add Progress Bar When Indexing Files
This commit is contained in:
48
Cargo.lock
generated
48
Cargo.lock
generated
@@ -161,6 +161,19 @@ dependencies = [
|
|||||||
"winapi",
|
"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]]
|
[[package]]
|
||||||
name = "core-foundation-sys"
|
name = "core-foundation-sys"
|
||||||
version = "0.8.3"
|
version = "0.8.3"
|
||||||
@@ -313,6 +326,7 @@ dependencies = [
|
|||||||
"fxhash",
|
"fxhash",
|
||||||
"glob",
|
"glob",
|
||||||
"humansize",
|
"humansize",
|
||||||
|
"indicatif",
|
||||||
"itertools",
|
"itertools",
|
||||||
"prettytable-rs",
|
"prettytable-rs",
|
||||||
"rayon",
|
"rayon",
|
||||||
@@ -349,6 +363,12 @@ version = "1.8.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
|
checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "encode_unicode"
|
||||||
|
version = "0.3.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "encode_unicode"
|
name = "encode_unicode"
|
||||||
version = "1.0.0"
|
version = "1.0.0"
|
||||||
@@ -459,6 +479,20 @@ dependencies = [
|
|||||||
"cxx-build",
|
"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]]
|
[[package]]
|
||||||
name = "io-lifetimes"
|
name = "io-lifetimes"
|
||||||
version = "1.0.3"
|
version = "1.0.3"
|
||||||
@@ -613,6 +647,12 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "number_prefix"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "once_cell"
|
name = "once_cell"
|
||||||
version = "1.16.0"
|
version = "1.16.0"
|
||||||
@@ -660,6 +700,12 @@ version = "0.3.26"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
|
checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "portable-atomic"
|
||||||
|
version = "0.3.19"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "26f6a7b87c2e435a3241addceeeff740ff8b7e76b74c13bf9acb17fa454ea00b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "prettytable-rs"
|
name = "prettytable-rs"
|
||||||
version = "0.10.0"
|
version = "0.10.0"
|
||||||
@@ -667,7 +713,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "eea25e07510aa6ab6547308ebe3c036016d162b8da920dbb079e3ba8acf3d95a"
|
checksum = "eea25e07510aa6ab6547308ebe3c036016d162b8da920dbb079e3ba8acf3d95a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"csv",
|
"csv",
|
||||||
"encode_unicode",
|
"encode_unicode 1.0.0",
|
||||||
"is-terminal",
|
"is-terminal",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"term",
|
"term",
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ crossterm = "0.25.0"
|
|||||||
fxhash = "0.2.1"
|
fxhash = "0.2.1"
|
||||||
glob = "0.3.0"
|
glob = "0.3.0"
|
||||||
humansize = "2.1.2"
|
humansize = "2.1.2"
|
||||||
|
indicatif = { version = "0.17.2", features = ["rayon", "tokio"] }
|
||||||
itertools = "0.10.5"
|
itertools = "0.10.5"
|
||||||
prettytable-rs = "0.10.0"
|
prettytable-rs = "0.10.0"
|
||||||
rayon = "1.6.1"
|
rayon = "1.6.1"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
use std::{fs, path::PathBuf};
|
use std::{fs, path::PathBuf};
|
||||||
|
use indicatif::{HumanDuration, MultiProgress, ProgressBar, ProgressStyle, ParallelProgressIterator};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use fxhash::hash32 as hasher;
|
use fxhash::hash32 as hasher;
|
||||||
use glob::glob;
|
use glob::glob;
|
||||||
@@ -46,6 +46,7 @@ fn scan(app_opts: &Params, connection: &sqlite::Connection) -> Result<Vec<String
|
|||||||
let indexed_paths = database::indexed_paths(connection)?;
|
let indexed_paths = database::indexed_paths(connection)?;
|
||||||
let files: Vec<String> = glob_patterns
|
let files: Vec<String> = glob_patterns
|
||||||
.par_iter()
|
.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())
|
.filter_map(|glob_pattern| glob(glob_pattern.as_os_str().to_str()?).ok())
|
||||||
.flat_map(|file_vec| {
|
.flat_map(|file_vec| {
|
||||||
file_vec
|
file_vec
|
||||||
@@ -66,6 +67,7 @@ fn scan(app_opts: &Params, connection: &sqlite::Connection) -> Result<Vec<String
|
|||||||
fn index_files(files: Vec<String>, connection: &sqlite::Connection) -> Result<()> {
|
fn index_files(files: Vec<String>, connection: &sqlite::Connection) -> Result<()> {
|
||||||
let hashed: Vec<File> = files
|
let hashed: Vec<File> = files
|
||||||
.into_par_iter()
|
.into_par_iter()
|
||||||
|
.progress_with_style(ProgressStyle::with_template("{spinner:.green} [indexing files] [{wide_bar:.cyan/blue}] {pos}/{len} files").unwrap())
|
||||||
.filter_map(|file| {
|
.filter_map(|file| {
|
||||||
let hash = hash_file(&file).ok()?;
|
let hash = hash_file(&file).ok()?;
|
||||||
Some(database::File { path: file, hash })
|
Some(database::File { path: file, hash })
|
||||||
|
|||||||
Reference in New Issue
Block a user