bool AppendTask::handleStateHelper(const Imap::Responses::State *const resp) { if (resp->tag.isEmpty()) return false; if (resp->tag == tag) { if (resp->kind == Responses::OK) { if (resp->respCode == Responses::APPENDUID) { const Responses::RespData<QPair<uint, Sequence> > *const respData = dynamic_cast<const Responses::RespData<QPair<uint, Sequence> >* const>(resp->respCodeData.data()); Q_ASSERT(respData); auto uids = respData->data.second.toVector(); if (uids.size() != 1) { log(QLatin1String("APPENDUID: malformed data, cannot extract a single UID")); } else { emit appendUid(respData->data.first, uids.front()); } } // nothing should be needed here _completed(); } else { _failed(resp->message); } return true; } else { return false; } }
void Submission::slotMessageDataAvailable() { m_rawMessageData.clear(); QBuffer buf(&m_rawMessageData); buf.open(QIODevice::WriteOnly); QString errorMessage; QList<Imap::Mailbox::CatenatePair> catenateable; if (shouldBuildMessageLocally() && !m_composer->asRawMessage(&buf, &errorMessage)) { gotError(tr("Cannot send right now -- saving failed:\n %1").arg(errorMessage)); return; } if (m_model->isCatenateSupported() && !m_composer->asCatenateData(catenateable, &errorMessage)) { gotError(tr("Cannot send right now -- saving (CATENATE) failed:\n %1").arg(errorMessage)); return; } if (m_saveToSentFolder) { Q_ASSERT(m_model); m_appendUidReceived = false; m_genUrlAuthReceived = false; changeConnectionState(STATE_SAVING); QPointer<Imap::Mailbox::AppendTask> appendTask = 0; if (m_model->isCatenateSupported()) { // FIXME: without UIDPLUS, there isn't much point in $SubmitPending... appendTask = QPointer<Imap::Mailbox::AppendTask>( m_model->appendIntoMailbox( m_sentFolderName, catenateable, QStringList() << QLatin1String("$SubmitPending") << QLatin1String("\\Seen"), m_composer->timestamp())); } else { // FIXME: without UIDPLUS, there isn't much point in $SubmitPending... appendTask = QPointer<Imap::Mailbox::AppendTask>( m_model->appendIntoMailbox( m_sentFolderName, m_rawMessageData, QStringList() << QLatin1String("$SubmitPending") << QLatin1String("\\Seen"), m_composer->timestamp())); } Q_ASSERT(appendTask); connect(appendTask.data(), SIGNAL(appendUid(uint,uint)), this, SLOT(slotAppendUidKnown(uint,uint))); connect(appendTask.data(), SIGNAL(completed(Imap::Mailbox::ImapTask*)), this, SLOT(slotAppendSucceeded())); connect(appendTask.data(), SIGNAL(failed(QString)), this, SLOT(slotAppendFailed(QString))); } else {