diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-12-22 19:29:17 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-12-22 19:29:17 +0100 |
commit | a793c8d1c7a872db6152aa197c7a305f97644630 (patch) | |
tree | 350e6581c76218cf9e0a398d657b14745921cf59 /examples/maildirresource/maildirresource.cpp | |
parent | 97c2e02697ba90d2339a905b7ad81aa883dca7a5 (diff) | |
download | sink-a793c8d1c7a872db6152aa197c7a305f97644630.tar.gz sink-a793c8d1c7a872db6152aa197c7a305f97644630.zip |
Use the folder index for syncing mails.
If we iterate over all mails, all mails that are not in the current
folder will not be existing in exists(). If we use the index instead to
only get to the mails we need we're in a better situation.
Diffstat (limited to 'examples/maildirresource/maildirresource.cpp')
-rw-r--r-- | examples/maildirresource/maildirresource.cpp | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/examples/maildirresource/maildirresource.cpp b/examples/maildirresource/maildirresource.cpp index 5a38b01..d0b663b 100644 --- a/examples/maildirresource/maildirresource.cpp +++ b/examples/maildirresource/maildirresource.cpp | |||
@@ -277,8 +277,27 @@ void MaildirResource::synchronizeMails(Akonadi2::Storage::Transaction &transacti | |||
277 | Akonadi2::Storage store(Akonadi2::storageLocation(), mResourceInstanceIdentifier + ".synchronization", Akonadi2::Storage::ReadWrite); | 277 | Akonadi2::Storage store(Akonadi2::storageLocation(), mResourceInstanceIdentifier + ".synchronization", Akonadi2::Storage::ReadWrite); |
278 | auto synchronizationTransaction = store.createTransaction(Akonadi2::Storage::ReadWrite); | 278 | auto synchronizationTransaction = store.createTransaction(Akonadi2::Storage::ReadWrite); |
279 | 279 | ||
280 | scanForRemovals(transaction, synchronizationTransaction, bufferType, [&listingPath](const QByteArray &remoteId) -> bool { | 280 | const auto folderLocalId = resolveRemoteId(ENTITY_TYPE_FOLDER, path, synchronizationTransaction); |
281 | return QFile(listingPath + QDir::separator() + remoteId).exists(); | 281 | |
282 | auto exists = [&listingPath](const QByteArray &remoteId) -> bool { | ||
283 | return QFile(listingPath + "/" + remoteId).exists(); | ||
284 | }; | ||
285 | |||
286 | auto property = "folder"; | ||
287 | Index index(bufferType + ".index." + property, transaction); | ||
288 | index.lookup(folderLocalId.toLatin1(), [&](const QByteArray &akonadiId) { | ||
289 | const auto remoteId = resolveLocalId(bufferType, akonadiId, synchronizationTransaction); | ||
290 | if (!remoteId.isEmpty()) { | ||
291 | if (!exists(remoteId.toLatin1())) { | ||
292 | Trace() << "Found a removed entity: " << akonadiId; | ||
293 | deleteEntity(akonadiId, Akonadi2::Storage::maxRevision(transaction), bufferType, [this](const QByteArray &buffer) { | ||
294 | enqueueCommand(mSynchronizerQueue, Akonadi2::Commands::DeleteEntityCommand, buffer); | ||
295 | }); | ||
296 | } | ||
297 | } | ||
298 | }, | ||
299 | [property](const Index::Error &error) { | ||
300 | Warning() << "Error in index: " << error.message << property; | ||
282 | }); | 301 | }); |
283 | 302 | ||
284 | while (entryIterator->hasNext()) { | 303 | while (entryIterator->hasNext()) { |
@@ -300,7 +319,7 @@ void MaildirResource::synchronizeMails(Akonadi2::Storage::Transaction &transacti | |||
300 | mail.setProperty("sender", msg->from(true)->asUnicodeString()); | 319 | mail.setProperty("sender", msg->from(true)->asUnicodeString()); |
301 | mail.setProperty("senderName", msg->from(true)->asUnicodeString()); | 320 | mail.setProperty("senderName", msg->from(true)->asUnicodeString()); |
302 | mail.setProperty("date", msg->date(true)->dateTime()); | 321 | mail.setProperty("date", msg->date(true)->dateTime()); |
303 | mail.setProperty("folder", resolveRemoteId(ENTITY_TYPE_FOLDER, path, synchronizationTransaction)); | 322 | mail.setProperty("folder", folderLocalId); |
304 | mail.setProperty("mimeMessage", filepath); | 323 | mail.setProperty("mimeMessage", filepath); |
305 | mail.setProperty("unread", !flags.testFlag(KPIM::Maildir::Seen)); | 324 | mail.setProperty("unread", !flags.testFlag(KPIM::Maildir::Seen)); |
306 | mail.setProperty("important", flags.testFlag(KPIM::Maildir::Flagged)); | 325 | mail.setProperty("important", flags.testFlag(KPIM::Maildir::Flagged)); |