11 KiB
Phase B - Mail-Adler Core Architecture Planning
Current Status (Post-Phase 4+ Cleanup)
- ✅ All video-specific dependencies removed from CMakeLists.txt
- ✅ All MLT/Video code disabled in main.cpp, mainwindow.h, mainwindow.cpp
- ✅ All Player/Playlist/Timeline references disabled (23 functions)
- ✅ Syntax validation passed
- ⏳ Full compilation testing pending (CMake/Ninja setup)
Preserved Infrastructure (Phase A+4 Success)
These components remain functional and will support mail-client operations:
Database Layer
- File:
src/database.cpp,src/database.h - Purpose: SQLite3 database persistence
- Use Case: Mail storage, account configurations, folder hierarchy
- Status: Ready to extend with mail schema
Job Queue
- File:
src/jobqueue.cpp,src/jobqueue.h - Purpose: Asynchronous task queue
- Use Case: Background mail sync, folder updates, message download
- Status: Ready for IMAP/SMTP operations
Settings System
- File:
src/settings.cpp,src/settings.h - Purpose: Application preferences persistence
- Use Case: Account credentials, UI preferences, sync intervals
- Status: Extensible for mail-specific settings
Logging
- File:
CuteLogger/module - Purpose: Debug and operation logging
- Status: Available for mail operations
UI Framework
- Base: Qt6 Widgets (already in use)
- Status: Main window, dialogs, dock widgets functional
Phase B Deliverables
1. Mail Data Model & Schema
Objective: Define mail storage structure
Components:
-
src/models/MailMessage.h/cpp- Email message entity- From, To, Subject, Body, Date, Flags (Read, Starred, Spam)
- UID, Folder ID, Account ID
- Attachments metadata
-
src/models/MailFolder.h/cpp- IMAP folder entity- Folder name, path, flags
- Read/unread counts
- Sync state tracking
-
src/models/MailAccount.h/cpp- Email account entity- IMAP server settings (host, port, auth)
- SMTP server settings
- Sync preferences (interval, folders)
-
src/database/MailSchema.h/cpp- SQLite schema- Tables: accounts, folders, messages, attachments, sync_state
- Indexes for fast queries
- Migration system
2. IMAP Client Module
Objective: Email retrieval and folder management
Components:
-
src/imap/ImapClient.h/cpp- IMAP protocol wrapper- Connection management
- Authentication (LOGIN, PLAIN, OAuth2 skeleton)
- Folder enumeration
- Message fetch (headers + body)
- UID tracking for sync
-
src/imap/ImapFolder.h/cpp- Folder operations- Folder status (EXISTS, RECENT, UNSEEN)
- Select/close operations
- Message search (by date, sender, etc.)
-
src/imap/ImapSync.h/cpp- Incremental sync engine- Track last sync state
- Fetch new messages only
- Handle flag changes (read/star status)
- Conflict resolution
3. SMTP Client Module
Objective: Email sending capability
Components:
-
src/smtp/SmtpClient.h/cpp- SMTP protocol wrapper- Connection management
- Authentication
- Message sending
- Error handling
-
src/smtp/MessageComposer.h/cpp- Compose operations- Build MIME messages
- Handle attachments
- Quote/reply operations
4. Account Manager
Objective: Multi-account support
Components:
-
src/account/AccountManager.h/cpp- Add/remove/edit accounts
- Store credentials securely (encrypted)
- Account switching
-
src/account/CredentialStorage.h/cpp- Platform-specific secure storage (Windows: DPAPI, Linux: keyring)
- Credential caching
- Token refresh (OAuth2)
5. Mail Synchronization Service
Objective: Background sync automation
Components:
-
src/sync/SyncService.h/cpp- Periodic sync scheduling
- JobQueue integration
- Error recovery
- Conflict resolution
-
src/sync/SyncScheduler.h/cpp- Interval-based sync
- Manual sync triggers
- Push notification support (IMAP IDLE)
6. UI Layer (Phase B Minimal)
Objective: Basic mail client interface
Components:
-
src/ui/MailListWidget.h/cpp- Message list view- TableView with sender, subject, date, flags
- Threading support skeleton
-
src/ui/MailViewWidget.h/cpp- Message viewer- Display full message content
- Handle HTML/plain text
- Attachment preview/download
-
src/ui/ComposeDialog.h/cpp- Message composition- Text editor
- Recipient fields
- Attachment management
-
src/ui/AccountSetupDialog.h/cpp- Account configuration- Server details
- Authentication
- Folder selection
Phase B Architecture Diagram
┌─────────────────────────────────────────────────────────┐
│ Mail-Adler Main Window │
├─────────────────────────────────────────────────────────┤
│ Preserved: StatusBar, Menus, Toolbars, Settings │
│ New: Mail Views (List, Compose, Account Management) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ UI Components (Phase B) │
├─────────────────────────────────────────────────────────┤
│ - MailListWidget │
│ - MailViewWidget │
│ - ComposeDialog │
│ - AccountSetupDialog │
└─────────────────────────────────────────────────────────┘
↓ (signals/slots)
┌─────────────────────────────────────────────────────────┐
│ Account Manager & Sync Service │
├─────────────────────────────────────────────────────────┤
│ - AccountManager (add/remove/switch) │
│ - SyncService (background sync) │
│ - CredentialStorage (secure auth) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ IMAP & SMTP Client Modules │
├─────────────────────────────────────────────────────────┤
│ - ImapClient (fetch, sync, folder ops) │
│ - SmtpClient (send) │
│ - ImapSync (incremental sync engine) │
└─────────────────────────────────────────────────────────┘
↓ (database ops)
┌─────────────────────────────────────────────────────────┐
│ Mail Data Models & Database │
├─────────────────────────────────────────────────────────┤
│ - MailMessage, MailFolder, MailAccount │
│ - MailSchema (SQLite tables) │
│ - Database (from Phase A - persistence layer) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ Infrastructure Layer │
├─────────────────────────────────────────────────────────┤
│ - JobQueue (async mail operations) │
│ - Settings (app config) │
│ - Logging (debug/audit) │
└─────────────────────────────────────────────────────────┘
Phase B Implementation Order
Milestone 1: Data Layer
- MailMessage, MailFolder, MailAccount models
- MailSchema - Create SQLite tables and migrations
- Database schema validation
Milestone 2: IMAP Module
- ImapClient - Basic connection, authentication, folder list
- ImapFolder - Folder operations (select, status)
- ImapSync - UID tracking, incremental fetch
- Testing - Mock IMAP servers (e.g., test.example.com)
Milestone 3: SMTP Module
- SmtpClient - Connection, auth, basic send
- MessageComposer - MIME message building
- Error handling & retries
Milestone 4: Account & Sync Services
- AccountManager - Add/remove/switch accounts
- CredentialStorage - Secure credential handling
- SyncService - JobQueue integration, periodic sync
- SyncScheduler - Background sync automation
Milestone 5: Basic UI
- MailListWidget - Display messages
- MailViewWidget - Read messages
- ComposeDialog - Send messages
- AccountSetupDialog - Configure accounts
CMakeLists.txt Updates Needed
Add New Directories
add_subdirectory(src/models)
add_subdirectory(src/database)
add_subdirectory(src/imap)
add_subdirectory(src/smtp)
add_subdirectory(src/account)
add_subdirectory(src/sync)
add_subdirectory(src/ui)
External Dependencies (Already Available)
- Qt6::Core
- Qt6::Sql
- Qt6::Network (for IMAP/SMTP connections)
- Qt6::Widgets
Potential New Dependencies
- libsasl2 (SMTP authentication)
- openssl (TLS/SSL for secure connections)
- libkeyring (Linux credential storage)
Success Criteria
✅ Phase B Complete When:
- All 6 components (Data, IMAP, SMTP, Account, Sync, UI) implemented
- Single account IMAP sync functional
- Send email via SMTP functional
- Messages persist in SQLite database
- Background sync runs without blocking UI
- Settings saved across sessions
Next Steps After Phase B
- Phase C: Multi-account support enhancement
- Phase D: IMAP IDLE push notifications
- Phase E: Advanced search, filters, threading
- Phase F: Attachments download/display
- Phase G: Encryption (PGP/S-MIME) support