1
0
Fork 0
mirror of synced 2024-04-28 01:22:53 +12:00

Update to gtk-rs 0.14 (#383)

* Update to Gtk-rs 0.14
This commit is contained in:
Rafał Mikrut 2021-06-25 18:07:13 +02:00 committed by GitHub
parent 6510173bb6
commit b5f8d6b028
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
30 changed files with 866 additions and 808 deletions

View file

@ -175,9 +175,9 @@ jobs:
rm -rf czkawka_gui
cp target/release/czkawka_gui .
strip czkawka_gui
wget https://github.com/AppImage/pkg2appimage/releases/download/continuous/pkg2appimage-1806-x86_64.AppImage
chmod +x pkg2appimage-1806-x86_64.AppImage
./pkg2appimage-1806-x86_64.AppImage misc/czkawka-appimage-recipe.yml
wget https://github.com/AppImage/pkg2appimage/releases/download/continuous/pkg2appimage-1807-x86_64.AppImage
chmod +x pkg2appimage-1807-x86_64.AppImage
./pkg2appimage-1807-x86_64.AppImage misc/czkawka-appimage-recipe.yml
mv out/Czkawka*.AppImage out/czkawka_gui-minimal.AppImage
- name: Minimal Appimage Upload

288
Cargo.lock generated
View file

@ -65,23 +65,21 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
[[package]]
name = "atk"
version = "0.9.0"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "812b4911e210bd51b24596244523c856ca749e6223c50a7fbbba3f89ee37c426"
checksum = "a83b21d2aa75e464db56225e1bda2dd5993311ba1095acaa8fa03d1ae67026ba"
dependencies = [
"atk-sys",
"bitflags",
"glib",
"glib-sys",
"gobject-sys",
"libc",
]
[[package]]
name = "atk-sys"
version = "0.10.0"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f530e4af131d94cc4fa15c5c9d0348f0ef28bac64ba660b6b2a1cf2605dedfce"
checksum = "badcf670157c84bb8b1cf6b5f70b650fed78da2033c9eed84c4e49b11cbe83ea"
dependencies = [
"glib-sys",
"gobject-sys",
@ -164,9 +162,9 @@ checksum = "5488039ea2c6de8668351415e39a0218a8955bffadcff0cf01d1293a20854584"
[[package]]
name = "blake3"
version = "0.3.7"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e9ff35b701f3914bdb8fad3368d822c766ef2858b2583198e41639b936f09d3f"
checksum = "b64485778c4f16a6a5a9d335e80d449ac6c70cdd6a06d2af18a6f6f775a125b3"
dependencies = [
"arrayref",
"arrayvec",
@ -203,9 +201,9 @@ checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040"
[[package]]
name = "bzip2"
version = "0.3.3"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b"
checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0"
dependencies = [
"bzip2-sys",
"libc",
@ -213,9 +211,9 @@ dependencies = [
[[package]]
name = "bzip2-sys"
version = "0.1.10+1.0.8"
version = "0.1.11+1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17fa3d1ac1ca21c5c4e36a97f3c3eb25084576f6fc47bf0139c1123434216c6c"
checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
dependencies = [
"cc",
"libc",
@ -224,24 +222,22 @@ dependencies = [
[[package]]
name = "cairo-rs"
version = "0.9.1"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5c0f2e047e8ca53d0ff249c54ae047931d7a6ebe05d00af73e0ffeb6e34bdb8"
checksum = "8d32eecb1e806433cf68063c4548bbdc15cc56d35db19d685ab60909c4c85206"
dependencies = [
"bitflags",
"cairo-sys-rs",
"glib",
"glib-sys",
"gobject-sys",
"libc",
"thiserror",
]
[[package]]
name = "cairo-sys-rs"
version = "0.10.0"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2ed2639b9ad5f1d6efa76de95558e11339e7318426d84ac4890b86c03e828ca7"
checksum = "d7c9c3928781e8a017ece15eace05230f04b647457d170d2d9641c94a444ff80"
dependencies = [
"glib-sys",
"libc",
@ -272,6 +268,15 @@ dependencies = [
"nom",
]
[[package]]
name = "cfg-expr"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30aa9e2ffbb838c6b451db14f3cd8e63ed622bf859f9956bc93845a10fafc26a"
dependencies = [
"smallvec",
]
[[package]]
name = "cfg-if"
version = "0.1.10"
@ -607,6 +612,16 @@ version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
[[package]]
name = "field-offset"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92"
dependencies = [
"memoffset",
"rustc_version",
]
[[package]]
name = "flate2"
version = "1.0.20"
@ -627,9 +642,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "futures"
version = "0.3.14"
version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9d5813545e459ad3ca1bff9915e9ad7f1a47dc6a91b627ce321d5863b7dd253"
checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27"
dependencies = [
"futures-channel",
"futures-core",
@ -642,9 +657,9 @@ dependencies = [
[[package]]
name = "futures-channel"
version = "0.3.14"
version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce79c6a52a299137a6013061e0cf0e688fce5d7f1bc60125f520912fdb29ec25"
checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2"
dependencies = [
"futures-core",
"futures-sink",
@ -652,15 +667,15 @@ dependencies = [
[[package]]
name = "futures-core"
version = "0.3.14"
version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "098cd1c6dda6ca01650f1a37a794245eb73181d0d4d4e955e2f3c37db7af1815"
checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1"
[[package]]
name = "futures-executor"
version = "0.3.14"
version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "10f6cb7042eda00f0049b1d2080aa4b93442997ee507eb3828e8bd7577f94c9d"
checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79"
dependencies = [
"futures-core",
"futures-task",
@ -669,16 +684,17 @@ dependencies = [
[[package]]
name = "futures-io"
version = "0.3.14"
version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "365a1a1fb30ea1c03a830fdb2158f5236833ac81fa0ad12fe35b29cddc35cb04"
checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1"
[[package]]
name = "futures-macro"
version = "0.3.14"
version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "668c6733a182cd7deb4f1de7ba3bf2120823835b3bcfbeacf7d2c4a773c1bb8b"
checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121"
dependencies = [
"autocfg",
"proc-macro-hack",
"proc-macro2",
"quote",
@ -687,22 +703,23 @@ dependencies = [
[[package]]
name = "futures-sink"
version = "0.3.14"
version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c5629433c555de3d82861a7a4e3794a4c40040390907cfbfd7143a92a426c23"
checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282"
[[package]]
name = "futures-task"
version = "0.3.14"
version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba7aa51095076f3ba6d9a1f702f74bd05ec65f555d70d2033d55ba8d69f581bc"
checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae"
[[package]]
name = "futures-util"
version = "0.3.14"
version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c144ad54d60f23927f0a6b6d816e4271278b64f005ad65e4e35291d2de9c025"
checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967"
dependencies = [
"autocfg",
"futures-channel",
"futures-core",
"futures-io",
@ -719,44 +736,37 @@ dependencies = [
[[package]]
name = "gdk"
version = "0.13.2"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db00839b2a68a7a10af3fa28dfb3febaba3a20c3a9ac2425a33b7df1f84a6b7d"
checksum = "679e22651cd15888e7acd01767950edca2ee9fcd6421fbf5b3c3b420d4e88bb0"
dependencies = [
"bitflags",
"cairo-rs",
"cairo-sys-rs",
"gdk-pixbuf",
"gdk-sys",
"gio",
"gio-sys",
"glib",
"glib-sys",
"gobject-sys",
"libc",
"pango",
]
[[package]]
name = "gdk-pixbuf"
version = "0.9.0"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f6dae3cb99dd49b758b88f0132f8d401108e63ae8edd45f432d42cdff99998a"
checksum = "534192cb8f01daeb8fab2c8d4baa8f9aae5b7a39130525779f5c2608e235b10f"
dependencies = [
"gdk-pixbuf-sys",
"gio",
"gio-sys",
"glib",
"glib-sys",
"gobject-sys",
"libc",
]
[[package]]
name = "gdk-pixbuf-sys"
version = "0.10.0"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3bfe468a7f43e97b8d193a762b6c5cf67a7d36cacbc0b9291dbcae24bfea1e8f"
checksum = "f097c0704201fbc8f69c1762dc58c6947c8bb188b8ed0bc7e65259f1894fe590"
dependencies = [
"gio-sys",
"glib-sys",
@ -767,9 +777,9 @@ dependencies = [
[[package]]
name = "gdk-sys"
version = "0.10.0"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a9653cfc500fd268015b1ac055ddbc3df7a5c9ea3f4ccef147b3957bd140d69"
checksum = "0e091b3d3d6696949ac3b3fb3c62090e5bfd7bd6850bef5c3c5ea701de1b1f1e"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@ -815,20 +825,16 @@ dependencies = [
[[package]]
name = "gio"
version = "0.9.1"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fb60242bfff700772dae5d9e3a1f7aa2e4ebccf18b89662a16acb2822568561"
checksum = "86c6823b39d46d22cac2466de261f28d7f049ebc18f7b35296a42c7ed8a88325"
dependencies = [
"bitflags",
"futures",
"futures-channel",
"futures-core",
"futures-io",
"futures-util",
"gio-sys",
"glib",
"glib-sys",
"gobject-sys",
"libc",
"once_cell",
"thiserror",
@ -836,9 +842,9 @@ dependencies = [
[[package]]
name = "gio-sys"
version = "0.10.1"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e24fb752f8f5d2cf6bbc2c606fd2bc989c81c5e2fe321ab974d54f8b6344eac"
checksum = "c0a41df66e57fcc287c4bcf74fc26b884f31901ea9792ec75607289b456f48fa"
dependencies = [
"glib-sys",
"gobject-sys",
@ -849,33 +855,32 @@ dependencies = [
[[package]]
name = "glib"
version = "0.10.3"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c685013b7515e668f1b57a165b009d4d28cb139a8a989bbd699c10dad29d0c5"
checksum = "f0028bbfd270d0778540294abca11141d59cb474da4c1f61ca1e11f579c49247"
dependencies = [
"bitflags",
"futures-channel",
"futures-core",
"futures-executor",
"futures-task",
"futures-util",
"glib-macros",
"glib-sys",
"gobject-sys",
"libc",
"once_cell",
"smallvec",
]
[[package]]
name = "glib-macros"
version = "0.10.1"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41486a26d1366a8032b160b59065a59fb528530a46a49f627e7048fb8c064039"
checksum = "9eb7bdf41972a6f6dab5d72c23d22789f400059a43ba0d72b4bb2f8664d946a9"
dependencies = [
"anyhow",
"heck",
"itertools",
"proc-macro-crate",
"proc-macro-crate 1.0.0",
"proc-macro-error",
"proc-macro2",
"quote",
@ -884,9 +889,9 @@ dependencies = [
[[package]]
name = "glib-sys"
version = "0.10.1"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7e9b997a66e9a23d073f2b1abb4dbfc3925e0b8952f67efd8d9b6e168e4cdc1"
checksum = "1c1d60554a212445e2a858e42a0e48cece1bd57b311a19a9468f70376cf554ae"
dependencies = [
"libc",
"system-deps",
@ -900,9 +905,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
[[package]]
name = "gobject-sys"
version = "0.10.0"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "952133b60c318a62bf82ee75b93acc7e84028a093e06b9e27981c2b6fe68218c"
checksum = "aa92cae29759dae34ab5921d73fff5ad54b3d794ab842c117e36cafc7994c3f5"
dependencies = [
"glib-sys",
"libc",
@ -911,37 +916,32 @@ dependencies = [
[[package]]
name = "gtk"
version = "0.9.2"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f022f2054072b3af07666341984562c8e626a79daa8be27b955d12d06a5ad6a"
checksum = "10ae864e5eab8bc8b6b8544ed259eb02dd61b25323b20e777a77aa289c05fd0c"
dependencies = [
"atk",
"bitflags",
"cairo-rs",
"cairo-sys-rs",
"cc",
"field-offset",
"futures-channel",
"gdk",
"gdk-pixbuf",
"gdk-pixbuf-sys",
"gdk-sys",
"gio",
"gio-sys",
"glib",
"glib-sys",
"gobject-sys",
"gtk-sys",
"gtk3-macros",
"libc",
"once_cell",
"pango",
"pango-sys",
"pkg-config",
]
[[package]]
name = "gtk-sys"
version = "0.10.0"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89acda6f084863307d948ba64a4b1ef674e8527dddab147ee4cdcc194c880457"
checksum = "8c14c8d3da0545785a7c5a120345b3abb534010fb8ae0f2ef3f47c027fba303e"
dependencies = [
"atk-sys",
"cairo-sys-rs",
@ -955,6 +955,21 @@ dependencies = [
"system-deps",
]
[[package]]
name = "gtk3-macros"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21de1da96dc117443fb03c2e270b2d34b7de98d0a79a19bbb689476173745b79"
dependencies = [
"anyhow",
"heck",
"proc-macro-crate 1.0.0",
"proc-macro-error",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "hamming"
version = "0.1.3"
@ -993,9 +1008,9 @@ checksum = "8a164bb2ceaeff4f42542bdb847c41517c78a60f5649671b2a07312b6e117549"
[[package]]
name = "humansize"
version = "1.1.0"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6cab2627acfc432780848602f3f558f7e9dd427352224b0d9324025796d2a5e"
checksum = "02296996cb8796d7c6e3bc2d9211b7802812d36999a51bb754123ead7d37d026"
[[package]]
name = "id3"
@ -1057,9 +1072,9 @@ dependencies = [
[[package]]
name = "itertools"
version = "0.9.0"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
dependencies = [
"either",
]
@ -1291,7 +1306,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d"
dependencies = [
"darling",
"proc-macro-crate",
"proc-macro-crate 0.1.5",
"proc-macro2",
"quote",
"syn",
@ -1413,7 +1428,7 @@ version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c0fd9eba1d5db0994a239e09c1be402d35622277e35468ba891aa5e3188ce7e"
dependencies = [
"proc-macro-crate",
"proc-macro-crate 0.1.5",
"proc-macro2",
"quote",
"syn",
@ -1469,14 +1484,12 @@ dependencies = [
[[package]]
name = "pango"
version = "0.9.1"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9937068580bebd8ced19975938573803273ccbcbd598c58d4906efd4ac87c438"
checksum = "415823a4fb9f1789785cd6e2d2413816f2ecff92380382969aaca9c400e13a19"
dependencies = [
"bitflags",
"glib",
"glib-sys",
"gobject-sys",
"libc",
"once_cell",
"pango-sys",
@ -1484,9 +1497,9 @@ dependencies = [
[[package]]
name = "pango-sys"
version = "0.10.0"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d2650c8b62d116c020abd0cea26a4ed96526afda89b1c4ea567131fdefc890"
checksum = "2367099ca5e761546ba1d501955079f097caa186bb53ce0f718dca99ac1942fe"
dependencies = [
"glib-sys",
"gobject-sys",
@ -1525,6 +1538,15 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
[[package]]
name = "pest"
version = "2.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
dependencies = [
"ucd-trie",
]
[[package]]
name = "pin-project-lite"
version = "0.2.6"
@ -1570,6 +1592,16 @@ dependencies = [
"toml",
]
[[package]]
name = "proc-macro-crate"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92"
dependencies = [
"thiserror",
"toml",
]
[[package]]
name = "proc-macro-error"
version = "1.0.4"
@ -1666,9 +1698,9 @@ dependencies = [
[[package]]
name = "rayon"
version = "1.5.0"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674"
checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90"
dependencies = [
"autocfg",
"crossbeam-deque",
@ -1678,9 +1710,9 @@ dependencies = [
[[package]]
name = "rayon-core"
version = "1.9.0"
version = "1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a"
checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e"
dependencies = [
"crossbeam-channel",
"crossbeam-deque",
@ -1734,9 +1766,9 @@ dependencies = [
[[package]]
name = "rodio"
version = "0.13.1"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b65c2eda643191f6d1bb12ea323a9db8d9ba95374e9be3780b5a9fb5cfb8520f"
checksum = "4d98f5e557b61525057e2bc142c8cd7f0e70d75dc32852309bec440e6e046bf9"
dependencies = [
"claxon",
"cpal",
@ -1751,6 +1783,15 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
[[package]]
name = "rustc_version"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
dependencies = [
"semver",
]
[[package]]
name = "rustdct"
version = "0.4.0"
@ -1794,6 +1835,24 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
name = "semver"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
dependencies = [
"semver-parser",
]
[[package]]
name = "semver-parser"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
dependencies = [
"pest",
]
[[package]]
name = "serde"
version = "1.0.125"
@ -1893,15 +1952,15 @@ dependencies = [
[[package]]
name = "strum"
version = "0.18.0"
version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57bd81eb48f4c437cadc685403cad539345bf703d78e63707418431cecd4522b"
checksum = "7318c509b5ba57f18533982607f24070a55d353e90d4cae30c467cdb2ad5ac5c"
[[package]]
name = "strum_macros"
version = "0.18.0"
version = "0.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c"
checksum = "ee8bc6b87a5112aeeab1f4a9f7ab634fe6cbefc4850006df31267f4cfb9e3149"
dependencies = [
"heck",
"proc-macro2",
@ -1928,11 +1987,14 @@ dependencies = [
[[package]]
name = "system-deps"
version = "1.3.2"
version = "3.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f3ecc17269a19353b3558b313bba738b25d82993e30d62a18406a24aba4649b"
checksum = "c248107ad7bc1ac07066a4d003cae9e9a7bc2e27d3418f7a9cdcdc8699dbea70"
dependencies = [
"anyhow",
"cfg-expr",
"heck",
"itertools",
"pkg-config",
"strum",
"strum_macros",
@ -2060,6 +2122,12 @@ version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06"
[[package]]
name = "ucd-trie"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
[[package]]
name = "unicode-segmentation"
version = "1.7.1"
@ -2086,9 +2154,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
[[package]]
name = "version-compare"
version = "0.0.10"
version = "0.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d63556a25bae6ea31b52e640d7c41d1ab27faba4ccb600013837a3d0b3994ca1"
checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
[[package]]
name = "version_check"
@ -2232,9 +2300,9 @@ checksum = "e575e15bedf6e57b5c2d763ffc6c3c760143466cbd09d762d539680ab5992ded"
[[package]]
name = "zip"
version = "0.5.12"
version = "0.5.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c83dc9b784d252127720168abd71ea82bf8c3d96b17dc565b5e2a02854f2b27"
checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815"
dependencies = [
"byteorder",
"bzip2",

View file

@ -10,4 +10,4 @@ repository = "https://github.com/qarmin/czkawka"
[dependencies]
czkawka_core = { path = "../czkawka_core" }
structopt = "0.3.18"
structopt = "0.3.21"

View file

@ -10,9 +10,9 @@ repository = "https://github.com/qarmin/czkawka"
[dependencies]
humansize = "1"
rayon = "1"
crossbeam-channel = "0.5.0"
humansize = "1.1.1"
rayon = "1.5.1"
crossbeam-channel = "0.5.1"
# For saving/loading config files to specific directories
directories-next = "2.0.0"
@ -20,7 +20,7 @@ directories-next = "2.0.0"
# Needed by similar images
img_hash = "3.1"
bk-tree = "0.3"
image = "0.23.12"
image = "0.23.14"
hamming = "0.1"
# Needed by same music
@ -28,18 +28,18 @@ bitflags = "1.2.1"
audiotags = "0.2.7182"
# Futures - needed by async progress sender
futures = "0.3.9"
futures = "0.3.15"
# Needed by broken files
zip = "0.5.9"
rodio = { version = "0.13.0", optional = true }
zip = "0.5.13"
rodio = { version = "0.14.0", optional = true }
# Hashes
blake3 = "0.3"
blake3 = "0.3.8"
crc32fast = "1.2.1"
xxhash-rust = { version = "0.8.2", features = ["xxh3"] }
tempfile = "3.1"
tempfile = "3.2"
[features]
default = []

View file

@ -10,26 +10,26 @@ repository = "https://github.com/qarmin/czkawka"
[dependencies]
czkawka_core = { path = "../czkawka_core" }
gdk = "0.13.2"
glib = "0.10.1"
gdk = "0.14.0"
glib = "0.14.0"
humansize = "1"
chrono = "0.4"
humansize = "1.1.1"
chrono = "0.4.19"
# Used for sending stop signal across threads
crossbeam-channel = "0.5"
crossbeam-channel = "0.5.1"
# To get informations about progress
futures = "0.3.8"
futures = "0.3.15"
# For saving/loading config files to specific directories
directories-next = "2.0.0"
# For opening files
open = "1.4.0"
open = "1.7.0"
# To get image preview
image = "0.23.12"
image = "0.23.14"
# Move files to trash
trash = "1.3.0"
@ -38,7 +38,7 @@ trash = "1.3.0"
winapi = { version = "0.3.9", features = ["combaseapi", "objbase", "shobjidl_core", "windef", "winerror", "wtypesbase", "winuser"] }
[dependencies.gtk]
version = "0.9.2"
version = "0.14.0"
default-features = false # just in case
features = ["v3_22"]

View file

@ -34,10 +34,9 @@ pub fn connect_button_delete(gui_data: &GuiData) {
return;
}
match to_notebook_main_enum(notebook_main.get_current_page().unwrap()) {
match to_notebook_main_enum(notebook_main.current_page().unwrap()) {
NotebookMainEnum::Duplicate => {
if !check_button_settings_confirm_group_deletion.get_active() || !check_if_deleting_all_files_in_group(&tree_view_duplicate_finder.clone(), ColumnsDuplicates::Color as i32, &window_main, &check_button_settings_confirm_group_deletion)
{
if !check_button_settings_confirm_group_deletion.is_active() || !check_if_deleting_all_files_in_group(&tree_view_duplicate_finder.clone(), ColumnsDuplicates::Color as i32, &window_main, &check_button_settings_confirm_group_deletion) {
tree_remove(&tree_view_duplicate_finder.clone(), ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, ColumnsDuplicates::Color as i32, &gui_data);
}
}
@ -54,7 +53,7 @@ pub fn connect_button_delete(gui_data: &GuiData) {
basic_remove(&tree_view_big_files_finder.clone(), ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, &gui_data);
}
NotebookMainEnum::SimilarImages => {
if !check_button_settings_confirm_group_deletion.get_active()
if !check_button_settings_confirm_group_deletion.is_active()
|| !check_if_deleting_all_files_in_group(&tree_view_similar_images_finder.clone(), ColumnsSimilarImages::Color as i32, &window_main, &check_button_settings_confirm_group_deletion)
{
tree_remove(
@ -71,8 +70,7 @@ pub fn connect_button_delete(gui_data: &GuiData) {
basic_remove(&tree_view_zeroed_files_finder.clone(), ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, &gui_data);
}
NotebookMainEnum::SameMusic => {
if !check_button_settings_confirm_group_deletion.get_active() || !check_if_deleting_all_files_in_group(&tree_view_same_music_finder.clone(), ColumnsSameMusic::Color as i32, &window_main, &check_button_settings_confirm_group_deletion)
{
if !check_button_settings_confirm_group_deletion.is_active() || !check_if_deleting_all_files_in_group(&tree_view_same_music_finder.clone(), ColumnsSameMusic::Color as i32, &window_main, &check_button_settings_confirm_group_deletion) {
tree_remove(&tree_view_same_music_finder.clone(), ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, ColumnsSameMusic::Color as i32, &gui_data);
}
}
@ -87,7 +85,7 @@ pub fn connect_button_delete(gui_data: &GuiData) {
}
pub fn check_if_can_delete_files(check_button_settings_confirm_deletion: &gtk::CheckButton, window_main: &gtk::Window) -> bool {
if check_button_settings_confirm_deletion.get_active() {
if check_button_settings_confirm_deletion.is_active() {
let confirmation_dialog_delete = gtk::Dialog::with_buttons(
Some("Delete confirmation"),
Some(window_main),
@ -99,19 +97,15 @@ pub fn check_if_can_delete_files(check_button_settings_confirm_deletion: &gtk::C
check_button.set_active(true);
check_button.set_halign(Align::Center);
let button_box = confirmation_dialog_delete.get_children()[0].clone().downcast::<gtk::Box>().unwrap().get_children()[0]
.clone()
.downcast::<gtk::Box>()
.unwrap()
.get_children()[0]
let button_box = confirmation_dialog_delete.children()[0].clone().downcast::<gtk::Box>().unwrap().children()[0].clone().downcast::<gtk::Box>().unwrap().children()[0]
.clone()
.downcast::<gtk::ButtonBox>()
.unwrap();
let button_ok = button_box.get_children()[0].clone();
let button_ok = button_box.children()[0].clone();
button_ok.grab_focus();
let internal_box = confirmation_dialog_delete.get_children()[0].clone().downcast::<gtk::Box>().unwrap();
let internal_box = confirmation_dialog_delete.children()[0].clone().downcast::<gtk::Box>().unwrap();
internal_box.add(&label);
internal_box.add(&check_button);
@ -119,7 +113,7 @@ pub fn check_if_can_delete_files(check_button_settings_confirm_deletion: &gtk::C
let response_type = confirmation_dialog_delete.run();
if response_type == gtk::ResponseType::Ok {
if !check_button.get_active() {
if !check_button.is_active() {
check_button_settings_confirm_deletion.set_active(false);
}
confirmation_dialog_delete.hide();
@ -134,8 +128,8 @@ pub fn check_if_can_delete_files(check_button_settings_confirm_deletion: &gtk::C
}
pub fn check_if_deleting_all_files_in_group(tree_view: &gtk::TreeView, column_color: i32, window_main: &gtk::Window, check_button_settings_confirm_group_deletion: &gtk::CheckButton) -> bool {
let selection = tree_view.get_selection();
let (selection_rows, tree_model) = selection.get_selected_rows();
let selection = tree_view.selection();
let (selection_rows, tree_model) = selection.selected_rows();
if selection_rows.is_empty() {
return false;
}
@ -144,9 +138,9 @@ pub fn check_if_deleting_all_files_in_group(tree_view: &gtk::TreeView, column_co
let mut selected_all_records: bool = true;
if let Some(first_iter) = tree_model.get_iter_first() {
if let Some(first_iter) = tree_model.iter_first() {
let current_iter = first_iter;
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() != HEADER_ROW_COLOR {
if tree_model.value(&current_iter, column_color).get::<String>().unwrap() != HEADER_ROW_COLOR {
panic!("First element, should be a header"); // First element should be header
};
@ -158,11 +152,11 @@ pub fn check_if_deleting_all_files_in_group(tree_view: &gtk::TreeView, column_co
break;
}
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR {
if tree_model.value(&current_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
if selected_all_records {
break;
}
} else if current_selected_row != selection_rows.len() && selection_rows[current_selected_row] == tree_model.get_path(&current_iter).unwrap() {
} else if current_selected_row != selection_rows.len() && selection_rows[current_selected_row] == tree_model.path(&current_iter).unwrap() {
current_selected_row += 1;
} else {
selected_all_records = false;
@ -187,19 +181,19 @@ pub fn check_if_deleting_all_files_in_group(tree_view: &gtk::TreeView, column_co
check_button.set_active(true);
check_button.set_halign(Align::Center);
let button_box = confirmation_dialog_group_delete.get_children()[0].clone().downcast::<gtk::Box>().unwrap().get_children()[0]
let button_box = confirmation_dialog_group_delete.children()[0].clone().downcast::<gtk::Box>().unwrap().children()[0]
.clone()
.downcast::<gtk::Box>()
.unwrap()
.get_children()[0]
.children()[0]
.clone()
.downcast::<gtk::ButtonBox>()
.unwrap();
let button_ok = button_box.get_children()[0].clone();
let button_ok = button_box.children()[0].clone();
button_ok.grab_focus();
let internal_box = confirmation_dialog_group_delete.get_children()[0].clone().downcast::<gtk::Box>().unwrap();
let internal_box = confirmation_dialog_group_delete.children()[0].clone().downcast::<gtk::Box>().unwrap();
internal_box.add(&label);
internal_box.add(&label2);
internal_box.add(&check_button);
@ -208,7 +202,7 @@ pub fn check_if_deleting_all_files_in_group(tree_view: &gtk::TreeView, column_co
let response_type = confirmation_dialog_group_delete.run();
if response_type == gtk::ResponseType::Ok {
if !check_button.get_active() {
if !check_button.is_active() {
check_button_settings_confirm_group_deletion.set_active(false);
}
} else {
@ -225,11 +219,11 @@ pub fn check_if_deleting_all_files_in_group(tree_view: &gtk::TreeView, column_co
pub fn empty_folder_remover(tree_view: &gtk::TreeView, column_file_name: i32, column_path: i32, gui_data: &GuiData) {
let text_view_errors = gui_data.text_view_errors.clone();
let use_trash = gui_data.settings.check_button_settings_use_trash.clone().get_active();
let use_trash = gui_data.settings.check_button_settings_use_trash.clone().is_active();
let selection = tree_view.get_selection();
let selection = tree_view.selection();
let (selection_rows, tree_model) = selection.get_selected_rows();
let (selection_rows, tree_model) = selection.selected_rows();
if selection_rows.is_empty() {
return;
}
@ -239,8 +233,8 @@ pub fn empty_folder_remover(tree_view: &gtk::TreeView, column_file_name: i32, co
// Must be deleted from end to start, because when deleting entries, TreePath(and also TreeIter) will points to invalid data
for tree_path in selection_rows.iter().rev() {
let name = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_file_name).get::<String>().unwrap().unwrap();
let path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_path).get::<String>().unwrap().unwrap();
let name = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_file_name).get::<String>().unwrap();
let path = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_path).get::<String>().unwrap();
// We must check if folder is really empty or contains only other empty folders
let mut error_happened = false;
@ -294,14 +288,14 @@ pub fn empty_folder_remover(tree_view: &gtk::TreeView, column_file_name: i32, co
if !use_trash {
match fs::remove_dir_all(format!("{}/{}", path, name)) {
Ok(_) => {
list_store.remove(&list_store.get_iter(tree_path).unwrap());
list_store.remove(&list_store.iter(tree_path).unwrap());
}
Err(_) => error_happened = true,
}
} else {
match trash::delete(format!("{}/{}", path, name)) {
Ok(_) => {
list_store.remove(&list_store.get_iter(tree_path).unwrap());
list_store.remove(&list_store.iter(tree_path).unwrap());
}
Err(_) => error_happened = true,
}
@ -312,17 +306,17 @@ pub fn empty_folder_remover(tree_view: &gtk::TreeView, column_file_name: i32, co
}
}
text_view_errors.get_buffer().unwrap().set_text(messages.as_str());
text_view_errors.buffer().unwrap().set_text(messages.as_str());
selection.unselect_all();
}
pub fn basic_remove(tree_view: &gtk::TreeView, column_file_name: i32, column_path: i32, gui_data: &GuiData) {
let text_view_errors = gui_data.text_view_errors.clone();
let use_trash = gui_data.settings.check_button_settings_use_trash.clone().get_active();
let use_trash = gui_data.settings.check_button_settings_use_trash.clone().is_active();
let selection = tree_view.get_selection();
let selection = tree_view.selection();
let (selection_rows, tree_model) = selection.get_selected_rows();
let (selection_rows, tree_model) = selection.selected_rows();
if selection_rows.is_empty() {
return;
}
@ -332,38 +326,38 @@ pub fn basic_remove(tree_view: &gtk::TreeView, column_file_name: i32, column_pat
// Must be deleted from end to start, because when deleting entries, TreePath(and also TreeIter) will points to invalid data
for tree_path in selection_rows.iter().rev() {
let name = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_file_name).get::<String>().unwrap().unwrap();
let path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_path).get::<String>().unwrap().unwrap();
let name = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_file_name).get::<String>().unwrap();
let path = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_path).get::<String>().unwrap();
if !use_trash {
match fs::remove_file(format!("{}/{}", path, name)) {
Ok(_) => {
list_store.remove(&list_store.get_iter(tree_path).unwrap());
list_store.remove(&list_store.iter(tree_path).unwrap());
}
Err(_) => messages += format!("Failed to remove file {}/{} because file doesn't exists or you don't have permissions.\n", path, name).as_str(),
}
} else {
match trash::delete(format!("{}/{}", path, name)) {
Ok(_) => {
list_store.remove(&list_store.get_iter(tree_path).unwrap());
list_store.remove(&list_store.iter(tree_path).unwrap());
}
Err(_) => messages += format!("Failed to remove file {}/{} because file doesn't exists or you don't have permissions.\n", path, name).as_str(),
}
}
}
text_view_errors.get_buffer().unwrap().set_text(messages.as_str());
text_view_errors.buffer().unwrap().set_text(messages.as_str());
selection.unselect_all();
}
// Remove all occurrences - remove every element which have same path and name as even non selected ones
pub fn tree_remove(tree_view: &gtk::TreeView, column_file_name: i32, column_path: i32, column_color: i32, gui_data: &GuiData) {
let text_view_errors = gui_data.text_view_errors.clone();
let use_trash = gui_data.settings.check_button_settings_use_trash.clone().get_active();
let use_trash = gui_data.settings.check_button_settings_use_trash.clone().is_active();
let selection = tree_view.get_selection();
let selection = tree_view.selection();
let (selection_rows, tree_model) = selection.get_selected_rows();
let (selection_rows, tree_model) = selection.selected_rows();
if selection_rows.is_empty() {
return;
}
@ -376,10 +370,10 @@ pub fn tree_remove(tree_view: &gtk::TreeView, column_file_name: i32, column_path
// Save to variable paths of files, and remove it when not removing all occurrences.
for tree_path in selection_rows.iter().rev() {
let file_name = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_file_name).get::<String>().unwrap().unwrap();
let path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_path).get::<String>().unwrap().unwrap();
let file_name = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_file_name).get::<String>().unwrap();
let path = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_path).get::<String>().unwrap();
list_store.remove(&list_store.get_iter(tree_path).unwrap());
list_store.remove(&list_store.iter(tree_path).unwrap());
map_with_path_to_delete.entry(path.clone()).or_insert_with(Vec::new);
map_with_path_to_delete.get_mut(path.as_str()).unwrap().push(file_name);
@ -411,30 +405,30 @@ pub fn tree_remove(tree_view: &gtk::TreeView, column_file_name: i32, column_path
}
// Remove only child from header
if let Some(first_iter) = list_store.get_iter_first() {
if let Some(first_iter) = list_store.iter_first() {
let mut vec_tree_path_to_delete: Vec<gtk::TreePath> = Vec::new();
let mut current_iter = first_iter;
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() != HEADER_ROW_COLOR {
if tree_model.value(&current_iter, column_color).get::<String>().unwrap() != HEADER_ROW_COLOR {
panic!("First deleted element, should be a header"); // First element should be header
};
let mut next_iter;
let mut next_next_iter;
'main: loop {
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() != HEADER_ROW_COLOR {
if tree_model.value(&current_iter, column_color).get::<String>().unwrap() != HEADER_ROW_COLOR {
panic!("First deleted element, should be a header"); // First element should be header
};
next_iter = current_iter.clone();
if !list_store.iter_next(&next_iter) {
// There is only single header left (H1 -> END) -> (NOTHING)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
break 'main;
}
if tree_model.get_value(&next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR {
if tree_model.value(&next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
// There are two headers each others(we remove just first) -> (H1 -> H2) -> (H2)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
current_iter = next_iter.clone();
continue 'main;
}
@ -442,15 +436,15 @@ pub fn tree_remove(tree_view: &gtk::TreeView, column_file_name: i32, column_path
next_next_iter = next_iter.clone();
if !list_store.iter_next(&next_next_iter) {
// There is only one child of header left, so we remove it with header (H1 -> C1 -> END) -> (NOTHING)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.get_path(&next_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&next_iter).unwrap());
break 'main;
}
if tree_model.get_value(&next_next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR {
if tree_model.value(&next_next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
// One child between two headers, we can remove them (H1 -> C1 -> H2) -> (H2)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.get_path(&next_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&next_iter).unwrap());
current_iter = next_next_iter.clone();
continue 'main;
}
@ -461,24 +455,24 @@ pub fn tree_remove(tree_view: &gtk::TreeView, column_file_name: i32, column_path
break 'main;
}
// Move to next header
if tree_model.get_value(&next_next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR {
if tree_model.value(&next_next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
current_iter = next_next_iter.clone();
continue 'main;
}
}
}
for tree_path in vec_tree_path_to_delete.iter().rev() {
list_store.remove(&list_store.get_iter(&tree_path).unwrap());
list_store.remove(&list_store.iter(&tree_path).unwrap());
}
}
// Last step, remove orphan header if exists
if let Some(iter) = list_store.get_iter_first() {
if let Some(iter) = list_store.iter_first() {
if !list_store.iter_next(&iter) {
list_store.clear();
}
}
text_view_errors.get_buffer().unwrap().set_text(messages.as_str());
text_view_errors.buffer().unwrap().set_text(messages.as_str());
selection.unselect_all();
}

View file

@ -19,7 +19,7 @@ pub fn connect_button_hardlink(gui_data: &GuiData) {
let image_preview_similar_images = gui_data.main_notebook.image_preview_similar_images.clone();
buttons_hardlink.connect_clicked(move |_| match to_notebook_main_enum(notebook_main.get_current_page().unwrap()) {
buttons_hardlink.connect_clicked(move |_| match to_notebook_main_enum(notebook_main.current_page().unwrap()) {
NotebookMainEnum::Duplicate => {
hardlink(tree_view_duplicate_finder.clone(), ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, ColumnsDuplicates::Color as i32, &gui_data);
}
@ -44,9 +44,9 @@ fn hardlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, c
reset_text_view(&text_view_errors);
let list_store = get_list_store(&tree_view);
let selection = tree_view.get_selection();
let selection = tree_view.selection();
let (selection_rows, tree_model) = selection.get_selected_rows();
let (selection_rows, tree_model) = selection.selected_rows();
if selection_rows.is_empty() {
return;
}
@ -58,11 +58,11 @@ fn hardlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, c
let mut vec_tree_path_to_remove: Vec<TreePath> = Vec::new(); // List of hardlinked files without its root
let mut vec_hardlink_data: Vec<HardlinkData> = Vec::new();
let current_iter: TreeIter = tree_model.get_iter_first().unwrap(); // Hardlink button should be only visible when more than 1 element is visible, otherwise it needs to be fixed
let current_iter: TreeIter = tree_model.iter_first().unwrap(); // Hardlink button should be only visible when more than 1 element is visible, otherwise it needs to be fixed
let mut current_hardlink_data: Option<HardlinkData> = None;
let mut current_selected_index = 0;
loop {
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR {
if tree_model.value(&current_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
if let Some(current_hardlink_data) = current_hardlink_data {
if !current_hardlink_data.files_to_hardlink.is_empty() {
vec_hardlink_data.push(current_hardlink_data);
@ -76,13 +76,13 @@ fn hardlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, c
continue;
}
if tree_model.get_path(&current_iter).unwrap() == selection_rows[current_selected_index] {
let file_name = tree_model.get_value(&current_iter, column_file_name).get::<String>().unwrap().unwrap();
let path = tree_model.get_value(&current_iter, column_path).get::<String>().unwrap().unwrap();
if tree_model.path(&current_iter).unwrap() == selection_rows[current_selected_index] {
let file_name = tree_model.value(&current_iter, column_file_name).get::<String>().unwrap();
let path = tree_model.value(&current_iter, column_path).get::<String>().unwrap();
let full_file_path = format!("{}/{}", path, file_name);
if current_hardlink_data.is_some() {
vec_tree_path_to_remove.push(tree_model.get_path(&current_iter).unwrap());
vec_tree_path_to_remove.push(tree_model.path(&current_iter).unwrap());
let mut temp_data = current_hardlink_data.unwrap();
temp_data.files_to_hardlink.push(full_file_path);
current_hardlink_data = Some(temp_data);
@ -128,34 +128,34 @@ fn hardlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, c
println!();
}
for tree_path in vec_tree_path_to_remove.iter().rev() {
list_store.remove(&tree_model.get_iter(tree_path).unwrap());
list_store.remove(&tree_model.iter(tree_path).unwrap());
}
// Remove only child from header
if let Some(first_iter) = list_store.get_iter_first() {
if let Some(first_iter) = list_store.iter_first() {
let mut vec_tree_path_to_delete: Vec<gtk::TreePath> = Vec::new();
let mut current_iter = first_iter;
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() != HEADER_ROW_COLOR {
if tree_model.value(&current_iter, column_color).get::<String>().unwrap() != HEADER_ROW_COLOR {
panic!(); // First element should be header
};
let mut next_iter;
let mut next_next_iter;
'main: loop {
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() != HEADER_ROW_COLOR {
if tree_model.value(&current_iter, column_color).get::<String>().unwrap() != HEADER_ROW_COLOR {
panic!(); // First element should be header
};
next_iter = current_iter.clone();
if !list_store.iter_next(&next_iter) {
// There is only single header left (H1 -> END) -> (NOTHING)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
break 'main;
}
if tree_model.get_value(&next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR {
if tree_model.value(&next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
// There are two headers each others(we remove just first) -> (H1 -> H2) -> (H2)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
current_iter = next_iter.clone();
continue 'main;
}
@ -163,15 +163,15 @@ fn hardlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, c
next_next_iter = next_iter.clone();
if !list_store.iter_next(&next_next_iter) {
// There is only one child of header left, so we remove it with header (H1 -> C1 -> END) -> (NOTHING)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.get_path(&next_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&next_iter).unwrap());
break 'main;
}
if tree_model.get_value(&next_next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR {
if tree_model.value(&next_next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
// One child between two headers, we can remove them (H1 -> C1 -> H2) -> (H2)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.get_path(&next_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&next_iter).unwrap());
current_iter = next_next_iter.clone();
continue 'main;
}
@ -182,14 +182,14 @@ fn hardlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, c
break 'main;
}
// Move to next header
if tree_model.get_value(&next_next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR {
if tree_model.value(&next_next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
current_iter = next_next_iter.clone();
continue 'main;
}
}
}
for tree_path in vec_tree_path_to_delete.iter().rev() {
list_store.remove(&list_store.get_iter(&tree_path).unwrap());
list_store.remove(&list_store.iter(&tree_path).unwrap());
}
}

View file

@ -21,7 +21,7 @@ pub fn connect_button_save(gui_data: &GuiData) {
buttons_save.connect_clicked(move |_| {
let file_name;
match to_notebook_main_enum(notebook_main.get_current_page().unwrap()) {
match to_notebook_main_enum(notebook_main.current_page().unwrap()) {
NotebookMainEnum::Duplicate => {
file_name = "results_duplicates.txt";
@ -73,7 +73,7 @@ pub fn connect_button_save(gui_data: &GuiData) {
shared_broken_files_state.borrow_mut().save_results_to_file(file_name);
}
}
post_save_things(file_name, &to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &gui_data);
post_save_things(file_name, &to_notebook_main_enum(notebook_main.current_page().unwrap()), &gui_data);
});
}
fn post_save_things(file_name: &str, type_of_tab: &NotebookMainEnum, gui_data: &GuiData) {

View file

@ -97,12 +97,12 @@ pub fn connect_button_search(
buttons_search_clone.connect_clicked(move |_| {
let included_directories = get_path_buf_from_vector_of_strings(get_string_from_list_store(&tree_view_included_directories));
let excluded_directories = get_path_buf_from_vector_of_strings(get_string_from_list_store(&tree_view_excluded_directories));
let recursive_search = check_button_recursive.get_active();
let excluded_items = entry_excluded_items.get_text().as_str().to_string().split(',').map(|e| e.to_string()).collect::<Vec<String>>();
let allowed_extensions = entry_allowed_extensions.get_text().as_str().to_string();
let hide_hard_links = check_button_settings_hide_hard_links.get_active();
let use_cache = check_button_settings_use_cache.get_active();
let minimal_cache_file_size = entry_settings_cache_file_minimal_size.get_text().as_str().parse::<u64>().unwrap_or(2 * 1024 * 1024);
let recursive_search = check_button_recursive.is_active();
let excluded_items = entry_excluded_items.text().as_str().to_string().split(',').map(|e| e.to_string()).collect::<Vec<String>>();
let allowed_extensions = entry_allowed_extensions.text().as_str().to_string();
let hide_hard_links = check_button_settings_hide_hard_links.is_active();
let use_cache = check_button_settings_use_cache.is_active();
let minimal_cache_file_size = entry_settings_cache_file_minimal_size.text().as_str().parse::<u64>().unwrap_or(2 * 1024 * 1024);
let show_dialog = Arc::new(AtomicBool::new(true));
@ -125,7 +125,7 @@ pub fn connect_button_search(
let glib_stop_sender = glib_stop_sender.clone();
let stop_receiver = stop_receiver.clone();
match to_notebook_main_enum(notebook_main.get_current_page().unwrap()) {
match to_notebook_main_enum(notebook_main.current_page().unwrap()) {
NotebookMainEnum::Duplicate => {
label_stage.show();
grid_progress_stages.show_all();
@ -134,25 +134,25 @@ pub fn connect_button_search(
get_list_store(&tree_view_duplicate_finder).clear();
let check_method;
if radio_button_duplicates_name.get_active() {
if radio_button_duplicates_name.is_active() {
check_method = duplicate::CheckingMethod::Name;
} else if radio_button_duplicates_size.get_active() {
} else if radio_button_duplicates_size.is_active() {
check_method = duplicate::CheckingMethod::Size;
} else if radio_button_duplicates_hashmb.get_active() {
} else if radio_button_duplicates_hashmb.is_active() {
check_method = duplicate::CheckingMethod::HashMb;
} else if radio_button_duplicates_hash.get_active() {
} else if radio_button_duplicates_hash.is_active() {
check_method = duplicate::CheckingMethod::Hash;
} else {
panic!("No radio button is pressed");
}
let minimal_file_size = entry_duplicate_minimal_size.get_text().as_str().parse::<u64>().unwrap_or(1024);
let minimal_file_size = entry_duplicate_minimal_size.text().as_str().parse::<u64>().unwrap_or(1024);
let hash_type: HashType;
if radio_button_hash_type_blake3.get_active() {
if radio_button_hash_type_blake3.is_active() {
hash_type = duplicate::HashType::Blake3;
} else if radio_button_hash_type_crc32.get_active() {
} else if radio_button_hash_type_crc32.is_active() {
hash_type = duplicate::HashType::Crc32;
} else if radio_button_hash_type_xxh3.get_active() {
} else if radio_button_hash_type_xxh3.is_active() {
hash_type = duplicate::HashType::Xxh3;
} else {
panic!("No radio button is pressed");
@ -223,7 +223,7 @@ pub fn connect_button_search(
get_list_store(&tree_view_big_files_finder).clear();
let numbers_of_files_to_check = entry_big_files_number.get_text().as_str().parse::<usize>().unwrap_or(50);
let numbers_of_files_to_check = entry_big_files_number.text().as_str().parse::<usize>().unwrap_or(50);
let futures_sender_big_file = futures_sender_big_file.clone();
// Find big files
@ -268,20 +268,20 @@ pub fn connect_button_search(
get_list_store(&tree_view_similar_images_finder).clear();
let minimal_file_size = entry_similar_images_minimal_size.get_text().as_str().parse::<u64>().unwrap_or(1024 * 16);
let minimal_file_size = entry_similar_images_minimal_size.text().as_str().parse::<u64>().unwrap_or(1024 * 16);
let similarity;
if radio_button_similar_images_minimal.get_active() {
if radio_button_similar_images_minimal.is_active() {
similarity = similar_images::Similarity::Minimal;
} else if radio_button_similar_images_very_small.get_active() {
} else if radio_button_similar_images_very_small.is_active() {
similarity = similar_images::Similarity::VerySmall;
} else if radio_button_similar_images_small.get_active() {
} else if radio_button_similar_images_small.is_active() {
similarity = similar_images::Similarity::Small;
} else if radio_button_similar_images_medium.get_active() {
} else if radio_button_similar_images_medium.is_active() {
similarity = similar_images::Similarity::Medium;
} else if radio_button_similar_images_high.get_active() {
} else if radio_button_similar_images_high.is_active() {
similarity = similar_images::Similarity::High;
} else if radio_button_similar_images_very_high.get_active() {
} else if radio_button_similar_images_very_high.is_active() {
similarity = similar_images::Similarity::VeryHigh;
} else {
panic!("No radio button is pressed");
@ -331,23 +331,23 @@ pub fn connect_button_search(
get_list_store(&tree_view_same_music_finder).clear();
let minimal_file_size = entry_same_music_minimal_size.get_text().as_str().parse::<u64>().unwrap_or(1024);
let minimal_file_size = entry_same_music_minimal_size.text().as_str().parse::<u64>().unwrap_or(1024);
let mut music_similarity: MusicSimilarity = MusicSimilarity::NONE;
if check_button_music_title.get_active() {
if check_button_music_title.is_active() {
music_similarity |= MusicSimilarity::TITLE;
}
if check_button_music_artist.get_active() {
if check_button_music_artist.is_active() {
music_similarity |= MusicSimilarity::ARTIST;
}
if check_button_music_album_title.get_active() {
if check_button_music_album_title.is_active() {
music_similarity |= MusicSimilarity::ALBUM_TITLE;
}
if check_button_music_album_artist.get_active() {
if check_button_music_album_artist.is_active() {
music_similarity |= MusicSimilarity::ALBUM_ARTIST;
}
if check_button_music_year.get_active() {
if check_button_music_year.is_active() {
music_similarity |= MusicSimilarity::YEAR;
}

View file

@ -39,7 +39,7 @@ pub fn connect_button_select(gui_data: &GuiData) {
let buttons_select = gui_data.bottom_buttons.buttons_select.clone();
buttons_select_clone.connect_clicked(move |_| {
show_required_popovers(&gui_data, &to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &hashmap);
show_required_popovers(&gui_data, &to_notebook_main_enum(notebook_main.current_page().unwrap()), &hashmap);
popover_select.set_relative_to(Some(&buttons_select));
popover_select.popup();
});

View file

@ -6,7 +6,7 @@ pub fn connect_button_stop(gui_data: &GuiData) {
let button_stop_in_dialog = gui_data.progress_window.button_stop_in_dialog.clone();
let stop_sender = gui_data.stop_sender.clone();
button_stop_in_dialog.connect_key_release_event(move |_, e| {
if e.get_keycode() == Some(36) {
if e.keycode() == Some(36) {
// Only accept enter key to stop search
stop_sender.send(()).unwrap();
}

View file

@ -18,7 +18,7 @@ pub fn connect_button_symlink(gui_data: &GuiData) {
let image_preview_similar_images = gui_data.main_notebook.image_preview_similar_images.clone();
buttons_symlink.connect_clicked(move |_| match to_notebook_main_enum(notebook_main.get_current_page().unwrap()) {
buttons_symlink.connect_clicked(move |_| match to_notebook_main_enum(notebook_main.current_page().unwrap()) {
NotebookMainEnum::Duplicate => {
symlink(tree_view_duplicate_finder.clone(), ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, ColumnsDuplicates::Color as i32, &gui_data);
}
@ -43,9 +43,9 @@ fn symlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, co
reset_text_view(&text_view_errors);
let list_store = get_list_store(&tree_view);
let selection = tree_view.get_selection();
let selection = tree_view.selection();
let (selection_rows, tree_model) = selection.get_selected_rows();
let (selection_rows, tree_model) = selection.selected_rows();
if selection_rows.is_empty() {
return;
}
@ -57,11 +57,11 @@ fn symlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, co
let mut vec_tree_path_to_remove: Vec<TreePath> = Vec::new(); // List of symlinked files without its root
let mut vec_symlink_data: Vec<SymlinkData> = Vec::new();
let current_iter: TreeIter = tree_model.get_iter_first().unwrap(); // Symlink button should be only visible when more than 1 element is visible, otherwise it needs to be fixed
let current_iter: TreeIter = tree_model.iter_first().unwrap(); // Symlink button should be only visible when more than 1 element is visible, otherwise it needs to be fixed
let mut current_symlink_data: Option<SymlinkData> = None;
let mut current_selected_index = 0;
loop {
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR {
if tree_model.value(&current_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
if let Some(current_symlink_data) = current_symlink_data {
if !current_symlink_data.files_to_symlink.is_empty() {
vec_symlink_data.push(current_symlink_data);
@ -75,13 +75,13 @@ fn symlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, co
continue;
}
if tree_model.get_path(&current_iter).unwrap() == selection_rows[current_selected_index] {
let file_name = tree_model.get_value(&current_iter, column_file_name).get::<String>().unwrap().unwrap();
let path = tree_model.get_value(&current_iter, column_path).get::<String>().unwrap().unwrap();
if tree_model.path(&current_iter).unwrap() == selection_rows[current_selected_index] {
let file_name = tree_model.value(&current_iter, column_file_name).get::<String>().unwrap();
let path = tree_model.value(&current_iter, column_path).get::<String>().unwrap();
let full_file_path = format!("{}/{}", path, file_name);
if current_symlink_data.is_some() {
vec_tree_path_to_remove.push(tree_model.get_path(&current_iter).unwrap());
vec_tree_path_to_remove.push(tree_model.path(&current_iter).unwrap());
let mut temp_data = current_symlink_data.unwrap();
temp_data.files_to_symlink.push(full_file_path);
current_symlink_data = Some(temp_data);
@ -149,34 +149,34 @@ fn symlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, co
println!();
}
for tree_path in vec_tree_path_to_remove.iter().rev() {
list_store.remove(&tree_model.get_iter(tree_path).unwrap());
list_store.remove(&tree_model.iter(tree_path).unwrap());
}
// Remove only child from header
if let Some(first_iter) = list_store.get_iter_first() {
if let Some(first_iter) = list_store.iter_first() {
let mut vec_tree_path_to_delete: Vec<gtk::TreePath> = Vec::new();
let mut current_iter = first_iter;
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() != HEADER_ROW_COLOR {
if tree_model.value(&current_iter, column_color).get::<String>().unwrap() != HEADER_ROW_COLOR {
panic!(); // First element should be header
};
let mut next_iter;
let mut next_next_iter;
'main: loop {
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() != HEADER_ROW_COLOR {
if tree_model.value(&current_iter, column_color).get::<String>().unwrap() != HEADER_ROW_COLOR {
panic!(); // First element should be header
};
next_iter = current_iter.clone();
if !list_store.iter_next(&next_iter) {
// There is only single header left (H1 -> END) -> (NOTHING)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
break 'main;
}
if tree_model.get_value(&next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR {
if tree_model.value(&next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
// There are two headers each others(we remove just first) -> (H1 -> H2) -> (H2)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
current_iter = next_iter.clone();
continue 'main;
}
@ -184,15 +184,15 @@ fn symlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, co
next_next_iter = next_iter.clone();
if !list_store.iter_next(&next_next_iter) {
// There is only one child of header left, so we remove it with header (H1 -> C1 -> END) -> (NOTHING)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.get_path(&next_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&next_iter).unwrap());
break 'main;
}
if tree_model.get_value(&next_next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR {
if tree_model.value(&next_next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
// One child between two headers, we can remove them (H1 -> C1 -> H2) -> (H2)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.get_path(&next_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.path(&next_iter).unwrap());
current_iter = next_next_iter.clone();
continue 'main;
}
@ -203,14 +203,14 @@ fn symlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, co
break 'main;
}
// Move to next header
if tree_model.get_value(&next_next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR {
if tree_model.value(&next_next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
current_iter = next_next_iter.clone();
continue 'main;
}
}
}
for tree_path in vec_tree_path_to_delete.iter().rev() {
list_store.remove(&list_store.get_iter(&tree_path).unwrap());
list_store.remove(&list_store.iter(&tree_path).unwrap());
}
}

View file

@ -42,6 +42,9 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
let window_progress = gui_data.progress_window.window_progress.clone();
let taskbar_state = gui_data.taskbar_state.clone();
let main_context = glib::MainContext::default();
let _guard = main_context.acquire().unwrap();
glib_stop_receiver.attach(None, move |msg| {
buttons_search.show();
@ -94,8 +97,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{
let list_store = get_list_store(&tree_view_duplicate_finder);
let col_indices = [0, 1, 2, 3, 4, 5];
match df.get_check_method() {
CheckingMethod::Name => {
let btreemap = df.get_files_sorted_by_names();
@ -113,26 +114,27 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
vector.clone()
};
let values: [&dyn ToValue; 6] = [
&name,
&(format!("{} results", vector.len())),
&"".to_string(), // No text in 3 column
&(0), // Not used here
&(HEADER_ROW_COLOR.to_string()),
&(TEXT_COLOR.to_string()),
let values: [(u32, &dyn ToValue); 6] = [
(0, &name),
(1, (&(format!("{} results", vector.len())))),
(2, (&"".to_string())), // No text in 3 column
(3, (&(0))), // Not used here
(4, &(HEADER_ROW_COLOR.to_string())),
(5, &(TEXT_COLOR.to_string())),
];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
for entry in vector {
let (directory, file) = split_path(&entry.path);
let values: [&dyn ToValue; 6] = [
&file,
&directory,
&(format!("{} - ({})", NaiveDateTime::from_timestamp(entry.modified_date as i64, 0).to_string(), entry.size.file_size(options::BINARY).unwrap())),
&(entry.modified_date),
&(MAIN_ROW_COLOR.to_string()),
&(TEXT_COLOR.to_string()),
let values: [(u32, &dyn ToValue); 6] = [
(0, &file),
(1, &directory),
(2, &(format!("{} - ({})", NaiveDateTime::from_timestamp(entry.modified_date as i64, 0).to_string(), entry.size.file_size(options::BINARY).unwrap()))),
(3, &(entry.modified_date)),
(4, &(MAIN_ROW_COLOR.to_string())),
(5, &(TEXT_COLOR.to_string())),
];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
}
}
}
@ -153,26 +155,32 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
vector.clone()
};
let values: [&dyn ToValue; 6] = [
&(format!("{} x {} ({} bytes)", vector.len(), size.file_size(options::BINARY).unwrap(), size)),
&(format!("{} ({} bytes) lost", ((vector.len() - 1) as u64 * *size as u64).file_size(options::BINARY).unwrap(), (vector.len() - 1) as u64 * *size as u64)),
&"".to_string(), // No text in 3 column
&(0), // Not used here
&(HEADER_ROW_COLOR.to_string()),
&(TEXT_COLOR.to_string()),
let values: [(u32, &dyn ToValue); 6] = [
(0, &(format!("{} x {} ({} bytes)", vector.len(), size.file_size(options::BINARY).unwrap(), size))),
(
1,
&(format!("{} ({} bytes) lost", ((vector.len() - 1) as u64 * *size as u64).file_size(options::BINARY).unwrap(), (vector.len() - 1) as u64 * *size as u64)),
),
(2, &"".to_string()), // No text in 3 column
(3, &(0)),
(4, &(HEADER_ROW_COLOR.to_string())),
(5, &(TEXT_COLOR.to_string())),
];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
for entry in vector {
let (directory, file) = split_path(&entry.path);
let values: [&dyn ToValue; 6] = [
&file,
&directory,
&(NaiveDateTime::from_timestamp(entry.modified_date as i64, 0).to_string()),
&(entry.modified_date),
&(MAIN_ROW_COLOR.to_string()),
&(TEXT_COLOR.to_string()),
let values: [(u32, &dyn ToValue); 6] = [
(0, &file),
(1, &directory),
(2, &(NaiveDateTime::from_timestamp(entry.modified_date as i64, 0).to_string())),
(3, &(entry.modified_date)),
(4, &(MAIN_ROW_COLOR.to_string())),
(5, &(TEXT_COLOR.to_string())),
];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
}
}
}
@ -192,27 +200,30 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
} else {
vector.clone()
};
let values: [&dyn ToValue; 6] = [
&(format!("{} x {} ({} bytes)", vector.len(), size.file_size(options::BINARY).unwrap(), size)),
&(format!("{} ({} bytes) lost", ((vector.len() - 1) as u64 * *size as u64).file_size(options::BINARY).unwrap(), (vector.len() - 1) as u64 * *size as u64)),
&"".to_string(), // No text in 3 column
&(0), // Not used here
&(HEADER_ROW_COLOR.to_string()),
&(TEXT_COLOR.to_string()),
let values: [(u32, &dyn ToValue); 6] = [
(0, &(format!("{} x {} ({} bytes)", vector.len(), size.file_size(options::BINARY).unwrap(), size))),
(
1,
&(format!("{} ({} bytes) lost", ((vector.len() - 1) as u64 * *size as u64).file_size(options::BINARY).unwrap(), (vector.len() - 1) as u64 * *size as u64)),
),
(2, &"".to_string()), // No text in 3 column
(3, &(0)), // Not used here
(4, &(HEADER_ROW_COLOR.to_string())),
(5, &(TEXT_COLOR.to_string())),
];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
for entry in vector {
let (directory, file) = split_path(&entry.path);
let values: [&dyn ToValue; 6] = [
&file,
&directory,
&(NaiveDateTime::from_timestamp(entry.modified_date as i64, 0).to_string()),
&(entry.modified_date),
&(MAIN_ROW_COLOR.to_string()),
&(TEXT_COLOR.to_string()),
let values: [(u32, &dyn ToValue); 6] = [
(0, &file),
(1, &directory),
(2, &(NaiveDateTime::from_timestamp(entry.modified_date as i64, 0).to_string())),
(3, &(entry.modified_date)),
(4, &(MAIN_ROW_COLOR.to_string())),
(5, &(TEXT_COLOR.to_string())),
];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
}
}
}
@ -260,8 +271,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{
let list_store = get_list_store(&tree_view_empty_folder_finder);
let col_indices = [0, 1, 2];
let hashmap = ef.get_empty_folder_list();
let mut vector = hashmap.keys().cloned().collect::<Vec<PathBuf>>();
@ -272,8 +281,8 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
for path in vector {
let (directory, file) = split_path(&path);
let values: [&dyn ToValue; 3] = [&file, &directory, &(NaiveDateTime::from_timestamp(hashmap.get(&path).unwrap().modified_date as i64, 0).to_string())];
list_store.set(&list_store.append(), &col_indices, &values);
let values: [(u32, &dyn ToValue); 3] = [(0, &file), (1, &directory), (2, &(NaiveDateTime::from_timestamp(hashmap.get(&path).unwrap().modified_date as i64, 0).to_string()))];
list_store.set(&list_store.append(), &values);
}
print_text_messages_to_text_view(text_messages, &text_view_errors);
}
@ -310,8 +319,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{
let list_store = get_list_store(&tree_view_empty_files_finder);
let col_indices = [0, 1, 2];
let vector = vf.get_empty_files();
// Sort
@ -323,8 +330,8 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
for file_entry in vector {
let (directory, file) = split_path(&file_entry.path);
let values: [&dyn ToValue; 3] = [&file, &directory, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string())];
list_store.set(&list_store.append(), &col_indices, &values);
let values: [(u32, &dyn ToValue); 3] = [(0, &file), (1, &directory), (2, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()))];
list_store.set(&list_store.append(), &values);
}
print_text_messages_to_text_view(text_messages, &text_view_errors);
}
@ -361,8 +368,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{
let list_store = get_list_store(&tree_view_big_files_finder);
let col_indices = [0, 1, 2, 3];
let btreemap = bf.get_big_files();
for (size, vector) in btreemap.iter().rev() {
@ -373,13 +378,13 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
});
for file_entry in vector {
let (directory, file) = split_path(&file_entry.path);
let values: [&dyn ToValue; 4] = [
&(format!("{} ({} bytes)", size.file_size(options::BINARY).unwrap(), size)),
&file,
&directory,
&(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()),
let values: [(u32, &dyn ToValue); 4] = [
(0, &(format!("{} ({} bytes)", size.file_size(options::BINARY).unwrap(), size))),
(1, &file),
(2, &directory),
(3, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string())),
];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
}
}
print_text_messages_to_text_view(text_messages, &text_view_errors);
@ -417,8 +422,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{
let list_store = get_list_store(&tree_view_temporary_files_finder);
let col_indices = [0, 1, 2];
let vector = tf.get_temporary_files();
// Sort
@ -430,8 +433,8 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
for file_entry in vector {
let (directory, file) = split_path(&file_entry.path);
let values: [&dyn ToValue; 3] = [&file, &directory, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string())];
list_store.set(&list_store.append(), &col_indices, &values);
let values: [(u32, &dyn ToValue); 3] = [(0, &file), (1, &directory), (2, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()))];
list_store.set(&list_store.append(), &values);
}
print_text_messages_to_text_view(text_messages, &text_view_errors);
}
@ -468,8 +471,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{
let list_store = get_list_store(&tree_view_similar_images_finder);
let col_indices = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
let vec_struct_similar = sf.get_similar_images();
for vec_file_entry in vec_struct_similar.iter() {
@ -486,36 +487,36 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
};
// Header
let values: [&dyn ToValue; 10] = [
&"".to_string(),
&"".to_string(),
&(0),
&"".to_string(),
&"".to_string(),
&"".to_string(),
&"".to_string(),
&(0),
&(HEADER_ROW_COLOR.to_string()),
&(TEXT_COLOR.to_string()),
let values: [(u32, &dyn ToValue); 10] = [
(0, &"".to_string()),
(1, &"".to_string()),
(2, &(0)),
(3, &"".to_string()),
(4, &"".to_string()),
(5, &"".to_string()),
(6, &"".to_string()),
(7, &(0)),
(8, &(HEADER_ROW_COLOR.to_string())),
(9, &(TEXT_COLOR.to_string())),
];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
// Meat
for file_entry in vec_file_entry.iter() {
let (directory, file) = split_path(&file_entry.path);
let values: [&dyn ToValue; 10] = [
&(get_text_from_similarity(&file_entry.similarity).to_string()),
&file_entry.size.file_size(options::BINARY).unwrap(),
&file_entry.size,
&file_entry.dimensions,
&file,
&directory,
&(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()),
&(file_entry.modified_date),
&(MAIN_ROW_COLOR.to_string()),
&(TEXT_COLOR.to_string()),
let values: [(u32, &dyn ToValue); 10] = [
(0, &(get_text_from_similarity(&file_entry.similarity).to_string())),
(1, &file_entry.size.file_size(options::BINARY).unwrap()),
(2, &file_entry.size),
(3, &file_entry.dimensions),
(4, &file),
(5, &directory),
(6, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string())),
(7, &(file_entry.modified_date)),
(8, &(MAIN_ROW_COLOR.to_string())),
(9, &(TEXT_COLOR.to_string())),
];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
}
}
@ -558,8 +559,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{
let list_store = get_list_store(&tree_view_zeroed_files_finder);
let col_indices = [0, 1, 2, 3, 4];
let vector = zf.get_zeroed_files();
// Sort
@ -571,14 +570,14 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
for file_entry in vector {
let (directory, file) = split_path(&file_entry.path);
let values: [&dyn ToValue; 5] = [
&(file_entry.size.file_size(options::BINARY).unwrap()),
&(file_entry.size),
&file,
&directory,
&(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()),
let values: [(u32, &dyn ToValue); 5] = [
(0, &(file_entry.size.file_size(options::BINARY).unwrap())),
(1, &(file_entry.size)),
(2, &file),
(3, &directory),
(4, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string())),
];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
}
print_text_messages_to_text_view(text_messages, &text_view_errors);
}
@ -615,8 +614,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{
let list_store = get_list_store(&tree_view_same_music_finder);
let col_indices = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
let vector = mf.get_duplicated_music_entries();
let music_similarity = *mf.get_music_similarity();
@ -642,55 +639,70 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
vec_file_entry.clone()
};
let values: [&dyn ToValue; 13] = [
&"".to_string(),
&(0),
&"".to_string(),
&"".to_string(),
&(match is_title {
true => text.clone(),
false => "".to_string(),
}),
&(match is_artist {
true => text.clone(),
false => "".to_string(),
}),
&(match is_album_title {
true => text.clone(),
false => "".to_string(),
}),
&(match is_album_artist {
true => text.clone(),
false => "".to_string(),
}),
&(match is_year {
true => text.clone(),
false => "".to_string(),
}),
&"".to_string(),
&(0),
&(HEADER_ROW_COLOR.to_string()),
&(TEXT_COLOR.to_string()),
let values: [(u32, &dyn ToValue); 13] = [
(0, &"".to_string()),
(1, &(0)),
(2, &"".to_string()),
(3, &"".to_string()),
(
4,
&(match is_title {
true => text.clone(),
false => "".to_string(),
}),
),
(
5,
&(match is_artist {
true => text.clone(),
false => "".to_string(),
}),
),
(
6,
&(match is_album_title {
true => text.clone(),
false => "".to_string(),
}),
),
(
7,
&(match is_album_artist {
true => text.clone(),
false => "".to_string(),
}),
),
(
8,
&(match is_year {
true => text.clone(),
false => "".to_string(),
}),
),
(9, &"".to_string()),
(10, &(0)),
(11, &(HEADER_ROW_COLOR.to_string())),
(12, &(TEXT_COLOR.to_string())),
];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
for file_entry in vec_file_entry {
let (directory, file) = split_path(&file_entry.path);
let values: [&dyn ToValue; 13] = [
&file_entry.size.file_size(options::BINARY).unwrap(),
&file_entry.size,
&file,
&directory,
&file_entry.title,
&file_entry.artist,
&file_entry.album_title,
&file_entry.album_artist,
&file_entry.year.to_string(),
&(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()),
&(file_entry.modified_date),
&(MAIN_ROW_COLOR.to_string()),
&(TEXT_COLOR.to_string()),
let values: [(u32, &dyn ToValue); 13] = [
(0, &file_entry.size.file_size(options::BINARY).unwrap()),
(1, &file_entry.size),
(2, &file),
(3, &directory),
(4, &file_entry.title),
(5, &file_entry.artist),
(6, &file_entry.album_title),
(7, &file_entry.album_artist),
(8, &file_entry.year.to_string()),
(9, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string())),
(10, &(file_entry.modified_date)),
(11, &(MAIN_ROW_COLOR.to_string())),
(12, &(TEXT_COLOR.to_string())),
];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
}
}
print_text_messages_to_text_view(text_messages, &text_view_errors);
@ -732,8 +744,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{
let list_store = get_list_store(&tree_view_invalid_symlinks);
let col_indices = [0, 1, 2, 3, 4];
let vector = ifs.get_invalid_symlinks();
// Sort
@ -746,14 +756,14 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
for file_entry in vector {
let (directory, file) = split_path(&file_entry.symlink_path);
let values: [&dyn ToValue; 5] = [
&file,
&directory,
&file_entry.destination_path.to_string_lossy().to_string(),
&get_text_from_invalid_symlink_cause(&file_entry.type_of_error),
&(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()),
let values: [(u32, &dyn ToValue); 5] = [
(0, &file),
(1, &directory),
(2, &file_entry.destination_path.to_string_lossy().to_string()),
(3, &get_text_from_invalid_symlink_cause(&file_entry.type_of_error)),
(4, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string())),
];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
}
print_text_messages_to_text_view(text_messages, &text_view_errors);
}
@ -790,8 +800,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{
let list_store = get_list_store(&tree_view_broken_files);
let col_indices = [0, 1, 2, 3];
let vector = br.get_broken_files();
// Sort
@ -803,8 +811,8 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
for file_entry in vector {
let (directory, file) = split_path(&file_entry.path);
let values: [&dyn ToValue; 4] = [&file, &directory, &file_entry.error_string, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string())];
list_store.set(&list_store.append(), &col_indices, &values);
let values: [(u32, &dyn ToValue); 4] = [(0, &file), (1, &directory), (2, &file_entry.error_string), (3, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()))];
list_store.set(&list_store.append(), &values);
}
print_text_messages_to_text_view(text_messages, &text_view_errors);
}

View file

@ -22,9 +22,9 @@ pub fn connect_notebook_tabs(gui_data: &GuiData) {
{
for (index, upper_tab) in get_all_upper_tabs().iter().enumerate() {
if *shared_upper_notebooks.borrow_mut().get_mut(&current_tab_in_main_notebook).unwrap().get_mut(upper_tab).unwrap() {
notebook_upper.get_children().get(index).unwrap().show();
notebook_upper.children().get(index).unwrap().show();
} else {
notebook_upper.get_children().get(index).unwrap().hide();
notebook_upper.children().get(index).unwrap().hide();
}
}
}

View file

@ -10,26 +10,26 @@ use gtk::TreeIter;
// e.g. 'tar.gz' will be selected instead 'tar.gz (copy)' etc.
fn popover_select_all(popover: &gtk::Popover, tree_view: &gtk::TreeView) {
let selection = tree_view.get_selection();
let selection = tree_view.selection();
selection.select_all();
popover.popdown();
}
fn popover_unselect_all(popover: &gtk::Popover, tree_view: &gtk::TreeView) {
let selection = tree_view.get_selection();
let selection = tree_view.selection();
selection.unselect_all();
popover.popdown();
}
fn popover_reverse(popover: &gtk::Popover, tree_view: &gtk::TreeView) {
let selection = tree_view.get_selection();
let selection = tree_view.selection();
let (vector_tree_path, tree_model) = selection.get_selected_rows();
let (vector_tree_path, tree_model) = selection.selected_rows();
if vector_tree_path.is_empty() {
selection.select_all();
} else {
let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records
let tree_iter_all = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
let mut current_path_index = 0;
let mut tree_iter_selected: TreeIter;
@ -37,8 +37,8 @@ fn popover_reverse(popover: &gtk::Popover, tree_view: &gtk::TreeView) {
if current_path_index >= vector_tree_path.len() {
selection.select_iter(&tree_iter_all);
} else {
tree_iter_selected = tree_model.get_iter(vector_tree_path.get(current_path_index).unwrap()).unwrap();
if tree_model.get_path(&tree_iter_all).unwrap() == tree_model.get_path(&tree_iter_selected).unwrap() {
tree_iter_selected = tree_model.iter(vector_tree_path.get(current_path_index).unwrap()).unwrap();
if tree_model.path(&tree_iter_all).unwrap() == tree_model.path(&tree_iter_selected).unwrap() {
selection.unselect_iter(&tree_iter_selected);
current_path_index += 1;
} else {
@ -55,10 +55,10 @@ fn popover_reverse(popover: &gtk::Popover, tree_view: &gtk::TreeView) {
}
fn popover_all_except_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_modification_as_secs: i32, column_file_name: i32) {
let selection = tree_view.get_selection();
let tree_model = tree_view.get_model().unwrap();
let selection = tree_view.selection();
let tree_model = tree_view.model().unwrap();
let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records
let tree_iter_all = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
let mut end: bool = false;
@ -71,7 +71,7 @@ fn popover_all_except_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
let mut file_length: usize = 0;
loop {
let color = tree_model.get_value(&tree_iter_all, column_color).get::<String>().unwrap().unwrap();
let color = tree_model.value(&tree_iter_all, column_color).get::<String>().unwrap();
if color == HEADER_ROW_COLOR {
if !tree_model.iter_next(&tree_iter_all) {
end = true;
@ -79,8 +79,8 @@ fn popover_all_except_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
break;
}
tree_iter_array.push(tree_iter_all.clone());
let modification = tree_model.get_value(&tree_iter_all, column_modification_as_secs).get::<u64>().unwrap().unwrap();
let current_file_length = tree_model.get_value(&tree_iter_all, column_file_name).get::<String>().unwrap().unwrap().len();
let modification = tree_model.value(&tree_iter_all, column_modification_as_secs).get::<u64>().unwrap();
let current_file_length = tree_model.value(&tree_iter_all, column_file_name).get::<String>().unwrap().len();
if modification < oldest_modification_time || (modification == oldest_modification_time && current_file_length < file_length) {
file_length = current_file_length;
oldest_modification_time = modification;
@ -113,10 +113,10 @@ fn popover_all_except_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
popover.popdown();
}
fn popover_all_except_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_modification_as_secs: i32, column_file_name: i32) {
let selection = tree_view.get_selection();
let tree_model = tree_view.get_model().unwrap();
let selection = tree_view.selection();
let tree_model = tree_view.model().unwrap();
let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records
let tree_iter_all = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
let mut end: bool = false;
@ -129,7 +129,7 @@ fn popover_all_except_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
let mut file_length: usize = 0;
loop {
let color = tree_model.get_value(&tree_iter_all, column_color).get::<String>().unwrap().unwrap();
let color = tree_model.value(&tree_iter_all, column_color).get::<String>().unwrap();
if color == HEADER_ROW_COLOR {
if !tree_model.iter_next(&tree_iter_all) {
end = true;
@ -137,8 +137,8 @@ fn popover_all_except_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
break;
}
tree_iter_array.push(tree_iter_all.clone());
let modification = tree_model.get_value(&tree_iter_all, column_modification_as_secs).get::<u64>().unwrap().unwrap();
let current_file_length = tree_model.get_value(&tree_iter_all, column_file_name).get::<String>().unwrap().unwrap().len();
let modification = tree_model.value(&tree_iter_all, column_modification_as_secs).get::<u64>().unwrap();
let current_file_length = tree_model.value(&tree_iter_all, column_file_name).get::<String>().unwrap().len();
if modification > newest_modification_time || (modification == newest_modification_time && current_file_length < file_length) {
file_length = current_file_length;
newest_modification_time = modification;
@ -171,10 +171,10 @@ fn popover_all_except_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
popover.popdown();
}
fn popover_one_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_modification_as_secs: i32, column_file_name: i32) {
let selection = tree_view.get_selection();
let tree_model = tree_view.get_model().unwrap();
let selection = tree_view.selection();
let tree_model = tree_view.model().unwrap();
let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records
let tree_iter_all = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
let mut end: bool = false;
@ -187,7 +187,7 @@ fn popover_one_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_
let mut file_length: usize = 0;
loop {
let color = tree_model.get_value(&tree_iter_all, column_color).get::<String>().unwrap().unwrap();
let color = tree_model.value(&tree_iter_all, column_color).get::<String>().unwrap();
if color == HEADER_ROW_COLOR {
if !tree_model.iter_next(&tree_iter_all) {
end = true;
@ -195,8 +195,8 @@ fn popover_one_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_
break;
}
tree_iter_array.push(tree_iter_all.clone());
let modification = tree_model.get_value(&tree_iter_all, column_modification_as_secs).get::<u64>().unwrap().unwrap();
let current_file_length = tree_model.get_value(&tree_iter_all, column_file_name).get::<String>().unwrap().unwrap().len();
let modification = tree_model.value(&tree_iter_all, column_modification_as_secs).get::<u64>().unwrap();
let current_file_length = tree_model.value(&tree_iter_all, column_file_name).get::<String>().unwrap().len();
if modification < oldest_modification_time || (modification == oldest_modification_time && current_file_length > file_length) {
file_length = current_file_length;
oldest_modification_time = modification;
@ -229,10 +229,10 @@ fn popover_one_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_
popover.popdown();
}
fn popover_one_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_modification_as_secs: i32, column_file_name: i32) {
let selection = tree_view.get_selection();
let tree_model = tree_view.get_model().unwrap();
let selection = tree_view.selection();
let tree_model = tree_view.model().unwrap();
let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records
let tree_iter_all = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
let mut end: bool = false;
@ -244,7 +244,7 @@ fn popover_one_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_
let mut file_length: usize = 0;
loop {
let color = tree_model.get_value(&tree_iter_all, column_color).get::<String>().unwrap().unwrap();
let color = tree_model.value(&tree_iter_all, column_color).get::<String>().unwrap();
if color == HEADER_ROW_COLOR {
if !tree_model.iter_next(&tree_iter_all) {
end = true;
@ -252,8 +252,8 @@ fn popover_one_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_
break;
}
tree_iter_array.push(tree_iter_all.clone());
let modification = tree_model.get_value(&tree_iter_all, column_modification_as_secs).get::<u64>().unwrap().unwrap();
let current_file_length = tree_model.get_value(&tree_iter_all, column_file_name).get::<String>().unwrap().unwrap().len();
let modification = tree_model.value(&tree_iter_all, column_modification_as_secs).get::<u64>().unwrap();
let current_file_length = tree_model.value(&tree_iter_all, column_file_name).get::<String>().unwrap().len();
if modification > newest_modification_time || (modification == newest_modification_time && current_file_length > file_length) {
file_length = current_file_length;
newest_modification_time = modification;
@ -330,7 +330,7 @@ fn popover_select_custom(popover: &gtk::Popover, gui_data: &GuiData, tree_view:
grid.attach(&entry_name, 1, 2, 1, 1);
grid.attach(&entry_name_path, 1, 3, 1, 1);
for widgets in confirmation_dialog_delete.get_children() {
for widgets in confirmation_dialog_delete.children() {
// By default GtkBox is child of dialog, so we can easily add other things to it
widgets.downcast::<gtk::Box>().unwrap().add(&grid);
}
@ -339,15 +339,15 @@ fn popover_select_custom(popover: &gtk::Popover, gui_data: &GuiData, tree_view:
let response_type = confirmation_dialog_delete.run();
if response_type == gtk::ResponseType::Ok {
if radio_path.get_active() {
if radio_path.is_active() {
wildcard_type = WildcardType::Path;
wildcard = entry_path.get_text().to_string();
} else if radio_name.get_active() {
wildcard = entry_path.text().to_string();
} else if radio_name.is_active() {
wildcard_type = WildcardType::Name;
wildcard = entry_name.get_text().to_string();
} else if radio_name_path.get_active() {
wildcard = entry_name.text().to_string();
} else if radio_name_path.is_active() {
wildcard_type = WildcardType::PathName;
wildcard = entry_name_path.get_text().to_string();
wildcard = entry_name_path.text().to_string();
} else {
panic!("Non handled option in select wildcard");
}
@ -365,14 +365,14 @@ fn popover_select_custom(popover: &gtk::Popover, gui_data: &GuiData, tree_view:
#[cfg(target_family = "windows")]
let wildcard = wildcard.as_str();
let selection = tree_view.get_selection();
let tree_model = tree_view.get_model().unwrap();
let selection = tree_view.selection();
let tree_model = tree_view.model().unwrap();
let tree_iter = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records
let tree_iter = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
loop {
if let Some(column_color) = column_color {
let color = tree_model.get_value(&tree_iter, column_color).get::<String>().unwrap().unwrap();
let color = tree_model.value(&tree_iter, column_color).get::<String>().unwrap();
if color == HEADER_ROW_COLOR {
if !tree_model.iter_next(&tree_iter) {
break;
@ -381,8 +381,8 @@ fn popover_select_custom(popover: &gtk::Popover, gui_data: &GuiData, tree_view:
}
}
let path = tree_model.get_value(&tree_iter, column_path).get::<String>().unwrap().unwrap();
let name = tree_model.get_value(&tree_iter, column_file_name).get::<String>().unwrap().unwrap();
let path = tree_model.value(&tree_iter, column_path).get::<String>().unwrap();
let name = tree_model.value(&tree_iter, column_file_name).get::<String>().unwrap();
match wildcard_type {
WildcardType::Path => {
if Common::regex_check(wildcard, path) {
@ -458,15 +458,15 @@ fn popover_unselect_custom(popover: &gtk::Popover, gui_data: &GuiData, tree_view
let response_type = confirmation_dialog_delete.run();
if response_type == gtk::ResponseType::Ok {
if radio_path.get_active() {
if radio_path.is_active() {
wildcard_type = WildcardType::Path;
wildcard = entry_path.get_text().to_string();
} else if radio_name.get_active() {
wildcard = entry_path.text().to_string();
} else if radio_name.is_active() {
wildcard_type = WildcardType::Name;
wildcard = entry_name.get_text().to_string();
} else if radio_name_path.get_active() {
wildcard = entry_name.text().to_string();
} else if radio_name_path.is_active() {
wildcard_type = WildcardType::PathName;
wildcard = entry_name_path.get_text().to_string();
wildcard = entry_name_path.text().to_string();
} else {
panic!("Non handled option in unselect wildcard");
}
@ -484,14 +484,14 @@ fn popover_unselect_custom(popover: &gtk::Popover, gui_data: &GuiData, tree_view
#[cfg(target_family = "windows")]
let wildcard = wildcard.as_str();
let selection = tree_view.get_selection();
let tree_model = tree_view.get_model().unwrap();
let selection = tree_view.selection();
let tree_model = tree_view.model().unwrap();
let tree_iter = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records
let tree_iter = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
loop {
if let Some(column_color) = column_color {
let color = tree_model.get_value(&tree_iter, column_color).get::<String>().unwrap().unwrap();
let color = tree_model.value(&tree_iter, column_color).get::<String>().unwrap();
if color == HEADER_ROW_COLOR {
if !tree_model.iter_next(&tree_iter) {
break;
@ -500,8 +500,8 @@ fn popover_unselect_custom(popover: &gtk::Popover, gui_data: &GuiData, tree_view
}
}
let path = tree_model.get_value(&tree_iter, column_path).get::<String>().unwrap().unwrap();
let name = tree_model.get_value(&tree_iter, column_file_name).get::<String>().unwrap().unwrap();
let path = tree_model.value(&tree_iter, column_path).get::<String>().unwrap();
let name = tree_model.value(&tree_iter, column_file_name).get::<String>().unwrap();
match wildcard_type {
WildcardType::Path => {
if Common::regex_check(wildcard, path) {
@ -528,10 +528,10 @@ fn popover_unselect_custom(popover: &gtk::Popover, gui_data: &GuiData, tree_view
}
fn popover_all_except_biggest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_size_as_bytes: i32, column_dimensions: i32) {
let selection = tree_view.get_selection();
let tree_model = tree_view.get_model().unwrap();
let selection = tree_view.selection();
let tree_model = tree_view.model().unwrap();
let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records
let tree_iter_all = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
let mut end: bool = false;
@ -543,7 +543,7 @@ fn popover_all_except_biggest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
let mut biggest_number_of_pixels: u64 = 0;
loop {
let color = tree_model.get_value(&tree_iter_all, column_color).get::<String>().unwrap().unwrap();
let color = tree_model.value(&tree_iter_all, column_color).get::<String>().unwrap();
if color == HEADER_ROW_COLOR {
if !tree_model.iter_next(&tree_iter_all) {
end = true;
@ -551,8 +551,8 @@ fn popover_all_except_biggest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
break;
}
tree_iter_array.push(tree_iter_all.clone());
let size_as_bytes = tree_model.get_value(&tree_iter_all, column_size_as_bytes).get::<u64>().unwrap().unwrap();
let dimensions_string = tree_model.get_value(&tree_iter_all, column_dimensions).get::<String>().unwrap().unwrap();
let size_as_bytes = tree_model.value(&tree_iter_all, column_size_as_bytes).get::<u64>().unwrap();
let dimensions_string = tree_model.value(&tree_iter_all, column_dimensions).get::<String>().unwrap();
let dimensions = change_dimension_to_krotka(dimensions_string);
let number_of_pixels = dimensions.0 * dimensions.1;
@ -589,10 +589,10 @@ fn popover_all_except_biggest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
popover.popdown();
}
fn popover_all_except_smallest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_size_as_bytes: i32, column_dimensions: i32) {
let selection = tree_view.get_selection();
let tree_model = tree_view.get_model().unwrap();
let selection = tree_view.selection();
let tree_model = tree_view.model().unwrap();
let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records
let tree_iter_all = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
let mut end: bool = false;
@ -604,7 +604,7 @@ fn popover_all_except_smallest(popover: &gtk::Popover, tree_view: &gtk::TreeView
let mut smallest_number_of_pixels: u64 = u64::MAX;
loop {
let color = tree_model.get_value(&tree_iter_all, column_color).get::<String>().unwrap().unwrap();
let color = tree_model.value(&tree_iter_all, column_color).get::<String>().unwrap();
if color == HEADER_ROW_COLOR {
if !tree_model.iter_next(&tree_iter_all) {
end = true;
@ -612,8 +612,8 @@ fn popover_all_except_smallest(popover: &gtk::Popover, tree_view: &gtk::TreeView
break;
}
tree_iter_array.push(tree_iter_all.clone());
let size_as_bytes = tree_model.get_value(&tree_iter_all, column_size_as_bytes).get::<u64>().unwrap().unwrap();
let dimensions_string = tree_model.get_value(&tree_iter_all, column_dimensions).get::<String>().unwrap().unwrap();
let size_as_bytes = tree_model.value(&tree_iter_all, column_size_as_bytes).get::<u64>().unwrap();
let dimensions_string = tree_model.value(&tree_iter_all, column_dimensions).get::<String>().unwrap();
let dimensions = change_dimension_to_krotka(dimensions_string);
let number_of_pixels = dimensions.0 * dimensions.1;
@ -802,7 +802,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
buttons_popover_select_all.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_select_all(&popover_select, &object_popover.tree_view);
});
@ -811,7 +811,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
buttons_popover_unselect_all.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_unselect_all(&popover_select, &object_popover.tree_view);
});
@ -820,7 +820,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
buttons_popover_reverse.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_reverse(&popover_select, &object_popover.tree_view);
});
@ -829,7 +829,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
buttons_popover_select_all_except_oldest.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_all_except_oldest(
&popover_select,
&object_popover.tree_view,
@ -844,7 +844,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
buttons_popover_select_all_except_newest.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_all_except_newest(
&popover_select,
&object_popover.tree_view,
@ -859,7 +859,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
buttons_popover_select_one_oldest.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_one_oldest(
&popover_select,
&object_popover.tree_view,
@ -874,7 +874,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
buttons_popover_select_one_newest.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_one_newest(
&popover_select,
&object_popover.tree_view,
@ -890,7 +890,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let vec_popover_objects = popover_objects.clone();
let gui_data_clone = gui_data.clone();
buttons_popover_select_custom.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_select_custom(
&popover_select,
&gui_data_clone,
@ -907,7 +907,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let vec_popover_objects = popover_objects.clone();
let gui_data_clone = gui_data.clone();
buttons_popover_unselect_custom.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_unselect_custom(
&popover_select,
&gui_data_clone,
@ -923,7 +923,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
buttons_popover_select_all_images_except_biggest.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_all_except_biggest(
&popover_select,
&object_popover.tree_view,
@ -938,7 +938,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects; //.clone();
buttons_popover_select_all_images_except_smallest.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_all_except_smallest(
&popover_select,
&object_popover.tree_view,

View file

@ -4,7 +4,8 @@ use crate::taskbar_progress::tbp_flags::TBPF_INDETERMINATE;
use czkawka_core::{big_file, broken_files, duplicate, empty_files, empty_folder, invalid_symlinks, same_music, similar_images, temporary, zeroed};
use futures::StreamExt;
use gtk::{LabelExt, ProgressBarExt, WidgetExt};
use gtk::prelude::*;
#[allow(clippy::too_many_arguments)]
pub fn connect_progress_window(
@ -21,6 +22,7 @@ pub fn connect_progress_window(
mut futures_receiver_broken_files: futures::channel::mpsc::UnboundedReceiver<broken_files::ProgressData>,
) {
let main_context = glib::MainContext::default();
let _guard = main_context.acquire().unwrap();
{
// Duplicate Files

View file

@ -16,7 +16,7 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
let dialog_manual_add_directory = gtk::Dialog::with_buttons(Some("Add directory manually"), Some(&window_main), gtk::DialogFlags::MODAL, &[("Ok", gtk::ResponseType::Ok), ("Close", gtk::ResponseType::Cancel)]);
let entry: gtk::Entry = gtk::Entry::new();
for widgets in dialog_manual_add_directory.get_children() {
for widgets in dialog_manual_add_directory.children() {
// By default GtkBox is child of dialog, so we can easily add other things to it
widgets.clone().downcast::<gtk::Box>().unwrap().add(&entry);
}
@ -25,7 +25,7 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
let response_type = dialog_manual_add_directory.run();
if response_type == gtk::ResponseType::Ok {
let text = entry.get_text().to_string().trim().to_string();
let text = entry.text().to_string().trim().to_string();
#[cfg(target_family = "windows")]
let text = Common::normalize_windows_path(text).to_string_lossy().to_string();
@ -33,10 +33,8 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
if !text.is_empty() {
let list_store = get_list_store(&tree_view_included_directories);
let col_indices = [0];
let values: [&dyn ToValue; 1] = [&text];
list_store.set(&list_store.append(), &col_indices, &values);
let values: [(u32, &dyn ToValue); 1] = [(0, &text)];
list_store.set(&list_store.append(), &values);
}
} else {
dialog_manual_add_directory.close();
@ -59,7 +57,7 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
);
let entry: gtk::Entry = gtk::Entry::new();
for widgets in dialog_manual_add_directory.get_children() {
for widgets in dialog_manual_add_directory.children() {
// By default GtkBox is child of dialog, so we can easily add other things to it
widgets.clone().downcast::<gtk::Box>().unwrap().add(&entry);
}
@ -68,7 +66,7 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
let response_type = dialog_manual_add_directory.run();
if response_type == gtk::ResponseType::Ok {
let text = entry.get_text().to_string().trim().to_string();
let text = entry.text().to_string().trim().to_string();
#[cfg(target_family = "windows")]
let text = Common::normalize_windows_path(text).to_string_lossy().to_string();
@ -76,10 +74,8 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
if !text.is_empty() {
let list_store = get_list_store(&tree_view_excluded_directories);
let col_indices = [0];
let values: [&dyn ToValue; 1] = [&text];
list_store.set(&list_store.append(), &col_indices, &values);
let values: [(u32, &dyn ToValue); 1] = [(0, &text)];
list_store.set(&list_store.append(), &values);
}
} else {
dialog_manual_add_directory.close();
@ -104,14 +100,13 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
chooser.show_all();
let response_type = chooser.run();
if response_type == gtk::ResponseType::Ok {
let folder = chooser.get_filenames();
let folder = chooser.filenames();
let list_store = get_list_store(&tree_view_included_directories);
let col_indices = [0];
for file_entry in &folder {
let values: [&dyn ToValue; 1] = [&file_entry.to_string_lossy().to_string()];
list_store.set(&list_store.append(), &col_indices, &values);
let values: [(u32, &dyn ToValue); 1] = [(0, &file_entry.to_string_lossy().to_string())];
list_store.set(&list_store.append(), &values);
}
}
chooser.close();
@ -133,15 +128,13 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
chooser.show_all();
let response_type = chooser.run();
if response_type == gtk::ResponseType::Ok {
let folder = chooser.get_filenames();
let folder = chooser.filenames();
let list_store = get_list_store(&tree_view_excluded_directories);
let col_indices = [0];
for file_entry in &folder {
let values: [&dyn ToValue; 1] = [&file_entry.to_string_lossy().to_string()];
list_store.set(&list_store.append(), &col_indices, &values);
let values: [(u32, &dyn ToValue); 1] = [(0, &file_entry.to_string_lossy().to_string())];
list_store.set(&list_store.append(), &values);
}
}
chooser.close();
@ -153,12 +146,12 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone();
buttons_remove_excluded_directory.connect_clicked(move |_| {
let list_store = get_list_store(&tree_view_excluded_directories);
let selection = tree_view_excluded_directories.get_selection();
let selection = tree_view_excluded_directories.selection();
let (vec_tree_path, _tree_model) = selection.get_selected_rows();
let (vec_tree_path, _tree_model) = selection.selected_rows();
for tree_path in vec_tree_path.iter().rev() {
list_store.remove(&list_store.get_iter(tree_path).unwrap());
list_store.remove(&list_store.iter(tree_path).unwrap());
}
});
}
@ -168,12 +161,12 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone();
buttons_remove_included_directory.connect_clicked(move |_| {
let list_store = get_list_store(&tree_view_included_directories);
let selection = tree_view_included_directories.get_selection();
let selection = tree_view_included_directories.selection();
let (vec_tree_path, _tree_model) = selection.get_selected_rows();
let (vec_tree_path, _tree_model) = selection.selected_rows();
for tree_path in vec_tree_path.iter().rev() {
list_store.remove(&list_store.get_iter(tree_path).unwrap());
list_store.remove(&list_store.iter(tree_path).unwrap());
}
});
}

View file

@ -4,149 +4,149 @@ use gtk::prelude::*;
// TODO add option to open files and folders from context menu activated by pressing ONCE with right mouse button
pub fn opening_double_click_function_duplicates(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
} else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, OpenMode::OnlyPath);
}
gtk::Inhibit(false)
}
pub fn opening_enter_function_duplicates(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) {
if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, OpenMode::PathAndName);
}
gtk::Inhibit(false)
}
pub fn opening_double_click_function_empty_folders(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
} else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, OpenMode::OnlyPath);
}
gtk::Inhibit(false)
}
pub fn opening_enter_function_empty_folders(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) {
if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, OpenMode::PathAndName);
}
gtk::Inhibit(false)
}
pub fn opening_double_click_function_empty_files(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
} else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, OpenMode::OnlyPath);
}
gtk::Inhibit(false)
}
pub fn opening_enter_function_empty_files(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) {
if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, OpenMode::PathAndName);
}
gtk::Inhibit(false)
}
pub fn opening_double_click_function_temporary_files(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
} else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, OpenMode::OnlyPath);
}
gtk::Inhibit(false)
}
pub fn opening_enter_function_temporary_files(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) {
if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, OpenMode::PathAndName);
}
gtk::Inhibit(false)
}
pub fn opening_double_click_function_big_files(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
} else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, OpenMode::OnlyPath);
}
gtk::Inhibit(false)
}
pub fn opening_enter_function_big_files(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) {
if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, OpenMode::PathAndName);
}
gtk::Inhibit(false)
}
pub fn opening_double_click_function_zeroed_files(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
} else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, OpenMode::OnlyPath);
}
gtk::Inhibit(false)
}
pub fn opening_enter_function_zeroed_files(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) {
if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, OpenMode::PathAndName);
}
gtk::Inhibit(false)
}
pub fn opening_double_click_function_same_music(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
} else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, OpenMode::OnlyPath);
}
gtk::Inhibit(false)
}
pub fn opening_enter_function_same_music(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) {
if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, OpenMode::PathAndName);
}
gtk::Inhibit(false)
}
pub fn opening_double_click_function_similar_images(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
} else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32, OpenMode::OnlyPath);
}
gtk::Inhibit(false)
}
pub fn opening_enter_function_similar_images(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) {
if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32, OpenMode::PathAndName);
}
gtk::Inhibit(false)
}
pub fn opening_double_click_function_invalid_symlinks(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
} else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, OpenMode::OnlyPath);
}
gtk::Inhibit(false)
}
pub fn opening_enter_function_invalid_symlinks(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) {
if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, OpenMode::PathAndName);
}
gtk::Inhibit(false)
}
pub fn opening_double_click_function_broken_files(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 {
if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsBrokenFiles::Name as i32, ColumnsBrokenFiles::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 {
} else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsBrokenFiles::Name as i32, ColumnsBrokenFiles::Path as i32, OpenMode::OnlyPath);
}
gtk::Inhibit(false)
}
pub fn opening_enter_function_broken_files(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) {
if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsBrokenFiles::Name as i32, ColumnsBrokenFiles::Path as i32, OpenMode::PathAndName);
}
gtk::Inhibit(false)
@ -158,13 +158,13 @@ pub enum OpenMode {
}
pub fn common_open_function(tree_view: &gtk::TreeView, column_name: i32, column_path: i32, opening_mode: OpenMode) {
let selection = tree_view.get_selection();
let (selection_rows, tree_model) = selection.get_selected_rows();
let selection = tree_view.selection();
let (selection_rows, tree_model) = selection.selected_rows();
for tree_path in selection_rows.iter().rev() {
let end_path;
let name = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_name).get::<String>().unwrap().unwrap();
let path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_path).get::<String>().unwrap().unwrap();
let name = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_name).get::<String>().unwrap();
let path = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_path).get::<String>().unwrap();
match opening_mode {
OpenMode::OnlyPath => {

View file

@ -12,12 +12,12 @@ pub struct GuiAbout {
impl GuiAbout {
pub fn create_from_builder(builder: &gtk::Builder) -> Self {
let about_dialog: gtk::AboutDialog = builder.get_object("about_dialog").unwrap();
let about_dialog: gtk::AboutDialog = builder.object("about_dialog").unwrap();
about_dialog.set_position(WindowPosition::Center);
let button_repository: gtk::Button = builder.get_object("button_repository").unwrap();
let button_donation: gtk::Button = builder.get_object("button_donation").unwrap();
let button_instruction: gtk::Button = builder.get_object("button_instruction").unwrap();
let button_repository: gtk::Button = builder.object("button_repository").unwrap();
let button_donation: gtk::Button = builder.object("button_donation").unwrap();
let button_instruction: gtk::Button = builder.object("button_instruction").unwrap();
Self {
about_dialog,

View file

@ -16,14 +16,14 @@ pub struct GuiBottomButtons {
impl GuiBottomButtons {
pub fn create_from_builder(builder: &gtk::Builder) -> Self {
let buttons_search: gtk::Button = builder.get_object("buttons_search").unwrap();
let buttons_select: gtk::Button = builder.get_object("buttons_select").unwrap();
let buttons_delete: gtk::Button = builder.get_object("buttons_delete").unwrap();
let buttons_save: gtk::Button = builder.get_object("buttons_save").unwrap();
let buttons_symlink: gtk::Button = builder.get_object("buttons_symlink").unwrap();
let buttons_hardlink: gtk::Button = builder.get_object("buttons_hardlink").unwrap();
let buttons_search: gtk::Button = builder.object("buttons_search").unwrap();
let buttons_select: gtk::Button = builder.object("buttons_select").unwrap();
let buttons_delete: gtk::Button = builder.object("buttons_delete").unwrap();
let buttons_save: gtk::Button = builder.object("buttons_save").unwrap();
let buttons_symlink: gtk::Button = builder.object("buttons_symlink").unwrap();
let buttons_hardlink: gtk::Button = builder.object("buttons_hardlink").unwrap();
let buttons_show_errors: gtk::Button = builder.get_object("buttons_show_errors").unwrap();
let buttons_show_errors: gtk::Button = builder.object("buttons_show_errors").unwrap();
let buttons_names = ["search".to_string(), "select".to_string(), "delete".to_string(), "save".to_string(), "symlink".to_string(), "hardlink".to_string()];
let buttons_array = [buttons_search.clone(), buttons_select.clone(), buttons_delete.clone(), buttons_save.clone(), buttons_symlink.clone(), buttons_hardlink.clone()];

View file

@ -84,7 +84,7 @@ impl GuiData {
let builder = Builder::from_string(glade_src.as_str());
//// Windows
let window_main: gtk::Window = builder.get_object("window_main").unwrap();
let window_main: gtk::Window = builder.object("window_main").unwrap();
window_main.show_all();
window_main.set_title("Czkawka");
window_main.set_position(WindowPosition::Center);
@ -146,11 +146,11 @@ impl GuiData {
let shared_broken_files_state: Rc<RefCell<_>> = Rc::new(RefCell::new(BrokenFiles::new()));
//// Entry
let entry_info: gtk::Entry = builder.get_object("entry_info").unwrap();
let entry_info: gtk::Entry = builder.object("entry_info").unwrap();
//// Bottom
let text_view_errors: gtk::TextView = builder.get_object("text_view_errors").unwrap();
let scrolled_window_errors: gtk::ScrolledWindow = builder.get_object("scrolled_window_errors").unwrap();
let text_view_errors: gtk::TextView = builder.object("text_view_errors").unwrap();
let scrolled_window_errors: gtk::ScrolledWindow = builder.object("scrolled_window_errors").unwrap();
scrolled_window_errors.show_all(); // Not sure why needed, but without it text view errors sometimes hide itself
// Used for sending stop signal to thread

View file

@ -8,8 +8,8 @@ pub struct GuiHeader {
impl GuiHeader {
pub fn create_from_builder(builder: &gtk::Builder) -> Self {
let button_settings: gtk::Button = builder.get_object("button_settings").unwrap();
let button_app_info: gtk::Button = builder.get_object("button_app_info").unwrap();
let button_settings: gtk::Button = builder.object("button_settings").unwrap();
let button_app_info: gtk::Button = builder.object("button_app_info").unwrap();
Self { button_settings, button_app_info }
}
}

View file

@ -62,18 +62,18 @@ pub struct GuiMainNotebook {
impl GuiMainNotebook {
pub fn create_from_builder(builder: &gtk::Builder) -> Self {
let notebook_main: gtk::Notebook = builder.get_object("notebook_main").unwrap();
let notebook_main: gtk::Notebook = builder.object("notebook_main").unwrap();
let scrolled_window_duplicate_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_duplicate_finder").unwrap();
let scrolled_window_empty_folder_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_empty_folder_finder").unwrap();
let scrolled_window_empty_files_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_empty_files_finder").unwrap();
let scrolled_window_temporary_files_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_temporary_files_finder").unwrap();
let scrolled_window_big_files_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_big_files_finder").unwrap();
let scrolled_window_similar_images_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_similar_images_finder").unwrap();
let scrolled_window_zeroed_files_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_zeroed_files_finder").unwrap();
let scrolled_window_same_music_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_same_music_finder").unwrap();
let scrolled_window_invalid_symlinks: gtk::ScrolledWindow = builder.get_object("scrolled_window_invalid_symlinks").unwrap();
let scrolled_window_broken_files: gtk::ScrolledWindow = builder.get_object("scrolled_window_broken_files").unwrap();
let scrolled_window_duplicate_finder: gtk::ScrolledWindow = builder.object("scrolled_window_duplicate_finder").unwrap();
let scrolled_window_empty_folder_finder: gtk::ScrolledWindow = builder.object("scrolled_window_empty_folder_finder").unwrap();
let scrolled_window_empty_files_finder: gtk::ScrolledWindow = builder.object("scrolled_window_empty_files_finder").unwrap();
let scrolled_window_temporary_files_finder: gtk::ScrolledWindow = builder.object("scrolled_window_temporary_files_finder").unwrap();
let scrolled_window_big_files_finder: gtk::ScrolledWindow = builder.object("scrolled_window_big_files_finder").unwrap();
let scrolled_window_similar_images_finder: gtk::ScrolledWindow = builder.object("scrolled_window_similar_images_finder").unwrap();
let scrolled_window_zeroed_files_finder: gtk::ScrolledWindow = builder.object("scrolled_window_zeroed_files_finder").unwrap();
let scrolled_window_same_music_finder: gtk::ScrolledWindow = builder.object("scrolled_window_same_music_finder").unwrap();
let scrolled_window_invalid_symlinks: gtk::ScrolledWindow = builder.object("scrolled_window_invalid_symlinks").unwrap();
let scrolled_window_broken_files: gtk::ScrolledWindow = builder.object("scrolled_window_broken_files").unwrap();
let tree_view_duplicate_finder: gtk::TreeView = TreeView::new();
let tree_view_empty_folder_finder: gtk::TreeView = TreeView::new();
@ -86,36 +86,36 @@ impl GuiMainNotebook {
let tree_view_invalid_symlinks: gtk::TreeView = TreeView::new();
let tree_view_broken_files: gtk::TreeView = TreeView::new();
let entry_similar_images_minimal_size: gtk::Entry = builder.get_object("entry_similar_images_minimal_size").unwrap();
let entry_duplicate_minimal_size: gtk::Entry = builder.get_object("entry_duplicate_minimal_size").unwrap();
let entry_big_files_number: gtk::Entry = builder.get_object("entry_big_files_number").unwrap();
let entry_same_music_minimal_size: gtk::Entry = builder.get_object("entry_same_music_minimal_size").unwrap();
let entry_similar_images_minimal_size: gtk::Entry = builder.object("entry_similar_images_minimal_size").unwrap();
let entry_duplicate_minimal_size: gtk::Entry = builder.object("entry_duplicate_minimal_size").unwrap();
let entry_big_files_number: gtk::Entry = builder.object("entry_big_files_number").unwrap();
let entry_same_music_minimal_size: gtk::Entry = builder.object("entry_same_music_minimal_size").unwrap();
//// Check Buttons
let check_button_music_title: gtk::CheckButton = builder.get_object("check_button_music_title").unwrap();
let check_button_music_artist: gtk::CheckButton = builder.get_object("check_button_music_artist").unwrap();
let check_button_music_album_title: gtk::CheckButton = builder.get_object("check_button_music_album_title").unwrap();
let check_button_music_album_artist: gtk::CheckButton = builder.get_object("check_button_music_album_artist").unwrap();
let check_button_music_year: gtk::CheckButton = builder.get_object("check_button_music_year").unwrap();
let check_button_music_title: gtk::CheckButton = builder.object("check_button_music_title").unwrap();
let check_button_music_artist: gtk::CheckButton = builder.object("check_button_music_artist").unwrap();
let check_button_music_album_title: gtk::CheckButton = builder.object("check_button_music_album_title").unwrap();
let check_button_music_album_artist: gtk::CheckButton = builder.object("check_button_music_album_artist").unwrap();
let check_button_music_year: gtk::CheckButton = builder.object("check_button_music_year").unwrap();
//// Radio Buttons
let radio_button_duplicates_name: gtk::RadioButton = builder.get_object("radio_button_duplicates_name").unwrap();
let radio_button_duplicates_size: gtk::RadioButton = builder.get_object("radio_button_duplicates_size").unwrap();
let radio_button_duplicates_hashmb: gtk::RadioButton = builder.get_object("radio_button_duplicates_hashmb").unwrap();
let radio_button_duplicates_hash: gtk::RadioButton = builder.get_object("radio_button_duplicates_hash").unwrap();
let radio_button_duplicates_name: gtk::RadioButton = builder.object("radio_button_duplicates_name").unwrap();
let radio_button_duplicates_size: gtk::RadioButton = builder.object("radio_button_duplicates_size").unwrap();
let radio_button_duplicates_hashmb: gtk::RadioButton = builder.object("radio_button_duplicates_hashmb").unwrap();
let radio_button_duplicates_hash: gtk::RadioButton = builder.object("radio_button_duplicates_hash").unwrap();
let radio_button_similar_images_minimal: gtk::RadioButton = builder.get_object("radio_button_similar_images_minimal").unwrap();
let radio_button_similar_images_very_small: gtk::RadioButton = builder.get_object("radio_button_similar_images_very_small").unwrap();
let radio_button_similar_images_small: gtk::RadioButton = builder.get_object("radio_button_similar_images_small").unwrap();
let radio_button_similar_images_medium: gtk::RadioButton = builder.get_object("radio_button_similar_images_medium").unwrap();
let radio_button_similar_images_high: gtk::RadioButton = builder.get_object("radio_button_similar_images_high").unwrap();
let radio_button_similar_images_very_high: gtk::RadioButton = builder.get_object("radio_button_similar_images_very_high").unwrap();
let radio_button_similar_images_minimal: gtk::RadioButton = builder.object("radio_button_similar_images_minimal").unwrap();
let radio_button_similar_images_very_small: gtk::RadioButton = builder.object("radio_button_similar_images_very_small").unwrap();
let radio_button_similar_images_small: gtk::RadioButton = builder.object("radio_button_similar_images_small").unwrap();
let radio_button_similar_images_medium: gtk::RadioButton = builder.object("radio_button_similar_images_medium").unwrap();
let radio_button_similar_images_high: gtk::RadioButton = builder.object("radio_button_similar_images_high").unwrap();
let radio_button_similar_images_very_high: gtk::RadioButton = builder.object("radio_button_similar_images_very_high").unwrap();
let radio_button_hash_type_blake3: gtk::RadioButton = builder.get_object("radio_button_hash_type_blake3").unwrap();
let radio_button_hash_type_crc32: gtk::RadioButton = builder.get_object("radio_button_hash_type_crc32").unwrap();
let radio_button_hash_type_xxh3: gtk::RadioButton = builder.get_object("radio_button_hash_type_xxh3").unwrap();
let radio_button_hash_type_blake3: gtk::RadioButton = builder.object("radio_button_hash_type_blake3").unwrap();
let radio_button_hash_type_crc32: gtk::RadioButton = builder.object("radio_button_hash_type_crc32").unwrap();
let radio_button_hash_type_xxh3: gtk::RadioButton = builder.object("radio_button_hash_type_xxh3").unwrap();
let image_preview_similar_images: gtk::Image = builder.get_object("image_preview_similar_images").unwrap();
let image_preview_similar_images: gtk::Image = builder.object("image_preview_similar_images").unwrap();
Self {
notebook_main,

View file

@ -28,28 +28,28 @@ pub struct GuiPopovers {
impl GuiPopovers {
pub fn create_from_builder(builder: &gtk::Builder) -> Self {
let buttons_popover_select_all: gtk::Button = builder.get_object("buttons_popover_select_all").unwrap();
let buttons_popover_unselect_all: gtk::Button = builder.get_object("buttons_popover_unselect_all").unwrap();
let buttons_popover_reverse: gtk::Button = builder.get_object("buttons_popover_reverse").unwrap();
let buttons_popover_select_all_except_oldest: gtk::Button = builder.get_object("buttons_popover_select_all_except_oldest").unwrap();
let buttons_popover_select_all_except_newest: gtk::Button = builder.get_object("buttons_popover_select_all_except_newest").unwrap();
let buttons_popover_select_one_oldest: gtk::Button = builder.get_object("buttons_popover_select_one_oldest").unwrap();
let buttons_popover_select_one_newest: gtk::Button = builder.get_object("buttons_popover_select_one_newest").unwrap();
let buttons_popover_select_custom: gtk::Button = builder.get_object("buttons_popover_select_custom").unwrap();
let buttons_popover_unselect_custom: gtk::Button = builder.get_object("buttons_popover_unselect_custom").unwrap();
let buttons_popover_select_all_images_except_biggest: gtk::Button = builder.get_object("buttons_popover_select_all_images_except_biggest").unwrap();
let buttons_popover_select_all_images_except_smallest: gtk::Button = builder.get_object("buttons_popover_select_all_images_except_smallest").unwrap();
let buttons_popover_select_all: gtk::Button = builder.object("buttons_popover_select_all").unwrap();
let buttons_popover_unselect_all: gtk::Button = builder.object("buttons_popover_unselect_all").unwrap();
let buttons_popover_reverse: gtk::Button = builder.object("buttons_popover_reverse").unwrap();
let buttons_popover_select_all_except_oldest: gtk::Button = builder.object("buttons_popover_select_all_except_oldest").unwrap();
let buttons_popover_select_all_except_newest: gtk::Button = builder.object("buttons_popover_select_all_except_newest").unwrap();
let buttons_popover_select_one_oldest: gtk::Button = builder.object("buttons_popover_select_one_oldest").unwrap();
let buttons_popover_select_one_newest: gtk::Button = builder.object("buttons_popover_select_one_newest").unwrap();
let buttons_popover_select_custom: gtk::Button = builder.object("buttons_popover_select_custom").unwrap();
let buttons_popover_unselect_custom: gtk::Button = builder.object("buttons_popover_unselect_custom").unwrap();
let buttons_popover_select_all_images_except_biggest: gtk::Button = builder.object("buttons_popover_select_all_images_except_biggest").unwrap();
let buttons_popover_select_all_images_except_smallest: gtk::Button = builder.object("buttons_popover_select_all_images_except_smallest").unwrap();
let separator_select_image_size: gtk::Separator = builder.get_object("separator_select_image_size").unwrap();
let separator_select_reverse: gtk::Separator = builder.get_object("separator_select_reverse").unwrap();
let separator_select_date: gtk::Separator = builder.get_object("separator_select_date").unwrap();
let separator_select_custom: gtk::Separator = builder.get_object("separator_select_custom").unwrap();
let separator_select_image_size: gtk::Separator = builder.object("separator_select_image_size").unwrap();
let separator_select_reverse: gtk::Separator = builder.object("separator_select_reverse").unwrap();
let separator_select_date: gtk::Separator = builder.object("separator_select_date").unwrap();
let separator_select_custom: gtk::Separator = builder.object("separator_select_custom").unwrap();
let buttons_popover_right_click_open_file: gtk::Button = builder.get_object("buttons_popover_right_click_open_file").unwrap();
let buttons_popover_right_click_open_folder: gtk::Button = builder.get_object("buttons_popover_right_click_open_folder").unwrap();
let buttons_popover_right_click_open_file: gtk::Button = builder.object("buttons_popover_right_click_open_file").unwrap();
let buttons_popover_right_click_open_folder: gtk::Button = builder.object("buttons_popover_right_click_open_folder").unwrap();
let popover_select: gtk::Popover = builder.get_object("popover_select").unwrap();
let popover_right_click: gtk::Popover = builder.get_object("popover_right_click").unwrap();
let popover_select: gtk::Popover = builder.object("popover_select").unwrap();
let popover_right_click: gtk::Popover = builder.object("popover_right_click").unwrap();
Self {
buttons_popover_select_all,

View file

@ -16,16 +16,16 @@ pub struct GuiProgressDialog {
impl GuiProgressDialog {
pub fn create_from_builder(builder: &gtk::Builder) -> Self {
let window_progress: gtk::Window = builder.get_object("window_progress").unwrap();
let window_progress: gtk::Window = builder.object("window_progress").unwrap();
let progress_bar_current_stage: gtk::ProgressBar = builder.get_object("progress_bar_current_stage").unwrap();
let progress_bar_all_stages: gtk::ProgressBar = builder.get_object("progress_bar_all_stages").unwrap();
let progress_bar_current_stage: gtk::ProgressBar = builder.object("progress_bar_current_stage").unwrap();
let progress_bar_all_stages: gtk::ProgressBar = builder.object("progress_bar_all_stages").unwrap();
let label_stage: gtk::Label = builder.get_object("label_stage").unwrap();
let label_stage: gtk::Label = builder.object("label_stage").unwrap();
let grid_progress_stages: gtk::Grid = builder.get_object("grid_progress_stages").unwrap();
let grid_progress_stages: gtk::Grid = builder.object("grid_progress_stages").unwrap();
let button_stop_in_dialog: gtk::Button = builder.get_object("button_stop_in_dialog").unwrap();
let button_stop_in_dialog: gtk::Button = builder.object("button_stop_in_dialog").unwrap();
Self {
window_progress,

View file

@ -29,29 +29,29 @@ pub struct GuiSettings {
impl GuiSettings {
pub fn create_from_builder(builder: &gtk::Builder) -> Self {
let window_settings: gtk::Window = builder.get_object("window_settings").unwrap();
let window_settings: gtk::Window = builder.object("window_settings").unwrap();
window_settings.set_position(WindowPosition::Center);
// General
let check_button_settings_save_at_exit: gtk::CheckButton = builder.get_object("check_button_settings_save_at_exit").unwrap();
let check_button_settings_load_at_start: gtk::CheckButton = builder.get_object("check_button_settings_load_at_start").unwrap();
let check_button_settings_confirm_deletion: gtk::CheckButton = builder.get_object("check_button_settings_confirm_deletion").unwrap();
let check_button_settings_confirm_group_deletion: gtk::CheckButton = builder.get_object("check_button_settings_confirm_group_deletion").unwrap();
let check_button_settings_show_text_view: gtk::CheckButton = builder.get_object("check_button_settings_show_text_view").unwrap();
let check_button_settings_use_cache: gtk::CheckButton = builder.get_object("check_button_settings_use_cache").unwrap();
let check_button_settings_use_trash: gtk::CheckButton = builder.get_object("check_button_settings_use_trash").unwrap();
let check_button_settings_save_at_exit: gtk::CheckButton = builder.object("check_button_settings_save_at_exit").unwrap();
let check_button_settings_load_at_start: gtk::CheckButton = builder.object("check_button_settings_load_at_start").unwrap();
let check_button_settings_confirm_deletion: gtk::CheckButton = builder.object("check_button_settings_confirm_deletion").unwrap();
let check_button_settings_confirm_group_deletion: gtk::CheckButton = builder.object("check_button_settings_confirm_group_deletion").unwrap();
let check_button_settings_show_text_view: gtk::CheckButton = builder.object("check_button_settings_show_text_view").unwrap();
let check_button_settings_use_cache: gtk::CheckButton = builder.object("check_button_settings_use_cache").unwrap();
let check_button_settings_use_trash: gtk::CheckButton = builder.object("check_button_settings_use_trash").unwrap();
// Duplicates
let check_button_settings_hide_hard_links: gtk::CheckButton = builder.get_object("check_button_settings_hide_hard_links").unwrap();
let entry_settings_cache_file_minimal_size: gtk::Entry = builder.get_object("entry_settings_cache_file_minimal_size").unwrap();
let check_button_settings_hide_hard_links: gtk::CheckButton = builder.object("check_button_settings_hide_hard_links").unwrap();
let entry_settings_cache_file_minimal_size: gtk::Entry = builder.object("entry_settings_cache_file_minimal_size").unwrap();
// Similar Images
let check_button_settings_show_preview_similar_images: gtk::CheckButton = builder.get_object("check_button_settings_show_preview_similar_images").unwrap();
let check_button_settings_show_preview_similar_images: gtk::CheckButton = builder.object("check_button_settings_show_preview_similar_images").unwrap();
// Saving/Loading/Resetting configuration
let button_settings_save_configuration: gtk::Button = builder.get_object("button_settings_save_configuration").unwrap();
let button_settings_load_configuration: gtk::Button = builder.get_object("button_settings_load_configuration").unwrap();
let button_settings_reset_configuration: gtk::Button = builder.get_object("button_settings_reset_configuration").unwrap();
let button_settings_save_configuration: gtk::Button = builder.object("button_settings_save_configuration").unwrap();
let button_settings_load_configuration: gtk::Button = builder.object("button_settings_load_configuration").unwrap();
let button_settings_reset_configuration: gtk::Button = builder.object("button_settings_reset_configuration").unwrap();
Self {
window_settings,

View file

@ -26,25 +26,25 @@ pub struct GuiUpperNotebook {
impl GuiUpperNotebook {
pub fn create_from_builder(builder: &gtk::Builder) -> Self {
let notebook_upper: gtk::Notebook = builder.get_object("notebook_upper").unwrap();
let notebook_upper: gtk::Notebook = builder.object("notebook_upper").unwrap();
let scrolled_window_included_directories: gtk::ScrolledWindow = builder.get_object("scrolled_window_included_directories").unwrap();
let scrolled_window_excluded_directories: gtk::ScrolledWindow = builder.get_object("scrolled_window_excluded_directories").unwrap();
let scrolled_window_included_directories: gtk::ScrolledWindow = builder.object("scrolled_window_included_directories").unwrap();
let scrolled_window_excluded_directories: gtk::ScrolledWindow = builder.object("scrolled_window_excluded_directories").unwrap();
let tree_view_included_directories: gtk::TreeView = TreeView::new();
let tree_view_excluded_directories: gtk::TreeView = TreeView::new();
let entry_allowed_extensions: gtk::Entry = builder.get_object("entry_allowed_extensions").unwrap();
let entry_excluded_items: gtk::Entry = builder.get_object("entry_excluded_items").unwrap();
let entry_allowed_extensions: gtk::Entry = builder.object("entry_allowed_extensions").unwrap();
let entry_excluded_items: gtk::Entry = builder.object("entry_excluded_items").unwrap();
let check_button_recursive: gtk::CheckButton = builder.get_object("check_button_recursive").unwrap();
let check_button_recursive: gtk::CheckButton = builder.object("check_button_recursive").unwrap();
let buttons_manual_add_directory: gtk::Button = builder.get_object("buttons_manual_add_directory").unwrap();
let buttons_add_included_directory: gtk::Button = builder.get_object("buttons_add_included_directory").unwrap();
let buttons_remove_included_directory: gtk::Button = builder.get_object("buttons_remove_included_directory").unwrap();
let buttons_manual_add_excluded_directory: gtk::Button = builder.get_object("buttons_manual_add_excluded_directory").unwrap();
let buttons_add_excluded_directory: gtk::Button = builder.get_object("buttons_add_excluded_directory").unwrap();
let buttons_remove_excluded_directory: gtk::Button = builder.get_object("buttons_remove_excluded_directory").unwrap();
let buttons_manual_add_directory: gtk::Button = builder.object("buttons_manual_add_directory").unwrap();
let buttons_add_included_directory: gtk::Button = builder.object("buttons_add_included_directory").unwrap();
let buttons_remove_included_directory: gtk::Button = builder.object("buttons_remove_included_directory").unwrap();
let buttons_manual_add_excluded_directory: gtk::Button = builder.object("buttons_manual_add_excluded_directory").unwrap();
let buttons_add_excluded_directory: gtk::Button = builder.object("buttons_add_excluded_directory").unwrap();
let buttons_remove_excluded_directory: gtk::Button = builder.object("buttons_remove_excluded_directory").unwrap();
Self {
notebook_upper,

View file

@ -124,14 +124,14 @@ pub fn get_string_from_list_store(tree_view: &gtk::TreeView) -> Vec<String> {
let mut string_vector: Vec<String> = Vec::new();
let tree_iter = match list_store.get_iter_first() {
let tree_iter = match list_store.iter_first() {
Some(t) => t,
None => {
return string_vector;
}
};
loop {
string_vector.push(list_store.get_value(&tree_iter, 0).get::<String>().unwrap().unwrap());
string_vector.push(list_store.value(&tree_iter, 0).get::<String>().unwrap());
if !list_store.iter_next(&tree_iter) {
return string_vector;
}
@ -182,16 +182,16 @@ pub fn print_text_messages_to_text_view(text_messages: &Messages, text_view: &gt
messages += "\n";
}
text_view.get_buffer().unwrap().set_text(messages.as_str());
text_view.buffer().unwrap().set_text(messages.as_str());
}
pub fn reset_text_view(text_view: &TextView) {
text_view.get_buffer().unwrap().set_text("");
text_view.buffer().unwrap().set_text("");
}
pub fn add_text_to_text_view(text_view: &TextView, string_to_append: &str) {
let buffer = text_view.get_buffer().unwrap();
let current_text = match buffer.get_text(&buffer.get_start_iter(), &buffer.get_end_iter(), true) {
let buffer = text_view.buffer().unwrap();
let current_text = match buffer.text(&buffer.start_iter(), &buffer.end_iter(), true) {
Some(t) => t.to_string(),
None => "".to_string(),
};
@ -199,10 +199,10 @@ pub fn add_text_to_text_view(text_view: &TextView, string_to_append: &str) {
}
pub fn select_function_duplicates(_tree_selection: &gtk::TreeSelection, tree_model: &gtk::TreeModel, tree_path: &gtk::TreePath, _is_path_currently_selected: bool) -> bool {
// let name = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(),ColumnsDuplicates::Name as i32).get::<String>().unwrap().unwrap();
// let path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), ColumnsDuplicates::Path as i32).get::<String>().unwrap().unwrap();
// let modification = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(),ColumnsDuplicates::Modification as i32).get::<String>().unwrap().unwrap();
let color = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), ColumnsDuplicates::Color as i32).get::<String>().unwrap().unwrap();
// let name = tree_model.value(&tree_model.iter(tree_path).unwrap(),ColumnsDuplicates::Name as i32).get::<String>().unwrap();
// let path = tree_model.value(&tree_model.iter(tree_path).unwrap(), ColumnsDuplicates::Path as i32).get::<String>().unwrap();
// let modification = tree_model.value(&tree_model.iter(tree_path).unwrap(),ColumnsDuplicates::Modification as i32).get::<String>().unwrap();
let color = tree_model.value(&tree_model.iter(tree_path).unwrap(), ColumnsDuplicates::Color as i32).get::<String>().unwrap();
if color == HEADER_ROW_COLOR {
return false;
@ -211,7 +211,7 @@ pub fn select_function_duplicates(_tree_selection: &gtk::TreeSelection, tree_mod
true
}
pub fn select_function_same_music(_tree_selection: &gtk::TreeSelection, tree_model: &gtk::TreeModel, tree_path: &gtk::TreePath, _is_path_currently_selected: bool) -> bool {
let color = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), ColumnsSameMusic::Color as i32).get::<String>().unwrap().unwrap();
let color = tree_model.value(&tree_model.iter(tree_path).unwrap(), ColumnsSameMusic::Color as i32).get::<String>().unwrap();
if color == HEADER_ROW_COLOR {
return false;
@ -220,7 +220,7 @@ pub fn select_function_same_music(_tree_selection: &gtk::TreeSelection, tree_mod
true
}
pub fn select_function_similar_images(_tree_selection: &gtk::TreeSelection, tree_model: &gtk::TreeModel, tree_path: &gtk::TreePath, _is_path_currently_selected: bool) -> bool {
let color = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), ColumnsSimilarImages::Color as i32).get::<String>().unwrap().unwrap();
let color = tree_model.value(&tree_model.iter(tree_path).unwrap(), ColumnsSimilarImages::Color as i32).get::<String>().unwrap();
if color == HEADER_ROW_COLOR {
return false;
@ -274,10 +274,10 @@ pub fn get_text_from_invalid_symlink_cause(error: &invalid_symlinks::ErrorType)
}
pub fn get_list_store(tree_view: &gtk::TreeView) -> ListStore {
tree_view.get_model().unwrap().downcast::<gtk::ListStore>().unwrap()
tree_view.model().unwrap().downcast::<gtk::ListStore>().unwrap()
}
pub fn get_dialog_box_child(dialog: &gtk::Dialog) -> gtk::Box {
dialog.get_children()[0].clone().downcast::<gtk::Box>().unwrap()
dialog.children()[0].clone().downcast::<gtk::Box>().unwrap()
}
pub fn change_dimension_to_krotka(dimensions: String) -> (u64, u64) {

View file

@ -53,19 +53,19 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
// Duplicate Files
{
let col_types: [glib::types::Type; 6] = [
glib::types::Type::String,
glib::types::Type::String,
glib::types::Type::String,
glib::types::Type::STRING,
glib::types::Type::STRING,
glib::types::Type::STRING,
glib::types::Type::U64,
glib::types::Type::String,
glib::types::Type::String,
glib::types::Type::STRING,
glib::types::Type::STRING,
];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple);
tree_view.get_selection().set_select_function(Some(Box::new(select_function_duplicates)));
tree_view.selection().set_mode(SelectionMode::Multiple);
tree_view.selection().set_select_function(Some(Box::new(select_function_duplicates)));
create_tree_view_duplicates(&mut tree_view);
@ -73,7 +73,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
tree_view.connect_key_press_event(opening_enter_function_duplicates);
tree_view.connect_button_release_event(move |_tree_view, _e| {
// println!("{}", e.get_button());
// println!("{}", e.button());
gtk::Inhibit(false)
});
@ -83,16 +83,16 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() {
if let Some(button_number) = e.keycode() {
// Handle delete button
if button_number == 119 {
if tree_view.get_selection().get_selected_rows().0.is_empty() {
if tree_view.selection().selected_rows().0.is_empty() {
return gtk::Inhibit(false);
}
if !check_if_can_delete_files(&gui_data.settings.check_button_settings_confirm_deletion, &gui_data.window_main) {
return gtk::Inhibit(false);
}
if gui_data.settings.check_button_settings_confirm_group_deletion.get_active()
if gui_data.settings.check_button_settings_confirm_group_deletion.is_active()
&& check_if_deleting_all_files_in_group(&tree_view.clone(), ColumnsDuplicates::Color as i32, &gui_data.window_main, &gui_data.settings.check_button_settings_confirm_group_deletion)
{
return gtk::Inhibit(false);
@ -105,12 +105,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
}
// Empty Folders
{
let col_types: [glib::types::Type; 3] = [glib::types::Type::String, glib::types::Type::String, glib::types::Type::String];
let col_types: [glib::types::Type; 3] = [glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple);
tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_empty_folders(&mut tree_view);
@ -123,7 +123,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() {
if let Some(button_number) = e.keycode() {
// Handle delete button
if button_number == 119 {
empty_folder_remover(&tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, &gui_data);
@ -134,12 +134,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
}
// Empty Files
{
let col_types: [glib::types::Type; 3] = [glib::types::Type::String, glib::types::Type::String, glib::types::Type::String];
let col_types: [glib::types::Type; 3] = [glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple);
tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_empty_files(&mut tree_view);
@ -152,7 +152,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() {
if let Some(button_number) = e.keycode() {
// Handle delete button
if button_number == 119 {
basic_remove(&tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, &gui_data);
@ -163,12 +163,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
}
// Temporary Files
{
let col_types: [glib::types::Type; 3] = [glib::types::Type::String, glib::types::Type::String, glib::types::Type::String];
let col_types: [glib::types::Type; 3] = [glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple);
tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_temporary_files(&mut tree_view);
@ -181,7 +181,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() {
if let Some(button_number) = e.keycode() {
// Handle delete button
if button_number == 119 {
basic_remove(&tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, &gui_data);
@ -192,12 +192,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
}
// Big Files
{
let col_types: [glib::types::Type; 4] = [glib::types::Type::String, glib::types::Type::String, glib::types::Type::String, glib::types::Type::String];
let col_types: [glib::types::Type; 4] = [glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple);
tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_big_files(&mut tree_view);
@ -210,7 +210,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() {
if let Some(button_number) = e.keycode() {
// Handle delete button
if button_number == 119 {
basic_remove(&tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, &gui_data);
@ -225,23 +225,23 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
image_preview_similar_images.hide();
let col_types: [glib::types::Type; 10] = [
glib::types::Type::String,
glib::types::Type::String,
glib::types::Type::STRING,
glib::types::Type::STRING,
glib::types::Type::U64,
glib::types::Type::String,
glib::types::Type::String,
glib::types::Type::String,
glib::types::Type::String,
glib::types::Type::STRING,
glib::types::Type::STRING,
glib::types::Type::STRING,
glib::types::Type::STRING,
glib::types::Type::U64,
glib::types::Type::String,
glib::types::Type::String,
glib::types::Type::STRING,
glib::types::Type::STRING,
];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple);
tree_view.get_selection().set_select_function(Some(Box::new(select_function_similar_images)));
tree_view.selection().set_mode(SelectionMode::Multiple);
tree_view.selection().set_select_function(Some(Box::new(select_function_similar_images)));
create_tree_view_similar_images(&mut tree_view);
@ -261,16 +261,16 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let check_button_settings_show_preview_similar_images = gui_data.settings.check_button_settings_show_preview_similar_images.clone();
let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() {
if let Some(button_number) = e.keycode() {
// Handle delete button
if button_number == 119 {
if tree_view.get_selection().get_selected_rows().0.is_empty() {
if tree_view.selection().selected_rows().0.is_empty() {
return gtk::Inhibit(false);
}
if !check_if_can_delete_files(&gui_data.settings.check_button_settings_confirm_deletion, &gui_data.window_main) {
return gtk::Inhibit(false);
}
if gui_data.settings.check_button_settings_confirm_group_deletion.get_active()
if gui_data.settings.check_button_settings_confirm_group_deletion.is_active()
&& check_if_deleting_all_files_in_group(&tree_view.clone(), ColumnsSimilarImages::Color as i32, &gui_data.window_main, &gui_data.settings.check_button_settings_confirm_group_deletion)
{
return gtk::Inhibit(false);
@ -285,12 +285,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
}
// Zeroed Files
{
let col_types: [glib::types::Type; 5] = [glib::types::Type::String, glib::types::Type::U64, glib::types::Type::String, glib::types::Type::String, glib::types::Type::String];
let col_types: [glib::types::Type; 5] = [glib::types::Type::STRING, glib::types::Type::U64, glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple);
tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_zeroed_files(&mut tree_view);
@ -303,7 +303,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() {
if let Some(button_number) = e.keycode() {
// Handle delete button
if button_number == 119 {
basic_remove(&tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, &gui_data);
@ -315,28 +315,28 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
// Same Music
{
let col_types: [glib::types::Type; 13] = [
glib::types::Type::String,
glib::types::Type::STRING,
glib::types::Type::U64,
glib::types::Type::String,
glib::types::Type::String,
glib::types::Type::String,
glib::types::Type::String,
glib::types::Type::String,
glib::types::Type::String,
glib::types::Type::String,
glib::types::Type::String,
glib::types::Type::STRING,
glib::types::Type::STRING,
glib::types::Type::STRING,
glib::types::Type::STRING,
glib::types::Type::STRING,
glib::types::Type::STRING,
glib::types::Type::STRING,
glib::types::Type::STRING,
glib::types::Type::U64,
glib::types::Type::String,
glib::types::Type::String,
glib::types::Type::STRING,
glib::types::Type::STRING,
];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple);
tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_same_music(&mut tree_view);
tree_view.get_selection().set_select_function(Some(Box::new(select_function_same_music)));
tree_view.selection().set_select_function(Some(Box::new(select_function_same_music)));
tree_view.connect_button_press_event(opening_double_click_function_same_music);
tree_view.connect_key_press_event(opening_enter_function_same_music);
@ -347,16 +347,16 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() {
if let Some(button_number) = e.keycode() {
// Handle delete button
if button_number == 119 {
if tree_view.get_selection().get_selected_rows().0.is_empty() {
if tree_view.selection().selected_rows().0.is_empty() {
return gtk::Inhibit(false);
}
if !check_if_can_delete_files(&gui_data.settings.check_button_settings_confirm_deletion, &gui_data.window_main) {
return gtk::Inhibit(false);
}
if gui_data.settings.check_button_settings_confirm_group_deletion.get_active()
if gui_data.settings.check_button_settings_confirm_group_deletion.is_active()
&& check_if_deleting_all_files_in_group(&tree_view.clone(), ColumnsSameMusic::Color as i32, &gui_data.window_main, &gui_data.settings.check_button_settings_confirm_group_deletion)
{
return gtk::Inhibit(false);
@ -369,12 +369,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
}
// Invalid Symlinks
{
let col_types: [glib::types::Type; 5] = [glib::types::Type::String, glib::types::Type::String, glib::types::Type::String, glib::types::Type::String, glib::types::Type::String];
let col_types: [glib::types::Type; 5] = [glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple);
tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_invalid_symlinks(&mut tree_view);
@ -387,7 +387,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() {
if let Some(button_number) = e.keycode() {
// Handle delete button
if button_number == 119 {
basic_remove(&tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, &gui_data);
@ -398,12 +398,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
}
// Broken Files
{
let col_types: [glib::types::Type; 4] = [glib::types::Type::String, glib::types::Type::String, glib::types::Type::String, glib::types::Type::String];
let col_types: [glib::types::Type; 4] = [glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple);
tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_broken_files(&mut tree_view);
@ -416,7 +416,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() {
if let Some(button_number) = e.keycode() {
// Handle delete button
if button_number == 119 {
basic_remove(&tree_view, ColumnsBrokenFiles::Name as i32, ColumnsBrokenFiles::Path as i32, &gui_data);
@ -435,12 +435,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
// Set Included Directory
{
let col_types: [glib::types::Type; 1] = [glib::types::Type::String];
let col_types: [glib::types::Type; 1] = [glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple);
tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_directories(&mut tree_view);
@ -449,16 +449,16 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
scrolled_window_included_directories.show_all();
tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() {
if let Some(button_number) = e.keycode() {
// Handle delete button
if button_number == 119 {
let list_store = get_list_store(&tree_view);
let selection = tree_view.get_selection();
let selection = tree_view.selection();
let (vec_tree_path, _tree_model) = selection.get_selected_rows();
let (vec_tree_path, _tree_model) = selection.selected_rows();
for tree_path in vec_tree_path.iter().rev() {
list_store.remove(&list_store.get_iter(tree_path).unwrap());
list_store.remove(&list_store.iter(tree_path).unwrap());
}
}
}
@ -467,12 +467,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
}
// Set Excluded Directory
{
let col_types: [glib::types::Type; 1] = [glib::types::Type::String];
let col_types: [glib::types::Type; 1] = [glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple);
tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_directories(&mut tree_view);
@ -481,16 +481,16 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
scrolled_window_excluded_directories.show_all();
tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() {
if let Some(button_number) = e.keycode() {
// Handle delete button
if button_number == 119 {
let list_store = get_list_store(&tree_view);
let selection = tree_view.get_selection();
let selection = tree_view.selection();
let (vec_tree_path, _tree_model) = selection.get_selected_rows();
let (vec_tree_path, _tree_model) = selection.selected_rows();
for tree_path in vec_tree_path.iter().rev() {
list_store.remove(&list_store.get_iter(tree_path).unwrap());
list_store.remove(&list_store.iter(tree_path).unwrap());
}
}
}
@ -513,12 +513,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
}
}
fn show_preview(tree_view: &TreeView, text_view_errors: &TextView, check_button_settings_show_preview_similar_images: &CheckButton, image_preview_similar_images: &Image) {
let (selected_rows, tree_model) = tree_view.get_selection().get_selected_rows();
let (selected_rows, tree_model) = tree_view.selection().selected_rows();
let mut created_image = false;
// Only show preview when selected is only one item, because there is no method to recognize current clicked item in multiselection
if selected_rows.len() == 1 && check_button_settings_show_preview_similar_images.get_active() {
if selected_rows.len() == 1 && check_button_settings_show_preview_similar_images.is_active() {
let tree_path = selected_rows[0].clone();
if let Some(proj_dirs) = ProjectDirs::from("pl", "Qarmin", "Czkawka") {
// TODO labels on {} are in testing stage, so we just ignore for now this warning until found better idea how to fix this
@ -534,8 +534,8 @@ fn show_preview(tree_view: &TreeView, text_view_errors: &TextView, check_button_
add_text_to_text_view(&text_view_errors, format!("Failed to create dir {} needed by image preview", cache_dir.display()).as_str());
break 'dir;
}
let path = tree_model.get_value(&tree_model.get_iter(&tree_path).unwrap(), ColumnsSimilarImages::Path as i32).get::<String>().unwrap().unwrap();
let name = tree_model.get_value(&tree_model.get_iter(&tree_path).unwrap(), ColumnsSimilarImages::Name as i32).get::<String>().unwrap().unwrap();
let path = tree_model.value(&tree_model.iter(&tree_path).unwrap(), ColumnsSimilarImages::Path as i32).get::<String>().unwrap();
let name = tree_model.value(&tree_model.iter(&tree_path).unwrap(), ColumnsSimilarImages::Name as i32).get::<String>().unwrap();
let file_name = format!("{}/{}", path, name);
let file_name = file_name.as_str();

View file

@ -2,7 +2,6 @@ use crate::gui_data::*;
use crate::help_functions::*;
use directories_next::ProjectDirs;
use gtk::prelude::*;
use gtk::{EntryExt, GtkListStoreExt, ToggleButtonExt};
use std::fs::File;
use std::io::Write;
use std::path::Path;
@ -18,7 +17,7 @@ pub fn save_configuration(gui_data: &GuiData, manual_execution: bool) {
reset_text_view(&text_view_errors);
if !manual_execution && !check_button_settings_save_at_exit.get_active() {
if !manual_execution && !check_button_settings_save_at_exit.is_active() {
// When check button is deselected, not save configuration at exit
return;
}
@ -43,9 +42,9 @@ pub fn save_configuration(gui_data: &GuiData, manual_execution: bool) {
data_to_save.push("--included_directories:".to_string());
let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone();
let list_store = get_list_store(&tree_view_included_directories);
if let Some(iter) = list_store.get_iter_first() {
if let Some(iter) = list_store.iter_first() {
loop {
data_to_save.push(list_store.get_value(&iter, ColumnsDirectory::Path as i32).get::<String>().unwrap().unwrap());
data_to_save.push(list_store.value(&iter, ColumnsDirectory::Path as i32).get::<String>().unwrap());
if !list_store.iter_next(&iter) {
break;
}
@ -56,9 +55,9 @@ pub fn save_configuration(gui_data: &GuiData, manual_execution: bool) {
data_to_save.push("--excluded_directories:".to_string());
let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone();
let list_store = get_list_store(&tree_view_excluded_directories);
if let Some(iter) = list_store.get_iter_first() {
if let Some(iter) = list_store.iter_first() {
loop {
data_to_save.push(list_store.get_value(&iter, ColumnsDirectory::Path as i32).get::<String>().unwrap().unwrap());
data_to_save.push(list_store.value(&iter, ColumnsDirectory::Path as i32).get::<String>().unwrap());
if !list_store.iter_next(&iter) {
break;
}
@ -69,7 +68,7 @@ pub fn save_configuration(gui_data: &GuiData, manual_execution: bool) {
//// Excluded Items
data_to_save.push("--excluded_items:".to_string());
let entry_excluded_items = gui_data.upper_notebook.entry_excluded_items.clone();
for item in entry_excluded_items.get_text().split(',') {
for item in entry_excluded_items.text().split(',') {
if item.trim().is_empty() {
continue;
}
@ -79,7 +78,7 @@ pub fn save_configuration(gui_data: &GuiData, manual_execution: bool) {
//// Allowed extensions
data_to_save.push("--allowed_extensions:".to_string());
let entry_allowed_extensions = gui_data.upper_notebook.entry_allowed_extensions.clone();
for extension in entry_allowed_extensions.get_text().split(',') {
for extension in entry_allowed_extensions.text().split(',') {
if extension.trim().is_empty() {
continue;
}
@ -89,52 +88,52 @@ pub fn save_configuration(gui_data: &GuiData, manual_execution: bool) {
//// Save at exit
data_to_save.push("--save_at_exit:".to_string());
let check_button_settings_save_at_exit = gui_data.settings.check_button_settings_save_at_exit.clone();
data_to_save.push(check_button_settings_save_at_exit.get_active().to_string());
data_to_save.push(check_button_settings_save_at_exit.is_active().to_string());
//// Load at start
data_to_save.push("--load_at_start:".to_string());
let check_button_settings_load_at_start = gui_data.settings.check_button_settings_load_at_start.clone();
data_to_save.push(check_button_settings_load_at_start.get_active().to_string());
data_to_save.push(check_button_settings_load_at_start.is_active().to_string());
//// Confirm deletion of files
data_to_save.push("--confirm_deletion:".to_string());
let check_button_settings_confirm_deletion = gui_data.settings.check_button_settings_confirm_deletion.clone();
data_to_save.push(check_button_settings_confirm_deletion.get_active().to_string());
data_to_save.push(check_button_settings_confirm_deletion.is_active().to_string());
//// Confirm deletion of all files in group
data_to_save.push("--confirm_group_deletion:".to_string());
let check_button_settings_confirm_group_deletion = gui_data.settings.check_button_settings_confirm_group_deletion.clone();
data_to_save.push(check_button_settings_confirm_group_deletion.get_active().to_string());
data_to_save.push(check_button_settings_confirm_group_deletion.is_active().to_string());
//// Show image previews in similar images
data_to_save.push("--show_previews:".to_string());
let check_button_settings_show_preview_similar_images = gui_data.settings.check_button_settings_show_preview_similar_images.clone();
data_to_save.push(check_button_settings_show_preview_similar_images.get_active().to_string());
data_to_save.push(check_button_settings_show_preview_similar_images.is_active().to_string());
//// Show bottom text panel with errors
data_to_save.push("--bottom_text_panel:".to_string());
let check_button_settings_show_text_view = gui_data.settings.check_button_settings_show_text_view.clone();
data_to_save.push(check_button_settings_show_text_view.get_active().to_string());
data_to_save.push(check_button_settings_show_text_view.is_active().to_string());
//// Hide/Show hard linked files, with same inodes
data_to_save.push("--hide_hard_links:".to_string());
let check_button_settings_hide_hard_links = gui_data.settings.check_button_settings_hide_hard_links.clone();
data_to_save.push(check_button_settings_hide_hard_links.get_active().to_string());
data_to_save.push(check_button_settings_hide_hard_links.is_active().to_string());
//// Use cache system
data_to_save.push("--use_cache:".to_string());
let check_button_settings_use_cache = gui_data.settings.check_button_settings_use_cache.clone();
data_to_save.push(check_button_settings_use_cache.get_active().to_string());
data_to_save.push(check_button_settings_use_cache.is_active().to_string());
//// Delete to trash
data_to_save.push("--use_trash:".to_string());
let check_button_settings_use_trash = gui_data.settings.check_button_settings_use_trash.clone();
data_to_save.push(check_button_settings_use_trash.get_active().to_string());
data_to_save.push(check_button_settings_use_trash.is_active().to_string());
//// minimal cache file size
data_to_save.push("--cache_minimal_file_size:".to_string());
let entry_settings_cache_file_minimal_size = gui_data.settings.entry_settings_cache_file_minimal_size.clone();
data_to_save.push(entry_settings_cache_file_minimal_size.get_text().as_str().parse::<u64>().unwrap_or(2 * 1024 * 1024).to_string());
data_to_save.push(entry_settings_cache_file_minimal_size.text().as_str().parse::<u64>().unwrap_or(2 * 1024 * 1024).to_string());
}
// Creating/Opening config file
@ -433,11 +432,9 @@ pub fn load_configuration(gui_data: &GuiData, manual_execution: bool) {
let list_store = get_list_store(&tree_view_included_directories);
list_store.clear();
let col_indices = [0];
for directory in included_directories {
let values: [&dyn ToValue; 1] = [&directory];
list_store.set(&list_store.append(), &col_indices, &values);
let values: [(u32, &dyn ToValue); 1] = [(0, &directory)];
list_store.set(&list_store.append(), &values);
}
//// Exclude Directories
@ -445,11 +442,9 @@ pub fn load_configuration(gui_data: &GuiData, manual_execution: bool) {
let list_store = get_list_store(&tree_view_excluded_directories);
list_store.clear();
let col_indices = [0];
for directory in excluded_directories {
let values: [&dyn ToValue; 1] = [&directory];
list_store.set(&list_store.append(), &col_indices, &values);
let values: [(u32, &dyn ToValue); 1] = [(0, &directory)];
list_store.set(&list_store.append(), &values);
}
//// Excluded Items
@ -497,7 +492,6 @@ pub fn reset_configuration(gui_data: &GuiData, manual_clearing: bool) {
// Resetting included directories
{
let col_indices = [0];
let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone();
let list_store = get_list_store(&tree_view_included_directories);
list_store.clear();
@ -517,19 +511,18 @@ pub fn reset_configuration(gui_data: &GuiData, manual_clearing: bool) {
}
};
let values: [&dyn ToValue; 1] = [&current_dir];
list_store.set(&list_store.append(), &col_indices, &values);
let values: [(u32, &dyn ToValue); 1] = [(0, &current_dir)];
list_store.set(&list_store.append(), &values);
}
// Resetting excluded directories
{
let col_indices = [0];
let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone();
let list_store = get_list_store(&tree_view_excluded_directories);
list_store.clear();
if cfg!(target_family = "unix") {
for i in ["/proc", "/dev", "/sys", "/run", "/snap"].iter() {
let values: [&dyn ToValue; 1] = [&i];
list_store.set(&list_store.append(), &col_indices, &values);
let values: [(u32, &dyn ToValue); 1] = [(0, &i)];
list_store.set(&list_store.append(), &values);
}
}
}