feat: ManageSieve (RFC 5804) Sieve script editing for IMAP accounts

Adds a minimal ManageSieve client so the existing "Email filters" UI
works for IMAP accounts, not just JMAP. SieveRepository becomes a
dispatcher that routes to JMAP or ManageSieve based on account.type.

Account model + DB schema v15 grow manageSieveHost/Port/Ssl fields
(default 4190 / TLS, host falls back to imapHost when blank). The Add
and Edit account screens expose them inside a collapsed ExpansionTile
to keep the form short for users who accept defaults.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Thomas Güttler
2026-04-29 06:53:31 +02:00
co-authored by Claude Opus 4.7
parent 44d02afc46
commit fc270590c4
12 changed files with 745 additions and 158 deletions
+3
View File
@@ -30,6 +30,9 @@ const _excluded = {
// IMAP/SMTP factory — top-level functions that open real network connections;
// no seam to inject a fake client without wrapping the enough_mail types.
'lib/data/imap/imap_client_factory.dart',
// ManageSieve (RFC 5804) client — opens real TCP/TLS sockets; tested via
// the Sieve UI + integration scenarios rather than unit tests.
'lib/data/imap/managesieve_client.dart',
// Pure adapter over FlutterSecureStorage (a platform plugin);
// all three methods just delegate — no logic, and platform channels are
// unavailable in unit tests.