fixes
This commit is contained in:
parent
3c274b04ab
commit
53a79c52d6
@ -43,7 +43,7 @@ ScriptsHandler::ScriptsHandler(ScriptEngine *scriptEngine, QObject *parent):
|
|||||||
description = "Edit a script";
|
description = "Edit a script";
|
||||||
params.insert("id", enumValueName(Uuid));
|
params.insert("id", enumValueName(Uuid));
|
||||||
params.insert("o:name", enumValueName(String));
|
params.insert("o:name", enumValueName(String));
|
||||||
params.insert("content", enumValueName(String));
|
params.insert("o:content", enumValueName(String));
|
||||||
returns.insert("scriptError", enumRef<ScriptEngine::ScriptError>());
|
returns.insert("scriptError", enumRef<ScriptEngine::ScriptError>());
|
||||||
returns.insert("o:errors", enumValueName(StringList));
|
returns.insert("o:errors", enumValueName(StringList));
|
||||||
registerMethod("EditScript", description, params, returns);
|
registerMethod("EditScript", description, params, returns);
|
||||||
@ -65,10 +65,16 @@ ScriptsHandler::ScriptsHandler(ScriptEngine *scriptEngine, QObject *parent):
|
|||||||
registerNotification("ScriptRemoved", description, params);
|
registerNotification("ScriptRemoved", description, params);
|
||||||
|
|
||||||
params.clear();
|
params.clear();
|
||||||
description = "Emitted when a script has been changed in the system.";
|
description = "Emitted when a script has been changed in the system (e.g. renamed).";
|
||||||
params.insert("script", objectRef<Script>());
|
params.insert("scriptId", enumValueName(Uuid));
|
||||||
|
params.insert("name", enumValueName(String));
|
||||||
registerNotification("ScriptChanged", description, params);
|
registerNotification("ScriptChanged", description, params);
|
||||||
|
|
||||||
|
params.clear();
|
||||||
|
description = "Emitted when a script's content has been changed in the system.";
|
||||||
|
params.insert("scriptId", enumValueName(Uuid));
|
||||||
|
registerNotification("ScriptContentChanged", description, params);
|
||||||
|
|
||||||
params.clear();
|
params.clear();
|
||||||
description = "Emitted when a script produces a console message.";
|
description = "Emitted when a script produces a console message.";
|
||||||
params.insert("scriptId", enumValueName(Uuid));
|
params.insert("scriptId", enumValueName(Uuid));
|
||||||
@ -86,10 +92,16 @@ ScriptsHandler::ScriptsHandler(ScriptEngine *scriptEngine, QObject *parent):
|
|||||||
params.insert("id", scriptId);
|
params.insert("id", scriptId);
|
||||||
emit ScriptAdded(params);
|
emit ScriptAdded(params);
|
||||||
});
|
});
|
||||||
|
connect(m_engine, &ScriptEngine::scriptRenamed, this, [this](const Script &script){
|
||||||
|
QVariantMap params;
|
||||||
|
params.insert("scriptId", script.id());
|
||||||
|
params.insert("name", script.name());
|
||||||
|
emit ScriptChanged(params);
|
||||||
|
});
|
||||||
connect(m_engine, &ScriptEngine::scriptChanged, this, [this](const Script &script){
|
connect(m_engine, &ScriptEngine::scriptChanged, this, [this](const Script &script){
|
||||||
QVariantMap params;
|
QVariantMap params;
|
||||||
params.insert("script", pack(script));
|
params.insert("scriptId", script.id());
|
||||||
emit ScriptChanged(params);
|
emit ScriptContentChanged(params);
|
||||||
});
|
});
|
||||||
connect(m_engine, &ScriptEngine::scriptConsoleMessage, this, [this](const QUuid &scriptId, ScriptEngine::ScriptMessageType type, const QString &message){
|
connect(m_engine, &ScriptEngine::scriptConsoleMessage, this, [this](const QUuid &scriptId, ScriptEngine::ScriptMessageType type, const QString &message){
|
||||||
QVariantMap params;
|
QVariantMap params;
|
||||||
@ -145,15 +157,27 @@ JsonReply* ScriptsHandler::AddScript(const QVariantMap ¶ms)
|
|||||||
JsonReply *ScriptsHandler::EditScript(const QVariantMap ¶ms)
|
JsonReply *ScriptsHandler::EditScript(const QVariantMap ¶ms)
|
||||||
{
|
{
|
||||||
QUuid scriptId = params.value("id").toUuid();
|
QUuid scriptId = params.value("id").toUuid();
|
||||||
QByteArray content = params.value("content").toByteArray();
|
|
||||||
|
|
||||||
QVariantMap returns;
|
QVariantMap returns;
|
||||||
|
|
||||||
ScriptEngine::EditScriptReply reply = m_engine->editScript(scriptId, content);
|
if (params.contains("name")) {
|
||||||
returns.insert("scriptError", enumValueName(reply.scriptError));
|
QString name = params.value("name").toString();
|
||||||
if (reply.scriptError != ScriptEngine::ScriptErrorNoError) {
|
ScriptEngine::ScriptError result = m_engine->renameScript(scriptId, name);
|
||||||
returns.insert("errors", reply.errors);
|
if (result != ScriptEngine::ScriptErrorNoError) {
|
||||||
|
returns.insert("scriptError", enumValueName(result));
|
||||||
|
return createReply(returns);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (params.contains("content")) {
|
||||||
|
QByteArray content = params.value("content").toByteArray();
|
||||||
|
ScriptEngine::EditScriptReply reply = m_engine->editScript(scriptId, content);
|
||||||
|
if (reply.scriptError != ScriptEngine::ScriptErrorNoError) {
|
||||||
|
returns.insert("scriptError", enumValueName(reply.scriptError));
|
||||||
|
returns.insert("errors", reply.errors);
|
||||||
|
return createReply(returns);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
returns.insert("scriptError", enumValueName(ScriptEngine::ScriptErrorNoError));
|
||||||
return createReply(returns);
|
return createReply(returns);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -27,6 +27,7 @@ signals:
|
|||||||
void ScriptAdded(const QVariantMap ¶ms);
|
void ScriptAdded(const QVariantMap ¶ms);
|
||||||
void ScriptRemoved(const QVariantMap ¶ms);
|
void ScriptRemoved(const QVariantMap ¶ms);
|
||||||
void ScriptChanged(const QVariantMap ¶ms);
|
void ScriptChanged(const QVariantMap ¶ms);
|
||||||
|
void ScriptContentChanged(const QVariantMap ¶ms);
|
||||||
void ScriptLogMessage(const QVariantMap ¶ms);
|
void ScriptLogMessage(const QVariantMap ¶ms);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@ -139,10 +139,41 @@ ScriptEngine::AddScriptReply ScriptEngine::addScript(const QString &name, const
|
|||||||
return reply;
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ScriptEngine::ScriptError ScriptEngine::renameScript(const QUuid &id, const QString &name)
|
||||||
|
{
|
||||||
|
if (!m_scripts.contains(id)) {
|
||||||
|
qCWarning(dcScriptEngine()) << "No script with id" << id;
|
||||||
|
return ScriptErrorScriptNotFound;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString jsonFileName = baseName(id) + ".json";
|
||||||
|
QFile jsonFile(jsonFileName);
|
||||||
|
if (!jsonFile.open(QFile::ReadWrite)) {
|
||||||
|
qCWarning(dcJsonRpc()) << "Erorr opening script json file" << jsonFileName;
|
||||||
|
return ScriptErrorHardwareFailure;
|
||||||
|
}
|
||||||
|
QJsonParseError error;
|
||||||
|
QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonFile.readAll(), &error);
|
||||||
|
QVariantMap jsonData = jsonDocument.toVariant().toMap();
|
||||||
|
if (error.error != QJsonParseError::NoError) {
|
||||||
|
qCWarning(dcScriptEngine()) << "Error parsing json file. Recreating it...";
|
||||||
|
// This is non-critical as we could open it. We can recreate it now.
|
||||||
|
}
|
||||||
|
jsonData["name"] = name;
|
||||||
|
QByteArray jsonString = QJsonDocument::fromVariant(jsonData).toJson();
|
||||||
|
if (!jsonFile.resize(0) || jsonFile.write(jsonString) != jsonString.length()) {
|
||||||
|
qCWarning(dcScriptEngine()) << "Error writing json metadata" << jsonFileName;
|
||||||
|
return ScriptErrorHardwareFailure;
|
||||||
|
}
|
||||||
|
jsonFile.close();
|
||||||
|
m_scripts[id]->setName(name);
|
||||||
|
qCDebug(dcScriptEngine()) << "Script" << id << "renamed to" << name;
|
||||||
|
emit scriptRenamed(*m_scripts.value(id));
|
||||||
|
return ScriptErrorNoError;
|
||||||
|
}
|
||||||
|
|
||||||
ScriptEngine::EditScriptReply ScriptEngine::editScript(const QUuid &id, const QByteArray &content)
|
ScriptEngine::EditScriptReply ScriptEngine::editScript(const QUuid &id, const QByteArray &content)
|
||||||
{
|
{
|
||||||
QString scriptFileName = baseName(id) + ".qml";
|
|
||||||
QFile scriptFile(scriptFileName);
|
|
||||||
EditScriptReply reply;
|
EditScriptReply reply;
|
||||||
|
|
||||||
if (!m_scripts.contains(id)) {
|
if (!m_scripts.contains(id)) {
|
||||||
@ -154,11 +185,12 @@ ScriptEngine::EditScriptReply ScriptEngine::editScript(const QUuid &id, const QB
|
|||||||
Script *script = m_scripts.value(id);
|
Script *script = m_scripts.value(id);
|
||||||
unloadScript(script);
|
unloadScript(script);
|
||||||
|
|
||||||
|
|
||||||
// Deleted compiled qml file to make sure we're reloading the new one
|
// Deleted compiled qml file to make sure we're reloading the new one
|
||||||
QString compiledScriptFileName = baseName(id) + ".qmlc";
|
QString compiledScriptFileName = baseName(id) + ".qmlc";
|
||||||
QFile::remove(compiledScriptFileName);
|
QFile::remove(compiledScriptFileName);
|
||||||
|
|
||||||
|
QString scriptFileName = baseName(id) + ".qml";
|
||||||
|
QFile scriptFile(scriptFileName);
|
||||||
if (!scriptFile.open(QFile::ReadWrite)) {
|
if (!scriptFile.open(QFile::ReadWrite)) {
|
||||||
qCWarning(dcScriptEngine()) << "Error opening script" << id;
|
qCWarning(dcScriptEngine()) << "Error opening script" << id;
|
||||||
reply.scriptError = ScriptErrorHardwareFailure;
|
reply.scriptError = ScriptErrorHardwareFailure;
|
||||||
@ -180,6 +212,7 @@ ScriptEngine::EditScriptReply ScriptEngine::editScript(const QUuid &id, const QB
|
|||||||
|
|
||||||
bool loaded = loadScript(script);
|
bool loaded = loadScript(script);
|
||||||
if (!loaded) {
|
if (!loaded) {
|
||||||
|
qCDebug(dcScriptEngine()) << "Restoring old content";
|
||||||
reply.scriptError = ScriptErrorInvalidScript;
|
reply.scriptError = ScriptErrorInvalidScript;
|
||||||
reply.errors = script->errors;
|
reply.errors = script->errors;
|
||||||
|
|
||||||
@ -193,10 +226,9 @@ ScriptEngine::EditScriptReply ScriptEngine::editScript(const QUuid &id, const QB
|
|||||||
return reply;
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qCDebug(dcScriptEngine()) << "Script updated" << script->name();
|
||||||
reply.scriptError = ScriptErrorNoError;
|
reply.scriptError = ScriptErrorNoError;
|
||||||
|
|
||||||
emit scriptChanged(*script);
|
emit scriptChanged(*script);
|
||||||
|
|
||||||
return reply;
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -48,6 +48,7 @@ public:
|
|||||||
Scripts scripts();
|
Scripts scripts();
|
||||||
GetScriptReply scriptContent(const QUuid &id);
|
GetScriptReply scriptContent(const QUuid &id);
|
||||||
AddScriptReply addScript(const QString &name, const QByteArray &content);
|
AddScriptReply addScript(const QString &name, const QByteArray &content);
|
||||||
|
ScriptError renameScript(const QUuid &id, const QString &name);
|
||||||
EditScriptReply editScript(const QUuid &id, const QByteArray &content);
|
EditScriptReply editScript(const QUuid &id, const QByteArray &content);
|
||||||
ScriptError removeScript(const QUuid &id);
|
ScriptError removeScript(const QUuid &id);
|
||||||
|
|
||||||
@ -55,6 +56,7 @@ signals:
|
|||||||
void scriptAdded(const Script &script);
|
void scriptAdded(const Script &script);
|
||||||
void scriptRemoved(const QUuid &id);
|
void scriptRemoved(const QUuid &id);
|
||||||
void scriptChanged(const Script &script);
|
void scriptChanged(const Script &script);
|
||||||
|
void scriptRenamed(const Script &script);
|
||||||
|
|
||||||
void scriptConsoleMessage(const QUuid &scriptId, ScriptMessageType type, const QString &message);
|
void scriptConsoleMessage(const QUuid &scriptId, ScriptMessageType type, const QString &message);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user