Add support for inline scripts

* Script can be defined in the macro segment or loaded from a file
* Supports both LUA and Python
* Can be used for actions and conditions
* obs_script_create and obs_script_destroy are resolved at runtime
  (Let's hope the API remains stable)
This commit is contained in:
WarmUpTill
2025-06-01 11:58:11 +02:00
committed by WarmUpTill
parent 73b542a4db
commit daeb9275a3
12 changed files with 989 additions and 3 deletions

View File

@@ -0,0 +1,66 @@
#include "macro-action-script-inline.hpp"
namespace advss {
const std::string MacroActionScriptInline::_id = "script";
bool MacroActionScriptInline::_registered = MacroActionFactory::Register(
MacroActionScriptInline::_id,
{MacroActionScriptInline::Create, MacroActionScriptInlineEdit::Create,
"AdvSceneSwitcher.action.script"});
bool MacroActionScriptInline::PerformAction()
{
return _script.Run();
}
void MacroActionScriptInline::LogAction() const
{
ablog(LOG_INFO, "performing inline script action");
}
bool MacroActionScriptInline::Save(obs_data_t *obj) const
{
MacroAction::Save(obj);
_script.Save(obj);
return true;
}
bool MacroActionScriptInline::Load(obs_data_t *obj)
{
MacroAction::Load(obj);
_script.Load(obj);
return true;
}
std::shared_ptr<MacroAction> MacroActionScriptInline::Create(Macro *m)
{
return std::make_shared<MacroActionScriptInline>(m);
}
std::shared_ptr<MacroAction> MacroActionScriptInline::Copy() const
{
return std::make_shared<MacroActionScriptInline>(*this);
}
void MacroActionScriptInline::ResolveVariablesToFixedValues()
{
_script.ResolveVariablesToFixedValues();
}
MacroActionScriptInlineEdit::MacroActionScriptInlineEdit(
QWidget *parent, std::shared_ptr<MacroActionScriptInline> entryData)
: MacroSegmentScriptInlineEdit(parent, entryData)
{
}
QWidget *
MacroActionScriptInlineEdit::Create(QWidget *parent,
std::shared_ptr<MacroAction> action)
{
return new MacroActionScriptInlineEdit(
parent,
std::dynamic_pointer_cast<MacroActionScriptInline>(action));
}
} // namespace advss