1
0
forked from BRT/arc
arc/services/scripting/ScriptingConfig.cpp
slava cae345cf61 Implement JS-based remote scripting framework for dynamic script updates:
- 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.
2026-05-13 15:42:10 +07:00

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