summaryrefslogtreecommitdiffstats
path: root/dummyresource
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-01-25 11:23:08 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-01-25 11:23:08 +0100
commit3fc8ce958fc244e64a3a3a92f3b1440aae04133b (patch)
tree4ba2b3ca3ee6a17e7f3e7ce67d6ca934626cad7a /dummyresource
parent9b744da32e64d8a6cd342faba8fc3232884d60f2 (diff)
downloadsink-3fc8ce958fc244e64a3a3a92f3b1440aae04133b.tar.gz
sink-3fc8ce958fc244e64a3a3a92f3b1440aae04133b.zip
A way to ensure all messages have been processed.
As queries become reactive this should become less important. We can then just wait until all results become available. For tests it is in either case useful though.
Diffstat (limited to 'dummyresource')
-rw-r--r--dummyresource/facade.cpp8
-rw-r--r--dummyresource/facade.h2
-rw-r--r--dummyresource/resourcefactory.cpp7
-rw-r--r--dummyresource/resourcefactory.h1
4 files changed, 13 insertions, 5 deletions
diff --git a/dummyresource/facade.cpp b/dummyresource/facade.cpp
index 1aaec68..fcce871 100644
--- a/dummyresource/facade.cpp
+++ b/dummyresource/facade.cpp
@@ -115,16 +115,16 @@ static std::function<bool(const std::string &key, DummyEvent const *buffer, Akon
115 return preparedQuery; 115 return preparedQuery;
116} 116}
117 117
118Async::Job<void> DummyResourceFacade::synchronizeResource(bool sync) 118Async::Job<void> DummyResourceFacade::synchronizeResource(bool sync, bool processAll)
119{ 119{
120 //TODO check if a sync is necessary 120 //TODO check if a sync is necessary
121 //TODO Only sync what was requested 121 //TODO Only sync what was requested
122 //TODO timeout 122 //TODO timeout
123 123
124 if (sync) { 124 if (sync || processAll) {
125 return Async::start<void>([=](Async::Future<void> &future) { 125 return Async::start<void>([=](Async::Future<void> &future) {
126 mResourceAccess->open(); 126 mResourceAccess->open();
127 mResourceAccess->synchronizeResource().then<void>([&future](Async::Future<void> &f) { 127 mResourceAccess->synchronizeResource(sync, processAll).then<void>([&future](Async::Future<void> &f) {
128 future.setFinished(); 128 future.setFinished();
129 f.setFinished(); 129 f.setFinished();
130 }).exec(); 130 }).exec();
@@ -195,7 +195,7 @@ void DummyResourceFacade::readValue(QSharedPointer<Akonadi2::Storage> storage, c
195 195
196Async::Job<void> DummyResourceFacade::load(const Akonadi2::Query &query, const std::function<void(const Akonadi2::Domain::Event::Ptr &)> &resultCallback) 196Async::Job<void> DummyResourceFacade::load(const Akonadi2::Query &query, const std::function<void(const Akonadi2::Domain::Event::Ptr &)> &resultCallback)
197{ 197{
198 return synchronizeResource(query.syncOnDemand).then<void>([=](Async::Future<void> &future) { 198 return synchronizeResource(query.syncOnDemand, query.processAll).then<void>([=](Async::Future<void> &future) {
199 //Now that the sync is complete we can execute the query 199 //Now that the sync is complete we can execute the query
200 const auto preparedQuery = prepareQuery(query); 200 const auto preparedQuery = prepareQuery(query);
201 201
diff --git a/dummyresource/facade.h b/dummyresource/facade.h
index c9c8047..1f69161 100644
--- a/dummyresource/facade.h
+++ b/dummyresource/facade.h
@@ -44,7 +44,7 @@ public:
44 44
45private: 45private:
46 void readValue(QSharedPointer<Akonadi2::Storage> storage, const QByteArray &key, const std::function<void(const Akonadi2::Domain::Event::Ptr &)> &resultCallback, std::function<bool(const std::string &key, DummyCalendar::DummyEvent const *buffer, Akonadi2::Domain::Buffer::Event const *local)>); 46 void readValue(QSharedPointer<Akonadi2::Storage> storage, const QByteArray &key, const std::function<void(const Akonadi2::Domain::Event::Ptr &)> &resultCallback, std::function<bool(const std::string &key, DummyCalendar::DummyEvent const *buffer, Akonadi2::Domain::Buffer::Event const *local)>);
47 Async::Job<void> synchronizeResource(bool sync); 47 Async::Job<void> synchronizeResource(bool sync, bool processAll);
48 QSharedPointer<Akonadi2::ResourceAccess> mResourceAccess; 48 QSharedPointer<Akonadi2::ResourceAccess> mResourceAccess;
49 QSharedPointer<DomainTypeAdaptorFactory<Akonadi2::Domain::Event, Akonadi2::Domain::Buffer::Event, DummyCalendar::DummyEvent> > mFactory; 49 QSharedPointer<DomainTypeAdaptorFactory<Akonadi2::Domain::Event, Akonadi2::Domain::Buffer::Event, DummyCalendar::DummyEvent> > mFactory;
50}; 50};
diff --git a/dummyresource/resourcefactory.cpp b/dummyresource/resourcefactory.cpp
index 18083cb..f510cd5 100644
--- a/dummyresource/resourcefactory.cpp
+++ b/dummyresource/resourcefactory.cpp
@@ -387,7 +387,14 @@ Async::Job<void> DummyResource::synchronizeWithSource(Akonadi2::Pipeline *pipeli
387 } 387 }
388 } 388 }
389 //TODO find items to remove 389 //TODO find items to remove
390 qDebug() << "sync complete";
391 f.setFinished();
392 });
393}
390 394
395Async::Job<void> DummyResource::processAllMessages()
396{
397 return Async::start<void>([this](Async::Future<void> &f) {
391 //We have to wait for all items to be processed to ensure the synced items are available when a query gets executed. 398 //We have to wait for all items to be processed to ensure the synced items are available when a query gets executed.
392 //TODO: report errors while processing sync? 399 //TODO: report errors while processing sync?
393 if (mSynchronizerQueue.isEmpty()) { 400 if (mSynchronizerQueue.isEmpty()) {
diff --git a/dummyresource/resourcefactory.h b/dummyresource/resourcefactory.h
index 767eba1..3b99d5e 100644
--- a/dummyresource/resourcefactory.h
+++ b/dummyresource/resourcefactory.h
@@ -35,6 +35,7 @@ class DummyResource : public Akonadi2::Resource
35public: 35public:
36 DummyResource(); 36 DummyResource();
37 Async::Job<void> synchronizeWithSource(Akonadi2::Pipeline *pipeline); 37 Async::Job<void> synchronizeWithSource(Akonadi2::Pipeline *pipeline);
38 Async::Job<void> processAllMessages();
38 void processCommand(int commandId, const QByteArray &data, uint size, Akonadi2::Pipeline *pipeline); 39 void processCommand(int commandId, const QByteArray &data, uint size, Akonadi2::Pipeline *pipeline);
39 void configurePipeline(Akonadi2::Pipeline *pipeline); 40 void configurePipeline(Akonadi2::Pipeline *pipeline);
40 int error() const; 41 int error() const;