Files
wino-mail-dtkqt/src/core/models/account.h.backup
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

80 lines
2.5 KiB
Plaintext

#pragma once
#include <QString>
#include <QDateTime>
#include <QtGlobal>
#include <QByteArray>
enum class AccountType {
POP3,
Outlook,
Gmail,
IMAP
};
class Account
{
public:
Account() = default;
Account(int id, const QString& email, const QString& displayName,
AccountType type, const QString& accessToken = QString(),
const QString& refreshToken = QString(),
const QDateTime& tokenExpires = QDateTime());
int id() const { return m_id; }
void setId(int id) { m_id = id; }
QString email() const { return m_email; }
void setEmail(const QString& email) { m_email = email; }
QString displayName() const { return m_displayName; }
void setDisplayName(const QString& displayName) { m_displayName = displayName; }
AccountType type() const { return m_type; }
void setType(AccountType type) { m_type = type; }
QString accessToken() const { return m_accessToken; }
void setAccessToken(const QString& token) { m_accessToken = token; }
QString refreshToken() const { return m_refreshToken; }
void setRefreshToken(const QString& token) { m_refreshToken = token; }
QDateTime tokenExpires() const { return m_tokenExpires; }
void setTokenExpires(const QDateTime& expires) { m_tokenExpires = expires; }
bool isTokenValid() const {
return !m_accessToken.isEmpty() && m_tokenExpires.isValid() &&
m_tokenExpires > QDateTime::currentDateTimeUtc();
}
/// Connection settings for incoming and outgoing servers
struct ConnectionSettings {
QString type; // "imap" or "pop3"
QString incomingHost;
quint16 incomingPort = 0;
bool incomingSsl = false;
QString outgoingHost;
quint16 outgoingPort = 0;
bool outgoingSsl = false;
QString username;
QString password;
QString authMethod; // "plain" or "oauth2"
};
const ConnectionSettings& connectionSettings() const { return m_connectionSettings; }
void setConnectionSettings(const ConnectionSettings& settings) { m_connectionSettings = settings; }
/// Simple encryption/decryption for passwords (XOR with fixed key, base64 encoded)
static QString encryptPassword(const QString& plainText);
static QString decryptPassword(const QString& encrypted);
private:
int m_id{0};
QString m_email;
QString m_displayName;
AccountType m_type{AccountType::IMAP};
QString m_accessToken;
QString m_refreshToken;
QDateTime m_tokenExpires;
ConnectionSettings m_connectionSettings;
};