From d417f01e2eebeedfaae76b40667372bd0fb21fea Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 18 Jan 2015 14:29:08 +0100 Subject: Use jobs in queries, sync works again. --- dummyresource/facade.cpp | 23 +++++++++++++++-------- dummyresource/facade.h | 4 ++-- dummyresource/resourcefactory.cpp | 4 +++- 3 files changed, 20 insertions(+), 11 deletions(-) (limited to 'dummyresource') diff --git a/dummyresource/facade.cpp b/dummyresource/facade.cpp index 13c174b..b7ba2c2 100644 --- a/dummyresource/facade.cpp +++ b/dummyresource/facade.cpp @@ -118,22 +118,29 @@ static std::function pre return preparedQuery; } -void DummyResourceFacade::synchronizeResource(const std::function &continuation) +Async::Job DummyResourceFacade::synchronizeResource(bool sync) { //TODO check if a sync is necessary //TODO Only sync what was requested //TODO timeout - mResourceAccess->synchronizeResource().then([continuation](Async::Future &f){ - continuation(); - f.setFinished(); - }).exec(); + + if (sync) { + return Async::start([=](Async::Future &future) { + mResourceAccess->open(); + mResourceAccess->synchronizeResource().then([&future](Async::Future &f) { + future.setFinished(); + f.setFinished(); + }).exec(); + }); + } + return Async::null(); } -void DummyResourceFacade::load(const Akonadi2::Query &query, const std::function &resultCallback, const std::function &completeCallback) +Async::Job DummyResourceFacade::load(const Akonadi2::Query &query, const std::function &resultCallback) { qDebug() << "load called"; - synchronizeResource([=]() { + return synchronizeResource(query.syncOnDemand).then([=](Async::Future &future) { qDebug() << "sync complete"; //Now that the sync is complete we can execute the query const auto preparedQuery = prepareQuery(query); @@ -188,7 +195,7 @@ void DummyResourceFacade::load(const Akonadi2::Query &query, const std::function } return true; }); - completeCallback(); + future.setFinished(); }); } diff --git a/dummyresource/facade.h b/dummyresource/facade.h index 9c8827a..da0b1d6 100644 --- a/dummyresource/facade.h +++ b/dummyresource/facade.h @@ -40,10 +40,10 @@ public: virtual Async::Job create(const Akonadi2::Domain::Event &domainObject); virtual Async::Job modify(const Akonadi2::Domain::Event &domainObject); virtual Async::Job remove(const Akonadi2::Domain::Event &domainObject); - virtual void load(const Akonadi2::Query &query, const std::function &resultCallback, const std::function &completeCallback); + virtual Async::Job load(const Akonadi2::Query &query, const std::function &resultCallback); private: - void synchronizeResource(const std::function &continuation); + Async::Job synchronizeResource(bool sync); QSharedPointer mResourceAccess; QSharedPointer > mFactory; }; diff --git a/dummyresource/resourcefactory.cpp b/dummyresource/resourcefactory.cpp index f74eb72..dc716ef 100644 --- a/dummyresource/resourcefactory.cpp +++ b/dummyresource/resourcefactory.cpp @@ -317,7 +317,9 @@ Async::Job DummyResource::synchronizeWithSource(Akonadi2::Pipeline *pipeli builder.add_attachment(attachment); auto buffer = builder.Finish(); DummyCalendar::FinishDummyEventBuffer(m_fbb, buffer); - enqueueCommand(mSynchronizerQueue, Akonadi2::Commands::CreateEntityCommand, QByteArray::fromRawData(reinterpret_cast(m_fbb.GetBufferPointer()), m_fbb.GetSize())); + flatbuffers::FlatBufferBuilder entityFbb; + Akonadi2::EntityBuffer::assembleEntityBuffer(entityFbb, 0, 0, m_fbb.GetBufferPointer(), m_fbb.GetSize(), 0, 0); + enqueueCommand(mSynchronizerQueue, Akonadi2::Commands::CreateEntityCommand, QByteArray::fromRawData(reinterpret_cast(entityFbb.GetBufferPointer()), entityFbb.GetSize())); } else { //modification //TODO diff and create modification if necessary } -- cgit v1.2.3