From 5f127fa687079c7180142e371c86bd6dacfb845e Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 20 Jul 2016 15:16:43 +0200 Subject: Progress reporting --- examples/imapresource/imapresource.cpp | 3 +++ examples/imapresource/imapserverproxy.cpp | 28 ++++++++++++++++++++++------ examples/imapresource/imapserverproxy.h | 2 +- 3 files changed, 26 insertions(+), 7 deletions(-) (limited to 'examples') diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index dde218a..24fd426 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp @@ -255,6 +255,9 @@ public: uids << msg.uid; } synchronizeMails(folder.normalizedPath(), messages); + }, + [](int progress, int total) { + SinkTrace() << "Progress: " << progress << " out of " << total; }).exec(); messagesFuture.waitForFinished(); commit(); diff --git a/examples/imapresource/imapserverproxy.cpp b/examples/imapresource/imapserverproxy.cpp index b1ba5e7..3406315 100644 --- a/examples/imapresource/imapserverproxy.cpp +++ b/examples/imapresource/imapserverproxy.cpp @@ -325,7 +325,7 @@ KAsync::Job> ImapServerProxy::fetchHeaders(const QString &mailbox) auto list = QSharedPointer>::create(); KIMAP::FetchJob::FetchScope scope; scope.parts.clear(); - scope.mode = KIMAP::FetchJob::FetchScope::Headers; + scope.mode = KIMAP::FetchJob::FetchScope::Flags; //Fetch headers of all messages return fetch(KIMAP::ImapSet(1, 0), scope, @@ -434,12 +434,21 @@ QString ImapServerProxy::mailboxFromFolder(const Folder &folder) const return folder.pathParts.join(mPersonalNamespaceSeparator); } -KAsync::Job ImapServerProxy::fetchMessages(const Folder &folder, std::function &)> callback) +KAsync::Job ImapServerProxy::fetchMessages(const Folder &folder, std::function &)> callback, std::function progress) { + auto time = QSharedPointer::create(); + time->start(); Q_ASSERT(!mPersonalNamespaceSeparator.isNull()); - return select(mailboxFromFolder(folder)).then>([this, callback, folder]() -> KAsync::Job { - return fetchHeaders(mailboxFromFolder(folder)).then, QList>([this, callback](const QList &uidsToFetch){ - SinkTrace() << "Uids to fetch: " << uidsToFetch; + return select(mailboxFromFolder(folder)).then>([this, callback, folder, time, progress]() -> KAsync::Job { + return fetchHeaders(mailboxFromFolder(folder)).then, QList>([this, callback, time, progress](const QList &uidsToFetch){ + SinkTrace() << "Fetched headers"; + SinkTrace() << " Total: " << uidsToFetch.size(); + SinkTrace() << " Uids to fetch: " << uidsToFetch; + SinkTrace() << " Took: " << Sink::Log::TraceTime(time->elapsed()); + auto totalCount = uidsToFetch.size(); + if (progress) { + progress(0, totalCount); + } if (uidsToFetch.isEmpty()) { SinkTrace() << "Nothing to fetch"; callback(QVector()); @@ -451,7 +460,14 @@ KAsync::Job ImapServerProxy::fetchMessages(const Folder &folder, std::func KIMAP::ImapSet set; set.add(uidsToFetch.toVector()); - return fetch(set, scope, callback); + auto count = QSharedPointer::create(); + return fetch(set, scope, [=](const QVector &messages) { + *count += messages.size(); + if (progress) { + progress(*count, totalCount); + } + callback(messages); + }); }); }); diff --git a/examples/imapresource/imapserverproxy.h b/examples/imapresource/imapserverproxy.h index b54b41e..f3e1794 100644 --- a/examples/imapresource/imapserverproxy.h +++ b/examples/imapresource/imapserverproxy.h @@ -126,7 +126,7 @@ public: QString mailboxFromFolder(const Folder &) const; KAsync::Job fetchFolders(std::function &)> callback); - KAsync::Job fetchMessages(const Folder &folder, std::function &)> callback); + KAsync::Job fetchMessages(const Folder &folder, std::function &)> callback, std::function progress = std::function()); private: KAsync::Job ping(); -- cgit v1.2.3