diff --git a/Cargo.lock b/Cargo.lock index 4faf9e901..00a5062ff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -507,6 +507,17 @@ 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" +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 +531,11 @@ name = "deltachat_ffi" version = "1.0.0-alpha.4" dependencies = [ "deltachat 1.0.0-alpha.4", + "deltachat-provider-overview 0.1.0", "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 +804,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 +2751,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" @@ -2841,6 +2867,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 +3078,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..560373ed4 100644 --- a/deltachat-ffi/Cargo.toml +++ b/deltachat-ffi/Cargo.toml @@ -20,6 +20,10 @@ libc = "0.2" human-panic = "1.0.1" num-traits = "0.2.6" +deltachat-provider-overview = { path = "../../../deltachat-provider-overview" } +# serde = { version = "1.0", features = ["derive"] } +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..e3c33c16b 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,19 @@ fn as_opt_str<'a>(s: *const libc::c_char) -> Option<&'a str> { Some(dc_tools::as_str(s)) } +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);