From be279f08dc3d8819002125bb5e36eae9c121e0e8 Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Wed, 17 Oct 2018 15:43:38 -0700 Subject: [PATCH] Restore the addMarketplaceIDToDocumentEntities() hack Fixes for Linux compiles; other improvements --- libraries/entities/src/EntityTree.cpp | 2 +- libraries/octree/src/Octree.cpp | 35 +++++++++---------- .../octree/src/OctreeEntitiesFileParser.cpp | 6 ++-- .../octree/src/OctreeEntitiesFileParser.h | 2 +- libraries/octree/src/OctreePersistThread.cpp | 2 +- 5 files changed, 22 insertions(+), 25 deletions(-) diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index 19182d8b22..4cac2205a4 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -35,7 +35,7 @@ #include "QVariantGLM.h" #include "EntitiesLogging.h" #include "RecurseOctreeToMapOperator.h" -#include "RecurseOctreeToJsonOperator.h" +#include "RecurseOctreeToJSONOperator.h" #include "LogHandler.h" #include "EntityEditFilters.h" #include "EntityDynamicFactoryInterface.h" diff --git a/libraries/octree/src/Octree.cpp b/libraries/octree/src/Octree.cpp index 30108d973e..bbf1e44d08 100644 --- a/libraries/octree/src/Octree.cpp +++ b/libraries/octree/src/Octree.cpp @@ -785,28 +785,26 @@ bool Octree::readFromStream(uint64_t streamLength, QDataStream& inputStream, con } +namespace { // hack to get the marketplace id into the entities. We will create a way to get this from a hash of // the entity later, but this helps us move things along for now -QJsonDocument addMarketplaceIDToDocumentEntities(QJsonDocument& doc, const QString& marketplaceID) { +QVariantMap addMarketplaceIDToDocumentEntities(QVariantMap& doc, const QString& marketplaceID) { if (!marketplaceID.isEmpty()) { - QJsonDocument newDoc; - QJsonObject rootObj = doc.object(); - QJsonArray newEntitiesArray; + QVariantList newEntitiesArray; // build a new entities array - auto entitiesArray = rootObj["Entities"].toArray(); - for(auto it = entitiesArray.begin(); it != entitiesArray.end(); it++) { - auto entity = (*it).toObject(); + auto entitiesArray = doc["Entities"].toList(); + for (auto it = entitiesArray.begin(); it != entitiesArray.end(); it++) { + auto entity = (*it).toMap(); entity["marketplaceID"] = marketplaceID; newEntitiesArray.append(entity); } - rootObj["Entities"] = newEntitiesArray; - newDoc.setObject(rootObj); - return newDoc; + doc["Entities"] = newEntitiesArray; } return doc; } +} // Unnamed namepsace const int READ_JSON_BUFFER_SIZE = 2048; bool Octree::readJSONFromStream(uint64_t streamLength, QDataStream& inputStream, const QString& marketplaceID /*=""*/) { @@ -831,16 +829,15 @@ bool Octree::readJSONFromStream(uint64_t streamLength, QDataStream& inputStream, OctreeEntitiesFileParser octreeParser; octreeParser.setEntitiesString(jsonBuffer); QVariantMap asMap; - bool parseSuccess = octreeParser.parseEntities(asMap); - - /* - QJsonDocument asDocument = QJsonDocument::fromJson(jsonBuffer); - if (!marketplaceID.isEmpty()) { - asDocument = addMarketplaceIDToDocumentEntities(asDocument, marketplaceID); + if (!octreeParser.parseEntities(asMap)) { + qCritical() << "Couldn't parse Entities JSON:" << octreeParser.getErrorString().c_str(); + return false; } - QVariant asVariant = asDocument.toVariant(); - QVariantMap asMap = asVariant.toMap(); - */ + + if (!marketplaceID.isEmpty()) { + addMarketplaceIDToDocumentEntities(asMap, marketplaceID); + } + bool success = readFromMap(asMap); delete[] rawData; return success; diff --git a/libraries/octree/src/OctreeEntitiesFileParser.cpp b/libraries/octree/src/OctreeEntitiesFileParser.cpp index a0e43d0810..0b75991fd2 100644 --- a/libraries/octree/src/OctreeEntitiesFileParser.cpp +++ b/libraries/octree/src/OctreeEntitiesFileParser.cpp @@ -10,10 +10,10 @@ // #include +#include #include #include #include -#include #include "OctreeEntitiesFileParser.h" @@ -171,12 +171,12 @@ string OctreeEntitiesFileParser::readString() { int OctreeEntitiesFileParser::readInteger() { const char* currentPosition = _entitiesContents.constData() + _position; - int i = atoi(currentPosition); + int i = std::atoi(currentPosition); int token; do { token = nextToken(); - } while (token == '-' || token == '+' || (token >= '0' && token <= '9')); + } while (token == '-' || token == '+' || std::isdigit(token)); --_position; return i; diff --git a/libraries/octree/src/OctreeEntitiesFileParser.h b/libraries/octree/src/OctreeEntitiesFileParser.h index 2daeb7e561..e4e82f0e66 100644 --- a/libraries/octree/src/OctreeEntitiesFileParser.h +++ b/libraries/octree/src/OctreeEntitiesFileParser.h @@ -14,8 +14,8 @@ #ifndef hifi_OctreeEntitiesFileParser_h #define hifi_OctreeEntitiesFileParser_h -#include #include +#include class OctreeEntitiesFileParser { public: diff --git a/libraries/octree/src/OctreePersistThread.cpp b/libraries/octree/src/OctreePersistThread.cpp index 0c78a1a797..2717be593b 100644 --- a/libraries/octree/src/OctreePersistThread.cpp +++ b/libraries/octree/src/OctreePersistThread.cpp @@ -158,7 +158,7 @@ void OctreePersistThread::handleOctreeDataFileReply(QSharedPointerreadFromFile(_filename.toLocal8Bit().constData()); } else { QDataStream jsonStream(_cachedJSONData); - persistentFileRead = _tree->readFromStream(-1, QDataStream(_cachedJSONData)); + persistentFileRead = _tree->readFromStream(-1, jsonStream); } _tree->pruneTree(); });