diff --git a/Cargo.lock b/Cargo.lock index 62cae75be..5beeb2cd4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,27 +2,18 @@ # It is not intended for manual editing. [[package]] name = "addr2line" -version = "0.12.2" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "602d785912f476e480434627e8732e6766b760c045bbf897d9dfaa9f4fbd399c" +checksum = "a49806b9dadc843c61e7c97e72490ad7f7220ae249012fbda9ad0609457c0543" dependencies = [ "gimli", ] [[package]] name = "adler32" -version = "1.1.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b077b825e468cc974f0020d4082ee6e03132512f207ef1a02fd5d00d1f32d" - -[[package]] -name = "aead" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cf01b9b56e767bb57b94ebf91a58b338002963785cdd7013e21c0d4679471e4" -dependencies = [ - "generic-array 0.12.3", -] +checksum = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" [[package]] name = "aes" @@ -30,36 +21,11 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54eb1d8fe354e5fc611daf4f2ea97dd45a765f4f1e4512306ec183ae2e8f20c9" dependencies = [ - "aes-soft 0.3.3", - "aesni 0.6.0", + "aes-soft", + "aesni", "block-cipher-trait", ] -[[package]] -name = "aes" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7001367fde4c768a19d1029f0a8be5abd9308e1119846d5bd9ad26297b8faf5" -dependencies = [ - "aes-soft 0.4.0", - "aesni 0.7.0", - "block-cipher", -] - -[[package]] -name = "aes-gcm" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "834a6bda386024dbb7c8fc51322856c10ffe69559f972261c868485f5759c638" -dependencies = [ - "aead", - "aes 0.3.2", - "block-cipher-trait", - "ghash", - "subtle 2.2.3", - "zeroize", -] - [[package]] name = "aes-soft" version = "0.3.3" @@ -71,17 +37,6 @@ dependencies = [ "opaque-debug", ] -[[package]] -name = "aes-soft" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4925647ee64e5056cf231608957ce7c81e12d6d6e316b9ce1404778cc1d35fa7" -dependencies = [ - "block-cipher", - "byteorder", - "opaque-debug", -] - [[package]] name = "aesni" version = "0.6.0" @@ -92,16 +47,6 @@ dependencies = [ "opaque-debug", ] -[[package]] -name = "aesni" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050d39b0b7688b3a3254394c3e30a9d66c41dcf9b05b0e2dbdc623f6505d264" -dependencies = [ - "block-cipher", - "opaque-debug", -] - [[package]] name = "aho-corasick" version = "0.7.10" @@ -141,6 +86,15 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + [[package]] name = "arrayvec" version = "0.5.1" @@ -159,15 +113,15 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efd3d156917d94862e779f356c5acae312b08fd3121e792c857d7928c8088423" dependencies = [ - "quote", - "syn", + "quote 1.0.6", + "syn 1.0.27", ] [[package]] name = "async-h1" -version = "2.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c966ee4e290159619bdc5282ba252749386552be066dbcf5b97adf612798a9a" +checksum = "effd501febce09534b924aa471e6a7fd689071fee63659473413f62a1979ae56" dependencies = [ "async-std", "byte-pool", @@ -177,24 +131,25 @@ dependencies = [ "lazy_static", "log", "pin-project-lite", + "url", ] [[package]] name = "async-imap" -version = "0.3.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a397614997df8e3a8b81ff8d882c0fdc100568d3162fadbd1b1410f95c40277" +checksum = "8113a1ae7ed80ce764f7474f4323b66f945367c2195d046cfa5efdde30fca04c" dependencies = [ "async-native-tls", "async-std", - "base64 0.12.2", + "base64 0.11.0", "byte-pool", "chrono", "futures 0.3.5", "imap-proto", "lazy_static", "log", - "nom 5.1.2", + "nom 5.1.1", "pin-utils", "rental", "stop-token", @@ -215,19 +170,19 @@ dependencies = [ [[package]] name = "async-smtp" -version = "0.3.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9720181a7d56bf3b4d0cfdcb6353df975125996bdd2958b4e639c8317fcaa68" +checksum = "bb010dac8f81ceb798b089c522766c0427b54253789194b5c7de9720aeb7f091" dependencies = [ "async-native-tls", "async-std", "async-trait", - "base64 0.12.2", + "base64 0.11.0", "bufstream", "fast_chemail", - "hostname 0.1.5", + "hostname", "log", - "nom 5.1.2", + "nom 5.1.1", "pin-project", "pin-utils", "serde", @@ -238,9 +193,9 @@ dependencies = [ [[package]] name = "async-std" -version = "1.6.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00d68a33ebc8b57800847d00787307f84a562224a14db069b0acefe4c2abbf5d" +checksum = "a45cee2749d880d7066e328a7e161c7470ced883b2fd000ca4643e9f1dd5083a" dependencies = [ "async-attributes", "async-task", @@ -262,15 +217,24 @@ dependencies = [ ] [[package]] -name = "async-std-resolver" -version = "0.19.5" +name = "async-stream" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d113439234775ae3e43d4e7589c5cc64fa3565996ae82dfe26b4ed78c02165be" +checksum = "22068c0c19514942eefcfd4daf8976ef1aad84e61539f95cd200c35202f80af5" dependencies = [ - "async-std", - "async-trait", - "futures 0.3.5", - "trust-dns-resolver", + "async-stream-impl", + "futures-core", +] + +[[package]] +name = "async-stream-impl" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25f9db3b38af870bf7e5cc649167533b493928e50744e2c30ae350230b414670" +dependencies = [ + "proc-macro2", + "quote 1.0.6", + "syn 1.0.23", ] [[package]] @@ -281,13 +245,13 @@ checksum = "c17772156ef2829aadc587461c7753af20b7e8db1529bc66855add962a3b35d3" [[package]] name = "async-trait" -version = "0.1.36" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a265e3abeffdce30b2e26b7a11b222fe37c6067404001b434101457d0385eb92" +checksum = "26c4f3195085c36ea8d24d32b2f828d23296a9370a28aa39d111f6f16bef9f3b" dependencies = [ "proc-macro2", - "quote", - "syn", + "quote 1.0.6", + "syn 1.0.27", ] [[package]] @@ -315,24 +279,17 @@ checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" [[package]] name = "backtrace" -version = "0.3.49" +version = "0.3.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05100821de9e028f12ae3d189176b41ee198341eb8f369956407fea2f5cc666c" +checksum = "0df2f85c8a2abbe3b7d7e748052fdd9b76a0458fdeb16ad4223f5eca78c7c130" dependencies = [ "addr2line", "cfg-if", "libc", - "miniz_oxide", "object", "rustc-demangle", ] -[[package]] -name = "base-x" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b20b618342cf9891c292c4f5ac2cde7287cc5c87e87e9c769d617793607dec1" - [[package]] name = "base64" version = "0.10.1" @@ -348,12 +305,6 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" -[[package]] -name = "base64" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e223af0dc48c96d4f8342ec01a4974f139df863896b316681efd36742f22cc67" - [[package]] name = "bit-set" version = "0.5.2" @@ -388,7 +339,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a" dependencies = [ "arrayref", - "arrayvec", + "arrayvec 0.5.1", "constant_time_eq", ] @@ -398,31 +349,10 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ - "block-padding 0.1.5", + "block-padding", "byte-tools", "byteorder", - "generic-array 0.12.3", -] - -[[package]] -name = "block-buffer" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbcf92448676f82bb7a334c58bbce8b0d43580fb5362a9d608b18879d12a3d31" -dependencies = [ - "block-padding 0.1.5", - "byte-tools", - "byteorder", - "generic-array 0.14.2", -] - -[[package]] -name = "block-cipher" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa136449e765dc7faa244561ccae839c394048667929af599b5d931ebe7b7f10" -dependencies = [ - "generic-array 0.14.2", + "generic-array", ] [[package]] @@ -431,17 +361,17 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c924d49bd09e7c06003acda26cd9742e796e34282ec6c1189404dee0c1f4774" dependencies = [ - "generic-array 0.12.3", + "generic-array", ] [[package]] name = "block-modes" -version = "0.4.0" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "538b66bc25a51ce985544067a9c3e17d426447f468c495dd6cb00040e5953692" +checksum = "31aa8410095e39fdb732909fb5730a48d5bd7c2e3cd76bd1b07b3dbea130c529" dependencies = [ - "block-cipher", - "block-padding 0.1.5", + "block-cipher-trait", + "block-padding", ] [[package]] @@ -453,32 +383,13 @@ dependencies = [ "byte-tools", ] -[[package]] -name = "block-padding" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c98bfd7c112b6399fef97cc0614af1cd375b27a112e552ce60f94c1b5f13cb74" - -[[package]] -name = "blocking" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d17efb70ce4421e351d61aafd90c16a20fb5bfe339fcdc32a86816280e62ce0" -dependencies = [ - "futures-channel", - "futures-util", - "once_cell", - "parking", - "waker-fn", -] - [[package]] name = "blowfish" -version = "0.5.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91d01392750dd899a2528948d6b856afe2df508d627fc7c339868c0bd0141b4b" +checksum = "6aeb80d00f2688459b8542068abd974cfb101e7a82182414a99b5026c0d85cc3" dependencies = [ - "block-cipher", + "block-cipher-trait", "byteorder", "opaque-debug", ] @@ -501,9 +412,9 @@ checksum = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8" [[package]] name = "bumpalo" -version = "3.4.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820" +checksum = "5356f1d23ee24a1f785a56d1d1a5f0fd5b0f6a0c0fb2412ce11da71649ab78f6" [[package]] name = "byte-pool" @@ -527,12 +438,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b92204551573580e078dc80017f36a213eb77a0450e4ddd8cfa0f3f2d1f0178f" -[[package]] -name = "bytemuck" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37fa13df2292ecb479ec23aa06f4507928bef07839be9ef15281411076629431" - [[package]] name = "byteorder" version = "1.3.4" @@ -550,10 +455,10 @@ dependencies = [ ] [[package]] -name = "cache-padded" -version = "1.1.0" +name = "bytes" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24508e28c677875c380c20f4d28124fab6f8ed4ef929a1397d7b1a31e92f1005" +checksum = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1" [[package]] name = "cargo_metadata" @@ -570,11 +475,11 @@ dependencies = [ [[package]] name = "cast5" -version = "0.7.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "923e7bf02710210fc56cbeff9b8f3c0f9c2b4723f08678a0011bd0028b06c6b4" +checksum = "4ce5759b4c52ca74f9a98421817c882f1fd9b0071ae41cd61ab9f9d059c04fd6" dependencies = [ - "block-cipher", + "block-cipher-trait", "byteorder", "opaque-debug", ] @@ -587,11 +492,11 @@ checksum = "7bbb73db36c1246e9034e307d0fba23f9a2e251faa47ade70c1bd252220c8311" [[package]] name = "cfb-mode" -version = "0.4.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51fc3a82c422bab680468af21241497d76660ef2e2fc75ec751fb03bf7dd725f" +checksum = "190e7b55d3a27cf8879becf61035a141cbc783f3258a41d16d1706719f991345" dependencies = [ - "block-cipher", + "block-cipher-trait", "stream-cipher", ] @@ -619,7 +524,7 @@ checksum = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2" dependencies = [ "num-integer", "num-traits", - "time 0.1.43", + "time", ] [[package]] @@ -630,9 +535,9 @@ checksum = "b0fc239e0f6cb375d2402d48afb92f76f5404fd1df208a41930ec81eda078bea" [[package]] name = "clear_on_drop" -version = "0.2.4" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9cc5db465b294c3fa986d5bbb0f3017cd850bff6dd6c52f9ccff8b4d21b7b08" +checksum = "97276801e127ffb46b66ce23f35cc96bd454fa311294bced4bbace7baa8b1d17" dependencies = [ "cc", ] @@ -652,15 +557,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dbbb57365263e881e805dc77d94697c9118fd94d8da011240555aa7b23445bd" -[[package]] -name = "concurrent-queue" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83c06aff61f2d899eb87c379df3cbf7876f14471dcab474e0b6dc90ab96c080" -dependencies = [ - "cache-padded", -] - [[package]] name = "constant_time_eq" version = "0.1.5" @@ -669,18 +565,11 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] name = "cookie" -version = "0.14.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca761767cf3fa9068cc893ec8c247a22d0fd0535848e65640c0548bd1f8bbb36" +checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" dependencies = [ - "aes-gcm", - "base64 0.12.2", - "hkdf", - "hmac", - "percent-encoding", - "rand 0.7.3", - "sha2 0.8.2", - "time 0.2.16", + "time", ] [[package]] @@ -715,14 +604,39 @@ dependencies = [ ] [[package]] -name = "crossbeam-queue" -version = "0.2.3" +name = "crossbeam-deque" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" +checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" +dependencies = [ + "autocfg 1.0.0", + "cfg-if", + "crossbeam-utils", + "lazy_static", + "maybe-uninit", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-queue" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db" dependencies = [ "cfg-if", "crossbeam-utils", - "maybe-uninit", ] [[package]] @@ -736,36 +650,26 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "crypto-mac" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" -dependencies = [ - "generic-array 0.12.3", - "subtle 1.0.0", -] - [[package]] name = "ctor" -version = "0.1.15" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39858aa5bac06462d4dd4b9164848eb81ffc4aa5c479746393598fd193afa227" +checksum = "cf6b25ee9ac1995c54d7adb2eff8cfffb7260bc774fb63c601ec65467f43cd9d" dependencies = [ - "quote", - "syn", + "quote 1.0.6", + "syn 1.0.27", ] [[package]] name = "curve25519-dalek" -version = "2.1.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d85653f070353a16313d0046f173f70d1aadd5b42600a14de626f0dfb3473a5" +checksum = "26778518a7f6cffa1d25a44b602b62b979bd88adb9e99ffec546998cf3404839" dependencies = [ "byteorder", - "digest 0.8.1", + "digest", "rand_core 0.5.1", - "subtle 2.2.3", + "subtle", "zeroize", ] @@ -788,9 +692,9 @@ dependencies = [ "fnv", "ident_case", "proc-macro2", - "quote", + "quote 1.0.6", "strsim", - "syn", + "syn 1.0.27", ] [[package]] @@ -800,21 +704,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" dependencies = [ "darling_core", - "quote", - "syn", + "quote 1.0.6", + "syn 1.0.27", ] [[package]] -name = "data-encoding" -version = "2.2.1" +name = "debug_stub_derive" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72aa14c04dfae8dd7d8a2b1cb7ca2152618cd01336dbfe704b8dcbf8d41dbd69" +checksum = "496b7f8a2f853313c3ca370641d7ff3e42c32974fdccda8f0684599ed0a3ff6b" +dependencies = [ + "quote 0.3.15", + "syn 0.11.11", +] [[package]] name = "deflate" -version = "0.8.4" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7e5d2a2273fed52a7f947ee55b092c4057025d7a3e04e5ecdbd25d6c3fb1bd7" +checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" dependencies = [ "adler32", "byteorder", @@ -822,7 +730,7 @@ dependencies = [ [[package]] name = "deltachat" -version = "1.39.0" +version = "1.34.0" dependencies = [ "ansi_term 0.12.1", "anyhow", @@ -830,14 +738,14 @@ dependencies = [ "async-native-tls", "async-smtp", "async-std", - "async-std-resolver", "async-trait", "backtrace", - "base64 0.12.2", + "base64 0.11.0", "bitflags", "byteorder", "charset", "chrono", + "debug_stub_derive", "deltachat_derive", "email", "encoded-words", @@ -848,7 +756,6 @@ dependencies = [ "image-meta", "indexmap", "itertools", - "kamadak-exif", "lazy_static", "lettre_email", "libc", @@ -872,9 +779,10 @@ dependencies = [ "sanitize-filename", "serde", "serde_json", - "sha2 0.9.0", + "sha2", "smallvec", "smol", + "sqlx", "stop-token", "strum", "strum_macros", @@ -888,13 +796,13 @@ dependencies = [ name = "deltachat_derive" version = "2.0.0" dependencies = [ - "quote", - "syn", + "quote 1.0.6", + "syn 1.0.27", ] [[package]] name = "deltachat_ffi" -version = "1.39.0" +version = "1.34.0" dependencies = [ "anyhow", "async-std", @@ -915,8 +823,8 @@ dependencies = [ "darling", "derive_builder_core", "proc-macro2", - "quote", - "syn", + "quote 1.0.6", + "syn 1.0.27", ] [[package]] @@ -927,17 +835,17 @@ checksum = "2791ea3e372c8495c0bc2033991d76b512cd799d07491fbd6890124db9458bef" dependencies = [ "darling", "proc-macro2", - "quote", - "syn", + "quote 1.0.6", + "syn 1.0.27", ] [[package]] name = "des" -version = "0.4.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e6f17f2850a27f147a228d342a95bf3c613934464d77d531fe8d5151ccd9362" +checksum = "74ba5f1b5aee9772379c2670ba81306e65a93c0ee3caade7a1d22b188d88a3af" dependencies = [ - "block-cipher", + "block-cipher-trait", "byteorder", "opaque-debug", ] @@ -954,16 +862,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" dependencies = [ - "generic-array 0.12.3", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array 0.14.2", + "generic-array", ] [[package]] @@ -978,16 +877,16 @@ dependencies = [ ] [[package]] -name = "discard" -version = "1.0.4" +name = "dotenv" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" [[package]] name = "dtoa" -version = "0.4.6" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134951f4028bdadb9b84baf4232681efbf277da25144b9b0ad65df75946c422b" +checksum = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3" [[package]] name = "ed25519-dalek" @@ -998,7 +897,7 @@ dependencies = [ "clear_on_drop", "curve25519-dalek", "rand 0.7.3", - "sha2 0.8.2", + "sha2", ] [[package]] @@ -1010,7 +909,7 @@ checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" [[package]] name = "email" version = "0.0.21" -source = "git+https://github.com/deltachat/rust-email#9161f2d45d29ae8f0119fde0facdb1b0d7c6f077" +source = "git+https://github.com/deltachat/rust-email#ace12ee6f8e054dd890589f588d0311604fc25f0" dependencies = [ "base64 0.11.0", "chrono", @@ -1018,7 +917,7 @@ dependencies = [ "encoding", "lazy_static", "rand 0.7.3", - "time 0.1.43", + "time", "version_check 0.9.2", ] @@ -1115,23 +1014,11 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5320ae4c3782150d900b79807611a59a99fc9a1d61d686faafc24b93fc8d7ca" -[[package]] -name = "enum-as-inner" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc4bfcfacb61d231109d1d55202c1f33263319668b168843e02ad4652725ec9c" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "env_logger" -version = "0.7.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" +checksum = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" dependencies = [ "atty", "humantime", @@ -1159,6 +1046,28 @@ dependencies = [ "entities", ] +[[package]] +name = "failure" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" +dependencies = [ + "backtrace", + "failure_derive", +] + +[[package]] +name = "failure_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" +dependencies = [ + "proc-macro2", + "quote 1.0.6", + "syn 1.0.27", + "synstructure", +] + [[package]] name = "fake-simd" version = "0.1.2" @@ -1186,12 +1095,6 @@ dependencies = [ "ascii_utils", ] -[[package]] -name = "fastrand" -version = "1.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64b0126b293b050395b37b10489951590ed024c03d7df4f249d219c8ded7cbf" - [[package]] name = "flate2" version = "1.0.14" @@ -1293,8 +1196,8 @@ checksum = "d0b5a30a4328ab5473878237c447333c093297bded83a4983d10f4deea240d39" dependencies = [ "proc-macro-hack", "proc-macro2", - "quote", - "syn", + "quote 1.0.6", + "syn 1.0.27", ] [[package]] @@ -1353,16 +1256,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "generic-array" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac746a5f3bbfdadd6106868134545e684693d54d9d44f6e9588a7d54af0bf980" -dependencies = [ - "typenum", - "version_check 0.9.2", -] - [[package]] name = "getrandom" version = "0.1.14" @@ -1374,15 +1267,6 @@ dependencies = [ "wasi", ] -[[package]] -name = "ghash" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f0930ed19a7184089ea46d2fedead2f6dc2b674c5db4276b7da336c7cd83252" -dependencies = [ - "polyval", -] - [[package]] name = "gif" version = "0.10.3" @@ -1429,9 +1313,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.1.14" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9586eedd4ce6b3c498bc3b4dd92fc9f11166aa908a914071953768066c67909" +checksum = "91780f809e750b0a89f5544be56617ff6b1227ee485bcb06ebe10cdf89bd3b71" dependencies = [ "libc", ] @@ -1442,26 +1326,6 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" -[[package]] -name = "hkdf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fa08a006102488bd9cd5b8013aabe84955cf5ae22e304c2caf655b633aefae3" -dependencies = [ - "digest 0.8.1", - "hmac", -] - -[[package]] -name = "hmac" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dcb5e64cda4c23119ab41ba960d1e170a774c8e4b9d9e6a9bc18aabf5e59695" -dependencies = [ - "crypto-mac", - "digest 0.8.1", -] - [[package]] name = "hostname" version = "0.1.5" @@ -1473,21 +1337,21 @@ dependencies = [ ] [[package]] -name = "hostname" -version = "0.3.1" +name = "http" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +checksum = "28d569972648b2c512421b5f2a405ad6ac9666547189d0c5477a3f200f3e02f9" dependencies = [ - "libc", - "match_cfg", - "winapi", + "bytes 0.5.4", + "fnv", + "itoa", ] [[package]] name = "http-client" -version = "3.0.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdae064c76b75ced4793544e843478c8c9c2bebf16fe6913212df83e30dfdb46" +checksum = "271fae45413daaca82e8c6bf46e452b897873676ce56196d8939645711f542d5" dependencies = [ "async-h1", "async-native-tls", @@ -1503,20 +1367,19 @@ dependencies = [ [[package]] name = "http-types" -version = "2.2.1" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca4221cd1c7cedf275cd0ad3c9dfe58b5acc93cdd5511c7e020a102e1995fe99" +checksum = "49d9f44462c2e59d5d5826e7ba74b121ee2fb0ff091ef849692694f1d77aaf50" dependencies = [ "anyhow", "async-std", "cookie", + "http", "infer", + "omnom", "pin-project-lite", - "rand 0.7.3", "serde", "serde_json", - "serde_qs", - "serde_urlencoded", "url", ] @@ -1569,11 +1432,10 @@ dependencies = [ [[package]] name = "image" -version = "0.23.6" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b0553fec6407d63fe2975b794dfb099f3f790bdc958823851af37b26404ab4" +checksum = "08ed2ada878397b045454ac7cfb011d73132c59f31a955d230bd1f1c2e68eb4a" dependencies = [ - "bytemuck", "byteorder", "gif", "jpeg-decoder", @@ -1600,23 +1462,35 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16a6def1d5ac8975d70b3fd101d57953fe3278ef2ee5d7816cba54b1d1dfc22f" dependencies = [ - "nom 5.1.2", + "nom 5.1.1", ] [[package]] name = "indexmap" -version = "1.4.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c398b2b113b55809ceb9ee3e753fcbac793f1956663f3c36549c1346015c2afe" +checksum = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292" dependencies = [ "autocfg 1.0.0", ] [[package]] name = "infer" -version = "0.1.7" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6854dd77ddc4f9ba1a448f487e27843583d407648150426a30c2ea3a2c39490a" +checksum = "d55c406a76164eb346a829ed4b97b73cb06259078eca01adeb12e8ca308d4123" +dependencies = [ + "byteorder", +] + +[[package]] +name = "inflate" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff" +dependencies = [ + "adler32", +] [[package]] name = "iovec" @@ -1627,18 +1501,6 @@ dependencies = [ "libc", ] -[[package]] -name = "ipconfig" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" -dependencies = [ - "socket2", - "widestring", - "winapi", - "winreg", -] - [[package]] name = "itertools" version = "0.8.2" @@ -1650,9 +1512,9 @@ dependencies = [ [[package]] name = "itoa" -version = "0.4.6" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" +checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" [[package]] name = "jpeg-decoder" @@ -1672,15 +1534,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "kamadak-exif" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a5e66d5b5469321038611f7f0e845a48989e4fd54987b6e5bb4c8ae3adbace7" -dependencies = [ - "mutate_once", -] - [[package]] name = "keccak" version = "0.1.0" @@ -1725,19 +1578,19 @@ dependencies = [ "lettre", "mime", "regex", - "time 0.1.43", + "time", "uuid", ] [[package]] name = "lexical-core" -version = "0.7.4" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db65c6da02e61f55dae90a0ae427b2a5f6b3e8db09f58d10efab23af92592616" +checksum = "d7043aa5c05dd34fb73b47acb8c3708eac428de4545ea3682ed2f11293ebd890" dependencies = [ - "arrayvec", - "bitflags", + "arrayvec 0.4.12", "cfg-if", + "rustc_version", "ryu", "static_assertions", ] @@ -1756,9 +1609,9 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" [[package]] name = "libsqlite3-sys" -version = "0.18.0" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e704a02bcaecd4a08b93a23f6be59d0bd79cd161e0963e9499165a0a35df7bd" +checksum = "56d90181c2904c287e5390186be820e5ef311a3c62edebb7d6ca3d6a48ce041d" dependencies = [ "cc", "pkg-config", @@ -1816,10 +1669,10 @@ dependencies = [ ] [[package]] -name = "match_cfg" -version = "0.1.0" +name = "maplit" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" [[package]] name = "matches" @@ -1835,12 +1688,12 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "md-5" -version = "0.9.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e273c0484dae98a721a3d9e8d9780e05e693912dd9fa87c7645e125df7a793" +checksum = "a18af3dcaf2b0219366cdb4e2af65a6101457b415c3d1a5c71dd9c2b7c77b9c8" dependencies = [ - "block-buffer 0.8.0", - "digest 0.9.0", + "block-buffer", + "digest", "opaque-debug", ] @@ -1850,6 +1703,15 @@ version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" +[[package]] +name = "memoffset" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4fc2c02a7e374099d4ee95a193111f72d2110197fe200272371758f6c3643d8" +dependencies = [ + "autocfg 1.0.0", +] + [[package]] name = "mime" version = "0.3.16" @@ -1868,19 +1730,13 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.3.7" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" +checksum = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5" dependencies = [ "adler32", ] -[[package]] -name = "mutate_once" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16cf681a23b4d0a43fc35024c176437f9dcd818db34e0f42ab456a0ee5ad497b" - [[package]] name = "native-tls" version = "0.2.4" @@ -1912,6 +1768,12 @@ dependencies = [ "void", ] +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + [[package]] name = "nom" version = "4.2.3" @@ -1924,26 +1786,15 @@ dependencies = [ [[package]] name = "nom" -version = "5.1.2" +version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +checksum = "0b471253da97532da4b61552249c521e01e736071f71c1a4f7ebbfbf0a06aad6" dependencies = [ "lexical-core", "memchr", "version_check 0.9.2", ] -[[package]] -name = "num-bigint" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" -dependencies = [ - "autocfg 1.0.0", - "num-integer", - "num-traits", -] - [[package]] name = "num-bigint-dig" version = "0.6.0" @@ -1970,15 +1821,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c8b15b261814f992e33760b1fca9fe8b693d8a65299f20c9901688636cfb746" dependencies = [ "proc-macro2", - "quote", - "syn", + "quote 1.0.6", + "syn 1.0.27", ] [[package]] name = "num-integer" -version = "0.1.43" +version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" +checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" dependencies = [ "autocfg 1.0.0", "num-traits", @@ -1986,9 +1837,9 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.41" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6e6b7c748f995c4c29c5f5ae0248536e04a5739927c74ec0fa564805094b9f" +checksum = "dfb0800a0291891dd9f4fe7bd9c19384f98f7fbe0cd0f39a2c6b88b9868bbc00" dependencies = [ "autocfg 1.0.0", "num-integer", @@ -1997,9 +1848,9 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.3.0" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5b4d7360f362cfb50dde8143501e6940b22f644be75a4cc90b2d81968908138" +checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" dependencies = [ "autocfg 1.0.0", "num-integer", @@ -2008,9 +1859,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.12" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" +checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" dependencies = [ "autocfg 1.0.0", ] @@ -2027,9 +1878,18 @@ dependencies = [ [[package]] name = "object" -version = "0.20.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab52be62400ca80aa00285d25253d7f7c437b7375c4de678f5405d3afe82ca5" +checksum = "9cbca9424c482ee628fa549d9c812e2cd22f1180b9222c9200fdfa6eb31aecb2" + +[[package]] +name = "omnom" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6b216cee2e0d6e680f73158d15468c80b39e571c11669cd90556f9a644e9fd3" +dependencies = [ + "memchr", +] [[package]] name = "once_cell" @@ -2065,18 +1925,18 @@ checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" [[package]] name = "openssl-src" -version = "111.10.0+1.1.1g" +version = "111.9.0+1.1.1g" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47cd4a96d49c3abf4cac8e8a80cba998a030c75608f158fb1c5f609772f265e6" +checksum = "a2dbe10ddd1eb335aba3780eb2eaa13e1b7b441d2562fd962398740927f39ec4" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.58" +version = "0.9.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a842db4709b604f0fe5d1170ae3565899be2ad3d9cbc72dedc789ac0511f78de" +checksum = "7410fef80af8ac071d4f63755c0ab89ac3df0fd1ea91f1d1f37cf5cec4395990" dependencies = [ "autocfg 1.0.0", "cc", @@ -2113,12 +1973,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "parking" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a7fad362df89617628a7508b3e9d588ade1b0ac31aa25de168193ad999c2dd4" - [[package]] name = "parking_lot" version = "0.10.2" @@ -2143,17 +1997,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "pem" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59698ea79df9bf77104aefd39cc3ec990cb9693fb59c3b0a70ddf2646fdffb4b" -dependencies = [ - "base64 0.12.2", - "once_cell", - "regex", -] - [[package]] name = "percent-encoding" version = "2.1.0" @@ -2162,15 +2005,15 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "pgp" -version = "0.6.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d3fd4e0b2b7a8195b22e196a947c9ceb0d0f722d060e38e0641f48f56e195b" +checksum = "8172973101790c866e66966002bf1028d0df27bf6b3b29be86a6fd440d8a4285" dependencies = [ - "aes 0.4.0", - "base64 0.12.2", + "aes", + "base64 0.11.0", "bitfield", "block-modes", - "block-padding 0.2.0", + "block-padding", "blowfish", "buf_redux", "byteorder", @@ -2182,10 +2025,10 @@ dependencies = [ "crc24", "derive_builder", "des", - "digest 0.9.0", + "digest", "ed25519-dalek", "flate2", - "generic-array 0.14.2", + "generic-array", "hex", "lazy_static", "log", @@ -2198,7 +2041,7 @@ dependencies = [ "ripemd160", "rsa", "sha-1", - "sha2 0.9.0", + "sha2", "sha3", "smallvec", "thiserror", @@ -2210,29 +2053,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "0.4.22" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12e3a6cdbfe94a5e4572812a0201f8c0ed98c1c452c7b8563ce2276988ef9c17" +checksum = "edc93aeee735e60ecb40cf740eb319ff23eab1c5748abfdb5c180e4ce49f7791" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "0.4.22" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a0ffd45cf79d88737d7cc85bfd5d2894bee1139b356e616fe85dc389c61aaf7" +checksum = "e58db2081ba5b4c93bd6be09c40fd36cb9193a8336c384f3b40012e531aa7e40" dependencies = [ "proc-macro2", - "quote", - "syn", + "quote 1.0.6", + "syn 1.0.27", ] [[package]] name = "pin-project-lite" -version = "0.1.7" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282adbf10f2698a7a77f8e983a74b2d18176c19a7fd32a45446139ae7b02b715" +checksum = "f7505eeebd78492e0f6108f7171c4948dbb120ee8119d9d77d0afa5469bef67f" [[package]] name = "pin-utils" @@ -2240,6 +2083,18 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b0deb65f46e873ba8aa7c6a8dbe3f23cb1bf59c339a81a1d56361dde4d66ac8" +dependencies = [ + "crossbeam-utils", + "futures-io", + "futures-sink", + "futures-util", +] + [[package]] name = "pkg-config" version = "0.3.17" @@ -2248,24 +2103,14 @@ checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" [[package]] name = "png" -version = "0.16.5" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ccdd66f6fe4b2433b07e4728e9a013e43233120427046e93ceb709c3a439bf" +checksum = "ef859a23054bbfee7811284275ae522f0434a3c8e7f4b74bd4a35ae7e1c4a283" dependencies = [ "bitflags", "crc32fast", "deflate", - "miniz_oxide", -] - -[[package]] -name = "polyval" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ec3341498978de3bfd12d1b22f1af1de22818f5473a11e8a6ef997989e3a212" -dependencies = [ - "cfg-if", - "universal-hash", + "inflate", ] [[package]] @@ -2288,10 +2133,11 @@ dependencies = [ [[package]] name = "pretty_env_logger" -version = "0.4.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d" +checksum = "717ee476b1690853d222af4634056d830b5197ffd747726a9a1eee6da9f49074" dependencies = [ + "chrono", "env_logger", "log", ] @@ -2304,24 +2150,24 @@ checksum = "7e0456befd48169b9f13ef0f0ad46d492cf9d2dbb918bcf38e01eed4ce3ec5e4" [[package]] name = "proc-macro-nested" -version = "0.1.6" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a" +checksum = "8e946095f9d3ed29ec38de908c22f95d9ac008e424c7bcae54c75a79c527c694" [[package]] name = "proc-macro2" -version = "1.0.18" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beae6331a816b1f65d04c45b078fd8e6c93e8071771f41b8163255bbd8d7c8fa" +checksum = "1502d12e458c49a4c9cbff560d0fe0060c252bc29799ed94ca2ed4bb665a0101" dependencies = [ - "unicode-xid", + "unicode-xid 0.2.0", ] [[package]] name = "proptest" -version = "0.10.0" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2520fe6373cf6a3a61e2d200e987c183778ade8d9248ac3e6614ab0edfe4a0c1" +checksum = "01c477819b845fe023d33583ebf10c9f62518c8d79a0960ba5c36d6ac8a55a5b" dependencies = [ "bit-set", "bitflags", @@ -2329,8 +2175,8 @@ dependencies = [ "lazy_static", "num-traits", "quick-error", - "rand 0.7.3", - "rand_chacha", + "rand 0.6.5", + "rand_chacha 0.1.1", "rand_xorshift", "regex-syntax", "rusty-fork", @@ -2354,18 +2200,24 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quick-xml" -version = "0.18.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cc440ee4802a86e357165021e3e255a9143724da31db1e2ea540214c96a0f82" +checksum = "fe1e430bdcf30c9fdc25053b9c459bb1a4672af4617b6c783d7d91dc17c6bbb0" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.7" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +checksum = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" + +[[package]] +name = "quote" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54a21852a652ad6f610c9510194f398ff6f8692e334fd1145fed931f7fbe44ea" dependencies = [ "proc-macro2", ] @@ -2389,9 +2241,9 @@ dependencies = [ [[package]] name = "r2d2_sqlite" -version = "0.16.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed60ebe88b27ac28c0563bc0fbeaecd302ff53e3a01e5ddc2ec9f4e6c707d929" +checksum = "5e15ff794e7c8bb8ae20ccac5bac6a93a4a3af708dd801d4094f80da41196f33" dependencies = [ "r2d2", "rusqlite", @@ -2410,6 +2262,25 @@ dependencies = [ "winapi", ] +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +dependencies = [ + "autocfg 0.1.7", + "libc", + "rand_chacha 0.1.1", + "rand_core 0.4.2", + "rand_hc 0.1.0", + "rand_isaac", + "rand_jitter", + "rand_os", + "rand_pcg", + "rand_xorshift", + "winapi", +] + [[package]] name = "rand" version = "0.7.3" @@ -2419,9 +2290,19 @@ dependencies = [ "getrandom", "libc", "packed_simd", - "rand_chacha", + "rand_chacha 0.2.2", "rand_core 0.5.1", - "rand_hc", + "rand_hc 0.2.0", +] + +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +dependencies = [ + "autocfg 0.1.7", + "rand_core 0.3.1", ] [[package]] @@ -2458,6 +2339,15 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +dependencies = [ + "rand_core 0.3.1", +] + [[package]] name = "rand_hc" version = "0.2.0" @@ -2468,12 +2358,56 @@ dependencies = [ ] [[package]] -name = "rand_xorshift" -version = "0.2.0" +name = "rand_isaac" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77d416b86801d23dde1aa643023b775c3a462efc0ed96443add11546cdf1dca8" +checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" dependencies = [ - "rand_core 0.5.1", + "rand_core 0.3.1", +] + +[[package]] +name = "rand_jitter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" +dependencies = [ + "libc", + "rand_core 0.4.2", + "winapi", +] + +[[package]] +name = "rand_os" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +dependencies = [ + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.4.2", + "rdrand", + "winapi", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +dependencies = [ + "autocfg 0.1.7", + "rand_core 0.4.2", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +dependencies = [ + "rand_core 0.3.1", ] [[package]] @@ -2504,9 +2438,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.3.9" +version = "1.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3780fcf44b193bc4d09f36d2a3c87b251da4a046c87795a0d35f4f927ad8e6" +checksum = "226ddd1197737bcb937489322ec1b9edaac1709d46792886e70f2113923585a6" dependencies = [ "aho-corasick", "memchr", @@ -2522,9 +2456,9 @@ checksum = "26412eb97c6b088a6997e05f69403a802a92d520de2f8e63c2b65f9e0f47c4e8" [[package]] name = "remove_dir_all" -version = "0.5.3" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +checksum = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" dependencies = [ "winapi", ] @@ -2546,58 +2480,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "475e68978dc5b743f2f40d8e0a8fdc83f1c5e78cbf4b8fa5e74e73beebc340de" dependencies = [ "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "resolv-conf" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11834e137f3b14e309437a8276714eed3a80d1ef894869e510f2c0c0b98b9f4a" -dependencies = [ - "hostname 0.3.1", - "quick-error", + "quote 1.0.6", + "syn 1.0.27", ] [[package]] name = "ripemd160" -version = "0.9.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7037e00ff78e861f53edd08ea4c4351fbf9b357145fdb791bc2f9a2236a33b45" +checksum = "ad5112e0dbbb87577bfbc56c42450235e3012ce336e29c5befd7807bd626da4a" dependencies = [ - "block-buffer 0.8.0", - "digest 0.9.0", + "block-buffer", + "digest", "opaque-debug", ] [[package]] name = "rsa" -version = "0.3.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3648b669b10afeab18972c105e284a7b953a669b0be3514c27f9b17acab2f9cd" +checksum = "6ed8692d8e0ea3baae03f0f32ecfc13a6c6f1f85fcd6d9fdefcdf364e70f4df9" dependencies = [ "byteorder", - "digest 0.9.0", + "failure", "lazy_static", "num-bigint-dig", "num-integer", "num-iter", "num-traits", - "pem", "rand 0.7.3", - "sha2 0.9.0", - "simple_asn1", - "subtle 2.2.3", - "thiserror", + "subtle", "zeroize", ] [[package]] name = "rusqlite" -version = "0.23.1" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45d0fd62e1df63d254714e6cb40d0a0e82e7a1623e7a27f679d851af092ae58b" +checksum = "57edf4c4cea4d7e0fab069acb5da9e8e8e5403c78abc81b1f37d83af02148ea5" dependencies = [ "bitflags", "fallible-iterator", @@ -2605,8 +2525,7 @@ dependencies = [ "libsqlite3-sys", "lru-cache", "memchr", - "smallvec", - "time 0.1.43", + "time", ] [[package]] @@ -2638,9 +2557,9 @@ dependencies = [ [[package]] name = "rusty-fork" -version = "0.3.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +checksum = "3dd93264e10c577503e926bd1430193eeb5d21b059148910082245309b424fae" dependencies = [ "fnv", "quick-error", @@ -2667,9 +2586,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.5" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "ed3d612bc64430efeb3f7ee6ef26d590dce0c43249217bddc62112540c7941e1" [[package]] name = "safemem" @@ -2716,10 +2635,10 @@ dependencies = [ ] [[package]] -name = "scoped-tls" -version = "1.0.0" +name = "scoped-tls-hkt" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" +checksum = "c2e9d7eaddb227e8fbaaa71136ae0e1e913ca159b86c7da82f3e8f0044ad3a63" [[package]] name = "scopeguard" @@ -2774,47 +2693,35 @@ checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" [[package]] name = "serde" -version = "1.0.114" +version = "1.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5317f7588f0a5078ee60ef675ef96735a1442132dc645eb1d12c018620ed8cd3" +checksum = "99e7b308464d16b56eba9964e4972a3eee817760ab60d88c3f86e1fecb08204c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.114" +version = "1.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0be94b04690fbaed37cddffc5c134bf537c8e3329d53e982fe04c374978f8e" +checksum = "818fbf6bfa9a42d3bfcaca148547aa00c7b915bec71d1757aa2d44ca68771984" dependencies = [ "proc-macro2", - "quote", - "syn", + "quote 1.0.6", + "syn 1.0.27", ] [[package]] name = "serde_json" -version = "1.0.55" +version = "1.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec2c5d7e739bc07a3e73381a39d61fdb5f671c60c1df26a130690665803d8226" +checksum = "993948e75b189211a9b31a7528f950c6adc21f9720b6438ff80a7fa2f864cea2" dependencies = [ "itoa", "ryu", "serde", ] -[[package]] -name = "serde_qs" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6e32b85107a5c8062643265a90575cc6e798cec0906ea58519b42175062ba27" -dependencies = [ - "data-encoding", - "error-chain", - "percent-encoding", - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.6.1" @@ -2829,70 +2736,41 @@ dependencies = [ [[package]] name = "sha-1" -version = "0.9.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59520a294fcfdaff2ce8276dc1bdc6170b97abe8043560f70178222e611242fc" +checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" dependencies = [ - "block-buffer 0.8.0", - "digest 0.9.0", + "block-buffer", + "digest", "fake-simd", "opaque-debug", ] -[[package]] -name = "sha1" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" - [[package]] name = "sha2" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug", -] - -[[package]] -name = "sha2" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72377440080fd008550fe9b441e854e43318db116f90181eef92e9ae9aedab48" -dependencies = [ - "block-buffer 0.8.0", - "digest 0.9.0", + "block-buffer", + "digest", "fake-simd", "opaque-debug", ] [[package]] name = "sha3" -version = "0.9.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b859cf80317bb4ab6b29422f3d77de357ef60a0e0b3dedf28469d2b11d098968" +checksum = "dd26bc0e7a2e3a7c959bc494caf58b72ee0c71d67704e9520f736ca7e4853ecf" dependencies = [ - "block-buffer 0.8.0", + "block-buffer", "byte-tools", - "digest 0.9.0", + "digest", "keccak", "opaque-debug", ] -[[package]] -name = "simple_asn1" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b25ecba7165254f0c97d6c22a64b1122a03634b18d20a34daf21e18f892e618" -dependencies = [ - "chrono", - "num-bigint", - "num-traits", -] - [[package]] name = "skeptic" version = "0.13.4" @@ -2923,23 +2801,22 @@ checksum = "c7cb5678e1615754284ec264d9bb5b4c27d2018577fd90ac0ceb578591ed5ee4" [[package]] name = "smol" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "620cbb3c6e34da57d3a248cda0cd01cd5848164dc062e764e65d06fe3ea7aed5" +version = "0.1.10" +source = "git+https://github.com/dignifiedquire/smol-1?branch=isolate-nix#1ba84935e4e48be927c7f8f4a9cb5c05614135c3" dependencies = [ "async-task", - "blocking", - "concurrent-queue", - "fastrand", + "crossbeam-deque", + "crossbeam-queue", + "crossbeam-utils", "futures-io", "futures-util", "libc", "once_cell", - "scoped-tls", + "piper", + "scoped-tls-hkt", "slab", "socket2", - "wepoll-sys-stjepang", - "winapi", + "wepoll-binding", ] [[package]] @@ -2960,75 +2837,81 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "sqlformat" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce64a4576e1720a2e511bf3ccdb8c0f6cfed0fc265bcbaa0bd369485e02c631" +dependencies = [ + "lazy_static", + "maplit", + "regex", +] + +[[package]] +name = "sqlx" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8974cacd80085fbe49e778708d660dec6fb351604dc34c3905b26efb2803b038" +dependencies = [ + "sqlx-core", + "sqlx-macros", +] + +[[package]] +name = "sqlx-core" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ac5a436f941c42eac509471a730df5c3c58e1450e68cd39afedbd948206273" +dependencies = [ + "async-native-tls", + "async-std", + "async-stream", + "bitflags", + "byteorder", + "crossbeam-queue", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-util", + "hex", + "libc", + "libsqlite3-sys", + "log", + "memchr", + "percent-encoding", + "sqlformat", + "url", +] + +[[package]] +name = "sqlx-macros" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de2ae78b783af5922d811b14665a5a3755e531c3087bb805cf24cf71f15e6780" +dependencies = [ + "async-std", + "dotenv", + "futures 0.3.5", + "heck", + "proc-macro2", + "quote 1.0.6", + "sqlx-core", + "syn 1.0.23", + "url", +] + [[package]] name = "stable_deref_trait" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" -[[package]] -name = "standback" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0437cfb83762844799a60e1e3b489d5ceb6a650fbacb86437badc1b6d87b246" -dependencies = [ - "version_check 0.9.2", -] - [[package]] name = "static_assertions" -version = "1.1.0" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "stdweb" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" -dependencies = [ - "discard", - "rustc_version", - "stdweb-derive", - "stdweb-internal-macros", - "stdweb-internal-runtime", - "wasm-bindgen", -] - -[[package]] -name = "stdweb-derive" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" -dependencies = [ - "proc-macro2", - "quote", - "serde", - "serde_derive", - "syn", -] - -[[package]] -name = "stdweb-internal-macros" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" -dependencies = [ - "base-x", - "proc-macro2", - "quote", - "serde", - "serde_derive", - "serde_json", - "sha1", - "syn", -] - -[[package]] -name = "stdweb-internal-runtime" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" +checksum = "7f3eb36b47e512f8f1c9e3d10c2c1965bc992bd9cdb024fa581e2194501c83d3" [[package]] name = "stop-token" @@ -3042,11 +2925,11 @@ dependencies = [ [[package]] name = "stream-cipher" -version = "0.4.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f8ed9974042b8c3672ff3030a69fcc03b74c47c3d1ecb7755e8a3626011e88" +checksum = "8131256a5896cabcf5eb04f4d6dacbe1aefda854b0d9896e09cb58829ec5638c" dependencies = [ - "generic-array 0.14.2", + "generic-array", ] [[package]] @@ -3057,39 +2940,33 @@ checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" [[package]] name = "strum" -version = "0.18.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bd81eb48f4c437cadc685403cad539345bf703d78e63707418431cecd4522b" +checksum = "6138f8f88a16d90134763314e3fc76fa3ed6a7db4725d6acf9a3ef95a3188d22" [[package]] name = "strum_macros" -version = "0.18.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c" +checksum = "0054a7df764039a6cd8592b9de84be4bec368ff081d203a7d5371cbfa8e65c81" dependencies = [ "heck", "proc-macro2", - "quote", - "syn", + "quote 1.0.6", + "syn 1.0.27", ] [[package]] name = "subtle" -version = "1.0.0" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - -[[package]] -name = "subtle" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502d53007c02d7605a05df1c1a73ee436952781653da5d0bf57ad608f66932c1" +checksum = "7c65d530b10ccaeac294f349038a597e435b18fb456aadd0840a623f83b9e941" [[package]] name = "surf" -version = "2.0.0-alpha.4" +version = "2.0.0-alpha.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68bf1412b095b3a54da6ec3a969e2663cb3cf535652cd97c02e99443a400fd7d" +checksum = "d72c302d4a24b2c9d412f1fe5edd892946778d33c423bba087c6c10deeb656ff" dependencies = [ "async-std", "futures 0.3.5", @@ -3107,25 +2984,45 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.33" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d5d96e8cbb005d6959f119f773bfaebb5684296108fb32600c00cde305b2cd" +checksum = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" +dependencies = [ + "quote 0.3.15", + "synom", + "unicode-xid 0.0.4", +] + +[[package]] +name = "syn" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef781e621ee763a2a40721a8861ec519cb76966aee03bb5d00adb6a31dc1c1de" dependencies = [ "proc-macro2", - "quote", - "unicode-xid", + "quote 1.0.6", + "unicode-xid 0.2.0", +] + +[[package]] +name = "synom" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" +dependencies = [ + "unicode-xid 0.0.4", ] [[package]] name = "synstructure" -version = "0.12.4" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" +checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" dependencies = [ "proc-macro2", - "quote", - "syn", - "unicode-xid", + "quote 1.0.6", + "syn 1.0.27", + "unicode-xid 0.2.0", ] [[package]] @@ -3163,22 +3060,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.20" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dfdd070ccd8ccb78f4ad66bf1982dc37f620ef696c6b5028fe2ed83dd3d0d08" +checksum = "b13f926965ad00595dd129fa12823b04bbf866e9085ab0a5f2b05b850fbfc344" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.20" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793" +checksum = "893582086c2f98cde18f906265a65b5030a074b1046c674ae898be6519a7f479" dependencies = [ "proc-macro2", - "quote", - "syn", + "quote 1.0.6", + "syn 1.0.27", ] [[package]] @@ -3200,57 +3097,13 @@ dependencies = [ "winapi", ] -[[package]] -name = "time" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a51cadc5b1eec673a685ff7c33192ff7b7603d0b75446fb354939ee615acb15" -dependencies = [ - "cfg-if", - "libc", - "standback", - "stdweb", - "time-macros", - "version_check 0.9.2", - "winapi", -] - -[[package]] -name = "time-macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9b6e9f095bc105e183e3cd493d72579be3181ad4004fceb01adbe9eecab2d" -dependencies = [ - "proc-macro-hack", - "time-macros-impl", -] - -[[package]] -name = "time-macros-impl" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c3be1edfad6027c69f5491cf4cb310d1a71ecd6af742788c6ff8bced86b8fa" -dependencies = [ - "proc-macro-hack", - "proc-macro2", - "quote", - "standback", - "syn", -] - -[[package]] -name = "tinyvec" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53953d2d3a5ad81d9f844a32f14ebb121f50b650cd59d0ee2a07cf13c617efed" - [[package]] name = "tokio-io" version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" dependencies = [ - "bytes", + "bytes 0.4.12", "futures 0.1.29", "log", ] @@ -3264,44 +3117,6 @@ dependencies = [ "serde", ] -[[package]] -name = "trust-dns-proto" -version = "0.19.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd7061ba6f4d4d9721afedffbfd403f20f39a4301fee1b70d6fcd09cca69f28" -dependencies = [ - "async-trait", - "backtrace", - "enum-as-inner", - "futures 0.3.5", - "idna", - "lazy_static", - "log", - "rand 0.7.3", - "smallvec", - "thiserror", - "url", -] - -[[package]] -name = "trust-dns-resolver" -version = "0.19.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f23cdfdc3d8300b3c50c9e84302d3bd6d860fb9529af84ace6cf9665f181b77" -dependencies = [ - "backtrace", - "cfg-if", - "futures 0.3.5", - "ipconfig", - "lazy_static", - "log", - "lru-cache", - "resolv-conf", - "smallvec", - "thiserror", - "trust-dns-proto", -] - [[package]] name = "try_from" version = "0.3.2" @@ -3313,11 +3128,11 @@ dependencies = [ [[package]] name = "twofish" -version = "0.3.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac7c7f7184cecc73a340d1d2b8bb884385d521650437d96143ef4ccc86aaaf7" +checksum = "712d261e83e727c8e2dbb75dacac67c36e35db36a958ee504f2164fc052434e1" dependencies = [ - "block-cipher", + "block-cipher-trait", "byteorder", "opaque-debug", ] @@ -3348,11 +3163,11 @@ dependencies = [ [[package]] name = "unicode-normalization" -version = "0.1.13" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb19cf769fa8c6a80a162df694621ebeb4dafb606470b2b2fce0be40a98a977" +checksum = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4" dependencies = [ - "tinyvec", + "smallvec", ] [[package]] @@ -3367,22 +3182,18 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" +[[package]] +name = "unicode-xid" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" + [[package]] name = "unicode-xid" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" -[[package]] -name = "universal-hash" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0c900f2f9b4116803415878ff48b63da9edb268668e08cf9292d7503114a01" -dependencies = [ - "generic-array 0.12.3", - "subtle 2.2.3", -] - [[package]] name = "url" version = "2.1.1" @@ -3411,9 +3222,9 @@ dependencies = [ [[package]] name = "vcpkg" -version = "0.2.10" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6454029bf181f092ad1b853286f23e2c507d8e8194d01d92da4a55c274a5508c" +checksum = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168" [[package]] name = "version_check" @@ -3442,12 +3253,6 @@ dependencies = [ "libc", ] -[[package]] -name = "waker-fn" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9571542c2ce85ce642e6b58b3364da2fb53526360dfb7c211add4f5c23105ff7" - [[package]] name = "walkdir" version = "2.3.1" @@ -3485,8 +3290,8 @@ dependencies = [ "lazy_static", "log", "proc-macro2", - "quote", - "syn", + "quote 1.0.6", + "syn 1.0.27", "wasm-bindgen-shared", ] @@ -3508,7 +3313,7 @@ version = "0.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "838e423688dac18d73e31edce74ddfac468e37b1506ad163ffaf0a46f703ffe3" dependencies = [ - "quote", + "quote 1.0.6", "wasm-bindgen-macro-support", ] @@ -3519,8 +3324,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3156052d8ec77142051a533cdd686cba889537b213f948cd1d20869926e68e92" dependencies = [ "proc-macro2", - "quote", - "syn", + "quote 1.0.6", + "syn 1.0.27", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3542,19 +3347,23 @@ dependencies = [ ] [[package]] -name = "wepoll-sys-stjepang" -version = "1.0.2" +name = "wepoll-binding" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "035f8ab1fcf98d41f8fd5206a97c335604162e5eb0c25c4839062093150ddc79" +checksum = "374fff4ff9701ff8b6ad0d14bacd3156c44063632d8c136186ff5967d48999a7" dependencies = [ - "cc", + "bitflags", + "wepoll-sys", ] [[package]] -name = "widestring" -version = "0.4.2" +name = "wepoll-sys" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a763e303c0e0f23b0da40888724762e802a8ffefbc22de4127ef42493c2ea68c" +checksum = "9082a777aed991f6769e2b654aa0cb29f1c3d615daf009829b07b66c7aff6a24" +dependencies = [ + "cc", +] [[package]] name = "winapi" @@ -3587,15 +3396,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "winreg" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" -dependencies = [ - "winapi", -] - [[package]] name = "winutil" version = "0.1.1" @@ -3632,7 +3432,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de251eec69fc7c1bc3923403d18ececb929380e016afe103da75f396704f8ca2" dependencies = [ "proc-macro2", - "quote", - "syn", + "quote 1.0.6", + "syn 1.0.27", "synstructure", ] diff --git a/Cargo.toml b/Cargo.toml index 1f13ac690..07405ddc2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -60,13 +60,15 @@ anyhow = "1.0.28" async-trait = "0.1.31" url = "2.1.1" async-std-resolver = "0.19.5" +sqlx = { version = "0.3.5", features = ["runtime-async-std", "sqlite"] } pretty_env_logger = { version = "0.4.0", optional = true } -log = {version = "0.4.8", optional = true } +log = { version = "0.4.8", optional = true } rustyline = { version = "4.1.0", optional = true } ansi_term = { version = "0.12.1", optional = true } + [dev-dependencies] tempfile = "3.0" pretty_assertions = "0.6.1" diff --git a/src/context.rs b/src/context.rs index 07e3881f9..d2f4a330b 100644 --- a/src/context.rs +++ b/src/context.rs @@ -127,10 +127,8 @@ impl Context { let ctx = Context { inner: Arc::new(inner), }; - ensure!( - ctx.sql.open(&ctx, &ctx.dbfile, false).await, - "Failed opening sqlite database" - ); + + ctx.sql.open(&ctx, &ctx.dbfile, false).await?; Ok(ctx) } diff --git a/src/imex.rs b/src/imex.rs index 7577a8bd9..399db2f47 100644 --- a/src/imex.rs +++ b/src/imex.rs @@ -96,21 +96,21 @@ pub async fn has_backup(context: &Context, dir_name: impl AsRef) -> Result let name = name.to_string_lossy(); if name.starts_with("delta-chat") && name.ends_with(".bak") { let sql = Sql::new(); - if sql.open(context, &path, true).await { - let curr_backup_time = sql - .get_raw_config_int(context, "backup_time") - .await - .unwrap_or_default(); - if curr_backup_time > newest_backup_time { - newest_backup_path = Some(path); - newest_backup_time = curr_backup_time; - } - info!(context, "backup_time of {} is {}", name, curr_backup_time); - sql.close().await; + sql.open(context, &path, true).await?; + let curr_backup_time = sql + .get_raw_config_int(context, "backup_time") + .await + .unwrap_or_default(); + if curr_backup_time > newest_backup_time { + newest_backup_path = Some(path); + newest_backup_time = curr_backup_time; } + info!(context, "backup_time of {} is {}", name, curr_backup_time); + sql.close().await; } } } + match newest_backup_path { Some(path) => Ok(path.to_string_lossy().into_owned()), None => bail!("no backup found in {}", dir_name.display()), @@ -428,13 +428,10 @@ async fn import_backup(context: &Context, backup_to_import: impl AsRef) -> ); /* error already logged */ /* re-open copied database file */ - ensure!( - context - .sql - .open(&context, &context.get_dbfile(), false) - .await, - "could not re-open db" - ); + context + .sql + .open(&context, &context.get_dbfile(), false) + .await?; delete_and_reset_all_device_msgs(&context).await?; @@ -531,7 +528,7 @@ async fn export_backup(context: &Context, dir: impl AsRef) -> Result<()> { context .sql .open(&context, &context.get_dbfile(), false) - .await; + .await?; if !copied { bail!( @@ -541,11 +538,8 @@ async fn export_backup(context: &Context, dir: impl AsRef) -> Result<()> { ); } let dest_sql = Sql::new(); - ensure!( - dest_sql.open(context, &dest_path_filename, false).await, - "could not open exported database {}", - dest_path_string - ); + dest_sql.open(context, &dest_path_filename, false).await?; + let res = match add_files_to_export(context, &dest_sql).await { Err(err) => { dc_delete_file(context, &dest_path_filename).await; diff --git a/src/sql/migrations.rs b/src/sql/migrations.rs new file mode 100644 index 000000000..35b7c3052 --- /dev/null +++ b/src/sql/migrations.rs @@ -0,0 +1,378 @@ +use super::{Error, Result, Sql}; +use crate::constants::ShowEmails; +use crate::context::Context; + +/// Executes all migrations required to get from the passed in `dbversion` to the latest. +pub async fn run( + context: &Context, + sql: &Sql, + dbversion: i32, + exists_before_update: bool, +) -> Result<()> { + let migrate = |version: i32, stmt: &'static str| async move { + if dbversion < version { + info!(context, "[migration] v{}", version); + + sql.xexecute_batch(stmt).await?; + sql.set_raw_config_int(context, "dbversion", version) + .await?; + } + + Ok::<_, Error>(()) + }; + + migrate( + 0, + r#" +CREATE TABLE config (id INTEGER PRIMARY KEY, keyname TEXT, value TEXT); +CREATE INDEX config_index1 ON config (keyname); +CREATE TABLE contacts ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT DEFAULT '', + addr TEXT DEFAULT '' COLLATE NOCASE, + origin INTEGER DEFAULT 0, + blocked INTEGER DEFAULT 0, + last_seen INTEGER DEFAULT 0, + param TEXT DEFAULT ''); +CREATE INDEX contacts_index1 ON contacts (name COLLATE NOCASE); +CREATE INDEX contacts_index2 ON contacts (addr COLLATE NOCASE); +INSERT INTO contacts (id,name,origin) VALUES + (1,'self',262144), (2,'info',262144), (3,'rsvd',262144), + (4,'rsvd',262144), (5,'device',262144), (6,'rsvd',262144), + (7,'rsvd',262144), (8,'rsvd',262144), (9,'rsvd',262144); +CREATE TABLE chats ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + type INTEGER DEFAULT 0, + name TEXT DEFAULT '', + draft_timestamp INTEGER DEFAULT 0, + draft_txt TEXT DEFAULT '', + blocked INTEGER DEFAULT 0, + grpid TEXT DEFAULT '', + param TEXT DEFAULT ''); +CREATE INDEX chats_index1 ON chats (grpid); +CREATE TABLE chats_contacts (chat_id INTEGER, contact_id INTEGER); +CREATE INDEX chats_contacts_index1 ON chats_contacts (chat_id); +INSERT INTO chats (id,type,name) VALUES + (1,120,'deaddrop'), (2,120,'rsvd'), (3,120,'trash'), + (4,120,'msgs_in_creation'), (5,120,'starred'), (6,120,'archivedlink'), + (7,100,'rsvd'), (8,100,'rsvd'), (9,100,'rsvd'); +CREATE TABLE msgs ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + rfc724_mid TEXT DEFAULT '', + server_folder TEXT DEFAULT '', + server_uid INTEGER DEFAULT 0, + chat_id INTEGER DEFAULT 0, + from_id INTEGER DEFAULT 0, + to_id INTEGER DEFAULT 0, + timestamp INTEGER DEFAULT 0, + type INTEGER DEFAULT 0, + state INTEGER DEFAULT 0, + msgrmsg INTEGER DEFAULT 1, + bytes INTEGER DEFAULT 0, + txt TEXT DEFAULT '', + txt_raw TEXT DEFAULT '', + param TEXT DEFAULT ''); +CREATE INDEX msgs_index1 ON msgs (rfc724_mid); +CREATE INDEX msgs_index2 ON msgs (chat_id); +CREATE INDEX msgs_index3 ON msgs (timestamp); +CREATE INDEX msgs_index4 ON msgs (state); +INSERT INTO msgs (id,msgrmsg,txt) VALUES + (1,0,'marker1'), (2,0,'rsvd'), (3,0,'rsvd'), + (4,0,'rsvd'), (5,0,'rsvd'), (6,0,'rsvd'), (7,0,'rsvd'), + (8,0,'rsvd'), (9,0,'daymarker'); +CREATE TABLE jobs ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + added_timestamp INTEGER, + desired_timestamp INTEGER DEFAULT 0, + action INTEGER, + foreign_id INTEGER, + param TEXT DEFAULT ''); +CREATE INDEX jobs_index1 ON jobs (desired_timestamp); +"#, + ) + .await?; + + migrate( + 1, + r#" +CREATE TABLE leftgrps ( + id INTEGER PRIMARY KEY, + grpid TEXT DEFAULT ''); +CREATE INDEX leftgrps_index1 ON leftgrps (grpid); +"#, + ) + .await?; + + migrate( + 2, + r#" +ALTER TABLE contacts ADD COLUMN authname TEXT DEFAULT ''; +"#, + ) + .await?; + + migrate( + 7, + r#" +CREATE TABLE keypairs ( + id INTEGER PRIMARY KEY, + addr TEXT DEFAULT '' COLLATE NOCASE, + is_default INTEGER DEFAULT 0, + private_key, + public_key, + created INTEGER DEFAULT 0); +"#, + ) + .await?; + + migrate( + 10, + r#" +CREATE TABLE acpeerstates ( + id INTEGER PRIMARY KEY, + addr TEXT DEFAULT '' COLLATE NOCASE, + last_seen INTEGER DEFAULT 0, + last_seen_autocrypt INTEGER DEFAULT 0, + public_key, + prefer_encrypted INTEGER DEFAULT 0); +"#, + ) + .await?; + + migrate( + 12, + r#" +CREATE TABLE msgs_mdns ( + msg_id INTEGER, + contact_id INTEGER); +CREATE INDEX msgs_mdns_index1 ON msgs_mdns (msg_id); +"#, + ) + .await?; + + migrate( + 17, + r#" +ALTER TABLE chats ADD COLUMN archived INTEGER DEFAULT 0; +CREATE INDEX chats_index2 ON chats (archived); +ALTER TABLE msgs ADD COLUMN starred INTEGER DEFAULT 0; +CREATE INDEX msgs_index5 ON msgs (starred); +"#, + ) + .await?; + + migrate( + 18, + r#" +ALTER TABLE acpeerstates ADD COLUMN gossip_timestamp INTEGER DEFAULT 0; +ALTER TABLE acpeerstates ADD COLUMN gossip_key; +"#, + ) + .await?; + + // chat.id=1 and chat.id=2 are the old deaddrops, + // the current ones are defined by chats.blocked=2 + migrate( + 27, + r#" +DELETE FROM msgs WHERE chat_id=1 OR chat_id=2; +CREATE INDEX chats_contacts_index2 ON chats_contacts (contact_id); +ALTER TABLE msgs ADD COLUMN timestamp_sent INTEGER DEFAULT 0; +ALTER TABLE msgs ADD COLUMN timestamp_rcvd INTEGER DEFAULT 0; +"#, + ) + .await?; + + migrate( + 34, + r#" +ALTER TABLE msgs ADD COLUMN hidden INTEGER DEFAULT 0; +ALTER TABLE msgs_mdns ADD COLUMN timestamp_sent INTEGER DEFAULT 0; +ALTER TABLE acpeerstates ADD COLUMN public_key_fingerprint TEXT DEFAULT ''; +ALTER TABLE acpeerstates ADD COLUMN gossip_key_fingerprint TEXT DEFAULT ''; +CREATE INDEX acpeerstates_index3 ON acpeerstates (public_key_fingerprint); +CREATE INDEX acpeerstates_index4 ON acpeerstates (gossip_key_fingerprint); +"#, + ) + .await?; + + migrate( + 39, + r#" +CREATE TABLE tokens ( + id INTEGER PRIMARY KEY, + namespc INTEGER DEFAULT 0, + foreign_id INTEGER DEFAULT 0, + token TEXT DEFAULT '', + timestamp INTEGER DEFAULT 0); +ALTER TABLE acpeerstates ADD COLUMN verified_key; +ALTER TABLE acpeerstates ADD COLUMN verified_key_fingerprint TEXT DEFAULT ''; +CREATE INDEX acpeerstates_index5 ON acpeerstates (verified_key_fingerprint); +"#, + ) + .await?; + + migrate( + 40, + r#" +ALTER TABLE jobs ADD COLUMN thread INTEGER DEFAULT 0; +"#, + ) + .await?; + + migrate( + 44, + r#" +ALTER TABLE msgs ADD COLUMN mime_headers TEXT; +"#, + ) + .await?; + + migrate( + 46, + r#" +ALTER TABLE msgs ADD COLUMN mime_in_reply_to TEXT; +ALTER TABLE msgs ADD COLUMN mime_references TEXT; +"#, + ) + .await?; + + migrate( + 47, + r#" +ALTER TABLE jobs ADD COLUMN tries INTEGER DEFAULT 0; +"#, + ) + .await?; + + // NOTE: move_state is not used anymore + migrate( + 48, + r#" +ALTER TABLE msgs ADD COLUMN move_state INTEGER DEFAULT 1; +"#, + ) + .await?; + + migrate( + 49, + r#" +ALTER TABLE chats ADD COLUMN gossiped_timestamp INTEGER DEFAULT 0; +"#, + ) + .await?; + + if dbversion < 50 { + info!(context, "[migration] v50"); + // installations <= 0.100.1 used DC_SHOW_EMAILS_ALL implicitly; + // keep this default and use DC_SHOW_EMAILS_NO + // only for new installations + if exists_before_update { + sql.set_raw_config_int(context, "show_emails", ShowEmails::All as i32) + .await?; + } + + sql.set_raw_config_int(context, "dbversion", 50).await?; + } + + // the messages containing _only_ locations + // are also added to the database as _hidden_. + migrate( + 53, + r#" +CREATE TABLE locations ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + latitude REAL DEFAULT 0.0, + longitude REAL DEFAULT 0.0, + accuracy REAL DEFAULT 0.0, + timestamp INTEGER DEFAULT 0, + chat_id INTEGER DEFAULT 0, + from_id INTEGER DEFAULT 0); +CREATE INDEX locations_index1 ON locations (from_id); +CREATE INDEX locations_index2 ON locations (timestamp); +ALTER TABLE chats ADD COLUMN locations_send_begin INTEGER DEFAULT 0; +ALTER TABLE chats ADD COLUMN locations_send_until INTEGER DEFAULT 0; +ALTER TABLE chats ADD COLUMN locations_last_sent INTEGER DEFAULT 0; +CREATE INDEX chats_index3 ON chats (locations_send_until); +"#, + ) + .await?; + + migrate( + 54, + r#" +ALTER TABLE msgs ADD COLUMN location_id INTEGER DEFAULT 0; +CREATE INDEX msgs_index6 ON msgs (location_id); +"#, + ) + .await?; + + migrate( + 55, + r#" +ALTER TABLE locations ADD COLUMN independent INTEGER DEFAULT 0; +"#, + ) + .await?; + + migrate( + 59, + r#" +CREATE TABLE devmsglabels ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + label TEXT, + msg_id INTEGER DEFAULT 0); +CREATE INDEX devmsglabels_index1 ON devmsglabels (label); +"#, + ) + .await?; + + // records in the devmsglabels are kept when the message is deleted. + // so, msg_id may or may not exist. + if dbversion < 59 { + if exists_before_update && sql.get_raw_config_int(context, "bcc_self").await.is_none() { + sql.set_raw_config_int(context, "bcc_self", 1).await?; + } + } + + migrate( + 60, + r#" +ALTER TABLE chats ADD COLUMN created_timestamp INTEGER DEFAULT 0; +"#, + ) + .await?; + + migrate( + 61, + r#" +ALTER TABLE contacts ADD COLUMN selfavatar_sent INTEGER DEFAULT 0; +"#, + ) + .await?; + + migrate( + 62, + r#" +ALTER TABLE chats ADD COLUMN muted_until INTEGER DEFAULT 0; +"#, + ) + .await?; + + migrate( + 63, + r#" +UPDATE chats SET grpid='' WHERE type=100; +"#, + ) + .await?; + + migrate( + 64, + r" +ALTER TABLE msgs ADD COLUMN error TEXT DEFAULT ''; +"#, + ).await?; + + Ok(()) +} diff --git a/src/sql.rs b/src/sql/mod.rs similarity index 52% rename from src/sql.rs rename to src/sql/mod.rs index ec90a38cf..2f72eb6f7 100644 --- a/src/sql.rs +++ b/src/sql/mod.rs @@ -10,7 +10,7 @@ use std::time::Duration; use rusqlite::{Connection, Error as SqlError, OpenFlags}; use crate::chat::{update_device_icon, update_saved_messages_icon}; -use crate::constants::{ShowEmails, DC_CHAT_ID_TRASH}; +use crate::constants::DC_CHAT_ID_TRASH; use crate::context::Context; use crate::dc_tools::*; use crate::param::*; @@ -26,6 +26,8 @@ macro_rules! paramsv { }; } +mod migrations; + #[derive(Debug, thiserror::Error)] pub enum Error { #[error("Sqlite Error: {0:?}")] @@ -44,6 +46,8 @@ pub enum Error { BlobError(#[from] crate::blob::BlobError), #[error("{0}")] Other(#[from] crate::error::Error), + #[error("{0}")] + Sqlx(#[from] sqlx::Error), } pub type Result = std::result::Result; @@ -52,12 +56,14 @@ pub type Result = std::result::Result; #[derive(Debug)] pub struct Sql { pool: RwLock>>, + xpool: RwLock>, } impl Default for Sql { fn default() -> Self { Self { pool: RwLock::new(None), + xpool: RwLock::new(None), } } } @@ -68,26 +74,32 @@ impl Sql { } pub async fn is_open(&self) -> bool { - self.pool.read().await.is_some() + self.pool.read().await.is_some() && self.xpool.read().await.is_some() } pub async fn close(&self) { let _ = self.pool.write().await.take(); + let _ = self.xpool.write().await.take(); // drop closes the connection } - // return true on success, false on failure - pub async fn open>(&self, context: &Context, dbfile: T, readonly: bool) -> bool { - match open(context, self, dbfile, readonly).await { - Ok(_) => true, - Err(err) => match err.downcast_ref::() { - Some(Error::SqlAlreadyOpen) => false, + pub async fn open>( + &self, + context: &Context, + dbfile: T, + readonly: bool, + ) -> crate::error::Result<()> { + if let Err(err) = open(context, self, dbfile, readonly).await { + return match err.downcast_ref::() { + Some(Error::SqlAlreadyOpen) => Err(err), _ => { self.close().await; - false + Err(err) } - }, + }; } + + Ok(()) } pub async fn execute>( @@ -103,6 +115,40 @@ impl Sql { res.map_err(Into::into) } + pub async fn xexecute>( + &self, + statement: S, + params: sqlx::sqlite::SqliteArguments, + ) -> Result<()> { + let lock = self.xpool.read().await; + let xpool = lock.as_ref().ok_or_else(|| Error::SqlNoConnection)?; + + sqlx::query(statement.as_ref()) + .bind_all(params) + .execute(xpool) + .await?; + + Ok(()) + } + + /// Execute a list of statements, without any bindings + pub async fn xexecute_batch>(&self, statement: S) -> Result<()> { + let lock = self.xpool.read().await; + let xpool = lock.as_ref().ok_or_else(|| Error::SqlNoConnection)?; + + sqlx::query(statement.as_ref()).execute(xpool).await?; + + Ok(()) + } + + pub async fn execute_batch>(&self, sql: S) -> Result<()> { + let res = { + let conn = self.get_conn().await?; + conn.execute_batch(sql.as_ref()) + }; + + res.map_err(Into::into) + } /// Prepares and executes the statement and maps a function over the resulting rows. /// Then executes the second function over the returned iterator and returns the /// result of that function. @@ -675,6 +721,16 @@ async fn open( *sql.pool.write().await = Some(pool); } + let xpool = sqlx::SqlitePool::builder() + .min_size(1) + .max_size(1) + .build(&format!("sqlite://{}", dbfile.as_ref().to_string_lossy())) + .await?; + + { + *sql.xpool.write().await = Some(xpool) + } + if !readonly { // journal_mode is persisted, it is sufficient to change it only for one handle. // (nb: execute() always returns errors for this PRAGMA call, just discard it. @@ -686,157 +742,9 @@ async fn open( .ok(); let mut exists_before_update = false; - let mut dbversion_before_update: i32 = 0; - /* Init tables to dbversion=0 */ - if !sql.table_exists("config").await? { - info!( - context, - "First time init: creating tables in {:?}.", - dbfile.as_ref(), - ); - sql.execute( - "CREATE TABLE config (id INTEGER PRIMARY KEY, keyname TEXT, value TEXT);", - paramsv![], - ) - .await?; - sql.execute( - "CREATE INDEX config_index1 ON config (keyname);", - paramsv![], - ) - .await?; - sql.execute( - "CREATE TABLE contacts (\ - id INTEGER PRIMARY KEY AUTOINCREMENT, \ - name TEXT DEFAULT '', \ - addr TEXT DEFAULT '' COLLATE NOCASE, \ - origin INTEGER DEFAULT 0, \ - blocked INTEGER DEFAULT 0, \ - last_seen INTEGER DEFAULT 0, \ - param TEXT DEFAULT '');", - paramsv![], - ) - .await?; - sql.execute( - "CREATE INDEX contacts_index1 ON contacts (name COLLATE NOCASE);", - paramsv![], - ) - .await?; - sql.execute( - "CREATE INDEX contacts_index2 ON contacts (addr COLLATE NOCASE);", - paramsv![], - ) - .await?; - sql.execute( - "INSERT INTO contacts (id,name,origin) VALUES \ - (1,'self',262144), (2,'info',262144), (3,'rsvd',262144), \ - (4,'rsvd',262144), (5,'device',262144), (6,'rsvd',262144), \ - (7,'rsvd',262144), (8,'rsvd',262144), (9,'rsvd',262144);", - paramsv![], - ) - .await?; - sql.execute( - "CREATE TABLE chats (\ - id INTEGER PRIMARY KEY AUTOINCREMENT, \ - type INTEGER DEFAULT 0, \ - name TEXT DEFAULT '', \ - draft_timestamp INTEGER DEFAULT 0, \ - draft_txt TEXT DEFAULT '', \ - blocked INTEGER DEFAULT 0, \ - grpid TEXT DEFAULT '', \ - param TEXT DEFAULT '');", - paramsv![], - ) - .await?; - sql.execute("CREATE INDEX chats_index1 ON chats (grpid);", paramsv![]) - .await?; - sql.execute( - "CREATE TABLE chats_contacts (chat_id INTEGER, contact_id INTEGER);", - paramsv![], - ) - .await?; - sql.execute( - "CREATE INDEX chats_contacts_index1 ON chats_contacts (chat_id);", - paramsv![], - ) - .await?; - sql.execute( - "INSERT INTO chats (id,type,name) VALUES \ - (1,120,'deaddrop'), (2,120,'rsvd'), (3,120,'trash'), \ - (4,120,'msgs_in_creation'), (5,120,'starred'), (6,120,'archivedlink'), \ - (7,100,'rsvd'), (8,100,'rsvd'), (9,100,'rsvd');", - paramsv![], - ) - .await?; - sql.execute( - "CREATE TABLE msgs (\ - id INTEGER PRIMARY KEY AUTOINCREMENT, \ - rfc724_mid TEXT DEFAULT '', \ - server_folder TEXT DEFAULT '', \ - server_uid INTEGER DEFAULT 0, \ - chat_id INTEGER DEFAULT 0, \ - from_id INTEGER DEFAULT 0, \ - to_id INTEGER DEFAULT 0, \ - timestamp INTEGER DEFAULT 0, \ - type INTEGER DEFAULT 0, \ - state INTEGER DEFAULT 0, \ - msgrmsg INTEGER DEFAULT 1, \ - bytes INTEGER DEFAULT 0, \ - txt TEXT DEFAULT '', \ - txt_raw TEXT DEFAULT '', \ - param TEXT DEFAULT '');", - paramsv![], - ) - .await?; - sql.execute("CREATE INDEX msgs_index1 ON msgs (rfc724_mid);", paramsv![]) - .await?; - sql.execute("CREATE INDEX msgs_index2 ON msgs (chat_id);", paramsv![]) - .await?; - sql.execute("CREATE INDEX msgs_index3 ON msgs (timestamp);", paramsv![]) - .await?; - sql.execute("CREATE INDEX msgs_index4 ON msgs (state);", paramsv![]) - .await?; - sql.execute( - "INSERT INTO msgs (id,msgrmsg,txt) VALUES \ - (1,0,'marker1'), (2,0,'rsvd'), (3,0,'rsvd'), \ - (4,0,'rsvd'), (5,0,'rsvd'), (6,0,'rsvd'), (7,0,'rsvd'), \ - (8,0,'rsvd'), (9,0,'daymarker');", - paramsv![], - ) - .await?; - sql.execute( - "CREATE TABLE jobs (\ - id INTEGER PRIMARY KEY AUTOINCREMENT, \ - added_timestamp INTEGER, \ - desired_timestamp INTEGER DEFAULT 0, \ - action INTEGER, \ - foreign_id INTEGER, \ - param TEXT DEFAULT '');", - paramsv![], - ) - .await?; - sql.execute( - "CREATE INDEX jobs_index1 ON jobs (desired_timestamp);", - paramsv![], - ) - .await?; - if !sql.table_exists("config").await? - || !sql.table_exists("contacts").await? - || !sql.table_exists("chats").await? - || !sql.table_exists("chats_contacts").await? - || !sql.table_exists("msgs").await? - || !sql.table_exists("jobs").await? - { - error!( - context, - "Cannot create tables in new database \"{:?}\".", - dbfile.as_ref(), - ); - // cannot create the tables - maybe we cannot write? - return Err(Error::SqlFailedToOpen.into()); - } else { - sql.set_raw_config_int(context, "dbversion", 0).await?; - } - } else { + let mut dbversion_before_update: i32 = -1; + + if sql.table_exists("config").await? { exists_before_update = true; dbversion_before_update = sql .get_raw_config_int(context, "dbversion") @@ -849,411 +757,22 @@ async fn open( // rely themselves on the low-level structure. // -------------------------------------------------------------------- - let mut dbversion = dbversion_before_update; - let mut recalc_fingerprints = false; - let mut update_icons = false; - - if dbversion < 1 { - info!(context, "[migration] v1"); - sql.execute( - "CREATE TABLE leftgrps ( id INTEGER PRIMARY KEY, grpid TEXT DEFAULT '');", - paramsv![], - ) - .await?; - sql.execute( - "CREATE INDEX leftgrps_index1 ON leftgrps (grpid);", - paramsv![], - ) - .await?; - dbversion = 1; - sql.set_raw_config_int(context, "dbversion", 1).await?; - } - if dbversion < 2 { - info!(context, "[migration] v2"); - sql.execute( - "ALTER TABLE contacts ADD COLUMN authname TEXT DEFAULT '';", - paramsv![], - ) - .await?; - dbversion = 2; - sql.set_raw_config_int(context, "dbversion", 2).await?; - } - if dbversion < 7 { - info!(context, "[migration] v7"); - sql.execute( - "CREATE TABLE keypairs (\ - id INTEGER PRIMARY KEY, \ - addr TEXT DEFAULT '' COLLATE NOCASE, \ - is_default INTEGER DEFAULT 0, \ - private_key, \ - public_key, \ - created INTEGER DEFAULT 0);", - paramsv![], - ) - .await?; - dbversion = 7; - sql.set_raw_config_int(context, "dbversion", 7).await?; - } - if dbversion < 10 { - info!(context, "[migration] v10"); - sql.execute( - "CREATE TABLE acpeerstates (\ - id INTEGER PRIMARY KEY, \ - addr TEXT DEFAULT '' COLLATE NOCASE, \ - last_seen INTEGER DEFAULT 0, \ - last_seen_autocrypt INTEGER DEFAULT 0, \ - public_key, \ - prefer_encrypted INTEGER DEFAULT 0);", - paramsv![], - ) - .await?; - sql.execute( - "CREATE INDEX acpeerstates_index1 ON acpeerstates (addr);", - paramsv![], - ) - .await?; - dbversion = 10; - sql.set_raw_config_int(context, "dbversion", 10).await?; - } - if dbversion < 12 { - info!(context, "[migration] v12"); - sql.execute( - "CREATE TABLE msgs_mdns ( msg_id INTEGER, contact_id INTEGER);", - paramsv![], - ) - .await?; - sql.execute( - "CREATE INDEX msgs_mdns_index1 ON msgs_mdns (msg_id);", - paramsv![], - ) - .await?; - dbversion = 12; - sql.set_raw_config_int(context, "dbversion", 12).await?; - } - if dbversion < 17 { - info!(context, "[migration] v17"); - sql.execute( - "ALTER TABLE chats ADD COLUMN archived INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - sql.execute("CREATE INDEX chats_index2 ON chats (archived);", paramsv![]) - .await?; - sql.execute( - "ALTER TABLE msgs ADD COLUMN starred INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - sql.execute("CREATE INDEX msgs_index5 ON msgs (starred);", paramsv![]) - .await?; - dbversion = 17; - sql.set_raw_config_int(context, "dbversion", 17).await?; - } - if dbversion < 18 { - info!(context, "[migration] v18"); - sql.execute( - "ALTER TABLE acpeerstates ADD COLUMN gossip_timestamp INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - sql.execute( - "ALTER TABLE acpeerstates ADD COLUMN gossip_key;", - paramsv![], - ) - .await?; - dbversion = 18; - sql.set_raw_config_int(context, "dbversion", 18).await?; - } - if dbversion < 27 { - info!(context, "[migration] v27"); - // chat.id=1 and chat.id=2 are the old deaddrops, - // the current ones are defined by chats.blocked=2 - sql.execute("DELETE FROM msgs WHERE chat_id=1 OR chat_id=2;", paramsv![]) - .await?; - sql.execute( - "CREATE INDEX chats_contacts_index2 ON chats_contacts (contact_id);", - paramsv![], - ) - .await?; - sql.execute( - "ALTER TABLE msgs ADD COLUMN timestamp_sent INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - sql.execute( - "ALTER TABLE msgs ADD COLUMN timestamp_rcvd INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - dbversion = 27; - sql.set_raw_config_int(context, "dbversion", 27).await?; - } - if dbversion < 34 { - info!(context, "[migration] v34"); - sql.execute( - "ALTER TABLE msgs ADD COLUMN hidden INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - sql.execute( - "ALTER TABLE msgs_mdns ADD COLUMN timestamp_sent INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - sql.execute( - "ALTER TABLE acpeerstates ADD COLUMN public_key_fingerprint TEXT DEFAULT '';", - paramsv![], - ) - .await?; - sql.execute( - "ALTER TABLE acpeerstates ADD COLUMN gossip_key_fingerprint TEXT DEFAULT '';", - paramsv![], - ) - .await?; - sql.execute( - "CREATE INDEX acpeerstates_index3 ON acpeerstates (public_key_fingerprint);", - paramsv![], - ) - .await?; - sql.execute( - "CREATE INDEX acpeerstates_index4 ON acpeerstates (gossip_key_fingerprint);", - paramsv![], - ) - .await?; - recalc_fingerprints = true; - dbversion = 34; - sql.set_raw_config_int(context, "dbversion", 34).await?; - } - if dbversion < 39 { - info!(context, "[migration] v39"); - sql.execute( - "CREATE TABLE tokens ( id INTEGER PRIMARY KEY, namespc INTEGER DEFAULT 0, foreign_id INTEGER DEFAULT 0, token TEXT DEFAULT '', timestamp INTEGER DEFAULT 0);", - paramsv![] - ).await?; - sql.execute( - "ALTER TABLE acpeerstates ADD COLUMN verified_key;", - paramsv![], - ) - .await?; - sql.execute( - "ALTER TABLE acpeerstates ADD COLUMN verified_key_fingerprint TEXT DEFAULT '';", - paramsv![], - ) - .await?; - sql.execute( - "CREATE INDEX acpeerstates_index5 ON acpeerstates (verified_key_fingerprint);", - paramsv![], - ) - .await?; - dbversion = 39; - sql.set_raw_config_int(context, "dbversion", 39).await?; - } - if dbversion < 40 { - info!(context, "[migration] v40"); - sql.execute( - "ALTER TABLE jobs ADD COLUMN thread INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - dbversion = 40; - sql.set_raw_config_int(context, "dbversion", 40).await?; - } - if dbversion < 44 { - info!(context, "[migration] v44"); - sql.execute("ALTER TABLE msgs ADD COLUMN mime_headers TEXT;", paramsv![]) - .await?; - dbversion = 44; - sql.set_raw_config_int(context, "dbversion", 44).await?; - } - if dbversion < 46 { - info!(context, "[migration] v46"); - sql.execute( - "ALTER TABLE msgs ADD COLUMN mime_in_reply_to TEXT;", - paramsv![], - ) - .await?; - sql.execute( - "ALTER TABLE msgs ADD COLUMN mime_references TEXT;", - paramsv![], - ) - .await?; - dbversion = 46; - sql.set_raw_config_int(context, "dbversion", 46).await?; - } - if dbversion < 47 { - info!(context, "[migration] v47"); - sql.execute( - "ALTER TABLE jobs ADD COLUMN tries INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - dbversion = 47; - sql.set_raw_config_int(context, "dbversion", 47).await?; - } - if dbversion < 48 { - info!(context, "[migration] v48"); - // NOTE: move_state is not used anymore - sql.execute( - "ALTER TABLE msgs ADD COLUMN move_state INTEGER DEFAULT 1;", - paramsv![], - ) - .await?; - - dbversion = 48; - sql.set_raw_config_int(context, "dbversion", 48).await?; - } - if dbversion < 49 { - info!(context, "[migration] v49"); - sql.execute( - "ALTER TABLE chats ADD COLUMN gossiped_timestamp INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - dbversion = 49; - sql.set_raw_config_int(context, "dbversion", 49).await?; - } - if dbversion < 50 { - info!(context, "[migration] v50"); - // installations <= 0.100.1 used DC_SHOW_EMAILS_ALL implicitly; - // keep this default and use DC_SHOW_EMAILS_NO - // only for new installations - if exists_before_update { - sql.set_raw_config_int(context, "show_emails", ShowEmails::All as i32) - .await?; - } - dbversion = 50; - sql.set_raw_config_int(context, "dbversion", 50).await?; - } - if dbversion < 53 { - info!(context, "[migration] v53"); - // the messages containing _only_ locations - // are also added to the database as _hidden_. - sql.execute( - "CREATE TABLE locations ( id INTEGER PRIMARY KEY AUTOINCREMENT, latitude REAL DEFAULT 0.0, longitude REAL DEFAULT 0.0, accuracy REAL DEFAULT 0.0, timestamp INTEGER DEFAULT 0, chat_id INTEGER DEFAULT 0, from_id INTEGER DEFAULT 0);", - paramsv![] - ).await?; - sql.execute( - "CREATE INDEX locations_index1 ON locations (from_id);", - paramsv![], - ) - .await?; - sql.execute( - "CREATE INDEX locations_index2 ON locations (timestamp);", - paramsv![], - ) - .await?; - sql.execute( - "ALTER TABLE chats ADD COLUMN locations_send_begin INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - sql.execute( - "ALTER TABLE chats ADD COLUMN locations_send_until INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - sql.execute( - "ALTER TABLE chats ADD COLUMN locations_last_sent INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - sql.execute( - "CREATE INDEX chats_index3 ON chats (locations_send_until);", - paramsv![], - ) - .await?; - dbversion = 53; - sql.set_raw_config_int(context, "dbversion", 53).await?; - } - if dbversion < 54 { - info!(context, "[migration] v54"); - sql.execute( - "ALTER TABLE msgs ADD COLUMN location_id INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - sql.execute( - "CREATE INDEX msgs_index6 ON msgs (location_id);", - paramsv![], - ) - .await?; - dbversion = 54; - sql.set_raw_config_int(context, "dbversion", 54).await?; - } - if dbversion < 55 { - info!(context, "[migration] v55"); - sql.execute( - "ALTER TABLE locations ADD COLUMN independent INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - sql.set_raw_config_int(context, "dbversion", 55).await?; - } - if dbversion < 59 { - info!(context, "[migration] v59"); - // records in the devmsglabels are kept when the message is deleted. - // so, msg_id may or may not exist. - sql.execute( - "CREATE TABLE devmsglabels (id INTEGER PRIMARY KEY AUTOINCREMENT, label TEXT, msg_id INTEGER DEFAULT 0);", - paramsv![], - ).await?; - sql.execute( - "CREATE INDEX devmsglabels_index1 ON devmsglabels (label);", - paramsv![], - ) - .await?; - if exists_before_update && sql.get_raw_config_int(context, "bcc_self").await.is_none() { - sql.set_raw_config_int(context, "bcc_self", 1).await?; - } - sql.set_raw_config_int(context, "dbversion", 59).await?; - } - if dbversion < 60 { - info!(context, "[migration] v60"); - sql.execute( - "ALTER TABLE chats ADD COLUMN created_timestamp INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - sql.set_raw_config_int(context, "dbversion", 60).await?; - } - if dbversion < 61 { - info!(context, "[migration] v61"); - sql.execute( - "ALTER TABLE contacts ADD COLUMN selfavatar_sent INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - update_icons = true; - sql.set_raw_config_int(context, "dbversion", 61).await?; - } - if dbversion < 62 { - info!(context, "[migration] v62"); - sql.execute( - "ALTER TABLE chats ADD COLUMN muted_until INTEGER DEFAULT 0;", - paramsv![], - ) - .await?; - sql.set_raw_config_int(context, "dbversion", 62).await?; - } - if dbversion < 63 { - info!(context, "[migration] v63"); - sql.execute("UPDATE chats SET grpid='' WHERE type=100", paramsv![]) - .await?; - sql.set_raw_config_int(context, "dbversion", 63).await?; - } - if dbversion < 64 { - info!(context, "[migration] v64"); - sql.execute( - "ALTER TABLE msgs ADD COLUMN error TEXT DEFAULT '';", - paramsv![], - ) - .await?; - sql.set_raw_config_int(context, "dbversion", 64).await?; - } + migrations::run(context, &sql, dbversion_before_update, exists_before_update).await?; + // general updates // (2) updates that require high-level objects // (the structure is complete now and all objects are usable) // -------------------------------------------------------------------- + let mut recalc_fingerprints = false; + let mut update_icons = false; + + if dbversion_before_update < 34 { + recalc_fingerprints = true; + } + + if dbversion_before_update < 61 { + update_icons = true; + } if recalc_fingerprints { info!(context, "[migration] recalc fingerprints");