From d183968175a98782385a511ebd0a17791943a6c4 Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Thu, 8 Nov 2018 18:20:20 -0800 Subject: [PATCH] Add skipThoseWithBadParents functionality to octree visitor; reviewer suggestions --- .../src/RecurseOctreeToJSONOperator.cpp | 18 ++++++++----- .../src/RecurseOctreeToJSONOperator.h | 6 +++-- libraries/octree/src/Octree.cpp | 26 ------------------- libraries/octree/src/OctreeDataUtils.cpp | 2 +- libraries/octree/src/OctreeDataUtils.h | 2 +- .../octree/src/OctreeEntitiesFileParser.cpp | 5 +--- .../octree/src/OctreeEntitiesFileParser.h | 1 - 7 files changed, 18 insertions(+), 42 deletions(-) diff --git a/libraries/entities/src/RecurseOctreeToJSONOperator.cpp b/libraries/entities/src/RecurseOctreeToJSONOperator.cpp index a865009566..b64a700abc 100644 --- a/libraries/entities/src/RecurseOctreeToJSONOperator.cpp +++ b/libraries/entities/src/RecurseOctreeToJSONOperator.cpp @@ -13,10 +13,11 @@ #include "EntityItemProperties.h" RecurseOctreeToJSONOperator::RecurseOctreeToJSONOperator(const OctreeElementPointer&, QScriptEngine* engine, - QString jsonPrefix /* = QString() */, bool skipDefaults /* = true */) - : _engine(engine) - , _json(jsonPrefix) - , _skipDefaults(skipDefaults) + QString jsonPrefix, bool skipDefaults, bool skipThoseWithBadParents): + _engine(engine), + _json(jsonPrefix), + _skipDefaults(skipDefaults), + _skipThoseWithBadParents(skipThoseWithBadParents) { _toStringMethod = _engine->evaluate("(function() { return JSON.stringify(this, null, ' ') })"); } @@ -29,18 +30,21 @@ bool RecurseOctreeToJSONOperator::postRecursion(const OctreeElementPointer& elem } void RecurseOctreeToJSONOperator::processEntity(const EntityItemPointer& entity) { + if (_skipThoseWithBadParents && !entity->isParentIDValid()) { + return; // we weren't able to resolve a parent from _parentID, so don't save this entity. + } + QScriptValue qScriptValues = _skipDefaults ? EntityItemNonDefaultPropertiesToScriptValue(_engine, entity->getProperties()) : EntityItemPropertiesToScriptValue(_engine, entity->getProperties()); - if (comma) { + if (_comma) { _json += ','; }; - comma = true; + _comma = true; _json += "\n "; // Override default toString(): qScriptValues.setProperty("toString", _toStringMethod); _json += qScriptValues.toString(); - //auto exceptionString2 = _engine->uncaughtException().toString(); } diff --git a/libraries/entities/src/RecurseOctreeToJSONOperator.h b/libraries/entities/src/RecurseOctreeToJSONOperator.h index d0f03d02eb..a1d388ed22 100644 --- a/libraries/entities/src/RecurseOctreeToJSONOperator.h +++ b/libraries/entities/src/RecurseOctreeToJSONOperator.h @@ -13,7 +13,8 @@ class RecurseOctreeToJSONOperator : public RecurseOctreeOperator { public: - RecurseOctreeToJSONOperator(const OctreeElementPointer&, QScriptEngine* engine, QString jsonPrefix = QString(), bool skipDefaults = true); + RecurseOctreeToJSONOperator(const OctreeElementPointer&, QScriptEngine* engine, QString jsonPrefix = QString(), bool skipDefaults = true, + bool skipThoseWithBadParents = false); virtual bool preRecursion(const OctreeElementPointer& element) override { return true; }; virtual bool postRecursion(const OctreeElementPointer& element) override; @@ -27,5 +28,6 @@ private: QString _json; const bool _skipDefaults; - bool comma { false }; + bool _skipThoseWithBadParents; + bool _comma { false }; }; diff --git a/libraries/octree/src/Octree.cpp b/libraries/octree/src/Octree.cpp index bbf1e44d08..cfa207dbf8 100644 --- a/libraries/octree/src/Octree.cpp +++ b/libraries/octree/src/Octree.cpp @@ -925,9 +925,6 @@ bool Octree::toJSONString(QString& jsonString, const OctreeElementPointer& eleme } bool Octree::toJSON(QByteArray* data, const OctreeElementPointer& element, bool doGzip) { -#define HIFI_USE_DIRECT_TO_JSON -#ifdef HIFI_USE_DIRECT_TO_JSON - QString jsonString; toJSONString(jsonString); @@ -940,29 +937,6 @@ bool Octree::toJSON(QByteArray* data, const OctreeElementPointer& element, bool *data = jsonString.toUtf8(); } -#else - - QJsonDocument doc; - if (!toJSONDocument(&doc, element)) { - qCritical("Failed to convert Entities to JSON document."); - return false; - } - - QString jsonString; - toJSONString(jsonString); - - if (doGzip) { - QByteArray jsonData = doc.toJson(); - - if (!gzip(jsonData, *data, -1)) { - qCritical("Unable to gzip data while saving to json."); - return false; - } - } else { - *data = doc.toJson(); - } - -#endif // HIFI_USE_DIRECT_TO_JSON return true; } diff --git a/libraries/octree/src/OctreeDataUtils.cpp b/libraries/octree/src/OctreeDataUtils.cpp index 7bbad652f8..a94fa31800 100644 --- a/libraries/octree/src/OctreeDataUtils.cpp +++ b/libraries/octree/src/OctreeDataUtils.cpp @@ -56,7 +56,7 @@ bool OctreeUtils::RawOctreeData::readOctreeDataInfoFromJSON(QJsonObject root) { return true; } -bool OctreeUtils::RawOctreeData::readOctreeDataInfoFromMap(QVariantMap map) { +bool OctreeUtils::RawOctreeData::readOctreeDataInfoFromMap(const QVariantMap& map) { if (map.contains("Id") && map.contains("DataVersion") && map.contains("Version")) { id = map["Id"].toUuid(); dataVersion = map["DataVersion"].toInt(); diff --git a/libraries/octree/src/OctreeDataUtils.h b/libraries/octree/src/OctreeDataUtils.h index 236d280bbf..0dfa99a9a0 100644 --- a/libraries/octree/src/OctreeDataUtils.h +++ b/libraries/octree/src/OctreeDataUtils.h @@ -43,7 +43,7 @@ public: bool readOctreeDataInfoFromData(QByteArray data); bool readOctreeDataInfoFromFile(QString path); bool readOctreeDataInfoFromJSON(QJsonObject root); - bool readOctreeDataInfoFromMap(QVariantMap map); + bool readOctreeDataInfoFromMap(const QVariantMap& map); }; class RawEntityData : public RawOctreeData { diff --git a/libraries/octree/src/OctreeEntitiesFileParser.cpp b/libraries/octree/src/OctreeEntitiesFileParser.cpp index 0b75991fd2..72853947c6 100644 --- a/libraries/octree/src/OctreeEntitiesFileParser.cpp +++ b/libraries/octree/src/OctreeEntitiesFileParser.cpp @@ -19,9 +19,6 @@ using std::string; -OctreeEntitiesFileParser::OctreeEntitiesFileParser() { -} - std::string OctreeEntitiesFileParser::getErrorString() const { std::ostringstream err; if (_errorString.size() != 0) { @@ -86,7 +83,7 @@ bool OctreeEntitiesFileParser::parseEntities(QVariantMap& parsedEntities) { return false; } - parsedEntities["Entities"] = entitiesValue; + parsedEntities["Entities"] = std::move(entitiesValue); gotEntities = true; } else if (key == "Id") { if (gotId) { diff --git a/libraries/octree/src/OctreeEntitiesFileParser.h b/libraries/octree/src/OctreeEntitiesFileParser.h index e4e82f0e66..bc51896b18 100644 --- a/libraries/octree/src/OctreeEntitiesFileParser.h +++ b/libraries/octree/src/OctreeEntitiesFileParser.h @@ -19,7 +19,6 @@ class OctreeEntitiesFileParser { public: - OctreeEntitiesFileParser(); void setEntitiesString(const QByteArray& entitiesContents); bool parseEntities(QVariantMap& parsedEntities); std::string getErrorString() const;