feat: cache mailbox list for 10 minutes and show progress on initial fetch

- Add 10-minute cache after fetching mailbox list from mail accounts
- Display progress during initial mailbox retrieval
- Prevent timeouts when handling large mailbox lists
This commit is contained in:
rustmailer
2026-05-14 20:01:45 +08:00
parent 1682f21cf7
commit 6b6f11e4c1
10 changed files with 319 additions and 36 deletions
+2 -3
View File
@@ -19,9 +19,8 @@
use crate::common::auth::WrappedContext;
use crate::rest::api::ApiTags;
use crate::rest::ApiResult;
use bichon_core::cache::imap::mailbox::MailBox;
use bichon_core::mailbox::delete::delete_mailbox_impl;
use bichon_core::mailbox::list::get_account_mailboxes;
use bichon_core::mailbox::list::{get_account_mailboxes, MailboxListResponse};
use bichon_core::users::permissions::Permission;
use poem_openapi::param::{Path, Query};
use poem_openapi::payload::Json;
@@ -51,7 +50,7 @@ impl MailBoxApi {
account_id: Path<u64>,
remote: Query<Option<bool>>,
context: WrappedContext,
) -> ApiResult<Json<Vec<MailBox>>> {
) -> ApiResult<Json<MailboxListResponse>> {
let account_id = account_id.0;
context.require_permission(Some(account_id), Permission::ACCOUNT_READ_DETAILS)?;
let remote = remote.0.unwrap_or(false);