diff options
author | Kevin Simons <kevin.simons@nokia.com> | 2012-03-21 19:49:17 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-21 20:05:53 +0100 |
commit | af3714eb7a29daa96ef87c5369f649f134cf2066 (patch) | |
tree | 5f64bcedef1414e584ef5c1db444b0deb7e12e44 | |
parent | e1e21017148edcebb2fcd697f2a0f74bc58f378d (diff) |
Fix chained eager view updates
Change-Id: I4c350f26dad21f82e8a7e309359b36c0dea28a82
Reviewed-by: Jamey Hicks <jamey.hicks@nokia.com>
-rw-r--r-- | src/daemon/dbserver.cpp | 27 | ||||
-rw-r--r-- | src/daemon/dbserver.h | 1 | ||||
-rw-r--r-- | src/daemon/jsondbpartition.cpp | 1 | ||||
-rw-r--r-- | src/daemon/jsondbpartition.h | 2 | ||||
-rw-r--r-- | src/daemon/jsondbview.cpp | 2 | ||||
-rw-r--r-- | src/daemon/jsondbview.h | 3 |
6 files changed, 34 insertions, 2 deletions
diff --git a/src/daemon/dbserver.cpp b/src/daemon/dbserver.cpp index e88d45e..736cecb 100644 --- a/src/daemon/dbserver.cpp +++ b/src/daemon/dbserver.cpp @@ -237,6 +237,9 @@ bool DBServer::loadPartitions() mBaseName, mOwner, this); connect(mDefaultPartition, SIGNAL(objectsUpdated(JsonDbUpdateList)), this, SLOT(objectsUpdated(JsonDbUpdateList))); + connect(mDefaultPartition, SIGNAL(viewUpdated(QString)), + this, SLOT(viewUpdated(QString)), + Qt::QueuedConnection); if (!mDefaultPartition->open()) return false; @@ -257,6 +260,9 @@ bool DBServer::loadPartitions() JsonDbPartition *p = new JsonDbPartition(filename, name, mOwner, this); connect(p, SIGNAL(objectsUpdated(JsonDbUpdateList)), this, SLOT(objectsUpdated(JsonDbUpdateList))); + connect(p, SIGNAL(viewUpdated(QString)), + this, SLOT(viewUpdated(QString)), + Qt::QueuedConnection); if (!p->open()) return false; @@ -455,7 +461,10 @@ void DBServer::objectsUpdated(const QList<JsonDbUpdate> &objects) QStringList notificationKeys; if (object.contains(JsonDbString::kTypeStr)) { notificationKeys << objectType; - if (mEagerViewSourceTypes.contains(objectType)) { + + // eagerly update views if this object that was created isn't a view type itself + if (mEagerViewSourceTypes.contains(objectType) && partition + && !partition->findView(objectType)) { const QSet<QString> &targetTypes = mEagerViewSourceTypes[objectType]; for (QSet<QString>::const_iterator it = targetTypes.begin(); it != targetTypes.end(); ++it) { if (partition) @@ -463,6 +472,7 @@ void DBServer::objectsUpdated(const QList<JsonDbUpdate> &objects) } } } + if (object.contains(JsonDbString::kUuidStr)) notificationKeys << object.value(JsonDbString::kUuidStr).toString(); notificationKeys << "__generic_notification__"; @@ -482,6 +492,21 @@ void DBServer::objectsUpdated(const QList<JsonDbUpdate> &objects) } } +void DBServer::viewUpdated(const QString &type) +{ + JsonDbPartition *partition = qobject_cast<JsonDbPartition*>(sender()); + if (!partition) + return; + + if (mEagerViewSourceTypes.contains(type)) { + const QSet<QString> &targetTypes = mEagerViewSourceTypes[type]; + for (QSet<QString>::const_iterator it = targetTypes.begin(); it != targetTypes.end(); ++it) { + if (partition) + partition->updateView(*it); + } + } +} + void DBServer::objectUpdated(const QString &partitionName, quint32 stateNumber, JsonDbNotification *n, JsonDbNotification::Action action, const JsonDbObject &oldObject, const JsonDbObject &object) { diff --git a/src/daemon/dbserver.h b/src/daemon/dbserver.h index 3cadf38..5924cdb 100644 --- a/src/daemon/dbserver.h +++ b/src/daemon/dbserver.h @@ -92,6 +92,7 @@ protected slots: void notified(const QString &id, quint32 stateNumber, const QJsonObject &object, const QString &action); void objectsUpdated(const JsonDbUpdateList &objects); + void viewUpdated(const QString &type); private: void objectUpdated(const QString &partitionName, quint32 stateNumber, JsonDbNotification *n, JsonDbNotification::Action action, const JsonDbObject &oldObject, const JsonDbObject &object); diff --git a/src/daemon/jsondbpartition.cpp b/src/daemon/jsondbpartition.cpp index eaa7d63..e16f5e0 100644 --- a/src/daemon/jsondbpartition.cpp +++ b/src/daemon/jsondbpartition.cpp @@ -447,6 +447,7 @@ JsonDbView *JsonDbPartition::addView(const QString &viewType) return view; view = new JsonDbView(this, viewType, this); + connect(view, SIGNAL(updated(QString)), this, SIGNAL(viewUpdated(QString))); view->open(); mViews.insert(viewType, view); return view; diff --git a/src/daemon/jsondbpartition.h b/src/daemon/jsondbpartition.h index c4ebe53..e4c06a3 100644 --- a/src/daemon/jsondbpartition.h +++ b/src/daemon/jsondbpartition.h @@ -173,6 +173,7 @@ public Q_SLOTS: void updateView(const QString &objectType, quint32 stateNumber=0); Q_SIGNALS: + void viewUpdated(const QString &objectType); void objectsUpdated(const JsonDbUpdateList &objects); protected: @@ -205,7 +206,6 @@ protected: void updateSchemaIndexes(const QString &schemaName, QJsonObject object, const QStringList &path=QStringList()); private: - JsonDbObjectTable *mObjectTable; QVector<JsonDbObjectTable *> mTableTransactions; diff --git a/src/daemon/jsondbview.cpp b/src/daemon/jsondbview.cpp index 18ac1b9..cfc8ca3 100644 --- a/src/daemon/jsondbview.cpp +++ b/src/daemon/jsondbview.cpp @@ -381,6 +381,8 @@ void JsonDbView::updateView(quint32 desiredStateNumber) if (jsondbSettings->performanceLog()) qDebug() << "updateView" << mViewType << timer.elapsed() << "ms"; mUpdating = false; + + emit updated(mViewType); } bool JsonDbView::processUpdatedDefinitions(const QString &viewType, quint32 targetStateNumber, diff --git a/src/daemon/jsondbview.h b/src/daemon/jsondbview.h index 2f2efbc..a2d5675 100644 --- a/src/daemon/jsondbview.h +++ b/src/daemon/jsondbview.h @@ -80,6 +80,9 @@ public: bool isActive() const; +Q_SIGNALS: + void updated(const QString &type); + private: void createMapDefinition(QJsonObject mapDefinition); void removeMapDefinition(QJsonObject mapDefinition); |