From c3a20160d4ff52c8ec288f6a42f7e136064fb493 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 11 Oct 2015 17:32:30 +0200 Subject: Replay removals. Now we just have to avoid removing the revision too early from the resource. --- common/clientapi.h | 4 ++-- common/entitystorage.cpp | 8 ++++++-- common/facade.h | 7 ++----- tests/dummyresourcetest.cpp | 13 +++++++++++-- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/common/clientapi.h b/common/clientapi.h index 04433f8..e467b8f 100644 --- a/common/clientapi.h +++ b/common/clientapi.h @@ -175,9 +175,9 @@ public: //Potentially move to separate thread as well auto facade = FacadeFactory::instance().getFacade(resourceName(resourceIdentifier), resourceIdentifier); if (facade) { - facade->remove(domainObject).template then([facade](){}, [](int errorCode, const QString &error) { + return facade->remove(domainObject).template then([facade](){}, [](int errorCode, const QString &error) { Warning() << "Failed to remove"; - }).exec().waitForFinished(); + }); } return KAsync::error(-1, "Failed to create a facade"); } diff --git a/common/entitystorage.cpp b/common/entitystorage.cpp index b77b481..b19fe0a 100644 --- a/common/entitystorage.cpp +++ b/common/entitystorage.cpp @@ -58,7 +58,11 @@ void EntityStorageBase::readEntity(const Akonadi2::Storage::Transaction &transac auto operation = metadataBuffer->operation(); auto domainObject = create(key, revision, mDomainTypeAdaptorFactory->createAdaptor(entity)); - resultCallback(domainObject, operation); + if (operation == Akonadi2::Operation_Removal) { + resultCallback(create(key, revision, mDomainTypeAdaptorFactory->createAdaptor(entity)), operation); + } else { + resultCallback(create(key, revision, mDomainTypeAdaptorFactory->createAdaptor(entity)), operation); + } return false; }, mBufferType); } @@ -124,7 +128,7 @@ ResultSet EntityStorageBase::getResultSet(const Akonadi2::Query &query, Akonadi2 const qint64 topRevision = Akonadi2::Storage::maxRevision(transaction); QSet remainingFilters = query.propertyFilter.keys().toSet(); ResultSet resultSet; - const bool initialQuery = (baseRevision == 0); + const bool initialQuery = (baseRevision == 1); if (initialQuery) { Trace() << "Initial result set update"; resultSet = loadInitialResultSet(query, transaction, remainingFilters); diff --git a/common/facade.h b/common/facade.h index 5ed3bde..38388c7 100644 --- a/common/facade.h +++ b/common/facade.h @@ -54,11 +54,8 @@ public: { //TODO: JOBAPI: that last empty .then should not be necessary //TODO: remove newRevision - if (mLatestRevision == newRevision && mLatestRevision > 0) { - return KAsync::null(); - } - return queryFunction(mLatestRevision).then([this](qint64 revision) { - mLatestRevision = revision + 1; + return queryFunction(mLatestRevision + 1).then([this](qint64 revision) { + mLatestRevision = revision; }).then([](){}); } diff --git a/tests/dummyresourcetest.cpp b/tests/dummyresourcetest.cpp index caf808a..fe3acc9 100644 --- a/tests/dummyresourcetest.cpp +++ b/tests/dummyresourcetest.cpp @@ -29,7 +29,7 @@ private Q_SLOTS: removeFromDisk("org.kde.dummy.instance1"); removeFromDisk("org.kde.dummy.instance1.userqueue"); removeFromDisk("org.kde.dummy.instance1.synchronizerqueue"); - removeFromDisk("org.kde.dummy.instance1.index.uid"); + removeFromDisk("org.kde.dummy.instance1.event.index.uid"); ResourceConfig::addResource("org.kde.dummy.instance1", "org.kde.dummy"); } @@ -39,7 +39,7 @@ private Q_SLOTS: removeFromDisk("org.kde.dummy.instance1"); removeFromDisk("org.kde.dummy.instance1.userqueue"); removeFromDisk("org.kde.dummy.instance1.synchronizerqueue"); - removeFromDisk("org.kde.dummy.instance1.index.uid"); + removeFromDisk("org.kde.dummy.instance1.event.index.uid"); auto factory = Akonadi2::ResourceFactory::load("org.kde.dummy"); QVERIFY(factory); } @@ -214,6 +214,15 @@ private Q_SLOTS: QCOMPARE(value->getProperty("uid").toByteArray(), QByteArray("testuid")); QCOMPARE(value->getProperty("summary").toByteArray(), QByteArray("summaryValue2")); } + + Akonadi2::Store::remove(event2, "org.kde.dummy.instance1").exec().waitForFinished(); + + //Test remove + { + async::SyncListResult result(Akonadi2::Store::load(query)); + result.exec(); + QCOMPARE(result.size(), 0); + } } }; -- cgit v1.2.3