VD
This commit is contained in:
parent
7d0446bd92
commit
7029d9aac0
323
Cargo.lock
generated
323
Cargo.lock
generated
|
@ -18,15 +18,6 @@ version = "0.1.8"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046"
|
||||
|
||||
[[package]]
|
||||
name = "addr2line"
|
||||
version = "0.21.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
|
||||
dependencies = [
|
||||
"gimli",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "adler"
|
||||
version = "1.0.2"
|
||||
|
@ -213,6 +204,8 @@ version = "0.6.8"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4ac22eda5891cc086690cb6fa10121c0390de0e3b04eb269f2d766b00d3f2d81"
|
||||
dependencies = [
|
||||
"async-fs 2.1.0",
|
||||
"async-net",
|
||||
"enumflags2",
|
||||
"futures-channel",
|
||||
"futures-util",
|
||||
|
@ -220,7 +213,6 @@ dependencies = [
|
|||
"rand",
|
||||
"serde",
|
||||
"serde_repr",
|
||||
"tokio",
|
||||
"url",
|
||||
"zbus",
|
||||
]
|
||||
|
@ -248,6 +240,43 @@ dependencies = [
|
|||
"pin-project-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-executor"
|
||||
version = "1.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c"
|
||||
dependencies = [
|
||||
"async-lock 3.3.0",
|
||||
"async-task",
|
||||
"concurrent-queue",
|
||||
"fastrand 2.0.1",
|
||||
"futures-lite 2.2.0",
|
||||
"slab",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-fs"
|
||||
version = "1.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06"
|
||||
dependencies = [
|
||||
"async-lock 2.8.0",
|
||||
"autocfg",
|
||||
"blocking",
|
||||
"futures-lite 1.13.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-fs"
|
||||
version = "2.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dd1f344136bad34df1f83a47f3fd7f2ab85d75cb8a940af4ccf6d482a84ea01b"
|
||||
dependencies = [
|
||||
"async-lock 3.3.0",
|
||||
"blocking",
|
||||
"futures-lite 2.2.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-io"
|
||||
version = "1.13.0"
|
||||
|
@ -264,7 +293,7 @@ dependencies = [
|
|||
"polling 2.8.0",
|
||||
"rustix 0.37.27",
|
||||
"slab",
|
||||
"socket2 0.4.10",
|
||||
"socket2",
|
||||
"waker-fn",
|
||||
]
|
||||
|
||||
|
@ -307,6 +336,17 @@ dependencies = [
|
|||
"pin-project-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-net"
|
||||
version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7"
|
||||
dependencies = [
|
||||
"async-io 2.3.1",
|
||||
"blocking",
|
||||
"futures-lite 2.2.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-process"
|
||||
version = "1.8.1"
|
||||
|
@ -403,21 +443,6 @@ version = "1.1.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||
|
||||
[[package]]
|
||||
name = "backtrace"
|
||||
version = "0.3.69"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
|
||||
dependencies = [
|
||||
"addr2line",
|
||||
"cc",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"miniz_oxide",
|
||||
"object",
|
||||
"rustc-demangle",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.21.7"
|
||||
|
@ -2056,7 +2081,10 @@ version = "2.2.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "445ba825b27408685aaecefd65178908c36c6e96aaf6d8599419d46e624192ba"
|
||||
dependencies = [
|
||||
"fastrand 2.0.1",
|
||||
"futures-core",
|
||||
"futures-io",
|
||||
"parking",
|
||||
"pin-project-lite",
|
||||
]
|
||||
|
||||
|
@ -2090,9 +2118,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-io",
|
||||
"futures-macro",
|
||||
"futures-sink",
|
||||
"futures-task",
|
||||
"memchr",
|
||||
"pin-project-lite",
|
||||
"pin-utils",
|
||||
"slab",
|
||||
|
@ -2253,12 +2283,6 @@ dependencies = [
|
|||
"weezl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gimli"
|
||||
version = "0.28.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
|
||||
|
||||
[[package]]
|
||||
name = "gio"
|
||||
version = "0.18.4"
|
||||
|
@ -2662,9 +2686,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "i-slint-backend-linuxkms"
|
||||
version = "1.4.0"
|
||||
version = "1.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f6cd1b3324ff9f747fcca8a2b26f6ddbea318f1df82904ead9b8f6afae24bc25"
|
||||
checksum = "7fff24de728432445a94f890093bd852a7c3fd01ae282e40ae0eab6ea629a66d"
|
||||
dependencies = [
|
||||
"calloop",
|
||||
"drm 0.9.0",
|
||||
|
@ -2683,9 +2707,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "i-slint-backend-selector"
|
||||
version = "1.4.0"
|
||||
version = "1.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6b0f07f619b50236543a1e0db24a479a1de8e334bf0aaca81c934e5f416dbb1b"
|
||||
checksum = "1953f792a394a7ad26932b4989646719fb126910029006f7cef40ffd189633d0"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"i-slint-backend-linuxkms",
|
||||
|
@ -2697,9 +2721,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "i-slint-backend-winit"
|
||||
version = "1.4.0"
|
||||
version = "1.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b4a2e570357afaf8f12d1a068425b3581ac731748dfc267c6c138360777bd450"
|
||||
checksum = "138c36c5c9e12f22fe07f280200cedb5d31e07641e40e3b45376fe2112ead303"
|
||||
dependencies = [
|
||||
"bytemuck",
|
||||
"cfg-if",
|
||||
|
@ -2732,9 +2756,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "i-slint-common"
|
||||
version = "1.4.0"
|
||||
version = "1.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0314c1b4834ab8b427eb4a557962647c508774b4cd395b64506243bc5ddd5696"
|
||||
checksum = "550e9282fda488b76ce057a728168d1aef947c758f3221b92ae904b167ab008c"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"derive_more",
|
||||
|
@ -2744,9 +2768,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "i-slint-compiler"
|
||||
version = "1.4.0"
|
||||
version = "1.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b3812db29a849bd6579c080d2b5507e7dd2105300a70aab6dd743974502d754f"
|
||||
checksum = "25aa2c3525ea761b3e9251f7869e64dce5f483f7ea1a5e04fe7b9a3fb5780dd6"
|
||||
dependencies = [
|
||||
"by_address",
|
||||
"codemap",
|
||||
|
@ -2774,9 +2798,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "i-slint-core"
|
||||
version = "1.4.0"
|
||||
version = "1.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ea54d9a3e3a7f6cf4d130810d287143120ff0c24a0b2d0fbd0ac0428c8fbe31f"
|
||||
checksum = "4d40990f7ed42c76799edc0e8cae9a8ffcc77569506a94e86eef81626c7387a7"
|
||||
dependencies = [
|
||||
"auto_enums",
|
||||
"bytemuck",
|
||||
|
@ -2818,9 +2842,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "i-slint-core-macros"
|
||||
version = "1.4.0"
|
||||
version = "1.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4732fcf4e706f99b93959f4ac8f66831483d3e194a3d476b14cb78e664acfe6e"
|
||||
checksum = "4f2a4e4c21ed660181abe101b6f141d920e838fec4bc1ff20f7440dc03fb5ad8"
|
||||
dependencies = [
|
||||
"quote",
|
||||
"syn 2.0.48",
|
||||
|
@ -2828,9 +2852,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "i-slint-renderer-femtovg"
|
||||
version = "1.4.0"
|
||||
version = "1.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d7cf902c7f989bd988077e2b517cfbb89981e220f5a07b7e8918554ec22dbc1d"
|
||||
checksum = "337e6ec928bde01baa27d3fdeddd5a33665952aead4d0d9be9818f573a41344c"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"const-field-offset",
|
||||
|
@ -2861,9 +2885,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "i-slint-renderer-skia"
|
||||
version = "1.4.0"
|
||||
version = "1.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "53a4babc3b281b491a7bc2cd48ea2643d6754eeb5c38a37d33da55366e00e197"
|
||||
checksum = "1189ac65d7e31129407e2cfef4009cdea500040a73d8f87505949f82af0939db"
|
||||
dependencies = [
|
||||
"ash",
|
||||
"bytemuck",
|
||||
|
@ -2892,8 +2916,7 @@ dependencies = [
|
|||
"unicode-segmentation",
|
||||
"vtable",
|
||||
"vulkano",
|
||||
"winapi",
|
||||
"wio",
|
||||
"windows 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -2934,9 +2957,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "i18n-embed-fl"
|
||||
version = "0.7.0"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9fc1f8715195dffc4caddcf1cf3128da15fe5d8a137606ea8856c9300047d5a2"
|
||||
checksum = "8241a781f49e923415e106fcd1f89c3fab92cc9f699a521c56e95dee273903d3"
|
||||
dependencies = [
|
||||
"dashmap",
|
||||
"find-crate",
|
||||
|
@ -3756,17 +3779,6 @@ dependencies = [
|
|||
"simd-adler32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mio"
|
||||
version = "0.8.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"wasi",
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "multicache"
|
||||
version = "0.6.1"
|
||||
|
@ -3999,15 +4011,6 @@ dependencies = [
|
|||
"objc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "object"
|
||||
version = "0.32.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ogg_pager"
|
||||
version = "0.6.0"
|
||||
|
@ -4659,20 +4662,6 @@ dependencies = [
|
|||
"bytemuck",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ring"
|
||||
version = "0.17.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"getrandom",
|
||||
"libc",
|
||||
"spin",
|
||||
"untrusted",
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rle-decode-fast"
|
||||
version = "1.0.3"
|
||||
|
@ -4700,9 +4689,9 @@ checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f"
|
|||
|
||||
[[package]]
|
||||
name = "rubato"
|
||||
version = "0.12.0"
|
||||
version = "0.14.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cd70209c27d5b08f5528bdc779ea3ffb418954e28987f9f9775c6eac41003f9c"
|
||||
checksum = "e6dd52e80cfc21894deadf554a5673002938ae4625f7a283e536f9cf7c17b0d5"
|
||||
dependencies = [
|
||||
"num-complex 0.4.4",
|
||||
"num-integer",
|
||||
|
@ -4744,12 +4733,6 @@ dependencies = [
|
|||
"walkdir",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustc-demangle"
|
||||
version = "0.1.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
|
||||
|
||||
[[package]]
|
||||
name = "rustc-hash"
|
||||
version = "1.1.0"
|
||||
|
@ -4839,28 +4822,6 @@ dependencies = [
|
|||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustls"
|
||||
version = "0.21.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba"
|
||||
dependencies = [
|
||||
"log",
|
||||
"ring",
|
||||
"rustls-webpki",
|
||||
"sct",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustls-webpki"
|
||||
version = "0.101.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
|
||||
dependencies = [
|
||||
"ring",
|
||||
"untrusted",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustversion"
|
||||
version = "1.0.14"
|
||||
|
@ -4869,9 +4830,9 @@ checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
|
|||
|
||||
[[package]]
|
||||
name = "rusty-chromaprint"
|
||||
version = "0.1.3"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "023a224821c3208db13134f398c2d92ed81267ef4f65ac8dff670c00b829faac"
|
||||
checksum = "1755646867c36ecb391776deaa0b557a76d3badf20c142de7282630c34b20440"
|
||||
dependencies = [
|
||||
"rubato",
|
||||
"rustfft 6.2.0",
|
||||
|
@ -4942,16 +4903,6 @@ version = "1.2.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
||||
|
||||
[[package]]
|
||||
name = "sct"
|
||||
version = "0.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
|
||||
dependencies = [
|
||||
"ring",
|
||||
"untrusted",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sctk-adwaita"
|
||||
version = "0.8.1"
|
||||
|
@ -5118,9 +5069,9 @@ checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
|
|||
|
||||
[[package]]
|
||||
name = "skia-bindings"
|
||||
version = "0.69.0"
|
||||
version = "0.70.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b4b5af96ee7d895763fa606f4531fddfb11de034217edd0c7beb9ea181efe5b"
|
||||
checksum = "4bc61a106126a429bb4775ce5fbe23b2bcaa74d1a9c484997f4700de31480b44"
|
||||
dependencies = [
|
||||
"bindgen",
|
||||
"cc",
|
||||
|
@ -5131,20 +5082,18 @@ dependencies = [
|
|||
"serde_json",
|
||||
"tar",
|
||||
"toml 0.8.9",
|
||||
"ureq",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "skia-safe"
|
||||
version = "0.69.0"
|
||||
version = "0.70.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4a3d25acaedea0a8ed1dac52f383fc90276f5679a68e3f84c5fb7f7bde8934ff"
|
||||
checksum = "3201eba92bca1f83864f5c3a48309bcfee7e0590bebd7826e7ab0a49aa24a750"
|
||||
dependencies = [
|
||||
"bitflags 2.4.2",
|
||||
"lazy_static",
|
||||
"skia-bindings",
|
||||
"winapi",
|
||||
"wio",
|
||||
"windows 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -5158,9 +5107,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "slint"
|
||||
version = "1.4.0"
|
||||
version = "1.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fc2fbd42d7728b2a48e21b8e0a8bde32275956bd8802b779e127d8fb3b9e73b6"
|
||||
checksum = "7d51a972e5c6f22793f9b334eeb537121337fbf66ed73e978475fca031fd367a"
|
||||
dependencies = [
|
||||
"const-field-offset",
|
||||
"i-slint-backend-selector",
|
||||
|
@ -5175,9 +5124,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "slint-build"
|
||||
version = "1.4.0"
|
||||
version = "1.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b65a1ded118c4848c432f9b1877eab793fcc1ef9fd9809d6f7a3cd1eefb1bb2b"
|
||||
checksum = "ebf98969a520e19ec675435b8c21b883d4a06489947e137bbd30859b50ad0c36"
|
||||
dependencies = [
|
||||
"i-slint-compiler",
|
||||
"spin_on",
|
||||
|
@ -5187,9 +5136,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "slint-macros"
|
||||
version = "1.4.0"
|
||||
version = "1.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ad63c624ee686b0b1dc93b962deb9a526638d0328e89453e9554fe5e047da54a"
|
||||
checksum = "564b2a25cc34007aa9cd73630394efa972b956fee86538caa5d09808b3ba0c05"
|
||||
dependencies = [
|
||||
"i-slint-compiler",
|
||||
"proc-macro2",
|
||||
|
@ -5289,16 +5238,6 @@ dependencies = [
|
|||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "socket2"
|
||||
version = "0.5.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "softbuffer"
|
||||
version = "0.3.4"
|
||||
|
@ -5403,18 +5342,18 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
|||
|
||||
[[package]]
|
||||
name = "strum"
|
||||
version = "0.25.0"
|
||||
version = "0.26.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
|
||||
checksum = "723b93e8addf9aa965ebe2d11da6d7540fa2283fcea14b3371ff055f7ba13f5f"
|
||||
dependencies = [
|
||||
"strum_macros",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "strum_macros"
|
||||
version = "0.25.3"
|
||||
version = "0.26.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0"
|
||||
checksum = "7a3417fc93d76740d974a01654a09777cb500428cc874ca9f45edfe0c4d4cd18"
|
||||
dependencies = [
|
||||
"heck",
|
||||
"proc-macro2",
|
||||
|
@ -5745,9 +5684,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "time"
|
||||
version = "0.3.32"
|
||||
version = "0.3.33"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fe80ced77cbfb4cb91a94bf72b378b4b6791a0d9b7f09d0be747d1bdff4e68bd"
|
||||
checksum = "00b24b79b7a07f10209f19e683ca1e289d80b1e76ffa8c2b779718566a083679"
|
||||
dependencies = [
|
||||
"deranged",
|
||||
"itoa",
|
||||
|
@ -5838,23 +5777,6 @@ version = "0.1.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
||||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.35.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
|
||||
dependencies = [
|
||||
"backtrace",
|
||||
"bytes",
|
||||
"libc",
|
||||
"mio",
|
||||
"pin-project-lite",
|
||||
"signal-hook-registry",
|
||||
"socket2 0.5.5",
|
||||
"tracing",
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.5.11"
|
||||
|
@ -6172,28 +6094,6 @@ version = "0.1.11"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
|
||||
|
||||
[[package]]
|
||||
name = "untrusted"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
|
||||
|
||||
[[package]]
|
||||
name = "ureq"
|
||||
version = "2.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97"
|
||||
dependencies = [
|
||||
"base64",
|
||||
"flate2",
|
||||
"log",
|
||||
"once_cell",
|
||||
"rustls",
|
||||
"rustls-webpki",
|
||||
"url",
|
||||
"webpki-roots",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "url"
|
||||
version = "2.5.0"
|
||||
|
@ -6607,12 +6507,6 @@ dependencies = [
|
|||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "webpki-roots"
|
||||
version = "0.25.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10"
|
||||
|
||||
[[package]]
|
||||
name = "weezl"
|
||||
version = "0.1.8"
|
||||
|
@ -6689,6 +6583,16 @@ dependencies = [
|
|||
"windows-targets 0.48.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
|
||||
dependencies = [
|
||||
"windows-core",
|
||||
"windows-targets 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-core"
|
||||
version = "0.52.0"
|
||||
|
@ -6946,9 +6850,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "winnow"
|
||||
version = "0.5.36"
|
||||
version = "0.5.37"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "818ce546a11a9986bc24f93d0cdf38a8a1a400f1473ea8c82e59f6e0ffab9249"
|
||||
checksum = "a7cad8365489051ae9f054164e459304af2e7e9bb407c958076c8bf4aef52da5"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
@ -7120,9 +7024,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "31de390a2d872e4cd04edd71b425e29853f786dc99317ed72d73d6fcf5ebb948"
|
||||
dependencies = [
|
||||
"async-broadcast",
|
||||
"async-executor",
|
||||
"async-fs 1.6.0",
|
||||
"async-io 1.13.0",
|
||||
"async-lock 2.8.0",
|
||||
"async-process",
|
||||
"async-recursion",
|
||||
"async-task",
|
||||
"async-trait",
|
||||
"blocking",
|
||||
"byteorder",
|
||||
"derivative",
|
||||
"enumflags2",
|
||||
|
@ -7139,7 +7049,6 @@ dependencies = [
|
|||
"serde_repr",
|
||||
"sha1",
|
||||
"static_assertions",
|
||||
"tokio",
|
||||
"tracing",
|
||||
"uds_windows",
|
||||
"winapi",
|
||||
|
|
|
@ -34,7 +34,7 @@ audio_checker = "0.1"
|
|||
pdf = "0.9"
|
||||
|
||||
# Needed by audio similarity feature
|
||||
rusty-chromaprint = "0.1"
|
||||
rusty-chromaprint = "0.2"
|
||||
symphonia = { version = "0.5", features = ["all"] }
|
||||
|
||||
# Hashes for duplicate files
|
||||
|
@ -55,7 +55,7 @@ serde_json = "1.0"
|
|||
|
||||
# Language
|
||||
i18n-embed = { version = "0.14", features = ["fluent-system", "desktop-requester"] }
|
||||
i18n-embed-fl = "0.7"
|
||||
i18n-embed-fl = "0.8"
|
||||
rust-embed = { version = "8.2", features = ["debug-embed"] }
|
||||
once_cell = "1.19"
|
||||
|
||||
|
|
|
@ -52,16 +52,11 @@ impl Extensions {
|
|||
}
|
||||
|
||||
/// List of allowed extensions, only files with this extensions will be checking if are duplicates
|
||||
/// After, extensions cannot contains any dot, commas etc.
|
||||
/// After, extensions cannot contain any dot, commas etc.
|
||||
pub fn set_allowed_extensions(&mut self, allowed_extensions: String) -> Messages {
|
||||
let (extensions, mut messages) = Self::filter_extensions(allowed_extensions);
|
||||
let (extensions, messages) = Self::filter_extensions(allowed_extensions);
|
||||
|
||||
self.allowed_extensions_hashset = extensions;
|
||||
if self.allowed_extensions_hashset.is_empty() {
|
||||
messages
|
||||
.messages
|
||||
.push("No valid extensions were provided, so allowing all extensions by default.".to_string());
|
||||
}
|
||||
messages
|
||||
}
|
||||
|
||||
|
|
|
@ -189,7 +189,7 @@ impl EmptyFolder {
|
|||
}
|
||||
}
|
||||
|
||||
let mut folder_entries: HashMap<String, FolderEntry> = HashMap::with_capacity(start_folder_entries.len() + new_folder_entries_list.iter().map(|e| e.len()).sum::<usize>());
|
||||
let mut folder_entries: HashMap<String, FolderEntry> = HashMap::with_capacity(start_folder_entries.len() + new_folder_entries_list.iter().map(Vec::len).sum::<usize>());
|
||||
for fe in start_folder_entries {
|
||||
folder_entries.insert(fe.path.to_string_lossy().to_string(), fe);
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ fs_extra = "1.3"
|
|||
|
||||
# Language
|
||||
i18n-embed = { version = "0.14", features = ["fluent-system", "desktop-requester"] }
|
||||
i18n-embed-fl = "0.7"
|
||||
i18n-embed-fl = "0.8"
|
||||
rust-embed = { version = "8.2", features = ["debug-embed"] }
|
||||
once_cell = "1.19"
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ chrono = "0.4.33"
|
|||
open = "5.0"
|
||||
crossbeam-channel = "0.5"
|
||||
handsome_logger = "0.8"
|
||||
rfd = { version = "0.13", default-features = false, features = ["xdg-portal", "tokio"] }
|
||||
rfd = { version = "0.13", default-features = false, features = ["xdg-portal", "async-std"] }
|
||||
home = "0.5"
|
||||
log = "0.4.20"
|
||||
serde = "1.0"
|
||||
|
@ -30,7 +30,7 @@ rayon = "1.8"
|
|||
|
||||
# Translations
|
||||
i18n-embed = { version = "0.14", features = ["fluent-system", "desktop-requester"] }
|
||||
i18n-embed-fl = "0.7"
|
||||
i18n-embed-fl = "0.8"
|
||||
rust-embed = { version = "8.2", features = ["debug-embed"] }
|
||||
once_cell = "1.19"
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
use std::path::PathBuf;
|
||||
|
||||
use slint::{ModelRc, SharedString, StandardListViewItem, VecModel};
|
||||
use crate::CurrentTab;
|
||||
use crate::ExcludedDirectoriesModel;
|
||||
use crate::IncludedDirectoriesModel;
|
||||
use crate::CurrentTab;
|
||||
use slint::{ModelRc, SharedString, VecModel};
|
||||
|
||||
// Remember to match updated this according to ui/main_lists.slint and connect_scan.rs files
|
||||
pub fn get_path_idx(active_tab: CurrentTab) -> usize {
|
||||
|
@ -41,25 +41,27 @@ pub fn get_is_header_mode(active_tab: CurrentTab) -> bool {
|
|||
// .collect::<Vec<_>>();
|
||||
// ModelRc::new(VecModel::from(new_folders_standard_list_view))
|
||||
// }
|
||||
pub fn create_string_standard_list_view_from_pathbuf(items: &[PathBuf]) -> ModelRc<StandardListViewItem> {
|
||||
let new_folders_standard_list_view = items
|
||||
.iter()
|
||||
.map(|x| {
|
||||
let mut element = StandardListViewItem::default();
|
||||
element.text = x.to_string_lossy().to_string().into();
|
||||
element
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
ModelRc::new(VecModel::from(new_folders_standard_list_view))
|
||||
}
|
||||
// pub fn create_string_standard_list_view_from_pathbuf(items: &[PathBuf]) -> ModelRc<StandardListViewItem> {
|
||||
// let new_folders_standard_list_view = items
|
||||
// .iter()
|
||||
// .map(|x| {
|
||||
// let mut element = StandardListViewItem::default();
|
||||
// element.text = x.to_string_lossy().to_string().into();
|
||||
// element
|
||||
// })
|
||||
// .collect::<Vec<_>>();
|
||||
// ModelRc::new(VecModel::from(new_folders_standard_list_view))
|
||||
// }
|
||||
|
||||
pub fn create_included_directories_model_from_pathbuf(items: &[PathBuf]) -> ModelRc<IncludedDirectoriesModel> {
|
||||
pub fn create_included_directories_model_from_pathbuf(items: &[PathBuf], referenced: &[PathBuf]) -> ModelRc<IncludedDirectoriesModel> {
|
||||
let referenced_as_string = referenced.iter().map(|x| x.to_string_lossy().to_string()).collect::<Vec<_>>();
|
||||
let converted = items
|
||||
.iter()
|
||||
.map(|x| {
|
||||
let path_as_string = x.to_string_lossy().to_string();
|
||||
IncludedDirectoriesModel {
|
||||
path: x.to_string_lossy().to_string().into(),
|
||||
referenced_folder: false,
|
||||
referenced_folder: referenced_as_string.contains(&path_as_string),
|
||||
selected_row: false,
|
||||
}
|
||||
})
|
||||
|
@ -70,11 +72,9 @@ pub fn create_included_directories_model_from_pathbuf(items: &[PathBuf]) -> Mode
|
|||
pub fn create_excluded_directories_model_from_pathbuf(items: &[PathBuf]) -> ModelRc<ExcludedDirectoriesModel> {
|
||||
let converted = items
|
||||
.iter()
|
||||
.map(|x| {
|
||||
ExcludedDirectoriesModel {
|
||||
path: x.to_string_lossy().to_string().into(),
|
||||
selected_row: false,
|
||||
}
|
||||
.map(|x| ExcludedDirectoriesModel {
|
||||
path: x.to_string_lossy().to_string().into(),
|
||||
selected_row: false,
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
ModelRc::new(VecModel::from(converted))
|
||||
|
|
|
@ -12,65 +12,67 @@ pub fn connect_add_remove_directories(app: &MainWindow) {
|
|||
fn connect_add_manual_directories(app: &MainWindow) {
|
||||
let a = app.as_weak();
|
||||
app.global::<Callabler>().on_added_manual_directories(move |included_directories, list_of_files_to_add| {
|
||||
let non_empty_lines = list_of_files_to_add.lines().filter(|x| !x.is_empty()).collect::<Vec<_>>();
|
||||
if non_empty_lines.is_empty() {
|
||||
let folders = list_of_files_to_add.lines().filter(|x| !x.is_empty()).map(str::to_string).collect::<Vec<_>>();
|
||||
if folders.is_empty() {
|
||||
return;
|
||||
}
|
||||
let app = a.upgrade().unwrap();
|
||||
let settings = app.global::<Settings>();
|
||||
|
||||
if included_directories {
|
||||
let included_model = settings.get_included_directories_model();
|
||||
let mut included_model = included_model.iter().collect::<Vec<_>>();
|
||||
included_model.extend(non_empty_lines.iter().map(|x| IncludedDirectoriesModel {
|
||||
path: x.to_string_lossy().to_string().into(),
|
||||
referenced_folder: false,
|
||||
selected_row: false,
|
||||
}));
|
||||
included_model.sort_by_cached_key(|x| x.text.to_string());
|
||||
included_model.dedup();
|
||||
settings.set_included_directories_model(ModelRc::new(VecModel::from(included_model)));
|
||||
add_included_directories(&settings, &folders);
|
||||
} else {
|
||||
let excluded_model = settings.get_excluded_directories_model();
|
||||
let mut excluded_model = excluded_model.iter().collect::<Vec<_>>();
|
||||
excluded_model.extend(non_empty_lines.iter().map(|x| ExcludedDirectoriesModel {
|
||||
path: x.to_string_lossy().to_string().into(),
|
||||
selected_row: false,
|
||||
}));
|
||||
excluded_model.sort_by_cached_key(|x| x.path.to_string());
|
||||
excluded_model.dedup();
|
||||
settings.set_excluded_directories_model(ModelRc::new(VecModel::from(excluded_model)));
|
||||
add_excluded_directories(&settings, &folders);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
fn connect_remove_directories(app: &MainWindow) {
|
||||
let a = app.as_weak();
|
||||
app.global::<Callabler>().on_remove_item_directories(move |included_directories, current_index| {
|
||||
app.global::<Callabler>().on_remove_item_directories(move |included_directories| {
|
||||
let app = a.upgrade().unwrap();
|
||||
let settings = app.global::<Settings>();
|
||||
|
||||
let current_index = if included_directories {
|
||||
settings.get_included_directories_model_selected_idx()
|
||||
} else {
|
||||
settings.get_excluded_directories_model_selected_idx()
|
||||
};
|
||||
|
||||
// Nothing selected
|
||||
if current_index == -1 {
|
||||
return;
|
||||
}
|
||||
let app = a.upgrade().unwrap();
|
||||
let settings = app.global::<Settings>();
|
||||
|
||||
if included_directories {
|
||||
let included_model = settings.get_included_directories();
|
||||
let included_model = settings.get_included_directories_model();
|
||||
let model_count = included_model.iter().count();
|
||||
|
||||
if model_count > current_index as usize {
|
||||
let mut included_model = included_model.iter().collect::<Vec<_>>();
|
||||
included_model.remove(current_index as usize);
|
||||
settings.set_included_directories(ModelRc::new(VecModel::from(included_model)));
|
||||
if current_index as usize != model_count - 1 {
|
||||
included_model[current_index as usize].selected_row = true;
|
||||
settings.set_included_directories_model_selected_idx(current_index);
|
||||
} else {
|
||||
settings.set_included_directories_model_selected_idx(-1);
|
||||
}
|
||||
settings.set_included_directories_model(ModelRc::new(VecModel::from(included_model)));
|
||||
}
|
||||
} else {
|
||||
let excluded_model = settings.get_excluded_directories();
|
||||
let excluded_model = settings.get_excluded_directories_model();
|
||||
let model_count = excluded_model.iter().count();
|
||||
|
||||
if model_count > current_index as usize {
|
||||
let mut excluded_model = excluded_model.iter().collect::<Vec<_>>();
|
||||
excluded_model.remove(current_index as usize);
|
||||
settings.set_excluded_directories(ModelRc::new(VecModel::from(excluded_model)));
|
||||
if current_index as usize != model_count - 1 {
|
||||
excluded_model[current_index as usize].selected_row = true;
|
||||
settings.set_excluded_directories_model_selected_idx(current_index);
|
||||
} else {
|
||||
settings.set_excluded_directories_model_selected_idx(-1);
|
||||
}
|
||||
settings.set_excluded_directories_model(ModelRc::new(VecModel::from(excluded_model)));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -88,33 +90,54 @@ fn connect_add_directories(app: &MainWindow) {
|
|||
let Some(folders) = file_dialog.pick_folders() else {
|
||||
return;
|
||||
};
|
||||
let folders = folders.iter().map(|x| x.to_string_lossy().to_string()).collect::<Vec<_>>();
|
||||
|
||||
let settings = app.global::<Settings>();
|
||||
let old_folders = if included_directories {
|
||||
settings.get_included_directories_model()
|
||||
} else {
|
||||
settings.get_excluded_directories_model()
|
||||
};
|
||||
|
||||
let mut new_folders = old_folders.iter().map(|x| x.path.to_string()).collect::<Vec<_>>();
|
||||
new_folders.extend(folders.iter().map(|x| x.to_string_lossy().to_string()));
|
||||
new_folders.sort();
|
||||
new_folders.dedup();
|
||||
|
||||
let new_folders_standard_list_view = new_folders
|
||||
.iter()
|
||||
.map(|x| {
|
||||
let mut element = slint::StandardListViewItem::default();
|
||||
element.text = x.into();
|
||||
element
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
let new_folders_model = ModelRc::new(VecModel::from(new_folders_standard_list_view));
|
||||
|
||||
if included_directories {
|
||||
settings.set_included_directories_model(new_folders_model);
|
||||
add_included_directories(&settings, &folders);
|
||||
} else {
|
||||
settings.set_excluded_directories_model(new_folders_model);
|
||||
add_excluded_directories(&settings, &folders);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
fn add_included_directories(settings: &Settings, folders: &[String]) {
|
||||
let old_folders = settings.get_included_directories_model();
|
||||
let old_folders_path = old_folders.iter().map(|x| x.path.to_string()).collect::<Vec<_>>();
|
||||
let mut new_folders = old_folders.iter().collect::<Vec<_>>();
|
||||
|
||||
let filtered_folders = folders.iter().filter(|x| !old_folders_path.contains(x)).collect::<Vec<_>>();
|
||||
|
||||
new_folders.iter_mut().for_each(|x| x.selected_row = false);
|
||||
|
||||
new_folders.extend(filtered_folders.iter().map(|path| IncludedDirectoriesModel {
|
||||
path: (*path).into(),
|
||||
referenced_folder: false,
|
||||
selected_row: false,
|
||||
}));
|
||||
|
||||
new_folders.sort_by_key(|x| x.path.clone());
|
||||
|
||||
let new_folders_model = ModelRc::new(VecModel::from(new_folders));
|
||||
settings.set_included_directories_model(new_folders_model);
|
||||
}
|
||||
|
||||
fn add_excluded_directories(settings: &Settings, folders: &[String]) {
|
||||
let old_folders = settings.get_excluded_directories_model();
|
||||
let old_folders_path = old_folders.iter().map(|x| x.path.to_string()).collect::<Vec<_>>();
|
||||
let mut new_folders = old_folders.iter().collect::<Vec<_>>();
|
||||
|
||||
let filtered_folders = folders.iter().filter(|x| !old_folders_path.contains(x)).collect::<Vec<_>>();
|
||||
|
||||
new_folders.iter_mut().for_each(|x| x.selected_row = false);
|
||||
|
||||
new_folders.extend(filtered_folders.iter().map(|path| ExcludedDirectoriesModel {
|
||||
path: (*path).into(),
|
||||
selected_row: false,
|
||||
}));
|
||||
|
||||
new_folders.sort_by_key(|x| x.path.clone());
|
||||
|
||||
let new_folders_model = ModelRc::new(VecModel::from(new_folders));
|
||||
settings.set_excluded_directories_model(new_folders_model);
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ use czkawka_core::common_traits::ResultEntry;
|
|||
use czkawka_core::empty_files::EmptyFiles;
|
||||
use czkawka_core::empty_folder::{EmptyFolder, FolderEntry};
|
||||
use czkawka_core::similar_images;
|
||||
use czkawka_core::similar_images::SimilarImages;
|
||||
use czkawka_core::similar_images::{ImagesEntry, SimilarImages};
|
||||
|
||||
use crate::settings::{collect_settings, SettingsCustom, ALLOWED_HASH_TYPE_VALUES, ALLOWED_RESIZE_ALGORITHM_VALUES};
|
||||
use crate::{CurrentTab, GuiState, MainListModel, MainWindow, ProgressToSend};
|
||||
|
@ -74,22 +74,70 @@ fn scan_similar_images(a: Weak<MainWindow>, progress_sender: Sender<ProgressData
|
|||
finder.set_similarity(custom_settings.similar_images_sub_similarity as u32);
|
||||
finder.find_similar_images(Some(&stop_receiver), Some(&progress_sender));
|
||||
|
||||
let mut vector = finder.get_similar_images().clone();
|
||||
let messages = finder.get_text_messages().create_messages_text();
|
||||
if finder.get_use_reference() {
|
||||
let mut vector = finder.get_similar_images_referenced().clone();
|
||||
let messages = finder.get_text_messages().create_messages_text();
|
||||
|
||||
for vec_fe in &mut vector {
|
||||
vec_fe.par_sort_unstable_by_key(|e| e.similarity);
|
||||
let hash_size = custom_settings.similar_images_sub_hash_size;
|
||||
|
||||
for (_first_entry, vec_fe) in &mut vector {
|
||||
vec_fe.par_sort_unstable_by_key(|e| e.similarity);
|
||||
}
|
||||
|
||||
a.upgrade_in_event_loop(move |app| {
|
||||
write_similar_images_results_referenced(&app, vector, messages, hash_size);
|
||||
})
|
||||
} else {
|
||||
let mut vector = finder.get_similar_images().clone();
|
||||
let messages = finder.get_text_messages().create_messages_text();
|
||||
|
||||
let hash_size = custom_settings.similar_images_sub_hash_size;
|
||||
|
||||
for vec_fe in &mut vector {
|
||||
vec_fe.par_sort_unstable_by_key(|e| e.similarity);
|
||||
}
|
||||
|
||||
a.upgrade_in_event_loop(move |app| {
|
||||
write_similar_images_results(&app, vector, messages, hash_size);
|
||||
})
|
||||
}
|
||||
|
||||
let hash_size = custom_settings.similar_images_sub_hash_size;
|
||||
|
||||
a.upgrade_in_event_loop(move |app| {
|
||||
write_similar_images_results(&app, vector, messages, hash_size);
|
||||
})
|
||||
})
|
||||
.unwrap();
|
||||
}
|
||||
fn write_similar_images_results(app: &MainWindow, vector: Vec<Vec<similar_images::ImagesEntry>>, messages: String, hash_size: u8) {
|
||||
fn write_similar_images_results_referenced(app: &MainWindow, vector: Vec<(ImagesEntry, Vec<ImagesEntry>)>, messages: String, hash_size: u8) {
|
||||
let items_found = vector.len();
|
||||
let items = Rc::new(VecModel::default());
|
||||
for (ref_fe, vec_fe) in vector {
|
||||
let (ref_directory, ref_file) = split_path(ref_fe.get_path());
|
||||
let ref_data_model = VecModel::from_slice(&[
|
||||
similar_images::get_string_from_similarity(&ref_fe.similarity, hash_size).into(),
|
||||
format_size(ref_fe.size, BINARY).into(),
|
||||
ref_fe.dimensions.clone().into(),
|
||||
ref_file.into(),
|
||||
ref_directory.into(),
|
||||
NaiveDateTime::from_timestamp_opt(ref_fe.get_modified_date() as i64, 0).unwrap().to_string().into(),
|
||||
]);
|
||||
insert_data_to_model(&items, ref_data_model, true);
|
||||
|
||||
for fe in vec_fe {
|
||||
let (directory, file) = split_path(fe.get_path());
|
||||
let data_model = VecModel::from_slice(&[
|
||||
similar_images::get_string_from_similarity(&fe.similarity, hash_size).into(),
|
||||
format_size(fe.size, BINARY).into(),
|
||||
fe.dimensions.clone().into(),
|
||||
file.into(),
|
||||
directory.into(),
|
||||
NaiveDateTime::from_timestamp_opt(fe.get_modified_date() as i64, 0).unwrap().to_string().into(),
|
||||
]);
|
||||
|
||||
insert_data_to_model(&items, data_model, false);
|
||||
}
|
||||
}
|
||||
app.set_similar_images_model(items.into());
|
||||
app.invoke_scan_ended(format!("Found {items_found} similar images files").into());
|
||||
app.global::<GuiState>().set_info_text(messages.into());
|
||||
}
|
||||
fn write_similar_images_results(app: &MainWindow, vector: Vec<Vec<ImagesEntry>>, messages: String, hash_size: u8) {
|
||||
let items_found = vector.len();
|
||||
let items = Rc::new(VecModel::default());
|
||||
for vec_fe in vector {
|
||||
|
@ -202,6 +250,7 @@ where
|
|||
T: CommonData,
|
||||
{
|
||||
component.set_included_directory(custom_settings.included_directories.clone());
|
||||
component.set_reference_directory(custom_settings.included_directories_referenced.clone());
|
||||
component.set_excluded_directory(custom_settings.excluded_directories.clone());
|
||||
component.set_recursive_search(custom_settings.recursive_search);
|
||||
component.set_minimal_file_size(custom_settings.minimum_file_size as u64 * 1024);
|
||||
|
|
|
@ -12,7 +12,7 @@ use slint::{ComponentHandle, Model, ModelRc};
|
|||
use czkawka_core::common::{get_available_threads, set_number_of_threads};
|
||||
use czkawka_core::common_items::{DEFAULT_EXCLUDED_DIRECTORIES, DEFAULT_EXCLUDED_ITEMS};
|
||||
|
||||
use crate::common::{create_included_directories_model_from_pathbuf, create_excluded_directories_model_from_pathbuf, create_vec_model_from_vec_string};
|
||||
use crate::common::{create_excluded_directories_model_from_pathbuf, create_included_directories_model_from_pathbuf, create_vec_model_from_vec_string};
|
||||
use crate::{Callabler, GuiState, MainWindow, Settings};
|
||||
|
||||
pub const DEFAULT_MINIMUM_SIZE_KB: i32 = 16;
|
||||
|
@ -44,6 +44,8 @@ pub const ALLOWED_HASH_TYPE_VALUES: &[(&str, &str, HashAlg)] = &[
|
|||
pub struct SettingsCustom {
|
||||
#[serde(default = "default_included_directories")]
|
||||
pub included_directories: Vec<PathBuf>,
|
||||
#[serde(default)]
|
||||
pub included_directories_referenced: Vec<PathBuf>,
|
||||
#[serde(default = "default_excluded_directories")]
|
||||
pub excluded_directories: Vec<PathBuf>,
|
||||
#[serde(default = "default_excluded_items")]
|
||||
|
@ -261,7 +263,7 @@ pub fn save_base_settings_to_file(app: &MainWindow) {
|
|||
|
||||
pub fn save_custom_settings_to_file(app: &MainWindow) {
|
||||
let current_item = app.global::<Settings>().get_settings_preset_idx();
|
||||
let result = save_data_to_file(get_config_file(current_item + 1), &collect_settings(app));
|
||||
let result = save_data_to_file(get_config_file(current_item), &collect_settings(app));
|
||||
|
||||
if let Err(e) = result {
|
||||
error!("{e}");
|
||||
|
@ -350,12 +352,12 @@ pub fn set_settings_to_gui(app: &MainWindow, custom_settings: &SettingsCustom) {
|
|||
let settings = app.global::<Settings>();
|
||||
|
||||
// Included directories
|
||||
let included_directories = create_included_directories_model_from_pathbuf(&custom_settings.included_directories);
|
||||
settings.set_included_directories(included_directories);
|
||||
let included_directories = create_included_directories_model_from_pathbuf(&custom_settings.included_directories, &custom_settings.included_directories_referenced);
|
||||
settings.set_included_directories_model(included_directories);
|
||||
|
||||
// Excluded directories
|
||||
let excluded_directories = create_excluded_directories_model_from_pathbuf(&custom_settings.excluded_directories);
|
||||
settings.set_excluded_directories(excluded_directories);
|
||||
settings.set_excluded_directories_model(excluded_directories);
|
||||
|
||||
settings.set_excluded_items(custom_settings.excluded_items.clone().into());
|
||||
settings.set_allowed_extensions(custom_settings.allowed_extensions.clone().into());
|
||||
|
@ -433,11 +435,16 @@ pub fn set_settings_to_gui(app: &MainWindow, custom_settings: &SettingsCustom) {
|
|||
pub fn collect_settings(app: &MainWindow) -> SettingsCustom {
|
||||
let settings = app.global::<Settings>();
|
||||
|
||||
let included_directories = settings.get_included_directories_model();
|
||||
let included_directories = included_directories.iter().map(|model| PathBuf::from(model.path.as_str())).collect::<Vec<_>>();
|
||||
let included_directories_model = settings.get_included_directories_model();
|
||||
let included_directories = included_directories_model.iter().map(|model| PathBuf::from(model.path.as_str())).collect::<Vec<_>>();
|
||||
let included_directories_referenced = included_directories_model
|
||||
.iter()
|
||||
.filter(|model| model.referenced_folder)
|
||||
.map(|model| PathBuf::from(model.path.as_str()))
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
let excluded_directories = settings.get_excluded_directories_model();
|
||||
let excluded_directories = excluded_directories.iter().map(|model| PathBuf::from(model.path.as_str())).collect::<Vec<_>>();
|
||||
let excluded_directories_model = settings.get_excluded_directories_model();
|
||||
let excluded_directories = excluded_directories_model.iter().map(|model| PathBuf::from(model.path.as_str())).collect::<Vec<_>>();
|
||||
|
||||
let excluded_items = settings.get_excluded_items().to_string();
|
||||
let allowed_extensions = settings.get_allowed_extensions().to_string();
|
||||
|
@ -482,6 +489,7 @@ pub fn collect_settings(app: &MainWindow) -> SettingsCustom {
|
|||
let similar_images_sub_similarity = settings.get_similar_images_sub_current_similarity().round() as i32;
|
||||
SettingsCustom {
|
||||
included_directories,
|
||||
included_directories_referenced,
|
||||
excluded_directories,
|
||||
excluded_items,
|
||||
allowed_extensions,
|
||||
|
|
|
@ -25,7 +25,7 @@ component DirectoriesPanel inherits HorizontalLayout {
|
|||
Button {
|
||||
text: "Remove";
|
||||
clicked => {
|
||||
Callabler.remove_item_directories(true, included_list.current_index);
|
||||
Callabler.remove_item_directories(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -66,7 +66,7 @@ component DirectoriesPanel inherits HorizontalLayout {
|
|||
Button {
|
||||
text: "Remove";
|
||||
clicked => {
|
||||
Callabler.remove_item_directories(false, excluded_list.current_index);
|
||||
Callabler.remove_item_directories(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
export global Callabler {
|
||||
// Bottom panel operations
|
||||
callback remove_item_directories(bool, int);
|
||||
callback remove_item_directories(bool);
|
||||
callback added_manual_directories(bool, string);
|
||||
|
||||
// Right click or middle click opener
|
||||
|
|
|
@ -6,8 +6,8 @@ import {ColorPalette} from "color_palette.slint";
|
|||
import {Settings} from "settings.slint";
|
||||
|
||||
export component IncludedDirectories {
|
||||
in-out property <[IncludedDirectoriesModel]> model: Settings.included_directories_model;
|
||||
in-out property <int> current_index: -1;
|
||||
in-out property <[IncludedDirectoriesModel]> model <=> Settings.included_directories_model;
|
||||
in-out property <int> current_index <=> Settings.included_directories_model_selected_idx;
|
||||
|
||||
in-out property <length> size_referenced_folder: 33px;
|
||||
|
||||
|
@ -26,21 +26,43 @@ export component IncludedDirectories {
|
|||
}
|
||||
}
|
||||
ListView {
|
||||
for data in model : Rectangle {
|
||||
for r[idx] in model : Rectangle {
|
||||
height: 30px;
|
||||
border_radius: 5px;
|
||||
width: parent.width;
|
||||
|
||||
background: touch-area.has-hover ? (r.selected_row ? ColorPalette.list-view-normal-selected-header : ColorPalette.list_view_normal_color) : (r.selected_row ? ColorPalette.list-view-normal-selected-header : ColorPalette.list_view_normal_color);
|
||||
touch_area := TouchArea {
|
||||
clicked => {
|
||||
if (current_index == -1) {
|
||||
r.selected_row = true;
|
||||
} else {
|
||||
if (current_index != idx) {
|
||||
model[current_index].selected_row = false;
|
||||
}
|
||||
r.selected_row = true;
|
||||
}
|
||||
current_index = idx;
|
||||
}
|
||||
double-clicked => {
|
||||
Callabler.item_opened(r.path);
|
||||
}
|
||||
}
|
||||
|
||||
HorizontalLayout {
|
||||
spacing: 5px;
|
||||
width: parent.width;
|
||||
|
||||
CheckBox {
|
||||
checked: data.referenced_folder;
|
||||
checked: r.referenced_folder;
|
||||
toggled => {
|
||||
model[idx].referenced_folder = self.checked;
|
||||
}
|
||||
width: size_referenced_folder;
|
||||
}
|
||||
Text {
|
||||
horizontal-stretch: 1.0;
|
||||
text: data.path;
|
||||
text: r.path;
|
||||
vertical-alignment: center;
|
||||
}
|
||||
}
|
||||
|
@ -50,9 +72,8 @@ export component IncludedDirectories {
|
|||
}
|
||||
|
||||
export component ExcludedDirectories {
|
||||
in-out property <[ExcludedDirectoriesModel]> model: Settings.excluded_directories_model;
|
||||
in-out property <int> current_index: -1;
|
||||
private property <PointerEvent> event;
|
||||
in-out property <[ExcludedDirectoriesModel]> model <=> Settings.excluded_directories_model;
|
||||
in-out property <int> current_index <=> Settings.excluded_directories_model_selected_idx;
|
||||
|
||||
min-width: 50px;
|
||||
VerticalLayout {
|
||||
|
@ -85,9 +106,6 @@ export component ExcludedDirectories {
|
|||
double-clicked => {
|
||||
Callabler.item_opened(r.path);
|
||||
}
|
||||
pointer-event(event) => {
|
||||
root.event = event;
|
||||
}
|
||||
}
|
||||
|
||||
HorizontalLayout {
|
||||
|
|
|
@ -6,7 +6,9 @@ export global Settings {
|
|||
in-out property <[string]> settings_presets: ["Preset 1", "Preset 2"];
|
||||
|
||||
in-out property <[IncludedDirectoriesModel]> included_directories_model: [{path: "/home/path", referenced_folder: false, selected_row: false}];
|
||||
in-out property <int> included_directories_model_selected_idx: -1;
|
||||
in-out property <[ExcludedDirectoriesModel]> excluded_directories_model: [{path:"/home/path", selected_row: false}, {path:"/home/path", selected_row: false}];
|
||||
in-out property <int> excluded_directories_model_selected_idx: -1;
|
||||
|
||||
// Settings
|
||||
in-out property <string> excluded_items: "Excluded items";
|
||||
|
|
Loading…
Reference in a new issue