mirror of
https://github.com/chatmail/core.git
synced 2026-04-17 21:46:35 +03:00
api: cffi: add dc_accounts_background_fetch_with_timeout
This commit is contained in:
@@ -3151,6 +3151,20 @@ void dc_accounts_maybe_network (dc_accounts_t* accounts);
|
|||||||
void dc_accounts_maybe_network_lost (dc_accounts_t* accounts);
|
void dc_accounts_maybe_network_lost (dc_accounts_t* accounts);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform a Background fetch for all accounts in parallel with a timeout.
|
||||||
|
* Pauses the scheduler, fetches messages from imap and then resumes the scheduler.
|
||||||
|
*
|
||||||
|
* dc_accounts_background_fetch_with_timeout() was created for the iOS Background fetch.
|
||||||
|
*
|
||||||
|
* @memberof dc_accounts_t
|
||||||
|
* @param timeout The timeout in seconds
|
||||||
|
* @return Return 1 on success and 0 on failure (like timeout)
|
||||||
|
* But note that this only indicates that the fetch of all accounts was done before the timeout.
|
||||||
|
* To know wether it worked you need to look for the events.
|
||||||
|
*/
|
||||||
|
int dc_accounts_background_fetch_with_timeout (dc_accounts_t* accounts, uint64_t timeout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create the event emitter that is used to receive events.
|
* Create the event emitter that is used to receive events.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -4898,6 +4898,34 @@ pub unsafe extern "C" fn dc_accounts_maybe_network_lost(accounts: *mut dc_accoun
|
|||||||
block_on(async move { accounts.write().await.maybe_network_lost().await });
|
block_on(async move { accounts.write().await.maybe_network_lost().await });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn dc_accounts_background_fetch_with_timeout(
|
||||||
|
accounts: *mut dc_accounts_t,
|
||||||
|
timeout_in_seconds: u64,
|
||||||
|
) -> libc::c_int {
|
||||||
|
if accounts.is_null() || timeout_in_seconds <= 2 {
|
||||||
|
eprintln!("ignoring careless call to dc_accounts_background_fetch_with_timeout()");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
let accounts = &*accounts;
|
||||||
|
block_on(async move {
|
||||||
|
let accounts = accounts.write().await;
|
||||||
|
match accounts
|
||||||
|
.background_fetch_with_timeout(Duration::from_secs(timeout_in_seconds))
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Ok(()) => 1,
|
||||||
|
Err(err) => {
|
||||||
|
accounts.emit_event(EventType::Error(format!(
|
||||||
|
"Failed to do background fetch: {err:#}"
|
||||||
|
)));
|
||||||
|
0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn dc_accounts_get_event_emitter(
|
pub unsafe extern "C" fn dc_accounts_get_event_emitter(
|
||||||
accounts: *mut dc_accounts_t,
|
accounts: *mut dc_accounts_t,
|
||||||
|
|||||||
Reference in New Issue
Block a user