feat: live IMAP sync on folder select + 60s auto-sync interval
- New imap_sync_folder function: syncs single folder quickly for live use
- New POST /mail/folders/{folder_id}/sync route
- Frontend: syncFolder API + called on every folder selection
- Auto-sync interval reduced from 300s to 60s
- Sent mail IMAP APPEND already uploads full body via msg.as_bytes()
This commit is contained in:
@@ -481,6 +481,10 @@ export function emptyFolder(folderId: string): Promise<{ emptied_count: number }
|
||||
return apiPost<{ emptied_count: number }>(`/mail/folders/${folderId}/empty`, {});
|
||||
}
|
||||
|
||||
export function syncFolder(folderId: string): Promise<{ synced: number; error?: string }> {
|
||||
return apiPost<{ synced: number; error?: string }>(`/mail/folders/${folderId}/sync`, {});
|
||||
}
|
||||
|
||||
// ─── Mails ──────────────────────────────────────────────────────────────────
|
||||
|
||||
export function fetchMails(folderId: string, page: number, sortBy?: string, sortOrder?: string): Promise<MailListResult> {
|
||||
|
||||
@@ -35,6 +35,7 @@ import {
|
||||
saveDraft,
|
||||
updateDraft,
|
||||
triggerSync,
|
||||
syncFolder,
|
||||
type MailAccount,
|
||||
type MailFolder,
|
||||
type Mail,
|
||||
@@ -168,7 +169,7 @@ export function MailPage() {
|
||||
loadMails();
|
||||
}, [loadMails]);
|
||||
|
||||
// Handle folder selection — derive account from folder
|
||||
// Handle folder selection — derive account from folder + trigger live IMAP sync
|
||||
const handleSelectFolder = useCallback(
|
||||
(folderId: string) => {
|
||||
setSelectedFolderId(folderId);
|
||||
@@ -181,8 +182,13 @@ export function MailPage() {
|
||||
setSelectedMail(null);
|
||||
setSelectedMailIds(new Set());
|
||||
setActiveView('list');
|
||||
// Live sync: fetch new mails from IMAP server immediately
|
||||
syncFolder(folderId).then(() => {
|
||||
loadMails();
|
||||
loadAllFolders();
|
||||
}).catch(() => {});
|
||||
},
|
||||
[folders],
|
||||
[folders, loadMails, loadAllFolders],
|
||||
);
|
||||
|
||||
// Handle mail selection
|
||||
|
||||
Reference in New Issue
Block a user