IMAP connection reuse across sync cycle (v1.12.0)
Details
Add ConnectForSessionAsync to ImapSyncService returning a persistent
ImapClient. Add overloads for SyncFoldersAsync, FetchNewHeadersAsync,
and FetchHeadersBatchedAsync accepting an existing ImapClient. Update
EmailSyncManager.SyncSingleAccountAsync to open one connection at the
start and reuse it across folder sync and message fetch. Reduces
connections from 15+ (one per folder) to 1 per sync cycle. Existing
standalone methods preserved for on-demand operations.
HTML message renderer with sender trust gate (v1.11.0)
Details
Add HtmlSanitizer using HtmlAgilityPack: parses email HTML into safe
RenderBlock records (paragraphs, headings, links, lists, blockquotes,
preformatted text). Strips scripts, styles, iframes, objects, event
handlers, and external images. HtmlMessageRenderer TemplatedControl
renders sanitized HTML as composed Avalonia controls when sender is
trusted, plain text otherwise. Links open in system browser. Trust
banner in ReadingPaneView offers "Trust sender", "Trust domain", and
"Open in Browser" (writes HTML to temp file). Added HtmlAgilityPack
package dependency.
Add sender trust whitelist for HTML content gating (v1.10.0)
Details
Introduce SenderTrustList model (address + domain sets) persisted via
IPluginSettings. SenderTrustService provides IsTrusted, TrustAddress,
TrustDomain, and RevokeTrust operations. ViewModel exposes IsSenderTrusted
computed property updated on message selection, plus TrustSenderCommand
and TrustDomainCommand. Wired into plugin lifecycle. Prepares for HTML
renderer trust gate in next commit.
Streaming batched sync with real-time UI updates (v1.9.0)
Details
Add FetchHeadersBatchedAsync to ImapSyncService for initial sync: fetches
all UIDs, reverse-sorts newest-first, fetches in batches of 50 with
IProgress<List<EmailMessage>> callback. EmailSyncManager fires
MessageBatchSynced event per batch, persisting each batch immediately.
ViewModel inserts new messages at correct sorted position in real-time.
Add sync progress bar with "Syncing: X of Y messages..." indicator.
Incremental sync (subsequent syncs) remains unchanged.
Paginated message loading with virtual scrolling (v1.8.0)
Details
Replace load-all-messages with paginated loading using SDK limit/offset
parameters (50 messages per page). Add VirtualizingStackPanel to ListBox
for efficient rendering of only visible items. Auto-load next page when
user scrolls past 80% depth. Add explicit "Load more messages" button as
fallback. Add CountMessagesAsync to EntityService via SDK CountAsync.
Get notified about new releases