Compare commits

...

3 Commits

Author SHA1 Message Date
link2xt
1f41177da1 fix: do not ignore resync_folders 2025-07-19 10:35:57 +00:00
link2xt
dc63340471 fix: do not ignore update_recent_quota errors 2025-07-17 20:03:41 +00:00
link2xt
ad13477754 fix: bubble up QUOTA errors 2025-07-17 20:01:46 +00:00
3 changed files with 20 additions and 15 deletions

View File

@@ -594,9 +594,9 @@ impl Context {
.quota_needs_update(DC_BACKGROUND_FETCH_QUOTA_CHECK_RATELIMIT)
.await
{
if let Err(err) = self.update_recent_quota(&mut session).await {
warn!(self, "Failed to update quota: {err:#}.");
}
self.update_recent_quota(&mut session)
.await
.context("Failed to update quota")?;
}
}

View File

@@ -124,14 +124,16 @@ impl Context {
/// in case for some providers the quota is always at ~100%
/// and new space is allocated as needed.
pub(crate) async fn update_recent_quota(&self, session: &mut ImapSession) -> Result<()> {
info!(self, "Updating IMAP quota.");
let quota = if session.can_check_quota() {
let folders = get_watched_folders(self).await?;
get_unique_quota_roots_and_usage(session, folders).await
Some(get_unique_quota_roots_and_usage(session, folders).await?)
} else {
Err(anyhow!(stock_str::not_supported_by_provider(self).await))
None
};
if let Ok(quota) = &quota {
let recent = if let Some(quota) = &quota {
match get_highest_usage(quota) {
Ok((highest, _, _)) => {
if needs_quota_warning(
@@ -153,10 +155,13 @@ impl Context {
}
Err(err) => warn!(self, "cannot get highest quota usage: {:#}", err),
}
}
Ok(quota)
} else {
Err(anyhow!(stock_str::not_supported_by_provider(self).await))
};
*self.quota.write().await = Some(QuotaInfo {
recent: quota,
recent: recent.cloned(),
modified: tools::Time::now(),
});

View File

@@ -481,17 +481,17 @@ async fn inbox_fetch_idle(ctx: &Context, imap: &mut Imap, mut session: Session)
// Update quota no more than once a minute.
if ctx.quota_needs_update(60).await {
if let Err(err) = ctx.update_recent_quota(&mut session).await {
warn!(ctx, "Failed to update quota: {:#}.", err);
}
ctx.update_recent_quota(&mut session)
.await
.context("Failed to update quota")?;
}
let resync_requested = ctx.resync_request.swap(false, Ordering::Relaxed);
if resync_requested {
if let Err(err) = session.resync_folders(ctx).await {
warn!(ctx, "Failed to resync folders: {:#}.", err);
ctx.resync_request.store(true, Ordering::Relaxed);
}
session
.resync_folders(ctx)
.await
.context("resync_folders")?;
}
maybe_add_time_based_warnings(ctx).await;