#pragma once #include #include class QNetworkAccessManager; class QNetworkReply; namespace Scripting { // Опрашивает /scripts/manifest, скачивает обновлённые скрипты, // сверяет SHA-256 и кладёт их в ScriptCache (атомарно). // // Manifest формат (JSON): // { // "scripts": [ // { "bank": "black", "script": "get_profile_info", // "version": "1.0.0", "url": "...", "sha256": "" }, // ... // ] // } // // Поведение fallback: если что-то пошло не так (сеть, hash mismatch), // в кэше остаётся ПРЕДЫДУЩИЙ скрипт; если кэш пуст — runtime возьмёт bundled. class ScriptUpdater final : public QObject { Q_OBJECT public: explicit ScriptUpdater(QObject *parent = nullptr); ~ScriptUpdater() override; public slots: // Запускает разовое обновление. Вызывать после успешной авторизации. void start(); signals: void finished(); private slots: void onManifestReply(); void onScriptReply(); private: void downloadNext(); void scheduleFinish(); struct ScriptItem { QString bank; QString script; QString version; QString url; QString sha256; }; QNetworkAccessManager *m_net; QList m_queue; int m_inFlight = 0; }; } // namespace Scripting