Compare commits

...

2 Commits

Author SHA1 Message Date
jikstra
0b03331f0d Fix spawning task and introduce ProviderInfo event 2022-03-04 12:52:43 -05:00
jikstra
420a9fbd9f Start working on fixing blocking provider info 2022-03-04 00:11:35 -05:00
2 changed files with 34 additions and 22 deletions

View File

@@ -3928,35 +3928,44 @@ pub type dc_provider_t = provider::Provider;
#[no_mangle]
pub unsafe extern "C" fn dc_provider_new_from_email(
context: *const dc_context_t,
addr: *const libc::c_char,
) -> *const dc_provider_t {
context: *mut dc_context_t,
addr: *mut libc::c_char,
) {
if context.is_null() || addr.is_null() {
eprintln!("ignoring careless call to dc_provider_new_from_email()");
return ptr::null();
return;
}
let addr = to_string_lossy(addr);
let ctx = &*context;
let socks5_enabled = block_on(async move {
ctx.get_config_bool(config::Config::Socks5Enabled)
.await
.log_err(ctx, "Can't get config")
});
match socks5_enabled {
Ok(socks5_enabled) => {
match block_on(provider::get_provider_info(
ctx,
addr.as_str(),
socks5_enabled,
)) {
Some(provider) => provider,
None => ptr::null_mut(),
let addr = to_string_lossy(addr);
spawn(async move {
let socks5_enabled = ctx.get_config_bool(config::Config::Socks5Enabled)
.await
.log_err(ctx, "Can't get config");
match socks5_enabled {
Ok(socks5_enabled) => {
match provider::get_provider_info(
ctx,
addr.as_str(),
socks5_enabled,
).await {
Some(provider) => {
// send event with provider info
},
None => {
// send event with provider info null
},
};
}
Err(err) => {
ctx.emit_event(EventType::Error(format!(
"Failed to get provider info: {:#}",
err
)));
}
}
Err(_) => ptr::null_mut(),
}
});
}
#[no_mangle]

View File

@@ -333,4 +333,7 @@ pub enum EventType {
msg_id: MsgId,
status_update_id: StatusUpdateId,
},
#[strum(props(id = "2201"))]
ProviderInfo(String),
}