Add server-side IMAP search

Search previously only filtered the cached inbox. Now a query also runs an IMAP SEARCH
on the server and folds the matches into the cache, so messages beyond the synced
window surface in the results.

- ImapClient.search(query) ORs SUBJECT/FROM/BODY terms and fetches matching headers
  (extracted a shared toFetchedMessage mapper, reused by fetchRecentInbox).
- MailRepository.searchServer inserts/updates matches into the message cache (no
  pruning); MailboxViewModel triggers it from a debounced, deduplicated search query.
- assemble/test/lint green, including a new ImapClient test asserting SEARCH returns
  only the matching message against GreenMail.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-27 17:00:28 -05:00
co-authored by Claude Opus 4.8
parent f65226a4d2
commit 57b628f90f
6 changed files with 99 additions and 15 deletions
+1 -1
View File
@@ -18,7 +18,7 @@ experience with power-user features tucked under an **Advanced Settings** group.
> foreground **IMAP IDLE** service; **attachments** — downloaded on demand and opened in a
> system viewer, and attach files when composing; **multiple accounts** — a unified inbox
> with per-account filtering; and
> **search** across cached mail. Outlook Graph send is upcoming.
> **search** across cached mail and the server (IMAP SEARCH). Outlook Graph send is upcoming.
## Features (target MVP)