diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a7aaddad..36c37b477 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,17 @@ ### Fixes +## [1.112.2] - 2023-03-30 + +### Changes +- Update iroh, remove `default-net` from `[patch.crates-io]` section. +- transfer backup: Connect to mutliple provider addresses concurrently. This should speed up connection time significantly on the getter side. #4240 +- Make sure BackupProvider is cancelled on drop (or dc_backup_provider_unref). The BackupProvider will now alaway finish with an IMEX event of 1000 or 0, previoulsy it would sometimes finishe with 1000 (success) when it really was 0 (failure). #4242 + +### Fixes +- Do not return media from trashed messages in the "All media" view. #4247 + + ## [1.112.1] - 2023-03-27 ### Changes @@ -2338,7 +2349,8 @@ For a full list of changes, please see our closed Pull Requests: https://github.com/deltachat/deltachat-core-rust/pulls?q=is%3Apr+is%3Aclosed -[unreleased]: https://github.com/deltachat/deltachat-core-rust/compare/v1.112.1...HEAD +[unreleased]: https://github.com/deltachat/deltachat-core-rust/compare/v1.112.2...HEAD [1.111.0]: https://github.com/deltachat/deltachat-core-rust/compare/v1.110.0...v1.111.0 [1.112.0]: https://github.com/deltachat/deltachat-core-rust/compare/v1.111.0...v1.112.0 [1.112.1]: https://github.com/deltachat/deltachat-core-rust/compare/v1.112.0...v1.112.1 +[1.112.2]: https://github.com/deltachat/deltachat-core-rust/compare/v1.112.1...v1.112.2 diff --git a/Cargo.lock b/Cargo.lock index 93e43686d..dc0245a36 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -146,9 +146,9 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", "synstructure", ] @@ -158,9 +158,9 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -265,9 +265,9 @@ version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -368,12 +368,6 @@ dependencies = [ "rustc-demangle", ] -[[package]] -name = "base-x" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" - [[package]] name = "base16ct" version = "0.1.1" @@ -662,39 +656,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" dependencies = [ "bitflags", - "clap_lex 0.2.4", + "clap_lex", "indexmap", "textwrap", ] -[[package]] -name = "clap" -version = "4.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" -dependencies = [ - "bitflags", - "clap_derive", - "clap_lex 0.3.2", - "is-terminal", - "once_cell", - "strsim", - "termcolor", -] - -[[package]] -name = "clap_derive" -version = "4.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" -dependencies = [ - "heck", - "proc-macro-error", - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", -] - [[package]] name = "clap_lex" version = "0.2.4" @@ -704,15 +670,6 @@ dependencies = [ "os_str_bytes", ] -[[package]] -name = "clap_lex" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" -dependencies = [ - "os_str_bytes", -] - [[package]] name = "clipboard-win" version = "4.5.0" @@ -755,19 +712,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "console" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" -dependencies = [ - "encode_unicode", - "lazy_static", - "libc", - "unicode-width", - "windows-sys 0.42.0", -] - [[package]] name = "const-oid" version = "0.9.2" @@ -789,9 +733,9 @@ version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d897f47bf7270cf70d370f8f98c1abb6d2d4cf60a6845d30e05bfb90c6568650" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "unicode-xid 0.2.4", + "proc-macro2", + "quote", + "unicode-xid", ] [[package]] @@ -862,7 +806,7 @@ dependencies = [ "atty", "cast", "ciborium", - "clap 3.2.23", + "clap", "criterion-plot", "futures", "itertools", @@ -999,10 +943,10 @@ dependencies = [ "cc", "codespan-reporting", "once_cell", - "proc-macro2 1.0.51", - "quote 1.0.23", + "proc-macro2", + "quote", "scratch", - "syn 1.0.109", + "syn", ] [[package]] @@ -1017,9 +961,9 @@ version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1050,10 +994,10 @@ checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.51", - "quote 1.0.23", + "proc-macro2", + "quote", "strsim", - "syn 1.0.109", + "syn", ] [[package]] @@ -1064,10 +1008,10 @@ checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.51", - "quote 1.0.23", + "proc-macro2", + "quote", "strsim", - "syn 1.0.109", + "syn", ] [[package]] @@ -1077,8 +1021,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ "darling_core 0.13.4", - "quote 1.0.23", - "syn 1.0.109", + "quote", + "syn", ] [[package]] @@ -1088,8 +1032,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" dependencies = [ "darling_core 0.14.3", - "quote 1.0.23", - "syn 1.0.109", + "quote", + "syn", ] [[package]] @@ -1098,32 +1042,13 @@ version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" -[[package]] -name = "data-encoding-macro" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86927b7cd2fe88fa698b87404b287ab98d1a0063a34071d92e575b72d3029aca" -dependencies = [ - "data-encoding", - "data-encoding-macro-internal", -] - -[[package]] -name = "data-encoding-macro-internal" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" -dependencies = [ - "data-encoding", - "syn 1.0.109", -] - [[package]] name = "default-net" -version = "0.13.1" -source = "git+https://github.com/dignifiedquire/default-net.git?rev=7a257095bac009c4be0b93c2979801624fdd337b#7a257095bac009c4be0b93c2979801624fdd337b" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4898b43aed56499fad6b294d15b3e76a51df68079bf492e5daae38ca084e003" dependencies = [ - "dlopen", + "dlopen2", "libc", "memalloc", "netlink-packet-core", @@ -1136,7 +1061,7 @@ dependencies = [ [[package]] name = "deltachat" -version = "1.112.1" +version = "1.112.2" dependencies = [ "ansi_term", "anyhow", @@ -1201,6 +1126,7 @@ dependencies = [ "tokio-io-timeout", "tokio-stream", "tokio-tar", + "tokio-util", "toml", "trust-dns-resolver", "url", @@ -1209,7 +1135,7 @@ dependencies = [ [[package]] name = "deltachat-jsonrpc" -version = "1.112.1" +version = "1.112.2" dependencies = [ "anyhow", "async-channel", @@ -1232,7 +1158,7 @@ dependencies = [ [[package]] name = "deltachat-repl" -version = "1.112.1" +version = "1.112.2" dependencies = [ "ansi_term", "anyhow", @@ -1247,7 +1173,7 @@ dependencies = [ [[package]] name = "deltachat-rpc-server" -version = "1.112.1" +version = "1.112.2" dependencies = [ "anyhow", "deltachat", @@ -1265,13 +1191,13 @@ dependencies = [ name = "deltachat_derive" version = "2.0.0" dependencies = [ - "quote 1.0.23", - "syn 1.0.109", + "quote", + "syn", ] [[package]] name = "deltachat_ffi" -version = "1.112.1" +version = "1.112.2" dependencies = [ "anyhow", "deltachat", @@ -1319,9 +1245,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ef71ddb5b3a1f53dee24817c8f70dfa1cb29e804c18d88c228d4bc9c86ee3b9" dependencies = [ "proc-macro-error", - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1340,9 +1266,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" dependencies = [ "darling 0.14.3", - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1352,7 +1278,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" dependencies = [ "derive_builder_core", - "syn 1.0.109", + "syn", ] [[package]] @@ -1362,10 +1288,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "convert_case 0.4.0", - "proc-macro2 1.0.51", - "quote 1.0.23", + "proc-macro2", + "quote", "rustc_version", - "syn 1.0.109", + "syn", ] [[package]] @@ -1445,32 +1371,32 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "dlopen" -version = "0.1.8" +name = "dlopen2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e80ad39f814a9abe68583cd50a2d45c8a67561c3361ab8da240587dda80937" +checksum = "b121caccfc363e4d9a4589528f3bef7c71b83c6ed01c8dc68cbeeb7fd29ec698" dependencies = [ - "dlopen_derive", - "lazy_static", + "dlopen2_derive", "libc", + "once_cell", "winapi", ] [[package]] -name = "dlopen_derive" -version = "0.1.4" +name = "dlopen2_derive" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f236d9e1b1fbd81cea0f9cbdc8dcc7e8ebcd80e6659cd7cb2ad5f6c05946c581" +checksum = "3a09ac8bb8c16a282264c379dffba707b9c998afc7506009137f3c6136888078" dependencies = [ - "libc", - "quote 0.6.13", - "syn 0.15.44", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1517,9 +1443,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0188e3c3ba8df5753894d54461f0e39bc91741dc5b22e1c46999ec2c71f4e4" dependencies = [ "enum-ordinalize", - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1562,12 +1488,6 @@ dependencies = [ "version_check 0.9.4", ] -[[package]] -name = "encode_unicode" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" - [[package]] name = "encoded-words" version = "0.2.0" @@ -1674,9 +1594,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" dependencies = [ "heck", - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1687,10 +1607,10 @@ checksum = "a62bb1df8b45ecb7ffa78dca1c17a438fb193eb083db0b1b494d2a61bcb5096a" dependencies = [ "num-bigint", "num-traits", - "proc-macro2 1.0.51", - "quote 1.0.23", + "proc-macro2", + "quote", "rustc_version", - "syn 1.0.109", + "syn", ] [[package]] @@ -1967,9 +1887,9 @@ version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -2357,19 +2277,6 @@ dependencies = [ "hashbrown", ] -[[package]] -name = "indicatif" -version = "0.17.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cef509aa9bc73864d6756f0d34d35504af3cf0844373afe9b8669a5b8005a729" -dependencies = [ - "console", - "number_prefix", - "portable-atomic 0.3.19", - "tokio", - "unicode-width", -] - [[package]] name = "inout" version = "0.1.3" @@ -2418,17 +2325,15 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "iroh" -version = "0.3.0" -source = "git+https://github.com/n0-computer/iroh?branch=main#9ac4cf6e770879c8b2ec0dc6666fe531469e68e3" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c019223f5af15f978ff44ae02b8b83d21d53df4c42d4475aa80670819c3ecdce" dependencies = [ "abao", "anyhow", "base64 0.21.0", "blake3", "bytes", - "clap 4.1.8", - "console", - "data-encoding", "default-net", "der", "derive_more", @@ -2436,10 +2341,8 @@ dependencies = [ "ed25519-dalek", "futures", "hex", - "indicatif", - "multibase", "num_cpus", - "portable-atomic 1.0.1", + "portable-atomic", "postcard", "quic-rpc", "quinn", @@ -2453,6 +2356,7 @@ dependencies = [ "tempfile", "thiserror", "tokio", + "tokio-stream", "tokio-util", "tracing", "tracing-futures", @@ -2730,17 +2634,6 @@ dependencies = [ "windows-sys 0.45.0", ] -[[package]] -name = "multibase" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" -dependencies = [ - "base-x", - "data-encoding", - "data-encoding-macro", -] - [[package]] name = "mutate_once" version = "0.1.1" @@ -2918,9 +2811,9 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -2975,12 +2868,6 @@ dependencies = [ "libc", ] -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - [[package]] name = "object" version = "0.30.3" @@ -3038,9 +2925,9 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -3107,9 +2994,9 @@ checksum = "5f7d21ccd03305a674437ee1248f3ab5d4b1db095cf1caf49f1713ddf61956b7" dependencies = [ "Inflector", "proc-macro-error", - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -3259,9 +3146,9 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -3344,12 +3231,6 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "portable-atomic" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26f6a7b87c2e435a3241addceeeff740ff8b7e76b74c13bf9acb17fa454ea00b" - [[package]] name = "portable-atomic" version = "1.0.1" @@ -3374,9 +3255,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc4b01218787dd4420daf63875163a787a78294ad48a24e9f6fa8c6507759a79" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -3402,9 +3283,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", "version_check 0.9.4", ] @@ -3414,20 +3295,11 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", + "proc-macro2", + "quote", "version_check 0.9.4", ] -[[package]] -name = "proc-macro2" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -dependencies = [ - "unicode-xid 0.1.0", -] - [[package]] name = "proc-macro2" version = "1.0.51" @@ -3548,22 +3420,13 @@ dependencies = [ "windows-sys 0.45.0", ] -[[package]] -name = "quote" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -dependencies = [ - "proc-macro2 0.4.30", -] - [[package]] name = "quote" version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" dependencies = [ - "proc-macro2 1.0.51", + "proc-macro2", ] [[package]] @@ -4115,9 +3978,9 @@ version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -4379,10 +4242,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck", - "proc-macro2 1.0.51", - "quote 1.0.23", + "proc-macro2", + "quote", "rustversion", - "syn 1.0.109", + "syn", ] [[package]] @@ -4391,25 +4254,14 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" -[[package]] -name = "syn" -version = "0.15.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" -dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "unicode-xid 0.1.0", -] - [[package]] name = "syn" version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", + "proc-macro2", + "quote", "unicode-ident", ] @@ -4425,10 +4277,10 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", - "unicode-xid 0.2.4", + "proc-macro2", + "quote", + "syn", + "unicode-xid", ] [[package]] @@ -4534,9 +4386,9 @@ version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -4648,9 +4500,9 @@ version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -4811,9 +4663,9 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -4969,9 +4821,9 @@ dependencies = [ "darling 0.13.4", "ident_case", "proc-macro-error", - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -5023,12 +4875,6 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" - [[package]] name = "unicode-xid" version = "0.2.4" @@ -5162,9 +5008,9 @@ dependencies = [ "bumpalo", "log", "once_cell", - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", "wasm-bindgen-shared", ] @@ -5186,7 +5032,7 @@ version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" dependencies = [ - "quote 1.0.23", + "quote", "wasm-bindgen-macro-support", ] @@ -5196,9 +5042,9 @@ version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5501,9 +5347,9 @@ checksum = "6bd53ff9053698697b92c2535bf7ecb983fd5d546d690b7c725e5070d6d9a620" dependencies = [ "convert_case 0.5.0", "darling 0.14.3", - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -5521,8 +5367,8 @@ version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ - "proc-macro2 1.0.51", - "quote 1.0.23", - "syn 1.0.109", + "proc-macro2", + "quote", + "syn", "synstructure", ] diff --git a/Cargo.toml b/Cargo.toml index d2ce395a9..98dd392c7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "deltachat" -version = "1.112.1" +version = "1.112.2" edition = "2021" license = "MPL-2.0" rust-version = "1.64" @@ -25,7 +25,6 @@ panic = 'abort' opt-level = "z" [patch.crates-io] -default-net = { git = "https://github.com/dignifiedquire/default-net.git", rev="7a257095bac009c4be0b93c2979801624fdd337b" } quinn-udp = { git = "https://github.com/quinn-rs/quinn", branch="main" } quinn-proto = { git = "https://github.com/quinn-rs/quinn", branch="main" } @@ -53,8 +52,7 @@ futures-lite = "1.12.0" hex = "0.4.0" humansize = "2" image = { version = "0.24.5", default-features=false, features = ["gif", "jpeg", "ico", "png", "pnm", "webp", "bmp"] } -# iroh = { version = "0.3.0", default-features = false } -iroh = { git = 'https://github.com/n0-computer/iroh', branch = "main" } +iroh = { version = "0.4.0", default-features = false } kamadak-exif = "0.5" lettre_email = { git = "https://github.com/deltachat/lettre", branch = "master" } libc = "0.2" @@ -85,10 +83,11 @@ strum_macros = "0.24" tagger = "4.3.4" textwrap = "0.16.0" thiserror = "1" +tokio = { version = "1", features = ["fs", "rt-multi-thread", "macros"] } tokio-io-timeout = "1.2.0" tokio-stream = { version = "0.1.11", features = ["fs"] } tokio-tar = { version = "0.3" } # TODO: integrate tokio into async-tar -tokio = { version = "1", features = ["fs", "rt-multi-thread", "macros"] } +tokio-util = "0.7.7" toml = "0.7" trust-dns-resolver = "0.22" url = "2" diff --git a/deltachat-ffi/Cargo.toml b/deltachat-ffi/Cargo.toml index 24c402c28..7f379a1e4 100644 --- a/deltachat-ffi/Cargo.toml +++ b/deltachat-ffi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "deltachat_ffi" -version = "1.112.1" +version = "1.112.2" description = "Deltachat FFI" edition = "2018" readme = "README.md" diff --git a/deltachat-ffi/deltachat.h b/deltachat-ffi/deltachat.h index 8cb694c4f..3203d865d 100644 --- a/deltachat-ffi/deltachat.h +++ b/deltachat-ffi/deltachat.h @@ -2775,6 +2775,12 @@ void dc_backup_provider_wait (dc_backup_provider_t* backup_provider); /** * Frees a dc_backup_provider_t object. * + * If the provider has not yet finished, as indicated by + * dc_backup_provider_wait() or the #DC_EVENT_IMEX_PROGRESS event with value + * of 0 (failed) or 1000 (succeeded), this will also abort any in-progress + * transfer. If this aborts the provider a #DC_EVENT_IMEX_PROGRESS event with + * value 0 (failed) will be emitted. + * * @memberof dc_backup_provider_t * @param backup_provider The backup provider object as created by * dc_backup_provider_new(). diff --git a/deltachat-jsonrpc/Cargo.toml b/deltachat-jsonrpc/Cargo.toml index 6ffd5f7a7..b086b170f 100644 --- a/deltachat-jsonrpc/Cargo.toml +++ b/deltachat-jsonrpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "deltachat-jsonrpc" -version = "1.112.1" +version = "1.112.2" description = "DeltaChat JSON-RPC API" edition = "2021" default-run = "deltachat-jsonrpc-server" diff --git a/deltachat-jsonrpc/typescript/package.json b/deltachat-jsonrpc/typescript/package.json index 94e1804a9..6cc8bd497 100644 --- a/deltachat-jsonrpc/typescript/package.json +++ b/deltachat-jsonrpc/typescript/package.json @@ -55,5 +55,5 @@ }, "type": "module", "types": "dist/deltachat.d.ts", - "version": "1.112.1" -} + "version": "1.112.2" +} \ No newline at end of file diff --git a/deltachat-repl/Cargo.toml b/deltachat-repl/Cargo.toml index 5a91bdb74..3a7bb76dc 100644 --- a/deltachat-repl/Cargo.toml +++ b/deltachat-repl/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "deltachat-repl" -version = "1.112.1" +version = "1.112.2" license = "MPL-2.0" edition = "2021" diff --git a/deltachat-rpc-server/Cargo.toml b/deltachat-rpc-server/Cargo.toml index 2f1c988ee..a81fdfcef 100644 --- a/deltachat-rpc-server/Cargo.toml +++ b/deltachat-rpc-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "deltachat-rpc-server" -version = "1.112.1" +version = "1.112.2" description = "DeltaChat JSON-RPC server" edition = "2021" readme = "README.md" diff --git a/deny.toml b/deny.toml index 803162146..d5f70ed62 100644 --- a/deny.toml +++ b/deny.toml @@ -11,9 +11,13 @@ ignore = [ # Accept some duplicate versions, ideally we work towards this list # becoming empty. Adding versions forces us to revisit this at least # when upgrading. +# Please keep this list alphabetically sorted. skip = [ { name = "base64", version = "<0.21" }, { name = "block-buffer", version = "<0.10" }, + { name = "clap", version = "3.2.23" }, + { name = "clap_lex", version = "0.2.4" }, + { name = "convert_case", version = "0.4.0" }, { name = "darling", version = "<0.14" }, { name = "darling_core", version = "<0.14" }, { name = "darling_macro", version = "<0.14" }, @@ -29,24 +33,16 @@ skip = [ { name = "rand_chacha", version = "<0.3" }, { name = "rand_core", version = "<0.6" }, { name = "sha2", version = "<0.10" }, + { name = "spin", version = "<0.9.6" }, { name = "time", version = "<0.3" }, { name = "version_check", version = "<0.9" }, { name = "wasi", version = "<0.11" }, { name = "windows-sys", version = "<0.45" }, - { name = "windows_x86_64_msvc", version = "<0.42" }, - { name = "windows_x86_64_gnu", version = "<0.42" }, - { name = "windows_i686_msvc", version = "<0.42" }, - { name = "windows_i686_gnu", version = "<0.42" }, { name = "windows_aarch64_msvc", version = "<0.42" }, - { name = "unicode-xid", version = "<0.2.4" }, - { name = "syn", version = "<1.0" }, - { name = "quote", version = "<1.0" }, - { name = "proc-macro2", version = "<1.0" }, - { name = "portable-atomic", version = "<1.0" }, - { name = "spin", version = "<0.9.6" }, - { name = "convert_case", version = "0.4.0" }, - { name = "clap_lex", version = "0.2.4" }, - { name = "clap", version = "3.2.23" }, + { name = "windows_i686_gnu", version = "<0.42" }, + { name = "windows_i686_msvc", version = "<0.42" }, + { name = "windows_x86_64_gnu", version = "<0.42" }, + { name = "windows_x86_64_msvc", version = "<0.42" }, ] @@ -78,7 +74,5 @@ license-files = [ github = [ "async-email", "deltachat", - "n0-computer", "quinn-rs", - "dignifiedquire", ] diff --git a/package.json b/package.json index 41c9e07e1..90e201afc 100644 --- a/package.json +++ b/package.json @@ -60,5 +60,5 @@ "test:mocha": "mocha -r esm node/test/test.js --growl --reporter=spec --bail --exit" }, "types": "node/dist/index.d.ts", - "version": "1.112.1" + "version": "1.112.2" } \ No newline at end of file diff --git a/src/chat.rs b/src/chat.rs index eaffb476f..b74f31c13 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -2727,12 +2727,14 @@ pub async fn get_chat_media( "SELECT id FROM msgs WHERE (1=? OR chat_id=?) + AND chat_id != ? AND (type=? OR type=? OR type=?) AND hidden=0 ORDER BY timestamp, id;", paramsv![ chat_id.is_none(), chat_id.unwrap_or_else(|| ChatId::new(0)), + DC_CHAT_ID_TRASH, msg_type, if msg_type2 != Viewtype::Unknown { msg_type2 @@ -3795,6 +3797,7 @@ mod tests { use crate::chatlist::{get_archived_cnt, Chatlist}; use crate::constants::{DC_GCL_ARCHIVED_ONLY, DC_GCL_NO_SPECIALS}; use crate::contact::{Contact, ContactAddress}; + use crate::message::delete_msgs; use crate::receive_imf::receive_imf; use crate::test_utils::TestContext; @@ -5977,7 +5980,7 @@ mod tests { include_bytes!("../test-data/image/avatar64x64.png"), ) .await?; - send_media( + let second_image_msg_id = send_media( &t, chat_id2, Viewtype::Image, @@ -6079,6 +6082,21 @@ mod tests { 4 ); + // Delete an image. + delete_msgs(&t, &[second_image_msg_id]).await?; + assert_eq!( + get_chat_media( + &t, + None, + Viewtype::Image, + Viewtype::Sticker, + Viewtype::Webxdc, + ) + .await? + .len(), + 3 + ); + Ok(()) } } diff --git a/src/imex/transfer.rs b/src/imex/transfer.rs index d93cf4f6d..df21d71d9 100644 --- a/src/imex/transfer.rs +++ b/src/imex/transfer.rs @@ -22,7 +22,6 @@ //! getter can not connect to an impersonated provider and the provider does not offer the //! download to an impersonated getter. -use std::cmp::Ordering; use std::future::Future; use std::net::Ipv4Addr; use std::ops::Deref; @@ -33,7 +32,8 @@ use std::task::Poll; use anyhow::{anyhow, bail, ensure, format_err, Context as _, Result}; use async_channel::Receiver; use futures_lite::StreamExt; -use iroh::get::{DataStream, Options}; +use iroh::blobs::Collection; +use iroh::get::DataStream; use iroh::progress::ProgressEmitter; use iroh::protocol::AuthToken; use iroh::provider::{DataSource, Event, Provider, Ticket}; @@ -44,6 +44,7 @@ use tokio::sync::broadcast::error::RecvError; use tokio::sync::{broadcast, Mutex}; use tokio::task::{JoinHandle, JoinSet}; use tokio_stream::wrappers::ReadDirStream; +use tokio_util::sync::CancellationToken; use crate::blob::BlobDirContents; use crate::chat::delete_and_reset_all_device_msgs; @@ -53,6 +54,8 @@ use crate::{e2ee, EventType}; use super::{export_database, DBFILE_BACKUP_NAME}; +const MAX_CONCURRENT_DIALS: u8 = 16; + /// Provide or send a backup of this device. /// /// This creates a backup of the current device and starts a service which offers another @@ -72,6 +75,8 @@ pub struct BackupProvider { handle: JoinHandle>, /// The ticket to retrieve the backup collection. ticket: Ticket, + /// Guard to cancel the provider on drop. + _drop_guard: tokio_util::sync::DropGuard, } impl BackupProvider { @@ -123,10 +128,12 @@ impl BackupProvider { return Err(err); } }; + let drop_token = CancellationToken::new(); let handle = { let context = context.clone(); + let drop_token = drop_token.clone(); tokio::spawn(async move { - let res = Self::watch_provider(&context, provider, cancel_token).await; + let res = Self::watch_provider(&context, provider, cancel_token, drop_token).await; context.free_ongoing().await; // Explicit drop to move the guards into this future @@ -135,7 +142,11 @@ impl BackupProvider { res }) }; - Ok(Self { handle, ticket }) + Ok(Self { + handle, + ticket, + _drop_guard: drop_token.drop_guard(), + }) } /// Creates the provider task. @@ -171,7 +182,7 @@ impl BackupProvider { .spawn()?; context.emit_event(SendProgress::ProviderListening.into()); info!(context, "Waiting for remote to connect"); - let ticket = provider.ticket(hash); + let ticket = provider.ticket(hash)?; Ok((provider, ticket)) } @@ -189,8 +200,8 @@ impl BackupProvider { context: &Context, mut provider: Provider, cancel_token: Receiver<()>, + drop_token: CancellationToken, ) -> Result<()> { - // _dbfile exists so we can clean up the file once it is no longer needed let mut events = provider.subscribe(); let mut total_size = 0; let mut current_size = 0; @@ -250,8 +261,12 @@ impl BackupProvider { }, _ = cancel_token.recv() => { provider.shutdown(); - break Err(anyhow!("BackupSender cancelled")); + break Err(anyhow!("BackupProvider cancelled")); }, + _ = drop_token.cancelled() => { + provider.shutdown(); + break Err(anyhow!("BackupProvider dropped")); + } } }; match &res { @@ -387,122 +402,71 @@ pub async fn get_backup(context: &Context, qr: Qr) -> Result<()> { } async fn get_backup_inner(context: &Context, qr: Qr) -> Result<()> { - let mut ticket = match qr { + let ticket = match qr { Qr::Backup { ticket } => ticket, _ => bail!("QR code for backup must be of type DCBACKUP"), }; - if ticket.addrs.is_empty() { - bail!("ticket is missing addresses to dial"); - } - // Crude sorting, most local wifi's are in the 192.168.0.0/24 range so this will try - // them first. - ticket.addrs.sort_by(|a, b| { - let a = a.to_string(); - let b = b.to_string(); - if a.starts_with("192.168.") && !b.starts_with("192.168.") { - Ordering::Less - } else if b.starts_with("192.168.") && !a.starts_with("192.168.") { - Ordering::Greater - } else { - Ordering::Equal + match transfer_from_provider(context, &ticket).await { + Ok(()) => { + delete_and_reset_all_device_msgs(context).await?; + context.emit_event(ReceiveProgress::Completed.into()); + Ok(()) } - }); - for addr in &ticket.addrs { - let opts = Options { - addr: *addr, - peer_id: Some(ticket.peer), - keylog: false, - }; - info!(context, "attempting to contact {}", addr); - match transfer_from_provider(context, &ticket, opts).await { - Ok(_) => { - delete_and_reset_all_device_msgs(context).await?; - context.emit_event(ReceiveProgress::Completed.into()); - return Ok(()); - } - Err(TransferError::ConnectionError(err)) => { - warn!(context, "Connection error: {err:#}."); - continue; - } - Err(TransferError::Other(err)) => { - // Clean up any blobs we already wrote. - let readdir = fs::read_dir(context.get_blobdir()).await?; - let mut readdir = ReadDirStream::new(readdir); - while let Some(dirent) = readdir.next().await { - if let Ok(dirent) = dirent { - fs::remove_file(dirent.path()).await.ok(); - } + Err(err) => { + // Clean up any blobs we already wrote. + let readdir = fs::read_dir(context.get_blobdir()).await?; + let mut readdir = ReadDirStream::new(readdir); + while let Some(dirent) = readdir.next().await { + if let Ok(dirent) = dirent { + fs::remove_file(dirent.path()).await.ok(); } - context.emit_event(ReceiveProgress::Failed.into()); - return Err(err); } + context.emit_event(ReceiveProgress::Failed.into()); + Err(err) } } - Err(anyhow!("failed to contact provider")) } -/// Error during a single transfer attempt. -/// -/// Mostly exists to distinguish between `ConnectionError` and any other errors. -#[derive(Debug, thiserror::Error)] -enum TransferError { - #[error("connection error")] - ConnectionError(#[source] anyhow::Error), - #[error("other")] - Other(#[source] anyhow::Error), -} - -async fn transfer_from_provider( - context: &Context, - ticket: &Ticket, - opts: Options, -) -> Result<(), TransferError> { +async fn transfer_from_provider(context: &Context, ticket: &Ticket) -> Result<()> { let progress = ProgressEmitter::new(0, ReceiveProgress::max_blob_progress()); spawn_progress_proxy(context.clone(), progress.subscribe()); - let mut connected = false; let on_connected = || { context.emit_event(ReceiveProgress::Connected.into()); - connected = true; + async { Ok(()) } + }; + let on_collection = |collection: &Collection| { + context.emit_event(ReceiveProgress::CollectionReceived.into()); + progress.set_total(collection.total_blobs_size()); async { Ok(()) } }; let jobs = Mutex::new(JoinSet::default()); let on_blob = |hash, reader, name| on_blob(context, &progress, &jobs, ticket, hash, reader, name); - let res = iroh::get::run( - ticket.hash, - ticket.token, - opts, + + // Perform the transfer. + let keylog = false; // Do not enable rustls SSLKEYLOGFILE env var functionality + let stats = iroh::get::run_ticket( + ticket, + keylog, + MAX_CONCURRENT_DIALS, on_connected, - |collection| { - context.emit_event(ReceiveProgress::CollectionReceived.into()); - progress.set_total(collection.total_blobs_size()); - async { Ok(()) } - }, + on_collection, on_blob, ) - .await; + .await?; let mut jobs = jobs.lock().await; while let Some(job) = jobs.join_next().await { - job.context("job failed").map_err(TransferError::Other)?; + job.context("job failed")?; } - drop(progress); - match res { - Ok(stats) => { - info!( - context, - "Backup transfer finished, transfer rate is {} Mbps.", - stats.mbits() - ); - Ok(()) - } - Err(err) => match connected { - true => Err(TransferError::Other(err)), - false => Err(TransferError::ConnectionError(err)), - }, - } + info!( + context, + "Backup transfer finished, transfer rate was {} Mbps.", + stats.mbits() + ); + Ok(()) } /// Get callback when a blob is received from the provider. @@ -544,7 +508,7 @@ async fn on_blob( if name.starts_with("db/") { let context = context.clone(); - let token = ticket.token.to_string(); + let token = ticket.token().to_string(); jobs.lock().await.spawn(async move { if let Err(err) = context.sql.import(&path, token).await { error!(context, "cannot import database: {:#?}", err); @@ -706,4 +670,16 @@ mod tests { assert_eq!(out, EventType::ImexProgress(progress)); } } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] + async fn test_drop_provider() { + let mut tcm = TestContextManager::new(); + let ctx = tcm.alice().await; + + let provider = BackupProvider::prepare(&ctx).await.unwrap(); + drop(provider); + ctx.evtracker + .get_matching(|ev| matches!(ev, EventType::ImexProgress(0))) + .await; + } }