Saves results when stopping scan (#713)
This commit is contained in:
parent
637e97e66d
commit
073ae6f72f
|
@ -242,7 +242,7 @@ impl BadExtensions {
|
|||
|
||||
let include_files_without_extension = self.include_files_without_extension;
|
||||
|
||||
let check_was_breaked = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
||||
let check_was_stopped = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
||||
|
||||
//// PROGRESS THREAD START
|
||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||
|
@ -281,7 +281,7 @@ impl BadExtensions {
|
|||
.map(|file_entry| {
|
||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||
check_was_breaked.store(true, Ordering::Relaxed);
|
||||
check_was_stopped.store(true, Ordering::Relaxed);
|
||||
return None;
|
||||
}
|
||||
|
||||
|
@ -377,7 +377,7 @@ impl BadExtensions {
|
|||
progress_thread_handle.join().unwrap();
|
||||
|
||||
// Break if stop was clicked
|
||||
if check_was_breaked.load(Ordering::Relaxed) {
|
||||
if check_was_stopped.load(Ordering::Relaxed) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -391,9 +391,9 @@ impl BrokenFiles {
|
|||
mem::swap(&mut self.files_to_check, &mut non_cached_files_to_check);
|
||||
}
|
||||
|
||||
let check_was_breaked = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
||||
|
||||
//// PROGRESS THREAD START
|
||||
let check_was_stopped = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
||||
|
||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||
let atomic_file_counter = Arc::new(AtomicUsize::new(0));
|
||||
|
||||
|
@ -425,7 +425,7 @@ impl BrokenFiles {
|
|||
.map(|(_, mut file_entry)| {
|
||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||
check_was_breaked.store(true, Ordering::Relaxed);
|
||||
check_was_stopped.store(true, Ordering::Relaxed);
|
||||
return None;
|
||||
}
|
||||
|
||||
|
@ -493,26 +493,16 @@ impl BrokenFiles {
|
|||
progress_thread_run.store(false, Ordering::Relaxed);
|
||||
progress_thread_handle.join().unwrap();
|
||||
|
||||
// Break if stop was clicked
|
||||
if check_was_breaked.load(Ordering::Relaxed) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Just connect loaded results with already calculated
|
||||
for (_name, file_entry) in records_already_cached {
|
||||
vec_file_entry.push(file_entry.clone());
|
||||
}
|
||||
|
||||
self.broken_files = vec_file_entry
|
||||
.iter()
|
||||
.filter_map(|f| if f.error_string.is_empty() { None } else { Some(f.clone()) })
|
||||
.collect();
|
||||
|
||||
if self.use_cache {
|
||||
// Must save all results to file, old loaded from file with all currently counted results
|
||||
let mut all_results: BTreeMap<String, FileEntry> = self.files_to_check.clone();
|
||||
|
||||
for file_entry in vec_file_entry {
|
||||
for file_entry in vec_file_entry.clone() {
|
||||
all_results.insert(file_entry.path.to_string_lossy().to_string(), file_entry);
|
||||
}
|
||||
for (_name, file_entry) in loaded_hash_map {
|
||||
|
@ -521,6 +511,16 @@ impl BrokenFiles {
|
|||
save_cache_to_file(&all_results, &mut self.text_messages, self.save_also_as_json);
|
||||
}
|
||||
|
||||
// Break if stop was clicked after saving to cache
|
||||
if check_was_stopped.load(Ordering::Relaxed) {
|
||||
return false;
|
||||
}
|
||||
|
||||
self.broken_files = vec_file_entry
|
||||
.into_par_iter()
|
||||
.filter_map(|f| if f.error_string.is_empty() { None } else { Some(f) })
|
||||
.collect();
|
||||
|
||||
self.information.number_of_broken_files = self.broken_files.len();
|
||||
|
||||
Common::print_time(system_time, SystemTime::now(), "sort_images - reading data from files in parallel".to_string());
|
||||
|
|
|
@ -504,7 +504,7 @@ impl DuplicateFinder {
|
|||
let check_type = Arc::new(self.hash_type);
|
||||
|
||||
let start_time: SystemTime = SystemTime::now();
|
||||
let check_was_breaked = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
||||
let check_was_stopped = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
||||
let mut pre_checked_map: BTreeMap<u64, Vec<FileEntry>> = Default::default();
|
||||
|
||||
//// PROGRESS THREAD START
|
||||
|
@ -597,7 +597,7 @@ impl DuplicateFinder {
|
|||
atomic_file_counter.fetch_add(vec_file_entry.len(), Ordering::Relaxed);
|
||||
for file_entry in vec_file_entry {
|
||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||
check_was_breaked.store(true, Ordering::Relaxed);
|
||||
check_was_stopped.store(true, Ordering::Relaxed);
|
||||
return None;
|
||||
}
|
||||
match hash_calculation(&mut buffer, file_entry, &check_type, 0) {
|
||||
|
@ -618,7 +618,7 @@ impl DuplicateFinder {
|
|||
progress_thread_handle.join().unwrap();
|
||||
|
||||
// Check if user aborted search(only from GUI)
|
||||
if check_was_breaked.load(Ordering::Relaxed) {
|
||||
if check_was_stopped.load(Ordering::Relaxed) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -761,7 +761,7 @@ impl DuplicateFinder {
|
|||
atomic_file_counter.fetch_add(vec_file_entry.len(), Ordering::Relaxed);
|
||||
for mut file_entry in vec_file_entry {
|
||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||
check_was_breaked.store(true, Ordering::Relaxed);
|
||||
check_was_stopped.store(true, Ordering::Relaxed);
|
||||
return None;
|
||||
}
|
||||
|
||||
|
@ -821,8 +821,8 @@ impl DuplicateFinder {
|
|||
progress_thread_run.store(false, Ordering::Relaxed);
|
||||
progress_thread_handle.join().unwrap();
|
||||
|
||||
// Check if user aborted search(only from GUI)
|
||||
if check_was_breaked.load(Ordering::Relaxed) {
|
||||
// Break if stop was clicked after saving to cache
|
||||
if check_was_stopped.load(Ordering::Relaxed) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -320,7 +320,7 @@ impl SameMusic {
|
|||
mem::swap(&mut self.music_to_check, &mut non_cached_files_to_check);
|
||||
}
|
||||
|
||||
let check_was_breaked = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
||||
let check_was_stopped = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
||||
|
||||
//// PROGRESS THREAD START
|
||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||
|
@ -358,7 +358,7 @@ impl SameMusic {
|
|||
.map(|(path, mut music_entry)| {
|
||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||
check_was_breaked.store(true, Ordering::Relaxed);
|
||||
check_was_stopped.store(true, Ordering::Relaxed);
|
||||
return None;
|
||||
}
|
||||
|
||||
|
@ -456,11 +456,6 @@ impl SameMusic {
|
|||
progress_thread_run.store(false, Ordering::Relaxed);
|
||||
progress_thread_handle.join().unwrap();
|
||||
|
||||
// Check if user aborted search(only from GUI)
|
||||
if check_was_breaked.load(Ordering::Relaxed) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Just connect loaded results with already calculated
|
||||
for (_name, file_entry) in records_already_cached {
|
||||
vec_file_entry.push(file_entry.clone());
|
||||
|
@ -478,6 +473,11 @@ impl SameMusic {
|
|||
save_cache_to_file(&all_results, &mut self.text_messages, self.save_also_as_json);
|
||||
}
|
||||
|
||||
// Break if stop was clicked after saving to cache
|
||||
if check_was_stopped.load(Ordering::Relaxed) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Common::print_time(start_time, SystemTime::now(), "check_records_multithreaded".to_string());
|
||||
|
||||
true
|
||||
|
|
|
@ -535,6 +535,7 @@ impl SimilarImages {
|
|||
let hash_map_modification = SystemTime::now();
|
||||
|
||||
//// PROGRESS THREAD START
|
||||
let check_was_stopped = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||
|
||||
let atomic_file_counter = Arc::new(AtomicUsize::new(0));
|
||||
|
@ -568,6 +569,7 @@ impl SimilarImages {
|
|||
.map(|(_s, mut file_entry)| {
|
||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||
check_was_stopped.store(true, Ordering::Relaxed);
|
||||
return None;
|
||||
}
|
||||
let file_name_lowercase = file_entry.path.to_string_lossy().to_lowercase();
|
||||
|
@ -669,6 +671,11 @@ impl SimilarImages {
|
|||
);
|
||||
}
|
||||
|
||||
// Break if stop was clicked after saving to cache
|
||||
if check_was_stopped.load(Ordering::Relaxed) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Common::print_time(hash_map_modification, SystemTime::now(), "sort_images - saving data to files".to_string());
|
||||
true
|
||||
}
|
||||
|
|
|
@ -464,6 +464,7 @@ impl SimilarVideos {
|
|||
let hash_map_modification = SystemTime::now();
|
||||
|
||||
//// PROGRESS THREAD START
|
||||
let check_was_stopped = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||
|
||||
let atomic_file_counter = Arc::new(AtomicUsize::new(0));
|
||||
|
@ -496,7 +497,7 @@ impl SimilarVideos {
|
|||
.map(|file_entry| {
|
||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||
// This will not break
|
||||
check_was_stopped.store(true, Ordering::Relaxed);
|
||||
return None;
|
||||
}
|
||||
let mut file_entry = file_entry.1.clone();
|
||||
|
@ -551,6 +552,11 @@ impl SimilarVideos {
|
|||
save_hashes_to_file(&all_results, &mut self.text_messages, self.save_also_as_json);
|
||||
}
|
||||
|
||||
// Break if stop was clicked after saving to cache
|
||||
if check_was_stopped.load(Ordering::Relaxed) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Common::print_time(hash_map_modification, SystemTime::now(), "sort_videos - saving data to files".to_string());
|
||||
let hash_map_modification = SystemTime::now();
|
||||
|
||||
|
|
Loading…
Reference in a new issue