From 02c311e38b8b9b80814a4e8e582d5c5a56a51056 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 30 Dec 2015 09:32:52 +0100 Subject: Don't expose enabling/disabling of changerecording to resource implementations --- examples/maildirresource/maildirresource.cpp | 14 +++++--------- examples/maildirresource/maildirresource.h | 2 +- 2 files changed, 6 insertions(+), 10 deletions(-) (limited to 'examples/maildirresource') diff --git a/examples/maildirresource/maildirresource.cpp b/examples/maildirresource/maildirresource.cpp index 45ee8c1..6c6c5aa 100644 --- a/examples/maildirresource/maildirresource.cpp +++ b/examples/maildirresource/maildirresource.cpp @@ -344,28 +344,24 @@ void MaildirResource::synchronizeMails(Akonadi2::Storage::Transaction &transacti } } -KAsync::Job MaildirResource::synchronizeWithSource() +KAsync::Job MaildirResource::synchronizeWithSource(Akonadi2::Storage &mainStore, Akonadi2::Storage &synchronizationStore) { Log() << " Synchronizing"; - return KAsync::start([this]() { - //Changereplay would deadlock otherwise when trying to open the synchronization store - enableChangeReplay(false); - auto transaction = Akonadi2::Storage(Akonadi2::storageLocation(), mResourceInstanceIdentifier, Akonadi2::Storage::ReadOnly).createTransaction(Akonadi2::Storage::ReadOnly); - Akonadi2::Storage store(Akonadi2::storageLocation(), mResourceInstanceIdentifier + ".synchronization", Akonadi2::Storage::ReadWrite); + return KAsync::start([this, &mainStore, &synchronizationStore]() { + auto transaction = mainStore.createTransaction(Akonadi2::Storage::ReadOnly); { - auto synchronizationTransaction = store.createTransaction(Akonadi2::Storage::ReadWrite); + auto synchronizationTransaction = synchronizationStore.createTransaction(Akonadi2::Storage::ReadWrite); synchronizeFolders(transaction, synchronizationTransaction); //The next sync needs the folders available synchronizationTransaction.commit(); } for (const auto &folder : listAvailableFolders()) { - auto synchronizationTransaction = store.createTransaction(Akonadi2::Storage::ReadWrite); + auto synchronizationTransaction = synchronizationStore.createTransaction(Akonadi2::Storage::ReadWrite); synchronizeMails(transaction, synchronizationTransaction, folder); //Don't let the transaction grow too much synchronizationTransaction.commit(); } Log() << "Done Synchronizing"; - enableChangeReplay(true); }); } diff --git a/examples/maildirresource/maildirresource.h b/examples/maildirresource/maildirresource.h index b3ceefa..9c205c8 100644 --- a/examples/maildirresource/maildirresource.h +++ b/examples/maildirresource/maildirresource.h @@ -35,7 +35,7 @@ class MaildirResource : public Akonadi2::GenericResource { public: MaildirResource(const QByteArray &instanceIdentifier, const QSharedPointer &pipeline = QSharedPointer()); - KAsync::Job synchronizeWithSource() Q_DECL_OVERRIDE; + KAsync::Job synchronizeWithSource(Akonadi2::Storage &mainStore, Akonadi2::Storage &synchronizationStore) Q_DECL_OVERRIDE; static void removeFromDisk(const QByteArray &instanceIdentifier); private: KAsync::Job replay(const QByteArray &type, const QByteArray &key, const QByteArray &value) Q_DECL_OVERRIDE; -- cgit v1.2.3