diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-07-20 15:16:43 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-09-15 16:14:19 +0200 |
commit | 5f127fa687079c7180142e371c86bd6dacfb845e (patch) | |
tree | 11731de3a1d626232dbba66d7c98c7db1a28940f /examples/imapresource/imapserverproxy.cpp | |
parent | b3bb1fb9800b2d0b4d44892f4ff853e5060d975a (diff) | |
download | sink-5f127fa687079c7180142e371c86bd6dacfb845e.tar.gz sink-5f127fa687079c7180142e371c86bd6dacfb845e.zip |
Progress reporting
Diffstat (limited to 'examples/imapresource/imapserverproxy.cpp')
-rw-r--r-- | examples/imapresource/imapserverproxy.cpp | 28 |
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 | ||
437 | KAsync::Job<void> ImapServerProxy::fetchMessages(const Folder &folder, std::function<void(const QVector<Message> &)> callback) | 437 | KAsync::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 | }); |