From ef6150aa4c7c05ba4879dcf9274506ccd1b38f15 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 17 Dec 2015 19:16:55 +0100 Subject: Make queries by id work --- common/queryrunner.cpp | 5 +++++ tests/querytest.cpp | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/common/queryrunner.cpp b/common/queryrunner.cpp index b3c9f07..9e23eed 100644 --- a/common/queryrunner.cpp +++ b/common/queryrunner.cpp @@ -221,6 +221,11 @@ template std::function QueryRunner::getFilter(const QSet remainingFilters, const Akonadi2::Query &query) { return [remainingFilters, query](const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &domainObject) -> bool { + if (!query.ids.isEmpty()) { + if (!query.ids.contains(domainObject->identifier())) { + return false; + } + } for (const auto &filterProperty : remainingFilters) { const auto property = domainObject->getProperty(filterProperty); if (property.isValid()) { diff --git a/tests/querytest.cpp b/tests/querytest.cpp index 1ba37f4..e09f7a4 100644 --- a/tests/querytest.cpp +++ b/tests/querytest.cpp @@ -106,6 +106,39 @@ private Q_SLOTS: QCOMPARE(model->rowCount(), 1); } + void testById() + { + QByteArray id; + //Setup + { + Akonadi2::ApplicationDomain::Mail mail("org.kde.dummy.instance1"); + Akonadi2::Store::create(mail).exec().waitForFinished(); + Akonadi2::Store::create(mail).exec().waitForFinished(); + + Akonadi2::Query query; + query.resources << "org.kde.dummy.instance1"; + + //Ensure all local data is processed + Akonadi2::Store::synchronize(query).exec().waitForFinished(); + + //We fetch before the data is available and rely on the live query mechanism to deliver the actual data + auto model = Akonadi2::Store::loadModel(query); + model->fetchMore(QModelIndex()); + QTRY_VERIFY(model->data(QModelIndex(), Akonadi2::Store::ChildrenFetchedRole).toBool()); + QVERIFY(model->rowCount() >= 1); + id = model->index(0, 0).data(Akonadi2::Store::DomainObjectRole).value()->identifier(); + } + + //Test + Akonadi2::Query query; + query.resources << "org.kde.dummy.instance1"; + query.ids << id; + auto model = Akonadi2::Store::loadModel(query); + model->fetchMore(QModelIndex()); + QTRY_VERIFY(model->data(QModelIndex(), Akonadi2::Store::ChildrenFetchedRole).toBool()); + QCOMPARE(model->rowCount(), 1); + } + void testFolder() { //Setup -- cgit v1.2.3