Files
wino-mail-dtkqt/src/core/accountsetupdialoglauncher.cpp
T
javier a004bdd60f 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
2026-08-17 15:34:49 +02:00

76 lines
2.4 KiB
C++

#include "accountsetupdialoglauncher.h"
#include <QDebug>
#include "services/accountservice.h"
AccountSetupDialogLauncher::AccountSetupDialogLauncher(QObject *parent)
: QObject(parent)
{
}
void AccountSetupDialogLauncher::launchSetupDialog()
{
emit accountSetupStarted();
qDebug() << "[AccountSetupDialogLauncher] Dialog would launch here (Fase 3)";
}
void AccountSetupDialogLauncher::setupAccountManually(const Account &account)
{
qDebug() << "[AccountSetupDialogLauncher] Setting up account:" << account.email();
// Save to database and retain the generated id for the synchronizer/event.
const qint64 id = AccountDao::insert(account);
if (id < 0) {
qWarning() << "[AccountSetupDialogLauncher] Failed to save account to DB";
emit accountSetupFailed("Failed to save account");
return;
}
Account storedAccount = account;
storedAccount.setId(static_cast<int>(id));
// Initialize synchronizer
initializeSynchronizer(storedAccount);
// Publish event
WinoMail::Events::AccountAddedEvent event;
event.account = storedAccount;
EVENT_BUS.publish(event);
qDebug() << "[AccountSetupDialogLauncher] Account created successfully:" << account.email();
emit accountSetupCompleted(storedAccount);
}
void AccountSetupDialogLauncher::initializeSynchronizer(const Account &account)
{
QString accountId = QString::number(account.id());
// Determine provider type from Account's access token or type
QString providerType;
switch (account.type()) {
case AccountType::Gmail:
providerType = "gmail";
break;
case AccountType::Outlook:
providerType = "outlook";
break;
case AccountType::IMAP:
providerType = "imap";
break;
case AccountType::POP3:
providerType = "pop3";
break;
default:
providerType = "imap";
break;
}
Synchronizer *sync = SynchronizerProvider::instance().createSynchronizer(accountId, providerType);
if (sync) {
sync->initialize(account);
qDebug() << "[AccountSetupDialogLauncher] Synchronizer initialized for account:" << accountId;
} else {
qWarning() << "[AccountSetupDialogLauncher] Could not create synchronizer for:" << providerType;
}
}
#include "accountsetupdialoglauncher.moc"