From a4acb7e251cba5ba6d66bf6235736202255c4eac Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 25 Nov 2015 09:37:59 +0100 Subject: Only use the parent index when it's available --- common/facade.cpp | 14 ++++++++------ common/modelresult.cpp | 8 ++++++-- common/modelresult.h | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/common/facade.cpp b/common/facade.cpp index 850d28b..68770b5 100644 --- a/common/facade.cpp +++ b/common/facade.cpp @@ -350,12 +350,14 @@ template qint64 GenericFacade::executeInitialQuery(const Akonadi2::Query &query, const typename DomainType::Ptr &parent, Akonadi2::ResultProviderInterface &resultProvider) { auto modifiedQuery = query; - if (parent && !query.parentProperty.isEmpty()) { - Trace() << "Running initial query for parent:" << parent->identifier(); - modifiedQuery.propertyFilter.insert(query.parentProperty, parent->identifier()); - } else { - Trace() << "Running initial query for toplevel"; - modifiedQuery.propertyFilter.insert(query.parentProperty, QVariant()); + if (!query.parentProperty.isEmpty()) { + if (parent) { + Trace() << "Running initial query for parent:" << parent->identifier(); + modifiedQuery.propertyFilter.insert(query.parentProperty, parent->identifier()); + } else { + Trace() << "Running initial query for toplevel"; + modifiedQuery.propertyFilter.insert(query.parentProperty, QVariant()); + } } return load(modifiedQuery, [&](Akonadi2::Storage::Transaction &transaction, QSet &remainingFilters) -> ResultSet { return loadInitialResultSet(modifiedQuery, transaction, remainingFilters); diff --git a/common/modelresult.cpp b/common/modelresult.cpp index 4102cda..935e2e8 100644 --- a/common/modelresult.cpp +++ b/common/modelresult.cpp @@ -27,7 +27,8 @@ template ModelResult::ModelResult(const Akonadi2::Query &query, const QList &propertyColumns) :QAbstractItemModel(), - mPropertyColumns(propertyColumns) + mPropertyColumns(propertyColumns), + mQuery(query) { } @@ -42,7 +43,10 @@ static qint64 getIdentifier(const QModelIndex &idx) template qint64 ModelResult::parentId(const Ptr &value) { - return qHash(value->getProperty("parent").toByteArray()); + if (!mQuery.parentProperty.isEmpty()) { + return qHash(value->getProperty(mQuery.parentProperty).toByteArray()); + } + return qHash(QByteArray()); } template diff --git a/common/modelresult.h b/common/modelresult.h index 40a9d9d..66dfce5 100644 --- a/common/modelresult.h +++ b/common/modelresult.h @@ -53,7 +53,7 @@ public: void setFetcher(const std::function &fetcher); private: - static qint64 parentId(const Ptr &value); + qint64 parentId(const Ptr &value); QModelIndex createIndexFromId(const qint64 &id) const; void fetchEntities(const QModelIndex &parent); -- cgit v1.2.3