Email v1.18.0: Drag-and-drop to folders, server-side IMAP search
Details
Phase 3 of full-featured email client implementation:
- New ImapSyncService.Search.cs: server-side search using MailKit SearchQuery
combinators (SubjectContains, BodyContains, FromContains, ToContains,
DeliveredAfter/Before, NotSeen) with results capped at configurable max
and fetched as headers sorted newest-first
- New EmailSearchCriteria model: Text, From, To, After, Before,
HasAttachments, IsUnread, MaxResults fields for structured search
- New EmailViewModel.Search.cs: IsServerSearch toggle, 300ms debounced
ExecuteServerSearchAsync that calls IMAP search when online, falls back
to client-side ApplyFilters on error or when offline/empty query
- Updated OnSearchQueryChanged to route through server search when enabled
- Drag-and-drop: message list items can be dragged to sidebar folder buttons
(both system folders and labels), using custom "privstack-email-uids"
data format with 8px minimum drag distance to prevent accidental drags
- Drop handler validates target folder (prevents same-folder and cross-account
drops), executes BulkMoveAsync + local entity cleanup via HandleDropMoveAsync
- DragDrop.AllowDrop="True" on both system folder and label sidebar buttons
with Tag="{Binding}" for folder identification during drop
Email v1.17.0: Multi-select, bulk operations, keyboard shortcuts
Details
Phase 2 of full-featured email client implementation:
- New EmailViewModel.BulkActions.cs: bulk delete (permanent in trash, move
to trash elsewhere), bulk archive, bulk mark read/unread, bulk star toggle,
select all/deselect all commands using BulkMoveAsync/BulkSetFlagsAsync
for single-connection efficiency
- Multi-select in message list: ListBox SelectionMode="Multiple" with
SelectionChanged handler that populates SelectedMessages collection
and notifies HasMultipleSelected/SelectedCount properties
- Bulk action bar in EmailView: conditional bar above message list showing
selected count with Select All/Deselect, Mark Read, Star, Archive,
Move to..., Delete buttons — replaces folder header when active
- Keyboard shortcuts: Delete/Backspace (delete), E (archive), R (reply),
Cmd+R (reply all), F (forward), N (compose), U (toggle read), S (star),
J/Down (next message), K/Up (previous message), Escape (deselect all)
— all bulk-aware when multiple messages are selected
- TextBox focus guard prevents shortcuts from firing during text input
Email v1.16.0: Folder management, move to folder, trash permanent delete
Details
Phase 1 of full-featured email client implementation:
- Split EmailViewModel.MessageActions.cs (439 lines) into MessageActions.cs (~165 lines)
and Internal.cs (~195 lines) for 250-line compliance
- Split EmailViewModel.Commands.cs (366 lines) into Commands.cs (~140 lines)
and Sync.cs (~170 lines) for 250-line compliance
- New ImapSyncService.FolderOps.cs: IMAP folder CRUD (create, rename, delete),
bulk move (BulkMoveAsync), permanent expunge (ExpungeAsync), bulk flag
set/clear (BulkSetFlagsAsync) using UID sets for efficiency
- New EmailViewModel.FolderManagement.cs: folder picker overlay state,
move-to-folder commands (single and bulk), inline folder create/rename/delete
with IMAP sync and local entity updates
- New FolderPickerOverlay.axaml: modal dialog showing all folders with filter
textbox for quick folder selection when moving messages
- Fix permanent delete in Trash: DeleteMessageAsync now calls ExpungeAsync
(flag Deleted + expunge) when in Trash folder instead of silently moving
to Trash again
- Sidebar folder context menus: right-click labels for Rename/Delete, "+"
button next to LABELS header for inline folder creation
- Message context menu: added "Move to..." option that opens folder picker
- Added SelectedMessages collection and HasMultipleSelected/SelectedCount
computed properties for future multi-select support
Reading pane polish + trust list management (v1.15.0)
Details
Restructure reading pane layout with distinct sections: full-width header
with bottom border, full-width trust banner, and white-background email body
area with centered max-width content. Trust banner now dismisses immediately
after clicking trust sender/domain by notifying ShowTrustBanner and
HasHtmlContent properties.
Add granular trust management: SenderTrustService gains GetTrustList(),
RevokeAddressTrust(), and RevokeDomainTrust() methods. AccountSettingsViewModel
now accepts the trust service and exposes TrustedAddresses/TrustedDomains
collections with remove commands. AccountSettingsOverlay shows a "Trusted
Senders" section between Signature and Server Settings with per-entry remove
buttons and an empty state message.
Add deep-link navigation for contact groups and companies (v1.8.0)
Details
Clicking a contact_group or company node in the neuron graph or info panel
title now navigates to the correct sub-view in the Contacts plugin. Previously
only the primary "contact" link type was routed, causing silent navigation
failures for the other two entity types.
Implemented IDeepLinkTarget.SupportedLinkTypes returning all three entity types,
added NavigateToEntityAsync dispatcher, SelectGroupByIdAsync, SelectCompanyByIdAsync,
and GetGroupAsync service method.
Get notified about new releases