Files
wino-mail-dtkqt/PLAN.md
T

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)