satdump/plugins/scripting_support/main.cpp

73 lines
2.3 KiB
C++
Raw Normal View History

2023-09-21 16:54:50 +02:00
#include "core/plugin.h"
#include "logger.h"
#include "core/pipeline.h"
2025-05-04 12:48:02 +02:00
#include "angelscript/scriptsatdump/bind_satdump.h"
#include "angelscript/scriptsatdump/helper.h"
2023-09-21 16:54:50 +02:00
#include "init.h"
2025-05-04 12:48:02 +02:00
#include <filesystem>
2023-09-21 16:54:50 +02:00
2024-09-17 15:46:43 +02:00
#include "core/config.h"
bool scription_plugin_trigger_pipeline_done_processing = true;
2023-09-21 16:54:50 +02:00
void pipeline_done_processing_callback(const satdump::events::PipelineDoneProcessingEvent &evt)
{
2024-09-17 15:46:43 +02:00
if (!scription_plugin_trigger_pipeline_done_processing)
return;
2025-05-04 12:48:02 +02:00
std::string script_path = satdump::user_path + "/scripts/pipeline_done_processing.as";
2023-09-21 16:54:50 +02:00
if (std::filesystem::exists(script_path))
{
logger->trace("Calling " + script_path);
try
{
2025-05-04 12:48:02 +02:00
// TODOREWORK, maybe switch to using a function instead?
asIScriptEngine *engine = asCreateScriptEngine();
satdump::script::registerAll(engine);
2023-09-21 16:54:50 +02:00
2025-05-04 12:48:02 +02:00
engine->SetDefaultNamespace("");
engine->RegisterGlobalProperty("string pipeline_id", (void *)&evt.pipeline_id);
engine->RegisterGlobalProperty("string pipeline_output_directory", (void *)&evt.output_directory);
2023-09-21 16:54:50 +02:00
2025-05-04 12:48:02 +02:00
if (!satdump::script::buildModuleFromFile(engine, "script", script_path))
return;
2023-09-21 16:54:50 +02:00
2025-05-04 12:48:02 +02:00
if (!satdump::script::runVoidMainFromModule(engine, "script"))
return;
engine->ShutDownAndRelease();
2023-09-21 16:54:50 +02:00
}
catch (std::exception &e)
{
logger->error("Error calling event script! %s", e.what());
}
}
}
class ScriptingSupport : public satdump::Plugin
{
public:
2025-05-04 12:48:02 +02:00
std::string getID() { return "scripting_support"; }
2023-09-21 16:54:50 +02:00
void init()
{
satdump::eventBus->register_handler<satdump::events::PipelineDoneProcessingEvent>(pipeline_done_processing_callback);
2024-09-17 15:46:43 +02:00
satdump::eventBus->register_handler<satdump::config::RegisterPluginConfigHandlersEvent>(registerConfigHandler);
}
2025-05-04 12:48:02 +02:00
static void renderConfig() { ImGui::Checkbox("Trigger Pipeline Done Processing", &scription_plugin_trigger_pipeline_done_processing); }
2024-09-17 15:46:43 +02:00
2025-05-04 12:48:02 +02:00
static void save() {}
2024-09-17 15:46:43 +02:00
static void registerConfigHandler(const satdump::config::RegisterPluginConfigHandlersEvent &evt)
{
evt.plugin_config_handlers.push_back({"Scripting Plugin", ScriptingSupport::renderConfig, ScriptingSupport::save});
2023-09-21 16:54:50 +02:00
}
};
PLUGIN_LOADER(ScriptingSupport)