summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-11-25 09:37:59 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-11-25 09:37:59 +0100
commita4acb7e251cba5ba6d66bf6235736202255c4eac (patch)
treeaff6b7d7d852959bb4767809d3911d18b4ae3269
parent00e6b843e9f2881faccb312594a0e91c42df0096 (diff)
downloadsink-a4acb7e251cba5ba6d66bf6235736202255c4eac.tar.gz
sink-a4acb7e251cba5ba6d66bf6235736202255c4eac.zip
Only use the parent index when it's available
-rw-r--r--common/facade.cpp14
-rw-r--r--common/modelresult.cpp8
-rw-r--r--common/modelresult.h2
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<class DomainType>
350qint64 GenericFacade<DomainType>::executeInitialQuery(const Akonadi2::Query &query, const typename DomainType::Ptr &parent, Akonadi2::ResultProviderInterface<typename DomainType::Ptr> &resultProvider) 350qint64 GenericFacade<DomainType>::executeInitialQuery(const Akonadi2::Query &query, const typename DomainType::Ptr &parent, Akonadi2::ResultProviderInterface<typename DomainType::Ptr> &resultProvider)
351{ 351{
352 auto modifiedQuery = query; 352 auto modifiedQuery = query;
353 if (parent && !query.parentProperty.isEmpty()) { 353 if (!query.parentProperty.isEmpty()) {
354 Trace() << "Running initial query for parent:" << parent->identifier(); 354 if (parent) {
355 modifiedQuery.propertyFilter.insert(query.parentProperty, parent->identifier()); 355 Trace() << "Running initial query for parent:" << parent->identifier();
356 } else { 356 modifiedQuery.propertyFilter.insert(query.parentProperty, parent->identifier());
357 Trace() << "Running initial query for toplevel"; 357 } else {
358 modifiedQuery.propertyFilter.insert(query.parentProperty, QVariant()); 358 Trace() << "Running initial query for toplevel";
359 modifiedQuery.propertyFilter.insert(query.parentProperty, QVariant());
360 }
359 } 361 }
360 return load(modifiedQuery, [&](Akonadi2::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters) -> ResultSet { 362 return load(modifiedQuery, [&](Akonadi2::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters) -> ResultSet {
361 return loadInitialResultSet(modifiedQuery, transaction, remainingFilters); 363 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 @@
27template<class T, class Ptr> 27template<class T, class Ptr>
28ModelResult<T, Ptr>::ModelResult(const Akonadi2::Query &query, const QList<QByteArray> &propertyColumns) 28ModelResult<T, Ptr>::ModelResult(const Akonadi2::Query &query, const QList<QByteArray> &propertyColumns)
29 :QAbstractItemModel(), 29 :QAbstractItemModel(),
30 mPropertyColumns(propertyColumns) 30 mPropertyColumns(propertyColumns),
31 mQuery(query)
31{ 32{
32} 33}
33 34
@@ -42,7 +43,10 @@ static qint64 getIdentifier(const QModelIndex &idx)
42template<class T, class Ptr> 43template<class T, class Ptr>
43qint64 ModelResult<T, Ptr>::parentId(const Ptr &value) 44qint64 ModelResult<T, Ptr>::parentId(const Ptr &value)
44{ 45{
45 return qHash(value->getProperty("parent").toByteArray()); 46 if (!mQuery.parentProperty.isEmpty()) {
47 return qHash(value->getProperty(mQuery.parentProperty).toByteArray());
48 }
49 return qHash(QByteArray());
46} 50}
47 51
48template<class T, class Ptr> 52template<class T, class Ptr>
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:
53 void setFetcher(const std::function<void(const Ptr &parent)> &fetcher); 53 void setFetcher(const std::function<void(const Ptr &parent)> &fetcher);
54 54
55private: 55private:
56 static qint64 parentId(const Ptr &value); 56 qint64 parentId(const Ptr &value);
57 QModelIndex createIndexFromId(const qint64 &id) const; 57 QModelIndex createIndexFromId(const qint64 &id) const;
58 void fetchEntities(const QModelIndex &parent); 58 void fetchEntities(const QModelIndex &parent);
59 59