From af8baff21529b5bc47725da3e9e00ec81e5b6f1b Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 12 Jan 2017 11:11:21 +0100 Subject: Logout after changereplay --- examples/imapresource/imapresource.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index 49639c3..a204f4c 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp @@ -529,12 +529,13 @@ public: { auto imap = QSharedPointer::create(mServer, mPort); auto login = imap->login(mUser, mPassword); + KAsync::Job job = KAsync::null(); if (operation == Sink::Operation_Creation) { QString mailbox = syncStore().resolveLocalId(ENTITY_TYPE_FOLDER, mail.getFolder()); QByteArray content = KMime::LFtoCRLF(mail.getMimeMessage()); auto flags = getFlags(mail); QDateTime internalDate = mail.getDate(); - return login.then(imap->append(mailbox, content, flags, internalDate)) + job = login.then(imap->append(mailbox, content, flags, internalDate)) .addToContext(imap) .syncThen([mail](qint64 uid) { const auto remoteId = assembleMailRid(mail, uid); @@ -548,7 +549,7 @@ public: SinkTrace() << "Removing a mail: " << oldRemoteId << "in the mailbox: " << mailbox; KIMAP2::ImapSet set; set.add(uid); - return login.then(imap->remove(mailbox, set)) + job = login.then(imap->remove(mailbox, set)) .syncThen([imap, oldRemoteId] { SinkTrace() << "Finished removing a mail: " << oldRemoteId; return QByteArray(); @@ -571,7 +572,7 @@ public: QDateTime internalDate = mail.getDate(); KIMAP2::ImapSet set; set.add(uid); - return login.then(imap->append(mailbox, content, flags, internalDate)) + job = login.then(imap->append(mailbox, content, flags, internalDate)) .addToContext(imap) .then([=](qint64 uid) { const auto remoteId = assembleMailRid(mail, uid); @@ -582,7 +583,7 @@ public: SinkTrace() << "Updating flags only."; KIMAP2::ImapSet set; set.add(uid); - return login.then(imap->select(mailbox)) + job = login.then(imap->select(mailbox)) .addToContext(imap) .then(imap->storeFlags(set, flags)) .syncThen([=] { @@ -591,7 +592,16 @@ public: }); } } - return KAsync::null(); + return job + .then([=] (const KAsync::Error &error, const QByteArray &remoteId) { + if (error) { + SinkWarning() << "Error during changereplay: " << error.errorMessage; + return imap->logout() + .then(KAsync::error(error)); + } + return imap->logout() + .then(KAsync::value(remoteId)); + }); } KAsync::Job replay(const ApplicationDomain::Folder &folder, Sink::Operation operation, const QByteArray &oldRemoteId, const QList &changedProperties) Q_DECL_OVERRIDE -- cgit v1.2.3