feat: Search Online (IMAP) + real Calendar/Contacts UI + iCloud auth wiring

Search Online:
- Synchronizer::searchOnline(folderId, query) virtual with default {}
- ImapSynchronizer: SELECT + UID SEARCH (Subject/From/To/TEXT) + fetch results
- MailService::searchOnline() + onlineSearchFinished/onlineSearchError signals
- MainMainWindow::onOnlineSearchRequested shows real server results

Calendar:
- Real QCalendarWidget view with per-day agenda from local mails
- New MailItemDao::findByDateRange(start, end)

Contacts:
- QTableWidget aggregating addresses from all local mails
- Regex email extraction + live search filter

iCloud/AccountService:
- Wire IcloudAuthenticator into AccountService::createAuthenticator
This commit is contained in:
2026-08-30 01:46:34 +02:00
parent d86df8ce51
commit 59692b5706
61 changed files with 1018 additions and 115 deletions
+9 -1
View File
@@ -193,6 +193,7 @@ QWidget* AccountSetupDialog::createProviderPage()
lay->addWidget(makeRadio("🔴 Google / Gmail", "OAuth2 seguro", 0));
lay->addWidget(makeRadio("🔵 Microsoft / Outlook", "OAuth2 seguro", 1));
lay->addWidget(makeRadio("☁️ iCloud / Apple", "OAuth2 seguro (Apple ID)", 3));
lay->addWidget(makeRadio("⚙️ IMAP / SMTP", "Servidor personalizado", 2));
m_providerGroup->button(0)->setChecked(true);
@@ -430,6 +431,9 @@ void AccountSetupDialog::onNextClicked()
if (m_selectedProvider == 2) {
// Launch ConnectionWizard for IMAP/POP3 setup
launchConnectionWizard();
} else if (m_selectedProvider == 3) {
// iCloud - use OAuth2 flow like Gmail/Outlook
goToPage(PageOAuth);
} else {
// Update OAuth page subtitle based on provider
goToPage(PageOAuth);
@@ -486,7 +490,11 @@ void AccountSetupDialog::startOAuthAuthentication()
m_oauthStatusLabel->setText("Abriendo navegador… Completa el inicio de sesión allí.");
m_oauthStatusLabel->setStyleSheet("font-size: 12px; color: #0071e3; font-weight: 600;");
QString provider = (m_selectedProvider == 0) ? "gmail" : "outlook";
QString provider;
if (m_selectedProvider == 0) provider = "gmail";
else if (m_selectedProvider == 1) provider = "outlook";
else if (m_selectedProvider == 3) provider = "icloud";
else provider = "gmail"; // fallback
// Start authentication via AccountService (opens browser)
m_accountService->startAuthentication(email, provider);