diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-12-29 22:32:50 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-12-29 22:32:50 +0100 |
commit | e99453c21eb9100d6fe05ccec153fe6e640bb440 (patch) | |
tree | 121647baf74e595a14222c91582a7e9d2c44efd7 | |
parent | 312702b809907866c085b92b1127129aaaf7f693 (diff) | |
download | sink-e99453c21eb9100d6fe05ccec153fe6e640bb440.tar.gz sink-e99453c21eb9100d6fe05ccec153fe6e640bb440.zip |
Pass transactions into sync functions
So we create the store in one place.
-rw-r--r-- | examples/maildirresource/maildirresource.cpp | 23 | ||||
-rw-r--r-- | examples/maildirresource/maildirresource.h | 4 |
2 files changed, 15 insertions, 12 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); |
diff --git a/examples/maildirresource/maildirresource.h b/examples/maildirresource/maildirresource.h index e577e18..b3ceefa 100644 --- a/examples/maildirresource/maildirresource.h +++ b/examples/maildirresource/maildirresource.h | |||
@@ -75,8 +75,8 @@ private: | |||
75 | */ | 75 | */ |
76 | void createOrModify(Akonadi2::Storage::Transaction &transaction, Akonadi2::Storage::Transaction &synchronizationTransaction, DomainTypeAdaptorFactoryInterface &adaptorFactory, const QByteArray &bufferType, const QByteArray &remoteId, const Akonadi2::ApplicationDomain::ApplicationDomainType &entity); | 76 | void createOrModify(Akonadi2::Storage::Transaction &transaction, Akonadi2::Storage::Transaction &synchronizationTransaction, DomainTypeAdaptorFactoryInterface &adaptorFactory, const QByteArray &bufferType, const QByteArray &remoteId, const Akonadi2::ApplicationDomain::ApplicationDomainType &entity); |
77 | 77 | ||
78 | void synchronizeFolders(Akonadi2::Storage::Transaction &transaction); | 78 | void synchronizeFolders(Akonadi2::Storage::Transaction &transaction, Akonadi2::Storage::Transaction &synchronizationTransaction); |
79 | void synchronizeMails(Akonadi2::Storage::Transaction &transaction, const QString &folder); | 79 | void synchronizeMails(Akonadi2::Storage::Transaction &transaction, Akonadi2::Storage::Transaction &synchronizationTransaction, const QString &folder); |
80 | QStringList listAvailableFolders(); | 80 | QStringList listAvailableFolders(); |
81 | QString mMaildirPath; | 81 | QString mMaildirPath; |
82 | QSharedPointer<MaildirMailAdaptorFactory> mMailAdaptorFactory; | 82 | QSharedPointer<MaildirMailAdaptorFactory> mMailAdaptorFactory; |