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:
2026-08-17 15:34:49 +02:00
parent 364624aada
commit a004bdd60f
94 changed files with 19408 additions and 1047 deletions
+19 -2
View File
@@ -5,14 +5,31 @@
#include <QVector>
#include <optional>
struct StoredAttachmentRecord
{
QString fileName;
QString mimeType;
QString contentId;
qint64 size{0};
QString storedPath;
};
class MailItemDao
{
public:
static bool insert(const MailItem& item);
static bool insert(MailItem& item);
static bool upsert(MailItem& item);
static bool update(const MailItem& item);
static bool remove(qint64 id);
static std::optional<MailItem> findById(qint64 id);
static QVector<MailItem> findAll();
static QVector<MailItem> findByFolderId(int folderId);
static QVector<MailItem> findByFolderIdSinceUid(int folderId, qint64 sinceUid);
};
static std::optional<qint64> maxUidForFolder(int folderId);
static QVector<qint64> getUidsForFolder(int folderId);
static QVector<qint64> uidsForFolder(int folderId);
static std::optional<MailItem> findByUid(int folderId, qint64 uid);
static bool removeByUid(int folderId, qint64 uid);
static bool replaceAttachments(qint64 mailItemId, const QVector<StoredAttachmentRecord>& attachments);
static QVector<StoredAttachmentRecord> attachmentsForMail(qint64 mailItemId);
};