1
0
Fork 0
mirror of synced 2024-05-17 19:03:08 +12:00
This commit is contained in:
Rafał Mikrut 2023-06-08 08:52:41 +02:00
parent 1be2db52a5
commit f8a97e3b7a
5 changed files with 131 additions and 123 deletions

186
Cargo.lock generated
View file

@ -27,9 +27,9 @@ dependencies = [
[[package]]
name = "aho-corasick"
version = "1.0.1"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
dependencies = [
"memchr",
]
@ -85,7 +85,7 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
dependencies = [
"windows-sys 0.48.0",
"windows-sys",
]
[[package]]
@ -95,7 +95,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
dependencies = [
"anstyle",
"windows-sys 0.48.0",
"windows-sys",
]
[[package]]
@ -276,9 +276,9 @@ dependencies = [
[[package]]
name = "cairo-rs"
version = "0.17.0"
version = "0.17.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8af54f5d48af1226928adc1f57edd22f5df1349e7da1fc96ae15cf43db0e871"
checksum = "ab3603c4028a5e368d09b51c8b624b9a46edcd7c3778284077a6125af73c9f0a"
dependencies = [
"bitflags 1.3.2",
"cairo-sys-rs",
@ -290,9 +290,9 @@ dependencies = [
[[package]]
name = "cairo-sys-rs"
version = "0.17.0"
version = "0.17.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f55382a01d30e5e53f185eee269124f5e21ab526595b872751278dfbb463594e"
checksum = "691d0c66b1fb4881be80a760cb8fe76ea97218312f9dfe2c9cc0f496ca279cb1"
dependencies = [
"glib-sys",
"libc",
@ -368,9 +368,9 @@ dependencies = [
[[package]]
name = "clap"
version = "4.3.1"
version = "4.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4ed2379f8603fa2b7509891660e802b88c70a79a6427a70abb5968054de2c28"
checksum = "401a4694d2bf92537b6867d94de48c4842089645fdcdf6c71865b175d836e9c2"
dependencies = [
"clap_builder",
"clap_derive",
@ -392,9 +392,9 @@ dependencies = [
[[package]]
name = "clap_derive"
version = "4.3.1"
version = "4.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59e9ef9a08ee1c0e1f2e162121665ac45ac3783b0f897db7244ae75ad9a8f65b"
checksum = "b8cd2b2a819ad6eec39e8f1d6b53001af1e5469f8c177579cdaeb313115b825f"
dependencies = [
"heck",
"proc-macro2",
@ -718,7 +718,7 @@ checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
dependencies = [
"errno-dragonfly",
"libc",
"windows-sys 0.48.0",
"windows-sys",
]
[[package]]
@ -733,15 +733,15 @@ dependencies = [
[[package]]
name = "exr"
version = "1.6.3"
version = "1.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bdd2162b720141a91a054640662d3edce3d50a944a50ffca5313cd951abb35b4"
checksum = "279d3efcc55e19917fff7ab3ddd6c14afb6a90881a0078465196fe2f99d08c56"
dependencies = [
"bit_field",
"flume",
"half",
"lebe",
"miniz_oxide 0.6.2",
"miniz_oxide",
"rayon-core",
"smallvec",
"zune-inflate",
@ -825,7 +825,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
dependencies = [
"crc32fast",
"miniz_oxide 0.7.1",
"miniz_oxide",
]
[[package]]
@ -893,9 +893,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "form_urlencoded"
version = "1.1.0"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
dependencies = [
"percent-encoding",
]
@ -1003,9 +1003,9 @@ dependencies = [
[[package]]
name = "gdk-pixbuf"
version = "0.17.0"
version = "0.17.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b023fbe0c6b407bd3d9805d107d9800da3829dc5a676653210f1d5f16d7f59bf"
checksum = "695d6bc846438c5708b07007537b9274d883373dd30858ca881d7d71b5540717"
dependencies = [
"bitflags 1.3.2",
"gdk-pixbuf-sys",
@ -1017,9 +1017,9 @@ dependencies = [
[[package]]
name = "gdk-pixbuf-sys"
version = "0.17.0"
version = "0.17.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b41bd2b44ed49d99277d3925652a163038bd5ed943ec9809338ffb2f4391e3b"
checksum = "9285ec3c113c66d7d0ab5676599176f1f42f4944ca1b581852215bf5694870cb"
dependencies = [
"gio-sys",
"glib-sys",
@ -1086,9 +1086,9 @@ dependencies = [
[[package]]
name = "getrandom"
version = "0.2.9"
version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
dependencies = [
"cfg-if",
"js-sys",
@ -1109,9 +1109,9 @@ dependencies = [
[[package]]
name = "gio"
version = "0.17.9"
version = "0.17.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d14522e56c6bcb6f7a3aebc25cbcfb06776af4c0c25232b601b4383252d7cb92"
checksum = "a6973e92937cf98689b6a054a9e56c657ed4ff76de925e36fc331a15f0c5d30a"
dependencies = [
"bitflags 1.3.2",
"futures-channel",
@ -1129,9 +1129,9 @@ dependencies = [
[[package]]
name = "gio-sys"
version = "0.17.4"
version = "0.17.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b1d43b0d7968b48455244ecafe41192871257f5740aa6b095eb19db78e362a5"
checksum = "0ccf87c30a12c469b6d958950f6a9c09f2be20b7773f7e70d20b867fdf2628c3"
dependencies = [
"glib-sys",
"gobject-sys",
@ -1142,9 +1142,9 @@ dependencies = [
[[package]]
name = "glib"
version = "0.17.9"
version = "0.17.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7f1de7cbde31ea4f0a919453a2dcece5d54d5b70e08f8ad254dc4840f5f09b6"
checksum = "d3fad45ba8d4d2cea612b432717e834f48031cd8853c8aaf43b2c79fec8d144b"
dependencies = [
"bitflags 1.3.2",
"futures-channel",
@ -1165,9 +1165,9 @@ dependencies = [
[[package]]
name = "glib-macros"
version = "0.17.9"
version = "0.17.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a7206c5c03851ef126ea1444990e81fdd6765fb799d5bc694e4897ca01bb97f"
checksum = "eca5c79337338391f1ab8058d6698125034ce8ef31b72a442437fa6c8580de26"
dependencies = [
"anyhow",
"heck",
@ -1180,9 +1180,9 @@ dependencies = [
[[package]]
name = "glib-sys"
version = "0.17.4"
version = "0.17.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49f00ad0a1bf548e61adfff15d83430941d9e1bb620e334f779edd1c745680a5"
checksum = "d80aa6ea7bba0baac79222204aa786a6293078c210abe69ef1336911d4bdc4f0"
dependencies = [
"libc",
"system-deps",
@ -1205,9 +1205,9 @@ dependencies = [
[[package]]
name = "gobject-sys"
version = "0.17.4"
version = "0.17.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15e75b0000a64632b2d8ca3cf856af9308e3a970844f6e9659bd197f026793d0"
checksum = "cd34c3317740a6358ec04572c1bcfd3ac0b5b6529275fae255b237b314bb8062"
dependencies = [
"glib-sys",
"libc",
@ -1216,9 +1216,9 @@ dependencies = [
[[package]]
name = "graphene-rs"
version = "0.17.1"
version = "0.17.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21cf11565bb0e4dfc2f99d4775b6c329f0d40a2cff9c0066214d31a0e1b46256"
checksum = "def4bb01265b59ed548b05455040d272d989b3012c42d4c1bbd39083cb9b40d9"
dependencies = [
"glib",
"graphene-sys",
@ -1227,9 +1227,9 @@ dependencies = [
[[package]]
name = "graphene-sys"
version = "0.17.0"
version = "0.17.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf80a4849a8d9565410a8fec6fc3678e9c617f4ac7be182ca55ab75016e07af9"
checksum = "1856fc817e6a6675e36cea0bd9a3afe296f5d9709d1e2d3182803ac77f0ab21d"
dependencies = [
"glib-sys",
"libc",
@ -1457,9 +1457,9 @@ dependencies = [
[[package]]
name = "iana-time-zone"
version = "0.1.56"
version = "0.1.57"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
dependencies = [
"android_system_properties",
"core-foundation-sys",
@ -1480,9 +1480,9 @@ dependencies = [
[[package]]
name = "idna"
version = "0.3.0"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
dependencies = [
"unicode-bidi",
"unicode-normalization",
@ -1614,7 +1614,7 @@ checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
dependencies = [
"hermit-abi 0.3.1",
"libc",
"windows-sys 0.48.0",
"windows-sys",
]
[[package]]
@ -1635,7 +1635,7 @@ dependencies = [
"hermit-abi 0.3.1",
"io-lifetimes",
"rustix",
"windows-sys 0.48.0",
"windows-sys",
]
[[package]]
@ -1704,9 +1704,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
[[package]]
name = "libc"
version = "0.2.144"
version = "0.2.146"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
[[package]]
name = "libheif-rs"
@ -1721,11 +1721,12 @@ dependencies = [
[[package]]
name = "libheif-sys"
version = "1.14.2"
version = "1.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6af8b7a4151ae10f6d2e8684f7172c43f09c0258c84190fd9704422588ceec63"
checksum = "d309f5eecf6f9d0ba8a36c3a911f46e96bd13a84164ee4620d2c6e80eea66fdd"
dependencies = [
"libc",
"pkg-config",
]
[[package]]
@ -1761,9 +1762,9 @@ dependencies = [
[[package]]
name = "lock_api"
version = "0.4.9"
version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
dependencies = [
"autocfg",
"scopeguard",
@ -1881,15 +1882,6 @@ dependencies = [
"unicase",
]
[[package]]
name = "miniz_oxide"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
dependencies = [
"adler",
]
[[package]]
name = "miniz_oxide"
version = "0.7.1"
@ -2026,9 +2018,9 @@ dependencies = [
[[package]]
name = "once_cell"
version = "1.17.2"
version = "1.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9670a07f94779e00908f3e686eab508878ebb390ba6e604d3a284c00e8d0487b"
checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
[[package]]
name = "open"
@ -2048,9 +2040,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
[[package]]
name = "pango"
version = "0.17.4"
version = "0.17.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52c280b82a881e4208afb3359a8e7fde27a1b272280981f1f34610bed5770d37"
checksum = "35be456fc620e61f62dff7ff70fbd54dcbaf0a4b920c0f16de1107c47d921d48"
dependencies = [
"bitflags 1.3.2",
"gio",
@ -2062,9 +2054,9 @@ dependencies = [
[[package]]
name = "pango-sys"
version = "0.17.0"
version = "0.17.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4293d0f0b5525eb5c24734d30b0ed02cd02aa734f216883f376b54de49625de8"
checksum = "3da69f9f3850b0d8990d462f8c709561975e95f689c1cdf0fecdebde78b35195"
dependencies = [
"glib-sys",
"gobject-sys",
@ -2084,15 +2076,15 @@ dependencies = [
[[package]]
name = "parking_lot_core"
version = "0.9.7"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
dependencies = [
"cfg-if",
"libc",
"redox_syscall 0.2.16",
"redox_syscall 0.3.5",
"smallvec",
"windows-sys 0.45.0",
"windows-targets 0.48.0",
]
[[package]]
@ -2170,9 +2162,9 @@ dependencies = [
[[package]]
name = "percent-encoding"
version = "2.2.0"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
[[package]]
name = "pin-project"
@ -2222,7 +2214,7 @@ dependencies = [
"crc32fast",
"fdeflate",
"flate2",
"miniz_oxide 0.7.1",
"miniz_oxide",
]
[[package]]
@ -2276,9 +2268,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.59"
version = "1.0.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b"
checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406"
dependencies = [
"unicode-ident",
]
@ -2408,9 +2400,9 @@ dependencies = [
[[package]]
name = "regex"
version = "1.8.3"
version = "1.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81ca098a9821bd52d6b24fd8b10bd081f47d39c22778cafaa75a2857a62c6390"
checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f"
dependencies = [
"aho-corasick",
"memchr",
@ -2557,7 +2549,7 @@ dependencies = [
"io-lifetimes",
"libc",
"linux-raw-sys",
"windows-sys 0.48.0",
"windows-sys",
]
[[package]]
@ -2617,18 +2609,18 @@ checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
[[package]]
name = "serde"
version = "1.0.163"
version = "1.0.164"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.163"
version = "1.0.164"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
dependencies = [
"proc-macro2",
"quote",
@ -3013,15 +3005,16 @@ checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5"
[[package]]
name = "tempfile"
version = "3.5.0"
version = "3.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6"
dependencies = [
"autocfg",
"cfg-if",
"fastrand",
"redox_syscall 0.3.5",
"rustix",
"windows-sys 0.45.0",
"windows-sys",
]
[[package]]
@ -3078,9 +3071,9 @@ dependencies = [
[[package]]
name = "time"
version = "0.3.21"
version = "0.3.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc"
checksum = "ea9e1b3cf1243ae005d9e74085d4d542f3125458f3a81af210d901dcd7411efd"
dependencies = [
"serde",
"time-core",
@ -3319,9 +3312,9 @@ dependencies = [
[[package]]
name = "url"
version = "2.3.1"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
dependencies = [
"form_urlencoded",
"idna",
@ -3506,15 +3499,6 @@ dependencies = [
"windows-targets 0.48.0",
]
[[package]]
name = "windows-sys"
version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
dependencies = [
"windows-targets 0.42.2",
]
[[package]]
name = "windows-sys"
version = "0.48.0"
@ -3678,7 +3662,7 @@ dependencies = [
"hmac",
"pbkdf2",
"sha1",
"time 0.3.21",
"time 0.3.22",
]
[[package]]

View file

@ -45,7 +45,7 @@ blake3 = "1.3"
crc32fast = "1.3"
xxhash-rust = { version = "0.8", features = ["xxh3"] }
tempfile = "3.5"
tempfile = "3.6"
# Video Duplicates
vid_dup_finder_lib = "0.1"
@ -60,7 +60,7 @@ serde_json = "1.0"
i18n-embed = { version = "0.13", features = ["fluent-system", "desktop-requester"] }
i18n-embed-fl = "0.6"
rust-embed = "6.6"
once_cell = "1.17"
once_cell = "1.18"
# Raw image files
rawloader = "0.37"

View file

@ -564,11 +564,10 @@ impl SimilarImages {
}
// Split hashes at 2 parts, base hashes and hashes to compare, 3 argument is set of hashes with multiple images
fn split_hashes(&mut self, all_hashed_images: &HashMap<ImHash, Vec<FileEntry>>) -> (Vec<ImHash>, Vec<ImHash>, HashSet<ImHash>) {
fn split_hashes(&mut self, all_hashed_images: &HashMap<ImHash, Vec<FileEntry>>) -> (Vec<ImHash>, HashSet<ImHash>) {
// Fast way to check if hash have multiple images - todo is this really needed?
let mut hashes_with_multiple_images: HashSet<ImHash> = Default::default();
let mut base_hashes = Vec::new(); // Initial hashes
let mut hashes_to_compare = Vec::new();
if self.use_reference_folders {
let mut files_from_referenced_folders: HashMap<ImHash, Vec<FileEntry>> = HashMap::new();
let mut normal_files: HashMap<ImHash, Vec<FileEntry>> = HashMap::new();
@ -587,7 +586,6 @@ impl SimilarImages {
if vec_files.len() >= 2 {
hashes_with_multiple_images.insert(hash.clone());
}
hashes_to_compare.push(hash.clone());
self.bktree.add(hash);
}
@ -598,13 +596,12 @@ impl SimilarImages {
base_hashes.push(hash.clone());
}
} else {
for (original_hash, _) in all_hashed_images {
for original_hash in all_hashed_images.keys() {
self.bktree.add(original_hash.clone());
}
base_hashes = all_hashed_images.clone().into_keys().collect::<Vec<_>>();
hashes_to_compare = base_hashes.clone();
base_hashes = all_hashed_images.keys().cloned().collect::<Vec<_>>();
}
(base_hashes, hashes_to_compare, hashes_with_multiple_images)
(base_hashes, hashes_with_multiple_images)
}
fn collect_hash_compare_result(
@ -679,7 +676,7 @@ impl SimilarImages {
// Don't use hashes with multiple images in bktree, because they will always be master of group and cannot be find by other hashes
let (base_hashes, _hashes_to_compare, hashes_with_multiple_images) = self.split_hashes(all_hashed_images);
let (base_hashes, hashes_with_multiple_images) = self.split_hashes(all_hashed_images);
let mut hashes_parents: HashMap<ImHash, u32> = Default::default(); // Hashes used as parent (hash, children_number_of_hash)
let mut hashes_similarity: HashMap<ImHash, (ImHash, u32)> = Default::default(); // Hashes used as child, (parent_hash, similarity)
@ -699,7 +696,19 @@ impl SimilarImages {
let mut found_items = self
.bktree
.find(hash_to_check, tolerance)
.filter(|(similarity, _hash)| *similarity != 0)
.filter(|(similarity, compared_hash)| {
*similarity != 0 && !hashes_parents.contains_key(*compared_hash) && !hashes_with_multiple_images.contains(*compared_hash)
})
.filter(|(similarity, compared_hash)| {
if let Some((_, other_similarity_with_parent)) = hashes_similarity.get(*compared_hash) {
// If current hash is more similar to other hash than to current parent hash, then skip check earlier
// Because there is no way to be more similar to other hash than to current parent hash
if *similarity >= *other_similarity_with_parent {
return false;
}
}
true
})
.collect::<Vec<_>>();
found_items.sort_unstable_by_key(|f| f.0);
@ -714,7 +723,7 @@ impl SimilarImages {
return false;
}
self.connect_results(partial_results, &hashes_with_multiple_images, &mut hashes_parents, &mut hashes_similarity);
self.connect_results(partial_results, &mut hashes_parents, &mut hashes_similarity);
}
send_info_and_wait_for_ending_all_threads(&progress_thread_run, progress_thread_handle);
@ -728,7 +737,6 @@ impl SimilarImages {
fn connect_results(
&self,
partial_results: Vec<(&ImHash, Vec<(u32, &ImHash)>)>,
hashes_with_multiple_images: &HashSet<ImHash>,
hashes_parents: &mut HashMap<ImHash, u32>,
hashes_similarity: &mut HashMap<ImHash, (ImHash, u32)>,
) {
@ -736,8 +744,8 @@ impl SimilarImages {
let mut number_of_added_child_items = 0;
for (similarity, compared_hash) in vec_compared_hashes {
// If hash is already in results skip it
// Hashes with multiple images always are used as parent
if hashes_parents.contains_key(compared_hash) || hashes_with_multiple_images.contains(compared_hash) {
// This check duplicates check from bktree.find, but it is needed to because when iterating over elements, this structure can change
if hashes_parents.contains_key(compared_hash) {
continue;
}
@ -1125,7 +1133,7 @@ pub fn get_string_from_similarity(similarity: &u32, hash_size: u8) -> String {
16 => 1,
32 => 2,
64 => 3,
_ => panic!(),
_ => panic!("Invalid hash size {hash_size}"),
};
if *similarity == 0 {

View file

@ -11,7 +11,7 @@ repository = "https://github.com/qarmin/czkawka"
[dependencies]
gdk4 = "0.6.3"
glib = "0.17.9"
glib = "0.17.10"
humansize = "2.1"
chrono = "0.4.26"
@ -47,7 +47,7 @@ fs_extra = "1.3"
i18n-embed = { version = "0.13", features = ["fluent-system", "desktop-requester"] }
i18n-embed-fl = "0.6"
rust-embed = "6.6"
once_cell = "1.17"
once_cell = "1.18"
[target.'cfg(windows)'.dependencies]
winapi = { version = "0.3.9", features = ["combaseapi", "objbase", "shobjidl_core", "windef", "winerror", "wtypesbase", "winuser"] }

View file

@ -775,7 +775,18 @@ fn computer_similar_images(
// Header
let (directory, file) = split_path(&base_file_entry.path);
similar_images_add_to_list_store(&list_store, &file, &directory, 0, 0, "", 0, 0, true, true);
similar_images_add_to_list_store(
&list_store,
&file,
&directory,
base_file_entry.size,
base_file_entry.modified_date,
&base_file_entry.dimensions,
0,
hash_size,
true,
true,
);
for file_entry in &vec_file_entry {
let (directory, file) = split_path(&file_entry.path);
similar_images_add_to_list_store(
@ -1396,15 +1407,20 @@ fn similar_images_add_to_list_store(
let string_date;
let similarity_string;
let color = if is_header { HEADER_ROW_COLOR } else { MAIN_ROW_COLOR };
if is_header {
similarity_string = String::new();
} else {
similarity_string = similar_images::get_string_from_similarity(&similarity, hash_size);
};
if is_header && !is_reference_folder {
size_str = String::new();
string_date = String::new();
similarity_string = String::new();
} else {
size_str = format_size(size, BINARY);
string_date = NaiveDateTime::from_timestamp_opt(modified_date as i64, 0).unwrap().to_string();
similarity_string = similar_images::get_string_from_similarity(&similarity, hash_size);
};
}
let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [
(ColumnsSimilarImages::ActivatableSelectButton as u32, &(!is_header)),