From d7f5e37d83659cce35cfb8d116afd2ae3dfb54a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= Date: Sat, 1 Apr 2023 16:22:16 +0200 Subject: [PATCH] Simplify code --- Cargo.lock | 130 ++- czkawka_core/Cargo.toml | 4 +- czkawka_core/src/similar_images.rs | 4 +- czkawka_gui/Cargo.toml | 2 +- czkawka_gui/src/compute_results.rs | 810 ++++++------------ .../connect_duplicate_buttons.rs | 2 +- czkawka_gui/src/saving_loading.rs | 2 +- 7 files changed, 339 insertions(+), 615 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3dbc8cb..326a473 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -81,7 +81,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" dependencies = [ "anstyle", - "windows-sys 0.45.0", + "windows-sys", ] [[package]] @@ -116,7 +116,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn 2.0.12", ] [[package]] @@ -356,9 +356,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.2.0" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6efb5f0a41b5ef5b50c5da28c07609c20091df0c1fc33d418fa2a7e693c2b624" +checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3" dependencies = [ "clap_builder", "clap_derive", @@ -367,9 +367,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.2.0" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671fcaa5debda4b9a84aa7fde49c907c8986c0e6ab927e04217c9cb74e7c8bc9" +checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f" dependencies = [ "anstream", "anstyle", @@ -387,7 +387,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.11", + "syn 2.0.12", ] [[package]] @@ -424,7 +424,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" dependencies = [ - "windows-sys 0.45.0", + "windows-sys", ] [[package]] @@ -546,7 +546,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.11", + "syn 2.0.12", ] [[package]] @@ -563,7 +563,7 @@ checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn 2.0.12", ] [[package]] @@ -756,18 +756,18 @@ checksum = "48016319042fb7c87b78d2993084a831793a897a5cd1a2a67cab9d1eeb4b7d76" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn 2.0.12", ] [[package]] name = "errno" -version = "0.2.8" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" dependencies = [ "errno-dragonfly", "libc", - "winapi", + "windows-sys", ] [[package]] @@ -954,9 +954,9 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -969,9 +969,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -979,15 +979,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -996,38 +996,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-macro" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.12", ] [[package]] name = "futures-sink" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-util" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -1645,19 +1645,19 @@ checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" dependencies = [ "hermit-abi 0.3.1", "libc", - "windows-sys 0.45.0", + "windows-sys", ] [[package]] name = "is-terminal" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" +checksum = "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes", "rustix", - "windows-sys 0.45.0", + "windows-sys", ] [[package]] @@ -1763,9 +1763,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.1.4" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" +checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" [[package]] name = "locale_config" @@ -2101,9 +2101,9 @@ checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "smallvec", - "windows-sys 0.45.0", + "windows-sys", ] [[package]] @@ -2387,6 +2387,15 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "redox_users" version = "0.4.3" @@ -2394,7 +2403,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ "getrandom", - "redox_syscall", + "redox_syscall 0.2.16", "thiserror", ] @@ -2522,16 +2531,16 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.11" +version = "0.37.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" +checksum = "d097081ed288dfe45699b72f5b5d648e5f15d64d900c7080273baa20c16a6849" dependencies = [ "bitflags 1.3.2", "errno", "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys 0.45.0", + "windows-sys", ] [[package]] @@ -2602,7 +2611,7 @@ checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn 2.0.12", ] [[package]] @@ -2953,9 +2962,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.11" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e3787bb71465627110e7d87ed4faaa36c1f61042ee67badb9e2ef173accc40" +checksum = "79d9531f94112cfc3e4c8f5f02cb2b58f72c97b7efd85f70203cc6d8efda5927" dependencies = [ "proc-macro2", "quote", @@ -2977,15 +2986,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ "cfg-if", "fastrand", - "redox_syscall", + "redox_syscall 0.3.5", "rustix", - "windows-sys 0.42.0", + "windows-sys", ] [[package]] @@ -3014,7 +3023,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn 2.0.12", ] [[package]] @@ -3485,21 +3494,6 @@ dependencies = [ "windows-targets", ] -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - [[package]] name = "windows-sys" version = "0.45.0" diff --git a/czkawka_core/Cargo.toml b/czkawka_core/Cargo.toml index 74db22d..77c0a4a 100644 --- a/czkawka_core/Cargo.toml +++ b/czkawka_core/Cargo.toml @@ -29,7 +29,7 @@ bitflags = "2.0.2" lofty = "0.11.0" # Futures - needed by async progress sender -futures = "0.3.27" +futures = "0.3.28" # Needed by broken files zip = { version = "0.6.4", features = ["aes-crypto", "bzip2", "deflate", "time"], default-features = false } @@ -41,7 +41,7 @@ blake3 = "1.3.3" crc32fast = "1.3.2" xxhash-rust = { version = "0.8.6", features = ["xxh3"] } -tempfile = "3.4.0" +tempfile = "3.5.0" # Video Duplicates vid_dup_finder_lib = "0.1.1" diff --git a/czkawka_core/src/similar_images.rs b/czkawka_core/src/similar_images.rs index 83c6559..9f52409 100644 --- a/czkawka_core/src/similar_images.rs +++ b/czkawka_core/src/similar_images.rs @@ -965,7 +965,7 @@ impl SimilarImages { let mut found = false; for vec_file_entry in collected_similar_images.values() { if vec_file_entry.is_empty() { - println!("Empty Element {vec_file_entry:?}"); + println!("Empty group"); found = true; continue; } @@ -984,7 +984,7 @@ impl SimilarImages { } } } - assert!(!found, "Found Invalid entries"); + assert!(!found, "Found Invalid entries, verify errors before"); // TODO crashes with empty result with reference folder, verify why } self.similar_vectors = collected_similar_images.into_values().collect(); diff --git a/czkawka_gui/Cargo.toml b/czkawka_gui/Cargo.toml index 11bf713..ba16383 100644 --- a/czkawka_gui/Cargo.toml +++ b/czkawka_gui/Cargo.toml @@ -20,7 +20,7 @@ chrono = "0.4.24" crossbeam-channel = "0.5.7" # To get information about progress -futures = "0.3.27" +futures = "0.3.28" # For saving/loading config files to specific directories directories-next = "2.0.0" diff --git a/czkawka_gui/src/compute_results.rs b/czkawka_gui/src/compute_results.rs index c7e4b93..45d2d17 100644 --- a/czkawka_gui/src/compute_results.rs +++ b/czkawka_gui/src/compute_results.rs @@ -4,15 +4,15 @@ use std::path::PathBuf; use std::rc::Rc; use chrono::NaiveDateTime; -use czkawka_core::bad_extensions::BadExtensions; -use czkawka_core::big_file::BigFile; -use czkawka_core::broken_files::BrokenFiles; use glib::Receiver; use gtk4::prelude::*; -use gtk4::{Entry, TextView, TreeView, Widget}; +use gtk4::{Entry, ListStore, TextView, TreeView, Widget}; use humansize::format_size; use humansize::BINARY; +use czkawka_core::bad_extensions::BadExtensions; +use czkawka_core::big_file::BigFile; +use czkawka_core::broken_files::BrokenFiles; use czkawka_core::common::split_path; use czkawka_core::common_dir_traversal::CheckingMethod; use czkawka_core::duplicate::DuplicateFinder; @@ -475,7 +475,6 @@ fn computer_same_music( buttons_array: &[Widget; 9], buttons_names: &[BottomButtonsEnum; 9], ) { - const COLUMNS_NUMBER: usize = 18; if mf.get_stopped_search() { entry_info.set_text(&flg!("compute_stopped_by_user")); } else { @@ -531,62 +530,46 @@ fn computer_same_music( }; let (directory, file) = split_path(&base_file_entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsSameMusic::ActivatableSelectButton as u32, &false), - (ColumnsSameMusic::SelectionButton as u32, &false), - (ColumnsSameMusic::Size as u32, &format_size(base_file_entry.size, BINARY)), - (ColumnsSameMusic::SizeAsBytes as u32, &base_file_entry.size), - (ColumnsSameMusic::Name as u32, &file), - (ColumnsSameMusic::Path as u32, &directory), - (ColumnsSameMusic::Title as u32, &base_file_entry.track_title), - (ColumnsSameMusic::Artist as u32, &base_file_entry.track_artist), - (ColumnsSameMusic::Year as u32, &base_file_entry.year.to_string()), - (ColumnsSameMusic::Genre as u32, &base_file_entry.genre), - (ColumnsSameMusic::Bitrate as u32, &(format!("{} kbps", base_file_entry.bitrate))), - (ColumnsSameMusic::BitrateAsNumber as u32, &(base_file_entry.bitrate)), - (ColumnsSameMusic::Length as u32, &base_file_entry.length), - ( - ColumnsSameMusic::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(base_file_entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsSameMusic::ModificationAsSecs as u32, &(base_file_entry.modified_date)), - (ColumnsSameMusic::Color as u32, &(HEADER_ROW_COLOR.to_string())), - (ColumnsSameMusic::IsHeader as u32, &true), - (ColumnsSameMusic::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); + same_music_add_to_list_store( + &list_store, + &file, + &directory, + base_file_entry.size, + base_file_entry.modified_date, + &base_file_entry.track_title, + &base_file_entry.track_artist, + &base_file_entry.year, + base_file_entry.bitrate, + &format!("{} kbps", base_file_entry.bitrate), + &base_file_entry.genre, + &base_file_entry.length, + true, + true, + ); for file_entry in vec_file_entry { let (directory, file) = split_path(&file_entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsSameMusic::ActivatableSelectButton as u32, &true), - (ColumnsSameMusic::SelectionButton as u32, &false), - (ColumnsSameMusic::Size as u32, &format_size(file_entry.size, BINARY)), - (ColumnsSameMusic::SizeAsBytes as u32, &file_entry.size), - (ColumnsSameMusic::Name as u32, &file), - (ColumnsSameMusic::Path as u32, &directory), - (ColumnsSameMusic::Title as u32, &file_entry.track_title), - (ColumnsSameMusic::Artist as u32, &file_entry.track_artist), - (ColumnsSameMusic::Year as u32, &file_entry.year.to_string()), - (ColumnsSameMusic::Genre as u32, &file_entry.genre), - (ColumnsSameMusic::Bitrate as u32, &(format!("{} kbps", file_entry.bitrate))), - (ColumnsSameMusic::BitrateAsNumber as u32, &(file_entry.bitrate)), - (ColumnsSameMusic::Length as u32, &file_entry.length), - ( - ColumnsSameMusic::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(file_entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsSameMusic::ModificationAsSecs as u32, &(file_entry.modified_date)), - (ColumnsSameMusic::Color as u32, &(MAIN_ROW_COLOR.to_string())), - (ColumnsSameMusic::IsHeader as u32, &false), - (ColumnsSameMusic::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); + same_music_add_to_list_store( + &list_store, + &file, + &directory, + file_entry.size, + file_entry.modified_date, + &file_entry.track_title, + &file_entry.track_artist, + &file_entry.year, + file_entry.bitrate, + &format!("{} kbps", file_entry.bitrate), + &file_entry.genre, + &file_entry.length, + false, + true, + ); } } } else { let vector = mf.get_duplicated_music_entries(); - let text: String = "-----".to_string(); + let text: &str = "-----"; for vec_file_entry in vector { // Sort @@ -601,53 +584,40 @@ fn computer_same_music( vec_file_entry.clone() }; - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsSameMusic::ActivatableSelectButton as u32, &false), - (ColumnsSameMusic::SelectionButton as u32, &false), - (ColumnsSameMusic::Size as u32, &String::new()), - (ColumnsSameMusic::SizeAsBytes as u32, &(0)), - (ColumnsSameMusic::Name as u32, &String::new()), - (ColumnsSameMusic::Path as u32, &String::new()), - (ColumnsSameMusic::Title as u32, &(if is_track_title { text.clone() } else { String::new() })), - (ColumnsSameMusic::Artist as u32, &(if is_track_artist { text.clone() } else { String::new() })), - (ColumnsSameMusic::Year as u32, &(if is_year { text.clone() } else { String::new() })), - (ColumnsSameMusic::Bitrate as u32, &(if is_bitrate { text.clone() } else { String::new() })), - (ColumnsSameMusic::BitrateAsNumber as u32, &(0)), - (ColumnsSameMusic::Genre as u32, &(if is_genre { text.clone() } else { String::new() })), - (ColumnsSameMusic::Length as u32, &(if is_length { text.clone() } else { String::new() })), - (ColumnsSameMusic::Modification as u32, &String::new()), - (ColumnsSameMusic::ModificationAsSecs as u32, &(0)), - (ColumnsSameMusic::Color as u32, &(HEADER_ROW_COLOR.to_string())), - (ColumnsSameMusic::IsHeader as u32, &true), - (ColumnsSameMusic::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); + same_music_add_to_list_store( + &list_store, + "", + "", + 0, + 0, + if is_track_title { text } else { "" }, + if is_track_artist { text } else { "" }, + if is_year { text } else { "" }, + 0, + if is_bitrate { text } else { "" }, + if is_genre { text } else { "" }, + if is_length { text } else { "" }, + true, + false, + ); for file_entry in vec_file_entry { let (directory, file) = split_path(&file_entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsSameMusic::ActivatableSelectButton as u32, &true), - (ColumnsSameMusic::SelectionButton as u32, &false), - (ColumnsSameMusic::Size as u32, &format_size(file_entry.size, BINARY)), - (ColumnsSameMusic::SizeAsBytes as u32, &file_entry.size), - (ColumnsSameMusic::Name as u32, &file), - (ColumnsSameMusic::Path as u32, &directory), - (ColumnsSameMusic::Title as u32, &file_entry.track_title), - (ColumnsSameMusic::Artist as u32, &file_entry.track_artist), - (ColumnsSameMusic::Year as u32, &file_entry.year.to_string()), - (ColumnsSameMusic::Genre as u32, &file_entry.genre), - (ColumnsSameMusic::Bitrate as u32, &(format!("{} kbps", file_entry.bitrate))), - (ColumnsSameMusic::BitrateAsNumber as u32, &(file_entry.bitrate)), - (ColumnsSameMusic::Length as u32, &file_entry.length), - ( - ColumnsSameMusic::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(file_entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsSameMusic::ModificationAsSecs as u32, &(file_entry.modified_date)), - (ColumnsSameMusic::Color as u32, &(MAIN_ROW_COLOR.to_string())), - (ColumnsSameMusic::IsHeader as u32, &false), - (ColumnsSameMusic::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); + same_music_add_to_list_store( + &list_store, + &file, + &directory, + file_entry.size, + file_entry.modified_date, + &file_entry.track_title, + &file_entry.track_artist, + &file_entry.year, + file_entry.bitrate, + &format!("{} kbps", file_entry.bitrate), + &file_entry.genre, + &file_entry.length, + false, + false, + ); } } } @@ -681,6 +651,7 @@ fn computer_same_music( } } } + fn computer_similar_videos( ff: SimilarVideos, entry_info: &Entry, @@ -691,7 +662,6 @@ fn computer_similar_videos( buttons_array: &[Widget; 9], buttons_names: &[BottomButtonsEnum; 9], ) { - const COLUMNS_NUMBER: usize = 11; if ff.get_stopped_search() { entry_info.set_text(&flg!("compute_stopped_by_user")); } else { @@ -735,46 +705,10 @@ fn computer_similar_videos( vec_file_entry.clone() }; - // Header - let (directory, file) = split_path(&base_file_entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsSimilarVideos::ActivatableSelectButton as u32, &false), - (ColumnsSimilarVideos::SelectionButton as u32, &false), - (ColumnsSimilarVideos::Size as u32, &format_size(base_file_entry.size, BINARY)), - (ColumnsSimilarVideos::SizeAsBytes as u32, &base_file_entry.size), - (ColumnsSimilarVideos::Name as u32, &file), - (ColumnsSimilarVideos::Path as u32, &directory), - ( - ColumnsSimilarVideos::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(base_file_entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsSimilarVideos::ModificationAsSecs as u32, &(base_file_entry.modified_date)), - (ColumnsSimilarVideos::Color as u32, &(HEADER_ROW_COLOR.to_string())), - (ColumnsSimilarVideos::IsHeader as u32, &true), - (ColumnsSimilarVideos::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); - - // Meat + similar_videos_add_to_list_store(&list_store, "", "", base_file_entry.size, base_file_entry.modified_date, true, true); for file_entry in &vec_file_entry { let (directory, file) = split_path(&file_entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsSimilarVideos::ActivatableSelectButton as u32, &true), - (ColumnsSimilarVideos::SelectionButton as u32, &false), - (ColumnsSimilarVideos::Size as u32, &format_size(file_entry.size, BINARY)), - (ColumnsSimilarVideos::SizeAsBytes as u32, &file_entry.size), - (ColumnsSimilarVideos::Name as u32, &file), - (ColumnsSimilarVideos::Path as u32, &directory), - ( - ColumnsSimilarVideos::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(file_entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsSimilarVideos::ModificationAsSecs as u32, &(file_entry.modified_date)), - (ColumnsSimilarVideos::Color as u32, &(MAIN_ROW_COLOR.to_string())), - (ColumnsSimilarVideos::IsHeader as u32, &false), - (ColumnsSimilarVideos::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); + similar_videos_add_to_list_store(&list_store, &file, &directory, file_entry.size, file_entry.modified_date, false, true); } } } else { @@ -793,42 +727,10 @@ fn computer_similar_videos( vec_file_entry.clone() }; - // Header - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsSimilarVideos::ActivatableSelectButton as u32, &false), - (ColumnsSimilarVideos::SelectionButton as u32, &false), - (ColumnsSimilarVideos::Size as u32, &String::new()), - (ColumnsSimilarVideos::SizeAsBytes as u32, &(0)), - (ColumnsSimilarVideos::Name as u32, &String::new()), - (ColumnsSimilarVideos::Path as u32, &String::new()), - (ColumnsSimilarVideos::Modification as u32, &String::new()), - (ColumnsSimilarVideos::ModificationAsSecs as u32, &(0)), - (ColumnsSimilarVideos::Color as u32, &(HEADER_ROW_COLOR.to_string())), - (ColumnsSimilarVideos::IsHeader as u32, &true), - (ColumnsSimilarVideos::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); - - // Meat + similar_videos_add_to_list_store(&list_store, "", "", 0, 0, true, false); for file_entry in &vec_file_entry { let (directory, file) = split_path(&file_entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsSimilarVideos::ActivatableSelectButton as u32, &true), - (ColumnsSimilarVideos::SelectionButton as u32, &false), - (ColumnsSimilarVideos::Size as u32, &format_size(file_entry.size, BINARY)), - (ColumnsSimilarVideos::SizeAsBytes as u32, &file_entry.size), - (ColumnsSimilarVideos::Name as u32, &file), - (ColumnsSimilarVideos::Path as u32, &directory), - ( - ColumnsSimilarVideos::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(file_entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsSimilarVideos::ModificationAsSecs as u32, &(file_entry.modified_date)), - (ColumnsSimilarVideos::Color as u32, &(MAIN_ROW_COLOR.to_string())), - (ColumnsSimilarVideos::IsHeader as u32, &false), - (ColumnsSimilarVideos::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); + similar_videos_add_to_list_store(&list_store, &file, &directory, file_entry.size, file_entry.modified_date, false, false); } } } @@ -863,6 +765,7 @@ fn computer_similar_videos( } } } + fn computer_similar_images( sf: SimilarImages, entry_info: &Entry, @@ -874,7 +777,6 @@ fn computer_similar_images( buttons_names: &[BottomButtonsEnum; 9], hash_size: u8, ) { - const COLUMNS_NUMBER: usize = 13; if sf.get_stopped_search() { entry_info.set_text(&flg!("compute_stopped_by_user")); } else { @@ -918,51 +820,21 @@ fn computer_similar_images( // Header let (directory, file) = split_path(&base_file_entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsSimilarImages::ActivatableSelectButton as u32, &false), - (ColumnsSimilarImages::SelectionButton as u32, &false), - (ColumnsSimilarImages::Similarity as u32, &String::new()), - (ColumnsSimilarImages::Size as u32, &format_size(base_file_entry.size, BINARY)), - (ColumnsSimilarImages::SizeAsBytes as u32, &base_file_entry.size), - (ColumnsSimilarImages::Dimensions as u32, &base_file_entry.dimensions), - (ColumnsSimilarImages::Name as u32, &file), - (ColumnsSimilarImages::Path as u32, &directory), - ( - ColumnsSimilarImages::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(base_file_entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsSimilarImages::ModificationAsSecs as u32, &(base_file_entry.modified_date)), - (ColumnsSimilarImages::Color as u32, &(HEADER_ROW_COLOR.to_string())), - (ColumnsSimilarImages::IsHeader as u32, &true), - (ColumnsSimilarImages::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); - - // Meat + similar_images_add_to_list_store(&list_store, &file, &directory, 0, 0, "", 0, 0, true, true); for file_entry in &vec_file_entry { let (directory, file) = split_path(&file_entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsSimilarImages::ActivatableSelectButton as u32, &true), - (ColumnsSimilarImages::SelectionButton as u32, &false), - ( - ColumnsSimilarImages::Similarity as u32, - &(similar_images::get_string_from_similarity(&file_entry.similarity, hash_size).to_string()), - ), - (ColumnsSimilarImages::Size as u32, &format_size(file_entry.size, BINARY)), - (ColumnsSimilarImages::SizeAsBytes as u32, &file_entry.size), - (ColumnsSimilarImages::Dimensions as u32, &file_entry.dimensions), - (ColumnsSimilarImages::Name as u32, &file), - (ColumnsSimilarImages::Path as u32, &directory), - ( - ColumnsSimilarImages::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(file_entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsSimilarImages::ModificationAsSecs as u32, &(file_entry.modified_date)), - (ColumnsSimilarImages::Color as u32, &(MAIN_ROW_COLOR.to_string())), - (ColumnsSimilarImages::IsHeader as u32, &false), - (ColumnsSimilarImages::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); + similar_images_add_to_list_store( + &list_store, + &file, + &directory, + file_entry.size, + file_entry.modified_date, + &file_entry.dimensions, + file_entry.similarity, + hash_size, + false, + true, + ); } } } else { @@ -978,49 +850,21 @@ fn computer_similar_images( vec_file_entry.clone() }; - // Header - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsSimilarImages::ActivatableSelectButton as u32, &false), - (ColumnsSimilarImages::SelectionButton as u32, &false), - (ColumnsSimilarImages::Similarity as u32, &String::new()), - (ColumnsSimilarImages::Size as u32, &String::new()), - (ColumnsSimilarImages::SizeAsBytes as u32, &(0)), - (ColumnsSimilarImages::Dimensions as u32, &String::new()), - (ColumnsSimilarImages::Name as u32, &String::new()), - (ColumnsSimilarImages::Path as u32, &String::new()), - (ColumnsSimilarImages::Modification as u32, &String::new()), - (ColumnsSimilarImages::ModificationAsSecs as u32, &(0)), - (ColumnsSimilarImages::Color as u32, &(HEADER_ROW_COLOR.to_string())), - (ColumnsSimilarImages::IsHeader as u32, &true), - (ColumnsSimilarImages::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); - - // Meat + similar_images_add_to_list_store(&list_store, "", "", 0, 0, "", 0, 0, true, false); for file_entry in &vec_file_entry { let (directory, file) = split_path(&file_entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsSimilarImages::ActivatableSelectButton as u32, &true), - (ColumnsSimilarImages::SelectionButton as u32, &false), - ( - ColumnsSimilarImages::Similarity as u32, - &(similar_images::get_string_from_similarity(&file_entry.similarity, hash_size).to_string()), - ), - (ColumnsSimilarImages::Size as u32, &format_size(file_entry.size, BINARY)), - (ColumnsSimilarImages::SizeAsBytes as u32, &file_entry.size), - (ColumnsSimilarImages::Dimensions as u32, &file_entry.dimensions), - (ColumnsSimilarImages::Name as u32, &file), - (ColumnsSimilarImages::Path as u32, &directory), - ( - ColumnsSimilarImages::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(file_entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsSimilarImages::ModificationAsSecs as u32, &(file_entry.modified_date)), - (ColumnsSimilarImages::Color as u32, &(MAIN_ROW_COLOR.to_string())), - (ColumnsSimilarImages::IsHeader as u32, &false), - (ColumnsSimilarImages::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); + similar_images_add_to_list_store( + &list_store, + &file, + &directory, + file_entry.size, + file_entry.modified_date, + &file_entry.dimensions, + file_entry.similarity, + hash_size, + false, + false, + ); } } } @@ -1364,7 +1208,6 @@ fn computer_duplicate_finder( buttons_array: &[Widget; 9], buttons_names: &[BottomButtonsEnum; 9], ) { - const COLUMNS_NUMBER: usize = 11; if df.get_stopped_search() { entry_info.set_text(&flg!("compute_stopped_by_user")); } else { @@ -1450,48 +1293,12 @@ fn computer_duplicate_finder( vector.clone() }; - // HEADER let (directory, file) = split_path(&base_file_entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsDuplicates::ActivatableSelectButton as u32, &false), - (ColumnsDuplicates::SelectionButton as u32, &false), - (ColumnsDuplicates::Size as u32, (&format_size(base_file_entry.size, BINARY))), - (ColumnsDuplicates::SizeAsBytes as u32, &base_file_entry.size), - (ColumnsDuplicates::Name as u32, &file), - (ColumnsDuplicates::Path as u32, &directory), - ( - ColumnsDuplicates::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(base_file_entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsDuplicates::ModificationAsSecs as u32, &(base_file_entry.modified_date)), - (ColumnsDuplicates::Color as u32, &(HEADER_ROW_COLOR.to_string())), - (ColumnsDuplicates::IsHeader as u32, &true), - (ColumnsDuplicates::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; + duplicates_add_to_list_store(&list_store, &file, &directory, base_file_entry.size, base_file_entry.modified_date, true, true); - list_store.set(&list_store.append(), &values); - - // MEAT for entry in vector { let (directory, file) = split_path(&entry.path); - - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsDuplicates::ActivatableSelectButton as u32, &true), - (ColumnsDuplicates::SelectionButton as u32, &false), - (ColumnsDuplicates::Size as u32, (&format_size(entry.size, BINARY))), - (ColumnsDuplicates::SizeAsBytes as u32, &entry.size), - (ColumnsDuplicates::Name as u32, &file), - (ColumnsDuplicates::Path as u32, &directory), - ( - ColumnsDuplicates::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsDuplicates::ModificationAsSecs as u32, &(entry.modified_date)), - (ColumnsDuplicates::Color as u32, &(MAIN_ROW_COLOR.to_string())), - (ColumnsDuplicates::IsHeader as u32, &false), - (ColumnsDuplicates::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); + duplicates_add_to_list_store(&list_store, &file, &directory, entry.size, entry.modified_date, false, true); } } } @@ -1514,46 +1321,10 @@ fn computer_duplicate_finder( // HEADER let (directory, file) = split_path(&base_file_entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsDuplicates::ActivatableSelectButton as u32, &false), - (ColumnsDuplicates::SelectionButton as u32, &false), - (ColumnsDuplicates::Size as u32, (&format_size(base_file_entry.size, BINARY))), - (ColumnsDuplicates::SizeAsBytes as u32, &base_file_entry.size), - (ColumnsDuplicates::Name as u32, &file), - (ColumnsDuplicates::Path as u32, &directory), - ( - ColumnsDuplicates::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(base_file_entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsDuplicates::ModificationAsSecs as u32, &(base_file_entry.modified_date)), - (ColumnsDuplicates::Color as u32, &(HEADER_ROW_COLOR.to_string())), - (ColumnsDuplicates::IsHeader as u32, &true), - (ColumnsDuplicates::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - - // MEAT - list_store.set(&list_store.append(), &values); + duplicates_add_to_list_store(&list_store, &file, &directory, base_file_entry.size, base_file_entry.modified_date, true, true); for entry in vector { let (directory, file) = split_path(&entry.path); - - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsDuplicates::ActivatableSelectButton as u32, &true), - (ColumnsDuplicates::SelectionButton as u32, &false), - (ColumnsDuplicates::Size as u32, (&format_size(entry.size, BINARY))), - (ColumnsDuplicates::SizeAsBytes as u32, &entry.size), - (ColumnsDuplicates::Name as u32, &file), - (ColumnsDuplicates::Path as u32, &directory), - ( - ColumnsDuplicates::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsDuplicates::ModificationAsSecs as u32, &(entry.modified_date)), - (ColumnsDuplicates::Color as u32, &(MAIN_ROW_COLOR.to_string())), - (ColumnsDuplicates::IsHeader as u32, &false), - (ColumnsDuplicates::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - - list_store.set(&list_store.append(), &values); + duplicates_add_to_list_store(&list_store, &file, &directory, entry.size, entry.modified_date, false, true); } } } @@ -1574,46 +1345,11 @@ fn computer_duplicate_finder( vector.clone() }; - // HEADER let (directory, file) = split_path(&base_file_entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsDuplicates::ActivatableSelectButton as u32, &false), - (ColumnsDuplicates::SelectionButton as u32, &false), - (ColumnsDuplicates::Size as u32, (&format_size(base_file_entry.size, BINARY))), - (ColumnsDuplicates::SizeAsBytes as u32, &base_file_entry.size), - (ColumnsDuplicates::Name as u32, &file), - (ColumnsDuplicates::Path as u32, &directory), - ( - ColumnsDuplicates::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(base_file_entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsDuplicates::ModificationAsSecs as u32, &(base_file_entry.modified_date)), - (ColumnsDuplicates::Color as u32, &(HEADER_ROW_COLOR.to_string())), - (ColumnsDuplicates::IsHeader as u32, &true), - (ColumnsDuplicates::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - - // MEAT - list_store.set(&list_store.append(), &values); + duplicates_add_to_list_store(&list_store, &file, &directory, base_file_entry.size, base_file_entry.modified_date, true, true); for entry in vector { let (directory, file) = split_path(&entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsDuplicates::ActivatableSelectButton as u32, &true), - (ColumnsDuplicates::SelectionButton as u32, &false), - (ColumnsDuplicates::Size as u32, (&format_size(entry.size, BINARY))), - (ColumnsDuplicates::SizeAsBytes as u32, &entry.size), - (ColumnsDuplicates::Name as u32, &file), - (ColumnsDuplicates::Path as u32, &directory), - ( - ColumnsDuplicates::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsDuplicates::ModificationAsSecs as u32, &(entry.modified_date)), - (ColumnsDuplicates::Color as u32, &(MAIN_ROW_COLOR.to_string())), - (ColumnsDuplicates::IsHeader as u32, &false), - (ColumnsDuplicates::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); + duplicates_add_to_list_store(&list_store, &file, &directory, entry.size, entry.modified_date, false, true); } } } @@ -1633,46 +1369,11 @@ fn computer_duplicate_finder( vector.clone() }; - // HEADER let (directory, file) = split_path(&base_file_entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsDuplicates::ActivatableSelectButton as u32, &false), - (ColumnsDuplicates::SelectionButton as u32, &false), - (ColumnsDuplicates::Size as u32, (&format_size(base_file_entry.size, BINARY))), - (ColumnsDuplicates::SizeAsBytes as u32, &base_file_entry.size), - (ColumnsDuplicates::Name as u32, &file), - (ColumnsDuplicates::Path as u32, &directory), - ( - ColumnsDuplicates::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(base_file_entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsDuplicates::ModificationAsSecs as u32, &(base_file_entry.modified_date)), - (ColumnsDuplicates::Color as u32, &(HEADER_ROW_COLOR.to_string())), - (ColumnsDuplicates::IsHeader as u32, &true), - (ColumnsDuplicates::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - - // MEAT - list_store.set(&list_store.append(), &values); + duplicates_add_to_list_store(&list_store, &file, &directory, base_file_entry.size, base_file_entry.modified_date, true, true); for entry in vector { let (directory, file) = split_path(&entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsDuplicates::ActivatableSelectButton as u32, &true), - (ColumnsDuplicates::SelectionButton as u32, &false), - (ColumnsDuplicates::Size as u32, (&format_size(entry.size, BINARY))), - (ColumnsDuplicates::SizeAsBytes as u32, &entry.size), - (ColumnsDuplicates::Name as u32, &file), - (ColumnsDuplicates::Path as u32, &directory), - ( - ColumnsDuplicates::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsDuplicates::ModificationAsSecs as u32, &(entry.modified_date)), - (ColumnsDuplicates::Color as u32, &(MAIN_ROW_COLOR.to_string())), - (ColumnsDuplicates::IsHeader as u32, &false), - (ColumnsDuplicates::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); + duplicates_add_to_list_store(&list_store, &file, &directory, entry.size, entry.modified_date, false, true); } } } @@ -1698,44 +1399,10 @@ fn computer_duplicate_finder( vector.clone() }; - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsDuplicates::ActivatableSelectButton as u32, &false), - (ColumnsDuplicates::SelectionButton as u32, &false), - (ColumnsDuplicates::Size as u32, (&String::new())), - (ColumnsDuplicates::SizeAsBytes as u32, &0), - (ColumnsDuplicates::Name as u32, (&String::new())), - (ColumnsDuplicates::Path as u32, (&(format!("{} results", vector.len())))), - (ColumnsDuplicates::Modification as u32, (&String::new())), // No text in 3 column - (ColumnsDuplicates::ModificationAsSecs as u32, (&(0))), // Not used here - (ColumnsDuplicates::Color as u32, &(HEADER_ROW_COLOR.to_string())), - (ColumnsDuplicates::IsHeader as u32, &true), - (ColumnsDuplicates::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - - list_store.set(&list_store.append(), &values); + duplicates_add_to_list_store(&list_store, "", "", 0, 0, true, false); for entry in vector { let (directory, file) = split_path(&entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsDuplicates::ActivatableSelectButton as u32, &true), - (ColumnsDuplicates::SelectionButton as u32, &false), - (ColumnsDuplicates::Size as u32, (&format_size(entry.size, BINARY))), - (ColumnsDuplicates::SizeAsBytes as u32, &entry.size), - (ColumnsDuplicates::Name as u32, &file), - (ColumnsDuplicates::Path as u32, &directory), - ( - ColumnsDuplicates::Modification as u32, - &(format!( - "{} - ({})", - NaiveDateTime::from_timestamp_opt(entry.modified_date as i64, 0).unwrap(), - format_size(entry.size, BINARY) - )), - ), - (ColumnsDuplicates::ModificationAsSecs as u32, &(entry.modified_date)), - (ColumnsDuplicates::Color as u32, &(MAIN_ROW_COLOR.to_string())), - (ColumnsDuplicates::IsHeader as u32, &false), - (ColumnsDuplicates::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); + duplicates_add_to_list_store(&list_store, &file, &directory, entry.size, entry.modified_date, false, false); } } } @@ -1755,43 +1422,11 @@ fn computer_duplicate_finder( } else { vector.clone() }; + duplicates_add_to_list_store(&list_store, "", "", 0, 0, true, false); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsDuplicates::ActivatableSelectButton as u32, &false), - (ColumnsDuplicates::SelectionButton as u32, &false), - (ColumnsDuplicates::Size as u32, (&String::new())), - (ColumnsDuplicates::SizeAsBytes as u32, &0), - (ColumnsDuplicates::Name as u32, (&String::new())), - (ColumnsDuplicates::Path as u32, (&String::new())), - (ColumnsDuplicates::Modification as u32, &String::new()), // No text in 3 column - (ColumnsDuplicates::ModificationAsSecs as u32, &(0)), - (ColumnsDuplicates::Color as u32, &(HEADER_ROW_COLOR.to_string())), - (ColumnsDuplicates::IsHeader as u32, &true), - (ColumnsDuplicates::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - - list_store.set(&list_store.append(), &values); for entry in vector { let (directory, file) = split_path(&entry.path); - - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsDuplicates::ActivatableSelectButton as u32, &true), - (ColumnsDuplicates::SelectionButton as u32, &false), - (ColumnsDuplicates::Size as u32, (&format_size(entry.size, BINARY))), - (ColumnsDuplicates::SizeAsBytes as u32, &entry.size), - (ColumnsDuplicates::Name as u32, &file), - (ColumnsDuplicates::Path as u32, &directory), - ( - ColumnsDuplicates::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsDuplicates::ModificationAsSecs as u32, &(entry.modified_date)), - (ColumnsDuplicates::Color as u32, &(MAIN_ROW_COLOR.to_string())), - (ColumnsDuplicates::IsHeader as u32, &false), - (ColumnsDuplicates::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - - list_store.set(&list_store.append(), &values); + duplicates_add_to_list_store(&list_store, &file, &directory, entry.size, entry.modified_date, false, false); } } } @@ -1811,40 +1446,11 @@ fn computer_duplicate_finder( } else { vector.clone() }; - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsDuplicates::ActivatableSelectButton as u32, &false), - (ColumnsDuplicates::SelectionButton as u32, &false), - (ColumnsDuplicates::Size as u32, (&String::new())), - (ColumnsDuplicates::SizeAsBytes as u32, &0), - (ColumnsDuplicates::Name as u32, (&String::new())), - (ColumnsDuplicates::Path as u32, (&String::new())), - (ColumnsDuplicates::Modification as u32, &String::new()), // No text in 3 column - (ColumnsDuplicates::ModificationAsSecs as u32, &(0)), // Not used here - (ColumnsDuplicates::Color as u32, &(HEADER_ROW_COLOR.to_string())), - (ColumnsDuplicates::IsHeader as u32, &true), - (ColumnsDuplicates::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; + duplicates_add_to_list_store(&list_store, "", "", 0, 0, true, false); - list_store.set(&list_store.append(), &values); for entry in vector { let (directory, file) = split_path(&entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsDuplicates::ActivatableSelectButton as u32, &true), - (ColumnsDuplicates::SelectionButton as u32, &false), - (ColumnsDuplicates::Size as u32, (&format_size(entry.size, BINARY))), - (ColumnsDuplicates::SizeAsBytes as u32, &entry.size), - (ColumnsDuplicates::Name as u32, &file), - (ColumnsDuplicates::Path as u32, &directory), - ( - ColumnsDuplicates::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsDuplicates::ModificationAsSecs as u32, &(entry.modified_date)), - (ColumnsDuplicates::Color as u32, &(MAIN_ROW_COLOR.to_string())), - (ColumnsDuplicates::IsHeader as u32, &false), - (ColumnsDuplicates::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); + duplicates_add_to_list_store(&list_store, &file, &directory, entry.size, entry.modified_date, false, false); } } } @@ -1863,40 +1469,11 @@ fn computer_duplicate_finder( } else { vector.clone() }; - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsDuplicates::ActivatableSelectButton as u32, &false), - (ColumnsDuplicates::SelectionButton as u32, &false), - (ColumnsDuplicates::Size as u32, (&String::new())), - (ColumnsDuplicates::SizeAsBytes as u32, &0), - (ColumnsDuplicates::Name as u32, (&String::new())), - (ColumnsDuplicates::Path as u32, (&String::new())), - (ColumnsDuplicates::Modification as u32, &String::new()), // No text in 3 column - (ColumnsDuplicates::ModificationAsSecs as u32, &(0)), // Not used here - (ColumnsDuplicates::Color as u32, &(HEADER_ROW_COLOR.to_string())), - (ColumnsDuplicates::IsHeader as u32, &true), - (ColumnsDuplicates::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; + duplicates_add_to_list_store(&list_store, "", "", 0, 0, true, false); - list_store.set(&list_store.append(), &values); for entry in vector { let (directory, file) = split_path(&entry.path); - let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ - (ColumnsDuplicates::ActivatableSelectButton as u32, &true), - (ColumnsDuplicates::SelectionButton as u32, &false), - (ColumnsDuplicates::Size as u32, (&format_size(entry.size, BINARY))), - (ColumnsDuplicates::SizeAsBytes as u32, &entry.size), - (ColumnsDuplicates::Name as u32, &file), - (ColumnsDuplicates::Path as u32, &directory), - ( - ColumnsDuplicates::Modification as u32, - &(NaiveDateTime::from_timestamp_opt(entry.modified_date as i64, 0).unwrap().to_string()), - ), - (ColumnsDuplicates::ModificationAsSecs as u32, &(entry.modified_date)), - (ColumnsDuplicates::Color as u32, &(MAIN_ROW_COLOR.to_string())), - (ColumnsDuplicates::IsHeader as u32, &false), - (ColumnsDuplicates::TextColor as u32, &(TEXT_COLOR.to_string())), - ]; - list_store.set(&list_store.append(), &values); + duplicates_add_to_list_store(&list_store, &file, &directory, entry.size, entry.modified_date, false, false); } } } @@ -1935,7 +1512,160 @@ fn computer_duplicate_finder( } } } +fn duplicates_add_to_list_store(list_store: &ListStore, file: &str, directory: &str, size: u64, modified_date: u64, is_header: bool, is_reference_folder: bool) { + const COLUMNS_NUMBER: usize = 11; + let size_str; + let string_date; + let color = if is_header { HEADER_ROW_COLOR } else { MAIN_ROW_COLOR }; + if is_header && !is_reference_folder { + size_str = String::new(); + string_date = String::new(); + } else { + size_str = format_size(size, BINARY); + string_date = NaiveDateTime::from_timestamp_opt(modified_date as i64, 0).unwrap().to_string(); + }; + + let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ + (ColumnsDuplicates::ActivatableSelectButton as u32, &(!is_header)), + (ColumnsDuplicates::SelectionButton as u32, &false), + (ColumnsDuplicates::Size as u32, &size_str), + (ColumnsDuplicates::SizeAsBytes as u32, &size), + (ColumnsDuplicates::Name as u32, &file), + (ColumnsDuplicates::Path as u32, &directory), + (ColumnsDuplicates::Modification as u32, &string_date), + (ColumnsDuplicates::ModificationAsSecs as u32, &modified_date), + (ColumnsDuplicates::Color as u32, &color), + (ColumnsDuplicates::IsHeader as u32, &is_header), + (ColumnsDuplicates::TextColor as u32, &TEXT_COLOR), + ]; + list_store.set(&list_store.append(), &values); +} +fn similar_images_add_to_list_store( + list_store: &ListStore, + file: &str, + directory: &str, + size: u64, + modified_date: u64, + dimensions: &str, + similarity: u32, + hash_size: u8, + is_header: bool, + is_reference_folder: bool, +) { + const COLUMNS_NUMBER: usize = 13; + let size_str; + let string_date; + let similarity_string; + let color = if is_header { HEADER_ROW_COLOR } else { MAIN_ROW_COLOR }; + if is_header && !is_reference_folder { + size_str = String::new(); + string_date = String::new(); + similarity_string = String::new(); + } else { + size_str = format_size(size, BINARY); + string_date = NaiveDateTime::from_timestamp_opt(modified_date as i64, 0).unwrap().to_string(); + similarity_string = similar_images::get_string_from_similarity(&similarity, hash_size); + }; + + let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ + (ColumnsSimilarImages::ActivatableSelectButton as u32, &(!is_header)), + (ColumnsSimilarImages::SelectionButton as u32, &false), + (ColumnsSimilarImages::Similarity as u32, &similarity_string), + (ColumnsSimilarImages::Size as u32, &size_str), + (ColumnsSimilarImages::SizeAsBytes as u32, &size), + (ColumnsSimilarImages::Dimensions as u32, &dimensions), + (ColumnsSimilarImages::Name as u32, &file), + (ColumnsSimilarImages::Path as u32, &directory), + (ColumnsSimilarImages::Modification as u32, &string_date), + (ColumnsSimilarImages::ModificationAsSecs as u32, &modified_date), + (ColumnsSimilarImages::Color as u32, &color), + (ColumnsSimilarImages::IsHeader as u32, &is_header), + (ColumnsSimilarImages::TextColor as u32, &TEXT_COLOR), + ]; + list_store.set(&list_store.append(), &values); +} + +fn similar_videos_add_to_list_store(list_store: &ListStore, file: &str, directory: &str, size: u64, modified_date: u64, is_header: bool, is_reference_folder: bool) { + const COLUMNS_NUMBER: usize = 11; + let size_str; + let string_date; + let color = if is_header { HEADER_ROW_COLOR } else { MAIN_ROW_COLOR }; + if is_header && !is_reference_folder { + size_str = String::new(); + string_date = String::new(); + } else { + size_str = format_size(size, BINARY); + string_date = NaiveDateTime::from_timestamp_opt(modified_date as i64, 0).unwrap().to_string(); + }; + + let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ + (ColumnsSimilarVideos::ActivatableSelectButton as u32, &(!is_header)), + (ColumnsSimilarVideos::SelectionButton as u32, &false), + (ColumnsSimilarVideos::Size as u32, &size_str), + (ColumnsSimilarVideos::SizeAsBytes as u32, &size), + (ColumnsSimilarVideos::Name as u32, &file), + (ColumnsSimilarVideos::Path as u32, &directory), + (ColumnsSimilarVideos::Modification as u32, &(string_date)), + (ColumnsSimilarVideos::ModificationAsSecs as u32, &(modified_date)), + (ColumnsSimilarVideos::Color as u32, &color), + (ColumnsSimilarVideos::IsHeader as u32, &false), + (ColumnsSimilarVideos::TextColor as u32, &TEXT_COLOR), + ]; + + list_store.set(&list_store.append(), &values); +} +fn same_music_add_to_list_store( + list_store: &ListStore, + file: &str, + directory: &str, + size: u64, + modified_date: u64, + track_title: &str, + track_artist: &str, + track_year: &str, + track_bitrate: u32, + bitrate_string: &str, + track_genre: &str, + track_length: &str, + is_header: bool, + is_reference_folder: bool, +) { + const COLUMNS_NUMBER: usize = 18; + let size_str; + let string_date; + let color = if is_header { HEADER_ROW_COLOR } else { MAIN_ROW_COLOR }; + if is_header && !is_reference_folder { + size_str = String::new(); + string_date = String::new(); + } else { + size_str = format_size(size, BINARY); + string_date = NaiveDateTime::from_timestamp_opt(modified_date as i64, 0).unwrap().to_string(); + }; + + let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ + (ColumnsSameMusic::ActivatableSelectButton as u32, &(!is_header)), + (ColumnsSameMusic::SelectionButton as u32, &false), + (ColumnsSameMusic::Size as u32, &size_str), + (ColumnsSameMusic::SizeAsBytes as u32, &size), + (ColumnsSameMusic::Name as u32, &file), + (ColumnsSameMusic::Path as u32, &directory), + (ColumnsSameMusic::Title as u32, &track_title), + (ColumnsSameMusic::Artist as u32, &track_artist), + (ColumnsSameMusic::Year as u32, &track_year), + (ColumnsSameMusic::Genre as u32, &track_genre), + (ColumnsSameMusic::Bitrate as u32, &bitrate_string), + (ColumnsSameMusic::BitrateAsNumber as u32, &track_bitrate), + (ColumnsSameMusic::Length as u32, &track_length), + (ColumnsSameMusic::Modification as u32, &string_date), + (ColumnsSameMusic::ModificationAsSecs as u32, &modified_date), + (ColumnsSameMusic::Color as u32, &(color)), + (ColumnsSameMusic::IsHeader as u32, &is_header), + (ColumnsSameMusic::TextColor as u32, &TEXT_COLOR), + ]; + + list_store.set(&list_store.append(), &values); +} fn set_specific_buttons_as_active( buttons_array: &Rc>>>, notebook_enum: &NotebookMainEnum, diff --git a/czkawka_gui/src/connect_things/connect_duplicate_buttons.rs b/czkawka_gui/src/connect_things/connect_duplicate_buttons.rs index b687243..4b88d15 100644 --- a/czkawka_gui/src/connect_things/connect_duplicate_buttons.rs +++ b/czkawka_gui/src/connect_things/connect_duplicate_buttons.rs @@ -21,7 +21,7 @@ pub fn connect_duplicate_combo_box(gui_data: &GuiData) { label_duplicate_hash_type.set_visible(false); } - if DUPLICATES_CHECK_METHOD_COMBO_BOX[chosen_index as usize].check_method == CheckingMethod::Name { + if [CheckingMethod::Name, CheckingMethod::SizeName].contains(&DUPLICATES_CHECK_METHOD_COMBO_BOX[chosen_index as usize].check_method) { check_button_duplicate_case_sensitive_name.set_visible(true); } else { check_button_duplicate_case_sensitive_name.set_visible(false); diff --git a/czkawka_gui/src/saving_loading.rs b/czkawka_gui/src/saving_loading.rs index b380d33..89db0a8 100644 --- a/czkawka_gui/src/saving_loading.rs +++ b/czkawka_gui/src/saving_loading.rs @@ -938,7 +938,7 @@ pub fn load_configuration( main_notebook.label_duplicate_hash_type.set_visible(false); } - if DUPLICATES_CHECK_METHOD_COMBO_BOX[combo_chosen_index as usize].check_method == CheckingMethod::Name { + if [CheckingMethod::Name, CheckingMethod::SizeName].contains(&DUPLICATES_CHECK_METHOD_COMBO_BOX[combo_chosen_index as usize].check_method) { main_notebook.check_button_duplicate_case_sensitive_name.set_visible(true); } else { main_notebook.check_button_duplicate_case_sensitive_name.set_visible(false);