From 8a0a4de6c51d5ef23ae86655a63536bd8386c575 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 29 Aug 2016 09:36:36 +0200 Subject: Made use of KAsync::Job::serialEach --- examples/imapresource/imapresource.cpp | 56 +++++++++++++++------------------- 1 file changed, 25 insertions(+), 31 deletions(-) (limited to 'examples/imapresource') diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index da87bdb..aad7887 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp @@ -261,43 +261,37 @@ public: KAsync::Job synchronizeWithSource() Q_DECL_OVERRIDE { SinkLog() << " Synchronizing"; - return KAsync::start([this](KAsync::Future future) { + return KAsync::start([this]() { SinkTrace() << "Connecting to:" << mServer << mPort; SinkTrace() << "as:" << mUser; auto imap = QSharedPointer::create(mServer, mPort); - auto loginFuture = imap->login(mUser, mPassword).exec(); - loginFuture.waitForFinished(); - if (loginFuture.errorCode()) { - SinkWarning() << "Login failed."; - future.setError(1, "Login failed"); - return; - } else { - SinkTrace() << "Login was successful"; - } - QVector folderList; - auto folderFuture = imap->fetchFolders([this, &imap, &folderList](const QVector &folders) { - synchronizeFolders(folders); - commit(); - folderList << folders; - - }).exec(); - folderFuture.waitForFinished(); - if (folderFuture.errorCode()) { - SinkWarning() << "Folder sync failed."; - future.setError(1, "Folder list sync failed"); - return; - } else { - SinkTrace() << "Folder sync was successful"; - } - - for (const auto &folder : folderList) { + return imap->login(mUser, mPassword) + .addToContext(imap) + .onError([](const KAsync::Error &error) { + SinkWarning() << "Login failed."; + }) + .then>([this, imap]() { + auto folderList = QSharedPointer>::create(); + SinkLog() << "Login was successful"; + return imap->fetchFolders([this, &imap, folderList](const QVector &folders) { + synchronizeFolders(folders); + commit(); + *folderList << folders; + }) + .onError([](const KAsync::Error &error) { + SinkWarning() << "Folder list sync failed."; + }) + .syncThen>([folderList]() { + return *folderList; + }); + }) + .serialEach([this, imap](const Folder &folder) { if (folder.noselect) { - continue; + return KAsync::null(); } - synchronizeFolder(imap, folder).exec().waitForFinished(); - } - future.setFinished(); + return synchronizeFolder(imap, folder); + }); }); } -- cgit v1.2.3