diff --git a/Cargo.lock b/Cargo.lock index 07ed37dad..844f3181a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,7 +2,7 @@ # It is not intended for manual editing. [[package]] name = "adler32" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -245,8 +245,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -285,7 +285,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding_rs 0.8.19 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_rs 0.8.20 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -344,7 +344,7 @@ dependencies = [ "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "publicsuffix 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", "try_from 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -520,7 +520,7 @@ dependencies = [ "reqwest 0.9.20 (registry+https://github.com/rust-lang/crates.io-index)", "rusqlite 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)", "rustyline 4.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", "sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -530,6 +530,18 @@ dependencies = [ "thread-local-object 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "deltachat-provider-overview" +version = "0.1.0" +source = "git+https://github.com/deltachat/provider-overview?rev=366b41a7503973e4ffac3aa5173b419f2f03c211#366b41a7503973e4ffac3aa5173b419f2f03c211" +dependencies = [ + "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", + "yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "deltachat_derive" version = "0.1.0" @@ -543,6 +555,7 @@ name = "deltachat_ffi" version = "1.0.0-alpha.4" dependencies = [ "deltachat 1.0.0-alpha.4", + "deltachat-provider-overview 0.1.0 (git+https://github.com/deltachat/provider-overview?rev=366b41a7503973e4ffac3aa5173b419f2f03c211)", "human-panic 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -639,7 +652,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "encoding_rs" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", @@ -814,6 +827,11 @@ name = "glob" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "h2" version = "0.1.26" @@ -887,8 +905,8 @@ dependencies = [ "backtrace 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "os_type 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "termcolor 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1065,8 +1083,8 @@ dependencies = [ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1207,7 +1225,7 @@ name = "miniz_oxide" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1263,7 +1281,7 @@ dependencies = [ "openssl 0.10.24 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys 0.9.49 (registry+https://github.com/rust-lang/crates.io-index)", - "schannel 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", + "schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1601,7 +1619,7 @@ version = "0.7.24" source = "git+https://github.com/sfackler/rust-phf?rev=0d00821#0d0082178568036736bb6d51cb91f95ca5a616c3" dependencies = [ "phf_shared 0.7.24 (git+https://github.com/sfackler/rust-phf?rev=0d00821)", - "rand 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1732,7 +1750,7 @@ version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "derive_more 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding_rs 0.8.19 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_rs 0.8.20 (registry+https://github.com/rust-lang/crates.io-index)", "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1811,7 +1829,7 @@ dependencies = [ [[package]] name = "rand" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "getrandom 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1991,7 +2009,7 @@ dependencies = [ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "cookie_store 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "encoding_rs 0.8.19 (registry+https://github.com/rust-lang/crates.io-index)", + "encoding_rs 0.8.20 (registry+https://github.com/rust-lang/crates.io-index)", "flate2 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", "http 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2001,7 +2019,7 @@ dependencies = [ "mime 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "mime_guess 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", "serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2126,7 +2144,7 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2176,7 +2194,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2186,15 +2204,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde" -version = "1.0.100" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde_derive 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_derive" -version = "1.0.100" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2209,7 +2227,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", "ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2219,7 +2237,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2424,7 +2442,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2600,7 +2618,7 @@ name = "toml" version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2872,6 +2890,14 @@ dependencies = [ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "yaml-rust" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "zeroize" version = "0.6.0" @@ -2891,7 +2917,7 @@ dependencies = [ ] [metadata] -"checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c" +"checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" "checksum aes 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "54eb1d8fe354e5fc611daf4f2ea97dd45a765f4f1e4512306ec183ae2e8f20c9" "checksum aes-soft 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cfd7e7ae3f9a1fb5c03b389fc6bb9a51400d0c13053f0dca698c832bfd893a0d" "checksum aesni 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2f70a6b5f971e473091ab7cfb5ffac6cde81666c4556751d8d5620ead8abf100" @@ -2949,6 +2975,7 @@ dependencies = [ "checksum darling_core 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6afc018370c3bff3eb51f89256a6bdb18b4fdcda72d577982a14954a7a0b402c" "checksum darling_macro 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c6d8dac1c6f1d29a41c4712b4400f878cb4fcc4c7628f298dd75038e024998d1" "checksum debug_stub_derive 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "496b7f8a2f853313c3ca370641d7ff3e42c32974fdccda8f0684599ed0a3ff6b" +"checksum deltachat-provider-overview 0.1.0 (git+https://github.com/deltachat/provider-overview?rev=366b41a7503973e4ffac3aa5173b419f2f03c211)" = "" "checksum derive_builder 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3ac53fa6a3cda160df823a9346442525dcaf1e171999a1cf23e67067e4fd64d4" "checksum derive_builder_core 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0288a23da9333c246bb18c143426074a6ae96747995c5819d2947b64cd942b37" "checksum derive_more 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6d944ac6003ed268757ef1ee686753b57efc5fcf0ebe7b64c9fc81e7e32ff839" @@ -2959,7 +2986,7 @@ dependencies = [ "checksum dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ea57b42383d091c85abcc2706240b94ab2a8fa1fc81c10ff23c4de06e2a90b5e" "checksum ed25519-dalek 1.0.0-pre.1 (registry+https://github.com/rust-lang/crates.io-index)" = "81956bcf7ef761fb4e1d88de3fa181358a0d26cbcb9755b587a08f9119824b86" "checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" -"checksum encoding_rs 0.8.19 (registry+https://github.com/rust-lang/crates.io-index)" = "79906e1ad1f7f8bc48864fcc6ffd58336fb5992e627bf61928099cb25fdf4314" +"checksum encoding_rs 0.8.20 (registry+https://github.com/rust-lang/crates.io-index)" = "87240518927716f79692c2ed85bfe6e98196d18c6401ec75355760233a7e12e9" "checksum entities 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b5320ae4c3782150d900b79807611a59a99fc9a1d61d686faafc24b93fc8d7ca" "checksum enum_primitive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180" "checksum env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" @@ -2983,6 +3010,7 @@ dependencies = [ "checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" "checksum getrandom 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "473a1265acc8ff1e808cd0a1af8cee3c2ee5200916058a2ca113c29f2d903571" "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" +"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" "checksum h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" "checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" "checksum hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" @@ -3084,7 +3112,7 @@ dependencies = [ "checksum r2d2_sqlite 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "806e268035ce9e5a604bf617ac8a073ef28b59ef2e48e8338db0baf530caef33" "checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" "checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -"checksum rand 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "59cea0d944b32347a1863e95942fd6ebdb486afb4f038119494f2860380c1d51" +"checksum rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3ae1b169243eaf61759b8475a998f0a385e42042370f3a7dbaf35246eacc8412" "checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" "checksum rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853" "checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" @@ -3116,7 +3144,7 @@ dependencies = [ "checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997" "checksum safemem 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d2b08423011dae9a5ca23f07cf57dac3857f5c885d352b76f6d95f4aea9434d0" "checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421" -"checksum schannel 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "f2f6abf258d99c3c1c5c2131d99d064e94b7b3dd5f416483057f308fea253339" +"checksum schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "87f550b06b6cba9c8b8be3ee73f391990116bf527450d2556e9b9ce263b9a021" "checksum scheduled-thread-pool 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bd07742e081ff6c077f5f6b283f12f32b9e7cc765b316160d66289b74546fbb3" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" "checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" @@ -3124,8 +3152,8 @@ dependencies = [ "checksum security-framework-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9636f8989cbf61385ae4824b98c1aaa54c994d7d8b41f11c601ed799f0549a56" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)" = "f4473e8506b213730ff2061073b48fa51dcc66349219e2e7c5608f0296a1d95a" -"checksum serde_derive 1.0.100 (registry+https://github.com/rust-lang/crates.io-index)" = "11e410fde43e157d789fc290d26bc940778ad0fdd47836426fbac36573710dbb" +"checksum serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)" = "9796c9b7ba2ffe7a9ce53c2287dfc48080f4b2b362fcc245a259b3a7201119dd" +"checksum serde_derive 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)" = "4b133a43a1ecd55d4086bd5b4dc6c1751c68b1bfbeba7a5040442022c7e7c02e" "checksum serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)" = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704" "checksum serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a" "checksum sha-1 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23962131a91661d643c98940b20fcaffe62d776a823247be80a48fcb8b6fce68" @@ -3206,5 +3234,6 @@ dependencies = [ "checksum winutil 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7daf138b6b14196e3830a588acf1e86966c694d3e8fb026fb105b8b5dca07e6e" "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" "checksum x25519-dalek 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7ee1585dc1484373cbc1cee7aafda26634665cf449436fd6e24bfd1fad230538" +"checksum yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65923dd1784f44da1d2c3dbbc5e822045628c590ba72123e1c73d3c230c4434d" "checksum zeroize 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e68403b858b6af538b11614e62dfe9ab2facba9f13a0cafb974855cfb495ec95" "checksum zeroize_derive 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3f07490820219949839d0027b965ffdd659d75be9220c00798762e36c6cd281" diff --git a/deltachat-ffi/Cargo.toml b/deltachat-ffi/Cargo.toml index 496489791..c4870631e 100644 --- a/deltachat-ffi/Cargo.toml +++ b/deltachat-ffi/Cargo.toml @@ -16,6 +16,7 @@ crate-type = ["cdylib", "staticlib"] [dependencies] deltachat = { path = "../", default-features = false } +deltachat-provider-overview = { git = "https://github.com/deltachat/provider-overview", rev = "366b41a7503973e4ffac3aa5173b419f2f03c211" } libc = "0.2" human-panic = "1.0.1" num-traits = "0.2.6" diff --git a/deltachat-ffi/deltachat.h b/deltachat-ffi/deltachat.h index 62a0eb893..e15d02bca 100644 --- a/deltachat-ffi/deltachat.h +++ b/deltachat-ffi/deltachat.h @@ -442,7 +442,112 @@ char* dc_get_info (dc_context_t* context); */ char* dc_get_oauth2_url (dc_context_t* context, const char* addr, const char* redirect_uri); +/** + * Opaque object containing information about one single email provider. + */ +typedef struct _dc_provider dc_provider_t; +/** + * Create a provider struct for the given domain. + * + * @param doamin The domain to get provider info for. + * @return a dc_provider_t struct which can be used with the dc_provider_get_* + * accessor functions. If no provider info is found, NULL will be + * returned. + */ +dc_provider_t* dc_provider_new_from_domain (char* domain); + +/** + * Create a provider struct for the given email address. + * + * The provider is extracted from the email address and it's information is returned. + * + * @param email The user's email address to extract the provider info form. + * @return a dc_provider_t struct which can be used with the dc_provider_get_* + * accessor functions. If no provider info is found, NULL will be + * returned. + */ +dc_provider_t* dc_provider_new_from_email (char* email); + +/** + * URL of the overview page. + * + * This URL allows linking to the providers page on providers.delta.chat. + * + * @param provider The dc_provider_t struct. + * @return A string which must be free()d. + */ +char* dc_provider_get_overview_page (const dc_provider_t* provider); + +/** + * The provider's name. + * + * The name of the provider, e.g. "POSTEO". + * + * @param provider The dc_provider_t struct. + * @return A string which must be free()d. + */ +char* dc_provider_get_name (const dc_provider_t* provider); + +/** + * The markdown content of the providers page. + * + * This contains the preparation steps or additional information if the status + * is DC_PROVIDER_STATUS_BROKEN. + * + * @param provider The dc_provider_t struct. + * @return A string which must be free()d. + */ +char* dc_provider_get_markdown (const dc_provider_t* provider); + +/** + * Date of when the state was last checked/updated. + * + * This is returned as a string. + * + * @param provider The dc_provider_t struct. + * @return A string which must be free()d. + */ +char* dc_provider_get_status_date (const dc_provider_t* provider); + +/** + * Whether DC works with this provider. + * + * Can be one of @ref DC_PROVIDER_STATUS_OK, @ref + * DC_PROVIDER_STATUS_PREPARATION and @ref DC_PROVIDER_STATUS_BROKEN. + * + * @param provider The dc_provider_t struct. + * @return The status as a constant number. + */ +int dc_provider_get_status (const dc_provider_t* provider); + +/** + * Free the provider info struct. + * + * @param provider The dc_provider_t struct. + */ +void dc_provider_unref (const dc_provider_t* provider); + +/** + * Provider status returned by dc_provider_get_status(). + * + * Works right out of the box without any preperation steps needed + */ +#define DC_PROVIDER_STATUS_OK 1 + +/** + * Provider status returned by dc_provider_get_status(). + * + * Works, but preparation steps are needed + */ +#define DC_PROVIDER_STATUS_PREPARATION 2 + +/** + * Provider status returned by dc_provider_get_status(). + * + * Doesn't work (too unstable to use falls also in this category) + */ +#define DC_PROVIDER_STATUS_BROKEN 3 // connect diff --git a/deltachat-ffi/src/lib.rs b/deltachat-ffi/src/lib.rs index 9db32d115..7486e91f1 100644 --- a/deltachat-ffi/src/lib.rs +++ b/deltachat-ffi/src/lib.rs @@ -2813,6 +2813,8 @@ fn as_opt_str<'a>(s: *const libc::c_char) -> Option<&'a str> { Some(dc_tools::as_str(s)) } +pub mod providers; + pub trait ResultExt { fn unwrap_or_log_default(self, context: &context::Context, message: &str) -> T; fn log_err(&self, context: &context::Context, message: &str); diff --git a/deltachat-ffi/src/providers.rs b/deltachat-ffi/src/providers.rs new file mode 100644 index 000000000..9c235984b --- /dev/null +++ b/deltachat-ffi/src/providers.rs @@ -0,0 +1,92 @@ +extern crate deltachat_provider_overview; + +use std::ptr; + +use deltachat::dc_tools::{as_str, StrExt}; +use deltachat_provider_overview::StatusState; + +#[no_mangle] +pub type dc_provider_t = deltachat_provider_overview::Provider; + +#[no_mangle] +pub unsafe extern "C" fn dc_provider_new_from_domain( + domain: *const libc::c_char, +) -> *const dc_provider_t { + match deltachat_provider_overview::get_provider_info(as_str(domain)) { + Some(provider) => provider, + None => ptr::null(), + } +} + +#[no_mangle] +pub unsafe extern "C" fn dc_provider_new_from_email( + email: *const libc::c_char, +) -> *const dc_provider_t { + let domain = deltachat_provider_overview::get_domain_from_email(as_str(email)); + match deltachat_provider_overview::get_provider_info(domain) { + Some(provider) => provider, + None => ptr::null(), + } +} + +macro_rules! null_guard { + ($context:tt) => { + if $context.is_null() { + return ptr::null_mut() as *mut libc::c_char; + } + }; +} + +#[no_mangle] +pub unsafe extern "C" fn dc_provider_get_overview_page( + provider: *const dc_provider_t, +) -> *mut libc::c_char { + null_guard!(provider); + format!( + "{}/{}", + deltachat_provider_overview::PROVIDER_OVERVIEW_URL, + (*provider).overview_page + ) + .strdup() +} + +#[no_mangle] +pub unsafe extern "C" fn dc_provider_get_name(provider: *const dc_provider_t) -> *mut libc::c_char { + null_guard!(provider); + (*provider).name.strdup() +} + +#[no_mangle] +pub unsafe extern "C" fn dc_provider_get_markdown( + provider: *const dc_provider_t, +) -> *mut libc::c_char { + null_guard!(provider); + (*provider).markdown.strdup() +} + +#[no_mangle] +pub unsafe extern "C" fn dc_provider_get_status_date( + provider: *const dc_provider_t, +) -> *mut libc::c_char { + null_guard!(provider); + (*provider).status.date.strdup() +} + +#[no_mangle] +pub unsafe extern "C" fn dc_provider_get_status(provider: *const dc_provider_t) -> u32 { + if provider.is_null() { + return 0; + } + match (*provider).status.state { + StatusState::OK => 1, + StatusState::PREPARATION => 2, + StatusState::BROKEN => 3, + } +} + +#[no_mangle] +pub unsafe extern "C" fn dc_provider_unref(_provider: *const dc_provider_t) { + () +} + +// TODO expose general provider overview url? diff --git a/python/src/deltachat/const.py b/python/src/deltachat/const.py index 391747afe..534510b5e 100644 --- a/python/src/deltachat/const.py +++ b/python/src/deltachat/const.py @@ -8,6 +8,9 @@ from os.path import join as joinpath # this works well when you in a git-checkout # run "python deltachat/const.py" to regenerate events # begin const generated +DC_PROVIDER_STATUS_OK = 1 +DC_PROVIDER_STATUS_PREPARATION = 2 +DC_PROVIDER_STATUS_BROKEN = 3 DC_GCL_ARCHIVED_ONLY = 0x01 DC_GCL_NO_SPECIALS = 0x02 DC_GCL_ADD_ALLDONE_HINT = 0x04 @@ -84,7 +87,8 @@ DC_EVENT_IS_OFFLINE = 2081 def read_event_defines(f): - rex = re.compile(r'#define\s+((?:DC_EVENT_|DC_QR|DC_MSG|DC_STATE_|DC_CONTACT_ID_|DC_GCL|DC_CHAT)\S+)\s+([x\d]+).*') + rex = re.compile(r'#define\s+((?:DC_EVENT_|DC_QR|DC_MSG|DC_STATE_|' + r'DC_CONTACT_ID_|DC_GCL|DC_CHAT|DC_PROVIDER)\S+)\s+([x\d]+).*') for line in f: m = rex.match(line) if m: diff --git a/python/src/deltachat/provider.py b/python/src/deltachat/provider.py new file mode 100644 index 000000000..ad98daf96 --- /dev/null +++ b/python/src/deltachat/provider.py @@ -0,0 +1,67 @@ +"""Provider info class.""" + +from .capi import ffi, lib +from .cutil import as_dc_charpointer, from_dc_charpointer + + +class ProviderNotFoundError(Exception): + """The provider information was not found.""" + + +class Provider(object): + """Provider information. + + :param domain: The domain to get the provider info for, this is + normally the part following the `@` of the domain. + """ + + def __init__(self, domain): + provider = ffi.gc( + lib.dc_provider_new_from_domain(as_dc_charpointer(domain)), + lib.dc_provider_unref, + ) + if provider == ffi.NULL: + raise ProviderNotFoundError("Provider not found") + self._provider = provider + + @classmethod + def from_email(cls, email): + """Create provider info from an email address. + + :param email: Email address to get provider info for. + """ + return cls(email.split('@')[-1]) + + @property + def overview_page(self): + """URL to the overview page of the provider on providers.delta.chat.""" + return from_dc_charpointer( + lib.dc_provider_get_overview_page(self._provider)) + + @property + def name(self): + """The name of the provider.""" + return from_dc_charpointer(lib.dc_provider_get_name(self._provider)) + + @property + def markdown(self): + """Content of the information page, formatted as markdown.""" + return from_dc_charpointer( + lib.dc_provider_get_markdown(self._provider)) + + @property + def status_date(self): + """The date the provider info was last updated, as a string.""" + return from_dc_charpointer( + lib.dc_provider_get_status_date(self._provider)) + + @property + def status(self): + """The status of the provider information. + + This is one of the + :attr:`deltachat.const.DC_PROVIDER_STATUS_OK`, + :attr:`deltachat.const.DC_PROVIDER_STATUS_PREPARATION` or + :attr:`deltachat.const.DC_PROVIDER_STATUS_BROKEN` constants. + """ + return lib.dc_provider_get_status(self._provider) diff --git a/python/tests/test_lowlevel.py b/python/tests/test_lowlevel.py index 9c13dcdd5..f824fb4ef 100644 --- a/python/tests/test_lowlevel.py +++ b/python/tests/test_lowlevel.py @@ -1,5 +1,5 @@ from __future__ import print_function -from deltachat import capi, const, set_context_callback, clear_context_callback +from deltachat import capi, cutil, const, set_context_callback, clear_context_callback from deltachat.capi import ffi from deltachat.capi import lib from deltachat.account import EventLogger @@ -83,3 +83,18 @@ def test_markseen_invalid_message_ids(acfactory): msg_ids = [9] lib.dc_markseen_msgs(ac1._dc_context, msg_ids, len(msg_ids)) ac1._evlogger.ensure_event_not_queued("DC_EVENT_WARNING|DC_EVENT_ERROR") + + +def test_provider_info(): + provider = lib.dc_provider_new_from_email(cutil.as_dc_charpointer("ex@example.com")) + assert cutil.from_dc_charpointer( + lib.dc_provider_get_overview_page(provider) + ) == "https://providers.delta.chat/example.com" + assert cutil.from_dc_charpointer(lib.dc_provider_get_name(provider)) == "Example" + assert cutil.from_dc_charpointer(lib.dc_provider_get_markdown(provider)) == "\n..." + assert cutil.from_dc_charpointer(lib.dc_provider_get_status_date(provider)) == "2018-09" + assert lib.dc_provider_get_status(provider) == const.DC_PROVIDER_STATUS_PREPARATION + + +def test_provider_info_none(): + assert lib.dc_provider_new_from_email(cutil.as_dc_charpointer("email@unexistent.no")) == ffi.NULL diff --git a/python/tests/test_provider_info.py b/python/tests/test_provider_info.py new file mode 100644 index 000000000..10c9fb27d --- /dev/null +++ b/python/tests/test_provider_info.py @@ -0,0 +1,27 @@ +import pytest + +from deltachat import const +from deltachat import provider + + +def test_provider_info_from_email(): + example = provider.Provider.from_email("email@example.com") + assert example.overview_page == "https://providers.delta.chat/example.com" + assert example.name == "Example" + assert example.markdown == "\n..." + assert example.status_date == "2018-09" + assert example.status == const.DC_PROVIDER_STATUS_PREPARATION + + +def test_provider_info_from_domain(): + example = provider.Provider("example.com") + assert example.overview_page == "https://providers.delta.chat/example.com" + assert example.name == "Example" + assert example.markdown == "\n..." + assert example.status_date == "2018-09" + assert example.status == const.DC_PROVIDER_STATUS_PREPARATION + + +def test_provider_info_none(): + with pytest.raises(provider.ProviderNotFoundError): + provider.Provider.from_email("email@unexistent.no")