fix(mail): sync Object error, MIME subject decoding, sticky compact pagination

- Fix sync error: backend returns {synced, error?} not {success, synced_count}; frontend now checks error field
- Decode MIME encoded-words (=?UTF-8?Q?...?=) in backend during IMAP sync for subject/from/to/cc headers
- Add frontend decodeMimeHeader() utility for already-stored encoded subjects (MailList + MailDetail)
- Make pagination sticky at bottom of mail list (flex-col h-full, ul scrolls, pagination flex-shrink-0)
- Make pagination compact: smaller padding (px-1.5 py-0.5), text-xs, smaller icons, tighter spacing
This commit is contained in:
Agent Zero
2026-07-16 09:40:59 +02:00
parent 560e4ac69d
commit 2a80aeb0af
6 changed files with 92 additions and 39 deletions
+15 -4
View File
@@ -707,11 +707,22 @@ async def imap_sync_account(
else:
body_text = decoded
from email.header import decode_header, make_header
def _decode_mime_header(value: str) -> str:
"""Decode MIME encoded-words (=?UTF-8?Q?...?=) to readable text."""
if not value:
return ""
try:
return str(make_header(decode_header(value)))
except Exception:
return value
message_id = msg.get("Message-ID", make_msgid())
subject = msg.get("Subject", "")
from_addr = msg.get("From", "")
to_addrs = msg.get("To", "")
cc_addrs = msg.get("Cc", "")
subject = _decode_mime_header(msg.get("Subject", ""))
from_addr = _decode_mime_header(msg.get("From", ""))
to_addrs = _decode_mime_header(msg.get("To", ""))
cc_addrs = _decode_mime_header(msg.get("Cc", ""))
refs = msg.get("References", "")
in_reply_to = msg.get("In-Reply-To")
date_str = msg.get("Date", "")