Implement basic UI with QML (MailListPage) and batching DbChangeProcessor (Step 3-4 of transition plan)

This commit is contained in:
Padrino
2026-05-17 01:09:01 +02:00
parent e3071a23e0
commit acec320222
20 changed files with 829 additions and 82 deletions
+7 -11
View File
@@ -7,6 +7,7 @@
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>
#include <QUrlQuery>
#include <QDateTime>
#include <QTimer>
@@ -25,11 +26,6 @@ GmailSynchronizer::GmailSynchronizer(QObject* parent)
m_historyTimer->setInterval(2 * 60 * 1000); // 2 minutos
}
GmailSynchronizer::~GmailSynchronizer()
{
m_historyTimer->stop();
}
bool GmailSynchronizer::initialize(const Account& account)
{
// Guardar información de la cuenta
@@ -60,10 +56,10 @@ bool GmailSynchronizer::syncFolder(const Folder& folder)
}
qDebug() << "Starting Gmail sync for folder (label):" << folder.name();
emit folderSyncStarted(folder.id());
emit folderSyncStarted(QString::number(folder.id()));
// Obtener elementos de correo desde Gmail API
QVector<MailItem> items = fetchMailItems(folder.id());
QVector<MailItem> items = fetchMailItems(QString::number(folder.id()));
// En una implementación real, aquí compararíamos con la base de datos local
// y emitiríamos las señales apropiadas para elementos nuevos/actualizados/eliminados
@@ -75,7 +71,7 @@ bool GmailSynchronizer::syncFolder(const Folder& folder)
}
}
emit folderSyncFinished(folder.id(), true);
emit folderSyncFinished(QString::number(folder.id()), true);
return true;
}
@@ -113,7 +109,7 @@ QVector<MailItem> GmailSynchronizer::fetchMailItems(const QString& folderId,
// Construir la URL para Gmail API
// Nota: En Gmail, las carpetas se identifican por su nombre de label (ej: INBOX, DRAFTS, etc.)
QString endpoint = String.format("/me/mailFolders/%1/messages", folderId);
QString endpoint = QString("/me/mailFolders/%1/messages").arg(folderId);
QString url = buildGmailUrl(endpoint);
// Parámetros de consulta
@@ -257,7 +253,7 @@ void GmailSynchronizer::onHistoryTimer()
// de todas las etiquetas (esto sería ineficiente en producción)
QVector<Folder> folders = getFolders();
for (const Folder& folder : folders) {
syncFolder(folder.id());
syncFolder(Folder(folder.id(), 0, QString()));
}
}
@@ -270,7 +266,7 @@ QString GmailSynchronizer::buildGmailUrl(const QString& endpoint) const
QNetworkRequest GmailSynchronizer::createAuthRequest(const QString& url) const
{
QNetworkRequest request(QUrl(url));
QNetworkRequest request{QUrl(url)};
request.setRawHeader("Authorization",
QString("Bearer %1").arg(m_accessToken).toUtf8());
request.setHeader(QNetworkRequest::ContentTypeHeader,