1
0
Fork 0
mirror of synced 2024-04-25 16:22:07 +12:00

Saves results when stopping scan (#713)

This commit is contained in:
Rafał Mikrut 2022-05-09 19:40:35 +02:00 committed by GitHub
parent 637e97e66d
commit 073ae6f72f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 44 additions and 31 deletions

View file

@ -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;
}

View file

@ -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());

View file

@ -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;
}

View file

@ -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

View file

@ -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
}

View file

@ -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();