diff --git a/src/main.rs b/src/main.rs index 9be350e..0f71a09 100644 --- a/src/main.rs +++ b/src/main.rs @@ -208,8 +208,10 @@ fn decrypt_with_dictionary_file( data_checksum: &Vec, ) -> Option> { let sp = spinner("Reading dictionary..."); - let f = File::open(filename).expect("Failed to open dictionary file."); + let f = File::open(&filename).expect("Failed to open dictionary file."); let reader = BufReader::new(f); + let mut pb = + ProgressBar::new((get_line_count(&filename) as f64 / LINES_PER_CHUNK as f64).ceil() as u64); let (rx, tx) = sync_channel::>(10); let handle = thread::spawn(move || { let mut line_vec: Vec = vec![]; @@ -226,7 +228,7 @@ fn decrypt_with_dictionary_file( if let Err(_) = rx.send(line_vec.clone()) {} line_vec.clear(); }); - sp.message("Dictionary decrypting file multithreaded".into()); + sp.stop(); let mut result_data: Option> = None; for lines in tx { let pw_table: Vec = lines @@ -240,13 +242,19 @@ fn decrypt_with_dictionary_file( (pw, key) }) .collect(); + pb.inc(); if let Some(dec_data) = decrypt_with_dictionary(&data, pw_table, &data_checksum) { result_data = Some(dec_data); break; } } handle.join().expect("Failed to wait for thread."); - sp.stop(); - + pb.finish(); result_data } + +fn get_line_count(fname: &str) -> usize { + let f = File::open(fname).expect("Failed to open file to get the line count."); + let reader = BufReader::new(f); + return reader.lines().count(); +}