mirror of
https://github.com/chatmail/core.git
synced 2026-05-03 05:16:28 +03:00
Emit DC_EVENT_ACCOUNTS_BACKGROUND_FETCH_DONE even on timeout
Otherwise if there is a timeout, UI will wait for DC_EVENT_ACCOUNTS_BACKGROUND_FETCH_DONE forever.
This commit is contained in:
@@ -3157,15 +3157,14 @@ void dc_accounts_maybe_network_lost (dc_accounts_t* accounts);
|
|||||||
*
|
*
|
||||||
* dc_accounts_background_fetch() was created for the iOS Background fetch.
|
* dc_accounts_background_fetch() was created for the iOS Background fetch.
|
||||||
*
|
*
|
||||||
* The `DC_EVENT_ACCOUNTS_BACKGROUND_FETCH_DONE` event is emitted at the end,
|
* The `DC_EVENT_ACCOUNTS_BACKGROUND_FETCH_DONE` event is emitted at the end
|
||||||
* process all events until you get this one and you can safely return to the background
|
* even in case of timeout, unless the function fails and returns 0.
|
||||||
|
* Process all events until you get this one and you can safely return to the background
|
||||||
* without forgetting to create notifications caused by timing race conditions.
|
* without forgetting to create notifications caused by timing race conditions.
|
||||||
*
|
*
|
||||||
* @memberof dc_accounts_t
|
* @memberof dc_accounts_t
|
||||||
* @param timeout The timeout in seconds
|
* @param timeout The timeout in seconds
|
||||||
* @return Return 1 on success and 0 on failure (like timeout)
|
* @return Return 1 if DC_EVENT_ACCOUNTS_BACKGROUND_FETCH_DONE was emitted and 0 otherwise.
|
||||||
* But note that this only indicates that the fetch of all accounts was done before the timeout.
|
|
||||||
* To know whether it worked you need to look for the events.
|
|
||||||
*/
|
*/
|
||||||
int dc_accounts_background_fetch (dc_accounts_t* accounts, uint64_t timeout);
|
int dc_accounts_background_fetch (dc_accounts_t* accounts, uint64_t timeout);
|
||||||
|
|
||||||
|
|||||||
@@ -233,8 +233,9 @@ impl CommandApi {
|
|||||||
|
|
||||||
/// Performs a background fetch for all accounts in parallel with a timeout.
|
/// Performs a background fetch for all accounts in parallel with a timeout.
|
||||||
///
|
///
|
||||||
/// The `AccountsBackgroundFetchDone` event is emitted at the end,
|
/// The `AccountsBackgroundFetchDone` event is emitted at the end
|
||||||
/// process all events until you get this one and you can safely return to the background
|
/// if the method returns sucessfully, even in case of timeout.
|
||||||
|
/// Process all events until you get this one and you can safely return to the background
|
||||||
/// without forgetting to create notifications caused by timing race conditions.
|
/// without forgetting to create notifications caused by timing race conditions.
|
||||||
async fn accounts_background_fetch(&self, timeout_in_seconds: f64) -> Result<()> {
|
async fn accounts_background_fetch(&self, timeout_in_seconds: f64) -> Result<()> {
|
||||||
self.accounts
|
self.accounts
|
||||||
|
|||||||
@@ -317,10 +317,18 @@ impl Accounts {
|
|||||||
/// The `AccountsBackgroundFetchDone` event is emitted at the end,
|
/// The `AccountsBackgroundFetchDone` event is emitted at the end,
|
||||||
/// process all events until you get this one and you can safely return to the background
|
/// process all events until you get this one and you can safely return to the background
|
||||||
/// without forgetting to create notifications caused by timing race conditions.
|
/// without forgetting to create notifications caused by timing race conditions.
|
||||||
|
///
|
||||||
|
/// On error no `AccountsBackgroundFetchDone` event is emitted.
|
||||||
pub async fn background_fetch(&self, timeout: std::time::Duration) -> Result<()> {
|
pub async fn background_fetch(&self, timeout: std::time::Duration) -> Result<()> {
|
||||||
let result = tokio::time::timeout(timeout, self.background_fetch_without_timeout()).await;
|
if let Err(_err) =
|
||||||
|
tokio::time::timeout(timeout, self.background_fetch_without_timeout()).await
|
||||||
|
{
|
||||||
|
self.emit_event(EventType::Warning(
|
||||||
|
"Background fetch timed out.".to_string(),
|
||||||
|
));
|
||||||
|
}
|
||||||
self.emit_event(EventType::AccountsBackgroundFetchDone);
|
self.emit_event(EventType::AccountsBackgroundFetchDone);
|
||||||
result.map_err(|err| err.into())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Emits a single event.
|
/// Emits a single event.
|
||||||
|
|||||||
Reference in New Issue
Block a user