From 4926e7f613ea3e03a2865eec66c6a8c1ec0b6516 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sat, 28 Nov 2015 16:07:15 +0100 Subject: Cleanup --- common/clientapi.cpp | 12 +----------- common/clientapi.h | 12 ------------ common/modelresult.cpp | 2 +- common/queryrunner.cpp | 24 ++++++++++++++++++++---- common/queryrunner.h | 1 + common/resultprovider.h | 2 +- 6 files changed, 24 insertions(+), 29 deletions(-) (limited to 'common') diff --git a/common/clientapi.cpp b/common/clientapi.cpp index b24dfa8..29b7e68 100644 --- a/common/clientapi.cpp +++ b/common/clientapi.cpp @@ -41,7 +41,7 @@ namespace async { - void run(const std::function &runner) { + static void run(const std::function &runner) { auto timer = new QTimer(); timer->setSingleShot(true); QObject::connect(timer, &QTimer::timeout, [runner, timer]() { @@ -97,15 +97,6 @@ QList Store::getResources(const QList &resourceFilter, c return resources; } -template -QSharedPointer > Store::load(Query query) -{ - auto resultSet = QSharedPointer >::create(); - qWarning() << "Main thread " << QThread::currentThreadId(); - //FIXME remove - return resultSet->emitter(); -} - template QSharedPointer Store::loadModel(Query query) { @@ -213,7 +204,6 @@ KAsync::Job Store::synchronize(const Akonadi2::Query &query) #define REGISTER_TYPE(T) template KAsync::Job Store::remove(const T &domainObject); \ template KAsync::Job Store::create(const T &domainObject); \ template KAsync::Job Store::modify(const T &domainObject); \ - template QSharedPointer > Store::load(Query query); \ template QSharedPointer Store::loadModel(Query query); \ REGISTER_TYPE(ApplicationDomain::Event); diff --git a/common/clientapi.h b/common/clientapi.h index c48c6e9..7fee6ae 100644 --- a/common/clientapi.h +++ b/common/clientapi.h @@ -33,12 +33,6 @@ Q_DECLARE_METATYPE(std::shared_ptr); class QAbstractItemModel; -namespace async { - //This should abstract if we execute from eventloop or in thread. - //It supposed to allow the caller to finish the current method before executing the runner. - void run(const std::function &runner); -} - namespace Akonadi2 { using namespace async; @@ -54,12 +48,6 @@ public: static QString storageLocation(); static QByteArray resourceName(const QByteArray &instanceIdentifier); - /** - * Asynchronusly load a dataset - */ - template - static QSharedPointer > load(Query query); - enum Roles { DomainObjectRole = Qt::UserRole + 1 //Must be the same as in ModelResult }; diff --git a/common/modelresult.cpp b/common/modelresult.cpp index 65eaba9..930048f 100644 --- a/common/modelresult.cpp +++ b/common/modelresult.cpp @@ -141,7 +141,7 @@ void ModelResult::add(const Ptr &value) return; } // qDebug() << "Inserting rows " << index << parent; - beginInsertRows(QModelIndex(), index, index); + beginInsertRows(parent, index, index); mEntities.insert(childId, value); mTree[id].insert(index, childId); mParents.insert(childId, id); diff --git a/common/queryrunner.cpp b/common/queryrunner.cpp index 4159112..3f62f6a 100644 --- a/common/queryrunner.cpp +++ b/common/queryrunner.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include "commands.h" #include "log.h" #include "storage.h" @@ -45,7 +46,7 @@ static inline ResultSet fullScan(const Akonadi2::Storage::Transaction &transacti qWarning() << "Error during query: " << error.message; }); - Trace() << "Full scan found " << keys.size() << " results"; + Trace() << "Full scan on " << bufferType << " found " << keys.size() << " results"; return ResultSet(keys); } @@ -96,6 +97,12 @@ QueryRunner::QueryRunner(const Akonadi2::Query &query, const Akonadi } } +template +QueryRunner::~QueryRunner() +{ + Trace() << "Stopped query"; +} + template typename Akonadi2::ResultEmitter::Ptr QueryRunner::emitter() { @@ -202,7 +209,6 @@ ResultSet QueryRunner::filterSet(const ResultSet &resultSet, const s readEntity(db, resultSetPtr->id(), [this, filter, callback, initialQuery](const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &domainObject, Akonadi2::Operation operation) { //Always remove removals, they probably don't match due to non-available properties if (filter(domainObject) || operation == Akonadi2::Operation_Removal) { - Trace() << "entity is not filtered" << initialQuery; if (initialQuery) { //We're not interested in removals during the initial query if (operation != Akonadi2::Operation_Removal) { @@ -262,16 +268,24 @@ qint64 QueryRunner::load(const Akonadi2::Query &query, const std::fu template qint64 QueryRunner::executeIncrementalQuery(const Akonadi2::Query &query, Akonadi2::ResultProviderInterface &resultProvider) { + QTime time; + time.start(); + const qint64 baseRevision = resultProvider.revision() + 1; Trace() << "Running incremental query " << baseRevision; - return load(query, [&](Akonadi2::Storage::Transaction &transaction, QSet &remainingFilters) -> ResultSet { + auto revision = load(query, [&](Akonadi2::Storage::Transaction &transaction, QSet &remainingFilters) -> ResultSet { return loadIncrementalResultSet(baseRevision, query, transaction, remainingFilters); }, resultProvider, false); + Trace() << "Incremental query took: " << time.elapsed() << " ms"; + return revision; } template qint64 QueryRunner::executeInitialQuery(const Akonadi2::Query &query, const typename DomainType::Ptr &parent, Akonadi2::ResultProviderInterface &resultProvider) { + QTime time; + time.start(); + auto modifiedQuery = query; if (!query.parentProperty.isEmpty()) { if (parent) { @@ -282,9 +296,11 @@ qint64 QueryRunner::executeInitialQuery(const Akonadi2::Query &query modifiedQuery.propertyFilter.insert(query.parentProperty, QVariant()); } } - return load(modifiedQuery, [&](Akonadi2::Storage::Transaction &transaction, QSet &remainingFilters) -> ResultSet { + auto revision = load(modifiedQuery, [&](Akonadi2::Storage::Transaction &transaction, QSet &remainingFilters) -> ResultSet { return loadInitialResultSet(modifiedQuery, transaction, remainingFilters); }, resultProvider, true); + Trace() << "Initial query took: " << time.elapsed() << " ms"; + return revision; } template class QueryRunner; diff --git a/common/queryrunner.h b/common/queryrunner.h index e2af9de..c918dcb 100644 --- a/common/queryrunner.h +++ b/common/queryrunner.h @@ -79,6 +79,7 @@ class QueryRunner : public QueryRunnerBase { public: QueryRunner(const Akonadi2::Query &query, const Akonadi2::ResourceAccessInterface::Ptr &, const QByteArray &instanceIdentifier, const DomainTypeAdaptorFactoryInterface::Ptr &, const QByteArray &bufferType); + virtual ~QueryRunner(); typename Akonadi2::ResultEmitter::Ptr emitter(); diff --git a/common/resultprovider.h b/common/resultprovider.h index 86382ef..6d7867a 100644 --- a/common/resultprovider.h +++ b/common/resultprovider.h @@ -106,7 +106,7 @@ private: public: typedef QSharedPointer > Ptr; - ~ResultProvider() + virtual ~ResultProvider() { } -- cgit v1.2.3