satdump/src-core/handler/dataset/lua_processor.cpp

77 lines
2.2 KiB
C++
Raw Normal View History

2025-01-18 23:34:20 +01:00
#include "lua_processor.h"
#include "libs/sol2/sol.hpp"
#include "logger.h"
2025-01-19 22:13:46 +01:00
#include "lua/lua_bind.h"
2025-01-18 23:34:20 +01:00
namespace satdump
{
namespace viewer
{
Lua_DatasetProductProcessor::Lua_DatasetProductProcessor(DatasetHandler *dh, Handler *dp, nlohmann::json p)
: DatasetProductProcessor(dh, dp, p)
{
editor.SetLanguageDefinition(TextEditor::LanguageDefinition::Lua());
if (p.contains("lua"))
editor.SetText(p["lua"].get<std::string>());
}
nlohmann::json Lua_DatasetProductProcessor::getCfg()
{
2025-02-01 14:08:53 +01:00
nlohmann::json cfg = DatasetProductProcessor::getCfg();
cfg["lua"] = editor.GetText();
return cfg;
}
2025-01-18 23:34:20 +01:00
bool Lua_DatasetProductProcessor::can_process()
{
return true; // TODOREWORK
2025-01-18 23:34:20 +01:00
}
void Lua_DatasetProductProcessor::process(float *progress)
{
std::string lua_code = editor.GetText();
2025-01-18 23:34:20 +01:00
try
{
sol::state lua;
lua.open_libraries(sol::lib::base);
lua.open_libraries(sol::lib::string);
lua.open_libraries(sol::lib::math);
2025-01-19 18:55:12 +01:00
lua.open_libraries(sol::lib::table);
lua.open_libraries(sol::lib::io);
2025-01-18 23:34:20 +01:00
2025-01-19 22:13:46 +01:00
lua::bind_logger(lua);
lua::bind_image(lua);
lua::bind_product(lua);
lua::bind_geodetic(lua);
lua::bind_projection(lua);
lua::bind_handler_image(lua);
2025-01-18 23:34:20 +01:00
// Experimental
lua["add_handler_to_products"] = [this](std::shared_ptr<Handler> p) // TODO, find why THIS specifically crashes...
{
add_handler_to_products(p);
};
lua["get_instrument_products"] = [this](std::string v, int index)
{
return get_instrument_products(v, index);
};
// Run
lua.script(lua_code);
}
catch (sol::error &e)
{
logger->error(e.what());
}
}
void Lua_DatasetProductProcessor::renderUI()
{
editor.Render("LuaEditor");
}
2025-01-18 23:34:20 +01:00
}
}