diff options
Diffstat (limited to 'examples/maildirresource/maildirresource.cpp')
-rw-r--r-- | examples/maildirresource/maildirresource.cpp | 23 |
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 | ||
254 | void MaildirResource::synchronizeFolders(Akonadi2::Storage::Transaction &transaction) | 254 | void 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 | ||
282 | void MaildirResource::synchronizeMails(Akonadi2::Storage::Transaction &transaction, const QString &path) | 279 | void 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); |