From 9bd53f793c6eb1b3ce9a866d226fbb07a8036ff7 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 16 Dec 2016 10:11:27 +0100 Subject: Don't try to fetch flags on initial sync. --- examples/imapresource/imapresource.cpp | 38 +++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 14 deletions(-) (limited to 'examples/imapresource/imapresource.cpp') diff --git a/examples/imapresource/imapresource.cpp b/examples/imapresource/imapresource.cpp index 04781ef..e16a8d7 100644 --- a/examples/imapresource/imapresource.cpp +++ b/examples/imapresource/imapresource.cpp @@ -193,24 +193,34 @@ public: bool canDoIncrementalRemovals = false; return KAsync::start([=]() { //First we fetch flag changes for all messages. Since we don't know which messages are locally available we just get everything and only apply to what we have. - SinkLog() << "About to update flags" << folder.path(); auto uidNext = syncStore().readValue(folder.normalizedPath().toUtf8() + "uidnext").toLongLong(); - const auto changedsince = syncStore().readValue(folder.normalizedPath().toUtf8() + "changedsince").toLongLong(); - return imap->fetchFlags(folder, KIMAP2::ImapSet(1, qMax(uidNext, qint64(1))), changedsince, [this, folder](const Message &message) { - const auto folderLocalId = syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, folder.normalizedPath().toUtf8()); - const auto remoteId = assembleMailRid(folderLocalId, message.uid); + bool ok = false; + const auto changedsince = syncStore().readValue(folder.normalizedPath().toUtf8() + "changedsince").toLongLong(&ok); + SinkLog() << "About to update flags" << folder.path() << "changedsince: " << changedsince; + if (ok) { + return imap->fetchFlags(folder, KIMAP2::ImapSet(1, qMax(uidNext, qint64(1))), changedsince, [this, folder](const Message &message) { + const auto folderLocalId = syncStore().resolveRemoteId(ENTITY_TYPE_FOLDER, folder.normalizedPath().toUtf8()); + const auto remoteId = assembleMailRid(folderLocalId, message.uid); - SinkLog() << "Updating mail flags " << remoteId << message.flags; + SinkLog() << "Updating mail flags " << remoteId << message.flags; - auto mail = Sink::ApplicationDomain::Mail::create(mResourceInstanceIdentifier); - mail.setUnread(!message.flags.contains(Imap::Flags::Seen)); - mail.setImportant(message.flags.contains(Imap::Flags::Flagged)); + auto mail = Sink::ApplicationDomain::Mail::create(mResourceInstanceIdentifier); + mail.setUnread(!message.flags.contains(Imap::Flags::Seen)); + mail.setImportant(message.flags.contains(Imap::Flags::Flagged)); - modify(ENTITY_TYPE_MAIL, remoteId, mail); - }) - .syncThen([this, folder](const SelectResult &selectResult) { - syncStore().writeValue(folder.normalizedPath().toUtf8() + "changedsince", QByteArray::number(selectResult.highestModSequence)); - }); + modify(ENTITY_TYPE_MAIL, remoteId, mail); + }) + .syncThen([this, folder](const SelectResult &selectResult) { + SinkLog() << "Flags updated. New changedsince value: " << selectResult.highestModSequence; + syncStore().writeValue(folder.normalizedPath().toUtf8() + "changedsince", QByteArray::number(selectResult.highestModSequence)); + }); + } else { + return imap->select(imap->mailboxFromFolder(folder)) + .syncThen([this, folder](const SelectResult &selectResult) { + SinkLog() << "No flags to update. New changedsince value: " << selectResult.highestModSequence; + syncStore().writeValue(folder.normalizedPath().toUtf8() + "changedsince", QByteArray::number(selectResult.highestModSequence)); + }); + } }) .then([=]() { auto job = [&] { -- cgit v1.2.3