# Plan de Acción: wino-mail-dtkqt ## Decisión Arquitectónica: Qt6 Widgets (no QML) **Motivación**: El cliente de correo es una aplicación de escritorio orientada a PC. QML es excelente para dashboards animados y apps móviles, pero un cliente de correo con árboles de carpetas, tablas de correos, formularios complejos y paneles divididos se beneficia más de la madurez y eficiencia de Qt6 Widgets. Beneficios clave del cambio: - Integración directa con DTK (Deepin Tool Kit) para el tema nativo - Menos dependencias: solo qt6-base-dev - Modelos C++ (QAbstractItemModel, QSqlQueryModel) funcionan nativamente con QTreeView/QTableView - Sin bridges QML → C++, todo es C++ puro - Más eficiente con listas grandes de correos (miles de items) El plan contempla descartar el QML existente y reconstruir la UI con QWidgets reaprovechando toda la lógica C++ ya implementada (DAOs, servicios, sincronizadores, modelos, EventBus, etc.). --- ## Fase 0 — Arreglar Build (base C++) - [x] Arreglar includes relativos en synchronizers - [x] Migrar main.cpp: eliminar QQmlApplicationEngine, usar QApplication + MainWindow widget - [x] Verificar compilación completa del target wino-mail-qt - [x] Revisar que todos los .h existentes tengan guards y #include correctos ## Fase 1 — Backend Core (completar lo que falta del C# original) - [x] Implementar sistema de HTTP requests (request.cpp, concreterequests.cpp, requestprocessor.cpp) - [x] Implementar ChangeProcessor completo (changetype.cpp, changprocessor.cpp) - [x] Implementar EmailComposerBridge (preparar correos para envío) - [x] Implementar SynchronizerProvider (fábrica de sincronizadores por tipo de cuenta) - [x] Implementar AccountSetupDialogLauncher (lanzar diálogo de configuración inicial) ## Fase 2 — Autenticación y Servicios (port desde C#) - [x] Portar IAuthenticator → GmailAuthenticator, OutlookAuthenticator (OAuth2 con Qt Network) - [x] Portar AccountService: CRUD de cuentas de correo (IMAP, Gmail, Outlook) - [x] Portar MailService: envío (SMTP) y recepción real de correos - [x] Portar MimeStorageService: almacenamiento y gestión de adjuntos - [x] Portar MimeFileService: exportar/importar .eml y adjuntos - [x] Portar FolderService: gestión de carpetas (INBOX, Sent, Drafts, etc.) ## Fase 3 — UI con Qt6 Widgets (descartar QML) - [x] **Diseñar estructura de navegación**: QMainWindow + QSplitter (panel izquierdo: árbol de carpetas, panel derecho: lista de correos + lector) - [x] **Implementar MainWindow**: menú, toolbar, barra de estado, system tray - [x] **AccountSetupDialog**: QDialog con wizard para configurar cuenta IMAP/Gmail/Outlook (OAuth2 o credenciales) - [x] **FolderTreeView**: QTreeView con QStandardItemModel o modelo propio para mostrar jerarquía de carpetas - [x] **MailListView**: QTableView o QTreeView con delegados personalizados - [x] **ReaderPanel**: QTextBrowser o QWebEngineView para mostrar el cuerpo del correo - [x] **ComposeDialog**: QDialog para redactar correos (To, CC, BCC, asunto, cuerpo HTML/plain, adjuntos) - [x] **SearchBar**: QLineEdit con filtrado en tiempo real sobre el modelo de correos - [ ] **Sistema de pestañas**: QTabWidget para múltiples correos abiertos simultáneamente ## Fase 4 — DTK Integration (tema Deepin) - [ ] Habilitar DTK en CMakeLists.txt (detectar dtkwidget) - [ ] Aplicar DMainWindow, DApplication, DTitlebar para el look nativo Deepin - [ ] Adaptar QSS/DStyle para mantener coherencia visual - [ ] Fallback a Qt widgets estándar si DTK no está disponible ## Fase 5 — Testing y QA - [ ] Re-activar y arreglar tests unitarios (DAO, Translator, EventBus) - [ ] Tests de integración (SyncScheduler con mock de sincronizadores) - [ ] Tests de UI (verificar navegación, apertura de correos, composición) - [ ] Benchmark con cargas grandes de correos (>10.000)