From ca9c54670cc2d26386c80a2aeed2c999313ec362 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 14 Sep 2016 11:17:47 +0200 Subject: New kimap2 syntax --- examples/imapresource/imapresource.cpp | 28 ++++++++++------------ examples/imapresource/imapserverproxy.cpp | 22 +++++++---------- examples/imapresource/imapserverproxy.h | 4 ++-- .../imapresource/tests/imapserverproxytest.cpp | 4 ++-- 4 files changed, 25 insertions(+), 33 deletions(-) (limited to 'examples') diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index c26dc39..63ae07b 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp @@ -298,15 +298,15 @@ public: .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; + return imap->fetchFolders([folderList](const Folder &folder) { + *folderList << folder; }) .onError([](const KAsync::Error &error) { SinkWarning() << "Folder list sync failed."; }) - .syncThen>([folderList]() { + .syncThen>([this, folderList]() { + synchronizeFolders(*folderList); + commit(); return *folderList; }); }) @@ -440,12 +440,10 @@ public: } else { //We try to merge special purpose folders first auto specialPurposeFolders = QSharedPointer>::create(); auto mergeJob = imap->login(mUser, mPassword) - .then(imap->fetchFolders([=](const QVector &folders) { - for (const auto &f : folders) { - if (SpecialPurpose::isSpecialPurposeFolderName(f.pathParts.last())) { - specialPurposeFolders->insert(SpecialPurpose::getSpecialPurposeType(f.pathParts.last()), f.path); - }; - } + .then(imap->fetchFolders([=](const Imap::Folder &folder) { + if (SpecialPurpose::isSpecialPurposeFolderName(folder.pathParts.last())) { + specialPurposeFolders->insert(SpecialPurpose::getSpecialPurposeType(folder.pathParts.last()), folder.path); + }; })) .then([specialPurposeFolders, folder, imap, parentFolder, rid]() -> KAsync::Job { for (const auto &purpose : folder.getSpecialPurpose()) { @@ -661,11 +659,9 @@ KAsync::Job ImapResource::inspect(int inspectionType, const QByteArray &in auto imap = QSharedPointer::create(mServer, mPort); auto inspectionJob = imap->login(mUser, mPassword) - .then(imap->fetchFolders([=](const QVector &folders) { - for (const auto &f : folders) { - *folderByPath << f.normalizedPath(); - *folderByName << f.pathParts.last(); - } + .then(imap->fetchFolders([=](const Imap::Folder &f) { + *folderByPath << f.normalizedPath(); + *folderByName << f.pathParts.last(); })) .then([this, folderByName, folderByPath, folder, remoteId, imap]() { if (!folderByName->contains(folder.getName())) { diff --git a/examples/imapresource/imapserverproxy.cpp b/examples/imapresource/imapserverproxy.cpp index b14ebd2..a75825e 100644 --- a/examples/imapresource/imapserverproxy.cpp +++ b/examples/imapresource/imapserverproxy.cpp @@ -295,6 +295,8 @@ KAsync::Job> ImapServerProxy::fetchHeaders(const QString &mailbox, //Fetch headers of all messages return fetch(KIMAP2::ImapSet(minUid, 0), scope, [list](const KIMAP2::FetchJob::Result &result) { + // SinkTrace() << "Received " << uids.size() << " headers from " << mailbox; + // SinkTrace() << uids.size() << sizes.size() << attrs.size() << flags.size() << messages.size(); //TODO based on the data available here, figure out which messages to actually fetch //(we only fetched headers and structure so far) @@ -312,12 +314,12 @@ KAsync::Job> ImapServerProxy::fetchUids(const QString &mailbox) return select(mailbox).then>(search(KIMAP2::ImapSet(1, 0))); } -KAsync::Job ImapServerProxy::list(KIMAP2::ListJob::Option option, const std::function &mailboxes,const QList > &flags)> &callback) +KAsync::Job ImapServerProxy::list(KIMAP2::ListJob::Option option, const std::function &flags)> &callback) { auto listJob = new KIMAP2::ListJob(mSession); listJob->setOption(option); // listJob->setQueriedNamespaces(serverNamespaces()); - QObject::connect(listJob, &KIMAP2::ListJob::mailBoxesReceived, + QObject::connect(listJob, &KIMAP2::ListJob::resultReceived, listJob, callback); return runJob(listJob); } @@ -372,19 +374,13 @@ KAsync::Job ImapServerProxy::renameSubfolder(const QString &oldMailbox, }); } -KAsync::Job ImapServerProxy::fetchFolders(std::function &)> callback) +KAsync::Job ImapServerProxy::fetchFolders(std::function callback) { SinkTrace() << "Fetching folders"; - return list(KIMAP2::ListJob::IncludeUnsubscribed, [callback](const QList &mailboxes, const QList > &flags){ - QVector list; - for (int i = 0; i < mailboxes.size(); i++) { - const auto mailbox = mailboxes[i]; - const auto mailboxFlags = flags[i]; - bool noselect = mailboxFlags.contains(QByteArray(FolderFlags::Noselect).toLower()) || mailboxFlags.contains(QByteArray(FolderFlags::Noselect)); - SinkLog() << "Found mailbox: " << mailbox.name << mailboxFlags << FolderFlags::Noselect << noselect; - list << Folder{mailbox.name.split(mailbox.separator), mailbox.name, mailbox.separator, noselect}; - } - callback(list); + return list(KIMAP2::ListJob::IncludeUnsubscribed, [callback](const KIMAP2::MailBoxDescriptor &mailbox, const QList &flags){ + bool noselect = flags.contains(QByteArray(FolderFlags::Noselect).toLower()) || flags.contains(QByteArray(FolderFlags::Noselect)); + SinkLog() << "Found mailbox: " << mailbox.name << flags << FolderFlags::Noselect << noselect; + callback(Folder{mailbox.name.split(mailbox.separator), mailbox.name, mailbox.separator, noselect}); }); } diff --git a/examples/imapresource/imapserverproxy.h b/examples/imapresource/imapserverproxy.h index e0e87d4..452b479 100644 --- a/examples/imapresource/imapserverproxy.h +++ b/examples/imapresource/imapserverproxy.h @@ -115,7 +115,7 @@ public: KAsync::Job fetch(const KIMAP2::ImapSet &set, KIMAP2::FetchJob::FetchScope scope, FetchCallback callback); KAsync::Job fetch(const KIMAP2::ImapSet &set, KIMAP2::FetchJob::FetchScope scope, const std::function &)> &callback); - KAsync::Job list(KIMAP2::ListJob::Option option, const std::function &mailboxes,const QList > &flags)> &callback); + KAsync::Job list(KIMAP2::ListJob::Option option, const std::function &flags)> &callback); QStringList getCapabilities() const; @@ -130,7 +130,7 @@ public: QString mailboxFromFolder(const Folder &) const; - KAsync::Job fetchFolders(std::function &)> callback); + KAsync::Job fetchFolders(std::function callback); KAsync::Job fetchMessages(const Folder &folder, std::function &)> callback, std::function progress = std::function()); KAsync::Job fetchMessages(const Folder &folder, qint64 uidNext, std::function &)> callback, std::function progress = std::function()); KAsync::Job fetchFlags(const Folder &folder, const KIMAP2::ImapSet &set, qint64 changedsince, std::function &)> callback); diff --git a/examples/imapresource/tests/imapserverproxytest.cpp b/examples/imapresource/tests/imapserverproxytest.cpp index 1bd5982..27d73ea 100644 --- a/examples/imapresource/tests/imapserverproxytest.cpp +++ b/examples/imapresource/tests/imapserverproxytest.cpp @@ -59,13 +59,13 @@ private slots: { ImapServerProxy imap("localhost", 993); VERIFYEXEC(imap.login("doe", "doe")); - VERIFYEXEC(imap.fetchFolders([](const QVector &){})); + VERIFYEXEC(imap.fetchFolders([](const Folder &){})); } void testFetchFoldersFailure() { ImapServerProxy imap("foobar", 993); - VERIFYEXEC_FAIL(imap.fetchFolders([](const QVector &){})); + VERIFYEXEC_FAIL(imap.fetchFolders([](const Folder &){})); } void testFetchMail() -- cgit v1.2.3