summaryrefslogtreecommitdiffstats
path: root/examples/imapresource
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
parentb3bb1fb9800b2d0b4d44892f4ff853e5060d975a (diff)
downloadsink-5f127fa687079c7180142e371c86bd6dacfb845e.tar.gz
sink-5f127fa687079c7180142e371c86bd6dacfb845e.zip
Progress reporting
Diffstat (limited to 'examples/imapresource')
-rw-r--r--examples/imapresource/imapresource.cpp3
-rw-r--r--examples/imapresource/imapserverproxy.cpp28
-rw-r--r--examples/imapresource/imapserverproxy.h2
3 files changed, 26 insertions, 7 deletions
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:
255 uids << msg.uid; 255 uids << msg.uid;
256 } 256 }
257 synchronizeMails(folder.normalizedPath(), messages); 257 synchronizeMails(folder.normalizedPath(), messages);
258 },
259 [](int progress, int total) {
260 SinkTrace() << "Progress: " << progress << " out of " << total;
258 }).exec(); 261 }).exec();
259 messagesFuture.waitForFinished(); 262 messagesFuture.waitForFinished();
260 commit(); 263 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<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 });
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:
126 QString mailboxFromFolder(const Folder &) const; 126 QString mailboxFromFolder(const Folder &) const;
127 127
128 KAsync::Job<void> fetchFolders(std::function<void(const QVector<Folder> &)> callback); 128 KAsync::Job<void> fetchFolders(std::function<void(const QVector<Folder> &)> callback);
129 KAsync::Job<void> fetchMessages(const Folder &folder, std::function<void(const QVector<Message> &)> callback); 129 KAsync::Job<void> fetchMessages(const Folder &folder, std::function<void(const QVector<Message> &)> callback, std::function<void(int, int)> progress = std::function<void(int, int)>());
130 130
131private: 131private:
132 KAsync::Job<void> ping(); 132 KAsync::Job<void> ping();