mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
JsonCpp to QTJson (Part 4) (#266)
* Update ActiveEffectDefinition.h * Update EffectDefinition.h * Update EffectEngine.h * Update Hyperion.h * Update LedDevice.h * Update QJsonFactory.h * Update QJsonSchemaChecker.h * Update Effect.cpp * Update Effect.h * Update EffectEngine.cpp * Update Hyperion.cpp * Update JsonClientConnection.cpp * Update JsonClientConnection.h * Update schema-config.json * Update LedDevice.cpp * Update QJsonSchemaChecker.cpp * Update hyperion-remote.cpp * Update JsonConnection.cpp * Update JsonConnection.h * Update hyperiond.cpp
This commit is contained in:
committed by
redPanther
parent
0a142b0e7d
commit
d9c2a2d91a
@@ -1,9 +1,12 @@
|
||||
#include <leddevice/LedDevice.h>
|
||||
#include <sstream>
|
||||
|
||||
//QT include
|
||||
#include <QResource>
|
||||
#include <QStringList>
|
||||
#include <QDir>
|
||||
#include <json/json.h>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonDocument>
|
||||
|
||||
LedDeviceRegistry LedDevice::_ledDeviceMap = LedDeviceRegistry();
|
||||
std::string LedDevice::_activeDevice = "";
|
||||
@@ -43,29 +46,57 @@ void LedDevice::setActiveDevice(std::string dev)
|
||||
_activeDevice = dev;
|
||||
}
|
||||
|
||||
Json::Value LedDevice::getLedDeviceSchemas()
|
||||
QJsonObject LedDevice::getLedDeviceSchemas()
|
||||
{
|
||||
// make sure the resources are loaded (they may be left out after static linking)
|
||||
Q_INIT_RESOURCE(LedDeviceSchemas);
|
||||
QJsonParseError error;
|
||||
|
||||
// read the json schema from the resource
|
||||
QDir d(":/leddevices/");
|
||||
QStringList l = d.entryList();
|
||||
Json::Value result;
|
||||
QJsonObject result, schemaJson;
|
||||
|
||||
for(QString &item : l)
|
||||
{
|
||||
QResource schemaData(QString(":/leddevices/")+item);
|
||||
std::string devName = item.remove("schema-").toStdString();
|
||||
Json::Value & schemaJson = result[devName];
|
||||
QFile schemaData(QString(":/leddevices/")+item);
|
||||
QString devName = item.remove("schema-");
|
||||
|
||||
Json::Reader jsonReader;
|
||||
if (!jsonReader.parse(reinterpret_cast<const char *>(schemaData.data()), reinterpret_cast<const char *>(schemaData.data()) + schemaData.size(), schemaJson, false))
|
||||
if (!schemaData.open(QIODevice::ReadOnly))
|
||||
{
|
||||
Error(Logger::getInstance("LedDevice"), "LedDevice JSON schema error in %s (%s)", item.toUtf8().constData(), jsonReader.getFormattedErrorMessages().c_str() );
|
||||
throw std::runtime_error("ERROR: Json schema wrong: " + jsonReader.getFormattedErrorMessages()) ;
|
||||
Error(Logger::getInstance("LedDevice"), "Schema not found: %s", item.toUtf8().constData());
|
||||
throw std::runtime_error("ERROR: Schema not found: " + item.toStdString());
|
||||
}
|
||||
schemaJson["title"] = "LED Device Specific";
|
||||
|
||||
|
||||
QByteArray schema = schemaData.readAll();
|
||||
QJsonDocument doc = QJsonDocument::fromJson(schema, &error);
|
||||
schemaData.close();
|
||||
|
||||
if (error.error != QJsonParseError::NoError)
|
||||
{
|
||||
// report to the user the failure and their locations in the document.
|
||||
int errorLine(0), errorColumn(0);
|
||||
|
||||
for( int i=0, count=qMin( error.offset,schema.size()); i<count; ++i )
|
||||
{
|
||||
++errorColumn;
|
||||
if(schema.at(i) == '\n' )
|
||||
{
|
||||
errorColumn = 0;
|
||||
++errorLine;
|
||||
}
|
||||
}
|
||||
|
||||
std::stringstream sstream;
|
||||
sstream << error.errorString().toStdString() << " at Line: " << errorLine << ", Column: " << errorColumn;
|
||||
Error(Logger::getInstance("LedDevice"), "LedDevice JSON schema error in %s (%s)", item.toUtf8().constData(), sstream.str().c_str());
|
||||
throw std::runtime_error("ERROR: Json schema wrong: " + sstream.str());
|
||||
}
|
||||
|
||||
schemaJson = doc.object();
|
||||
schemaJson["title"] = QString("LED Device Specific");
|
||||
|
||||
result[devName] = schemaJson;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
Reference in New Issue
Block a user