feat: IMAP sync incremental + Account Setup Wizard + robust FETCH parser
- ImapSynchronizer::syncFolder(): detecta eliminados (UIDs locales no en servidor), fetch nuevos (sinceUid), actualiza flags (FLAGS batch) - fetchAllUids(): SELECT + SEARCH ALL para lista completa UIDs servidor - parseAndUpdateFlags(): FETCH FLAGS en lotes 100, update DB si cambió read/flagged - AccountSetupDialog: integra ConnectionWizard para IMAP/POP3 con test de conexión real - IMAP FETCH parser robusto: logging respuesta servidor + fallback UID-by-UID - Fix: FETCH failed logging muestra first/last UID + respuesta truncada
This commit is contained in:
+19
-13
@@ -1,6 +1,9 @@
|
||||
#include "emailmanager.h"
|
||||
#include <QDebug>
|
||||
#include <QFile>
|
||||
#include <QStandardPaths>
|
||||
#include "db/dao/mailitemdao.h"
|
||||
#include "services/mimestorage.h"
|
||||
|
||||
EmailManager::EmailManager(QObject *parent)
|
||||
: QObject(parent)
|
||||
@@ -9,29 +12,33 @@ EmailManager::EmailManager(QObject *parent)
|
||||
|
||||
MailItem EmailManager::getMailItemById(qint64 id) const
|
||||
{
|
||||
Q_UNUSED(id);
|
||||
qDebug() << "[EmailManager] getMailItemById (stub)";
|
||||
return MailItem();
|
||||
const auto item = MailItemDao::findById(id);
|
||||
return item.value_or(MailItem());
|
||||
}
|
||||
|
||||
QString EmailManager::getStorageDirectory() const
|
||||
{
|
||||
qDebug() << "[EmailManager] getStorageDirectory (stub)";
|
||||
return QString();
|
||||
return QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QStringLiteral("/mails");
|
||||
}
|
||||
|
||||
QString EmailManager::getEmailHtmlById(qint64 id) const
|
||||
{
|
||||
Q_UNUSED(id);
|
||||
qDebug() << "[EmailManager] getEmailHtmlById (stub)";
|
||||
return QString("<html><body><p>GMime not available</p></body></html>");
|
||||
const auto item = MailItemDao::findById(id);
|
||||
if (!item) return QString();
|
||||
if (!item->bodyHtml().isEmpty()) return item->bodyHtml();
|
||||
if (item->fileId().isEmpty()) return QString();
|
||||
MimeStorageService storage;
|
||||
ParsedMimeMessage parsed;
|
||||
return storage.parseMessage(storage.readEmlFile(item->fileId()), parsed) ? parsed.bodyHtml : QString();
|
||||
}
|
||||
|
||||
QString EmailManager::convertEmlToHtml(const QString& emlFilePath) const
|
||||
{
|
||||
Q_UNUSED(emlFilePath);
|
||||
qDebug() << "[EmailManager] convertEmlToHtml (stub)";
|
||||
return QString();
|
||||
QFile file(emlFilePath);
|
||||
if (!file.open(QIODevice::ReadOnly)) return QString();
|
||||
MimeStorageService storage;
|
||||
ParsedMimeMessage parsed;
|
||||
return storage.parseMessage(file.readAll(), parsed) ? parsed.bodyHtml : QString();
|
||||
}
|
||||
|
||||
bool EmailManager::sendEmail(const QString& to, const QString& subject, const QString& body)
|
||||
@@ -39,8 +46,7 @@ bool EmailManager::sendEmail(const QString& to, const QString& subject, const QS
|
||||
Q_UNUSED(to);
|
||||
Q_UNUSED(subject);
|
||||
Q_UNUSED(body);
|
||||
qDebug() << "[EmailManager] sendEmail (stub)";
|
||||
return false;
|
||||
}
|
||||
|
||||
#include "emailmanager.moc"
|
||||
#include "emailmanager.moc"
|
||||
|
||||
Reference in New Issue
Block a user