summaryrefslogtreecommitdiffstats
path: root/examples/maildirresource/maildirresource.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/maildirresource/maildirresource.cpp')
-rw-r--r--examples/maildirresource/maildirresource.cpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/examples/maildirresource/maildirresource.cpp b/examples/maildirresource/maildirresource.cpp
index c3b3047..45ee8c1 100644
--- a/examples/maildirresource/maildirresource.cpp
+++ b/examples/maildirresource/maildirresource.cpp
@@ -251,15 +251,12 @@ void MaildirResource::createOrModify(Akonadi2::Storage::Transaction &transaction
251 } 251 }
252} 252}
253 253
254void MaildirResource::synchronizeFolders(Akonadi2::Storage::Transaction &transaction) 254void MaildirResource::synchronizeFolders(Akonadi2::Storage::Transaction &transaction, Akonadi2::Storage::Transaction &synchronizationTransaction)
255{ 255{
256 const QByteArray bufferType = ENTITY_TYPE_FOLDER; 256 const QByteArray bufferType = ENTITY_TYPE_FOLDER;
257 QStringList folderList = listAvailableFolders(); 257 QStringList folderList = listAvailableFolders();
258 Trace() << "Found folders " << folderList; 258 Trace() << "Found folders " << folderList;
259 259
260 Akonadi2::Storage store(Akonadi2::storageLocation(), mResourceInstanceIdentifier + ".synchronization", Akonadi2::Storage::ReadWrite);
261 auto synchronizationTransaction = store.createTransaction(Akonadi2::Storage::ReadWrite);
262 auto mainDatabase = transaction.openDatabase(bufferType + ".main");
263 scanForRemovals(transaction, synchronizationTransaction, bufferType, [&folderList](const QByteArray &remoteId) -> bool { 260 scanForRemovals(transaction, synchronizationTransaction, bufferType, [&folderList](const QByteArray &remoteId) -> bool {
264 return folderList.contains(remoteId); 261 return folderList.contains(remoteId);
265 }); 262 });
@@ -279,7 +276,7 @@ void MaildirResource::synchronizeFolders(Akonadi2::Storage::Transaction &transac
279 } 276 }
280} 277}
281 278
282void MaildirResource::synchronizeMails(Akonadi2::Storage::Transaction &transaction, const QString &path) 279void MaildirResource::synchronizeMails(Akonadi2::Storage::Transaction &transaction, Akonadi2::Storage::Transaction &synchronizationTransaction, const QString &path)
283{ 280{
284 Trace() << "Synchronizing mails" << path; 281 Trace() << "Synchronizing mails" << path;
285 const QByteArray bufferType = ENTITY_TYPE_MAIL; 282 const QByteArray bufferType = ENTITY_TYPE_MAIL;
@@ -296,9 +293,6 @@ void MaildirResource::synchronizeMails(Akonadi2::Storage::Transaction &transacti
296 293
297 QFileInfo entryInfo; 294 QFileInfo entryInfo;
298 295
299 Akonadi2::Storage store(Akonadi2::storageLocation(), mResourceInstanceIdentifier + ".synchronization", Akonadi2::Storage::ReadWrite);
300 auto synchronizationTransaction = store.createTransaction(Akonadi2::Storage::ReadWrite);
301
302 const auto folderLocalId = resolveRemoteId(ENTITY_TYPE_FOLDER, path, synchronizationTransaction); 296 const auto folderLocalId = resolveRemoteId(ENTITY_TYPE_FOLDER, path, synchronizationTransaction);
303 297
304 auto exists = [&listingPath](const QByteArray &remoteId) -> bool { 298 auto exists = [&listingPath](const QByteArray &remoteId) -> bool {
@@ -357,9 +351,18 @@ KAsync::Job<void> MaildirResource::synchronizeWithSource()
357 //Changereplay would deadlock otherwise when trying to open the synchronization store 351 //Changereplay would deadlock otherwise when trying to open the synchronization store
358 enableChangeReplay(false); 352 enableChangeReplay(false);
359 auto transaction = Akonadi2::Storage(Akonadi2::storageLocation(), mResourceInstanceIdentifier, Akonadi2::Storage::ReadOnly).createTransaction(Akonadi2::Storage::ReadOnly); 353 auto transaction = Akonadi2::Storage(Akonadi2::storageLocation(), mResourceInstanceIdentifier, Akonadi2::Storage::ReadOnly).createTransaction(Akonadi2::Storage::ReadOnly);
360 synchronizeFolders(transaction); 354 Akonadi2::Storage store(Akonadi2::storageLocation(), mResourceInstanceIdentifier + ".synchronization", Akonadi2::Storage::ReadWrite);
355 {
356 auto synchronizationTransaction = store.createTransaction(Akonadi2::Storage::ReadWrite);
357 synchronizeFolders(transaction, synchronizationTransaction);
358 //The next sync needs the folders available
359 synchronizationTransaction.commit();
360 }
361 for (const auto &folder : listAvailableFolders()) { 361 for (const auto &folder : listAvailableFolders()) {
362 synchronizeMails(transaction, folder); 362 auto synchronizationTransaction = store.createTransaction(Akonadi2::Storage::ReadWrite);
363 synchronizeMails(transaction, synchronizationTransaction, folder);
364 //Don't let the transaction grow too much
365 synchronizationTransaction.commit();
363 } 366 }
364 Log() << "Done Synchronizing"; 367 Log() << "Done Synchronizing";
365 enableChangeReplay(true); 368 enableChangeReplay(true);