From 8735fa1eac13af0cf3ba6820117bb81d7df31589 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 17 Jun 2015 18:33:43 -0700 Subject: [PATCH 1/2] have variantMapToScriptValue handle lists. --- .../shared/src/VariantMapToScriptValue.cpp | 72 +++++++++++++------ .../shared/src/VariantMapToScriptValue.h | 2 + 2 files changed, 51 insertions(+), 23 deletions(-) diff --git a/libraries/shared/src/VariantMapToScriptValue.cpp b/libraries/shared/src/VariantMapToScriptValue.cpp index 6c21557325..c0d21e9995 100644 --- a/libraries/shared/src/VariantMapToScriptValue.cpp +++ b/libraries/shared/src/VariantMapToScriptValue.cpp @@ -13,35 +13,61 @@ #include "SharedLogging.h" #include "VariantMapToScriptValue.h" + +QScriptValue variantToScriptValue(QVariant& qValue, QScriptEngine& scriptEngine) { + switch(qValue.type()) { + case QVariant::Bool: + return qValue.toBool(); + break; + case QVariant::Int: + return qValue.toInt(); + break; + case QVariant::Double: + return qValue.toDouble(); + break; + case QVariant::String: { + return scriptEngine.newVariant(qValue); + break; + } + case QVariant::Map: { + QVariantMap childMap = qValue.toMap(); + return variantMapToScriptValue(childMap, scriptEngine); + break; + } + case QVariant::List: { + QVariantList childList = qValue.toList(); + return variantListToScriptValue(childList, scriptEngine); + break; + } + default: + qCDebug(shared) << "unhandled QScript type" << qValue.type(); + break; + } + + return QScriptValue(); +} + + QScriptValue variantMapToScriptValue(QVariantMap& variantMap, QScriptEngine& scriptEngine) { QScriptValue scriptValue = scriptEngine.newObject(); for (QVariantMap::const_iterator iter = variantMap.begin(); iter != variantMap.end(); ++iter) { QString key = iter.key(); QVariant qValue = iter.value(); - - switch(qValue.type()) { - case QVariant::Bool: - scriptValue.setProperty(key, qValue.toBool()); - break; - case QVariant::Int: - scriptValue.setProperty(key, qValue.toInt()); - break; - case QVariant::Double: - scriptValue.setProperty(key, qValue.toDouble()); - break; - case QVariant::String: { - scriptValue.setProperty(key, scriptEngine.newVariant(qValue)); - break; - } - case QVariant::Map: { - QVariantMap childMap = qValue.toMap(); - scriptValue.setProperty(key, variantMapToScriptValue(childMap, scriptEngine)); - break; - } - default: - qCDebug(shared) << "unhandled QScript type" << qValue.type(); - } + scriptValue.setProperty(key, variantToScriptValue(qValue, scriptEngine)); + } + + return scriptValue; +} + + +QScriptValue variantListToScriptValue(QVariantList& variantList, QScriptEngine& scriptEngine) { + QScriptValue scriptValue = scriptEngine.newObject(); + + scriptValue.setProperty("length", variantList.size()); + int i = 0; + foreach (QVariant v, variantList) { + scriptValue.setProperty(i++, variantToScriptValue(v, scriptEngine)); } return scriptValue; diff --git a/libraries/shared/src/VariantMapToScriptValue.h b/libraries/shared/src/VariantMapToScriptValue.h index 503f8c6490..ea65cccb3d 100644 --- a/libraries/shared/src/VariantMapToScriptValue.h +++ b/libraries/shared/src/VariantMapToScriptValue.h @@ -13,4 +13,6 @@ #include #include +QScriptValue variantToScriptValue(QVariant& qValue, QScriptEngine& scriptEngine); QScriptValue variantMapToScriptValue(QVariantMap& variantMap, QScriptEngine& scriptEngine); +QScriptValue variantListToScriptValue(QVariantList& variantList, QScriptEngine& scriptEngine); From 610bfc63e8b266e511df3e00ecd9967e6265b544 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 17 Jun 2015 18:34:46 -0700 Subject: [PATCH 2/2] check success in OctreePacketData::appendValue for qvectors of vec3s before proceeding with further data appends --- libraries/octree/src/OctreePacketData.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/libraries/octree/src/OctreePacketData.cpp b/libraries/octree/src/OctreePacketData.cpp index 7c977210fc..db2e2953c0 100644 --- a/libraries/octree/src/OctreePacketData.cpp +++ b/libraries/octree/src/OctreePacketData.cpp @@ -384,10 +384,12 @@ bool OctreePacketData::appendValue(const glm::vec3& value) { bool OctreePacketData::appendValue(const QVector& value) { uint16_t qVecSize = value.size(); bool success = appendValue(qVecSize); - success = append((const unsigned char*)value.constData(), qVecSize * sizeof(glm::vec3)); if (success) { - _bytesOfValues += qVecSize * sizeof(glm::vec3); - _totalBytesOfValues += qVecSize * sizeof(glm::vec3); + success = append((const unsigned char*)value.constData(), qVecSize * sizeof(glm::vec3)); + if (success) { + _bytesOfValues += qVecSize * sizeof(glm::vec3); + _totalBytesOfValues += qVecSize * sizeof(glm::vec3); + } } return success; }