Actualizaciones varias: mejoras en cuenta, sincronización, UI
This commit is contained in:
@@ -5,14 +5,17 @@
|
||||
#include <QDebug>
|
||||
#include <QRegularExpression>
|
||||
#include <QRegularExpressionValidator>
|
||||
#include <QIntValidator>
|
||||
#include <QTimer>
|
||||
|
||||
// ─────────────────────── Constructor ───────────────────────
|
||||
|
||||
AccountSetupDialog::AccountSetupDialog(AccountService *accountService, QWidget *parent)
|
||||
: QDialog(parent)
|
||||
, m_accountService(accountService)
|
||||
, m_selectedProvider(0)
|
||||
, m_accountCreatedOk(false)
|
||||
, m_editingAccountId(-1)
|
||||
, m_isEditing(false)
|
||||
{
|
||||
m_authTimeoutTimer = new QTimer(this);
|
||||
m_authTimeoutTimer->setSingleShot(true);
|
||||
@@ -26,8 +29,44 @@ AccountSetupDialog::AccountSetupDialog(AccountService *accountService, QWidget *
|
||||
setupUI();
|
||||
}
|
||||
|
||||
// ─────────────────────── UI Setup ───────────────────────
|
||||
// ─────────────────────── Public API ───────────────────────
|
||||
void AccountSetupDialog::loadAccountForEditing(const Account &account)
|
||||
{
|
||||
// Only support editing IMAP accounts for simplicity
|
||||
if (account.type() != AccountType::IMAP) {
|
||||
QMessageBox::information(this, tr("Edit Account"),
|
||||
tr("Editing of OAuth (Gmail/Outlook) accounts is not supported in this version.\n"
|
||||
"You can add a new account instead."));
|
||||
m_isEditing = false;
|
||||
return;
|
||||
}
|
||||
|
||||
m_isEditing = true;
|
||||
m_editingAccountId = account.id();
|
||||
|
||||
// Set window title
|
||||
setWindowTitle(tr("Edit Email Account – Wino Mail"));
|
||||
|
||||
// Fill IMAP fields
|
||||
m_imapEmailEdit->setText(account.email());
|
||||
m_imapNameEdit->setText(account.displayName());
|
||||
|
||||
// Password field left blank for security; user must re-enter
|
||||
m_imapPasswordEdit->clear();
|
||||
|
||||
const Account::ConnectionSettings &settings = account.connectionSettings();
|
||||
m_imapHostEdit->setText(settings.incomingHost);
|
||||
m_imapPortEdit->setText(QString::number(settings.incomingPort));
|
||||
m_smtpHostEdit->setText(settings.outgoingHost);
|
||||
m_smtpPortEdit->setText(QString::number(settings.outgoingPort));
|
||||
m_sslCheckbox->setChecked(settings.incomingSsl); // assuming same for SMTP
|
||||
|
||||
// Switch to IMAP page
|
||||
m_selectedProvider = 2; // IMAP
|
||||
goToPage(PageImap);
|
||||
}
|
||||
|
||||
// ─────────────────────── UI Setup ───────────────────────
|
||||
void AccountSetupDialog::setupUI()
|
||||
{
|
||||
setWindowTitle("Añadir Cuenta de Correo — Wino Mail");
|
||||
@@ -105,7 +144,6 @@ void AccountSetupDialog::setupUI()
|
||||
}
|
||||
|
||||
// ─────────────────── Page 0: Provider ───────────────────
|
||||
|
||||
QWidget* AccountSetupDialog::createProviderPage()
|
||||
{
|
||||
QWidget *page = new QWidget();
|
||||
@@ -165,7 +203,6 @@ QWidget* AccountSetupDialog::createProviderPage()
|
||||
}
|
||||
|
||||
// ─────────────────── Page 1: OAuth ───────────────────
|
||||
|
||||
QWidget* AccountSetupDialog::createOAuthPage()
|
||||
{
|
||||
QWidget *page = new QWidget();
|
||||
@@ -178,12 +215,12 @@ QWidget* AccountSetupDialog::createOAuthPage()
|
||||
lay->addWidget(title);
|
||||
|
||||
QLabel *info = new QLabel(
|
||||
"Se abrirá tu navegador web para que inicies sesión de forma segura.\n"
|
||||
"Wino Mail no almacena tu contraseña, solo el token de acceso autorizado.\n\n"
|
||||
"Pasos:\n"
|
||||
" 1. Introduce tu dirección de correo.\n"
|
||||
" 2. Pulsa «Autenticar en Navegador».\n"
|
||||
" 3. Completa el inicio de sesión en la ventana del navegador.\n"
|
||||
"Se abrirá tu navegador web para que inicies sesión de forma segura.\\n"
|
||||
"Wino Mail no almacena tu contraseña, solo el token de acceso autorizado.\\n\\n"
|
||||
"Pasos:\\n"
|
||||
" 1. Introduce tu dirección de correo.\\n"
|
||||
" 2. Pulsa «Autenticar en Navegador».\\n"
|
||||
" 3. Completa el inicio de sesión en la ventana del navegador.\\n"
|
||||
" 4. Al terminar, esta ventana se actualizará automáticamente."
|
||||
);
|
||||
info->setWordWrap(true);
|
||||
@@ -224,7 +261,6 @@ QWidget* AccountSetupDialog::createOAuthPage()
|
||||
}
|
||||
|
||||
// ─────────────────── Page 2: IMAP ───────────────────
|
||||
|
||||
QWidget* AccountSetupDialog::createImapPage()
|
||||
{
|
||||
QWidget *page = new QWidget();
|
||||
@@ -308,7 +344,6 @@ QWidget* AccountSetupDialog::createImapPage()
|
||||
}
|
||||
|
||||
// ─────────────────── Page 3: Progress ───────────────────
|
||||
|
||||
QWidget* AccountSetupDialog::createProgressPage()
|
||||
{
|
||||
QWidget *page = new QWidget();
|
||||
@@ -340,7 +375,6 @@ QWidget* AccountSetupDialog::createProgressPage()
|
||||
}
|
||||
|
||||
// ─────────────────── Navigation ───────────────────
|
||||
|
||||
void AccountSetupDialog::goToPage(int page)
|
||||
{
|
||||
m_stack->setCurrentIndex(page);
|
||||
@@ -364,7 +398,7 @@ void AccountSetupDialog::updateNavButtons()
|
||||
m_btnNext->setVisible(false); // OAuth flow is driven by the authenticate button
|
||||
break;
|
||||
case PageImap:
|
||||
m_btnNext->setText("Conectar");
|
||||
m_btnNext->setText(m_isEditing ? "Guardar cambios" : "Conectar");
|
||||
m_btnNext->setEnabled(true);
|
||||
m_btnNext->setVisible(true);
|
||||
break;
|
||||
@@ -423,7 +457,6 @@ void AccountSetupDialog::onCancelClicked()
|
||||
}
|
||||
|
||||
// ─────────────────── OAuth Flow ───────────────────
|
||||
|
||||
void AccountSetupDialog::startOAuthAuthentication()
|
||||
{
|
||||
QString email = m_oauthEmailEdit->text().trimmed();
|
||||
@@ -458,7 +491,6 @@ void AccountSetupDialog::onAuthTimeout()
|
||||
}
|
||||
|
||||
// ─────────────────── IMAP Flow ───────────────────
|
||||
|
||||
void AccountSetupDialog::submitImapAccount()
|
||||
{
|
||||
QString email = m_imapEmailEdit->text().trimmed();
|
||||
@@ -489,20 +521,45 @@ void AccountSetupDialog::submitImapAccount()
|
||||
if (smtpHost.isEmpty()) smtpHost = imapHost.replace("imap.", "smtp.");
|
||||
if (name.isEmpty()) name = email.split("@").first();
|
||||
|
||||
// Create account with connection settings
|
||||
Account account;
|
||||
account.setEmail(email);
|
||||
account.setDisplayName(name);
|
||||
account.setType(AccountType::IMAP);
|
||||
|
||||
Account::ConnectionSettings settings;
|
||||
settings.type = "imap";
|
||||
settings.incomingHost = imapHost;
|
||||
settings.incomingPort = imapPort.toInt();
|
||||
settings.incomingSsl = m_sslCheckbox->isChecked();
|
||||
settings.outgoingHost = smtpHost;
|
||||
settings.outgoingPort = smtpPort.toInt();
|
||||
settings.outgoingSsl = m_sslCheckbox->isChecked();
|
||||
settings.username = email;
|
||||
settings.password = password;
|
||||
settings.authMethod = "plain";
|
||||
|
||||
account.setConnectionSettings(settings);
|
||||
|
||||
// Show progress
|
||||
m_accountCreatedOk = false;
|
||||
goToPage(PageProgress);
|
||||
m_progressIcon->setText("⏳");
|
||||
m_progressText->setText("Conectando al servidor…");
|
||||
m_progressText->setText("Conectando al servidor...");
|
||||
m_progressDetail->setText(
|
||||
QString("Servidor IMAP: %1:%2\nServidor SMTP: %3:%4\nSSL: %5")
|
||||
QString("Servidor IMAP: %1:%2\\nServidor SMTP: %3:%4\\nSSL: %5")
|
||||
.arg(imapHost, imapPort, smtpHost, smtpPort,
|
||||
m_sslCheckbox->isChecked() ? "Sí" : "No")
|
||||
);
|
||||
|
||||
// Simulate connection delay, then add account
|
||||
QTimer::singleShot(1500, this, [this, email, name, password]() {
|
||||
m_accountService->addAccount(email, "imap", password, "");
|
||||
// Simulate connection delay, then add/update account
|
||||
QTimer::singleShot(1500, this, [this, account]() mutable {
|
||||
if (m_isEditing) {
|
||||
account.setId(m_editingAccountId);
|
||||
m_accountService->updateAccount(account);
|
||||
} else {
|
||||
m_accountService->addAccount(account);
|
||||
}
|
||||
});
|
||||
|
||||
// Timeout for IMAP too
|
||||
@@ -510,21 +567,22 @@ void AccountSetupDialog::submitImapAccount()
|
||||
}
|
||||
|
||||
// ─────────────────── Account Result ───────────────────
|
||||
|
||||
void AccountSetupDialog::onAccountAdded(const Account &account)
|
||||
{
|
||||
m_authTimeoutTimer->stop();
|
||||
m_accountCreatedOk = true;
|
||||
|
||||
qDebug() << "[AccountSetupDialog] Account created successfully:" << account.email();
|
||||
qDebug() << "[AccountSetupDialog] Account" << (m_isEditing ? "updated" : "created") << "successfully:" << account.email();
|
||||
|
||||
// If we were on the OAuth page, move to progress first
|
||||
if (m_stack->currentIndex() == PageOAuth) {
|
||||
goToPage(PageProgress);
|
||||
}
|
||||
|
||||
showSuccess(QString("¡Cuenta «%1» configurada con éxito!\n\n"
|
||||
"La sincronización de correos comenzará automáticamente en segundo plano.")
|
||||
showSuccess(QString(m_isEditing ? "¡Cuenta «%1» actualizada con éxito!\\n\\n"
|
||||
"Los cambios se aplicarán inmediatamente."
|
||||
: "¡Cuenta «%1» configurada con éxito!\\n\\n"
|
||||
"La sincronización de correos comenzará automáticamente en segundo plano.")
|
||||
.arg(account.email()));
|
||||
|
||||
emit accountCreated(account);
|
||||
@@ -551,4 +609,4 @@ void AccountSetupDialog::showError(const QString &message)
|
||||
m_btnNext->setVisible(false);
|
||||
}
|
||||
|
||||
#include "accountsetupdialog.moc"
|
||||
#include "accountsetupdialog.moc"
|
||||
Reference in New Issue
Block a user