66 lines
3.8 KiB
Markdown
66 lines
3.8 KiB
Markdown
# 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)
|