- Add Proof of Concept (PoC) for executing JavaScript scripts fetched remotely. - Integrate `Black::GetProfileInfoScript` logic into a JS version with fallback to C++ on errors. - Extend `ScreenXmlParser` with additional JS-to-C++ bridge methods. - Update `config.ini` for scripting configuration. - Ensure scripts are securely fetched with SHA-256 validation and use an atomic caching mechanism. - Add developer tools for debugging JS scripts and enable easier script updates without app re-deployment.
52 lines
1.6 KiB
C++
52 lines
1.6 KiB
C++
#include "ScriptingConfig.h"
|
|
|
|
#include <QCoreApplication>
|
|
#include <QDir>
|
|
#include <QSettings>
|
|
#include <QStandardPaths>
|
|
#include <QStringList>
|
|
|
|
namespace Scripting {
|
|
|
|
bool ScriptingConfig::isEnabled() {
|
|
const QSettings s("config.ini", QSettings::IniFormat);
|
|
return s.value("scripting/enabled", false).toBool();
|
|
}
|
|
|
|
QSet<QString> ScriptingConfig::parseEnabledScripts() {
|
|
const QSettings s("config.ini", QSettings::IniFormat);
|
|
const QString raw = s.value("scripting/use_js_for").toString();
|
|
QSet<QString> out;
|
|
for (QString item : raw.split(',', Qt::SkipEmptyParts)) {
|
|
item = item.trimmed();
|
|
if (!item.isEmpty()) out.insert(item);
|
|
}
|
|
return out;
|
|
}
|
|
|
|
bool ScriptingConfig::isJsEnabledFor(const QString &bankSlashScript) {
|
|
return parseEnabledScripts().contains(bankSlashScript);
|
|
}
|
|
|
|
QString ScriptingConfig::manifestUrl() {
|
|
const QSettings s("config.ini", QSettings::IniFormat);
|
|
return s.value("scripting/manifest_url").toString().trimmed();
|
|
}
|
|
|
|
QString ScriptingConfig::cacheDir() {
|
|
const QSettings s("config.ini", QSettings::IniFormat);
|
|
const QString custom = s.value("scripting/cache_dir").toString().trimmed();
|
|
if (!custom.isEmpty()) return custom;
|
|
const QString base = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
|
|
return QDir(base).filePath("scripts");
|
|
}
|
|
|
|
QString ScriptingConfig::bundledDir() {
|
|
const QSettings s("config.ini", QSettings::IniFormat);
|
|
const QString custom = s.value("scripting/bundled_dir").toString().trimmed();
|
|
if (!custom.isEmpty()) return custom;
|
|
return QDir(QCoreApplication::applicationDirPath()).filePath("scripts");
|
|
}
|
|
|
|
} // namespace Scripting
|