# 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 1. **MailMessage, MailFolder, MailAccount** models 2. **MailSchema** - Create SQLite tables and migrations 3. **Database schema validation** ### Milestone 2: IMAP Module 1. **ImapClient** - Basic connection, authentication, folder list 2. **ImapFolder** - Folder operations (select, status) 3. **ImapSync** - UID tracking, incremental fetch 4. **Testing** - Mock IMAP servers (e.g., test.example.com) ### Milestone 3: SMTP Module 1. **SmtpClient** - Connection, auth, basic send 2. **MessageComposer** - MIME message building 3. **Error handling & retries** ### Milestone 4: Account & Sync Services 1. **AccountManager** - Add/remove/switch accounts 2. **CredentialStorage** - Secure credential handling 3. **SyncService** - JobQueue integration, periodic sync 4. **SyncScheduler** - Background sync automation ### Milestone 5: Basic UI 1. **MailListWidget** - Display messages 2. **MailViewWidget** - Read messages 3. **ComposeDialog** - Send messages 4. **AccountSetupDialog** - Configure accounts ## CMakeLists.txt Updates Needed ### Add New Directories ```cmake 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