summaryrefslogtreecommitdiffstats
path: root/examples/maildirresource/maildirresource.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-12-22 19:29:17 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-12-22 19:29:17 +0100
commita793c8d1c7a872db6152aa197c7a305f97644630 (patch)
tree350e6581c76218cf9e0a398d657b14745921cf59 /examples/maildirresource/maildirresource.cpp
parent97c2e02697ba90d2339a905b7ad81aa883dca7a5 (diff)
downloadsink-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.cpp25
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));