From 5eb6d6fafe6ee50e3a9fd1f575482b8ab17f717b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= Date: Sat, 6 May 2023 19:54:57 +0200 Subject: [PATCH] Split into multiple files --- Cargo.lock | 18 +- czkawka_core/src/common.rs | 3 +- czkawka_core/src/common_dir_traversal.rs | 2 + czkawka_core/src/common_directory.rs | 2 +- czkawka_core/src/duplicate.rs | 25 +- czkawka_core/src/same_music.rs | 122 ++- czkawka_core/src/similar_images.rs | 2 +- czkawka_core/src/similar_videos.rs | 2 +- czkawka_gui/src/compute_results.rs | 6 +- .../connect_things/connect_progress_window.rs | 906 +++++++++--------- .../src/gui_structs/gui_main_notebook.rs | 2 +- 11 files changed, 565 insertions(+), 525 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ab8bb68..cfd179a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1780,9 +1780,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" -version = "0.2.142" +version = "0.2.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317" +checksum = "edc207893e85c5d6be840e969b496b53d94cec8be2d501b214f50daa97fa8024" [[package]] name = "libheif-rs" @@ -3178,9 +3178,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" +checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" dependencies = [ "serde", "time-core", @@ -3188,9 +3188,9 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" [[package]] name = "tinystr" @@ -3770,9 +3770,9 @@ dependencies = [ [[package]] name = "zip" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0445d0fbc924bb93539b4316c11afb121ea39296f99a3c4c9edad09e3658cdef" +checksum = "7e92305c174683d78035cbf1b70e18db6329cc0f1b9cae0a52ca90bf5bfe7125" dependencies = [ "aes 0.7.5", "byteorder", @@ -3784,7 +3784,7 @@ dependencies = [ "hmac", "pbkdf2", "sha1", - "time 0.3.20", + "time 0.3.21", ] [[package]] diff --git a/czkawka_core/src/common.rs b/czkawka_core/src/common.rs index 5752455..3dc0c83 100644 --- a/czkawka_core/src/common.rs +++ b/czkawka_core/src/common.rs @@ -373,7 +373,8 @@ where entries_to_check .into_iter() .filter_map(|vec_file_entry| { - let (mut files_from_referenced_folders, normal_files): (Vec<_>, Vec<_>) = vec_file_entry.into_iter().partition(|e| directories.is_referenced_directory(e.get_path())); + let (mut files_from_referenced_folders, normal_files): (Vec<_>, Vec<_>) = + vec_file_entry.into_iter().partition(|e| directories.is_in_referenced_directory(e.get_path())); if files_from_referenced_folders.is_empty() || normal_files.is_empty() { None diff --git a/czkawka_core/src/common_dir_traversal.rs b/czkawka_core/src/common_dir_traversal.rs index ad78cee..0ae9342 100644 --- a/czkawka_core/src/common_dir_traversal.rs +++ b/czkawka_core/src/common_dir_traversal.rs @@ -34,6 +34,8 @@ pub enum CheckingMethod { SizeName, Size, Hash, + AudioTags, + AudioContent, } #[derive(Clone, Debug, Default, PartialEq, Eq)] diff --git a/czkawka_core/src/common_directory.rs b/czkawka_core/src/common_directory.rs index 3a6d177..0d73937 100644 --- a/czkawka_core/src/common_directory.rs +++ b/czkawka_core/src/common_directory.rs @@ -306,7 +306,7 @@ impl Directories { } #[must_use] - pub fn is_referenced_directory(&self, path: &Path) -> bool { + pub fn is_in_referenced_directory(&self, path: &Path) -> bool { self.reference_directories.iter().any(|e| path.starts_with(e)) } diff --git a/czkawka_core/src/duplicate.rs b/czkawka_core/src/duplicate.rs index 5929cc4..742702e 100644 --- a/czkawka_core/src/duplicate.rs +++ b/czkawka_core/src/duplicate.rs @@ -182,9 +182,7 @@ impl DuplicateFinder { return; } } - CheckingMethod::None => { - panic!(); - } + _ => panic!(), } self.delete_files(); self.debug_print(); @@ -384,7 +382,7 @@ impl DuplicateFinder { .into_iter() .filter_map(|(_name, vec_file_entry)| { let (mut files_from_referenced_folders, normal_files): (Vec<_>, Vec<_>) = - vec_file_entry.into_iter().partition(|e| self.directories.is_referenced_directory(e.get_path())); + vec_file_entry.into_iter().partition(|e| self.directories.is_in_referenced_directory(e.get_path())); if files_from_referenced_folders.is_empty() || normal_files.is_empty() { None @@ -464,7 +462,7 @@ impl DuplicateFinder { .into_iter() .filter_map(|(_size, vec_file_entry)| { let (mut files_from_referenced_folders, normal_files): (Vec<_>, Vec<_>) = - vec_file_entry.into_iter().partition(|e| self.directories.is_referenced_directory(e.get_path())); + vec_file_entry.into_iter().partition(|e| self.directories.is_in_referenced_directory(e.get_path())); if files_from_referenced_folders.is_empty() || normal_files.is_empty() { None @@ -584,7 +582,7 @@ impl DuplicateFinder { .into_iter() .filter_map(|(_size, vec_file_entry)| { let (mut files_from_referenced_folders, normal_files): (Vec<_>, Vec<_>) = - vec_file_entry.into_iter().partition(|e| self.directories.is_referenced_directory(e.get_path())); + vec_file_entry.into_iter().partition(|e| self.directories.is_in_referenced_directory(e.get_path())); if files_from_referenced_folders.is_empty() || normal_files.is_empty() { None @@ -921,7 +919,7 @@ impl DuplicateFinder { let mut all_results_with_same_size = Vec::new(); for vec_file_entry in vec_vec_file_entry { let (mut files_from_referenced_folders, normal_files): (Vec<_>, Vec<_>) = - vec_file_entry.into_iter().partition(|e| self.directories.is_referenced_directory(e.get_path())); + vec_file_entry.into_iter().partition(|e| self.directories.is_in_referenced_directory(e.get_path())); if files_from_referenced_folders.is_empty() || normal_files.is_empty() { continue; @@ -1012,10 +1010,7 @@ impl DuplicateFinder { let _tuple: (u64, usize, usize) = delete_files(vector, &self.delete_method, &mut self.text_messages, self.dryrun); } } - CheckingMethod::None => { - //Just do nothing - panic!("Checking method should never be none."); - } + _ => panic!(), } } } @@ -1206,9 +1201,7 @@ impl SaveResults for DuplicateFinder { write!(writer, "Not found any duplicates.").unwrap(); } } - CheckingMethod::None => { - panic!(); - } + _ => panic!(), } true @@ -1294,9 +1287,7 @@ impl PrintResults for DuplicateFinder { println!(); } } - CheckingMethod::None => { - panic!("Checking Method shouldn't be ever set to None"); - } + _ => panic!(), } } } diff --git a/czkawka_core/src/same_music.rs b/czkawka_core/src/same_music.rs index 3a7b5fc..f09aede 100644 --- a/czkawka_core/src/same_music.rs +++ b/czkawka_core/src/same_music.rs @@ -37,12 +37,6 @@ pub enum DeleteMethod { Delete, } -#[derive(Eq, PartialEq, Clone, Debug, Copy)] -pub enum AudioCheckMethod { - Tags, - Content, -} - bitflags! { #[derive(PartialEq, Copy, Clone, Debug)] pub struct MusicSimilarity : u32 { @@ -133,7 +127,7 @@ pub struct SameMusic { delete_outdated_cache: bool, // TODO add this to GUI use_reference_folders: bool, save_also_as_json: bool, - check_type: AudioCheckMethod, + check_type: CheckingMethod, hash_preset_config: Configuration, minimum_segment_duration: f32, maximum_difference: f64, @@ -163,7 +157,7 @@ impl SameMusic { use_reference_folders: false, duplicated_music_entries_referenced: vec![], save_also_as_json: false, - check_type: AudioCheckMethod::Content, + check_type: CheckingMethod::AudioContent, hash_preset_config: Configuration::preset_test1(), // TODO allow to change this minimum_segment_duration: 10.0, maximum_difference: 2.0, @@ -178,7 +172,7 @@ impl SameMusic { return; } match self.check_type { - AudioCheckMethod::Tags => { + CheckingMethod::AudioTags => { if !self.read_tags(stop_receiver, progress_sender) { self.stopped_search = true; return; @@ -188,7 +182,7 @@ impl SameMusic { return; } } - AudioCheckMethod::Content => { + CheckingMethod::AudioContent => { if !self.calculate_fingerprint(stop_receiver, progress_sender) { self.stopped_search = true; return; @@ -198,6 +192,7 @@ impl SameMusic { return; } } + _ => panic!(), } self.delete_files(); self.debug_print(); @@ -703,51 +698,44 @@ impl SameMusic { true } - // fn split_fingerprints_to_check(&self) -> (Vec, Vec) { - // let mut base_files: Vec = Vec::new(); - // let mut files_to_compare: Vec = Vec::new(); - // - // if self.use_reference_folders { - // // base_files = - // } else { - // base_files = self.music_entries.clone(); - // files_to_compare = self.music_entries.clone(); - // } - // - // (base_files, files_to_compare) - // } + fn split_fingerprints_to_check(&mut self) -> (Vec, Vec) { + let base_files: Vec; + let files_to_compare: Vec; - // fn compare_improved(&mut self, stop_receiver: Option<&Receiver<()>>, atomic_counter: &Arc) -> Option>> {} + if self.use_reference_folders { + (base_files, files_to_compare) = mem::take(&mut self.music_entries) + .into_iter() + .partition(|f| self.directories.is_in_referenced_directory(f.get_path())); + } else { + base_files = self.music_entries.clone(); + files_to_compare = mem::take(&mut self.music_entries); + } + + (base_files, files_to_compare) + } fn compare_fingerprints(&mut self, stop_receiver: Option<&Receiver<()>>, atomic_counter: &Arc) -> Option>> { - // TODO do optimization - // Multithreading - // Grouping same hashes(not sure how common, but probably with a lot of files can save some time) - // Better algorithm of finding similar fingerprints - let mut used_paths: HashSet = Default::default(); + + let (base_files, files_to_compare) = self.split_fingerprints_to_check(); let configuration = &self.hash_preset_config; let minimum_segment_duration = self.minimum_segment_duration; let maximum_difference = self.maximum_difference; let mut duplicated_music_entries = Vec::new(); - for (f_idx, f_entry) in self.music_entries.iter().enumerate() { - if f_idx + 1 == self.music_entries.len() { - break; - } - + for f_entry in base_files { + atomic_counter.fetch_add(1, Ordering::Relaxed); if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() { return None; } - atomic_counter.fetch_add(1, Ordering::Relaxed); let f_string = f_entry.path.to_string_lossy().to_string(); if used_paths.contains(&f_string) { continue; } - let mut collected_similar_items = self.music_entries[f_idx + 1..] + let mut collected_similar_items = files_to_compare .par_iter() .filter_map(|e_entry| { let e_string = e_entry.path.to_string_lossy().to_string(); @@ -779,6 +767,66 @@ impl SameMusic { Some(duplicated_music_entries) } + // fn compare_fingerprints(&mut self, stop_receiver: Option<&Receiver<()>>, atomic_counter: &Arc) -> Option>> { + // // TODO do optimization + // // Multithreading + // // Grouping same hashes(not sure how common, but probably with a lot of files can save some time) + // // Better algorithm of finding similar fingerprints + // + // let mut used_paths: HashSet = Default::default(); + // let configuration = &self.hash_preset_config; + // let minimum_segment_duration = self.minimum_segment_duration; + // let maximum_difference = self.maximum_difference; + // + // let mut duplicated_music_entries = Vec::new(); + // + // for (f_idx, f_entry) in self.music_entries.iter().enumerate() { + // if f_idx + 1 == self.music_entries.len() { + // break; + // } + // + // if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() { + // return None; + // } + // atomic_counter.fetch_add(1, Ordering::Relaxed); + // + // let f_string = f_entry.path.to_string_lossy().to_string(); + // if used_paths.contains(&f_string) { + // continue; + // } + // + // let mut collected_similar_items = self.music_entries[f_idx + 1..] + // .par_iter() + // .filter_map(|e_entry| { + // let e_string = e_entry.path.to_string_lossy().to_string(); + // if used_paths.contains(&e_string) { + // return None; + // } + // let mut segments = match_fingerprints(&f_entry.fingerprint, &e_entry.fingerprint, configuration).unwrap(); + // segments.retain(|s| s.duration(configuration) > minimum_segment_duration && s.score < maximum_difference); + // if segments.is_empty() { + // None + // } else { + // Some((e_string, e_entry)) + // } + // }) + // .collect::>(); + // + // collected_similar_items.retain(|(path, _entry)| !used_paths.contains(path)); + // if !collected_similar_items.is_empty() { + // let mut music_entries = Vec::new(); + // for (path, entry) in collected_similar_items { + // used_paths.insert(path); + // music_entries.push(entry.clone()); + // } + // used_paths.insert(f_string); + // music_entries.push(f_entry.clone()); + // duplicated_music_entries.push(music_entries); + // } + // } + // Some(duplicated_music_entries) + // } + fn check_for_duplicate_fingerprints(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&UnboundedSender>) -> bool { assert_ne!(MusicSimilarity::NONE, self.music_similarity, "This can't be none"); @@ -801,9 +849,7 @@ impl SameMusic { send_info_and_wait_for_ending_all_threads(&progress_thread_run, progress_thread_handle); - // TODO fill this with proper values self.duplicated_music_entries = duplicated_music_entries; - // Use if self.use_reference_folders { self.duplicated_music_entries_referenced = filter_reference_folders_generic(mem::take(&mut self.duplicated_music_entries), &self.directories); diff --git a/czkawka_core/src/similar_images.rs b/czkawka_core/src/similar_images.rs index 37ff0fa..31d0e80 100644 --- a/czkawka_core/src/similar_images.rs +++ b/czkawka_core/src/similar_images.rs @@ -913,7 +913,7 @@ impl SimilarImages { .into_iter() .filter_map(|vec_file_entry| { let (mut files_from_referenced_folders, normal_files): (Vec<_>, Vec<_>) = - vec_file_entry.into_iter().partition(|e| self.directories.is_referenced_directory(e.get_path())); + vec_file_entry.into_iter().partition(|e| self.directories.is_in_referenced_directory(e.get_path())); if files_from_referenced_folders.is_empty() || normal_files.is_empty() { None diff --git a/czkawka_core/src/similar_videos.rs b/czkawka_core/src/similar_videos.rs index ec064c1..213847c 100644 --- a/czkawka_core/src/similar_videos.rs +++ b/czkawka_core/src/similar_videos.rs @@ -517,7 +517,7 @@ impl SimilarVideos { .into_iter() .filter_map(|vec_file_entry| { let (mut files_from_referenced_folders, normal_files): (Vec<_>, Vec<_>) = - vec_file_entry.into_iter().partition(|e| self.directories.is_referenced_directory(e.get_path())); + vec_file_entry.into_iter().partition(|e| self.directories.is_in_referenced_directory(e.get_path())); if files_from_referenced_folders.is_empty() || normal_files.is_empty() { None diff --git a/czkawka_gui/src/compute_results.rs b/czkawka_gui/src/compute_results.rs index 9ec02d3..2253668 100644 --- a/czkawka_gui/src/compute_results.rs +++ b/czkawka_gui/src/compute_results.rs @@ -1164,7 +1164,7 @@ fn computer_duplicate_finder( duplicates_size = information.lost_space_by_size; duplicates_group = information.number_of_groups_by_size_name; } - CheckingMethod::None => { + _ => { panic!(); } } @@ -1251,7 +1251,7 @@ fn computer_duplicate_finder( } } } - CheckingMethod::None => { + _ => { panic!(); } } @@ -1310,7 +1310,7 @@ fn computer_duplicate_finder( } } } - CheckingMethod::None => { + _ => { panic!(); } } diff --git a/czkawka_gui/src/connect_things/connect_progress_window.rs b/czkawka_gui/src/connect_things/connect_progress_window.rs index 1a80f03..5e5e94e 100644 --- a/czkawka_gui/src/connect_things/connect_progress_window.rs +++ b/czkawka_gui/src/connect_things/connect_progress_window.rs @@ -1,5 +1,7 @@ +use common_dir_traversal::CheckingMethod; use futures::channel::mpsc::UnboundedReceiver; use futures::StreamExt; +use glib::MainContext; use gtk4::prelude::*; use czkawka_core::common_dir_traversal; @@ -13,460 +15,458 @@ use crate::taskbar_progress::tbp_flags::TBPF_INDETERMINATE; #[allow(clippy::too_many_arguments)] pub fn connect_progress_window( gui_data: &GuiData, - mut futures_receiver_duplicate_files: UnboundedReceiver, - mut futures_receiver_empty_files: UnboundedReceiver, - mut futures_receiver_empty_folder: UnboundedReceiver, - mut futures_receiver_big_files: UnboundedReceiver, - mut futures_receiver_same_music: UnboundedReceiver, - mut futures_receiver_similar_images: UnboundedReceiver, - mut futures_receiver_similar_videos: UnboundedReceiver, - mut futures_receiver_temporary: UnboundedReceiver, - mut futures_receiver_invalid_symlinks: UnboundedReceiver, - mut futures_receiver_broken_files: UnboundedReceiver, - mut futures_receiver_bad_extensions: UnboundedReceiver, + futures_receiver_duplicate_files: UnboundedReceiver, + futures_receiver_empty_files: UnboundedReceiver, + futures_receiver_empty_folder: UnboundedReceiver, + futures_receiver_big_files: UnboundedReceiver, + futures_receiver_same_music: UnboundedReceiver, + futures_receiver_similar_images: UnboundedReceiver, + futures_receiver_similar_videos: UnboundedReceiver, + futures_receiver_temporary: UnboundedReceiver, + futures_receiver_invalid_symlinks: UnboundedReceiver, + futures_receiver_broken_files: UnboundedReceiver, + futures_receiver_bad_extensions: UnboundedReceiver, ) { - let main_context = glib::MainContext::default(); + let main_context = MainContext::default(); let _guard = main_context.acquire().unwrap(); - { - // Duplicate Files - let label_stage = gui_data.progress_window.label_stage.clone(); - let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); - let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); - let grid_progress_stages = gui_data.progress_window.grid_progress_stages.clone(); - let taskbar_state = gui_data.taskbar_state.clone(); - let future = async move { - while let Some(item) = futures_receiver_duplicate_files.next().await { - match item.checking_method { - common_dir_traversal::CheckingMethod::Hash => { - label_stage.show(); - match item.current_stage { - // Checking Size - 0 => { - progress_bar_current_stage.hide(); - // progress_bar_all_stages.hide(); - progress_bar_all_stages.set_fraction(0 as f64); - label_stage.set_text(&flg!( - "progress_scanning_size", - generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) - )); - taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); - } - // Hash - first 1KB file - 1 => { - progress_bar_current_stage.show(); - // progress_bar_all_stages.show(); - if item.entries_to_check != 0 { - progress_bar_all_stages.set_fraction((1f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); - taskbar_state.borrow().set_progress_value( - (item.entries_to_check + item.entries_checked) as u64, - item.entries_to_check as u64 * (item.max_stage + 1) as u64, - ); - } else { - progress_bar_all_stages.set_fraction((1f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction(0f64); - taskbar_state.borrow().set_progress_value(1, 1 + item.max_stage as u64); - } - - label_stage.set_text(&flg!( - "progress_analyzed_partial_hash", - generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) - )); - } - // Hash - normal hash - 2 => { - if item.entries_to_check != 0 { - progress_bar_all_stages.set_fraction((2f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); - taskbar_state.borrow().set_progress_value( - (2 * item.entries_to_check + item.entries_checked) as u64, - item.entries_to_check as u64 * (item.max_stage + 1) as u64, - ); - } else { - progress_bar_all_stages.set_fraction((2f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction(0f64); - taskbar_state.borrow().set_progress_value(2, 1 + item.max_stage as u64); - } - - label_stage.set_text(&flg!( - "progress_analyzed_full_hash", - generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) - )); - } - _ => { - panic!("Not available current_stage"); - } - } - } - common_dir_traversal::CheckingMethod::Name => { - label_stage.show(); - grid_progress_stages.hide(); - - label_stage.set_text(&flg!( - "progress_scanning_name", - generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) - )); - taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); - } - common_dir_traversal::CheckingMethod::SizeName => { - label_stage.show(); - grid_progress_stages.hide(); - - label_stage.set_text(&flg!( - "progress_scanning_size_name", - generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) - )); - taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); - } - common_dir_traversal::CheckingMethod::Size => { - label_stage.show(); - grid_progress_stages.hide(); - - label_stage.set_text(&flg!( - "progress_scanning_size", - generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) - )); - taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); - } - common_dir_traversal::CheckingMethod::None => { - panic!(); - } - }; - } - }; - main_context.spawn_local(future); - } - { - // Empty Files - let label_stage = gui_data.progress_window.label_stage.clone(); - let taskbar_state = gui_data.taskbar_state.clone(); - let future = async move { - while let Some(item) = futures_receiver_empty_files.next().await { - label_stage.set_text(&flg!( - "progress_scanning_general_file", - generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) - )); - taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); - } - }; - main_context.spawn_local(future); - } - { - // Empty Folder - let label_stage = gui_data.progress_window.label_stage.clone(); - let taskbar_state = gui_data.taskbar_state.clone(); - let future = async move { - while let Some(item) = futures_receiver_empty_folder.next().await { - label_stage.set_text(&flg!( - "progress_scanning_empty_folders", - generate_translation_hashmap(vec![("folder_number", item.entries_checked.to_string())]) - )); - taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); - } - }; - main_context.spawn_local(future); - } - { - // Big Files - let label_stage = gui_data.progress_window.label_stage.clone(); - let taskbar_state = gui_data.taskbar_state.clone(); - let future = async move { - while let Some(item) = futures_receiver_big_files.next().await { - label_stage.set_text(&flg!( - "progress_scanning_general_file", - generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) - )); - taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); - } - }; - main_context.spawn_local(future); - } - { - // Same Music - let label_stage = gui_data.progress_window.label_stage.clone(); - let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); - let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); - let taskbar_state = gui_data.taskbar_state.clone(); - let future = async move { - while let Some(item) = futures_receiver_same_music.next().await { - match item.current_stage { - 0 => { - progress_bar_current_stage.hide(); - label_stage.set_text(&flg!( - "progress_scanning_general_file", - generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) - )); - taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); - } - 1 => { - progress_bar_current_stage.show(); - if item.entries_to_check != 0 { - progress_bar_all_stages.set_fraction((1f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); - taskbar_state.borrow().set_progress_value( - (item.entries_to_check + item.entries_checked) as u64, - item.entries_to_check as u64 * (item.max_stage + 1) as u64, - ); - } else { - progress_bar_all_stages.set_fraction((1f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction(0f64); - taskbar_state.borrow().set_progress_value(1, (item.max_stage + 1) as u64); - } - label_stage.set_text(&flg!( - "progress_scanning_music_tags", - generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) - )); - } - 2 => { - if item.entries_to_check != 0 { - progress_bar_all_stages.set_fraction((2f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); - taskbar_state.borrow().set_progress_value( - (2 * item.entries_to_check + item.entries_checked) as u64, - item.entries_to_check as u64 * (item.max_stage + 1) as u64, - ); - } else { - progress_bar_all_stages.set_fraction((2f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction(0f64); - taskbar_state.borrow().set_progress_value(2, (item.max_stage + 1) as u64); - } - label_stage.set_text(&flg!( - "progress_scanning_music_tags_end", - generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) - )); - } - _ => { - panic!(); - } - } - } - }; - main_context.spawn_local(future); - } - { - // Similar Images - let label_stage = gui_data.progress_window.label_stage.clone(); - let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); - let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); - let taskbar_state = gui_data.taskbar_state.clone(); - let future = async move { - while let Some(item) = futures_receiver_similar_images.next().await { - match item.current_stage { - 0 => { - progress_bar_current_stage.hide(); - label_stage.set_text(&flg!( - "progress_scanning_general_file", - generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) - )); - taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); - } - 1 => { - progress_bar_current_stage.show(); - if item.entries_to_check != 0 { - progress_bar_all_stages.set_fraction((1f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); - taskbar_state.borrow().set_progress_value( - (item.entries_to_check + item.entries_checked) as u64, - item.entries_to_check as u64 * (item.max_stage + 1) as u64, - ); - } else { - progress_bar_all_stages.set_fraction((item.current_stage as f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction(0f64); - taskbar_state.borrow().set_progress_value(1, (item.max_stage + 1) as u64); - } - label_stage.set_text(&flg!( - "progress_scanning_image", - generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) - )); - } - 2 => { - progress_bar_current_stage.show(); - if item.entries_to_check != 0 { - progress_bar_all_stages.set_fraction((2f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); - taskbar_state.borrow().set_progress_value( - (item.entries_to_check + item.entries_checked) as u64, - item.entries_to_check as u64 * (item.max_stage + 1) as u64, - ); - } else { - progress_bar_all_stages.set_fraction((item.current_stage as f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction(0f64); - taskbar_state.borrow().set_progress_value(2, (item.max_stage + 1) as u64); - } - label_stage.set_text(&flg!( - "progress_comparing_image_hashes", - generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) - )); - } - _ => { - panic!(); - } - } - } - }; - main_context.spawn_local(future); - } - { - // Similar Videos - let label_stage = gui_data.progress_window.label_stage.clone(); - let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); - let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); - let taskbar_state = gui_data.taskbar_state.clone(); - let future = async move { - while let Some(item) = futures_receiver_similar_videos.next().await { - match item.current_stage { - 0 => { - progress_bar_current_stage.hide(); - label_stage.set_text(&flg!( - "progress_scanning_general_file", - generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) - )); - taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); - } - 1 => { - progress_bar_current_stage.show(); - if item.entries_to_check != 0 { - progress_bar_all_stages.set_fraction((1f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); - taskbar_state.borrow().set_progress_value( - (item.entries_to_check + item.entries_checked) as u64, - item.entries_to_check as u64 * (item.max_stage + 1) as u64, - ); - } else { - progress_bar_all_stages.set_fraction((1f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction(0f64); - taskbar_state.borrow().set_progress_value(1, (item.max_stage + 1) as u64); - } - label_stage.set_text(&flg!( - "progress_scanning_video", - generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) - )); - } - _ => { - panic!(); - } - } - } - }; - main_context.spawn_local(future); - } - { - // Temporary - let label_stage = gui_data.progress_window.label_stage.clone(); - let taskbar_state = gui_data.taskbar_state.clone(); - let future = async move { - while let Some(item) = futures_receiver_temporary.next().await { - label_stage.set_text(&flg!( - "progress_scanning_general_file", - generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) - )); - taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); - } - }; - main_context.spawn_local(future); - } - { - // Invalid Symlinks - let label_stage = gui_data.progress_window.label_stage.clone(); - let taskbar_state = gui_data.taskbar_state.clone(); - let future = async move { - while let Some(item) = futures_receiver_invalid_symlinks.next().await { - label_stage.set_text(&flg!( - "progress_scanning_general_file", - generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) - )); - taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); - } - }; - main_context.spawn_local(future); - } - { - // Broken Files - let label_stage = gui_data.progress_window.label_stage.clone(); - let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); - let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); - let taskbar_state = gui_data.taskbar_state.clone(); - let future = async move { - while let Some(item) = futures_receiver_broken_files.next().await { - match item.current_stage { - 0 => { - progress_bar_current_stage.hide(); - label_stage.set_text(&flg!( - "progress_scanning_general_file", - generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) - )); - taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); - } - 1 => { - progress_bar_current_stage.show(); - if item.entries_to_check != 0 { - progress_bar_all_stages.set_fraction((1f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); - taskbar_state.borrow().set_progress_value( - (item.entries_to_check + item.entries_checked) as u64, - item.entries_to_check as u64 * (item.max_stage + 1) as u64, - ); - } else { - progress_bar_all_stages.set_fraction((1f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction(0f64); - taskbar_state.borrow().set_progress_value(1, (item.max_stage + 1) as u64); - } - label_stage.set_text(&flg!( - "progress_scanning_broken_files", - generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) - )); - } - _ => { - panic!(); - } - } - } - }; - main_context.spawn_local(future); - } - { - // Broken Files - let label_stage = gui_data.progress_window.label_stage.clone(); - let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); - let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); - let taskbar_state = gui_data.taskbar_state.clone(); - let future = async move { - while let Some(item) = futures_receiver_bad_extensions.next().await { - match item.current_stage { - 0 => { - progress_bar_current_stage.hide(); - label_stage.set_text(&flg!( - "progress_scanning_general_file", - generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) - )); - taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); - } - 1 => { - progress_bar_current_stage.show(); - if item.entries_to_check != 0 { - progress_bar_all_stages.set_fraction((1f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); - taskbar_state.borrow().set_progress_value( - (item.entries_to_check + item.entries_checked) as u64, - item.entries_to_check as u64 * (item.max_stage + 1) as u64, - ); - } else { - progress_bar_all_stages.set_fraction((1f64) / (item.max_stage + 1) as f64); - progress_bar_current_stage.set_fraction(0f64); - taskbar_state.borrow().set_progress_value(1, (item.max_stage + 1) as u64); - } - label_stage.set_text(&flg!( - "progress_scanning_extension_of_files", - generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) - )); - } - _ => { - panic!(); - } - } - } - }; - main_context.spawn_local(future); - } + process_bar_duplicates(gui_data, &main_context, futures_receiver_duplicate_files); + process_bar_empty_files(gui_data, &main_context, futures_receiver_empty_files); + process_bar_empty_folder(gui_data, &main_context, futures_receiver_empty_folder); + process_bar_big_files(gui_data, &main_context, futures_receiver_big_files); + process_bar_same_music(gui_data, &main_context, futures_receiver_same_music); + process_bar_similar_images(gui_data, &main_context, futures_receiver_similar_images); + process_bar_similar_videos(gui_data, &main_context, futures_receiver_similar_videos); + process_bar_temporary(gui_data, &main_context, futures_receiver_temporary); + process_bar_invalid_symlinks(gui_data, &main_context, futures_receiver_invalid_symlinks); + process_bar_broken_files(gui_data, &main_context, futures_receiver_broken_files); + process_bar_bad_extensions(gui_data, &main_context, futures_receiver_bad_extensions); +} +fn process_bar_empty_files(gui_data: &GuiData, main_context: &MainContext, mut futures_receiver_empty_files: UnboundedReceiver) { + let label_stage = gui_data.progress_window.label_stage.clone(); + let taskbar_state = gui_data.taskbar_state.clone(); + let future = async move { + while let Some(item) = futures_receiver_empty_files.next().await { + label_stage.set_text(&flg!( + "progress_scanning_general_file", + generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) + )); + taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); + } + }; + main_context.spawn_local(future); +} +fn process_bar_empty_folder(gui_data: &GuiData, main_context: &MainContext, mut futures_receiver_empty_folder: UnboundedReceiver) { + let label_stage = gui_data.progress_window.label_stage.clone(); + let taskbar_state = gui_data.taskbar_state.clone(); + let future = async move { + while let Some(item) = futures_receiver_empty_folder.next().await { + label_stage.set_text(&flg!( + "progress_scanning_empty_folders", + generate_translation_hashmap(vec![("folder_number", item.entries_checked.to_string())]) + )); + taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); + } + }; + main_context.spawn_local(future); +} +fn process_bar_big_files(gui_data: &GuiData, main_context: &MainContext, mut futures_receiver_big_files: UnboundedReceiver) { + let label_stage = gui_data.progress_window.label_stage.clone(); + let taskbar_state = gui_data.taskbar_state.clone(); + let future = async move { + while let Some(item) = futures_receiver_big_files.next().await { + label_stage.set_text(&flg!( + "progress_scanning_general_file", + generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) + )); + taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); + } + }; + main_context.spawn_local(future); +} +fn process_bar_same_music(gui_data: &GuiData, main_context: &MainContext, mut futures_receiver_same_music: UnboundedReceiver) { + let label_stage = gui_data.progress_window.label_stage.clone(); + let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); + let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); + let taskbar_state = gui_data.taskbar_state.clone(); + let future = async move { + while let Some(item) = futures_receiver_same_music.next().await { + match item.current_stage { + 0 => { + progress_bar_current_stage.hide(); + label_stage.set_text(&flg!( + "progress_scanning_general_file", + generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) + )); + taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); + } + 1 => { + progress_bar_current_stage.show(); + if item.entries_to_check != 0 { + progress_bar_all_stages.set_fraction((1f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); + taskbar_state.borrow().set_progress_value( + (item.entries_to_check + item.entries_checked) as u64, + item.entries_to_check as u64 * (item.max_stage + 1) as u64, + ); + } else { + progress_bar_all_stages.set_fraction((1f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction(0f64); + taskbar_state.borrow().set_progress_value(1, (item.max_stage + 1) as u64); + } + label_stage.set_text(&flg!( + "progress_scanning_music_tags", + generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) + )); + } + 2 => { + if item.entries_to_check != 0 { + progress_bar_all_stages.set_fraction((2f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); + taskbar_state.borrow().set_progress_value( + (2 * item.entries_to_check + item.entries_checked) as u64, + item.entries_to_check as u64 * (item.max_stage + 1) as u64, + ); + } else { + progress_bar_all_stages.set_fraction((2f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction(0f64); + taskbar_state.borrow().set_progress_value(2, (item.max_stage + 1) as u64); + } + label_stage.set_text(&flg!( + "progress_scanning_music_tags_end", + generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) + )); + } + _ => { + panic!(); + } + } + } + }; + main_context.spawn_local(future); +} +fn process_bar_similar_images(gui_data: &GuiData, main_context: &MainContext, mut futures_receiver_similar_images: UnboundedReceiver) { + let label_stage = gui_data.progress_window.label_stage.clone(); + let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); + let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); + let taskbar_state = gui_data.taskbar_state.clone(); + let future = async move { + while let Some(item) = futures_receiver_similar_images.next().await { + match item.current_stage { + 0 => { + progress_bar_current_stage.hide(); + label_stage.set_text(&flg!( + "progress_scanning_general_file", + generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) + )); + taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); + } + 1 => { + progress_bar_current_stage.show(); + if item.entries_to_check != 0 { + progress_bar_all_stages.set_fraction((1f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); + taskbar_state.borrow().set_progress_value( + (item.entries_to_check + item.entries_checked) as u64, + item.entries_to_check as u64 * (item.max_stage + 1) as u64, + ); + } else { + progress_bar_all_stages.set_fraction((item.current_stage as f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction(0f64); + taskbar_state.borrow().set_progress_value(1, (item.max_stage + 1) as u64); + } + label_stage.set_text(&flg!( + "progress_scanning_image", + generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) + )); + } + 2 => { + progress_bar_current_stage.show(); + if item.entries_to_check != 0 { + progress_bar_all_stages.set_fraction((2f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); + taskbar_state.borrow().set_progress_value( + (item.entries_to_check + item.entries_checked) as u64, + item.entries_to_check as u64 * (item.max_stage + 1) as u64, + ); + } else { + progress_bar_all_stages.set_fraction((item.current_stage as f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction(0f64); + taskbar_state.borrow().set_progress_value(2, (item.max_stage + 1) as u64); + } + label_stage.set_text(&flg!( + "progress_comparing_image_hashes", + generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) + )); + } + _ => { + panic!(); + } + } + } + }; + main_context.spawn_local(future); +} +fn process_bar_similar_videos(gui_data: &GuiData, main_context: &MainContext, mut futures_receiver_similar_videos: UnboundedReceiver) { + let label_stage = gui_data.progress_window.label_stage.clone(); + let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); + let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); + let taskbar_state = gui_data.taskbar_state.clone(); + let future = async move { + while let Some(item) = futures_receiver_similar_videos.next().await { + match item.current_stage { + 0 => { + progress_bar_current_stage.hide(); + label_stage.set_text(&flg!( + "progress_scanning_general_file", + generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) + )); + taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); + } + 1 => { + progress_bar_current_stage.show(); + if item.entries_to_check != 0 { + progress_bar_all_stages.set_fraction((1f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); + taskbar_state.borrow().set_progress_value( + (item.entries_to_check + item.entries_checked) as u64, + item.entries_to_check as u64 * (item.max_stage + 1) as u64, + ); + } else { + progress_bar_all_stages.set_fraction((1f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction(0f64); + taskbar_state.borrow().set_progress_value(1, (item.max_stage + 1) as u64); + } + label_stage.set_text(&flg!( + "progress_scanning_video", + generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) + )); + } + _ => { + panic!(); + } + } + } + }; + main_context.spawn_local(future); +} +fn process_bar_temporary(gui_data: &GuiData, main_context: &MainContext, mut futures_receiver_temporary: UnboundedReceiver) { + let label_stage = gui_data.progress_window.label_stage.clone(); + let taskbar_state = gui_data.taskbar_state.clone(); + let future = async move { + while let Some(item) = futures_receiver_temporary.next().await { + label_stage.set_text(&flg!( + "progress_scanning_general_file", + generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) + )); + taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); + } + }; + main_context.spawn_local(future); +} +fn process_bar_invalid_symlinks(gui_data: &GuiData, main_context: &MainContext, mut futures_receiver_invalid_symlinks: UnboundedReceiver) { + let label_stage = gui_data.progress_window.label_stage.clone(); + let taskbar_state = gui_data.taskbar_state.clone(); + let future = async move { + while let Some(item) = futures_receiver_invalid_symlinks.next().await { + label_stage.set_text(&flg!( + "progress_scanning_general_file", + generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) + )); + taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); + } + }; + main_context.spawn_local(future); +} +fn process_bar_broken_files(gui_data: &GuiData, main_context: &MainContext, mut futures_receiver_broken_files: UnboundedReceiver) { + let label_stage = gui_data.progress_window.label_stage.clone(); + let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); + let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); + let taskbar_state = gui_data.taskbar_state.clone(); + let future = async move { + while let Some(item) = futures_receiver_broken_files.next().await { + match item.current_stage { + 0 => { + progress_bar_current_stage.hide(); + label_stage.set_text(&flg!( + "progress_scanning_general_file", + generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) + )); + taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); + } + 1 => { + progress_bar_current_stage.show(); + if item.entries_to_check != 0 { + progress_bar_all_stages.set_fraction((1f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); + taskbar_state.borrow().set_progress_value( + (item.entries_to_check + item.entries_checked) as u64, + item.entries_to_check as u64 * (item.max_stage + 1) as u64, + ); + } else { + progress_bar_all_stages.set_fraction((1f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction(0f64); + taskbar_state.borrow().set_progress_value(1, (item.max_stage + 1) as u64); + } + label_stage.set_text(&flg!( + "progress_scanning_broken_files", + generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) + )); + } + _ => { + panic!(); + } + } + } + }; + main_context.spawn_local(future); +} +fn process_bar_bad_extensions(gui_data: &GuiData, main_context: &MainContext, mut futures_receiver_bad_extensions: UnboundedReceiver) { + let label_stage = gui_data.progress_window.label_stage.clone(); + let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); + let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); + let taskbar_state = gui_data.taskbar_state.clone(); + let future = async move { + while let Some(item) = futures_receiver_bad_extensions.next().await { + match item.current_stage { + 0 => { + progress_bar_current_stage.hide(); + label_stage.set_text(&flg!( + "progress_scanning_general_file", + generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) + )); + taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); + } + 1 => { + progress_bar_current_stage.show(); + if item.entries_to_check != 0 { + progress_bar_all_stages.set_fraction((1f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); + taskbar_state.borrow().set_progress_value( + (item.entries_to_check + item.entries_checked) as u64, + item.entries_to_check as u64 * (item.max_stage + 1) as u64, + ); + } else { + progress_bar_all_stages.set_fraction((1f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction(0f64); + taskbar_state.borrow().set_progress_value(1, (item.max_stage + 1) as u64); + } + label_stage.set_text(&flg!( + "progress_scanning_extension_of_files", + generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) + )); + } + _ => { + panic!(); + } + } + } + }; + main_context.spawn_local(future); +} +fn process_bar_duplicates(gui_data: &GuiData, main_context: &MainContext, mut futures_receiver_duplicate_files: UnboundedReceiver) { + let label_stage = gui_data.progress_window.label_stage.clone(); + let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); + let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); + let grid_progress_stages = gui_data.progress_window.grid_progress_stages.clone(); + let taskbar_state = gui_data.taskbar_state.clone(); + let future = async move { + while let Some(item) = futures_receiver_duplicate_files.next().await { + match item.checking_method { + CheckingMethod::Hash => { + label_stage.show(); + match item.current_stage { + // Checking Size + 0 => { + progress_bar_current_stage.hide(); + // progress_bar_all_stages.hide(); + progress_bar_all_stages.set_fraction(0 as f64); + label_stage.set_text(&flg!( + "progress_scanning_size", + generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) + )); + taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); + } + // Hash - first 1KB file + 1 => { + progress_bar_current_stage.show(); + // progress_bar_all_stages.show(); + if item.entries_to_check != 0 { + progress_bar_all_stages.set_fraction((1f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); + taskbar_state.borrow().set_progress_value( + (item.entries_to_check + item.entries_checked) as u64, + item.entries_to_check as u64 * (item.max_stage + 1) as u64, + ); + } else { + progress_bar_all_stages.set_fraction((1f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction(0f64); + taskbar_state.borrow().set_progress_value(1, 1 + item.max_stage as u64); + } + + label_stage.set_text(&flg!( + "progress_analyzed_partial_hash", + generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) + )); + } + // Hash - normal hash + 2 => { + if item.entries_to_check != 0 { + progress_bar_all_stages.set_fraction((2f64 + (item.entries_checked) as f64 / item.entries_to_check as f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction((item.entries_checked) as f64 / item.entries_to_check as f64); + taskbar_state.borrow().set_progress_value( + (2 * item.entries_to_check + item.entries_checked) as u64, + item.entries_to_check as u64 * (item.max_stage + 1) as u64, + ); + } else { + progress_bar_all_stages.set_fraction((2f64) / (item.max_stage + 1) as f64); + progress_bar_current_stage.set_fraction(0f64); + taskbar_state.borrow().set_progress_value(2, 1 + item.max_stage as u64); + } + + label_stage.set_text(&flg!( + "progress_analyzed_full_hash", + generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) + )); + } + _ => { + panic!("Not available current_stage"); + } + } + } + CheckingMethod::Name => { + label_stage.show(); + grid_progress_stages.hide(); + + label_stage.set_text(&flg!( + "progress_scanning_name", + generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) + )); + taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); + } + CheckingMethod::SizeName => { + label_stage.show(); + grid_progress_stages.hide(); + + label_stage.set_text(&flg!( + "progress_scanning_size_name", + generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) + )); + taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); + } + CheckingMethod::Size => { + label_stage.show(); + grid_progress_stages.hide(); + + label_stage.set_text(&flg!( + "progress_scanning_size", + generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) + )); + taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); + } + _ => panic!(), + }; + } + }; + main_context.spawn_local(future); } diff --git a/czkawka_gui/src/gui_structs/gui_main_notebook.rs b/czkawka_gui/src/gui_structs/gui_main_notebook.rs index 11484c0..77796f3 100644 --- a/czkawka_gui/src/gui_structs/gui_main_notebook.rs +++ b/czkawka_gui/src/gui_structs/gui_main_notebook.rs @@ -550,7 +550,7 @@ impl GuiMainNotebook { CheckingMethod::Size => flg!("duplicate_mode_size_combo_box"), CheckingMethod::Name => flg!("duplicate_mode_name_combo_box"), CheckingMethod::SizeName => flg!("duplicate_mode_size_name_combo_box"), - CheckingMethod::None => panic!(), + _ => panic!(), }; self.combo_box_duplicate_check_method.append_text(&text); }