- 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.
30 lines
1.4 KiB
C++
30 lines
1.4 KiB
C++
#pragma once
|
||
|
||
#include <QByteArray>
|
||
#include <QString>
|
||
|
||
namespace Scripting {
|
||
|
||
// Локальное хранилище JS-скриптов. Источник истины — cacheDir() из ScriptingConfig.
|
||
// Если в кэше скрипта нет — fallback на bundledDir() (рядом с бинарником).
|
||
class ScriptCache {
|
||
public:
|
||
// Резолвит абсолютный путь к файлу для <bank>/<scriptName>.
|
||
// 1. <cacheDir>/<bank>/<scriptName>.js
|
||
// 2. <bundledDir>/<bank>/<scriptName>.js
|
||
// Возвращает true только если файл существует.
|
||
static bool resolve(const QString &bank, const QString &scriptName,
|
||
QString *outPath, QString *outError);
|
||
|
||
// Сохраняет скрипт в кэш атомарно (через .tmp + rename).
|
||
// body — содержимое .js-файла. version — для диагностики, пишется в *.version.
|
||
static bool installFromBytes(const QString &bank, const QString &scriptName,
|
||
const QString &version, const QByteArray &body,
|
||
QString *outError);
|
||
|
||
// Текущая установленная версия (содержимое sidecar *.version). Пусто если не установлено.
|
||
static QString installedVersion(const QString &bank, const QString &scriptName);
|
||
};
|
||
|
||
} // namespace Scripting
|