summaryrefslogtreecommitdiffstats
path: root/examples/imapresource/imapserverproxy.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-07-20 15:16:43 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-09-15 16:14:19 +0200
commit5f127fa687079c7180142e371c86bd6dacfb845e (patch)
tree11731de3a1d626232dbba66d7c98c7db1a28940f /examples/imapresource/imapserverproxy.cpp
parentb3bb1fb9800b2d0b4d44892f4ff853e5060d975a (diff)
downloadsink-5f127fa687079c7180142e371c86bd6dacfb845e.tar.gz
sink-5f127fa687079c7180142e371c86bd6dacfb845e.zip
Progress reporting
Diffstat (limited to 'examples/imapresource/imapserverproxy.cpp')
-rw-r--r--examples/imapresource/imapserverproxy.cpp28
1 files changed, 22 insertions, 6 deletions
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<QList<qint64>> ImapServerProxy::fetchHeaders(const QString &mailbox)
325 auto list = QSharedPointer<QList<qint64>>::create(); 325 auto list = QSharedPointer<QList<qint64>>::create();
326 KIMAP::FetchJob::FetchScope scope; 326 KIMAP::FetchJob::FetchScope scope;
327 scope.parts.clear(); 327 scope.parts.clear();
328 scope.mode = KIMAP::FetchJob::FetchScope::Headers; 328 scope.mode = KIMAP::FetchJob::FetchScope::Flags;
329 329
330 //Fetch headers of all messages 330 //Fetch headers of all messages
331 return fetch(KIMAP::ImapSet(1, 0), scope, 331 return fetch(KIMAP::ImapSet(1, 0), scope,
@@ -434,12 +434,21 @@ QString ImapServerProxy::mailboxFromFolder(const Folder &folder) const
434 return folder.pathParts.join(mPersonalNamespaceSeparator); 434 return folder.pathParts.join(mPersonalNamespaceSeparator);
435} 435}
436 436
437KAsync::Job<void> ImapServerProxy::fetchMessages(const Folder &folder, std::function<void(const QVector<Message> &)> callback) 437KAsync::Job<void> ImapServerProxy::fetchMessages(const Folder &folder, std::function<void(const QVector<Message> &)> callback, std::function<void(int, int)> progress)
438{ 438{
439 auto time = QSharedPointer<QTime>::create();
440 time->start();
439 Q_ASSERT(!mPersonalNamespaceSeparator.isNull()); 441 Q_ASSERT(!mPersonalNamespaceSeparator.isNull());
440 return select(mailboxFromFolder(folder)).then<void, KAsync::Job<void>>([this, callback, folder]() -> KAsync::Job<void> { 442 return select(mailboxFromFolder(folder)).then<void, KAsync::Job<void>>([this, callback, folder, time, progress]() -> KAsync::Job<void> {
441 return fetchHeaders(mailboxFromFolder(folder)).then<void, KAsync::Job<void>, QList<qint64>>([this, callback](const QList<qint64> &uidsToFetch){ 443 return fetchHeaders(mailboxFromFolder(folder)).then<void, KAsync::Job<void>, QList<qint64>>([this, callback, time, progress](const QList<qint64> &uidsToFetch){
442 SinkTrace() << "Uids to fetch: " << uidsToFetch; 444 SinkTrace() << "Fetched headers";
445 SinkTrace() << " Total: " << uidsToFetch.size();
446 SinkTrace() << " Uids to fetch: " << uidsToFetch;
447 SinkTrace() << " Took: " << Sink::Log::TraceTime(time->elapsed());
448 auto totalCount = uidsToFetch.size();
449 if (progress) {
450 progress(0, totalCount);
451 }
443 if (uidsToFetch.isEmpty()) { 452 if (uidsToFetch.isEmpty()) {
444 SinkTrace() << "Nothing to fetch"; 453 SinkTrace() << "Nothing to fetch";
445 callback(QVector<Message>()); 454 callback(QVector<Message>());
@@ -451,7 +460,14 @@ KAsync::Job<void> ImapServerProxy::fetchMessages(const Folder &folder, std::func
451 460
452 KIMAP::ImapSet set; 461 KIMAP::ImapSet set;
453 set.add(uidsToFetch.toVector()); 462 set.add(uidsToFetch.toVector());
454 return fetch(set, scope, callback); 463 auto count = QSharedPointer<int>::create();
464 return fetch(set, scope, [=](const QVector<Message> &messages) {
465 *count += messages.size();
466 if (progress) {
467 progress(*count, totalCount);
468 }
469 callback(messages);
470 });
455 }); 471 });
456 472
457 }); 473 });