Add helper for changing config via JavaScript

This commit is contained in:
Martchus 2018-04-07 22:57:36 +02:00
parent 5726bab292
commit 68c9f27e2a
5 changed files with 63 additions and 0 deletions

View File

@ -37,6 +37,7 @@ include(JsProviderConfig)
if(JS_PROVIDER)
list(APPEND HEADER_FILES jsconsole.h)
list(APPEND SRC_FILES jsconsole.cpp)
list(APPEND RES_FILES resources/js/js.qrc)
endif()
include(QtConfig)
include(WindowsResources)

View File

@ -799,6 +799,21 @@ QByteArray Application::editConfigViaScript() const
JSConsole console;
engine.globalObject().setProperty("console", engine.newQObject(&console));
// provide helper
QFile helperFile(":/js/helper.js");
helperFile.open(QFile::ReadOnly);
const auto helperScript(helperFile.readAll());
if (helperScript.isEmpty()) {
cerr << Phrases::Error << "Unable to load internal helper script." << Phrases::EndFlush;
return QByteArray();
}
const auto helperRes(engine.evaluate(QString::fromUtf8(helperScript)));
if (helperRes.isError()) {
cerr << Phrases::Error << "Unable to evaluate internal helper script." << Phrases::End;
printError(helperRes);
return QByteArray();
}
// evaluate the user provided script
const auto res(engine.evaluate(QString::fromUtf8(script), scriptFileName));
if (res.isError()) {

View File

@ -0,0 +1,36 @@
function findFolder(id) {
var folders = config.folders;
for (var i = 0, count = folders.length; i !== count; ++i) {
var folder = folders[i];
if (folder.id === id) {
return folder;
}
}
}
function findDevice(name) {
var devices = config.devices;
for (var i = 0, count = devices.length; i !== count; ++i) {
var device = devices[i];
if (device.name === name) {
return device;
}
}
}
function findDeviceById(id) {
var devices = config.devices;
for (var i = 0, count = devices.length; i !== count; ++i) {
var device = devices[i];
if (device.deviceID === name) {
return device;
}
}
}
function assignIfPresent(object, property, value) {
if (!object) {
return;
}
object[property] = value;
}

5
cli/resources/js/js.qrc Normal file
View File

@ -0,0 +1,5 @@
<RCC>
<qresource prefix="/js">
<file>helper.js</file>
</qresource>
</RCC>

View File

@ -1,6 +1,9 @@
// example script for changing configuration with syncthingctl
// can be executed like: syncthingctl edit --script example.js
// the ECMAScript environment is either provided by Qt QML or Qt Script, see http://doc.qt.io/qt-5/qtqml-javascript-hostenvironment.html
// additional helpers are defined in syncthingtray/cli/resources/js/helper.js
// alter some options
config.gui.useTLS = true;
config.options.relaysEnabled = false;
@ -25,3 +28,6 @@ for (var i = 0, count = devices.length; i !== count; ++i) {
console.log("unpausing device " + (device.name ? device.name : device.deviceID));
}
}
// pause folder "foo" if the folder exist
assignIfPresent(findFolder("foo"), "paused", true);