From 4fdb1e33580bdc8774a2c2493381e0fffabc4012 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= Date: Tue, 28 Mar 2023 20:37:39 +0200 Subject: [PATCH] Move hashing into different functions --- czkawka_core/src/duplicate.rs | 52 +++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/czkawka_core/src/duplicate.rs b/czkawka_core/src/duplicate.rs index 45b2de1..e483af3 100644 --- a/czkawka_core/src/duplicate.rs +++ b/czkawka_core/src/duplicate.rs @@ -699,27 +699,15 @@ impl DuplicateFinder { Some(()) } - fn full_hashing(&mut self) {} - - /// The slowest checking type, which must be applied after checking for size - fn check_files_hash(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender>) -> bool { - assert_eq!(self.check_method, CheckingMethod::Hash); - - let check_type = self.hash_type; - + fn full_hashing( + &mut self, + stop_receiver: Option<&Receiver<()>>, + progress_sender: Option<&futures::channel::mpsc::UnboundedSender>, + mut pre_checked_map: BTreeMap>, + ) -> Option<()> { let check_was_stopped = AtomicBool::new(false); // Used for breaking from GUI and ending check thread - ///////////////////////////////////////////////////////////////////////////// PREHASHING START - - let mut pre_checked_map: BTreeMap> = Default::default(); - let ret = self.prehashing(stop_receiver, progress_sender, &mut pre_checked_map); - if ret.is_none() { - return false; - } - - ///////////////////////////////////////////////////////////////////////////// PREHASHING END - - ///////////////////////// + let check_type = self.hash_type; let start_time: SystemTime = SystemTime::now(); //// PROGRESS THREAD START let progress_thread_run = Arc::new(AtomicBool::new(true)); @@ -850,7 +838,7 @@ impl DuplicateFinder { // Break if stop was clicked after saving to cache if check_was_stopped.load(Ordering::Relaxed) { - return false; + return None; } for (size, hash_map, mut errors) in full_hash_results { @@ -862,9 +850,11 @@ impl DuplicateFinder { } } } + Common::print_time(start_time, SystemTime::now(), "delete_files"); + Some(()) + } - ///////////////////////////////////////////////////////////////////////////// HASHING END - + fn hash_reference_folders(&mut self) { // Reference - only use in size, because later hash will be counted differently if self.use_reference_folders { let mut btree_map = Default::default(); @@ -919,8 +909,24 @@ impl DuplicateFinder { } } } + } - Common::print_time(start_time, SystemTime::now(), "check_files_hash - full hash"); + /// The slowest checking type, which must be applied after checking for size + fn check_files_hash(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender>) -> bool { + assert_eq!(self.check_method, CheckingMethod::Hash); + + let mut pre_checked_map: BTreeMap> = Default::default(); + let ret = self.prehashing(stop_receiver, progress_sender, &mut pre_checked_map); + if ret.is_none() { + return false; + } + + let ret = self.full_hashing(stop_receiver, progress_sender, pre_checked_map); + if ret.is_none() { + return false; + } + + self.hash_reference_folders(); // Clean unused data self.files_with_identical_size = Default::default();