summaryrefslogtreecommitdiff
path: root/src/enginio_client/enginiobasemodel_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/enginio_client/enginiobasemodel_p.h')
-rw-r--r--src/enginio_client/enginiobasemodel_p.h22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/enginio_client/enginiobasemodel_p.h b/src/enginio_client/enginiobasemodel_p.h
index c815aad..dbcb403 100644
--- a/src/enginio_client/enginiobasemodel_p.h
+++ b/src/enginio_client/enginiobasemodel_p.h
@@ -830,11 +830,21 @@ public:
EnginioReplyState *setDataNow(const int row, const QVariant &value, int role, const QJsonObject &oldObject, const QString &id)
{
Q_ASSERT(!id.isEmpty());
- const QString roleName(_roles.value(role));
- Q_ASSERT(!roleName.isEmpty());
QJsonObject deltaObject;
QJsonObject newObject = oldObject;
- deltaObject[roleName] = newObject[roleName] = QJsonValue::fromVariant(value);
+ if (role != Enginio::JsonObjectRole) {
+ const QString roleName(_roles.value(role));
+ Q_ASSERT(!roleName.isEmpty());
+ deltaObject[roleName] = newObject[roleName] = QJsonValue::fromVariant(value);
+ } else {
+ const QJsonObject updateObject = value.toJsonObject();
+ if (updateObject.isEmpty()) {
+ QNetworkReply *nreply = new EnginioFakeReply(_enginio, EnginioClientConnectionPrivate::constructErrorMessage(EnginioString::EnginioModel_Trying_to_update_an_object_with_unknown_role));
+ return _enginio->createReply(nreply);
+ }
+ for (QJsonObject::const_iterator i = updateObject.constBegin(); i != updateObject.constEnd(); ++i)
+ deltaObject[i.key()] = i.value();
+ }
deltaObject[EnginioString::id] = id;
deltaObject[EnginioString::objectType] = newObject[EnginioString::objectType];
ObjectAdaptor<QJsonObject> aDeltaObject(deltaObject);
@@ -876,11 +886,11 @@ public:
const QJsonObject object = _data.at(row).toObject();
if (!object.isEmpty()) {
+ if (role == Qt::DisplayRole || role == Enginio::JsonObjectRole)
+ return _data.at(row);
const QString roleName = _roles.value(role);
if (!roleName.isEmpty())
return object[roleName];
- else if (role == Qt::DisplayRole)
- return _data.at(row);
}
return QVariant();
@@ -1021,7 +1031,7 @@ struct EnginioModelPrivateT : public EnginioBaseModelPrivate
Reply *remove(int row) { return static_cast<Reply*>(Base::remove(row)); }
Reply *setValue(int row, const QString &role, const QVariant &value) { return static_cast<Reply*>(Base::setValue(row, role, value)); }
Reply *reload() { return static_cast<Reply*>(Base::reload()); }
-
+ Reply *setData(const int row, const QVariant &value, int role) { return static_cast<Reply*>(Base::setData(row, value, role)); }
bool queryIsEmpty() const Q_DECL_OVERRIDE
{
return ObjectAdaptor<Data>(_query, static_cast<ClientPrivate*>(_enginio)).isEmpty();