From 1844f69b719d4d4d4d220d84baa7bb3077407f93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= Date: Wed, 7 Feb 2024 10:23:01 +0100 Subject: [PATCH] Up --- Cargo.lock | 116 +++---- czkawka_gui/Cargo.toml | 6 +- czkawka_gui/src/compute_results.rs | 313 +++++++++--------- .../connect_things/connect_button_search.rs | 276 ++++++--------- .../src/gui_structs/gui_progress_dialog.rs | 6 +- czkawka_gui/src/main.rs | 10 +- czkawka_gui/ui/czkawka.cmb | 2 +- czkawka_gui/ui/progress.ui | 2 +- 8 files changed, 316 insertions(+), 415 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1e4d6af..75b52e3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -654,23 +654,22 @@ dependencies = [ [[package]] name = "cairo-rs" -version = "0.18.5" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +checksum = "bc1c415b7088381c53c575420899c34c9e6312df5ac5defd05614210e9fd6e1b" dependencies = [ "bitflags 2.4.2", "cairo-sys-rs", "glib", "libc", - "once_cell", "thiserror", ] [[package]] name = "cairo-sys-rs" -version = "0.18.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +checksum = "75b6a5fefce2eadb8333e3c604ac964ba6573ec4f28bdd17f67032c4a2831831" dependencies = [ "glib-sys", "libc", @@ -2148,22 +2147,21 @@ dependencies = [ [[package]] name = "gdk-pixbuf" -version = "0.18.5" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +checksum = "c311c47800051b87de1335e8792774d7cec551c91a0a3d109ab21d76b36f208f" dependencies = [ "gdk-pixbuf-sys", "gio", "glib", "libc", - "once_cell", ] [[package]] name = "gdk-pixbuf-sys" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +checksum = "3dcbd04c1b2c4834cc008b4828bc917d062483b88d26effde6342e5622028f96" dependencies = [ "gio-sys", "glib-sys", @@ -2174,9 +2172,9 @@ dependencies = [ [[package]] name = "gdk4" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edb019ad581f8ecf8ea8e4baa6df7c483a95b5a59be3140be6a9c3b0c632af6" +checksum = "6771942f85a2beaa220c64739395e4401b9fab4a52aba9b503fa1e6ed4d4d806" dependencies = [ "cairo-rs", "gdk-pixbuf", @@ -2189,9 +2187,9 @@ dependencies = [ [[package]] name = "gdk4-sys" -version = "0.7.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbab43f332a3cf1df9974da690b5bb0e26720ed09a228178ce52175372dcfef0" +checksum = "1eb95854fab65072023a7814434f003db571d6e45c287c0b0c540c1c78bdf6ae" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -2279,9 +2277,9 @@ dependencies = [ [[package]] name = "gio" -version = "0.18.4" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +checksum = "b3d1aaa2d926710a27f3b35822806b1513b393b71174dd2601c9d02fdab0cb82" dependencies = [ "futures-channel", "futures-core", @@ -2290,7 +2288,6 @@ dependencies = [ "gio-sys", "glib", "libc", - "once_cell", "pin-project-lite", "smallvec", "thiserror", @@ -2298,15 +2295,15 @@ dependencies = [ [[package]] name = "gio-sys" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +checksum = "bcf8e1d9219bb294636753d307b030c1e8a032062cba74f493c431a5c8b81ce4" dependencies = [ "glib-sys", "gobject-sys", "libc", "system-deps", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -2322,9 +2319,9 @@ dependencies = [ [[package]] name = "glib" -version = "0.18.5" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +checksum = "170ee82b9b44b3b5fd1cf4971d6cf0eadec38303bb84c7bcc4e6b95a18934e71" dependencies = [ "bitflags 2.4.2", "futures-channel", @@ -2338,20 +2335,18 @@ dependencies = [ "gobject-sys", "libc", "memchr", - "once_cell", "smallvec", "thiserror", ] [[package]] name = "glib-macros" -version = "0.18.5" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +checksum = "2ff52fff7e4d1bb8598ae744e9bb90c8c76271712483c3f0ce931bee9814de85" dependencies = [ "heck", - "proc-macro-crate 2.0.0", - "proc-macro-error", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", "syn 2.0.48", @@ -2359,9 +2354,9 @@ dependencies = [ [[package]] name = "glib-sys" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +checksum = "630f097773d7c7a0bb3258df4e8157b47dc98bbfa0e60ad9ab56174813feced4" dependencies = [ "libc", "system-deps", @@ -2462,9 +2457,9 @@ dependencies = [ [[package]] name = "gobject-sys" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +checksum = "c85e2b1080b9418dd0c58b498da3a5c826030343e0ef07bde6a955d28de54979" dependencies = [ "glib-sys", "libc", @@ -2473,9 +2468,9 @@ dependencies = [ [[package]] name = "graphene-rs" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2228cda1505613a7a956cca69076892cfbda84fc2b7a62b94a41a272c0c401" +checksum = "147827e4f506f8073ac3ec5b28cc2255bdf3abc30f5b4e101a80506eebe11d2c" dependencies = [ "glib", "graphene-sys", @@ -2484,9 +2479,9 @@ dependencies = [ [[package]] name = "graphene-sys" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc4144cee8fc8788f2a9b73dc5f1d4e1189d1f95305c4cb7bd9c1af1cfa31f59" +checksum = "236ed66cc9b18d8adf233716f75de803d0bf6fc806f60d14d948974a12e240d0" dependencies = [ "glib-sys", "libc", @@ -2496,9 +2491,9 @@ dependencies = [ [[package]] name = "gsk4" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d958e351d2f210309b32d081c832d7de0aca0b077aa10d88336c6379bd01f7e" +checksum = "0e8ce8dee0fd87a11002214b1204ff18c9272fbd530408f0884a0f9b25dc31de" dependencies = [ "cairo-rs", "gdk4", @@ -2511,9 +2506,9 @@ dependencies = [ [[package]] name = "gsk4-sys" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12bd9e3effea989f020e8f1ff3fa3b8c63ba93d43b899c11a118868853a56d55" +checksum = "2660a652da5b662d43924df19ba40d73f015ed427329ef51d2b1360a4e0dc0e4" dependencies = [ "cairo-sys-rs", "gdk4-sys", @@ -2527,9 +2522,9 @@ dependencies = [ [[package]] name = "gtk4" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aeb51aa3e9728575a053e1f43543cd9992ac2477e1b186ad824fd4adfb70842" +checksum = "7d26ffa3ec6316ccaa1df62d3e7f5bae1637c0acbb43f250fabef38319f73c64" dependencies = [ "cairo-rs", "field-offset", @@ -2548,12 +2543,12 @@ dependencies = [ [[package]] name = "gtk4-macros" -version = "0.7.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d57ec49cf9b657f69a05bca8027cff0a8dfd0c49e812be026fc7311f2163832f" +checksum = "c8b86439e9896f6f3f47c3d8077c5c8205174078760afdabd9098a8e9e937d97" dependencies = [ "anyhow", - "proc-macro-crate 1.3.1", + "proc-macro-crate 3.1.0", "proc-macro-error", "proc-macro2", "quote", @@ -2562,9 +2557,9 @@ dependencies = [ [[package]] name = "gtk4-sys" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54d8c4aa23638ce9faa2caf7e2a27d4a1295af2155c8e8d28c4d4eeca7a65eb8" +checksum = "2abc0a6d356d59a3806021829ce6ed3e70bba3509b41a535fedcb09fae13fbc0" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -4072,22 +4067,21 @@ dependencies = [ [[package]] name = "pango" -version = "0.18.3" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +checksum = "78d7f779b957728c74fd1a060dfa6d89a0bea792ebc50cc2da80e4e87282d69e" dependencies = [ "gio", "glib", "libc", - "once_cell", "pango-sys", ] [[package]] name = "pango-sys" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +checksum = "f52ef6a881c19fbfe3b1484df5cad411acaaba29dbec843941c3110d19f340ea" dependencies = [ "glib-sys", "gobject-sys", @@ -4364,15 +4358,6 @@ dependencies = [ "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]] name = "proc-macro-crate" version = "3.1.0" @@ -5796,17 +5781,6 @@ dependencies = [ "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]] name = "toml_edit" version = "0.21.1" diff --git a/czkawka_gui/Cargo.toml b/czkawka_gui/Cargo.toml index 697a980..5a260bb 100644 --- a/czkawka_gui/Cargo.toml +++ b/czkawka_gui/Cargo.toml @@ -10,9 +10,9 @@ homepage = "https://github.com/qarmin/czkawka" repository = "https://github.com/qarmin/czkawka" [dependencies] -gdk4 = "0.7" -glib = "0.18" -gtk4 = { version = "0.7", default-features = false, features = ["v4_6"] } +gdk4 = "0.8" +glib = "0.19" +gtk4 = { version = "0.8", default-features = false, features = ["v4_6"] } humansize = "2.1" chrono = "0.4.33" diff --git a/czkawka_gui/src/compute_results.rs b/czkawka_gui/src/compute_results.rs index 14b8223..4520378 100644 --- a/czkawka_gui/src/compute_results.rs +++ b/czkawka_gui/src/compute_results.rs @@ -1,10 +1,11 @@ use std::cell::RefCell; use std::collections::HashMap; use std::rc::Rc; +use std::time::Duration; use chrono::NaiveDateTime; +use crossbeam_channel::Receiver; use fun_time::fun_time; -use glib::Receiver; use gtk4::prelude::*; use gtk4::{Entry, ListStore, TextView, TreeView, Widget}; use humansize::{format_size, BINARY}; @@ -35,7 +36,7 @@ use crate::notebook_enums::*; use crate::notebook_info::NOTEBOOKS_INFO; use crate::opening_selecting_records::*; -pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver) { +pub fn connect_compute_results(gui_data: &GuiData, result_receiver: Receiver) { 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 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 _guard = main_context.acquire().unwrap(); - glib_stop_receiver.attach(None, move |msg| { - buttons_search.show(); - - notebook_main.set_sensitive(true); - notebook_upper.set_sensitive(true); - button_settings.set_sensitive(true); - button_app_info.set_sensitive(true); - - window_progress.hide(); - - taskbar_state.borrow().hide(); - - let hash_size_index = combo_box_image_hash_size.active().unwrap() as usize; - let hash_size = IMAGES_HASH_SIZE_COMBO_BOX[hash_size_index] as u8; - - match msg { - Message::Duplicates(df) => { - computer_duplicate_finder( - df, - &entry_info, - &tree_view_duplicate_finder, - &text_view_errors, - &shared_duplication_state, - &shared_buttons, - &buttons_array, - &buttons_names, - ); - } - Message::EmptyFolders(ef) => { - computer_empty_folders( - ef, - &entry_info, - &tree_view_empty_folder_finder, - &text_view_errors, - &shared_empty_folders_state, - &shared_buttons, - &buttons_array, - &buttons_names, - ); - } - Message::EmptyFiles(vf) => { - computer_empty_files( - vf, - &entry_info, - &tree_view_empty_files_finder, - &text_view_errors, - &shared_empty_files_state, - &shared_buttons, - &buttons_array, - &buttons_names, - ); - } - Message::BigFiles(bf) => { - computer_big_files( - bf, - &entry_info, - &tree_view_big_files_finder, - &text_view_errors, - &shared_big_files_state, - &shared_buttons, - &buttons_array, - &buttons_names, - ); - } - Message::Temporary(tf) => { - computer_temporary_files( - tf, - &entry_info, - &tree_view_temporary_files_finder, - &text_view_errors, - &shared_temporary_files_state, - &shared_buttons, - &buttons_array, - &buttons_names, - ); - } - Message::SimilarImages(sf) => { - computer_similar_images( - sf, - &entry_info, - &tree_view_similar_images_finder, - &text_view_errors, - &shared_similar_images_state, - &shared_buttons, - &buttons_array, - &buttons_names, - hash_size, - ); - } - Message::SimilarVideos(ff) => { - computer_similar_videos( - ff, - &entry_info, - &tree_view_similar_videos_finder, - &text_view_errors, - &shared_similar_videos_state, - &shared_buttons, - &buttons_array, - &buttons_names, - ); - } - Message::SameMusic(mf) => { - computer_same_music( - mf, - &entry_info, - &tree_view_same_music_finder, - &text_view_errors, - &shared_same_music_state, - &shared_buttons, - &buttons_array, - &buttons_names, - ); - } - Message::InvalidSymlinks(ifs) => { - computer_invalid_symlinks( - ifs, - &entry_info, - &tree_view_invalid_symlinks, - &text_view_errors, - &shared_same_invalid_symlinks, - &shared_buttons, - &buttons_array, - &buttons_names, - ); - } - Message::BrokenFiles(br) => { - computer_broken_files( - br, - &entry_info, - &tree_view_broken_files, - &text_view_errors, - &shared_broken_files_state, - &shared_buttons, - &buttons_array, - &buttons_names, - ); - } - Message::BadExtensions(be) => { - computer_bad_extensions( - be, - &entry_info, - &tree_view_bad_extensions, - &text_view_errors, - &shared_bad_extensions_state, - &shared_buttons, - &buttons_array, - &buttons_names, - ); + glib::spawn_future_local(async move { + loop { + loop { + let msg = result_receiver.try_recv(); + if let Ok(msg) = msg { + buttons_search.show(); + + notebook_main.set_sensitive(true); + notebook_upper.set_sensitive(true); + button_settings.set_sensitive(true); + button_app_info.set_sensitive(true); + + window_progress.hide(); + + taskbar_state.borrow().hide(); + + let hash_size_index = combo_box_image_hash_size.active().unwrap() as usize; + let hash_size = IMAGES_HASH_SIZE_COMBO_BOX[hash_size_index] as u8; + + match msg { + Message::Duplicates(df) => { + computer_duplicate_finder( + df, + &entry_info, + &tree_view_duplicate_finder, + &text_view_errors, + &shared_duplication_state, + &shared_buttons, + &buttons_array, + &buttons_names, + ); + } + Message::EmptyFolders(ef) => { + computer_empty_folders( + ef, + &entry_info, + &tree_view_empty_folder_finder, + &text_view_errors, + &shared_empty_folders_state, + &shared_buttons, + &buttons_array, + &buttons_names, + ); + } + Message::EmptyFiles(vf) => { + computer_empty_files( + vf, + &entry_info, + &tree_view_empty_files_finder, + &text_view_errors, + &shared_empty_files_state, + &shared_buttons, + &buttons_array, + &buttons_names, + ); + } + Message::BigFiles(bf) => { + computer_big_files( + bf, + &entry_info, + &tree_view_big_files_finder, + &text_view_errors, + &shared_big_files_state, + &shared_buttons, + &buttons_array, + &buttons_names, + ); + } + Message::Temporary(tf) => { + computer_temporary_files( + tf, + &entry_info, + &tree_view_temporary_files_finder, + &text_view_errors, + &shared_temporary_files_state, + &shared_buttons, + &buttons_array, + &buttons_names, + ); + } + Message::SimilarImages(sf) => { + computer_similar_images( + sf, + &entry_info, + &tree_view_similar_images_finder, + &text_view_errors, + &shared_similar_images_state, + &shared_buttons, + &buttons_array, + &buttons_names, + hash_size, + ); + } + Message::SimilarVideos(ff) => { + computer_similar_videos( + ff, + &entry_info, + &tree_view_similar_videos_finder, + &text_view_errors, + &shared_similar_videos_state, + &shared_buttons, + &buttons_array, + &buttons_names, + ); + } + Message::SameMusic(mf) => { + computer_same_music( + mf, + &entry_info, + &tree_view_same_music_finder, + &text_view_errors, + &shared_same_music_state, + &shared_buttons, + &buttons_array, + &buttons_names, + ); + } + Message::InvalidSymlinks(ifs) => { + computer_invalid_symlinks( + ifs, + &entry_info, + &tree_view_invalid_symlinks, + &text_view_errors, + &shared_same_invalid_symlinks, + &shared_buttons, + &buttons_array, + &buttons_names, + ); + } + Message::BrokenFiles(br) => { + computer_broken_files( + br, + &entry_info, + &tree_view_broken_files, + &text_view_errors, + &shared_broken_files_state, + &shared_buttons, + &buttons_array, + &buttons_names, + ); + } + Message::BadExtensions(be) => { + computer_bad_extensions( + be, + &entry_info, + &tree_view_bad_extensions, + &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 }); } diff --git a/czkawka_gui/src/connect_things/connect_button_search.rs b/czkawka_gui/src/connect_things/connect_button_search.rs index ac39d7a..d648fb7 100644 --- a/czkawka_gui/src/connect_things/connect_button_search.rs +++ b/czkawka_gui/src/connect_things/connect_button_search.rs @@ -5,7 +5,6 @@ use std::thread; use crossbeam_channel::{Receiver, Sender}; use fun_time::fun_time; -use glib::Sender as glibSender; use gtk4::prelude::*; 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}; #[allow(clippy::too_many_arguments)] -pub fn connect_button_search(gui_data: &GuiData, glib_stop_sender: glibSender, progress_sender: Sender) { +pub fn connect_button_search(gui_data: &GuiData, result_sender: Sender, progress_sender: Sender) { let buttons_array = gui_data.bottom_buttons.buttons_array.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 notebook_main = gui_data.main_notebook.notebook_main.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 duplicate_search( - &gui_data, - loaded_common_items, - stop_receiver, - glib_stop_sender, - &grid_progress_stages, - progress_sender.clone(), - ), - NotebookMainEnum::EmptyFiles => empty_files_search( - &gui_data, - loaded_common_items, - 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(), - ), + NotebookMainEnum::Duplicate => duplicate_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), + NotebookMainEnum::EmptyFiles => empty_files_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), + NotebookMainEnum::EmptyDirectories => empty_dirs_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), + NotebookMainEnum::BigFiles => big_files_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), + NotebookMainEnum::Temporary => temporary_files_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), + NotebookMainEnum::SimilarImages => similar_image_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), + 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::Symlinks => bad_symlinks_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), + NotebookMainEnum::BrokenFiles => broken_files_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender, &show_dialog), + NotebookMainEnum::BadExtensions => bad_extensions_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), } window_progress.set_default_size(1, 1); @@ -286,13 +208,13 @@ impl LoadedCommonItems { fn duplicate_search( gui_data: &GuiData, - loaded_common_items: LoadedCommonItems, + loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, - glib_stop_sender: glibSender, - grid_progress_stages: &Grid, + result_sender: Sender, + grid_progress: &Grid, progress_data_sender: Sender, ) { - 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_hash_type = gui_data.main_notebook.combo_box_duplicate_hash_type.clone(); @@ -325,30 +247,30 @@ fn duplicate_search( .spawn(move || { let mut item = DuplicateFinder::new(); - set_common_settings(&mut item, &loaded_common_items); - item.set_minimal_cache_file_size(loaded_common_items.minimal_cache_file_size); + set_common_settings(&mut item, &loaded_commons); + 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_check_method(check_method); 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_delete_outdated_cache(delete_outdated_cache); item.set_case_sensitive_name_comparison(case_sensitive_name_comparison); 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(); } fn empty_files_search( gui_data: &GuiData, - loaded_common_items: LoadedCommonItems, + loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, - glib_stop_sender: glibSender, - grid_progress_stages: &Grid, + result_sender: Sender, + grid_progress: &Grid, progress_data_sender: Sender, ) { - grid_progress_stages.hide(); + grid_progress.hide(); let tree_view_empty_files_finder = gui_data.main_notebook.tree_view_empty_files_finder.clone(); clean_tree_view(&tree_view_empty_files_finder); @@ -358,22 +280,22 @@ fn empty_files_search( .spawn(move || { 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)); - glib_stop_sender.send(Message::EmptyFiles(item)).unwrap(); + result_sender.send(Message::EmptyFiles(item)).unwrap(); }) .unwrap(); } -fn empty_directories_search( +fn empty_dirs_search( gui_data: &GuiData, - loaded_common_items: LoadedCommonItems, + loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, - glib_stop_sender: glibSender, - grid_progress_stages: &Grid, + result_sender: Sender, + grid_progress: &Grid, progress_data_sender: Sender, ) { - grid_progress_stages.hide(); + grid_progress.hide(); let tree_view_empty_folder_finder = gui_data.main_notebook.tree_view_empty_folder_finder.clone(); clean_tree_view(&tree_view_empty_folder_finder); @@ -383,22 +305,22 @@ fn empty_directories_search( .spawn(move || { 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)); - glib_stop_sender.send(Message::EmptyFolders(item)).unwrap(); + result_sender.send(Message::EmptyFolders(item)).unwrap(); }) .unwrap(); } fn big_files_search( gui_data: &GuiData, - loaded_common_items: LoadedCommonItems, + loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, - glib_stop_sender: glibSender, - grid_progress_stages: &Grid, + result_sender: Sender, + grid_progress: &Grid, progress_data_sender: Sender, ) { - grid_progress_stages.hide(); + grid_progress.hide(); 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(); @@ -415,24 +337,24 @@ fn big_files_search( .spawn(move || { 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_search_mode(big_files_mode); 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(); } fn temporary_files_search( gui_data: &GuiData, - loaded_common_items: LoadedCommonItems, + loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, - glib_stop_sender: glibSender, - grid_progress_stages: &Grid, + result_sender: Sender, + grid_progress: &Grid, progress_data_sender: Sender, ) { - grid_progress_stages.hide(); + grid_progress.hide(); let tree_view_temporary_files_finder = gui_data.main_notebook.tree_view_temporary_files_finder.clone(); clean_tree_view(&tree_view_temporary_files_finder); @@ -442,23 +364,23 @@ fn temporary_files_search( .spawn(move || { 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)); - glib_stop_sender.send(Message::Temporary(item)).unwrap(); + result_sender.send(Message::Temporary(item)).unwrap(); }) .unwrap(); } fn same_music_search( gui_data: &GuiData, - loaded_common_items: LoadedCommonItems, + loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, - glib_stop_sender: glibSender, - grid_progress_stages: &Grid, + result_sender: Sender, + grid_progress: &Grid, progress_data_sender: Sender, show_dialog: &Arc, ) { - 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_title: gtk4::CheckButton = gui_data.main_notebook.check_button_music_title.clone(); @@ -509,14 +431,14 @@ fn same_music_search( .spawn(move || { 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_maximum_difference(maximum_difference); item.set_minimum_segment_duration(minimum_segment_duration); item.set_check_type(check_method); item.set_approximate_comparison(approximate_comparison); 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(); } else { @@ -546,14 +468,14 @@ fn same_music_search( fn broken_files_search( gui_data: &GuiData, - loaded_common_items: LoadedCommonItems, + loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, - glib_stop_sender: glibSender, - grid_progress_stages: &Grid, + result_sender: Sender, + grid_progress: &Grid, progress_data_sender: Sender, show_dialog: &Arc, ) { - 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_pdf: gtk4::CheckButton = gui_data.main_notebook.check_button_broken_files_pdf.clone(); @@ -584,10 +506,10 @@ fn broken_files_search( .spawn(move || { 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.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(); } else { @@ -617,13 +539,13 @@ fn broken_files_search( fn similar_image_search( gui_data: &GuiData, - loaded_common_items: LoadedCommonItems, + loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, - glib_stop_sender: glibSender, - grid_progress_stages: &Grid, + result_sender: Sender, + grid_progress: &Grid, progress_data_sender: Sender, ) { - 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_algorithm = gui_data.main_notebook.combo_box_image_hash_algorithm.clone(); @@ -657,7 +579,7 @@ fn similar_image_search( .spawn(move || { 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_hash_alg(hash_alg); item.set_hash_size(hash_size); @@ -665,20 +587,20 @@ fn similar_image_search( item.set_delete_outdated_cache(delete_outdated_cache); item.set_exclude_images_with_same_size(ignore_same_size); 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(); } fn similar_video_search( gui_data: &GuiData, - loaded_common_items: LoadedCommonItems, + loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, - glib_stop_sender: glibSender, - grid_progress_stages: &Grid, + result_sender: Sender, + grid_progress: &Grid, progress_data_sender: Sender, ) { - 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_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 || { 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_delete_outdated_cache(delete_outdated_cache); item.set_exclude_videos_with_same_size(ignore_same_size); 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(); } fn bad_symlinks_search( gui_data: &GuiData, - loaded_common_items: LoadedCommonItems, + loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, - glib_stop_sender: glibSender, - grid_progress_stages: &Grid, + result_sender: Sender, + grid_progress: &Grid, progress_data_sender: Sender, ) { - grid_progress_stages.hide(); + grid_progress.hide(); let tree_view_invalid_symlinks = gui_data.main_notebook.tree_view_invalid_symlinks.clone(); clean_tree_view(&tree_view_invalid_symlinks); @@ -725,22 +647,22 @@ fn bad_symlinks_search( .spawn(move || { 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)); - glib_stop_sender.send(Message::InvalidSymlinks(item)).unwrap(); + result_sender.send(Message::InvalidSymlinks(item)).unwrap(); }) .unwrap(); } fn bad_extensions_search( gui_data: &GuiData, - loaded_common_items: LoadedCommonItems, + loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, - glib_stop_sender: glibSender, - grid_progress_stages: &Grid, + result_sender: Sender, + grid_progress: &Grid, progress_data_sender: Sender, ) { - grid_progress_stages.show(); + grid_progress.show(); let tree_view_bad_extensions = gui_data.main_notebook.tree_view_bad_extensions.clone(); clean_tree_view(&tree_view_bad_extensions); @@ -750,29 +672,29 @@ fn bad_extensions_search( .spawn(move || { 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)); - glib_stop_sender.send(Message::BadExtensions(item)).unwrap(); + result_sender.send(Message::BadExtensions(item)).unwrap(); }) .unwrap(); } -fn set_common_settings(component: &mut T, loaded_common_items: &LoadedCommonItems) +fn set_common_settings(component: &mut T, loaded_commons: &LoadedCommonItems) where T: CommonData, { - component.set_included_directory(loaded_common_items.included_directories.clone()); - component.set_excluded_directory(loaded_common_items.excluded_directories.clone()); - component.set_reference_directory(loaded_common_items.reference_directories.clone()); - component.set_recursive_search(loaded_common_items.recursive_search); - component.set_allowed_extensions(loaded_common_items.allowed_extensions.clone()); - component.set_excluded_extensions(loaded_common_items.excluded_extensions.clone()); - component.set_excluded_items(loaded_common_items.excluded_items.clone()); - component.set_exclude_other_filesystems(loaded_common_items.ignore_other_filesystems); - component.set_use_cache(loaded_common_items.use_cache); - component.set_save_also_as_json(loaded_common_items.save_also_as_json); - component.set_minimal_file_size(loaded_common_items.minimal_file_size); - component.set_maximal_file_size(loaded_common_items.maximal_file_size); + component.set_included_directory(loaded_commons.included_directories.clone()); + component.set_excluded_directory(loaded_commons.excluded_directories.clone()); + component.set_reference_directory(loaded_commons.reference_directories.clone()); + component.set_recursive_search(loaded_commons.recursive_search); + component.set_allowed_extensions(loaded_commons.allowed_extensions.clone()); + component.set_excluded_extensions(loaded_commons.excluded_extensions.clone()); + component.set_excluded_items(loaded_commons.excluded_items.clone()); + component.set_exclude_other_filesystems(loaded_commons.ignore_other_filesystems); + component.set_use_cache(loaded_commons.use_cache); + component.set_save_also_as_json(loaded_commons.save_also_as_json); + component.set_minimal_file_size(loaded_commons.minimal_file_size); + component.set_maximal_file_size(loaded_commons.maximal_file_size); } #[fun_time(message = "clean_tree_view", level = "debug")] diff --git a/czkawka_gui/src/gui_structs/gui_progress_dialog.rs b/czkawka_gui/src/gui_structs/gui_progress_dialog.rs index a424286..ed27c04 100644 --- a/czkawka_gui/src/gui_structs/gui_progress_dialog.rs +++ b/czkawka_gui/src/gui_structs/gui_progress_dialog.rs @@ -15,7 +15,7 @@ pub struct GuiProgressDialog { pub label_progress_current_stage: 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 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_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 evk_button_stop_in_dialog = EventControllerKey::new(); @@ -53,7 +53,7 @@ impl GuiProgressDialog { label_stage, label_progress_current_stage, label_progress_all_stages, - grid_progress_stages, + grid_progress, button_stop_in_dialog, evk_button_stop_in_dialog, } diff --git a/czkawka_gui/src/main.rs b/czkawka_gui/src/main.rs index d0d71c4..5275b91 100644 --- a/czkawka_gui/src/main.rs +++ b/czkawka_gui/src/main.rs @@ -9,7 +9,6 @@ use std::env; use std::ffi::OsString; use crossbeam_channel::{unbounded, Receiver, Sender}; -use glib::Priority; use gtk4::gio::ApplicationFlags; use gtk4::prelude::*; use gtk4::Application; @@ -82,10 +81,7 @@ fn main() { fn build_ui(application: &Application, arguments: &[OsString]) { let gui_data: GuiData = GuiData::new_with_application(application); - // Used for getting data from thread - // 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()); + let (result_sender, result_receiver) = unbounded(); // Futures progress report let (progress_sender, progress_receiver): (Sender, Receiver) = unbounded(); @@ -111,7 +107,7 @@ fn build_ui(application: &Application, arguments: &[OsString]) { connect_button_delete(&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_sort(&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_popover_select(&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_show_hide_ui(&gui_data); connect_settings(&gui_data); diff --git a/czkawka_gui/ui/czkawka.cmb b/czkawka_gui/ui/czkawka.cmb index 340ab0a..3944e79 100755 --- a/czkawka_gui/ui/czkawka.cmb +++ b/czkawka_gui/ui/czkawka.cmb @@ -267,7 +267,7 @@ (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,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,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), diff --git a/czkawka_gui/ui/progress.ui b/czkawka_gui/ui/progress.ui index 8f20aae..8686a23 100644 --- a/czkawka_gui/ui/progress.ui +++ b/czkawka_gui/ui/progress.ui @@ -13,7 +13,7 @@ vertical 10 - + 2 2 2