summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Simons <kevin.simons@nokia.com>2012-03-21 19:49:17 +0100
committerQt by Nokia <qt-info@nokia.com>2012-03-21 20:05:53 +0100
commitaf3714eb7a29daa96ef87c5369f649f134cf2066 (patch)
tree5f64bcedef1414e584ef5c1db444b0deb7e12e44
parente1e21017148edcebb2fcd697f2a0f74bc58f378d (diff)
Fix chained eager view updates
Change-Id: I4c350f26dad21f82e8a7e309359b36c0dea28a82 Reviewed-by: Jamey Hicks <jamey.hicks@nokia.com>
-rw-r--r--src/daemon/dbserver.cpp27
-rw-r--r--src/daemon/dbserver.h1
-rw-r--r--src/daemon/jsondbpartition.cpp1
-rw-r--r--src/daemon/jsondbpartition.h2
-rw-r--r--src/daemon/jsondbview.cpp2
-rw-r--r--src/daemon/jsondbview.h3
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);