2020-11-01 02:23:31 +13:00
|
|
|
use czkawka_core::*;
|
|
|
|
|
|
|
|
extern crate gtk;
|
|
|
|
use crate::gui_data::GuiData;
|
|
|
|
use crate::help_functions::*;
|
2021-01-11 00:06:25 +13:00
|
|
|
use crate::notebook_enums::*;
|
2020-11-01 02:23:31 +13:00
|
|
|
use czkawka_core::big_file::BigFile;
|
2021-01-13 08:06:12 +13:00
|
|
|
use czkawka_core::broken_files::BrokenFiles;
|
2021-02-04 07:59:06 +13:00
|
|
|
use czkawka_core::duplicate::{DuplicateFinder, HashType};
|
2020-11-01 02:23:31 +13:00
|
|
|
use czkawka_core::empty_files::EmptyFiles;
|
|
|
|
use czkawka_core::empty_folder::EmptyFolder;
|
2020-12-22 04:09:39 +13:00
|
|
|
use czkawka_core::invalid_symlinks::InvalidSymlinks;
|
2020-11-03 09:56:07 +13:00
|
|
|
use czkawka_core::same_music::{MusicSimilarity, SameMusic};
|
2020-11-08 04:26:40 +13:00
|
|
|
use czkawka_core::similar_images::SimilarImages;
|
2020-11-01 02:23:31 +13:00
|
|
|
use czkawka_core::temporary::Temporary;
|
|
|
|
use czkawka_core::zeroed::ZeroedFiles;
|
|
|
|
use glib::Sender;
|
|
|
|
use gtk::prelude::*;
|
2021-01-26 06:23:42 +13:00
|
|
|
use gtk::WindowPosition;
|
2020-12-22 04:09:39 +13:00
|
|
|
use std::sync::atomic::{AtomicBool, Ordering};
|
|
|
|
use std::sync::Arc;
|
2020-11-01 02:23:31 +13:00
|
|
|
use std::thread;
|
|
|
|
|
2021-02-21 00:24:36 +13:00
|
|
|
use crate::taskbar_progress::tbp_flags::TBPF_NOPROGRESS;
|
|
|
|
|
2020-12-02 22:25:27 +13:00
|
|
|
#[allow(clippy::too_many_arguments)]
|
|
|
|
pub fn connect_button_search(
|
|
|
|
gui_data: &GuiData,
|
|
|
|
glib_stop_sender: Sender<Message>,
|
2021-04-14 18:23:59 +12:00
|
|
|
futures_sender_duplicate_files: futures::channel::mpsc::UnboundedSender<duplicate::ProgressData>,
|
|
|
|
futures_sender_empty_files: futures::channel::mpsc::UnboundedSender<empty_files::ProgressData>,
|
|
|
|
futures_sender_empty_folder: futures::channel::mpsc::UnboundedSender<empty_folder::ProgressData>,
|
|
|
|
futures_sender_big_file: futures::channel::mpsc::UnboundedSender<big_file::ProgressData>,
|
|
|
|
futures_sender_same_music: futures::channel::mpsc::UnboundedSender<same_music::ProgressData>,
|
|
|
|
futures_sender_similar_images: futures::channel::mpsc::UnboundedSender<similar_images::ProgressData>,
|
|
|
|
futures_sender_temporary: futures::channel::mpsc::UnboundedSender<temporary::ProgressData>,
|
|
|
|
futures_sender_zeroed: futures::channel::mpsc::UnboundedSender<zeroed::ProgressData>,
|
|
|
|
futures_sender_invalid_symlinks: futures::channel::mpsc::UnboundedSender<invalid_symlinks::ProgressData>,
|
|
|
|
futures_sender_broken_files: futures::channel::mpsc::UnboundedSender<broken_files::ProgressData>,
|
2020-12-02 22:25:27 +13:00
|
|
|
) {
|
2020-11-01 02:23:31 +13:00
|
|
|
let entry_info = gui_data.entry_info.clone();
|
2021-01-11 08:12:08 +13:00
|
|
|
let notebook_main = gui_data.main_notebook.notebook_main.clone();
|
|
|
|
let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone();
|
|
|
|
let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone();
|
|
|
|
let buttons_search_clone = gui_data.bottom_buttons.buttons_search.clone();
|
|
|
|
let buttons_array = gui_data.bottom_buttons.buttons_array.clone();
|
|
|
|
let check_button_recursive = gui_data.upper_notebook.check_button_recursive.clone();
|
|
|
|
let entry_excluded_items = gui_data.upper_notebook.entry_excluded_items.clone();
|
|
|
|
let entry_same_music_minimal_size = gui_data.main_notebook.entry_same_music_minimal_size.clone();
|
|
|
|
let entry_allowed_extensions = gui_data.upper_notebook.entry_allowed_extensions.clone();
|
|
|
|
let buttons_names = gui_data.bottom_buttons.buttons_names.clone();
|
|
|
|
let radio_button_duplicates_name = gui_data.main_notebook.radio_button_duplicates_name.clone();
|
|
|
|
let radio_button_duplicates_size = gui_data.main_notebook.radio_button_duplicates_size.clone();
|
|
|
|
let radio_button_duplicates_hashmb = gui_data.main_notebook.radio_button_duplicates_hashmb.clone();
|
|
|
|
let radio_button_duplicates_hash = gui_data.main_notebook.radio_button_duplicates_hash.clone();
|
|
|
|
let radio_button_similar_images_minimal = gui_data.main_notebook.radio_button_similar_images_minimal.clone();
|
|
|
|
let radio_button_similar_images_very_small = gui_data.main_notebook.radio_button_similar_images_very_small.clone();
|
|
|
|
let radio_button_similar_images_small = gui_data.main_notebook.radio_button_similar_images_small.clone();
|
|
|
|
let radio_button_similar_images_medium = gui_data.main_notebook.radio_button_similar_images_medium.clone();
|
|
|
|
let radio_button_similar_images_high = gui_data.main_notebook.radio_button_similar_images_high.clone();
|
|
|
|
let radio_button_similar_images_very_high = gui_data.main_notebook.radio_button_similar_images_very_high.clone();
|
|
|
|
let entry_duplicate_minimal_size = gui_data.main_notebook.entry_duplicate_minimal_size.clone();
|
2020-11-05 06:15:06 +13:00
|
|
|
let stop_receiver = gui_data.stop_receiver.clone();
|
2021-01-11 08:12:08 +13:00
|
|
|
let entry_big_files_number = gui_data.main_notebook.entry_big_files_number.clone();
|
|
|
|
let entry_similar_images_minimal_size = gui_data.main_notebook.entry_similar_images_minimal_size.clone();
|
|
|
|
let check_button_music_title: gtk::CheckButton = gui_data.main_notebook.check_button_music_title.clone();
|
|
|
|
let check_button_music_artist: gtk::CheckButton = gui_data.main_notebook.check_button_music_artist.clone();
|
|
|
|
let check_button_music_album_title: gtk::CheckButton = gui_data.main_notebook.check_button_music_album_title.clone();
|
|
|
|
let check_button_music_album_artist: gtk::CheckButton = gui_data.main_notebook.check_button_music_album_artist.clone();
|
|
|
|
let check_button_music_year: gtk::CheckButton = gui_data.main_notebook.check_button_music_year.clone();
|
2020-11-03 09:56:07 +13:00
|
|
|
let shared_buttons = gui_data.shared_buttons.clone();
|
2021-01-11 01:45:05 +13:00
|
|
|
let tree_view_empty_folder_finder = gui_data.main_notebook.tree_view_empty_folder_finder.clone();
|
|
|
|
let tree_view_empty_files_finder = gui_data.main_notebook.tree_view_empty_files_finder.clone();
|
|
|
|
let tree_view_big_files_finder = gui_data.main_notebook.tree_view_big_files_finder.clone();
|
|
|
|
let tree_view_duplicate_finder = gui_data.main_notebook.tree_view_duplicate_finder.clone();
|
|
|
|
let tree_view_temporary_files_finder = gui_data.main_notebook.tree_view_temporary_files_finder.clone();
|
|
|
|
let tree_view_same_music_finder = gui_data.main_notebook.tree_view_same_music_finder.clone();
|
|
|
|
let tree_view_similar_images_finder = gui_data.main_notebook.tree_view_similar_images_finder.clone();
|
|
|
|
let tree_view_zeroed_files_finder = gui_data.main_notebook.tree_view_zeroed_files_finder.clone();
|
|
|
|
let tree_view_invalid_symlinks = gui_data.main_notebook.tree_view_invalid_symlinks.clone();
|
2021-01-13 08:06:12 +13:00
|
|
|
let tree_view_broken_files = gui_data.main_notebook.tree_view_broken_files.clone();
|
2020-11-09 07:01:48 +13:00
|
|
|
let text_view_errors = gui_data.text_view_errors.clone();
|
2021-01-26 06:23:42 +13:00
|
|
|
let window_progress = gui_data.progress_window.window_progress.clone();
|
|
|
|
let label_stage = gui_data.progress_window.label_stage.clone();
|
|
|
|
let grid_progress_stages = gui_data.progress_window.grid_progress_stages.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();
|
2021-02-21 00:24:36 +13:00
|
|
|
let taskbar_state = gui_data.taskbar_state.clone();
|
2021-01-11 08:12:08 +13:00
|
|
|
let image_preview_similar_images = gui_data.main_notebook.image_preview_similar_images.clone();
|
2021-02-04 07:59:06 +13:00
|
|
|
let radio_button_hash_type_blake3 = gui_data.main_notebook.radio_button_hash_type_blake3.clone();
|
|
|
|
let radio_button_hash_type_crc32 = gui_data.main_notebook.radio_button_hash_type_crc32.clone();
|
|
|
|
let radio_button_hash_type_xxh3 = gui_data.main_notebook.radio_button_hash_type_xxh3.clone();
|
2021-02-23 21:40:19 +13:00
|
|
|
let check_button_settings_hide_hard_links = gui_data.settings.check_button_settings_hide_hard_links.clone();
|
2021-03-05 00:09:53 +13:00
|
|
|
let check_button_settings_use_cache = gui_data.settings.check_button_settings_use_cache.clone();
|
2021-05-07 07:54:44 +12:00
|
|
|
let entry_settings_cache_file_minimal_size = gui_data.settings.entry_settings_cache_file_minimal_size.clone();
|
2020-11-03 09:56:07 +13:00
|
|
|
|
2020-11-01 02:23:31 +13:00
|
|
|
buttons_search_clone.connect_clicked(move |_| {
|
2021-01-11 08:44:10 +13:00
|
|
|
let included_directories = get_path_buf_from_vector_of_strings(get_string_from_list_store(&tree_view_included_directories));
|
|
|
|
let excluded_directories = get_path_buf_from_vector_of_strings(get_string_from_list_store(&tree_view_excluded_directories));
|
2021-06-26 04:07:13 +12:00
|
|
|
let recursive_search = check_button_recursive.is_active();
|
|
|
|
let excluded_items = entry_excluded_items.text().as_str().to_string().split(',').map(|e| e.to_string()).collect::<Vec<String>>();
|
|
|
|
let allowed_extensions = entry_allowed_extensions.text().as_str().to_string();
|
|
|
|
let hide_hard_links = check_button_settings_hide_hard_links.is_active();
|
|
|
|
let use_cache = check_button_settings_use_cache.is_active();
|
|
|
|
let minimal_cache_file_size = entry_settings_cache_file_minimal_size.text().as_str().parse::<u64>().unwrap_or(2 * 1024 * 1024);
|
2020-11-01 02:23:31 +13:00
|
|
|
|
2020-12-23 08:04:16 +13:00
|
|
|
let show_dialog = Arc::new(AtomicBool::new(true));
|
|
|
|
|
2020-12-02 22:58:31 +13:00
|
|
|
hide_all_buttons(&buttons_array);
|
2020-11-01 02:23:31 +13:00
|
|
|
|
2020-12-02 22:25:27 +13:00
|
|
|
// Disable main notebook from any iteration until search will end
|
2020-11-01 02:23:31 +13:00
|
|
|
notebook_main.set_sensitive(false);
|
|
|
|
|
|
|
|
entry_info.set_text("Searching data, it may take a while, please wait...");
|
|
|
|
|
2020-12-03 05:34:19 +13:00
|
|
|
// Set dialog to center to current screen(it is impossible to center it to main window)
|
2021-05-17 21:06:22 +12:00
|
|
|
window_progress.set_position(WindowPosition::Center);
|
2020-12-03 05:34:19 +13:00
|
|
|
|
2020-12-02 22:25:27 +13:00
|
|
|
// Resets progress bars
|
|
|
|
progress_bar_all_stages.set_fraction(0 as f64);
|
|
|
|
progress_bar_current_stage.set_fraction(0 as f64);
|
|
|
|
|
2020-12-22 04:09:39 +13:00
|
|
|
reset_text_view(&text_view_errors);
|
|
|
|
|
2021-01-12 23:51:54 +13:00
|
|
|
let glib_stop_sender = glib_stop_sender.clone();
|
|
|
|
let stop_receiver = stop_receiver.clone();
|
|
|
|
|
2021-06-26 04:07:13 +12:00
|
|
|
match to_notebook_main_enum(notebook_main.current_page().unwrap()) {
|
2021-01-11 00:06:25 +13:00
|
|
|
NotebookMainEnum::Duplicate => {
|
2020-12-02 22:25:27 +13:00
|
|
|
label_stage.show();
|
|
|
|
grid_progress_stages.show_all();
|
2021-01-26 06:23:42 +13:00
|
|
|
window_progress.resize(1, 1);
|
2020-12-02 22:25:27 +13:00
|
|
|
|
2021-01-11 01:45:05 +13:00
|
|
|
get_list_store(&tree_view_duplicate_finder).clear();
|
2020-11-08 04:26:40 +13:00
|
|
|
|
2020-11-01 02:23:31 +13:00
|
|
|
let check_method;
|
2021-06-26 04:07:13 +12:00
|
|
|
if radio_button_duplicates_name.is_active() {
|
2020-11-01 02:23:31 +13:00
|
|
|
check_method = duplicate::CheckingMethod::Name;
|
2021-06-26 04:07:13 +12:00
|
|
|
} else if radio_button_duplicates_size.is_active() {
|
2020-11-01 02:23:31 +13:00
|
|
|
check_method = duplicate::CheckingMethod::Size;
|
2021-06-26 04:07:13 +12:00
|
|
|
} else if radio_button_duplicates_hashmb.is_active() {
|
2021-03-28 01:14:02 +13:00
|
|
|
check_method = duplicate::CheckingMethod::HashMb;
|
2021-06-26 04:07:13 +12:00
|
|
|
} else if radio_button_duplicates_hash.is_active() {
|
2020-11-01 02:23:31 +13:00
|
|
|
check_method = duplicate::CheckingMethod::Hash;
|
|
|
|
} else {
|
|
|
|
panic!("No radio button is pressed");
|
|
|
|
}
|
2021-06-26 04:07:13 +12:00
|
|
|
let minimal_file_size = entry_duplicate_minimal_size.text().as_str().parse::<u64>().unwrap_or(1024);
|
2020-11-01 02:23:31 +13:00
|
|
|
|
2021-02-04 07:59:06 +13:00
|
|
|
let hash_type: HashType;
|
2021-06-26 04:07:13 +12:00
|
|
|
if radio_button_hash_type_blake3.is_active() {
|
2021-02-04 07:59:06 +13:00
|
|
|
hash_type = duplicate::HashType::Blake3;
|
2021-06-26 04:07:13 +12:00
|
|
|
} else if radio_button_hash_type_crc32.is_active() {
|
2021-03-28 01:14:02 +13:00
|
|
|
hash_type = duplicate::HashType::Crc32;
|
2021-06-26 04:07:13 +12:00
|
|
|
} else if radio_button_hash_type_xxh3.is_active() {
|
2021-03-28 01:14:02 +13:00
|
|
|
hash_type = duplicate::HashType::Xxh3;
|
2021-02-04 07:59:06 +13:00
|
|
|
} else {
|
|
|
|
panic!("No radio button is pressed");
|
|
|
|
}
|
|
|
|
|
2020-12-02 22:25:27 +13:00
|
|
|
let futures_sender_duplicate_files = futures_sender_duplicate_files.clone();
|
2020-11-01 02:23:31 +13:00
|
|
|
// Find duplicates
|
|
|
|
thread::spawn(move || {
|
|
|
|
let mut df = DuplicateFinder::new();
|
|
|
|
df.set_included_directory(included_directories);
|
|
|
|
df.set_excluded_directory(excluded_directories);
|
|
|
|
df.set_recursive_search(recursive_search);
|
|
|
|
df.set_excluded_items(excluded_items);
|
|
|
|
df.set_allowed_extensions(allowed_extensions);
|
|
|
|
df.set_minimal_file_size(minimal_file_size);
|
2021-05-07 07:54:44 +12:00
|
|
|
df.set_minimal_cache_file_size(minimal_cache_file_size);
|
2020-11-01 02:23:31 +13:00
|
|
|
df.set_check_method(check_method);
|
2021-02-04 07:59:06 +13:00
|
|
|
df.set_hash_type(hash_type);
|
2021-02-23 21:40:19 +13:00
|
|
|
df.set_ignore_hard_links(hide_hard_links);
|
2021-03-05 00:09:53 +13:00
|
|
|
df.set_use_cache(use_cache);
|
2020-12-02 22:25:27 +13:00
|
|
|
df.find_duplicates(Some(&stop_receiver), Some(&futures_sender_duplicate_files));
|
|
|
|
let _ = glib_stop_sender.send(Message::Duplicates(df));
|
2020-11-01 02:23:31 +13:00
|
|
|
});
|
|
|
|
}
|
2021-01-11 00:06:25 +13:00
|
|
|
NotebookMainEnum::EmptyFiles => {
|
2020-12-02 22:25:27 +13:00
|
|
|
label_stage.show();
|
|
|
|
grid_progress_stages.hide();
|
2021-01-26 06:23:42 +13:00
|
|
|
window_progress.resize(1, 1);
|
2020-12-02 22:25:27 +13:00
|
|
|
|
2021-01-11 01:45:05 +13:00
|
|
|
get_list_store(&tree_view_empty_files_finder).clear();
|
2020-11-09 07:01:48 +13:00
|
|
|
|
2020-12-02 22:25:27 +13:00
|
|
|
let futures_sender_empty_files = futures_sender_empty_files.clone();
|
2020-11-01 02:23:31 +13:00
|
|
|
// Find empty files
|
|
|
|
thread::spawn(move || {
|
|
|
|
let mut vf = EmptyFiles::new();
|
|
|
|
|
|
|
|
vf.set_included_directory(included_directories);
|
|
|
|
vf.set_excluded_directory(excluded_directories);
|
|
|
|
vf.set_recursive_search(recursive_search);
|
|
|
|
vf.set_excluded_items(excluded_items);
|
|
|
|
vf.set_allowed_extensions(allowed_extensions);
|
2020-12-02 22:25:27 +13:00
|
|
|
vf.find_empty_files(Some(&stop_receiver), Some(&futures_sender_empty_files));
|
|
|
|
let _ = glib_stop_sender.send(Message::EmptyFiles(vf));
|
2020-11-01 02:23:31 +13:00
|
|
|
});
|
|
|
|
}
|
2021-01-11 00:06:25 +13:00
|
|
|
NotebookMainEnum::EmptyDirectories => {
|
2020-12-02 22:25:27 +13:00
|
|
|
label_stage.show();
|
|
|
|
grid_progress_stages.hide();
|
2021-01-26 06:23:42 +13:00
|
|
|
window_progress.resize(1, 1);
|
2020-12-02 22:25:27 +13:00
|
|
|
|
2021-01-11 01:45:05 +13:00
|
|
|
get_list_store(&tree_view_empty_folder_finder).clear();
|
2020-11-09 07:01:48 +13:00
|
|
|
|
2020-12-02 22:25:27 +13:00
|
|
|
let futures_sender_empty_folder = futures_sender_empty_folder.clone();
|
|
|
|
// Find empty folders
|
2020-11-01 02:23:31 +13:00
|
|
|
thread::spawn(move || {
|
2020-12-02 22:25:27 +13:00
|
|
|
let mut ef = EmptyFolder::new();
|
|
|
|
ef.set_included_directory(included_directories);
|
|
|
|
ef.set_excluded_directory(excluded_directories);
|
|
|
|
ef.set_excluded_items(excluded_items);
|
|
|
|
ef.find_empty_folders(Some(&stop_receiver), Some(&futures_sender_empty_folder));
|
|
|
|
let _ = glib_stop_sender.send(Message::EmptyFolders(ef));
|
2020-11-01 02:23:31 +13:00
|
|
|
});
|
|
|
|
}
|
2021-01-11 00:06:25 +13:00
|
|
|
NotebookMainEnum::BigFiles => {
|
2020-12-02 22:25:27 +13:00
|
|
|
label_stage.show();
|
|
|
|
grid_progress_stages.hide();
|
2021-01-26 06:23:42 +13:00
|
|
|
window_progress.resize(1, 1);
|
2020-12-02 22:25:27 +13:00
|
|
|
|
2021-01-11 01:45:05 +13:00
|
|
|
get_list_store(&tree_view_big_files_finder).clear();
|
2020-11-09 07:01:48 +13:00
|
|
|
|
2021-06-26 04:07:13 +12:00
|
|
|
let numbers_of_files_to_check = entry_big_files_number.text().as_str().parse::<usize>().unwrap_or(50);
|
2020-11-01 02:23:31 +13:00
|
|
|
|
2020-12-02 22:25:27 +13:00
|
|
|
let futures_sender_big_file = futures_sender_big_file.clone();
|
2020-11-01 02:23:31 +13:00
|
|
|
// Find big files
|
|
|
|
thread::spawn(move || {
|
|
|
|
let mut bf = BigFile::new();
|
|
|
|
|
|
|
|
bf.set_included_directory(included_directories);
|
|
|
|
bf.set_excluded_directory(excluded_directories);
|
|
|
|
bf.set_recursive_search(recursive_search);
|
|
|
|
bf.set_excluded_items(excluded_items);
|
|
|
|
bf.set_number_of_files_to_check(numbers_of_files_to_check);
|
2020-12-02 22:25:27 +13:00
|
|
|
bf.find_big_files(Some(&stop_receiver), Some(&futures_sender_big_file));
|
|
|
|
let _ = glib_stop_sender.send(Message::BigFiles(bf));
|
2020-11-01 02:23:31 +13:00
|
|
|
});
|
|
|
|
}
|
2021-01-11 00:06:25 +13:00
|
|
|
NotebookMainEnum::Temporary => {
|
2020-12-02 22:25:27 +13:00
|
|
|
label_stage.show();
|
|
|
|
grid_progress_stages.hide();
|
2021-01-26 06:23:42 +13:00
|
|
|
window_progress.resize(1, 1);
|
2020-11-01 02:23:31 +13:00
|
|
|
|
2021-01-11 01:45:05 +13:00
|
|
|
get_list_store(&tree_view_temporary_files_finder).clear();
|
2020-12-02 22:25:27 +13:00
|
|
|
|
|
|
|
let futures_sender_temporary = futures_sender_temporary.clone();
|
|
|
|
// Find temporary files
|
|
|
|
thread::spawn(move || {
|
|
|
|
let mut tf = Temporary::new();
|
|
|
|
|
|
|
|
tf.set_included_directory(included_directories);
|
|
|
|
tf.set_excluded_directory(excluded_directories);
|
|
|
|
tf.set_recursive_search(recursive_search);
|
|
|
|
tf.set_excluded_items(excluded_items);
|
|
|
|
tf.find_temporary_files(Some(&stop_receiver), Some(&futures_sender_temporary));
|
|
|
|
let _ = glib_stop_sender.send(Message::Temporary(tf));
|
|
|
|
});
|
|
|
|
}
|
2021-01-11 00:06:25 +13:00
|
|
|
NotebookMainEnum::SimilarImages => {
|
2020-12-16 22:13:56 +13:00
|
|
|
image_preview_similar_images.hide();
|
|
|
|
|
2020-12-02 22:25:27 +13:00
|
|
|
label_stage.show();
|
|
|
|
grid_progress_stages.show_all();
|
2021-01-26 06:23:42 +13:00
|
|
|
window_progress.resize(1, 1);
|
2020-12-02 22:25:27 +13:00
|
|
|
|
2021-01-11 01:45:05 +13:00
|
|
|
get_list_store(&tree_view_similar_images_finder).clear();
|
2020-11-09 07:01:48 +13:00
|
|
|
|
2021-06-26 04:07:13 +12:00
|
|
|
let minimal_file_size = entry_similar_images_minimal_size.text().as_str().parse::<u64>().unwrap_or(1024 * 16);
|
2020-11-01 02:23:31 +13:00
|
|
|
|
2020-11-08 19:41:29 +13:00
|
|
|
let similarity;
|
2021-06-26 04:07:13 +12:00
|
|
|
if radio_button_similar_images_minimal.is_active() {
|
2020-12-24 08:10:10 +13:00
|
|
|
similarity = similar_images::Similarity::Minimal;
|
2021-06-26 04:07:13 +12:00
|
|
|
} else if radio_button_similar_images_very_small.is_active() {
|
2020-11-10 00:55:27 +13:00
|
|
|
similarity = similar_images::Similarity::VerySmall;
|
2021-06-26 04:07:13 +12:00
|
|
|
} else if radio_button_similar_images_small.is_active() {
|
2020-11-08 19:41:29 +13:00
|
|
|
similarity = similar_images::Similarity::Small;
|
2021-06-26 04:07:13 +12:00
|
|
|
} else if radio_button_similar_images_medium.is_active() {
|
2020-11-08 19:41:29 +13:00
|
|
|
similarity = similar_images::Similarity::Medium;
|
2021-06-26 04:07:13 +12:00
|
|
|
} else if radio_button_similar_images_high.is_active() {
|
2020-11-08 19:41:29 +13:00
|
|
|
similarity = similar_images::Similarity::High;
|
2021-06-26 04:07:13 +12:00
|
|
|
} else if radio_button_similar_images_very_high.is_active() {
|
2020-11-08 19:41:29 +13:00
|
|
|
similarity = similar_images::Similarity::VeryHigh;
|
|
|
|
} else {
|
|
|
|
panic!("No radio button is pressed");
|
|
|
|
}
|
|
|
|
|
2020-12-02 22:25:27 +13:00
|
|
|
let futures_sender_similar_images = futures_sender_similar_images.clone();
|
2020-11-01 02:23:31 +13:00
|
|
|
// Find similar images
|
|
|
|
thread::spawn(move || {
|
|
|
|
let mut sf = SimilarImages::new();
|
|
|
|
|
|
|
|
sf.set_included_directory(included_directories);
|
|
|
|
sf.set_excluded_directory(excluded_directories);
|
|
|
|
sf.set_recursive_search(recursive_search);
|
|
|
|
sf.set_excluded_items(excluded_items);
|
|
|
|
sf.set_minimal_file_size(minimal_file_size);
|
2020-11-08 19:41:29 +13:00
|
|
|
sf.set_similarity(similarity);
|
2021-03-05 00:09:53 +13:00
|
|
|
sf.set_use_cache(use_cache);
|
2020-12-02 22:25:27 +13:00
|
|
|
sf.find_similar_images(Some(&stop_receiver), Some(&futures_sender_similar_images));
|
|
|
|
let _ = glib_stop_sender.send(Message::SimilarImages(sf));
|
2020-11-01 02:23:31 +13:00
|
|
|
});
|
|
|
|
}
|
2021-01-11 00:06:25 +13:00
|
|
|
NotebookMainEnum::Zeroed => {
|
2020-12-02 22:25:27 +13:00
|
|
|
label_stage.show();
|
|
|
|
grid_progress_stages.show_all();
|
2021-01-26 06:23:42 +13:00
|
|
|
window_progress.resize(1, 1);
|
2020-12-02 22:25:27 +13:00
|
|
|
|
2021-01-11 01:45:05 +13:00
|
|
|
get_list_store(&tree_view_zeroed_files_finder).clear();
|
2020-11-09 07:01:48 +13:00
|
|
|
|
2020-12-02 22:25:27 +13:00
|
|
|
let futures_sender_zeroed = futures_sender_zeroed.clone();
|
2020-11-03 09:56:07 +13:00
|
|
|
// Find zeroed files
|
2020-11-01 02:23:31 +13:00
|
|
|
thread::spawn(move || {
|
|
|
|
let mut zf = ZeroedFiles::new();
|
|
|
|
|
|
|
|
zf.set_included_directory(included_directories);
|
|
|
|
zf.set_excluded_directory(excluded_directories);
|
|
|
|
zf.set_recursive_search(recursive_search);
|
|
|
|
zf.set_excluded_items(excluded_items);
|
2020-11-03 09:56:07 +13:00
|
|
|
zf.set_allowed_extensions(allowed_extensions);
|
2020-12-02 22:25:27 +13:00
|
|
|
zf.find_zeroed_files(Some(&stop_receiver), Some(&futures_sender_zeroed));
|
|
|
|
let _ = glib_stop_sender.send(Message::ZeroedFiles(zf));
|
2020-11-01 02:23:31 +13:00
|
|
|
});
|
|
|
|
}
|
2021-01-11 00:06:25 +13:00
|
|
|
NotebookMainEnum::SameMusic => {
|
2020-12-02 22:25:27 +13:00
|
|
|
label_stage.show();
|
|
|
|
grid_progress_stages.show_all();
|
2021-01-26 06:23:42 +13:00
|
|
|
window_progress.resize(1, 1);
|
2020-12-02 22:25:27 +13:00
|
|
|
|
2021-01-11 01:45:05 +13:00
|
|
|
get_list_store(&tree_view_same_music_finder).clear();
|
2020-11-09 07:01:48 +13:00
|
|
|
|
2021-06-26 04:07:13 +12:00
|
|
|
let minimal_file_size = entry_same_music_minimal_size.text().as_str().parse::<u64>().unwrap_or(1024);
|
2021-01-01 07:53:49 +13:00
|
|
|
|
2020-11-03 09:56:07 +13:00
|
|
|
let mut music_similarity: MusicSimilarity = MusicSimilarity::NONE;
|
|
|
|
|
2021-06-26 04:07:13 +12:00
|
|
|
if check_button_music_title.is_active() {
|
2020-11-03 09:56:07 +13:00
|
|
|
music_similarity |= MusicSimilarity::TITLE;
|
|
|
|
}
|
2021-06-26 04:07:13 +12:00
|
|
|
if check_button_music_artist.is_active() {
|
2020-11-03 09:56:07 +13:00
|
|
|
music_similarity |= MusicSimilarity::ARTIST;
|
|
|
|
}
|
2021-06-26 04:07:13 +12:00
|
|
|
if check_button_music_album_title.is_active() {
|
2020-11-03 09:56:07 +13:00
|
|
|
music_similarity |= MusicSimilarity::ALBUM_TITLE;
|
|
|
|
}
|
2021-06-26 04:07:13 +12:00
|
|
|
if check_button_music_album_artist.is_active() {
|
2020-11-03 09:56:07 +13:00
|
|
|
music_similarity |= MusicSimilarity::ALBUM_ARTIST;
|
|
|
|
}
|
2021-06-26 04:07:13 +12:00
|
|
|
if check_button_music_year.is_active() {
|
2020-11-03 09:56:07 +13:00
|
|
|
music_similarity |= MusicSimilarity::YEAR;
|
|
|
|
}
|
|
|
|
|
|
|
|
if music_similarity != MusicSimilarity::NONE {
|
2020-12-02 22:25:27 +13:00
|
|
|
let futures_sender_same_music = futures_sender_same_music.clone();
|
|
|
|
// Find Similar music
|
2020-11-03 09:56:07 +13:00
|
|
|
thread::spawn(move || {
|
|
|
|
let mut mf = SameMusic::new();
|
|
|
|
|
|
|
|
mf.set_included_directory(included_directories);
|
|
|
|
mf.set_excluded_directory(excluded_directories);
|
|
|
|
mf.set_excluded_items(excluded_items);
|
|
|
|
mf.set_minimal_file_size(minimal_file_size);
|
|
|
|
mf.set_recursive_search(recursive_search);
|
|
|
|
mf.set_music_similarity(music_similarity);
|
2020-12-02 22:25:27 +13:00
|
|
|
mf.find_same_music(Some(&stop_receiver), Some(&futures_sender_same_music));
|
|
|
|
let _ = glib_stop_sender.send(Message::SameMusic(mf));
|
2020-11-03 09:56:07 +13:00
|
|
|
});
|
|
|
|
} else {
|
|
|
|
notebook_main.set_sensitive(true);
|
2021-01-11 00:06:25 +13:00
|
|
|
set_buttons(&mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SameMusic).unwrap(), &buttons_array, &buttons_names);
|
2020-11-03 09:56:07 +13:00
|
|
|
entry_info.set_text("ERROR: You must select at least one checkbox with music searching types.");
|
2020-12-22 04:09:39 +13:00
|
|
|
show_dialog.store(false, Ordering::Relaxed);
|
2020-11-03 09:56:07 +13:00
|
|
|
}
|
|
|
|
}
|
2021-01-11 00:06:25 +13:00
|
|
|
NotebookMainEnum::Symlinks => {
|
2020-12-22 04:09:39 +13:00
|
|
|
label_stage.show();
|
|
|
|
grid_progress_stages.hide();
|
2021-01-26 06:23:42 +13:00
|
|
|
window_progress.resize(1, 1);
|
2020-12-22 04:09:39 +13:00
|
|
|
|
2021-01-11 01:45:05 +13:00
|
|
|
get_list_store(&tree_view_invalid_symlinks).clear();
|
2020-12-22 04:09:39 +13:00
|
|
|
|
|
|
|
let futures_sender_invalid_symlinks = futures_sender_invalid_symlinks.clone();
|
|
|
|
|
|
|
|
thread::spawn(move || {
|
|
|
|
let mut isf = InvalidSymlinks::new();
|
|
|
|
|
|
|
|
isf.set_included_directory(included_directories);
|
|
|
|
isf.set_excluded_directory(excluded_directories);
|
|
|
|
isf.set_recursive_search(recursive_search);
|
|
|
|
isf.set_excluded_items(excluded_items);
|
|
|
|
isf.find_invalid_links(Some(&stop_receiver), Some(&futures_sender_invalid_symlinks));
|
|
|
|
let _ = glib_stop_sender.send(Message::InvalidSymlinks(isf));
|
|
|
|
});
|
|
|
|
}
|
2021-01-13 08:06:12 +13:00
|
|
|
NotebookMainEnum::BrokenFiles => {
|
|
|
|
label_stage.show();
|
|
|
|
grid_progress_stages.show();
|
2021-01-26 06:23:42 +13:00
|
|
|
window_progress.resize(1, 1);
|
2021-01-13 08:06:12 +13:00
|
|
|
|
|
|
|
get_list_store(&tree_view_broken_files).clear();
|
|
|
|
|
|
|
|
let futures_sender_broken_files = futures_sender_broken_files.clone();
|
|
|
|
|
|
|
|
thread::spawn(move || {
|
|
|
|
let mut br = BrokenFiles::new();
|
|
|
|
|
|
|
|
br.set_included_directory(included_directories);
|
|
|
|
br.set_excluded_directory(excluded_directories);
|
|
|
|
br.set_recursive_search(recursive_search);
|
|
|
|
br.set_excluded_items(excluded_items);
|
2021-03-05 00:09:53 +13:00
|
|
|
br.set_use_cache(use_cache);
|
2021-01-13 08:06:12 +13:00
|
|
|
br.find_broken_files(Some(&stop_receiver), Some(&futures_sender_broken_files));
|
|
|
|
let _ = glib_stop_sender.send(Message::BrokenFiles(br));
|
|
|
|
});
|
|
|
|
}
|
2020-11-01 02:23:31 +13:00
|
|
|
}
|
2020-12-02 22:25:27 +13:00
|
|
|
|
|
|
|
// Show progress dialog
|
2020-12-22 04:09:39 +13:00
|
|
|
if show_dialog.load(Ordering::Relaxed) {
|
2021-01-26 06:23:42 +13:00
|
|
|
window_progress.show();
|
2021-02-21 00:24:36 +13:00
|
|
|
taskbar_state.borrow().show();
|
|
|
|
taskbar_state.borrow().set_progress_state(TBPF_NOPROGRESS);
|
2020-12-22 04:09:39 +13:00
|
|
|
}
|
2020-11-01 02:23:31 +13:00
|
|
|
});
|
|
|
|
}
|