diff options
Diffstat (limited to 'examples/imapresource/imapresource.cpp')
-rw-r--r-- | examples/imapresource/imapresource.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index 09f57d5..fff4dc7 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp | |||
@@ -393,6 +393,44 @@ public: | |||
393 | return list; | 393 | return list; |
394 | } | 394 | } |
395 | 395 | ||
396 | QByteArray getFolderFromLocalId(const QByteArray &id) | ||
397 | { | ||
398 | auto mailRemoteId = syncStore().resolveLocalId(ApplicationDomain::getTypeName<ApplicationDomain::Mail>(), id); | ||
399 | return folderIdFromMailRid(mailRemoteId); | ||
400 | } | ||
401 | |||
402 | void mergeIntoQueue(const Synchronizer::SyncRequest &request, QList<Synchronizer::SyncRequest> &queue) Q_DECL_OVERRIDE | ||
403 | { | ||
404 | auto isIndividualMailSync = [](const Synchronizer::SyncRequest &request) { | ||
405 | if (request.requestType == SyncRequest::Synchronization) { | ||
406 | const auto query = request.query; | ||
407 | if (query.type() == ApplicationDomain::getTypeName<ApplicationDomain::Mail>()) { | ||
408 | return !query.ids().isEmpty(); | ||
409 | } | ||
410 | } | ||
411 | return false; | ||
412 | |||
413 | }; | ||
414 | |||
415 | if (isIndividualMailSync(request)) { | ||
416 | auto newId = request.query.ids().first(); | ||
417 | auto requestFolder = getFolderFromLocalId(newId); | ||
418 | for (auto &r : queue) { | ||
419 | if (isIndividualMailSync(r)) { | ||
420 | auto queueFolder = getFolderFromLocalId(r.query.ids().first()); | ||
421 | if (requestFolder == queueFolder) { | ||
422 | //Merge | ||
423 | r.query.filter(newId); | ||
424 | SinkTrace() << "Merging request " << request.query; | ||
425 | SinkTrace() << " to " << r.query; | ||
426 | return; | ||
427 | } | ||
428 | } | ||
429 | } | ||
430 | } | ||
431 | queue << request; | ||
432 | } | ||
433 | |||
396 | KAsync::Job<void> login(QSharedPointer<ImapServerProxy> imap) | 434 | KAsync::Job<void> login(QSharedPointer<ImapServerProxy> imap) |
397 | { | 435 | { |
398 | SinkTrace() << "Connecting to:" << mServer << mPort; | 436 | SinkTrace() << "Connecting to:" << mServer << mPort; |