From 6037c684806afc5c363e2113623ce4aa3904123f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= Date: Tue, 25 Feb 2025 23:27:24 +0100 Subject: [PATCH] Jd --- Cargo.lock | 106 +++++++++++++----- Changelog.md | 1 + czkawka_gui/Cargo.toml | 3 + .../connect_things/connect_popovers_sort.rs | 55 +++++++++ .../connect_things/connect_progress_window.rs | 4 +- czkawka_gui/src/help_functions.rs | 8 ++ czkawka_gui/ui/about_dialog.ui | 6 +- czkawka_gui/ui/compare_images.ui | 2 +- czkawka_gui/ui/czkawka.cmb | 4 +- czkawka_gui/ui/main_window.ui | 2 +- czkawka_gui/ui/popover_right_click.ui | 2 +- czkawka_gui/ui/popover_select.ui | 2 +- czkawka_gui/ui/popover_sort.ui | 2 +- czkawka_gui/ui/progress.ui | 2 +- czkawka_gui/ui/settings.ui | 2 +- 15 files changed, 161 insertions(+), 40 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a747338b9..825d31f82 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "ab_glyph" @@ -60,7 +60,7 @@ dependencies = [ "getrandom 0.2.15", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -276,7 +276,7 @@ dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand", + "rand 0.8.5", "serde", "serde_repr", "url", @@ -294,7 +294,7 @@ dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand", + "rand 0.8.5", "raw-window-handle 0.6.2", "serde", "serde_repr", @@ -521,9 +521,9 @@ dependencies = [ [[package]] name = "avif-serialize" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e335041290c43101ca215eed6f43ec437eb5a42125573f600fc3fa42b9bddd62" +checksum = "98922d6a4cfbcb08820c69d8eeccc05bb1f29bfa06b4f5b1dbfe9a868bd7608e" dependencies = [ "arrayvec", ] @@ -1530,6 +1530,7 @@ dependencies = [ "log", "once_cell", "open", + "rand 0.9.0", "rayon", "regex", "rust-embed", @@ -3656,7 +3657,7 @@ dependencies = [ "itertools 0.12.1", "nalgebra", "num", - "rand", + "rand 0.8.5", "rand_distr", "rayon", ] @@ -4709,9 +4710,9 @@ dependencies = [ [[package]] name = "nom-exif" -version = "2.4.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05839972569b89c01402dc784a93583ca5ae5a9bf9b18fa3f833c35f4e0c6863" +checksum = "a09f774715bfd0ca793e25f4b0d5aaa7530a230aebffe3a69e6df16eaf0af56d" dependencies = [ "bytes", "chrono", @@ -5522,7 +5523,7 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -5649,8 +5650,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.2", + "zerocopy 0.8.20", ] [[package]] @@ -5660,7 +5672,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.2", ] [[package]] @@ -5672,6 +5694,16 @@ dependencies = [ "getrandom 0.2.15", ] +[[package]] +name = "rand_core" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a509b1a2ffbe92afab0e55c8fd99dea1c280e8171bd2d88682bb20bc41cbc2c" +dependencies = [ + "getrandom 0.3.1", + "zerocopy 0.8.20", +] + [[package]] name = "rand_distr" version = "0.4.3" @@ -5679,7 +5711,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -5708,8 +5740,8 @@ dependencies = [ "once_cell", "paste", "profiling", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "simd_helpers", "system-deps 6.2.2", "thiserror 1.0.69", @@ -5964,9 +5996,9 @@ dependencies = [ [[package]] name = "rust-embed" -version = "8.5.0" +version = "8.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa66af4a4fdd5e7ebc276f115e895611a34739a9c1c01028383d612d550953c0" +checksum = "0b3aba5104622db5c9fc61098de54708feb732e7763d7faa2fa625899f00bf6f" dependencies = [ "rust-embed-impl", "rust-embed-utils", @@ -5975,9 +6007,9 @@ dependencies = [ [[package]] name = "rust-embed-impl" -version = "8.5.0" +version = "8.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6125dbc8867951125eec87294137f4e9c2c96566e61bf72c45095a7c77761478" +checksum = "1f198c73be048d2c5aa8e12f7960ad08443e56fd39cc26336719fdb4ea0ebaae" dependencies = [ "proc-macro2", "quote", @@ -5988,9 +6020,9 @@ dependencies = [ [[package]] name = "rust-embed-utils" -version = "8.5.0" +version = "8.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5347777e9aacb56039b0e1f28785929a8a3b709e87482e7442c72e7c12529d" +checksum = "5a2fcdc9f40c8dc2922842ca9add611ad19f332227fc651d015881ad1552bd9a" dependencies = [ "sha2", "walkdir", @@ -7580,7 +7612,7 @@ dependencies = [ "image 0.25.5", "imageproc", "itertools 0.13.0", - "rand", + "rand 0.8.5", "winapi", ] @@ -7596,7 +7628,7 @@ dependencies = [ "image 0.25.5", "itertools 0.13.0", "ndarray", - "rand", + "rand 0.8.5", "rustdct", "serde", "thiserror 2.0.11", @@ -8571,7 +8603,7 @@ dependencies = [ "hex", "nix", "ordered-stream", - "rand", + "rand 0.8.5", "serde", "serde_repr", "sha1", @@ -8679,7 +8711,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde3bb8c68a8f3f1ed4ac9221aad6b10cece3e60a8e2ea54a6a2dec806d0084c" +dependencies = [ + "zerocopy-derive 0.8.20", ] [[package]] @@ -8693,6 +8734,17 @@ dependencies = [ "syn 2.0.98", ] +[[package]] +name = "zerocopy-derive" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eea57037071898bf96a6da35fd626f4f27e9cee3ead2a6c703cf09d472b2e700" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "zerofrom" version = "0.1.5" @@ -8774,7 +8826,7 @@ dependencies = [ "indexmap 2.7.1", "memchr", "pbkdf2", - "rand", + "rand 0.8.5", "sha1", "thiserror 2.0.11", "time", diff --git a/Changelog.md b/Changelog.md index 8cd2e3709..c3a8aad8d 100644 --- a/Changelog.md +++ b/Changelog.md @@ -30,6 +30,7 @@ ### GTK GUI - Added window icon in wayland - [#1400](https://github.com/qarmin/czkawka/pull/1400) +- Disabled broken sort button - [#1400](https://github.com/qarmin/czkawka/pull/1400) ### CLI diff --git a/czkawka_gui/Cargo.toml b/czkawka_gui/Cargo.toml index 86b568edf..640e715dc 100644 --- a/czkawka_gui/Cargo.toml +++ b/czkawka_gui/Cargo.toml @@ -54,6 +54,9 @@ rayon = "1.10" czkawka_core = { path = "../czkawka_core", version = "8.0.0", features = [] } +[dev-dependencies] +rand = "0.9.0" + [target.'cfg(windows)'.dependencies] winapi = { version = "0.3.9", features = ["combaseapi", "objbase", "shobjidl_core", "windef", "winerror", "wtypesbase", "winuser"] } diff --git a/czkawka_gui/src/connect_things/connect_popovers_sort.rs b/czkawka_gui/src/connect_things/connect_popovers_sort.rs index d8ff5995a..8d98d7e07 100644 --- a/czkawka_gui/src/connect_things/connect_popovers_sort.rs +++ b/czkawka_gui/src/connect_things/connect_popovers_sort.rs @@ -142,6 +142,7 @@ mod test { use glib::types::Type; use gtk4::prelude::*; use gtk4::{Popover, TreeView}; + use rand::random; use crate::connect_things::connect_popovers_sort::{popover_sort_general, sort_iters}; @@ -230,4 +231,58 @@ mod test { list_store.iter_next(&curr_iter); } } + + #[gtk4::test] + pub fn _fuzzer_test() { + for _ in 0..10000 { + let columns_types: &[Type] = &[Type::BOOL, Type::STRING]; + let list_store = gtk4::ListStore::new(columns_types); + let tree_view = TreeView::builder().model(&list_store).build(); + let popover = Popover::new(); + + let first_row: &[(u32, &dyn ToValue)] = &[(0, &true), (1, &"AAA")]; + list_store.set(&list_store.append(), first_row); + + let mut since_last_header = 0; + + (0..(random::() % 10 + 5)).for_each(|_| { + let bool_val = if since_last_header < 2 { + since_last_header += 1; + false + } else { + since_last_header = 0; + random() + }; + let string_val = rand::random::().to_string(); + let a: Vec<(u32, &dyn ToValue)> = vec![(0, &bool_val), (1, &string_val)]; + + list_store.set(&list_store.append(), &a); + }); + + if since_last_header < 2 { + // This is invalid, and should be vec![(0, &false), (1, &"AAA")] + // but this triggers the bug + let a: Vec<(u32, &dyn ToValue)> = vec![(0, &true), (1, &"AAA")]; + list_store.set(&list_store.append(), &a); + let b: Vec<(u32, &dyn ToValue)> = vec![(0, &false), (1, &"BBB")]; + list_store.set(&list_store.append(), &b); + } + + print_two_items_model(&list_store); + + popover_sort_general::(&popover, &tree_view, 1, 0); + } + } + + fn print_two_items_model(model: >k4::ListStore) { + let iter = model.iter_first().expect("Failed to get first iter"); + loop { + let bool_val = model.get::(&iter, 0); + let string_val = model.get::(&iter, 1); + println!("{bool_val} {string_val}"); + if !model.iter_next(&iter) { + break; + } + } + } } diff --git a/czkawka_gui/src/connect_things/connect_progress_window.rs b/czkawka_gui/src/connect_things/connect_progress_window.rs index f2723e66d..f4fa645d0 100644 --- a/czkawka_gui/src/connect_things/connect_progress_window.rs +++ b/czkawka_gui/src/connect_things/connect_progress_window.rs @@ -167,7 +167,7 @@ fn common_set_data(item: &ProgressData, progress_bar_all_stages: &ProgressBar, p let all_stages = (item.current_stage_idx as f64 + current_items_checked as f64 / current_stage_items_to_check as f64) / (item.max_stage_idx + 1) as f64; let all_stages = all_stages.min(0.99); progress_bar_all_stages.set_fraction(all_stages); - progress_bar_current_stage.set_fraction(current_items_checked as f64 / item.entries_to_check as f64); + progress_bar_current_stage.set_fraction(current_items_checked as f64 / current_stage_items_to_check as f64); taskbar_state.borrow().set_progress_value( (item.current_stage_idx as u64) * current_stage_items_to_check + current_items_checked, @@ -189,7 +189,7 @@ fn file_number_tm(item: &ProgressData) -> HashMap<&'static str, String> { fn progress_ratio_tm(item: &ProgressData) -> HashMap<&'static str, String> { let mut v = vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]; if item.bytes_to_check != 0 { - v.push(("data_to_check", format_size(item.bytes_checked, BINARY))); + v.push(("data_checked", format_size(item.bytes_checked, BINARY))); v.push(("all_data", format_size(item.bytes_to_check, BINARY))); } generate_translation_hashmap(v) diff --git a/czkawka_gui/src/help_functions.rs b/czkawka_gui/src/help_functions.rs index 5721d46e6..1e8f03681 100644 --- a/czkawka_gui/src/help_functions.rs +++ b/czkawka_gui/src/help_functions.rs @@ -319,6 +319,14 @@ pub fn add_text_to_text_view(text_view: &TextView, string_to_append: &str) { pub fn set_buttons(hashmap: &mut HashMap, buttons_array: &[Widget], button_names: &[BottomButtonsEnum]) { for (index, button) in buttons_array.iter().enumerate() { + if button_names[index] == BottomButtonsEnum::Sort { + // TODO - sort button is broken, I don't have skills and time to fix it + // The problem is that to speedup sorting, we operate on item iters + // To fix this, we should just take entire model and sort it, which will be slow in some cases + // Alternatively, just current operations on iters should be fixed(I cannot find exact problem) + continue; + } + if *hashmap.get_mut(&button_names[index]).expect("Invalid button name") { button.show(); } else { diff --git a/czkawka_gui/ui/about_dialog.ui b/czkawka_gui/ui/about_dialog.ui index 2bab60ff7..9b87ffad7 100644 --- a/czkawka_gui/ui/about_dialog.ui +++ b/czkawka_gui/ui/about_dialog.ui @@ -1,12 +1,14 @@ - + 2020 - 2025 Rafał Mikrut (qarmin) and contributors -This program is free to use and will always be. +This program is free to use and will always be. +App is now in maintenance mode, so check Krokiet, the sucessor of Czkawka. + mit-x11 help-about-symbolic Czkawka diff --git a/czkawka_gui/ui/compare_images.ui b/czkawka_gui/ui/compare_images.ui index f0edba028..8a13755ff 100644 --- a/czkawka_gui/ui/compare_images.ui +++ b/czkawka_gui/ui/compare_images.ui @@ -1,5 +1,5 @@ - + diff --git a/czkawka_gui/ui/czkawka.cmb b/czkawka_gui/ui/czkawka.cmb index ddd152c24..fb4b7a908 100755 --- a/czkawka_gui/ui/czkawka.cmb +++ b/czkawka_gui/ui/czkawka.cmb @@ -1,6 +1,6 @@ - + (3,None,"about_dialog.ui","about_dialog.ui",None,None,None,None,None,None,None), (4,None,"compare_images.ui","compare_images.ui",None,None,None,None,None,None,None), @@ -344,7 +344,7 @@ (10,7,"GtkButton","buttons_popover_sort_selection",2,None,None,None,4,None,None) - (3,1,"GtkAboutDialog","comments","2020 - 2025\nRafał Mikrut (qarmin) and contributors\nThis program is free to use and will always be.",1,None,None,None,None,None,None,None,None), + (3,1,"GtkAboutDialog","comments","2020 - 2025\nRafał Mikrut (qarmin) and contributors\nThis program is free to use and will always be.\nApp is now in maintenance mode, so check Krokiet, the sucessor of Czkawka",1,None,None,None,None,None,None,None,None), (3,1,"GtkAboutDialog","license-type","mit-x11",None,None,None,None,None,None,None,None,None), (3,1,"GtkAboutDialog","logo-icon-name","help-about-symbolic",None,None,None,None,None,None,None,None,None), (3,1,"GtkAboutDialog","program-name","Czkawka",None,None,None,None,None,None,None,None,None), diff --git a/czkawka_gui/ui/main_window.ui b/czkawka_gui/ui/main_window.ui index d2a223014..7be767152 100644 --- a/czkawka_gui/ui/main_window.ui +++ b/czkawka_gui/ui/main_window.ui @@ -1,5 +1,5 @@ - + diff --git a/czkawka_gui/ui/popover_right_click.ui b/czkawka_gui/ui/popover_right_click.ui index 2edc5345e..207c37f61 100644 --- a/czkawka_gui/ui/popover_right_click.ui +++ b/czkawka_gui/ui/popover_right_click.ui @@ -1,5 +1,5 @@ - + diff --git a/czkawka_gui/ui/popover_select.ui b/czkawka_gui/ui/popover_select.ui index ff5f6f959..10f6f82ed 100644 --- a/czkawka_gui/ui/popover_select.ui +++ b/czkawka_gui/ui/popover_select.ui @@ -1,5 +1,5 @@ - + diff --git a/czkawka_gui/ui/popover_sort.ui b/czkawka_gui/ui/popover_sort.ui index 0958c4ba6..99769e97d 100644 --- a/czkawka_gui/ui/popover_sort.ui +++ b/czkawka_gui/ui/popover_sort.ui @@ -1,5 +1,5 @@ - + diff --git a/czkawka_gui/ui/progress.ui b/czkawka_gui/ui/progress.ui index af3a49a2d..fa5cc98d0 100644 --- a/czkawka_gui/ui/progress.ui +++ b/czkawka_gui/ui/progress.ui @@ -1,5 +1,5 @@ - + diff --git a/czkawka_gui/ui/settings.ui b/czkawka_gui/ui/settings.ui index 44d3d58f7..0ae1e152e 100644 --- a/czkawka_gui/ui/settings.ui +++ b/czkawka_gui/ui/settings.ui @@ -1,5 +1,5 @@ - +