From 85da7f3febe284161ea4d68e234d25bb5994f411 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= Date: Fri, 24 Nov 2023 20:13:08 +0100 Subject: [PATCH] Bigger stack size --- czkawka_core/src/common.rs | 10 +- .../connect_things/connect_button_search.rs | 368 ++++++++++-------- krokiet/src/connect_scan.rs | 227 +++++------ krokiet/ui/settings_list.slint | 66 +++- 4 files changed, 376 insertions(+), 295 deletions(-) diff --git a/czkawka_core/src/common.rs b/czkawka_core/src/common.rs index cb00661..8a4acd2 100644 --- a/czkawka_core/src/common.rs +++ b/czkawka_core/src/common.rs @@ -32,6 +32,8 @@ use crate::duplicate::make_hard_link; use crate::CZKAWKA_VERSION; static NUMBER_OF_THREADS: state::InitCell = state::InitCell::new(); +pub const DEFAULT_THREAD_SIZE: usize = 8 * 1024 * 1024; // 8 MB +pub const DEFAULT_WORKER_THREAD_SIZE: usize = 4 * 1024 * 1024; // 4 MB pub fn get_number_of_threads() -> usize { let data = NUMBER_OF_THREADS.get(); @@ -62,7 +64,6 @@ pub fn print_version_mode() { Ok(meta) => meta.semver.to_string(), Err(_) => "".to_string(), }; - let info = os_info::get(); let debug_release = if cfg!(debug_assertions) { "debug" } else { "release" }; let processors = match thread::available_parallelism() { @@ -70,6 +71,7 @@ pub fn print_version_mode() { Err(_) => 1, }; + let info = os_info::get(); info!( "App version: {CZKAWKA_VERSION}, {debug_release} mode, rust {rust_version}, os {} {} [{} {}], {processors} cpu/threads", info.os_type(), @@ -93,7 +95,11 @@ pub fn get_default_number_of_threads() -> usize { pub fn set_number_of_threads(thread_number: usize) { NUMBER_OF_THREADS.set(thread_number); - rayon::ThreadPoolBuilder::new().num_threads(get_number_of_threads()).build_global().unwrap(); + rayon::ThreadPoolBuilder::new() + .num_threads(get_number_of_threads()) + .stack_size(DEFAULT_WORKER_THREAD_SIZE) + .build_global() + .unwrap(); } pub const RAW_IMAGE_EXTENSIONS: &[&str] = &[ diff --git a/czkawka_gui/src/connect_things/connect_button_search.rs b/czkawka_gui/src/connect_things/connect_button_search.rs index 077e3d8..603f43c 100644 --- a/czkawka_gui/src/connect_things/connect_button_search.rs +++ b/czkawka_gui/src/connect_things/connect_button_search.rs @@ -12,6 +12,7 @@ use gtk4::Grid; use czkawka_core::bad_extensions::BadExtensions; use czkawka_core::big_file::BigFile; use czkawka_core::broken_files::{BrokenFiles, CheckedTypes}; +use czkawka_core::common::DEFAULT_THREAD_SIZE; use czkawka_core::common_dir_traversal::{CheckingMethod, ProgressData}; use czkawka_core::common_tool::CommonData; use czkawka_core::duplicate::DuplicateFinder; @@ -315,30 +316,33 @@ fn duplicate_search( let delete_outdated_cache = check_button_settings_duplicates_delete_outdated_cache.is_active(); // Find duplicates - thread::spawn(move || { - let mut df = DuplicateFinder::new(); - df.set_included_directory(loaded_common_items.included_directories); - df.set_excluded_directory(loaded_common_items.excluded_directories); - df.set_reference_directory(loaded_common_items.reference_directories); - df.set_recursive_search(loaded_common_items.recursive_search); - df.set_excluded_items(loaded_common_items.excluded_items); - df.set_allowed_extensions(loaded_common_items.allowed_extensions); - df.set_minimal_file_size(loaded_common_items.minimal_file_size); - df.set_maximal_file_size(loaded_common_items.maximal_file_size); - df.set_minimal_cache_file_size(loaded_common_items.minimal_cache_file_size); - df.set_minimal_prehash_cache_file_size(minimal_prehash_cache_file_size); - df.set_check_method(check_method); - df.set_hash_type(hash_type); - df.set_save_also_as_json(loaded_common_items.save_also_as_json); - df.set_ignore_hard_links(loaded_common_items.hide_hard_links); - df.set_use_cache(loaded_common_items.use_cache); - df.set_use_prehash_cache(use_prehash_cache); - df.set_delete_outdated_cache(delete_outdated_cache); - df.set_case_sensitive_name_comparison(case_sensitive_name_comparison); - df.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); - df.find_duplicates(Some(&stop_receiver), Some(&progress_data_sender)); - glib_stop_sender.send(Message::Duplicates(df)).unwrap(); - }); + thread::Builder::new() + .stack_size(DEFAULT_THREAD_SIZE) + .spawn(move || { + let mut df = DuplicateFinder::new(); + df.set_included_directory(loaded_common_items.included_directories); + df.set_excluded_directory(loaded_common_items.excluded_directories); + df.set_reference_directory(loaded_common_items.reference_directories); + df.set_recursive_search(loaded_common_items.recursive_search); + df.set_excluded_items(loaded_common_items.excluded_items); + df.set_allowed_extensions(loaded_common_items.allowed_extensions); + df.set_minimal_file_size(loaded_common_items.minimal_file_size); + df.set_maximal_file_size(loaded_common_items.maximal_file_size); + df.set_minimal_cache_file_size(loaded_common_items.minimal_cache_file_size); + df.set_minimal_prehash_cache_file_size(minimal_prehash_cache_file_size); + df.set_check_method(check_method); + df.set_hash_type(hash_type); + df.set_save_also_as_json(loaded_common_items.save_also_as_json); + df.set_ignore_hard_links(loaded_common_items.hide_hard_links); + df.set_use_cache(loaded_common_items.use_cache); + df.set_use_prehash_cache(use_prehash_cache); + df.set_delete_outdated_cache(delete_outdated_cache); + df.set_case_sensitive_name_comparison(case_sensitive_name_comparison); + df.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); + df.find_duplicates(Some(&stop_receiver), Some(&progress_data_sender)); + glib_stop_sender.send(Message::Duplicates(df)).unwrap(); + }) + .unwrap(); } fn empty_files_search( @@ -354,18 +358,21 @@ fn empty_files_search( let tree_view_empty_files_finder = gui_data.main_notebook.tree_view_empty_files_finder.clone(); clean_tree_view(&tree_view_empty_files_finder); // Find empty files - thread::spawn(move || { - let mut vf = EmptyFiles::new(); + thread::Builder::new() + .stack_size(DEFAULT_THREAD_SIZE) + .spawn(move || { + let mut vf = EmptyFiles::new(); - vf.set_included_directory(loaded_common_items.included_directories); - vf.set_excluded_directory(loaded_common_items.excluded_directories); - vf.set_recursive_search(loaded_common_items.recursive_search); - vf.set_excluded_items(loaded_common_items.excluded_items); - vf.set_allowed_extensions(loaded_common_items.allowed_extensions); - vf.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); - vf.find_empty_files(Some(&stop_receiver), Some(&progress_data_sender)); - glib_stop_sender.send(Message::EmptyFiles(vf)).unwrap(); - }); + vf.set_included_directory(loaded_common_items.included_directories); + vf.set_excluded_directory(loaded_common_items.excluded_directories); + vf.set_recursive_search(loaded_common_items.recursive_search); + vf.set_excluded_items(loaded_common_items.excluded_items); + vf.set_allowed_extensions(loaded_common_items.allowed_extensions); + vf.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); + vf.find_empty_files(Some(&stop_receiver), Some(&progress_data_sender)); + glib_stop_sender.send(Message::EmptyFiles(vf)).unwrap(); + }) + .unwrap(); } fn empty_directories_search( @@ -381,15 +388,18 @@ fn empty_directories_search( let tree_view_empty_folder_finder = gui_data.main_notebook.tree_view_empty_folder_finder.clone(); clean_tree_view(&tree_view_empty_folder_finder); - thread::spawn(move || { - let mut ef = EmptyFolder::new(); - ef.set_included_directory(loaded_common_items.included_directories); - ef.set_excluded_directory(loaded_common_items.excluded_directories); - ef.set_excluded_items(loaded_common_items.excluded_items); - ef.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); - ef.find_empty_folders(Some(&stop_receiver), Some(&progress_data_sender)); - glib_stop_sender.send(Message::EmptyFolders(ef)).unwrap(); - }); + thread::Builder::new() + .stack_size(DEFAULT_THREAD_SIZE) + .spawn(move || { + let mut ef = EmptyFolder::new(); + ef.set_included_directory(loaded_common_items.included_directories); + ef.set_excluded_directory(loaded_common_items.excluded_directories); + ef.set_excluded_items(loaded_common_items.excluded_items); + ef.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); + ef.find_empty_folders(Some(&stop_receiver), Some(&progress_data_sender)); + glib_stop_sender.send(Message::EmptyFolders(ef)).unwrap(); + }) + .unwrap(); } fn big_files_search( @@ -412,20 +422,23 @@ fn big_files_search( let numbers_of_files_to_check = entry_big_files_number.text().as_str().parse::().unwrap_or(50); - thread::spawn(move || { - let mut bf = BigFile::new(); + thread::Builder::new() + .stack_size(DEFAULT_THREAD_SIZE) + .spawn(move || { + let mut bf = BigFile::new(); - bf.set_included_directory(loaded_common_items.included_directories); - bf.set_excluded_directory(loaded_common_items.excluded_directories); - bf.set_recursive_search(loaded_common_items.recursive_search); - bf.set_excluded_items(loaded_common_items.excluded_items); - bf.set_allowed_extensions(loaded_common_items.allowed_extensions); - bf.set_number_of_files_to_check(numbers_of_files_to_check); - bf.set_search_mode(big_files_mode); - bf.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); - bf.find_big_files(Some(&stop_receiver), Some(&progress_data_sender)); - glib_stop_sender.send(Message::BigFiles(bf)).unwrap(); - }); + bf.set_included_directory(loaded_common_items.included_directories); + bf.set_excluded_directory(loaded_common_items.excluded_directories); + bf.set_recursive_search(loaded_common_items.recursive_search); + bf.set_excluded_items(loaded_common_items.excluded_items); + bf.set_allowed_extensions(loaded_common_items.allowed_extensions); + bf.set_number_of_files_to_check(numbers_of_files_to_check); + bf.set_search_mode(big_files_mode); + bf.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); + bf.find_big_files(Some(&stop_receiver), Some(&progress_data_sender)); + glib_stop_sender.send(Message::BigFiles(bf)).unwrap(); + }) + .unwrap(); } fn temporary_files_search( @@ -441,17 +454,20 @@ fn temporary_files_search( let tree_view_temporary_files_finder = gui_data.main_notebook.tree_view_temporary_files_finder.clone(); clean_tree_view(&tree_view_temporary_files_finder); - thread::spawn(move || { - let mut tf = Temporary::new(); + thread::Builder::new() + .stack_size(DEFAULT_THREAD_SIZE) + .spawn(move || { + let mut tf = Temporary::new(); - tf.set_included_directory(loaded_common_items.included_directories); - tf.set_excluded_directory(loaded_common_items.excluded_directories); - tf.set_recursive_search(loaded_common_items.recursive_search); - tf.set_excluded_items(loaded_common_items.excluded_items); - tf.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); - tf.find_temporary_files(Some(&stop_receiver), Some(&progress_data_sender)); - glib_stop_sender.send(Message::Temporary(tf)).unwrap(); - }); + tf.set_included_directory(loaded_common_items.included_directories); + tf.set_excluded_directory(loaded_common_items.excluded_directories); + tf.set_recursive_search(loaded_common_items.recursive_search); + tf.set_excluded_items(loaded_common_items.excluded_items); + tf.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); + tf.find_temporary_files(Some(&stop_receiver), Some(&progress_data_sender)); + glib_stop_sender.send(Message::Temporary(tf)).unwrap(); + }) + .unwrap(); } fn same_music_search( @@ -509,28 +525,31 @@ fn same_music_search( let minimum_segment_duration = scale_seconds_same_music.value() as f32; if music_similarity != MusicSimilarity::NONE || check_method == CheckingMethod::AudioContent { - thread::spawn(move || { - let mut mf = SameMusic::new(); + thread::Builder::new() + .stack_size(DEFAULT_THREAD_SIZE) + .spawn(move || { + let mut mf = SameMusic::new(); - mf.set_included_directory(loaded_common_items.included_directories); - mf.set_excluded_directory(loaded_common_items.excluded_directories); - mf.set_reference_directory(loaded_common_items.reference_directories); - mf.set_excluded_items(loaded_common_items.excluded_items); - mf.set_use_cache(loaded_common_items.use_cache); - mf.set_minimal_file_size(loaded_common_items.minimal_file_size); - mf.set_maximal_file_size(loaded_common_items.maximal_file_size); - mf.set_allowed_extensions(loaded_common_items.allowed_extensions); - mf.set_recursive_search(loaded_common_items.recursive_search); - mf.set_music_similarity(music_similarity); - mf.set_maximum_difference(maximum_difference); - mf.set_minimum_segment_duration(minimum_segment_duration); - mf.set_check_type(check_method); - mf.set_approximate_comparison(approximate_comparison); - mf.set_save_also_as_json(loaded_common_items.save_also_as_json); - mf.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); - mf.find_same_music(Some(&stop_receiver), Some(&progress_data_sender)); - glib_stop_sender.send(Message::SameMusic(mf)).unwrap(); - }); + mf.set_included_directory(loaded_common_items.included_directories); + mf.set_excluded_directory(loaded_common_items.excluded_directories); + mf.set_reference_directory(loaded_common_items.reference_directories); + mf.set_excluded_items(loaded_common_items.excluded_items); + mf.set_use_cache(loaded_common_items.use_cache); + mf.set_minimal_file_size(loaded_common_items.minimal_file_size); + mf.set_maximal_file_size(loaded_common_items.maximal_file_size); + mf.set_allowed_extensions(loaded_common_items.allowed_extensions); + mf.set_recursive_search(loaded_common_items.recursive_search); + mf.set_music_similarity(music_similarity); + mf.set_maximum_difference(maximum_difference); + mf.set_minimum_segment_duration(minimum_segment_duration); + mf.set_check_type(check_method); + mf.set_approximate_comparison(approximate_comparison); + mf.set_save_also_as_json(loaded_common_items.save_also_as_json); + mf.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); + mf.find_same_music(Some(&stop_receiver), Some(&progress_data_sender)); + glib_stop_sender.send(Message::SameMusic(mf)).unwrap(); + }) + .unwrap(); } else { let shared_buttons = gui_data.shared_buttons.clone(); let buttons_array = gui_data.bottom_buttons.buttons_array.clone(); @@ -591,21 +610,24 @@ fn broken_files_search( } if checked_types != CheckedTypes::NONE { - thread::spawn(move || { - let mut br = BrokenFiles::new(); + thread::Builder::new() + .stack_size(DEFAULT_THREAD_SIZE) + .spawn(move || { + let mut br = BrokenFiles::new(); - br.set_included_directory(loaded_common_items.included_directories); - br.set_excluded_directory(loaded_common_items.excluded_directories); - br.set_recursive_search(loaded_common_items.recursive_search); - br.set_excluded_items(loaded_common_items.excluded_items); - br.set_use_cache(loaded_common_items.use_cache); - br.set_allowed_extensions(loaded_common_items.allowed_extensions); - br.set_save_also_as_json(loaded_common_items.save_also_as_json); - br.set_checked_types(checked_types); - br.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); - br.find_broken_files(Some(&stop_receiver), Some(&progress_data_sender)); - glib_stop_sender.send(Message::BrokenFiles(br)).unwrap(); - }); + br.set_included_directory(loaded_common_items.included_directories); + br.set_excluded_directory(loaded_common_items.excluded_directories); + br.set_recursive_search(loaded_common_items.recursive_search); + br.set_excluded_items(loaded_common_items.excluded_items); + br.set_use_cache(loaded_common_items.use_cache); + br.set_allowed_extensions(loaded_common_items.allowed_extensions); + br.set_save_also_as_json(loaded_common_items.save_also_as_json); + br.set_checked_types(checked_types); + br.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); + br.find_broken_files(Some(&stop_receiver), Some(&progress_data_sender)); + glib_stop_sender.send(Message::BrokenFiles(br)).unwrap(); + }) + .unwrap(); } else { let shared_buttons = gui_data.shared_buttons.clone(); let buttons_array = gui_data.bottom_buttons.buttons_array.clone(); @@ -668,29 +690,32 @@ fn similar_image_search( let delete_outdated_cache = check_button_settings_similar_images_delete_outdated_cache.is_active(); - thread::spawn(move || { - let mut sf = SimilarImages::new(); + thread::Builder::new() + .stack_size(DEFAULT_THREAD_SIZE) + .spawn(move || { + let mut sf = SimilarImages::new(); - sf.set_included_directory(loaded_common_items.included_directories); - sf.set_excluded_directory(loaded_common_items.excluded_directories); - sf.set_reference_directory(loaded_common_items.reference_directories); - sf.set_recursive_search(loaded_common_items.recursive_search); - sf.set_excluded_items(loaded_common_items.excluded_items); - sf.set_minimal_file_size(loaded_common_items.minimal_file_size); - sf.set_maximal_file_size(loaded_common_items.maximal_file_size); - sf.set_similarity(similarity); - sf.set_use_cache(loaded_common_items.use_cache); - sf.set_hash_alg(hash_alg); - sf.set_hash_size(hash_size); - sf.set_image_filter(image_filter); - sf.set_allowed_extensions(loaded_common_items.allowed_extensions); - sf.set_delete_outdated_cache(delete_outdated_cache); - sf.set_exclude_images_with_same_size(ignore_same_size); - sf.set_save_also_as_json(loaded_common_items.save_also_as_json); - sf.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); - sf.find_similar_images(Some(&stop_receiver), Some(&progress_data_sender)); - glib_stop_sender.send(Message::SimilarImages(sf)).unwrap(); - }); + sf.set_included_directory(loaded_common_items.included_directories); + sf.set_excluded_directory(loaded_common_items.excluded_directories); + sf.set_reference_directory(loaded_common_items.reference_directories); + sf.set_recursive_search(loaded_common_items.recursive_search); + sf.set_excluded_items(loaded_common_items.excluded_items); + sf.set_minimal_file_size(loaded_common_items.minimal_file_size); + sf.set_maximal_file_size(loaded_common_items.maximal_file_size); + sf.set_similarity(similarity); + sf.set_use_cache(loaded_common_items.use_cache); + sf.set_hash_alg(hash_alg); + sf.set_hash_size(hash_size); + sf.set_image_filter(image_filter); + sf.set_allowed_extensions(loaded_common_items.allowed_extensions); + sf.set_delete_outdated_cache(delete_outdated_cache); + sf.set_exclude_images_with_same_size(ignore_same_size); + sf.set_save_also_as_json(loaded_common_items.save_also_as_json); + sf.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); + sf.find_similar_images(Some(&stop_receiver), Some(&progress_data_sender)); + glib_stop_sender.send(Message::SimilarImages(sf)).unwrap(); + }) + .unwrap(); } fn similar_video_search( @@ -715,26 +740,29 @@ fn similar_video_search( let ignore_same_size = check_button_video_ignore_same_size.is_active(); - thread::spawn(move || { - let mut sf = SimilarVideos::new(); + thread::Builder::new() + .stack_size(DEFAULT_THREAD_SIZE) + .spawn(move || { + let mut sf = SimilarVideos::new(); - sf.set_included_directory(loaded_common_items.included_directories); - sf.set_excluded_directory(loaded_common_items.excluded_directories); - sf.set_reference_directory(loaded_common_items.reference_directories); - sf.set_recursive_search(loaded_common_items.recursive_search); - sf.set_excluded_items(loaded_common_items.excluded_items); - sf.set_minimal_file_size(loaded_common_items.minimal_file_size); - sf.set_maximal_file_size(loaded_common_items.maximal_file_size); - sf.set_allowed_extensions(loaded_common_items.allowed_extensions); - sf.set_use_cache(loaded_common_items.use_cache); - sf.set_tolerance(tolerance); - sf.set_delete_outdated_cache(delete_outdated_cache); - sf.set_exclude_videos_with_same_size(ignore_same_size); - sf.set_save_also_as_json(loaded_common_items.save_also_as_json); - sf.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); - sf.find_similar_videos(Some(&stop_receiver), Some(&progress_data_sender)); - glib_stop_sender.send(Message::SimilarVideos(sf)).unwrap(); - }); + sf.set_included_directory(loaded_common_items.included_directories); + sf.set_excluded_directory(loaded_common_items.excluded_directories); + sf.set_reference_directory(loaded_common_items.reference_directories); + sf.set_recursive_search(loaded_common_items.recursive_search); + sf.set_excluded_items(loaded_common_items.excluded_items); + sf.set_minimal_file_size(loaded_common_items.minimal_file_size); + sf.set_maximal_file_size(loaded_common_items.maximal_file_size); + sf.set_allowed_extensions(loaded_common_items.allowed_extensions); + sf.set_use_cache(loaded_common_items.use_cache); + sf.set_tolerance(tolerance); + sf.set_delete_outdated_cache(delete_outdated_cache); + sf.set_exclude_videos_with_same_size(ignore_same_size); + sf.set_save_also_as_json(loaded_common_items.save_also_as_json); + sf.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); + sf.find_similar_videos(Some(&stop_receiver), Some(&progress_data_sender)); + glib_stop_sender.send(Message::SimilarVideos(sf)).unwrap(); + }) + .unwrap(); } fn bad_symlinks_search( @@ -750,18 +778,21 @@ fn bad_symlinks_search( let tree_view_invalid_symlinks = gui_data.main_notebook.tree_view_invalid_symlinks.clone(); clean_tree_view(&tree_view_invalid_symlinks); - thread::spawn(move || { - let mut isf = InvalidSymlinks::new(); + thread::Builder::new() + .stack_size(DEFAULT_THREAD_SIZE) + .spawn(move || { + let mut isf = InvalidSymlinks::new(); - isf.set_included_directory(loaded_common_items.included_directories); - isf.set_excluded_directory(loaded_common_items.excluded_directories); - isf.set_recursive_search(loaded_common_items.recursive_search); - isf.set_excluded_items(loaded_common_items.excluded_items); - isf.set_allowed_extensions(loaded_common_items.allowed_extensions); - isf.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); - isf.find_invalid_links(Some(&stop_receiver), Some(&progress_data_sender)); - glib_stop_sender.send(Message::InvalidSymlinks(isf)).unwrap(); - }); + isf.set_included_directory(loaded_common_items.included_directories); + isf.set_excluded_directory(loaded_common_items.excluded_directories); + isf.set_recursive_search(loaded_common_items.recursive_search); + isf.set_excluded_items(loaded_common_items.excluded_items); + isf.set_allowed_extensions(loaded_common_items.allowed_extensions); + isf.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); + isf.find_invalid_links(Some(&stop_receiver), Some(&progress_data_sender)); + glib_stop_sender.send(Message::InvalidSymlinks(isf)).unwrap(); + }) + .unwrap(); } fn bad_extensions_search( @@ -777,20 +808,23 @@ fn bad_extensions_search( let tree_view_bad_extensions = gui_data.main_notebook.tree_view_bad_extensions.clone(); clean_tree_view(&tree_view_bad_extensions); - thread::spawn(move || { - let mut be = BadExtensions::new(); + thread::Builder::new() + .stack_size(DEFAULT_THREAD_SIZE) + .spawn(move || { + let mut be = BadExtensions::new(); - be.set_included_directory(loaded_common_items.included_directories); - be.set_excluded_directory(loaded_common_items.excluded_directories); - be.set_excluded_items(loaded_common_items.excluded_items); - be.set_minimal_file_size(loaded_common_items.minimal_file_size); - be.set_maximal_file_size(loaded_common_items.maximal_file_size); - be.set_allowed_extensions(loaded_common_items.allowed_extensions); - be.set_recursive_search(loaded_common_items.recursive_search); - be.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); - be.find_bad_extensions_files(Some(&stop_receiver), Some(&progress_data_sender)); - glib_stop_sender.send(Message::BadExtensions(be)).unwrap(); - }); + be.set_included_directory(loaded_common_items.included_directories); + be.set_excluded_directory(loaded_common_items.excluded_directories); + be.set_excluded_items(loaded_common_items.excluded_items); + be.set_minimal_file_size(loaded_common_items.minimal_file_size); + be.set_maximal_file_size(loaded_common_items.maximal_file_size); + be.set_allowed_extensions(loaded_common_items.allowed_extensions); + be.set_recursive_search(loaded_common_items.recursive_search); + be.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); + be.find_bad_extensions_files(Some(&stop_receiver), Some(&progress_data_sender)); + glib_stop_sender.send(Message::BadExtensions(be)).unwrap(); + }) + .unwrap(); } #[fun_time(message = "clean_tree_view", level = "debug")] diff --git a/krokiet/src/connect_scan.rs b/krokiet/src/connect_scan.rs index 9d54508..8f7e58b 100644 --- a/krokiet/src/connect_scan.rs +++ b/krokiet/src/connect_scan.rs @@ -3,7 +3,7 @@ use crate::settings::{collect_settings, SettingsCustom}; use crate::{CurrentTab, GuiState, MainListModel, MainWindow, ProgressToSend}; use chrono::NaiveDateTime; use crossbeam_channel::{Receiver, Sender}; -use czkawka_core::common::split_path; +use czkawka_core::common::{split_path, DEFAULT_THREAD_SIZE}; use czkawka_core::common_dir_traversal::ProgressData; use czkawka_core::common_tool::CommonData; use czkawka_core::common_traits::ResultEntry; @@ -50,40 +50,87 @@ pub fn connect_scan_button(app: &MainWindow, progress_sender: Sender, progress_sender: Sender, stop_receiver: Receiver<()>, custom_settings: SettingsCustom) { - thread::spawn(move || { - let mut finder = SimilarImages::new(); - finder.set_included_directory(custom_settings.included_directories.clone()); - finder.set_excluded_directory(custom_settings.excluded_directories.clone()); - finder.find_similar_images(Some(&stop_receiver), Some(&progress_sender)); + thread::Builder::new() + .stack_size(DEFAULT_THREAD_SIZE) + .spawn(move || { + let mut finder = SimilarImages::new(); + finder.set_included_directory(custom_settings.included_directories.clone()); + finder.set_excluded_directory(custom_settings.excluded_directories.clone()); + finder.find_similar_images(Some(&stop_receiver), Some(&progress_sender)); - let mut vector = finder.get_similar_images().clone(); - let messages = finder.get_text_messages().create_messages_text(); + let mut vector = finder.get_similar_images().clone(); + let messages = finder.get_text_messages().create_messages_text(); - for vec_fe in &mut vector { - vec_fe.sort_unstable_by_key(|e| e.similarity); - } + for vec_fe in &mut vector { + vec_fe.sort_unstable_by_key(|e| e.similarity); + } - let hash_size = finder.hash_size; + let hash_size = finder.hash_size; - a.upgrade_in_event_loop(move |app| { - let number_of_empty_files = vector.len(); - let items = Rc::new(VecModel::default()); - for vec_fe in vector { - items.push(MainListModel { - checked: false, - header_row: true, - selected_row: false, - val: ModelRc::new(VecModel::default()), - }); - for fe in vec_fe { + a.upgrade_in_event_loop(move |app| { + let number_of_empty_files = vector.len(); + let items = Rc::new(VecModel::default()); + for vec_fe in vector { + items.push(MainListModel { + checked: false, + header_row: true, + selected_row: false, + val: ModelRc::new(VecModel::default()), + }); + for fe in vec_fe { + let (directory, file) = split_path(fe.get_path()); + let data_model = create_vec_model_from_vec_string(vec![ + similar_images::get_string_from_similarity(&fe.similarity, hash_size), + format_size(fe.size, BINARY), + fe.dimensions.clone(), + file, + directory, + NaiveDateTime::from_timestamp_opt(fe.get_modified_date() as i64, 0).unwrap().to_string(), + ]); + + let main = MainListModel { + checked: false, + header_row: false, + selected_row: false, + val: ModelRc::new(data_model), + }; + items.push(main); + } + } + app.set_similar_images_model(items.into()); + app.invoke_scan_ended(format!("Found {} similar images files", number_of_empty_files).into()); + app.global::().set_info_text(messages.into()); + }) + }) + .unwrap(); +} + +fn scan_empty_files(a: Weak, progress_sender: Sender, stop_receiver: Receiver<()>, custom_settings: SettingsCustom) { + thread::Builder::new() + .stack_size(DEFAULT_THREAD_SIZE) + .spawn(move || { + let mut finder = EmptyFiles::new(); + finder.set_included_directory(custom_settings.included_directories.clone()); + finder.set_excluded_directory(custom_settings.excluded_directories.clone()); + finder.find_empty_files(Some(&stop_receiver), Some(&progress_sender)); + + let mut vector = finder.get_empty_files().clone(); + let messages = finder.get_text_messages().create_messages_text(); + + vector.sort_unstable_by_key(|e| { + let t = split_path(e.get_path()); + (t.0, t.1) + }); + + a.upgrade_in_event_loop(move |app| { + let number_of_empty_files = vector.len(); + let items = Rc::new(VecModel::default()); + for fe in vector { let (directory, file) = split_path(fe.get_path()); - let data_model = create_vec_model_from_vec_string(vec![ - similar_images::get_string_from_similarity(&fe.similarity, hash_size), - format_size(fe.size, BINARY), - fe.dimensions.clone(), - file, - directory, - NaiveDateTime::from_timestamp_opt(fe.get_modified_date() as i64, 0).unwrap().to_string(), + let data_model = VecModel::from_slice(&[ + SharedString::from(file), + SharedString::from(directory), + SharedString::from(NaiveDateTime::from_timestamp_opt(fe.get_modified_date() as i64, 0).unwrap().to_string()), ]); let main = MainListModel { @@ -94,92 +141,54 @@ fn scan_similar_images(a: Weak, progress_sender: Sender().set_info_text(messages.into()); + app.set_empty_files_model(items.into()); + app.invoke_scan_ended(format!("Found {} empty files", number_of_empty_files).into()); + app.global::().set_info_text(messages.into()); + }) }) - }); -} - -fn scan_empty_files(a: Weak, progress_sender: Sender, stop_receiver: Receiver<()>, custom_settings: SettingsCustom) { - thread::spawn(move || { - let mut finder = EmptyFiles::new(); - finder.set_included_directory(custom_settings.included_directories.clone()); - finder.set_excluded_directory(custom_settings.excluded_directories.clone()); - finder.find_empty_files(Some(&stop_receiver), Some(&progress_sender)); - - let mut vector = finder.get_empty_files().clone(); - let messages = finder.get_text_messages().create_messages_text(); - - vector.sort_unstable_by_key(|e| { - let t = split_path(e.get_path()); - (t.0, t.1) - }); - - a.upgrade_in_event_loop(move |app| { - let number_of_empty_files = vector.len(); - let items = Rc::new(VecModel::default()); - for fe in vector { - let (directory, file) = split_path(fe.get_path()); - let data_model = VecModel::from_slice(&[ - SharedString::from(file), - SharedString::from(directory), - SharedString::from(NaiveDateTime::from_timestamp_opt(fe.get_modified_date() as i64, 0).unwrap().to_string()), - ]); - - let main = MainListModel { - checked: false, - header_row: false, - selected_row: false, - val: ModelRc::new(data_model), - }; - items.push(main); - } - app.set_empty_files_model(items.into()); - app.invoke_scan_ended(format!("Found {} empty files", number_of_empty_files).into()); - app.global::().set_info_text(messages.into()); - }) - }); + .unwrap(); } fn scan_empty_folders(a: Weak, progress_sender: Sender, stop_receiver: Receiver<()>, custom_settings: SettingsCustom) { - thread::spawn(move || { - let mut finder = EmptyFolder::new(); - finder.set_included_directory(custom_settings.included_directories.clone()); - finder.set_excluded_directory(custom_settings.excluded_directories.clone()); - finder.find_empty_folders(Some(&stop_receiver), Some(&progress_sender)); + thread::Builder::new() + .stack_size(DEFAULT_THREAD_SIZE) + .spawn(move || { + let mut finder = EmptyFolder::new(); + finder.set_included_directory(custom_settings.included_directories.clone()); + finder.set_excluded_directory(custom_settings.excluded_directories.clone()); + finder.find_empty_folders(Some(&stop_receiver), Some(&progress_sender)); - let mut vector = finder.get_empty_folder_list().keys().cloned().collect::>(); - let messages = finder.get_text_messages().create_messages_text(); + let mut vector = finder.get_empty_folder_list().keys().cloned().collect::>(); + let messages = finder.get_text_messages().create_messages_text(); - vector.sort_unstable_by_key(|e| { - let t = split_path(e.as_path()); - (t.0, t.1) - }); + vector.sort_unstable_by_key(|e| { + let t = split_path(e.as_path()); + (t.0, t.1) + }); - a.upgrade_in_event_loop(move |app| { - let folder_map = finder.get_empty_folder_list(); - let items = Rc::new(VecModel::default()); - for path in vector { - let (directory, file) = split_path(&path); - let data_model = VecModel::from_slice(&[ - SharedString::from(file), - SharedString::from(directory), - SharedString::from(NaiveDateTime::from_timestamp_opt(folder_map[&path].modified_date as i64, 0).unwrap().to_string()), - ]); + a.upgrade_in_event_loop(move |app| { + let folder_map = finder.get_empty_folder_list(); + let items = Rc::new(VecModel::default()); + for path in vector { + let (directory, file) = split_path(&path); + let data_model = VecModel::from_slice(&[ + SharedString::from(file), + SharedString::from(directory), + SharedString::from(NaiveDateTime::from_timestamp_opt(folder_map[&path].modified_date as i64, 0).unwrap().to_string()), + ]); - let main = MainListModel { - checked: false, - header_row: false, - selected_row: false, - val: ModelRc::new(data_model), - }; - items.push(main); - } - app.set_empty_folder_model(items.into()); - app.invoke_scan_ended(format!("Found {} empty folders", folder_map.len()).into()); - app.global::().set_info_text(messages.into()); + let main = MainListModel { + checked: false, + header_row: false, + selected_row: false, + val: ModelRc::new(data_model), + }; + items.push(main); + } + app.set_empty_folder_model(items.into()); + app.invoke_scan_ended(format!("Found {} empty folders", folder_map.len()).into()); + app.global::().set_info_text(messages.into()); + }) }) - }); + .unwrap(); } diff --git a/krokiet/ui/settings_list.slint b/krokiet/ui/settings_list.slint index 6b0f57c..b5be0c5 100644 --- a/krokiet/ui/settings_list.slint +++ b/krokiet/ui/settings_list.slint @@ -21,32 +21,64 @@ component TextComponent inherits HorizontalLayout { } } -export component SettingsList inherits ScrollView { - min-height: 300px; - VerticalLayout { +component MinMaxSizeComponent inherits HorizontalLayout { + spacing: 20px; + Text { + horizontal-stretch: 0.0; + text:"Size"; + vertical-alignment: TextVerticalAlignment.center; + } + HorizontalLayout { spacing: 5px; + horizontal-stretch: 1.0; Text { - text: "Settings"; + text:"Min:"; + vertical-alignment: TextVerticalAlignment.center; + } + SpinBox { + enabled: true; height: SettingsSize.item_height; - horizontal-alignment: TextHorizontalAlignment.center; - font-size: 20px; } Text { - text: "General settings"; - height: SettingsSize.item_height; - horizontal-alignment: TextHorizontalAlignment.center; - } - TextComponent { - name: "Excluded item:"; - model <=> Settings.excluded_items; - } - TextComponent { - name: "Allowed extensions:"; - model <=> Settings.allowed_extensions; + text:"Max:"; + vertical-alignment: TextVerticalAlignment.center; } SpinBox { enabled: true; height: SettingsSize.item_height; } } +} + +export component SettingsList inherits VerticalLayout { + preferred-height: 300px; + preferred-width: 400px; + + Text { + text: "Settings"; + height: SettingsSize.item_height; + horizontal-alignment: TextHorizontalAlignment.center; + font-size: 20px; + } + ScrollView { + VerticalLayout { + spacing: 5px; + Text { + text: "General settings"; + height: SettingsSize.item_height; + horizontal-alignment: TextHorizontalAlignment.center; + } + TextComponent { + name: "Excluded item:"; + model <=> Settings.excluded_items; + } + TextComponent { + name: "Allowed extensions:"; + model <=> Settings.allowed_extensions; + } + MinMaxSizeComponent { + + } + } + } } \ No newline at end of file