From 2928775f5b7345b8c704d591d7a65c2b15657c93 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Fri, 1 Mar 2024 23:31:45 +0100 Subject: [PATCH] Add option to resolve variables on queue add --- data/locale/en-US.ini | 1 + lib/utils/action-queue.cpp | 30 ++++++++++++++++++++++++++++-- lib/utils/action-queue.hpp | 2 ++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index b4a9bff4..4e6125d7 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -1040,6 +1040,7 @@ AdvSceneSwitcher.actionQueues.configure="Configure action queue settings" AdvSceneSwitcher.actionQueues.invalid="Invalid action queue selection" AdvSceneSwitcher.actionQueues.name="Name:" AdvSceneSwitcher.actionQueues.runOnStartup="Run action queue when starting the plugin" +AdvSceneSwitcher.actionQueues.resolveVariablesOnAdd="Resolve variables when action is inserted into the queue" AdvSceneSwitcher.actionQueues.running="Queue is running" AdvSceneSwitcher.actionQueues.stopped="Queue is stopped" AdvSceneSwitcher.actionQueues.start="Start action queue" diff --git a/lib/utils/action-queue.cpp b/lib/utils/action-queue.cpp index 2ed761ad..d9569416 100644 --- a/lib/utils/action-queue.cpp +++ b/lib/utils/action-queue.cpp @@ -33,6 +33,7 @@ void ActionQueue::Save(obs_data_t *obj) const { obs_data_set_string(obj, "name", _name.c_str()); obs_data_set_bool(obj, "runOnStartup", _runOnStartup); + obs_data_set_bool(obj, "resolveVariablesOnAdd", _resolveVariablesOnAdd); } void ActionQueue::Load(obs_data_t *obj) @@ -40,6 +41,8 @@ void ActionQueue::Load(obs_data_t *obj) std::lock_guard lock(_mutex); _name = obs_data_get_string(obj, "name"); _runOnStartup = obs_data_get_bool(obj, "runOnStartup"); + _resolveVariablesOnAdd = + obs_data_get_bool(obj, "resolveVariablesOnAdd"); if (_runOnStartup) { Start(); @@ -80,10 +83,21 @@ void ActionQueue::Clear() _actions.clear(); } -void ActionQueue::Add(const std::shared_ptr &actions) +void ActionQueue::Add(const std::shared_ptr &action) { std::lock_guard lock(_mutex); - _actions.emplace_back(actions); + if (_resolveVariablesOnAdd) { + auto copy = action->Copy(); + copy->GetMacro(); + OBSDataAutoRelease data = obs_data_create(); + action->Save(data); + copy->Load(data); + copy->PostLoad(); + copy->ResolveVariablesToFixedValues(); + _actions.emplace_back(copy); + } else { + _actions.emplace_back(action); + } _cv.notify_all(); } @@ -139,6 +153,7 @@ ActionQueueSettingsDialog::ActionQueueSettingsDialog(QWidget *parent, _clear(new QPushButton( obs_module_text("AdvSceneSwitcher.actionQueues.clear"))), _runOnStartup(new QCheckBox()), + _resolveVariablesOnAdd(new QCheckBox()), _queue(settings) { QWidget::connect(_startStopToggle, SIGNAL(clicked()), this, @@ -146,6 +161,7 @@ ActionQueueSettingsDialog::ActionQueueSettingsDialog(QWidget *parent, QWidget::connect(_clear, SIGNAL(clicked()), this, SLOT(ClearClicked())); _runOnStartup->setChecked(settings._runOnStartup); + _resolveVariablesOnAdd->setChecked(settings._resolveVariablesOnAdd); UpdateLabels(); auto layout = new QGridLayout(); @@ -167,6 +183,14 @@ ActionQueueSettingsDialog::ActionQueueSettingsDialog(QWidget *parent, _runOnStartup->setToolTip( obs_module_text("AdvSceneSwitcher.actionQueues.runOnStartup")); ++row; + layout->addWidget( + new QLabel(obs_module_text( + "AdvSceneSwitcher.actionQueues.resolveVariablesOnAdd")), + row, 0); + layout->addWidget(_resolveVariablesOnAdd, row, 1); + _resolveVariablesOnAdd->setToolTip(obs_module_text( + "AdvSceneSwitcher.actionQueues.resolveVariablesOnAdd")); + ++row; layout->addWidget(_queueRunStatus, row, 0); layout->addWidget(_startStopToggle, row, 1); ++row; @@ -194,6 +218,8 @@ bool ActionQueueSettingsDialog::AskForSettings(QWidget *parent, settings._name = dialog._name->text().toStdString(); settings._runOnStartup = dialog._runOnStartup->isChecked(); + settings._resolveVariablesOnAdd = + dialog._resolveVariablesOnAdd->isChecked(); return true; } diff --git a/lib/utils/action-queue.hpp b/lib/utils/action-queue.hpp index fa27c45b..2dd7f403 100644 --- a/lib/utils/action-queue.hpp +++ b/lib/utils/action-queue.hpp @@ -38,6 +38,7 @@ private: void RunActions(); bool _runOnStartup = true; + bool _resolveVariablesOnAdd = true; std::atomic_bool _stop = {false}; std::mutex _mutex; std::condition_variable _cv; @@ -66,6 +67,7 @@ private: QLabel *_queueSize; QPushButton *_clear; QCheckBox *_runOnStartup; + QCheckBox *_resolveVariablesOnAdd; ActionQueue &_queue; };