diff --git a/Cargo.lock b/Cargo.lock index 4faf9e901..e50068d3b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -507,6 +507,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=e52d915c05232c40284387bfe13862c6a2293060#e52d915c05232c40284387bfe13862c6a2293060" +dependencies = [ + "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.99 (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" @@ -520,9 +532,11 @@ 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=e52d915c05232c40284387bfe13862c6a2293060)", "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)", + "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -791,6 +805,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" @@ -2733,6 +2752,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" @@ -2807,6 +2834,7 @@ dependencies = [ "checksum darling 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fcfbcb0c5961907597a7d1148e3af036268f2b773886b8bb3eeb1e1281d3d3d6" "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 deltachat-provider-overview 0.1.0 (git+https://github.com/deltachat/provider-overview?rev=e52d915c05232c40284387bfe13862c6a2293060)" = "" "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" @@ -2841,6 +2869,7 @@ dependencies = [ "checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" "checksum getrandom 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "2512b3191f22e2763a5db387f1c9409379772e2050841722eb4a8c4f497bf096" "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" @@ -3051,5 +3080,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..6e5eb69ee 100644 --- a/deltachat-ffi/Cargo.toml +++ b/deltachat-ffi/Cargo.toml @@ -20,6 +20,9 @@ libc = "0.2" human-panic = "1.0.1" num-traits = "0.2.6" +deltachat-provider-overview = { git = "https://github.com/deltachat/provider-overview", rev = "e52d915c05232c40284387bfe13862c6a2293060" } +serde_json = "1.0" + [features] default = ["vendored", "nightly", "ringbuf"] vendored = ["deltachat/vendored"] diff --git a/deltachat-ffi/deltachat.h b/deltachat-ffi/deltachat.h index e932bf830..328fd6f98 100644 --- a/deltachat-ffi/deltachat.h +++ b/deltachat-ffi/deltachat.h @@ -441,7 +441,11 @@ char* dc_get_info (dc_context_t* context); */ char* dc_get_oauth2_url (dc_context_t* context, const char* addr, const char* redirect_uri); +/** + * Get the provider information from our provider overview as json object. + */ +char* dc_get_json_provider_info_from_email (char* email); // connect diff --git a/deltachat-ffi/src/lib.rs b/deltachat-ffi/src/lib.rs index deaa39840..d5084d234 100644 --- a/deltachat-ffi/src/lib.rs +++ b/deltachat-ffi/src/lib.rs @@ -16,6 +16,8 @@ use std::convert::TryInto; use std::ptr; use std::str::FromStr; +extern crate deltachat_provider_overview; + use deltachat::contact::Contact; use deltachat::dc_tools::{as_str, dc_strdup, StrExt}; use deltachat::*; @@ -2530,6 +2532,20 @@ fn as_opt_str<'a>(s: *const libc::c_char) -> Option<&'a str> { Some(dc_tools::as_str(s)) } +#[no_mangle] +pub unsafe extern "C" fn dc_get_json_provider_info_from_email ( + email: *const libc::c_char, +) -> *mut libc::c_char { + let option = deltachat_provider_overview::get_provider_info( + deltachat_provider_overview::get_domain_from_email(dc_tools::as_str(email)), + ); + if let Some(provider) = option { + serde_json::to_string(provider.0).unwrap().strdup() + } else { + dc_strdup(ptr::null()) + } +} + 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/python/tests/test_lowlevel.py b/python/tests/test_lowlevel.py index d0061afef..25a233583 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 @@ -75,3 +75,10 @@ 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(): + example = cutil.from_dc_charpointer( + lib.dc_get_json_provider_info_from_email(cutil.as_dc_charpointer("ex@example.com")) + ) + assert example == "{\"overview_page\":\"example.com\",\"name\":\"Example\",\"status\":{\"state\":\"PREPARATION\",\"date\":\"2018-09\"},\"markdown\":\"\\n...\"}" \ No newline at end of file