pull/1184/head
Rafał Mikrut 4 months ago
parent 1181368fc2
commit 1844f69b71

116
Cargo.lock generated

@ -654,23 +654,22 @@ dependencies = [
[[package]] [[package]]
name = "cairo-rs" name = "cairo-rs"
version = "0.18.5" version = "0.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" checksum = "bc1c415b7088381c53c575420899c34c9e6312df5ac5defd05614210e9fd6e1b"
dependencies = [ dependencies = [
"bitflags 2.4.2", "bitflags 2.4.2",
"cairo-sys-rs", "cairo-sys-rs",
"glib", "glib",
"libc", "libc",
"once_cell",
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "cairo-sys-rs" name = "cairo-sys-rs"
version = "0.18.2" version = "0.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" checksum = "75b6a5fefce2eadb8333e3c604ac964ba6573ec4f28bdd17f67032c4a2831831"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
@ -2148,22 +2147,21 @@ dependencies = [
[[package]] [[package]]
name = "gdk-pixbuf" name = "gdk-pixbuf"
version = "0.18.5" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" checksum = "c311c47800051b87de1335e8792774d7cec551c91a0a3d109ab21d76b36f208f"
dependencies = [ dependencies = [
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
"gio", "gio",
"glib", "glib",
"libc", "libc",
"once_cell",
] ]
[[package]] [[package]]
name = "gdk-pixbuf-sys" name = "gdk-pixbuf-sys"
version = "0.18.0" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" checksum = "3dcbd04c1b2c4834cc008b4828bc917d062483b88d26effde6342e5622028f96"
dependencies = [ dependencies = [
"gio-sys", "gio-sys",
"glib-sys", "glib-sys",
@ -2174,9 +2172,9 @@ dependencies = [
[[package]] [[package]]
name = "gdk4" name = "gdk4"
version = "0.7.3" version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7edb019ad581f8ecf8ea8e4baa6df7c483a95b5a59be3140be6a9c3b0c632af6" checksum = "6771942f85a2beaa220c64739395e4401b9fab4a52aba9b503fa1e6ed4d4d806"
dependencies = [ dependencies = [
"cairo-rs", "cairo-rs",
"gdk-pixbuf", "gdk-pixbuf",
@ -2189,9 +2187,9 @@ dependencies = [
[[package]] [[package]]
name = "gdk4-sys" name = "gdk4-sys"
version = "0.7.2" version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbab43f332a3cf1df9974da690b5bb0e26720ed09a228178ce52175372dcfef0" checksum = "1eb95854fab65072023a7814434f003db571d6e45c287c0b0c540c1c78bdf6ae"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
@ -2279,9 +2277,9 @@ dependencies = [
[[package]] [[package]]
name = "gio" name = "gio"
version = "0.18.4" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" checksum = "b3d1aaa2d926710a27f3b35822806b1513b393b71174dd2601c9d02fdab0cb82"
dependencies = [ dependencies = [
"futures-channel", "futures-channel",
"futures-core", "futures-core",
@ -2290,7 +2288,6 @@ dependencies = [
"gio-sys", "gio-sys",
"glib", "glib",
"libc", "libc",
"once_cell",
"pin-project-lite", "pin-project-lite",
"smallvec", "smallvec",
"thiserror", "thiserror",
@ -2298,15 +2295,15 @@ dependencies = [
[[package]] [[package]]
name = "gio-sys" name = "gio-sys"
version = "0.18.1" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" checksum = "bcf8e1d9219bb294636753d307b030c1e8a032062cba74f493c431a5c8b81ce4"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
"libc", "libc",
"system-deps", "system-deps",
"winapi", "windows-sys 0.52.0",
] ]
[[package]] [[package]]
@ -2322,9 +2319,9 @@ dependencies = [
[[package]] [[package]]
name = "glib" name = "glib"
version = "0.18.5" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" checksum = "170ee82b9b44b3b5fd1cf4971d6cf0eadec38303bb84c7bcc4e6b95a18934e71"
dependencies = [ dependencies = [
"bitflags 2.4.2", "bitflags 2.4.2",
"futures-channel", "futures-channel",
@ -2338,20 +2335,18 @@ dependencies = [
"gobject-sys", "gobject-sys",
"libc", "libc",
"memchr", "memchr",
"once_cell",
"smallvec", "smallvec",
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "glib-macros" name = "glib-macros"
version = "0.18.5" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" checksum = "2ff52fff7e4d1bb8598ae744e9bb90c8c76271712483c3f0ce931bee9814de85"
dependencies = [ dependencies = [
"heck", "heck",
"proc-macro-crate 2.0.0", "proc-macro-crate 3.1.0",
"proc-macro-error",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.48",
@ -2359,9 +2354,9 @@ dependencies = [
[[package]] [[package]]
name = "glib-sys" name = "glib-sys"
version = "0.18.1" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" checksum = "630f097773d7c7a0bb3258df4e8157b47dc98bbfa0e60ad9ab56174813feced4"
dependencies = [ dependencies = [
"libc", "libc",
"system-deps", "system-deps",
@ -2462,9 +2457,9 @@ dependencies = [
[[package]] [[package]]
name = "gobject-sys" name = "gobject-sys"
version = "0.18.0" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" checksum = "c85e2b1080b9418dd0c58b498da3a5c826030343e0ef07bde6a955d28de54979"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
@ -2473,9 +2468,9 @@ dependencies = [
[[package]] [[package]]
name = "graphene-rs" name = "graphene-rs"
version = "0.18.1" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b2228cda1505613a7a956cca69076892cfbda84fc2b7a62b94a41a272c0c401" checksum = "147827e4f506f8073ac3ec5b28cc2255bdf3abc30f5b4e101a80506eebe11d2c"
dependencies = [ dependencies = [
"glib", "glib",
"graphene-sys", "graphene-sys",
@ -2484,9 +2479,9 @@ dependencies = [
[[package]] [[package]]
name = "graphene-sys" name = "graphene-sys"
version = "0.18.1" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc4144cee8fc8788f2a9b73dc5f1d4e1189d1f95305c4cb7bd9c1af1cfa31f59" checksum = "236ed66cc9b18d8adf233716f75de803d0bf6fc806f60d14d948974a12e240d0"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
@ -2496,9 +2491,9 @@ dependencies = [
[[package]] [[package]]
name = "gsk4" name = "gsk4"
version = "0.7.3" version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d958e351d2f210309b32d081c832d7de0aca0b077aa10d88336c6379bd01f7e" checksum = "0e8ce8dee0fd87a11002214b1204ff18c9272fbd530408f0884a0f9b25dc31de"
dependencies = [ dependencies = [
"cairo-rs", "cairo-rs",
"gdk4", "gdk4",
@ -2511,9 +2506,9 @@ dependencies = [
[[package]] [[package]]
name = "gsk4-sys" name = "gsk4-sys"
version = "0.7.3" version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12bd9e3effea989f020e8f1ff3fa3b8c63ba93d43b899c11a118868853a56d55" checksum = "2660a652da5b662d43924df19ba40d73f015ed427329ef51d2b1360a4e0dc0e4"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk4-sys", "gdk4-sys",
@ -2527,9 +2522,9 @@ dependencies = [
[[package]] [[package]]
name = "gtk4" name = "gtk4"
version = "0.7.3" version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5aeb51aa3e9728575a053e1f43543cd9992ac2477e1b186ad824fd4adfb70842" checksum = "7d26ffa3ec6316ccaa1df62d3e7f5bae1637c0acbb43f250fabef38319f73c64"
dependencies = [ dependencies = [
"cairo-rs", "cairo-rs",
"field-offset", "field-offset",
@ -2548,12 +2543,12 @@ dependencies = [
[[package]] [[package]]
name = "gtk4-macros" name = "gtk4-macros"
version = "0.7.2" version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d57ec49cf9b657f69a05bca8027cff0a8dfd0c49e812be026fc7311f2163832f" checksum = "c8b86439e9896f6f3f47c3d8077c5c8205174078760afdabd9098a8e9e937d97"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"proc-macro-crate 1.3.1", "proc-macro-crate 3.1.0",
"proc-macro-error", "proc-macro-error",
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -2562,9 +2557,9 @@ dependencies = [
[[package]] [[package]]
name = "gtk4-sys" name = "gtk4-sys"
version = "0.7.3" version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54d8c4aa23638ce9faa2caf7e2a27d4a1295af2155c8e8d28c4d4eeca7a65eb8" checksum = "2abc0a6d356d59a3806021829ce6ed3e70bba3509b41a535fedcb09fae13fbc0"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
@ -4072,22 +4067,21 @@ dependencies = [
[[package]] [[package]]
name = "pango" name = "pango"
version = "0.18.3" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" checksum = "78d7f779b957728c74fd1a060dfa6d89a0bea792ebc50cc2da80e4e87282d69e"
dependencies = [ dependencies = [
"gio", "gio",
"glib", "glib",
"libc", "libc",
"once_cell",
"pango-sys", "pango-sys",
] ]
[[package]] [[package]]
name = "pango-sys" name = "pango-sys"
version = "0.18.0" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" checksum = "f52ef6a881c19fbfe3b1484df5cad411acaaba29dbec843941c3110d19f340ea"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
@ -4364,15 +4358,6 @@ dependencies = [
"toml_edit 0.19.15", "toml_edit 0.19.15",
] ]
[[package]]
name = "proc-macro-crate"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8"
dependencies = [
"toml_edit 0.20.7",
]
[[package]] [[package]]
name = "proc-macro-crate" name = "proc-macro-crate"
version = "3.1.0" version = "3.1.0"
@ -5796,17 +5781,6 @@ dependencies = [
"winnow", "winnow",
] ]
[[package]]
name = "toml_edit"
version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
dependencies = [
"indexmap 2.2.2",
"toml_datetime",
"winnow",
]
[[package]] [[package]]
name = "toml_edit" name = "toml_edit"
version = "0.21.1" version = "0.21.1"

@ -10,9 +10,9 @@ homepage = "https://github.com/qarmin/czkawka"
repository = "https://github.com/qarmin/czkawka" repository = "https://github.com/qarmin/czkawka"
[dependencies] [dependencies]
gdk4 = "0.7" gdk4 = "0.8"
glib = "0.18" glib = "0.19"
gtk4 = { version = "0.7", default-features = false, features = ["v4_6"] } gtk4 = { version = "0.8", default-features = false, features = ["v4_6"] }
humansize = "2.1" humansize = "2.1"
chrono = "0.4.33" chrono = "0.4.33"

@ -1,10 +1,11 @@
use std::cell::RefCell; use std::cell::RefCell;
use std::collections::HashMap; use std::collections::HashMap;
use std::rc::Rc; use std::rc::Rc;
use std::time::Duration;
use chrono::NaiveDateTime; use chrono::NaiveDateTime;
use crossbeam_channel::Receiver;
use fun_time::fun_time; use fun_time::fun_time;
use glib::Receiver;
use gtk4::prelude::*; use gtk4::prelude::*;
use gtk4::{Entry, ListStore, TextView, TreeView, Widget}; use gtk4::{Entry, ListStore, TextView, TreeView, Widget};
use humansize::{format_size, BINARY}; use humansize::{format_size, BINARY};
@ -35,7 +36,7 @@ use crate::notebook_enums::*;
use crate::notebook_info::NOTEBOOKS_INFO; use crate::notebook_info::NOTEBOOKS_INFO;
use crate::opening_selecting_records::*; use crate::opening_selecting_records::*;
pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<Message>) { pub fn connect_compute_results(gui_data: &GuiData, result_receiver: Receiver<Message>) {
let combo_box_image_hash_size = gui_data.main_notebook.combo_box_image_hash_size.clone(); let combo_box_image_hash_size = gui_data.main_notebook.combo_box_image_hash_size.clone();
let buttons_search = gui_data.bottom_buttons.buttons_search.clone(); let buttons_search = gui_data.bottom_buttons.buttons_search.clone();
let notebook_main = gui_data.main_notebook.notebook_main.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone();
@ -75,158 +76,166 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
let main_context = glib::MainContext::default(); let main_context = glib::MainContext::default();
let _guard = main_context.acquire().unwrap(); let _guard = main_context.acquire().unwrap();
glib_stop_receiver.attach(None, move |msg| { glib::spawn_future_local(async move {
buttons_search.show(); loop {
loop {
notebook_main.set_sensitive(true); let msg = result_receiver.try_recv();
notebook_upper.set_sensitive(true); if let Ok(msg) = msg {
button_settings.set_sensitive(true); buttons_search.show();
button_app_info.set_sensitive(true);
notebook_main.set_sensitive(true);
window_progress.hide(); notebook_upper.set_sensitive(true);
button_settings.set_sensitive(true);
taskbar_state.borrow().hide(); button_app_info.set_sensitive(true);
let hash_size_index = combo_box_image_hash_size.active().unwrap() as usize; window_progress.hide();
let hash_size = IMAGES_HASH_SIZE_COMBO_BOX[hash_size_index] as u8;
taskbar_state.borrow().hide();
match msg {
Message::Duplicates(df) => { let hash_size_index = combo_box_image_hash_size.active().unwrap() as usize;
computer_duplicate_finder( let hash_size = IMAGES_HASH_SIZE_COMBO_BOX[hash_size_index] as u8;
df,
&entry_info, match msg {
&tree_view_duplicate_finder, Message::Duplicates(df) => {
&text_view_errors, computer_duplicate_finder(
&shared_duplication_state, df,
&shared_buttons, &entry_info,
&buttons_array, &tree_view_duplicate_finder,
&buttons_names, &text_view_errors,
); &shared_duplication_state,
} &shared_buttons,
Message::EmptyFolders(ef) => { &buttons_array,
computer_empty_folders( &buttons_names,
ef, );
&entry_info, }
&tree_view_empty_folder_finder, Message::EmptyFolders(ef) => {
&text_view_errors, computer_empty_folders(
&shared_empty_folders_state, ef,
&shared_buttons, &entry_info,
&buttons_array, &tree_view_empty_folder_finder,
&buttons_names, &text_view_errors,
); &shared_empty_folders_state,
} &shared_buttons,
Message::EmptyFiles(vf) => { &buttons_array,
computer_empty_files( &buttons_names,
vf, );
&entry_info, }
&tree_view_empty_files_finder, Message::EmptyFiles(vf) => {
&text_view_errors, computer_empty_files(
&shared_empty_files_state, vf,
&shared_buttons, &entry_info,
&buttons_array, &tree_view_empty_files_finder,
&buttons_names, &text_view_errors,
); &shared_empty_files_state,
} &shared_buttons,
Message::BigFiles(bf) => { &buttons_array,
computer_big_files( &buttons_names,
bf, );
&entry_info, }
&tree_view_big_files_finder, Message::BigFiles(bf) => {
&text_view_errors, computer_big_files(
&shared_big_files_state, bf,
&shared_buttons, &entry_info,
&buttons_array, &tree_view_big_files_finder,
&buttons_names, &text_view_errors,
); &shared_big_files_state,
} &shared_buttons,
Message::Temporary(tf) => { &buttons_array,
computer_temporary_files( &buttons_names,
tf, );
&entry_info, }
&tree_view_temporary_files_finder, Message::Temporary(tf) => {
&text_view_errors, computer_temporary_files(
&shared_temporary_files_state, tf,
&shared_buttons, &entry_info,
&buttons_array, &tree_view_temporary_files_finder,
&buttons_names, &text_view_errors,
); &shared_temporary_files_state,
} &shared_buttons,
Message::SimilarImages(sf) => { &buttons_array,
computer_similar_images( &buttons_names,
sf, );
&entry_info, }
&tree_view_similar_images_finder, Message::SimilarImages(sf) => {
&text_view_errors, computer_similar_images(
&shared_similar_images_state, sf,
&shared_buttons, &entry_info,
&buttons_array, &tree_view_similar_images_finder,
&buttons_names, &text_view_errors,
hash_size, &shared_similar_images_state,
); &shared_buttons,
} &buttons_array,
Message::SimilarVideos(ff) => { &buttons_names,
computer_similar_videos( hash_size,
ff, );
&entry_info, }
&tree_view_similar_videos_finder, Message::SimilarVideos(ff) => {
&text_view_errors, computer_similar_videos(
&shared_similar_videos_state, ff,
&shared_buttons, &entry_info,
&buttons_array, &tree_view_similar_videos_finder,
&buttons_names, &text_view_errors,
); &shared_similar_videos_state,
} &shared_buttons,
Message::SameMusic(mf) => { &buttons_array,
computer_same_music( &buttons_names,
mf, );
&entry_info, }
&tree_view_same_music_finder, Message::SameMusic(mf) => {
&text_view_errors, computer_same_music(
&shared_same_music_state, mf,
&shared_buttons, &entry_info,
&buttons_array, &tree_view_same_music_finder,
&buttons_names, &text_view_errors,
); &shared_same_music_state,
} &shared_buttons,
Message::InvalidSymlinks(ifs) => { &buttons_array,
computer_invalid_symlinks( &buttons_names,
ifs, );
&entry_info, }
&tree_view_invalid_symlinks, Message::InvalidSymlinks(ifs) => {
&text_view_errors, computer_invalid_symlinks(
&shared_same_invalid_symlinks, ifs,
&shared_buttons, &entry_info,
&buttons_array, &tree_view_invalid_symlinks,
&buttons_names, &text_view_errors,
); &shared_same_invalid_symlinks,
} &shared_buttons,
Message::BrokenFiles(br) => { &buttons_array,
computer_broken_files( &buttons_names,
br, );
&entry_info, }
&tree_view_broken_files, Message::BrokenFiles(br) => {
&text_view_errors, computer_broken_files(
&shared_broken_files_state, br,
&shared_buttons, &entry_info,
&buttons_array, &tree_view_broken_files,
&buttons_names, &text_view_errors,
); &shared_broken_files_state,
} &shared_buttons,
Message::BadExtensions(be) => { &buttons_array,
computer_bad_extensions( &buttons_names,
be, );
&entry_info, }
&tree_view_bad_extensions, Message::BadExtensions(be) => {
&text_view_errors, computer_bad_extensions(
&shared_bad_extensions_state, be,
&shared_buttons, &entry_info,
&buttons_array, &tree_view_bad_extensions,
&buttons_names, &text_view_errors,
); &shared_bad_extensions_state,
&shared_buttons,
&buttons_array,
&buttons_names,
);
}
}
} else {
break;
}
} }
glib::timeout_future(Duration::from_millis(300)).await;
} }
// Returning false here would close the receiver and have senders fail
glib::ControlFlow::Continue
}); });
} }

@ -5,7 +5,6 @@ use std::thread;
use crossbeam_channel::{Receiver, Sender}; use crossbeam_channel::{Receiver, Sender};
use fun_time::fun_time; use fun_time::fun_time;
use glib::Sender as glibSender;
use gtk4::prelude::*; use gtk4::prelude::*;
use gtk4::Grid; use gtk4::Grid;
@ -35,10 +34,10 @@ use crate::taskbar_progress::tbp_flags::TBPF_NOPROGRESS;
use crate::{flg, DEFAULT_MAXIMAL_FILE_SIZE, DEFAULT_MINIMAL_CACHE_SIZE, DEFAULT_MINIMAL_FILE_SIZE}; use crate::{flg, DEFAULT_MAXIMAL_FILE_SIZE, DEFAULT_MINIMAL_CACHE_SIZE, DEFAULT_MINIMAL_FILE_SIZE};
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
pub fn connect_button_search(gui_data: &GuiData, glib_stop_sender: glibSender<Message>, progress_sender: Sender<ProgressData>) { pub fn connect_button_search(gui_data: &GuiData, result_sender: Sender<Message>, progress_sender: Sender<ProgressData>) {
let buttons_array = gui_data.bottom_buttons.buttons_array.clone(); let buttons_array = gui_data.bottom_buttons.buttons_array.clone();
let buttons_search_clone = gui_data.bottom_buttons.buttons_search.clone(); let buttons_search_clone = gui_data.bottom_buttons.buttons_search.clone();
let grid_progress_stages = gui_data.progress_window.grid_progress_stages.clone(); let grid_progress = gui_data.progress_window.grid_progress.clone();
let label_stage = gui_data.progress_window.label_stage.clone(); let label_stage = gui_data.progress_window.label_stage.clone();
let notebook_main = gui_data.main_notebook.notebook_main.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone();
let notebook_upper = gui_data.upper_notebook.notebook_upper.clone(); let notebook_upper = gui_data.upper_notebook.notebook_upper.clone();
@ -55,7 +54,7 @@ pub fn connect_button_search(gui_data: &GuiData, glib_stop_sender: glibSender<Me
let gui_data = gui_data.clone(); let gui_data = gui_data.clone();
buttons_search_clone.connect_clicked(move |_| { buttons_search_clone.connect_clicked(move |_| {
let loaded_common_items = LoadedCommonItems::load_items(&gui_data); let loaded_commons = LoadedCommonItems::load_items(&gui_data);
// Check if user selected all referenced folders // Check if user selected all referenced folders
let list_store_included_directories = get_list_store(&tree_view_included_directories); let list_store_included_directories = get_list_store(&tree_view_included_directories);
@ -83,104 +82,27 @@ pub fn connect_button_search(gui_data: &GuiData, glib_stop_sender: glibSender<Me
reset_text_view(&text_view_errors); reset_text_view(&text_view_errors);
let glib_stop_sender = glib_stop_sender.clone(); let result_sender = result_sender.clone();
let stop_receiver = stop_receiver.clone(); let stop_receiver = stop_receiver.clone();
// Consume any stale stop messages. // Consume any stale stop messages.
stop_receiver.try_iter().for_each(|()| ()); stop_receiver.try_iter().for_each(|()| ());
label_stage.show(); label_stage.show();
let progress_sender = progress_sender.clone();
match to_notebook_main_enum(notebook_main.current_page().unwrap()) { match to_notebook_main_enum(notebook_main.current_page().unwrap()) {
NotebookMainEnum::Duplicate => duplicate_search( NotebookMainEnum::Duplicate => duplicate_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender),
&gui_data, NotebookMainEnum::EmptyFiles => empty_files_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender),
loaded_common_items, NotebookMainEnum::EmptyDirectories => empty_dirs_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender),
stop_receiver, NotebookMainEnum::BigFiles => big_files_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender),
glib_stop_sender, NotebookMainEnum::Temporary => temporary_files_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender),
&grid_progress_stages, NotebookMainEnum::SimilarImages => similar_image_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender),
progress_sender.clone(), NotebookMainEnum::SimilarVideos => similar_video_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender),
), NotebookMainEnum::SameMusic => same_music_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender, &show_dialog),
NotebookMainEnum::EmptyFiles => empty_files_search( NotebookMainEnum::Symlinks => bad_symlinks_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender),
&gui_data, NotebookMainEnum::BrokenFiles => broken_files_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender, &show_dialog),
loaded_common_items, NotebookMainEnum::BadExtensions => bad_extensions_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender),
stop_receiver,
glib_stop_sender,
&grid_progress_stages,
progress_sender.clone(),
),
NotebookMainEnum::EmptyDirectories => empty_directories_search(
&gui_data,
loaded_common_items,
stop_receiver,
glib_stop_sender,
&grid_progress_stages,
progress_sender.clone(),
),
NotebookMainEnum::BigFiles => big_files_search(
&gui_data,
loaded_common_items,
stop_receiver,
glib_stop_sender,
&grid_progress_stages,
progress_sender.clone(),
),
NotebookMainEnum::Temporary => temporary_files_search(
&gui_data,
loaded_common_items,
stop_receiver,
glib_stop_sender,
&grid_progress_stages,
progress_sender.clone(),
),
NotebookMainEnum::SimilarImages => similar_image_search(
&gui_data,
loaded_common_items,
stop_receiver,
glib_stop_sender,
&grid_progress_stages,
progress_sender.clone(),
),
NotebookMainEnum::SimilarVideos => similar_video_search(
&gui_data,
loaded_common_items,
stop_receiver,
glib_stop_sender,
&grid_progress_stages,
progress_sender.clone(),
),
NotebookMainEnum::SameMusic => same_music_search(
&gui_data,
loaded_common_items,
stop_receiver,
glib_stop_sender,
&grid_progress_stages,
progress_sender.clone(),
&show_dialog,
),
NotebookMainEnum::Symlinks => bad_symlinks_search(
&gui_data,
loaded_common_items,
stop_receiver,
glib_stop_sender,
&grid_progress_stages,
progress_sender.clone(),
),
NotebookMainEnum::BrokenFiles => broken_files_search(
&gui_data,
loaded_common_items,
stop_receiver,
glib_stop_sender,
&grid_progress_stages,
progress_sender.clone(),
&show_dialog,
),
NotebookMainEnum::BadExtensions => bad_extensions_search(
&gui_data,
loaded_common_items,
stop_receiver,
glib_stop_sender,
&grid_progress_stages,
progress_sender.clone(),
),
} }
window_progress.set_default_size(1, 1); window_progress.set_default_size(1, 1);
@ -286,13 +208,13 @@ impl LoadedCommonItems {
fn duplicate_search( fn duplicate_search(
gui_data: &GuiData, gui_data: &GuiData,
loaded_common_items: LoadedCommonItems, loaded_commons: LoadedCommonItems,
stop_receiver: Receiver<()>, stop_receiver: Receiver<()>,
glib_stop_sender: glibSender<Message>, result_sender: Sender<Message>,
grid_progress_stages: &Grid, grid_progress: &Grid,
progress_data_sender: Sender<ProgressData>, progress_data_sender: Sender<ProgressData>,
) { ) {
grid_progress_stages.show(); grid_progress.show();
let combo_box_duplicate_check_method = gui_data.main_notebook.combo_box_duplicate_check_method.clone(); let combo_box_duplicate_check_method = gui_data.main_notebook.combo_box_duplicate_check_method.clone();
let combo_box_duplicate_hash_type = gui_data.main_notebook.combo_box_duplicate_hash_type.clone(); let combo_box_duplicate_hash_type = gui_data.main_notebook.combo_box_duplicate_hash_type.clone();
@ -325,30 +247,30 @@ fn duplicate_search(
.spawn(move || { .spawn(move || {
let mut item = DuplicateFinder::new(); let mut item = DuplicateFinder::new();
set_common_settings(&mut item, &loaded_common_items); set_common_settings(&mut item, &loaded_commons);
item.set_minimal_cache_file_size(loaded_common_items.minimal_cache_file_size); item.set_minimal_cache_file_size(loaded_commons.minimal_cache_file_size);
item.set_minimal_prehash_cache_file_size(minimal_prehash_cache_file_size); item.set_minimal_prehash_cache_file_size(minimal_prehash_cache_file_size);
item.set_check_method(check_method); item.set_check_method(check_method);
item.set_hash_type(hash_type); item.set_hash_type(hash_type);
item.set_ignore_hard_links(loaded_common_items.hide_hard_links); item.set_ignore_hard_links(loaded_commons.hide_hard_links);
item.set_use_prehash_cache(use_prehash_cache); item.set_use_prehash_cache(use_prehash_cache);
item.set_delete_outdated_cache(delete_outdated_cache); item.set_delete_outdated_cache(delete_outdated_cache);
item.set_case_sensitive_name_comparison(case_sensitive_name_comparison); item.set_case_sensitive_name_comparison(case_sensitive_name_comparison);
item.find_duplicates(Some(&stop_receiver), Some(&progress_data_sender)); item.find_duplicates(Some(&stop_receiver), Some(&progress_data_sender));
glib_stop_sender.send(Message::Duplicates(item)).unwrap(); result_sender.send(Message::Duplicates(item)).unwrap();
}) })
.unwrap(); .unwrap();
} }
fn empty_files_search( fn empty_files_search(
gui_data: &GuiData, gui_data: &GuiData,
loaded_common_items: LoadedCommonItems, loaded_commons: LoadedCommonItems,
stop_receiver: Receiver<()>, stop_receiver: Receiver<()>,
glib_stop_sender: glibSender<Message>, result_sender: Sender<Message>,
grid_progress_stages: &Grid, grid_progress: &Grid,
progress_data_sender: Sender<ProgressData>, progress_data_sender: Sender<ProgressData>,
) { ) {
grid_progress_stages.hide(); grid_progress.hide();
let tree_view_empty_files_finder = gui_data.main_notebook.tree_view_empty_files_finder.clone(); let tree_view_empty_files_finder = gui_data.main_notebook.tree_view_empty_files_finder.clone();
clean_tree_view(&tree_view_empty_files_finder); clean_tree_view(&tree_view_empty_files_finder);
@ -358,22 +280,22 @@ fn empty_files_search(
.spawn(move || { .spawn(move || {
let mut item = EmptyFiles::new(); let mut item = EmptyFiles::new();
set_common_settings(&mut item, &loaded_common_items); set_common_settings(&mut item, &loaded_commons);
item.find_empty_files(Some(&stop_receiver), Some(&progress_data_sender)); item.find_empty_files(Some(&stop_receiver), Some(&progress_data_sender));
glib_stop_sender.send(Message::EmptyFiles(item)).unwrap(); result_sender.send(Message::EmptyFiles(item)).unwrap();
}) })
.unwrap(); .unwrap();
} }
fn empty_directories_search( fn empty_dirs_search(
gui_data: &GuiData, gui_data: &GuiData,
loaded_common_items: LoadedCommonItems, loaded_commons: LoadedCommonItems,
stop_receiver: Receiver<()>, stop_receiver: Receiver<()>,
glib_stop_sender: glibSender<Message>, result_sender: Sender<Message>,
grid_progress_stages: &Grid, grid_progress: &Grid,
progress_data_sender: Sender<ProgressData>, progress_data_sender: Sender<ProgressData>,
) { ) {
grid_progress_stages.hide(); grid_progress.hide();
let tree_view_empty_folder_finder = gui_data.main_notebook.tree_view_empty_folder_finder.clone(); let tree_view_empty_folder_finder = gui_data.main_notebook.tree_view_empty_folder_finder.clone();
clean_tree_view(&tree_view_empty_folder_finder); clean_tree_view(&tree_view_empty_folder_finder);
@ -383,22 +305,22 @@ fn empty_directories_search(
.spawn(move || { .spawn(move || {
let mut item = EmptyFolder::new(); let mut item = EmptyFolder::new();
set_common_settings(&mut item, &loaded_common_items); set_common_settings(&mut item, &loaded_commons);
item.find_empty_folders(Some(&stop_receiver), Some(&progress_data_sender)); item.find_empty_folders(Some(&stop_receiver), Some(&progress_data_sender));
glib_stop_sender.send(Message::EmptyFolders(item)).unwrap(); result_sender.send(Message::EmptyFolders(item)).unwrap();
}) })
.unwrap(); .unwrap();
} }
fn big_files_search( fn big_files_search(
gui_data: &GuiData, gui_data: &GuiData,
loaded_common_items: LoadedCommonItems, loaded_commons: LoadedCommonItems,
stop_receiver: Receiver<()>, stop_receiver: Receiver<()>,
glib_stop_sender: glibSender<Message>, result_sender: Sender<Message>,
grid_progress_stages: &Grid, grid_progress: &Grid,
progress_data_sender: Sender<ProgressData>, progress_data_sender: Sender<ProgressData>,
) { ) {
grid_progress_stages.hide(); grid_progress.hide();
let combo_box_big_files_mode = gui_data.main_notebook.combo_box_big_files_mode.clone(); let combo_box_big_files_mode = gui_data.main_notebook.combo_box_big_files_mode.clone();
let entry_big_files_number = gui_data.main_notebook.entry_big_files_number.clone(); let entry_big_files_number = gui_data.main_notebook.entry_big_files_number.clone();
@ -415,24 +337,24 @@ fn big_files_search(
.spawn(move || { .spawn(move || {
let mut item = BigFile::new(); let mut item = BigFile::new();
set_common_settings(&mut item, &loaded_common_items); set_common_settings(&mut item, &loaded_commons);
item.set_number_of_files_to_check(numbers_of_files_to_check); item.set_number_of_files_to_check(numbers_of_files_to_check);
item.set_search_mode(big_files_mode); item.set_search_mode(big_files_mode);
item.find_big_files(Some(&stop_receiver), Some(&progress_data_sender)); item.find_big_files(Some(&stop_receiver), Some(&progress_data_sender));
glib_stop_sender.send(Message::BigFiles(item)).unwrap(); result_sender.send(Message::BigFiles(item)).unwrap();
}) })
.unwrap(); .unwrap();
} }
fn temporary_files_search( fn temporary_files_search(
gui_data: &GuiData, gui_data: &GuiData,
loaded_common_items: LoadedCommonItems, loaded_commons: LoadedCommonItems,
stop_receiver: Receiver<()>, stop_receiver: Receiver<()>,
glib_stop_sender: glibSender<Message>, result_sender: Sender<Message>,
grid_progress_stages: &Grid, grid_progress: &Grid,
progress_data_sender: Sender<ProgressData>, progress_data_sender: Sender<ProgressData>,
) { ) {
grid_progress_stages.hide(); grid_progress.hide();
let tree_view_temporary_files_finder = gui_data.main_notebook.tree_view_temporary_files_finder.clone(); let tree_view_temporary_files_finder = gui_data.main_notebook.tree_view_temporary_files_finder.clone();
clean_tree_view(&tree_view_temporary_files_finder); clean_tree_view(&tree_view_temporary_files_finder);
@ -442,23 +364,23 @@ fn temporary_files_search(
.spawn(move || { .spawn(move || {
let mut item = Temporary::new(); let mut item = Temporary::new();
set_common_settings(&mut item, &loaded_common_items); set_common_settings(&mut item, &loaded_commons);
item.find_temporary_files(Some(&stop_receiver), Some(&progress_data_sender)); item.find_temporary_files(Some(&stop_receiver), Some(&progress_data_sender));
glib_stop_sender.send(Message::Temporary(item)).unwrap(); result_sender.send(Message::Temporary(item)).unwrap();
}) })
.unwrap(); .unwrap();
} }
fn same_music_search( fn same_music_search(
gui_data: &GuiData, gui_data: &GuiData,
loaded_common_items: LoadedCommonItems, loaded_commons: LoadedCommonItems,
stop_receiver: Receiver<()>, stop_receiver: Receiver<()>,
glib_stop_sender: glibSender<Message>, result_sender: Sender<Message>,
grid_progress_stages: &Grid, grid_progress: &Grid,
progress_data_sender: Sender<ProgressData>, progress_data_sender: Sender<ProgressData>,
show_dialog: &Arc<AtomicBool>, show_dialog: &Arc<AtomicBool>,
) { ) {
grid_progress_stages.show(); grid_progress.show();
let check_button_music_artist: gtk4::CheckButton = gui_data.main_notebook.check_button_music_artist.clone(); let check_button_music_artist: gtk4::CheckButton = gui_data.main_notebook.check_button_music_artist.clone();
let check_button_music_title: gtk4::CheckButton = gui_data.main_notebook.check_button_music_title.clone(); let check_button_music_title: gtk4::CheckButton = gui_data.main_notebook.check_button_music_title.clone();
@ -509,14 +431,14 @@ fn same_music_search(
.spawn(move || { .spawn(move || {
let mut item = SameMusic::new(); let mut item = SameMusic::new();
set_common_settings(&mut item, &loaded_common_items); set_common_settings(&mut item, &loaded_commons);
item.set_music_similarity(music_similarity); item.set_music_similarity(music_similarity);
item.set_maximum_difference(maximum_difference); item.set_maximum_difference(maximum_difference);
item.set_minimum_segment_duration(minimum_segment_duration); item.set_minimum_segment_duration(minimum_segment_duration);
item.set_check_type(check_method); item.set_check_type(check_method);
item.set_approximate_comparison(approximate_comparison); item.set_approximate_comparison(approximate_comparison);
item.find_same_music(Some(&stop_receiver), Some(&progress_data_sender)); item.find_same_music(Some(&stop_receiver), Some(&progress_data_sender));
glib_stop_sender.send(Message::SameMusic(item)).unwrap(); result_sender.send(Message::SameMusic(item)).unwrap();
}) })
.unwrap(); .unwrap();
} else { } else {
@ -546,14 +468,14 @@ fn same_music_search(
fn broken_files_search( fn broken_files_search(
gui_data: &GuiData, gui_data: &GuiData,
loaded_common_items: LoadedCommonItems, loaded_commons: LoadedCommonItems,
stop_receiver: Receiver<()>, stop_receiver: Receiver<()>,
glib_stop_sender: glibSender<Message>, result_sender: Sender<Message>,
grid_progress_stages: &Grid, grid_progress: &Grid,
progress_data_sender: Sender<ProgressData>, progress_data_sender: Sender<ProgressData>,
show_dialog: &Arc<AtomicBool>, show_dialog: &Arc<AtomicBool>,
) { ) {
grid_progress_stages.show(); grid_progress.show();
let check_button_broken_files_archive: gtk4::CheckButton = gui_data.main_notebook.check_button_broken_files_archive.clone(); let check_button_broken_files_archive: gtk4::CheckButton = gui_data.main_notebook.check_button_broken_files_archive.clone();
let check_button_broken_files_pdf: gtk4::CheckButton = gui_data.main_notebook.check_button_broken_files_pdf.clone(); let check_button_broken_files_pdf: gtk4::CheckButton = gui_data.main_notebook.check_button_broken_files_pdf.clone();
@ -584,10 +506,10 @@ fn broken_files_search(
.spawn(move || { .spawn(move || {
let mut item = BrokenFiles::new(); let mut item = BrokenFiles::new();
set_common_settings(&mut item, &loaded_common_items); set_common_settings(&mut item, &loaded_commons);
item.set_checked_types(checked_types); item.set_checked_types(checked_types);
item.find_broken_files(Some(&stop_receiver), Some(&progress_data_sender)); item.find_broken_files(Some(&stop_receiver), Some(&progress_data_sender));
glib_stop_sender.send(Message::BrokenFiles(item)).unwrap(); result_sender.send(Message::BrokenFiles(item)).unwrap();
}) })
.unwrap(); .unwrap();
} else { } else {
@ -617,13 +539,13 @@ fn broken_files_search(
fn similar_image_search( fn similar_image_search(
gui_data: &GuiData, gui_data: &GuiData,
loaded_common_items: LoadedCommonItems, loaded_commons: LoadedCommonItems,
stop_receiver: Receiver<()>, stop_receiver: Receiver<()>,
glib_stop_sender: glibSender<Message>, result_sender: Sender<Message>,
grid_progress_stages: &Grid, grid_progress: &Grid,
progress_data_sender: Sender<ProgressData>, progress_data_sender: Sender<ProgressData>,
) { ) {
grid_progress_stages.show(); grid_progress.show();
let combo_box_image_hash_size = gui_data.main_notebook.combo_box_image_hash_size.clone(); let combo_box_image_hash_size = gui_data.main_notebook.combo_box_image_hash_size.clone();
let combo_box_image_hash_algorithm = gui_data.main_notebook.combo_box_image_hash_algorithm.clone(); let combo_box_image_hash_algorithm = gui_data.main_notebook.combo_box_image_hash_algorithm.clone();
@ -657,7 +579,7 @@ fn similar_image_search(
.spawn(move || { .spawn(move || {
let mut item = SimilarImages::new(); let mut item = SimilarImages::new();
set_common_settings(&mut item, &loaded_common_items); set_common_settings(&mut item, &loaded_commons);
item.set_similarity(similarity); item.set_similarity(similarity);
item.set_hash_alg(hash_alg); item.set_hash_alg(hash_alg);
item.set_hash_size(hash_size); item.set_hash_size(hash_size);
@ -665,20 +587,20 @@ fn similar_image_search(
item.set_delete_outdated_cache(delete_outdated_cache); item.set_delete_outdated_cache(delete_outdated_cache);
item.set_exclude_images_with_same_size(ignore_same_size); item.set_exclude_images_with_same_size(ignore_same_size);
item.find_similar_images(Some(&stop_receiver), Some(&progress_data_sender)); item.find_similar_images(Some(&stop_receiver), Some(&progress_data_sender));
glib_stop_sender.send(Message::SimilarImages(item)).unwrap(); result_sender.send(Message::SimilarImages(item)).unwrap();
}) })
.unwrap(); .unwrap();
} }
fn similar_video_search( fn similar_video_search(
gui_data: &GuiData, gui_data: &GuiData,
loaded_common_items: LoadedCommonItems, loaded_commons: LoadedCommonItems,
stop_receiver: Receiver<()>, stop_receiver: Receiver<()>,
glib_stop_sender: glibSender<Message>, result_sender: Sender<Message>,
grid_progress_stages: &Grid, grid_progress: &Grid,
progress_data_sender: Sender<ProgressData>, progress_data_sender: Sender<ProgressData>,
) { ) {
grid_progress_stages.show(); grid_progress.show();
let check_button_video_ignore_same_size = gui_data.main_notebook.check_button_video_ignore_same_size.clone(); let check_button_video_ignore_same_size = gui_data.main_notebook.check_button_video_ignore_same_size.clone();
let check_button_settings_similar_videos_delete_outdated_cache = gui_data.settings.check_button_settings_similar_videos_delete_outdated_cache.clone(); let check_button_settings_similar_videos_delete_outdated_cache = gui_data.settings.check_button_settings_similar_videos_delete_outdated_cache.clone();
@ -697,25 +619,25 @@ fn similar_video_search(
.spawn(move || { .spawn(move || {
let mut item = SimilarVideos::new(); let mut item = SimilarVideos::new();
set_common_settings(&mut item, &loaded_common_items); set_common_settings(&mut item, &loaded_commons);
item.set_tolerance(tolerance); item.set_tolerance(tolerance);
item.set_delete_outdated_cache(delete_outdated_cache); item.set_delete_outdated_cache(delete_outdated_cache);
item.set_exclude_videos_with_same_size(ignore_same_size); item.set_exclude_videos_with_same_size(ignore_same_size);
item.find_similar_videos(Some(&stop_receiver), Some(&progress_data_sender)); item.find_similar_videos(Some(&stop_receiver), Some(&progress_data_sender));
glib_stop_sender.send(Message::SimilarVideos(item)).unwrap(); result_sender.send(Message::SimilarVideos(item)).unwrap();
}) })
.unwrap(); .unwrap();
} }
fn bad_symlinks_search( fn bad_symlinks_search(
gui_data: &GuiData, gui_data: &GuiData,
loaded_common_items: LoadedCommonItems, loaded_commons: LoadedCommonItems,
stop_receiver: Receiver<()>, stop_receiver: Receiver<()>,
glib_stop_sender: glibSender<Message>, result_sender: Sender<Message>,
grid_progress_stages: &Grid, grid_progress: &Grid,
progress_data_sender: Sender<ProgressData>, progress_data_sender: Sender<ProgressData>,
) { ) {
grid_progress_stages.hide(); grid_progress.hide();
let tree_view_invalid_symlinks = gui_data.main_notebook.tree_view_invalid_symlinks.clone(); let tree_view_invalid_symlinks = gui_data.main_notebook.tree_view_invalid_symlinks.clone();
clean_tree_view(&tree_view_invalid_symlinks); clean_tree_view(&tree_view_invalid_symlinks);
@ -725,22 +647,22 @@ fn bad_symlinks_search(
.spawn(move || { .spawn(move || {
let mut item = InvalidSymlinks::new(); let mut item = InvalidSymlinks::new();
set_common_settings(&mut item, &loaded_common_items); set_common_settings(&mut item, &loaded_commons);
item.find_invalid_links(Some(&stop_receiver), Some(&progress_data_sender)); item.find_invalid_links(Some(&stop_receiver), Some(&progress_data_sender));
glib_stop_sender.send(Message::InvalidSymlinks(item)).unwrap(); result_sender.send(Message::InvalidSymlinks(item)).unwrap();
}) })
.unwrap(); .unwrap();
} }
fn bad_extensions_search( fn bad_extensions_search(
gui_data: &GuiData, gui_data: &GuiData,
loaded_common_items: LoadedCommonItems, loaded_commons: LoadedCommonItems,
stop_receiver: Receiver<()>, stop_receiver: Receiver<()>,
glib_stop_sender: glibSender<Message>, result_sender: Sender<Message>,
grid_progress_stages: &Grid, grid_progress: &Grid,
progress_data_sender: Sender<ProgressData>, progress_data_sender: Sender<ProgressData>,
) { ) {
grid_progress_stages.show(); grid_progress.show();
let tree_view_bad_extensions = gui_data.main_notebook.tree_view_bad_extensions.clone(); let tree_view_bad_extensions = gui_data.main_notebook.tree_view_bad_extensions.clone();
clean_tree_view(&tree_view_bad_extensions); clean_tree_view(&tree_view_bad_extensions);
@ -750,29 +672,29 @@ fn bad_extensions_search(
.spawn(move || { .spawn(move || {
let mut item = BadExtensions::new(); let mut item = BadExtensions::new();
set_common_settings(&mut item, &loaded_common_items); set_common_settings(&mut item, &loaded_commons);
item.find_bad_extensions_files(Some(&stop_receiver), Some(&progress_data_sender)); item.find_bad_extensions_files(Some(&stop_receiver), Some(&progress_data_sender));
glib_stop_sender.send(Message::BadExtensions(item)).unwrap(); result_sender.send(Message::BadExtensions(item)).unwrap();
}) })
.unwrap(); .unwrap();
} }
fn set_common_settings<T>(component: &mut T, loaded_common_items: &LoadedCommonItems) fn set_common_settings<T>(component: &mut T, loaded_commons: &LoadedCommonItems)
where where
T: CommonData, T: CommonData,
{ {
component.set_included_directory(loaded_common_items.included_directories.clone()); component.set_included_directory(loaded_commons.included_directories.clone());
component.set_excluded_directory(loaded_common_items.excluded_directories.clone()); component.set_excluded_directory(loaded_commons.excluded_directories.clone());
component.set_reference_directory(loaded_common_items.reference_directories.clone()); component.set_reference_directory(loaded_commons.reference_directories.clone());
component.set_recursive_search(loaded_common_items.recursive_search); component.set_recursive_search(loaded_commons.recursive_search);
component.set_allowed_extensions(loaded_common_items.allowed_extensions.clone()); component.set_allowed_extensions(loaded_commons.allowed_extensions.clone());
component.set_excluded_extensions(loaded_common_items.excluded_extensions.clone()); component.set_excluded_extensions(loaded_commons.excluded_extensions.clone());
component.set_excluded_items(loaded_common_items.excluded_items.clone()); component.set_excluded_items(loaded_commons.excluded_items.clone());
component.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); component.set_exclude_other_filesystems(loaded_commons.ignore_other_filesystems);
component.set_use_cache(loaded_common_items.use_cache); component.set_use_cache(loaded_commons.use_cache);
component.set_save_also_as_json(loaded_common_items.save_also_as_json); component.set_save_also_as_json(loaded_commons.save_also_as_json);
component.set_minimal_file_size(loaded_common_items.minimal_file_size); component.set_minimal_file_size(loaded_commons.minimal_file_size);
component.set_maximal_file_size(loaded_common_items.maximal_file_size); component.set_maximal_file_size(loaded_commons.maximal_file_size);
} }
#[fun_time(message = "clean_tree_view", level = "debug")] #[fun_time(message = "clean_tree_view", level = "debug")]

@ -15,7 +15,7 @@ pub struct GuiProgressDialog {
pub label_progress_current_stage: gtk4::Label, pub label_progress_current_stage: gtk4::Label,
pub label_progress_all_stages: gtk4::Label, pub label_progress_all_stages: gtk4::Label,
pub grid_progress_stages: gtk4::Grid, pub grid_progress: gtk4::Grid,
pub button_stop_in_dialog: gtk4::Button, pub button_stop_in_dialog: gtk4::Button,
pub evk_button_stop_in_dialog: EventControllerKey, pub evk_button_stop_in_dialog: EventControllerKey,
@ -38,7 +38,7 @@ impl GuiProgressDialog {
let label_progress_current_stage: gtk4::Label = builder.object("label_progress_current_stage").unwrap(); let label_progress_current_stage: gtk4::Label = builder.object("label_progress_current_stage").unwrap();
let label_progress_all_stages: gtk4::Label = builder.object("label_progress_all_stages").unwrap(); let label_progress_all_stages: gtk4::Label = builder.object("label_progress_all_stages").unwrap();
let grid_progress_stages: gtk4::Grid = builder.object("grid_progress_stages").unwrap(); let grid_progress: gtk4::Grid = builder.object("grid_progress").unwrap();
let button_stop_in_dialog: gtk4::Button = builder.object("button_stop_in_dialog").unwrap(); let button_stop_in_dialog: gtk4::Button = builder.object("button_stop_in_dialog").unwrap();
let evk_button_stop_in_dialog = EventControllerKey::new(); let evk_button_stop_in_dialog = EventControllerKey::new();
@ -53,7 +53,7 @@ impl GuiProgressDialog {
label_stage, label_stage,
label_progress_current_stage, label_progress_current_stage,
label_progress_all_stages, label_progress_all_stages,
grid_progress_stages, grid_progress,
button_stop_in_dialog, button_stop_in_dialog,
evk_button_stop_in_dialog, evk_button_stop_in_dialog,
} }

@ -9,7 +9,6 @@ use std::env;
use std::ffi::OsString; use std::ffi::OsString;
use crossbeam_channel::{unbounded, Receiver, Sender}; use crossbeam_channel::{unbounded, Receiver, Sender};
use glib::Priority;
use gtk4::gio::ApplicationFlags; use gtk4::gio::ApplicationFlags;
use gtk4::prelude::*; use gtk4::prelude::*;
use gtk4::Application; use gtk4::Application;
@ -82,10 +81,7 @@ fn main() {
fn build_ui(application: &Application, arguments: &[OsString]) { fn build_ui(application: &Application, arguments: &[OsString]) {
let gui_data: GuiData = GuiData::new_with_application(application); let gui_data: GuiData = GuiData::new_with_application(application);
// Used for getting data from thread let (result_sender, result_receiver) = unbounded();
// TODO - deprecation happened without any example, so not sure how new code should look like
#[allow(deprecated)]
let (glib_stop_sender, glib_stop_receiver) = glib::MainContext::channel(Priority::default());
// Futures progress report // Futures progress report
let (progress_sender, progress_receiver): (Sender<ProgressData>, Receiver<ProgressData>) = unbounded(); let (progress_sender, progress_receiver): (Sender<ProgressData>, Receiver<ProgressData>) = unbounded();
@ -111,7 +107,7 @@ fn build_ui(application: &Application, arguments: &[OsString]) {
connect_button_delete(&gui_data); connect_button_delete(&gui_data);
connect_button_save(&gui_data); connect_button_save(&gui_data);
connect_button_search(&gui_data, glib_stop_sender, progress_sender); connect_button_search(&gui_data, result_sender, progress_sender);
connect_button_select(&gui_data); connect_button_select(&gui_data);
connect_button_sort(&gui_data); connect_button_sort(&gui_data);
connect_button_stop(&gui_data); connect_button_stop(&gui_data);
@ -124,7 +120,7 @@ fn build_ui(application: &Application, arguments: &[OsString]) {
connect_selection_of_directories(&gui_data); connect_selection_of_directories(&gui_data);
connect_popover_select(&gui_data); connect_popover_select(&gui_data);
connect_popover_sort(&gui_data); connect_popover_sort(&gui_data);
connect_compute_results(&gui_data, glib_stop_receiver); connect_compute_results(&gui_data, result_receiver);
connect_progress_window(&gui_data, progress_receiver); connect_progress_window(&gui_data, progress_receiver);
connect_show_hide_ui(&gui_data); connect_show_hide_ui(&gui_data);
connect_settings(&gui_data); connect_settings(&gui_data);

@ -267,7 +267,7 @@
(7,17,"GtkButton","buttons_popover_unselect_all",2,None,None,None,14,None), (7,17,"GtkButton","buttons_popover_unselect_all",2,None,None,None,14,None),
(8,15,"GtkDialog","window_progress",None,None,None,None,None,None), (8,15,"GtkDialog","window_progress",None,None,None,None,None,None),
(8,16,"GtkBox",None,15,None,None,None,None,None), (8,16,"GtkBox",None,15,None,None,None,None,None),
(8,17,"GtkGrid","grid_progress_stages",16,None,None,None,None,None), (8,17,"GtkGrid","grid_progress",16,None,None,None,None,None),
(8,18,"GtkLabel","label_progress_all_stages",17,None,None,None,None,None), (8,18,"GtkLabel","label_progress_all_stages",17,None,None,None,None,None),
(8,19,"GtkProgressBar","progress_bar_all_stages",17,None,None,None,1,None), (8,19,"GtkProgressBar","progress_bar_all_stages",17,None,None,None,1,None),
(8,20,"GtkLabel","label_progress_current_stage",17,None,None,None,2,None), (8,20,"GtkLabel","label_progress_current_stage",17,None,None,None,2,None),

@ -13,7 +13,7 @@
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="spacing">10</property> <property name="spacing">10</property>
<child> <child>
<object class="GtkGrid" id="grid_progress_stages"> <object class="GtkGrid" id="grid_progress">
<property name="margin-end">2</property> <property name="margin-end">2</property>
<property name="margin-start">2</property> <property name="margin-start">2</property>
<property name="margin-top">2</property> <property name="margin-top">2</property>

Loading…
Cancel
Save