3.8 KiB
3.8 KiB
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++)
- Arreglar includes relativos en synchronizers
- Migrar main.cpp: eliminar QQmlApplicationEngine, usar QApplication + MainWindow widget
- Verificar compilación completa del target wino-mail-qt
- Revisar que todos los .h existentes tengan guards y #include correctos
Fase 1 — Backend Core (completar lo que falta del C# original)
- Implementar sistema de HTTP requests (request.cpp, concreterequests.cpp, requestprocessor.cpp)
- Implementar ChangeProcessor completo (changetype.cpp, changprocessor.cpp)
- Implementar EmailComposerBridge (preparar correos para envío)
- Implementar SynchronizerProvider (fábrica de sincronizadores por tipo de cuenta)
- Implementar AccountSetupDialogLauncher (lanzar diálogo de configuración inicial)
Fase 2 — Autenticación y Servicios (port desde C#)
- Portar IAuthenticator → GmailAuthenticator, OutlookAuthenticator (OAuth2 con Qt Network)
- Portar AccountService: CRUD de cuentas de correo (IMAP, Gmail, Outlook)
- Portar MailService: envío (SMTP) y recepción real de correos
- Portar MimeStorageService: almacenamiento y gestión de adjuntos
- Portar MimeFileService: exportar/importar .eml y adjuntos
- Portar FolderService: gestión de carpetas (INBOX, Sent, Drafts, etc.)
Fase 3 — UI con Qt6 Widgets (descartar QML)
- Diseñar estructura de navegación: QMainWindow + QSplitter (panel izquierdo: árbol de carpetas, panel derecho: lista de correos + lector)
- Implementar MainWindow: menú, toolbar, barra de estado, system tray
- AccountSetupDialog: QDialog con wizard para configurar cuenta IMAP/Gmail/Outlook (OAuth2 o credenciales)
- FolderTreeView: QTreeView con QStandardItemModel o modelo propio para mostrar jerarquía de carpetas
- MailListView: QTableView o QTreeView con delegados personalizados
- ReaderPanel: QTextBrowser o QWebEngineView para mostrar el cuerpo del correo
- ComposeDialog: QDialog para redactar correos (To, CC, BCC, asunto, cuerpo HTML/plain, adjuntos)
- 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)