void AccountSettings::removeAccount() { QModelIndex index = accountView->currentIndex(); if (!index.isValid()) return; QMailAccount account(accountModel->idFromIndex(index)); QString message = tr("Remove %1?").arg(account.name()); if (QMessageBox::question( this, tr("Remove account"), message, QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) { // We could simply delete the account since QMailStore::deleteAccount // will remove all folders and messages, but for now we will remove the // messages manually so we can give progress indication (eventually, we // might add progress notification to QMailStore) // Number of messages required before we use a progress indicator static const int MinimumForProgressIndicator = 20; // Maximum messages processed per batch operation static const int MaxBatchSize = 50; static const int BatchMinimumForProgressIndicator = 2 * MaxBatchSize + 1; // Remove the messages and folders from this account (not just in the Inbox) QMailMessageKey messageKey(QMailMessageKey::parentAccountId(account.id())); const int count = QMailStore::instance()->countMessages(messageKey); if (count >= MinimumForProgressIndicator) { deleteMessageIds = QMailStore::instance()->queryMessages(messageKey); deleteProgress = 0; deleteBatchSize = 1; if (count >= BatchMinimumForProgressIndicator) { // Process this list in batches of roughly equivalent size int batchCount = (count / MaxBatchSize) + (count % MaxBatchSize ? 1 : 0); deleteBatchSize = ((count / batchCount) + (count % batchCount ? 1 : 0)); } statusDisplay->setProgress(0, count); statusDisplay->setStatus(tr("Removing messages")); } else { // No progress indication is required - allow the messages to be removed in account deletion deleteMessageIds = QMailMessageIdList(); } deleteAccountId = account.id(); QTimer::singleShot(0, this, SLOT(deleteMessages())); } }
void EmailMessage::saveDraft() { buildMessage(); QMailAccount account(m_msg.parentAccountId()); QMailFolderId draftFolderId = account.standardFolder(QMailFolder::DraftsFolder); if (draftFolderId.isValid()) { m_msg.setParentFolderId(draftFolderId); //local storage set on buildMessage step qWarning() << "Drafts folder not found, saving to local storage(Outbox)!"; } bool saved = false; // Unset outgoing and outbox so it wont really send // when we sync to the server Drafts folder m_msg.setStatus(QMailMessage::Outgoing, false); m_msg.setStatus(QMailMessage::Outbox, false); m_msg.setStatus(QMailMessage::Draft, true); // This message is present only on the local device until we externalise or send it m_msg.setStatus(QMailMessage::LocalOnly, true); if (!m_msg.id().isValid()) { saved = QMailStore::instance()->addMessage(&m_msg); } else { saved = QMailStore::instance()->updateMessage(&m_msg); m_newMessage = false; } // Sync to the server, so the message will be in the remote Drafts folder if (saved) { QMailDisconnected::flagMessage(m_msg.id(), QMailMessage::Draft, QMailMessage::Temporary, "Flagging message as draft"); QMailDisconnected::moveToFolder(QMailMessageIdList() << m_msg.id(), m_msg.parentFolderId()); EmailAgent::instance()->exportUpdates(m_msg.parentAccountId()); emitSignals(); } else { qWarning() << "Failed to save message!"; } }