From 03e71e9183eb2c4907cf268c34fd90c9db0c0e18 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Fri, 1 Mar 2024 23:42:12 +0100 Subject: [PATCH] Add support to resolve variables on action queue add --- lib/macro/macro-action-macro.cpp | 15 +++++ lib/macro/macro-action-macro.hpp | 7 +-- lib/macro/macro-action-queue.cpp | 10 ++++ lib/macro/macro-action-queue.hpp | 6 +- lib/macro/macro-action-variable.cpp | 26 ++++++++- lib/macro/macro-action-variable.hpp | 7 +-- lib/macro/macro-action.cpp | 2 + lib/macro/macro-action.hpp | 9 ++- plugins/base/macro-action-audio.cpp | 21 +++++++ plugins/base/macro-action-audio.hpp | 17 +++--- plugins/base/macro-action-clipboard.cpp | 16 ++++++ plugins/base/macro-action-clipboard.hpp | 8 +-- plugins/base/macro-action-file.cpp | 45 ++++++++++----- plugins/base/macro-action-file.hpp | 24 ++++---- plugins/base/macro-action-filter.cpp | 18 ++++++ plugins/base/macro-action-filter.hpp | 7 +-- plugins/base/macro-action-hotkey.cpp | 10 ++++ plugins/base/macro-action-hotkey.hpp | 6 +- plugins/base/macro-action-http.cpp | 18 ++++++ plugins/base/macro-action-http.hpp | 7 +-- plugins/base/macro-action-media.cpp | 19 +++++++ plugins/base/macro-action-media.hpp | 7 +-- plugins/base/macro-action-osc.cpp | 23 ++++++++ plugins/base/macro-action-osc.hpp | 7 +-- plugins/base/macro-action-plugin-state.cpp | 23 ++++++-- plugins/base/macro-action-plugin-state.hpp | 7 +-- plugins/base/macro-action-profile.cpp | 10 ++++ plugins/base/macro-action-profile.hpp | 6 +- plugins/base/macro-action-projector.cpp | 16 ++++++ plugins/base/macro-action-projector.hpp | 7 +-- plugins/base/macro-action-random.cpp | 10 ++++ plugins/base/macro-action-random.hpp | 6 +- plugins/base/macro-action-recording.cpp | 20 ++++++- plugins/base/macro-action-recording.hpp | 7 +-- plugins/base/macro-action-replay-buffer.cpp | 14 ++++- plugins/base/macro-action-replay-buffer.hpp | 6 +- plugins/base/macro-action-run.cpp | 16 ++++++ plugins/base/macro-action-run.hpp | 7 +-- .../base/macro-action-scene-collection.cpp | 10 ++++ .../base/macro-action-scene-collection.hpp | 6 +- plugins/base/macro-action-scene-lock.cpp | 17 +++++- plugins/base/macro-action-scene-lock.hpp | 7 +-- plugins/base/macro-action-scene-order.cpp | 16 ++++++ plugins/base/macro-action-scene-order.hpp | 7 +-- plugins/base/macro-action-scene-switch.cpp | 16 ++++++ plugins/base/macro-action-scene-switch.hpp | 8 +-- plugins/base/macro-action-scene-transform.cpp | 18 ++++++ plugins/base/macro-action-scene-transform.hpp | 7 +-- .../base/macro-action-scene-visibility.cpp | 16 ++++++ .../base/macro-action-scene-visibility.hpp | 7 +-- plugins/base/macro-action-screenshot.cpp | 26 ++++++++- plugins/base/macro-action-screenshot.hpp | 10 ++-- plugins/base/macro-action-sequence.cpp | 15 +++++ plugins/base/macro-action-sequence.hpp | 11 ++-- plugins/base/macro-action-source.cpp | 17 ++++++ plugins/base/macro-action-source.hpp | 7 +-- plugins/base/macro-action-streaming.cpp | 16 ++++++ plugins/base/macro-action-streaming.hpp | 7 +-- plugins/base/macro-action-studio-mode.cpp | 15 +++++ plugins/base/macro-action-studio-mode.hpp | 7 +-- plugins/base/macro-action-systray.cpp | 17 ++++++ plugins/base/macro-action-systray.hpp | 7 +-- plugins/base/macro-action-timer.cpp | 55 ++++++++++++------- plugins/base/macro-action-timer.hpp | 24 ++++---- plugins/base/macro-action-transition.cpp | 21 ++++++- plugins/base/macro-action-transition.hpp | 7 +-- plugins/base/macro-action-virtual-cam.cpp | 30 +++++++--- plugins/base/macro-action-virtual-cam.hpp | 17 +++--- plugins/base/macro-action-wait.cpp | 20 ++++++- plugins/base/macro-action-wait.hpp | 8 +-- plugins/base/macro-action-websocket.cpp | 15 +++++ plugins/base/macro-action-websocket.hpp | 7 +-- plugins/base/macro-action-window.cpp | 15 +++++ plugins/base/macro-action-window.hpp | 7 +-- plugins/midi/macro-action-midi.cpp | 15 +++++ plugins/midi/macro-action-midi.hpp | 7 +-- plugins/midi/midi-helpers.cpp | 7 +++ plugins/midi/midi-helpers.hpp | 2 + plugins/twitch/channel-selection.cpp | 15 +++-- plugins/twitch/channel-selection.hpp | 3 +- plugins/twitch/macro-action-twitch.cpp | 20 +++++++ plugins/twitch/macro-action-twitch.hpp | 8 +-- 82 files changed, 835 insertions(+), 248 deletions(-) diff --git a/lib/macro/macro-action-macro.cpp b/lib/macro/macro-action-macro.cpp index 4851b100..581ad0bf 100644 --- a/lib/macro/macro-action-macro.cpp +++ b/lib/macro/macro-action-macro.cpp @@ -145,6 +145,21 @@ std::string MacroActionMacro::GetShortDesc() const return _macro.Name(); } +std::shared_ptr MacroActionMacro::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionMacro::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionMacro::ResolveVariablesToFixedValues() +{ + _actionIndex.ResolveVariables(); +} + static inline void populateActionSelection(QComboBox *list) { for (auto entry : actionTypes) { diff --git a/lib/macro/macro-action-macro.hpp b/lib/macro/macro-action-macro.hpp index d64c06e6..7b36835d 100644 --- a/lib/macro/macro-action-macro.hpp +++ b/lib/macro/macro-action-macro.hpp @@ -16,10 +16,9 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); enum class Action { PAUSE, diff --git a/lib/macro/macro-action-queue.cpp b/lib/macro/macro-action-queue.cpp index 34db2d3d..cf66740e 100644 --- a/lib/macro/macro-action-queue.cpp +++ b/lib/macro/macro-action-queue.cpp @@ -114,6 +114,16 @@ std::string MacroActionQueue::GetShortDesc() const return GetActionQueueName(_queue); } +std::shared_ptr MacroActionQueue::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionQueue::Copy() const +{ + return std::make_shared(*this); +} + static inline void populateActionSelection(QComboBox *list) { for (const auto &[_, name] : actionTypes) { diff --git a/lib/macro/macro-action-queue.hpp b/lib/macro/macro-action-queue.hpp index 3d60ee5d..5932c45c 100644 --- a/lib/macro/macro-action-queue.hpp +++ b/lib/macro/macro-action-queue.hpp @@ -16,10 +16,8 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; enum class Action { ADD_TO_QUEUE, diff --git a/lib/macro/macro-action-variable.cpp b/lib/macro/macro-action-variable.cpp index f3594a02..ffbfea88 100644 --- a/lib/macro/macro-action-variable.cpp +++ b/lib/macro/macro-action-variable.cpp @@ -198,7 +198,8 @@ void MacroActionVariable::SetToSceneItemName(Variable *var) struct AskForInputParams { AskForInputParams(const QString &prompt_, const QString &placeholder_) - : prompt(prompt_), placeholder(placeholder_){}; + : prompt(prompt_), + placeholder(placeholder_){}; QString prompt; QString placeholder; std::optional result; @@ -422,6 +423,16 @@ std::string MacroActionVariable::GetShortDesc() const return GetWeakVariableName(_variable); } +std::shared_ptr MacroActionVariable::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionVariable::Copy() const +{ + return std::make_shared(*this); +} + void MacroActionVariable::SetSegmentIndexValue(int value) { DecrementCurrentSegmentVariableRef(); @@ -485,6 +496,19 @@ int MacroActionVariable::GetSegmentIndexValue() const return -1; } +void MacroActionVariable::ResolveVariablesToFixedValues() +{ + _strValue.ResolveVariables(); + _findStr.ResolveVariables(); + _replaceStr.ResolveVariables(); + _mathExpression.ResolveVariables(); + _inputPrompt.ResolveVariables(); + _inputPlaceholder.ResolveVariables(); + _envVariableName.ResolveVariables(); + _scene.ResolveVariables(); + _sceneItemIndex.ResolveVariables(); +} + void MacroActionVariable::DecrementCurrentSegmentVariableRef() { auto segment = _macroSegment.lock(); diff --git a/lib/macro/macro-action-variable.hpp b/lib/macro/macro-action-variable.hpp index 7eeb2b1b..e9b809d7 100644 --- a/lib/macro/macro-action-variable.hpp +++ b/lib/macro/macro-action-variable.hpp @@ -20,12 +20,11 @@ public: bool PostLoad() override; std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; void SetSegmentIndexValue(int); int GetSegmentIndexValue() const; + void ResolveVariablesToFixedValues(); enum class Type { SET_FIXED_VALUE, diff --git a/lib/macro/macro-action.cpp b/lib/macro/macro-action.cpp index 95c5f24a..d9c4c32a 100644 --- a/lib/macro/macro-action.cpp +++ b/lib/macro/macro-action.cpp @@ -38,6 +38,8 @@ bool MacroAction::Enabled() const return _enabled; } +void MacroAction::ResolveVariablesToFixedValues() {} + std::string_view MacroAction::GetDefaultID() { return "scene_switch"; diff --git a/lib/macro/macro-action.hpp b/lib/macro/macro-action.hpp index 73fed9c4..81e8b05e 100644 --- a/lib/macro/macro-action.hpp +++ b/lib/macro/macro-action.hpp @@ -8,10 +8,17 @@ class EXPORT MacroAction : public MacroSegment { public: MacroAction(Macro *m, bool supportsVariableValue = false); virtual ~MacroAction() = default; + virtual std::shared_ptr Copy() const = 0; + virtual bool PerformAction() = 0; + virtual void LogAction() const; + virtual bool Save(obs_data_t *obj) const = 0; virtual bool Load(obs_data_t *obj) = 0; - virtual void LogAction() const; + + // Used to resolve variables before actions are added to action queues + virtual void ResolveVariablesToFixedValues(); + void SetEnabled(bool); bool Enabled() const; diff --git a/plugins/base/macro-action-audio.cpp b/plugins/base/macro-action-audio.cpp index 6108b34e..eb1492ef 100644 --- a/plugins/base/macro-action-audio.cpp +++ b/plugins/base/macro-action-audio.cpp @@ -328,6 +328,27 @@ std::string MacroActionAudio::GetShortDesc() const return _audioSource.ToString(); } +std::shared_ptr MacroActionAudio::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionAudio::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionAudio::ResolveVariablesToFixedValues() +{ + _audioSource.ResolveVariables(); + _syncOffset.ResolveVariables(); + _balance.ResolveVariables(); + _volume.ResolveVariables(); + _volumeDB.ResolveVariables(); + _duration.ResolveVariables(); + _rate.ResolveVariables(); +} + static inline void populateActionSelection(QComboBox *list) { for (const auto &[action, name] : actionTypes) { diff --git a/plugins/base/macro-action-audio.hpp b/plugins/base/macro-action-audio.hpp index 3f55a65f..4ae74dca 100644 --- a/plugins/base/macro-action-audio.hpp +++ b/plugins/base/macro-action-audio.hpp @@ -20,10 +20,9 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); SourceSelection _audioSource; @@ -44,15 +43,15 @@ public: Action _action = Action::MUTE; FadeType _fadeType = FadeType::DURATION; - NumberVariable _syncOffset = 0; + IntVariable _syncOffset = 0; obs_monitoring_type _monitorType = OBS_MONITORING_TYPE_NONE; - NumberVariable _balance = 0.5; + DoubleVariable _balance = 0.5; bool _useDb = false; - NumberVariable _volume = 0; - NumberVariable _volumeDB = 0.0; + IntVariable _volume = 0; + DoubleVariable _volumeDB = 0.0; bool _fade = false; Duration _duration; - NumberVariable _rate = 100.; + DoubleVariable _rate = 100.; bool _wait = false; bool _abortActiveFade = false; diff --git a/plugins/base/macro-action-clipboard.cpp b/plugins/base/macro-action-clipboard.cpp index e863214b..606f2423 100644 --- a/plugins/base/macro-action-clipboard.cpp +++ b/plugins/base/macro-action-clipboard.cpp @@ -93,6 +93,16 @@ static void copyImageFromUrl(void *param) setMimeTypeParams(params, clipboard); } +std::shared_ptr MacroActionClipboard::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionClipboard::Copy() const +{ + return std::make_shared(*this); +} + bool MacroActionClipboard::PerformAction() { switch (_action) { @@ -159,6 +169,12 @@ bool MacroActionClipboard::Load(obs_data_t *obj) return true; } +void MacroActionClipboard::ResolveVariablesToFixedValues() +{ + _text.ResolveVariables(); + _url.ResolveVariables(); +} + static inline void populateActionSelection(QComboBox *list) { for (const auto &[action, name] : actionTypes) { diff --git a/plugins/base/macro-action-clipboard.hpp b/plugins/base/macro-action-clipboard.hpp index c7f22f5d..1ff53b74 100644 --- a/plugins/base/macro-action-clipboard.hpp +++ b/plugins/base/macro-action-clipboard.hpp @@ -22,16 +22,16 @@ struct ClipboardImageQueueParams : ClipboardQueueParams { class MacroActionClipboard : public MacroAction { public: MacroActionClipboard(Macro *m) : MacroAction(m) {} - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; std::string GetId() const { return id; }; bool PerformAction(); bool Save(obs_data_t *obj) const; bool Load(obs_data_t *obj); + void ResolveVariablesToFixedValues(); + enum class Action { COPY_TEXT, COPY_IMAGE, diff --git a/plugins/base/macro-action-file.cpp b/plugins/base/macro-action-file.cpp index b566b7d7..f7c0c50e 100644 --- a/plugins/base/macro-action-file.cpp +++ b/plugins/base/macro-action-file.cpp @@ -14,9 +14,11 @@ bool MacroActionFile::_registered = MacroActionFactory::Register( {MacroActionFile::Create, MacroActionFileEdit::Create, "AdvSceneSwitcher.action.file"}); -const static std::map actionTypes = { - {FileAction::WRITE, "AdvSceneSwitcher.action.file.type.write"}, - {FileAction::APPEND, "AdvSceneSwitcher.action.file.type.append"}, +static const std::map actionTypes = { + {MacroActionFile::Action::WRITE, + "AdvSceneSwitcher.action.file.type.write"}, + {MacroActionFile::Action::APPEND, + "AdvSceneSwitcher.action.file.type.append"}, }; bool MacroActionFile::PerformAction() @@ -25,10 +27,10 @@ bool MacroActionFile::PerformAction() QFile file(path); bool open = false; switch (_action) { - case FileAction::WRITE: + case Action::WRITE: open = file.open(QIODevice::WriteOnly); break; - case FileAction::APPEND: + case Action::APPEND: open = file.open(QIODevice::WriteOnly | QIODevice::Append); break; default: @@ -67,7 +69,7 @@ bool MacroActionFile::Load(obs_data_t *obj) MacroAction::Load(obj); _file.Load(obj, "file"); _text.Load(obj, "text"); - _action = static_cast(obs_data_get_int(obj, "action")); + _action = static_cast(obs_data_get_int(obj, "action")); return true; } @@ -76,21 +78,36 @@ std::string MacroActionFile::GetShortDesc() const return _file.UnresolvedValue(); } +std::shared_ptr MacroActionFile::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionFile::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionFile::ResolveVariablesToFixedValues() +{ + _file.ResolveVariables(); + _text.ResolveVariables(); +} + static inline void populateActionSelection(QComboBox *list) { - for (auto entry : actionTypes) { - list->addItem(obs_module_text(entry.second.c_str())); + for (const auto &[_, name] : actionTypes) { + list->addItem(obs_module_text(name.c_str())); } } MacroActionFileEdit::MacroActionFileEdit( QWidget *parent, std::shared_ptr entryData) - : QWidget(parent) + : QWidget(parent), + _filePath(new FileSelection(FileSelection::Type::WRITE)), + _text(new VariableTextEdit(this)), + _actions(new QComboBox()) { - _filePath = new FileSelection(FileSelection::Type::WRITE); - _text = new VariableTextEdit(this); - _actions = new QComboBox(); - populateActionSelection(_actions); QWidget::connect(_actions, SIGNAL(currentIndexChanged(int)), this, @@ -166,7 +183,7 @@ void MacroActionFileEdit::ActionChanged(int value) } auto lock = LockContext(); - _entryData->_action = static_cast(value); + _entryData->_action = static_cast(value); } } // namespace advss diff --git a/plugins/base/macro-action-file.hpp b/plugins/base/macro-action-file.hpp index 760096e9..700fd31c 100644 --- a/plugins/base/macro-action-file.hpp +++ b/plugins/base/macro-action-file.hpp @@ -7,11 +7,6 @@ namespace advss { -enum class FileAction { - WRITE, - APPEND, -}; - class MacroActionFile : public MacroAction { public: MacroActionFile(Macro *m) : MacroAction(m) {} @@ -21,14 +16,18 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); StringVariable _file = obs_module_text("AdvSceneSwitcher.enterPath"); StringVariable _text = obs_module_text("AdvSceneSwitcher.enterText"); - FileAction _action = FileAction::WRITE; + + enum class Action { + WRITE, + APPEND, + }; + Action _action = Action::WRITE; private: static bool _registered; @@ -58,13 +57,12 @@ private slots: signals: void HeaderInfoChanged(const QString &); -protected: +private: FileSelection *_filePath; VariableTextEdit *_text; QComboBox *_actions; - std::shared_ptr _entryData; -private: + std::shared_ptr _entryData; bool _loading = true; }; diff --git a/plugins/base/macro-action-filter.cpp b/plugins/base/macro-action-filter.cpp index a7b8bc5f..d1d469da 100644 --- a/plugins/base/macro-action-filter.cpp +++ b/plugins/base/macro-action-filter.cpp @@ -158,6 +158,24 @@ std::string MacroActionFilter::GetShortDesc() const return ""; } +std::shared_ptr MacroActionFilter::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionFilter::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionFilter::ResolveVariablesToFixedValues() +{ + _source.ResolveVariables(); + _filter.ResolveVariables(); + _settingsString.ResolveVariables(); + _manualSettingValue.ResolveVariables(); +} + static inline void populateActionSelection(QComboBox *list) { for (auto entry : actionTypes) { diff --git a/plugins/base/macro-action-filter.hpp b/plugins/base/macro-action-filter.hpp index fcfa420a..3c3fae4f 100644 --- a/plugins/base/macro-action-filter.hpp +++ b/plugins/base/macro-action-filter.hpp @@ -20,10 +20,9 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); enum class Action { ENABLE, diff --git a/plugins/base/macro-action-hotkey.cpp b/plugins/base/macro-action-hotkey.cpp index 02cf83f8..0bb996db 100644 --- a/plugins/base/macro-action-hotkey.cpp +++ b/plugins/base/macro-action-hotkey.cpp @@ -425,6 +425,16 @@ bool MacroActionHotkey::Load(obs_data_t *obj) return true; } +std::shared_ptr MacroActionHotkey::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionHotkey::Copy() const +{ + return std::make_shared(*this); +} + static inline void populateKeySelection(QComboBox *list) { list->addItems({"No key", diff --git a/plugins/base/macro-action-hotkey.hpp b/plugins/base/macro-action-hotkey.hpp index fd1c0a31..13df865c 100644 --- a/plugins/base/macro-action-hotkey.hpp +++ b/plugins/base/macro-action-hotkey.hpp @@ -18,10 +18,8 @@ public: bool Save(obs_data_t *obj) const; bool Load(obs_data_t *obj); std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; enum class Action { OBS_HOTKEY, diff --git a/plugins/base/macro-action-http.cpp b/plugins/base/macro-action-http.cpp index 73ff3c6c..722c1f69 100644 --- a/plugins/base/macro-action-http.cpp +++ b/plugins/base/macro-action-http.cpp @@ -133,6 +133,24 @@ std::string MacroActionHttp::GetShortDesc() const return _url.UnresolvedValue(); } +std::shared_ptr MacroActionHttp::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionHttp::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionHttp::ResolveVariablesToFixedValues() +{ + _url.ResolveVariables(); + _data.ResolveVariables(); + _headers.ResolveVariables(); + _timeout.ResolveVariables(); +} + static inline void populateMethodSelection(QComboBox *list) { for (auto entry : methods) { diff --git a/plugins/base/macro-action-http.hpp b/plugins/base/macro-action-http.hpp index eab70abb..eb74f845 100644 --- a/plugins/base/macro-action-http.hpp +++ b/plugins/base/macro-action-http.hpp @@ -20,10 +20,9 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); enum class Method { GET = 0, diff --git a/plugins/base/macro-action-media.cpp b/plugins/base/macro-action-media.cpp index e4e3e28c..6fdebd5f 100644 --- a/plugins/base/macro-action-media.cpp +++ b/plugins/base/macro-action-media.cpp @@ -38,6 +38,16 @@ static const std::map "AdvSceneSwitcher.action.media.selectionType.sceneItem"}, }; +std::shared_ptr MacroActionMedia::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionMedia::Copy() const +{ + return std::make_shared(*this); +} + std::string MacroActionMedia::GetShortDesc() const { if (_selection == SelectionType::SOURCE) { @@ -150,6 +160,15 @@ bool MacroActionMedia::Load(obs_data_t *obj) return true; } +void MacroActionMedia::ResolveVariablesToFixedValues() +{ + _seekDuration.ResolveVariables(); + _seekPercentage.ResolveVariables(); + _mediaSource.ResolveVariables(); + _sceneItem.ResolveVariables(); + _scene.ResolveVariables(); +} + static inline void populateActionSelection(QComboBox *list) { for (const auto &[_, name] : actionTypes) { diff --git a/plugins/base/macro-action-media.hpp b/plugins/base/macro-action-media.hpp index f4bd5183..0147c134 100644 --- a/plugins/base/macro-action-media.hpp +++ b/plugins/base/macro-action-media.hpp @@ -11,10 +11,8 @@ namespace advss { class MacroActionMedia : public MacroAction { public: MacroActionMedia(Macro *m) : MacroAction(m) {} - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; std::string GetId() const { return id; }; std::string GetShortDesc() const; @@ -22,6 +20,7 @@ public: void LogAction() const; bool Save(obs_data_t *obj) const; bool Load(obs_data_t *obj); + void ResolveVariablesToFixedValues(); enum class Action { PLAY, diff --git a/plugins/base/macro-action-osc.cpp b/plugins/base/macro-action-osc.cpp index 552664eb..571e8b11 100644 --- a/plugins/base/macro-action-osc.cpp +++ b/plugins/base/macro-action-osc.cpp @@ -1,5 +1,6 @@ #include "macro-action-osc.hpp" +#include #include #include @@ -172,6 +173,21 @@ bool MacroActionOSC::Load(obs_data_t *obj) return true; } +std::shared_ptr MacroActionOSC::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionOSC::Copy() const +{ + auto result = Create(GetMacro()); + OBSDataAutoRelease data = obs_data_create(); + Save(data); + result->Load(data); + result->PostLoad(); + return result; +} + void MacroActionOSC::SetProtocol(Protocol p) { _protocol = p; @@ -190,6 +206,13 @@ void MacroActionOSC::SetPortNr(IntVariable port) _reconnect = true; } +void MacroActionOSC::ResolveVariablesToFixedValues() +{ + _ip.ResolveVariables(); + _port.ResolveVariables(); + _message.ResolveVariables(); +} + static void populateProtocolSelection(QComboBox *list) { list->addItem("TCP"); diff --git a/plugins/base/macro-action-osc.hpp b/plugins/base/macro-action-osc.hpp index 6457cebe..f8f1cb6a 100644 --- a/plugins/base/macro-action-osc.hpp +++ b/plugins/base/macro-action-osc.hpp @@ -15,10 +15,8 @@ public: bool Save(obs_data_t *obj) const; bool Load(obs_data_t *obj); std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; enum class Protocol { TCP, @@ -31,6 +29,7 @@ public: StringVariable GetIP() const { return _ip; } void SetPortNr(IntVariable); IntVariable GetPortNr() { return _port; } + void ResolveVariablesToFixedValues(); OSCMessage _message; diff --git a/plugins/base/macro-action-plugin-state.cpp b/plugins/base/macro-action-plugin-state.cpp index 2eb8d2cf..4da83934 100644 --- a/plugins/base/macro-action-plugin-state.cpp +++ b/plugins/base/macro-action-plugin-state.cpp @@ -212,10 +212,25 @@ bool MacroActionPluginState::Load(obs_data_t *obj) return true; } +std::shared_ptr MacroActionPluginState::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionPluginState::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionPluginState::ResolveVariablesToFixedValues() +{ + _settingsPath = std::string(_settingsPath); +} + static inline void populateActionSelection(QComboBox *list) { - for (auto entry : actionTypes) { - list->addItem(obs_module_text(entry.second.c_str())); + for (const auto &[_, name] : actionTypes) { + list->addItem(obs_module_text(name.c_str())); } } @@ -223,8 +238,8 @@ static inline void populateValueSelection(QComboBox *list, PluginStateAction action) { if (action == PluginStateAction::NO_MATCH_BEHAVIOUR) { - for (auto entry : noMatchValues) { - list->addItem(obs_module_text(entry.second.c_str())); + for (const auto &[_, name] : noMatchValues) { + list->addItem(obs_module_text(name.c_str())); } } } diff --git a/plugins/base/macro-action-plugin-state.hpp b/plugins/base/macro-action-plugin-state.hpp index e1aeb4d4..174370d1 100644 --- a/plugins/base/macro-action-plugin-state.hpp +++ b/plugins/base/macro-action-plugin-state.hpp @@ -23,10 +23,9 @@ public: bool Save(obs_data_t *obj) const; bool Load(obs_data_t *obj); std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); PluginStateAction _action = PluginStateAction::STOP; int _value = 0; diff --git a/plugins/base/macro-action-profile.cpp b/plugins/base/macro-action-profile.cpp index ea7d92ac..39358668 100644 --- a/plugins/base/macro-action-profile.cpp +++ b/plugins/base/macro-action-profile.cpp @@ -43,6 +43,16 @@ std::string MacroActionProfile::GetShortDesc() const return _profile; } +std::shared_ptr MacroActionProfile::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionProfile::Copy() const +{ + return std::make_shared(*this); +} + MacroActionProfileEdit::MacroActionProfileEdit( QWidget *parent, std::shared_ptr entryData) : QWidget(parent) diff --git a/plugins/base/macro-action-profile.hpp b/plugins/base/macro-action-profile.hpp index a8ccad01..2e23eef7 100644 --- a/plugins/base/macro-action-profile.hpp +++ b/plugins/base/macro-action-profile.hpp @@ -14,10 +14,8 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; std::string _profile; diff --git a/plugins/base/macro-action-projector.cpp b/plugins/base/macro-action-projector.cpp index 097eb11b..1435bbc1 100644 --- a/plugins/base/macro-action-projector.cpp +++ b/plugins/base/macro-action-projector.cpp @@ -119,6 +119,22 @@ bool MacroActionProjector::Load(obs_data_t *obj) return true; } +std::shared_ptr MacroActionProjector::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionProjector::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionProjector::ResolveVariablesToFixedValues() +{ + _source.ResolveVariables(); + _scene.ResolveVariables(); +} + void MacroActionProjector::SetMonitor(int idx) { _monitor = idx; diff --git a/plugins/base/macro-action-projector.hpp b/plugins/base/macro-action-projector.hpp index 22ccbc99..dc9583c3 100644 --- a/plugins/base/macro-action-projector.hpp +++ b/plugins/base/macro-action-projector.hpp @@ -13,10 +13,9 @@ public: bool Save(obs_data_t *obj) const; bool Load(obs_data_t *obj); std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); void SetMonitor(int); int GetMonitor() const; diff --git a/plugins/base/macro-action-random.cpp b/plugins/base/macro-action-random.cpp index 6180a8d8..2ecba29e 100644 --- a/plugins/base/macro-action-random.cpp +++ b/plugins/base/macro-action-random.cpp @@ -83,6 +83,16 @@ bool MacroActionRandom::Load(obs_data_t *obj) return true; } +std::shared_ptr MacroActionRandom::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionRandom::Copy() const +{ + return std::make_shared(*this); +} + MacroActionRandomEdit::MacroActionRandomEdit( QWidget *parent, std::shared_ptr entryData) : QWidget(parent), diff --git a/plugins/base/macro-action-random.hpp b/plugins/base/macro-action-random.hpp index 7b6ec418..f1a81ac9 100644 --- a/plugins/base/macro-action-random.hpp +++ b/plugins/base/macro-action-random.hpp @@ -16,10 +16,8 @@ public: bool Save(obs_data_t *obj) const; bool Load(obs_data_t *obj); std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; bool _allowRepeat = false; diff --git a/plugins/base/macro-action-recording.cpp b/plugins/base/macro-action-recording.cpp index 2054c836..7404f9a9 100644 --- a/plugins/base/macro-action-recording.cpp +++ b/plugins/base/macro-action-recording.cpp @@ -122,10 +122,26 @@ bool MacroActionRecord::Load(obs_data_t *obj) return true; } +std::shared_ptr MacroActionRecord::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionRecord::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionRecord::ResolveVariablesToFixedValues() +{ + _folder.ResolveVariables(); + _fileFormat.ResolveVariables(); +} + static inline void populateActionSelection(QComboBox *list) { - for (auto entry : actionTypes) { - list->addItem(obs_module_text(entry.second.c_str())); + for (const auto &[_, name] : actionTypes) { + list->addItem(obs_module_text(name.c_str())); } } diff --git a/plugins/base/macro-action-recording.hpp b/plugins/base/macro-action-recording.hpp index 3af471f7..c8d0d96c 100644 --- a/plugins/base/macro-action-recording.hpp +++ b/plugins/base/macro-action-recording.hpp @@ -17,10 +17,9 @@ public: bool Save(obs_data_t *obj) const; bool Load(obs_data_t *obj); std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); enum class Action { STOP, diff --git a/plugins/base/macro-action-replay-buffer.cpp b/plugins/base/macro-action-replay-buffer.cpp index 7f6de1cc..7c8042f4 100644 --- a/plugins/base/macro-action-replay-buffer.cpp +++ b/plugins/base/macro-action-replay-buffer.cpp @@ -69,10 +69,20 @@ bool MacroActionReplayBuffer::Load(obs_data_t *obj) return true; } +std::shared_ptr MacroActionReplayBuffer::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionReplayBuffer::Copy() const +{ + return std::make_shared(*this); +} + static inline void populateActionSelection(QComboBox *list) { - for (auto entry : actionTypes) { - list->addItem(obs_module_text(entry.second.c_str())); + for (const auto &[_, name] : actionTypes) { + list->addItem(obs_module_text(name.c_str())); } } diff --git a/plugins/base/macro-action-replay-buffer.hpp b/plugins/base/macro-action-replay-buffer.hpp index e21974fa..bf7bc2e1 100644 --- a/plugins/base/macro-action-replay-buffer.hpp +++ b/plugins/base/macro-action-replay-buffer.hpp @@ -20,10 +20,8 @@ public: bool Save(obs_data_t *obj) const; bool Load(obs_data_t *obj); std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; ReplayBufferAction _action = ReplayBufferAction::STOP; diff --git a/plugins/base/macro-action-run.cpp b/plugins/base/macro-action-run.cpp index c53da0af..04a17088 100644 --- a/plugins/base/macro-action-run.cpp +++ b/plugins/base/macro-action-run.cpp @@ -64,6 +64,22 @@ std::string MacroActionRun::GetShortDesc() const return _procConfig.UnresolvedPath(); } +std::shared_ptr MacroActionRun::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionRun::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionRun::ResolveVariablesToFixedValues() +{ + _procConfig.ResolveVariables(); + _timeout.ResolveVariables(); +} + MacroActionRunEdit::MacroActionRunEdit( QWidget *parent, std::shared_ptr entryData) : QWidget(parent), diff --git a/plugins/base/macro-action-run.hpp b/plugins/base/macro-action-run.hpp index a17f5065..b1f1f5a0 100644 --- a/plugins/base/macro-action-run.hpp +++ b/plugins/base/macro-action-run.hpp @@ -16,10 +16,9 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); ProcessConfig _procConfig; bool _wait = false; diff --git a/plugins/base/macro-action-scene-collection.cpp b/plugins/base/macro-action-scene-collection.cpp index 29ec56c2..215d1b98 100644 --- a/plugins/base/macro-action-scene-collection.cpp +++ b/plugins/base/macro-action-scene-collection.cpp @@ -54,6 +54,16 @@ std::string MacroActionSceneCollection::GetShortDesc() const return _sceneCollection; } +std::shared_ptr MacroActionSceneCollection::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionSceneCollection::Copy() const +{ + return std::make_shared(*this); +} + void populateSceneCollectionSelection(QComboBox *box) { auto sceneCollections = obs_frontend_get_scene_collections(); diff --git a/plugins/base/macro-action-scene-collection.hpp b/plugins/base/macro-action-scene-collection.hpp index 6969e18b..a6deab9c 100644 --- a/plugins/base/macro-action-scene-collection.hpp +++ b/plugins/base/macro-action-scene-collection.hpp @@ -14,10 +14,8 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; std::string _sceneCollection; diff --git a/plugins/base/macro-action-scene-lock.cpp b/plugins/base/macro-action-scene-lock.cpp index 53cd871b..18ae04e0 100644 --- a/plugins/base/macro-action-scene-lock.cpp +++ b/plugins/base/macro-action-scene-lock.cpp @@ -37,7 +37,6 @@ static void setSceneItemLock(obs_sceneitem_t *item, bool MacroActionSceneLock::PerformAction() { - auto items = _source.GetSceneItems(_scene); for (const auto &item : items) { setSceneItemLock(item, _action); @@ -87,6 +86,16 @@ std::string MacroActionSceneLock::GetShortDesc() const return ""; } +std::shared_ptr MacroActionSceneLock::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionSceneLock::Copy() const +{ + return std::make_shared(*this); +} + static inline void populateActionSelection(QComboBox *list) { for (const auto &[_, name] : actionTypes) { @@ -94,6 +103,12 @@ static inline void populateActionSelection(QComboBox *list) } } +void MacroActionSceneLock::ResolveVariablesToFixedValues() +{ + _scene.ResolveVariables(); + _source.ResolveVariables(); +} + MacroActionSceneLockEdit::MacroActionSceneLockEdit( QWidget *parent, std::shared_ptr entryData) : QWidget(parent), diff --git a/plugins/base/macro-action-scene-lock.hpp b/plugins/base/macro-action-scene-lock.hpp index 5b4ea22f..a3d0071a 100644 --- a/plugins/base/macro-action-scene-lock.hpp +++ b/plugins/base/macro-action-scene-lock.hpp @@ -14,10 +14,9 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); enum class Action { LOCK, diff --git a/plugins/base/macro-action-scene-order.cpp b/plugins/base/macro-action-scene-order.cpp index f3adb58c..f9fe3b0a 100644 --- a/plugins/base/macro-action-scene-order.cpp +++ b/plugins/base/macro-action-scene-order.cpp @@ -142,6 +142,22 @@ std::string MacroActionSceneOrder::GetShortDesc() const return _scene.ToString() + " - " + _source.ToString(); } +std::shared_ptr MacroActionSceneOrder::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionSceneOrder::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionSceneOrder::ResolveVariablesToFixedValues() +{ + _scene.ResolveVariables(); + _source.ResolveVariables(); +} + static inline void populateActionSelection(QComboBox *list) { for (const auto &entry : actionTypes) { diff --git a/plugins/base/macro-action-scene-order.hpp b/plugins/base/macro-action-scene-order.hpp index f932953f..f214de07 100644 --- a/plugins/base/macro-action-scene-order.hpp +++ b/plugins/base/macro-action-scene-order.hpp @@ -24,10 +24,9 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); SceneSelection _scene; SceneItemSelection _source; diff --git a/plugins/base/macro-action-scene-switch.cpp b/plugins/base/macro-action-scene-switch.cpp index 536fe493..b04cdeaa 100644 --- a/plugins/base/macro-action-scene-switch.cpp +++ b/plugins/base/macro-action-scene-switch.cpp @@ -198,6 +198,22 @@ std::string MacroActionSwitchScene::GetShortDesc() const return _scene.ToString(); } +std::shared_ptr MacroActionSwitchScene::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionSwitchScene::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionSwitchScene::ResolveVariablesToFixedValues() +{ + _scene.ResolveVariables(); + _duration.ResolveVariables(); +} + static inline void populateTypeSelection(QComboBox *list) { for (const auto &[_, name] : sceneTypes) { diff --git a/plugins/base/macro-action-scene-switch.hpp b/plugins/base/macro-action-scene-switch.hpp index 5df5e47d..36eab5cf 100644 --- a/plugins/base/macro-action-scene-switch.hpp +++ b/plugins/base/macro-action-scene-switch.hpp @@ -17,11 +17,9 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); enum class SceneType { PROGRAM, PREVIEW }; SceneType _sceneType = SceneType::PROGRAM; diff --git a/plugins/base/macro-action-scene-transform.cpp b/plugins/base/macro-action-scene-transform.cpp index 22d8d235..4df554aa 100644 --- a/plugins/base/macro-action-scene-transform.cpp +++ b/plugins/base/macro-action-scene-transform.cpp @@ -312,6 +312,24 @@ std::string MacroActionSceneTransform::GetShortDesc() const return _scene.ToString() + " - " + _source.ToString(); } +std::shared_ptr MacroActionSceneTransform::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionSceneTransform::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionSceneTransform::ResolveVariablesToFixedValues() +{ + _scene.ResolveVariables(); + _source.ResolveVariables(); + _settings.ResolveVariables(); + _rotation.ResolveVariables(); +} + std::string MacroActionSceneTransform::ConvertSettings() { auto data = obs_data_create(); diff --git a/plugins/base/macro-action-scene-transform.hpp b/plugins/base/macro-action-scene-transform.hpp index c61bb83c..08a7de58 100644 --- a/plugins/base/macro-action-scene-transform.hpp +++ b/plugins/base/macro-action-scene-transform.hpp @@ -18,10 +18,9 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); enum class Action { RESET, diff --git a/plugins/base/macro-action-scene-visibility.cpp b/plugins/base/macro-action-scene-visibility.cpp index d7ce252f..93789657 100644 --- a/plugins/base/macro-action-scene-visibility.cpp +++ b/plugins/base/macro-action-scene-visibility.cpp @@ -101,6 +101,22 @@ std::string MacroActionSceneVisibility::GetShortDesc() const return ""; } +std::shared_ptr MacroActionSceneVisibility::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionSceneVisibility::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionSceneVisibility::ResolveVariablesToFixedValues() +{ + _scene.ResolveVariables(); + _source.ResolveVariables(); +} + static inline void populateActionSelection(QComboBox *list) { for (const auto &entry : actionTypes) { diff --git a/plugins/base/macro-action-scene-visibility.hpp b/plugins/base/macro-action-scene-visibility.hpp index c78baff8..40f4fc15 100644 --- a/plugins/base/macro-action-scene-visibility.hpp +++ b/plugins/base/macro-action-scene-visibility.hpp @@ -16,10 +16,9 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); SceneSelection _scene; SceneItemSelection _source; diff --git a/plugins/base/macro-action-screenshot.cpp b/plugins/base/macro-action-screenshot.cpp index 1139705f..a5e0b0aa 100644 --- a/plugins/base/macro-action-screenshot.cpp +++ b/plugins/base/macro-action-screenshot.cpp @@ -6,8 +6,6 @@ namespace advss { -const uint32_t MacroActionScreenshot::_version = 1; - const std::string MacroActionScreenshot::id = "screenshot"; bool MacroActionScreenshot::_registered = MacroActionFactory::Register( @@ -92,7 +90,7 @@ bool MacroActionScreenshot::Save(obs_data_t *obj) const obs_data_set_int(obj, "saveType", static_cast(_saveType)); obs_data_set_int(obj, "targetType", static_cast(_targetType)); _path.Save(obj, "savePath"); - obs_data_set_int(obj, "version", _version); + obs_data_set_int(obj, "version", 1); return true; } @@ -125,6 +123,28 @@ std::string MacroActionScreenshot::GetShortDesc() const return ""; } +std::shared_ptr MacroActionScreenshot::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionScreenshot::Copy() const +{ + auto result = Create(GetMacro()); + OBSDataAutoRelease data = obs_data_create(); + Save(data); + result->Load(data); + result->PostLoad(); + return result; +} + +void MacroActionScreenshot::ResolveVariablesToFixedValues() +{ + _scene.ResolveVariables(); + _source.ResolveVariables(); + _path.ResolveVariables(); +} + static void populateSaveTypeSelection(QComboBox *list) { list->addItem(obs_module_text( diff --git a/plugins/base/macro-action-screenshot.hpp b/plugins/base/macro-action-screenshot.hpp index 13b6cfd1..959f6f8f 100644 --- a/plugins/base/macro-action-screenshot.hpp +++ b/plugins/base/macro-action-screenshot.hpp @@ -18,15 +18,16 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); + enum class SaveType { OBS_DEFAULT, CUSTOM, }; SaveType _saveType = SaveType::OBS_DEFAULT; + enum class TargetType { SOURCE, SCENE, @@ -43,7 +44,6 @@ private: ScreenshotHelper _screenshot; - const static uint32_t _version; static bool _registered; static const std::string id; }; diff --git a/plugins/base/macro-action-sequence.cpp b/plugins/base/macro-action-sequence.cpp index a05be7ef..94bbfc4c 100644 --- a/plugins/base/macro-action-sequence.cpp +++ b/plugins/base/macro-action-sequence.cpp @@ -66,6 +66,21 @@ MacroRef MacroActionSequence::GetNextMacro(bool advance) return res; } +std::shared_ptr MacroActionSequence::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionSequence::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionSequence::ResolveVariablesToFixedValues() +{ + _resetIndex.ResolveVariables(); +} + bool MacroActionSequence::RunSequence() { if (_macros.size() == 0) { diff --git a/plugins/base/macro-action-sequence.hpp b/plugins/base/macro-action-sequence.hpp index 15a2ecbf..080bee7f 100644 --- a/plugins/base/macro-action-sequence.hpp +++ b/plugins/base/macro-action-sequence.hpp @@ -14,7 +14,9 @@ namespace advss { class MacroActionSequence : public MultiMacroRefAction, public MacroRefAction { public: MacroActionSequence(Macro *m) - : MacroAction(m), MultiMacroRefAction(m), MacroRefAction(m) + : MacroAction(m), + MultiMacroRefAction(m), + MacroRefAction(m) { } bool PerformAction(); @@ -24,10 +26,9 @@ public: bool PostLoad() override; std::string GetId() const { return id; }; MacroRef GetNextMacro(bool advance = true); - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); enum class Action { RUN_SEQUENCE, diff --git a/plugins/base/macro-action-source.cpp b/plugins/base/macro-action-source.cpp index 668ad970..f2413d96 100644 --- a/plugins/base/macro-action-source.cpp +++ b/plugins/base/macro-action-source.cpp @@ -266,6 +266,23 @@ std::string MacroActionSource::GetShortDesc() const return ""; } +std::shared_ptr MacroActionSource::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionSource::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionSource::ResolveVariablesToFixedValues() +{ + _source.ResolveVariables(); + _settingsString.ResolveVariables(); + _manualSettingValue.ResolveVariables(); +} + static inline void populateActionSelection(QComboBox *list) { for (auto &[actionType, name] : actionTypes) { diff --git a/plugins/base/macro-action-source.hpp b/plugins/base/macro-action-source.hpp index e90bc830..44443324 100644 --- a/plugins/base/macro-action-source.hpp +++ b/plugins/base/macro-action-source.hpp @@ -29,10 +29,9 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); SourceSelection _source; SourceSettingButton _button; diff --git a/plugins/base/macro-action-streaming.cpp b/plugins/base/macro-action-streaming.cpp index f00bdd76..ebec18bb 100644 --- a/plugins/base/macro-action-streaming.cpp +++ b/plugins/base/macro-action-streaming.cpp @@ -153,6 +153,22 @@ bool MacroActionStream::Load(obs_data_t *obj) return true; } +std::shared_ptr MacroActionStream::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionStream::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionStream::ResolveVariablesToFixedValues() +{ + _keyFrameInterval.ResolveVariables(); + _stringValue.ResolveVariables(); +} + static inline void populateActionSelection(QComboBox *list) { for (auto entry : actionTypes) { diff --git a/plugins/base/macro-action-streaming.hpp b/plugins/base/macro-action-streaming.hpp index 45950b48..83a110b8 100644 --- a/plugins/base/macro-action-streaming.hpp +++ b/plugins/base/macro-action-streaming.hpp @@ -18,10 +18,9 @@ public: bool Save(obs_data_t *obj) const; bool Load(obs_data_t *obj); std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); enum class Action { STOP, diff --git a/plugins/base/macro-action-studio-mode.cpp b/plugins/base/macro-action-studio-mode.cpp index 567f1957..098cb0e3 100644 --- a/plugins/base/macro-action-studio-mode.cpp +++ b/plugins/base/macro-action-studio-mode.cpp @@ -101,6 +101,21 @@ std::string MacroActionSudioMode::GetShortDesc() const return ""; } +std::shared_ptr MacroActionSudioMode::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionSudioMode::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionSudioMode::ResolveVariablesToFixedValues() +{ + _scene.ResolveVariables(); +} + static inline void populateActionSelection(QComboBox *list) { for (const auto &[id, name] : actionTypes) { diff --git a/plugins/base/macro-action-studio-mode.hpp b/plugins/base/macro-action-studio-mode.hpp index a43489c1..9f782f9b 100644 --- a/plugins/base/macro-action-studio-mode.hpp +++ b/plugins/base/macro-action-studio-mode.hpp @@ -13,10 +13,9 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); enum class Action { SWAP_SCENE, diff --git a/plugins/base/macro-action-systray.cpp b/plugins/base/macro-action-systray.cpp index 99c8400b..8ccdad4e 100644 --- a/plugins/base/macro-action-systray.cpp +++ b/plugins/base/macro-action-systray.cpp @@ -50,6 +50,23 @@ bool MacroActionSystray::Load(obs_data_t *obj) return true; } +std::shared_ptr MacroActionSystray::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionSystray::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionSystray::ResolveVariablesToFixedValues() +{ + _message.ResolveVariables(); + _title.ResolveVariables(); + _iconPath.ResolveVariables(); +} + MacroActionSystrayEdit::MacroActionSystrayEdit( QWidget *parent, std::shared_ptr entryData) : QWidget(parent), diff --git a/plugins/base/macro-action-systray.hpp b/plugins/base/macro-action-systray.hpp index 2608acd6..b9654e27 100644 --- a/plugins/base/macro-action-systray.hpp +++ b/plugins/base/macro-action-systray.hpp @@ -15,10 +15,9 @@ public: bool Save(obs_data_t *obj) const; bool Load(obs_data_t *obj); std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); StringVariable _message = ""; StringVariable _title = obs_module_text("AdvSceneSwitcher.pluginName"); diff --git a/plugins/base/macro-action-timer.cpp b/plugins/base/macro-action-timer.cpp index 456a8912..95821e30 100644 --- a/plugins/base/macro-action-timer.cpp +++ b/plugins/base/macro-action-timer.cpp @@ -14,11 +14,14 @@ bool MacroActionTimer::_registered = MacroActionFactory::Register( {MacroActionTimer::Create, MacroActionTimerEdit::Create, "AdvSceneSwitcher.action.timer"}); -const static std::map timerActions = { - {TimerAction::PAUSE, "AdvSceneSwitcher.action.timer.type.pause"}, - {TimerAction::CONTINUE, "AdvSceneSwitcher.action.timer.type.continue"}, - {TimerAction::RESET, "AdvSceneSwitcher.action.timer.type.reset"}, - {TimerAction::SET_TIME_REMAINING, +const static std::map timerActions = { + {MacroActionTimer::Action::PAUSE, + "AdvSceneSwitcher.action.timer.type.pause"}, + {MacroActionTimer::Action::CONTINUE, + "AdvSceneSwitcher.action.timer.type.continue"}, + {MacroActionTimer::Action::RESET, + "AdvSceneSwitcher.action.timer.type.reset"}, + {MacroActionTimer::Action::SET_TIME_REMAINING, "AdvSceneSwitcher.action.timer.type.setTimeRemaining"}, }; @@ -40,16 +43,16 @@ bool MacroActionTimer::PerformAction() } switch (_actionType) { - case TimerAction::PAUSE: + case Action::PAUSE: timerCondition->Pause(); break; - case TimerAction::CONTINUE: + case Action::CONTINUE: timerCondition->Continue(); break; - case TimerAction::RESET: + case Action::RESET: timerCondition->Reset(); break; - case TimerAction::SET_TIME_REMAINING: + case Action::SET_TIME_REMAINING: timerCondition->_duration.SetTimeRemaining( _duration.Seconds()); break; @@ -67,19 +70,19 @@ void MacroActionTimer::LogAction() const return; } switch (_actionType) { - case TimerAction::PAUSE: + case Action::PAUSE: vblog(LOG_INFO, "paused timers on \"%s\"", GetMacroName(macro.get()).c_str()); break; - case TimerAction::CONTINUE: + case Action::CONTINUE: vblog(LOG_INFO, "continued timers on \"%s\"", GetMacroName(macro.get()).c_str()); break; - case TimerAction::RESET: + case Action::RESET: vblog(LOG_INFO, "reset timers on \"%s\"", GetMacroName(macro.get()).c_str()); break; - case TimerAction::SET_TIME_REMAINING: + case Action::SET_TIME_REMAINING: vblog(LOG_INFO, "set time remaining of timers on \"%s\" to \"%s\"", GetMacroName(macro.get()).c_str(), @@ -104,8 +107,7 @@ bool MacroActionTimer::Load(obs_data_t *obj) MacroAction::Load(obj); _macro.Load(obj); _duration.Load(obj); - _actionType = - static_cast(obs_data_get_int(obj, "actionType")); + _actionType = static_cast(obs_data_get_int(obj, "actionType")); return true; } @@ -114,10 +116,25 @@ std::string MacroActionTimer::GetShortDesc() const return _macro.Name(); } +std::shared_ptr MacroActionTimer::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionTimer::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionTimer::ResolveVariablesToFixedValues() +{ + _duration.ResolveVariables(); +} + static inline void populateTypeSelection(QComboBox *list) { - for (auto entry : timerActions) { - list->addItem(obs_module_text(entry.second.c_str())); + for (const auto &[_, name] : timerActions) { + list->addItem(obs_module_text(name.c_str())); } } @@ -173,7 +190,7 @@ void MacroActionTimerEdit::ActionTypeChanged(int value) } auto lock = LockContext(); - _entryData->_actionType = static_cast(value); + _entryData->_actionType = static_cast(value); SetWidgetVisibility(); } @@ -183,7 +200,7 @@ void MacroActionTimerEdit::SetWidgetVisibility() return; } _duration->setVisible(_entryData->_actionType == - TimerAction::SET_TIME_REMAINING); + MacroActionTimer::Action::SET_TIME_REMAINING); adjustSize(); } diff --git a/plugins/base/macro-action-timer.hpp b/plugins/base/macro-action-timer.hpp index 75bee494..8b3fbd7d 100644 --- a/plugins/base/macro-action-timer.hpp +++ b/plugins/base/macro-action-timer.hpp @@ -8,13 +8,6 @@ namespace advss { -enum class TimerAction { - PAUSE, - CONTINUE, - RESET, - SET_TIME_REMAINING, -}; - class MacroActionTimer : public MacroRefAction { public: MacroActionTimer(Macro *m) : MacroAction(m), MacroRefAction(m) {} @@ -24,12 +17,19 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); + Duration _duration; - TimerAction _actionType = TimerAction::PAUSE; + + enum class Action { + PAUSE, + CONTINUE, + RESET, + SET_TIME_REMAINING, + }; + Action _actionType = Action::PAUSE; private: static bool _registered; diff --git a/plugins/base/macro-action-transition.cpp b/plugins/base/macro-action-transition.cpp index 413b6d50..096a33c4 100644 --- a/plugins/base/macro-action-transition.cpp +++ b/plugins/base/macro-action-transition.cpp @@ -209,10 +209,27 @@ std::string MacroActionTransition::GetShortDesc() const return ""; } +std::shared_ptr MacroActionTransition::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionTransition::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionTransition::ResolveVariablesToFixedValues() +{ + _source.ResolveVariables(); + _scene.ResolveVariables(); + _duration.ResolveVariables(); +} + static inline void populateActionSelection(QComboBox *list) { - for (const auto &entry : actionTypes) { - list->addItem(obs_module_text(entry.second.c_str())); + for (const auto &[_, name] : actionTypes) { + list->addItem(obs_module_text(name.c_str())); } } diff --git a/plugins/base/macro-action-transition.hpp b/plugins/base/macro-action-transition.hpp index daca5e4a..a10b96e6 100644 --- a/plugins/base/macro-action-transition.hpp +++ b/plugins/base/macro-action-transition.hpp @@ -19,10 +19,9 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); enum class Type { SCENE, diff --git a/plugins/base/macro-action-virtual-cam.cpp b/plugins/base/macro-action-virtual-cam.cpp index 25efe7e9..ae3a67ee 100644 --- a/plugins/base/macro-action-virtual-cam.cpp +++ b/plugins/base/macro-action-virtual-cam.cpp @@ -12,21 +12,23 @@ bool MacroActionVCam::_registered = MacroActionFactory::Register( {MacroActionVCam::Create, MacroActionVCamEdit::Create, "AdvSceneSwitcher.action.virtualCamera"}); -const static std::map actionTypes = { - {VCamAction::STOP, "AdvSceneSwitcher.action.virtualCamera.type.stop"}, - {VCamAction::START, "AdvSceneSwitcher.action.virtualCamera.type.start"}, +static const std::map actionTypes = { + {MacroActionVCam::Action::STOP, + "AdvSceneSwitcher.action.virtualCamera.type.stop"}, + {MacroActionVCam::Action::START, + "AdvSceneSwitcher.action.virtualCamera.type.start"}, }; bool MacroActionVCam::PerformAction() { #if LIBOBS_API_VER >= MAKE_SEMANTIC_VERSION(27, 0, 0) switch (_action) { - case VCamAction::STOP: + case Action::STOP: if (obs_frontend_virtualcam_active()) { obs_frontend_stop_virtualcam(); } break; - case VCamAction::START: + case Action::START: if (!obs_frontend_virtualcam_active()) { obs_frontend_start_virtualcam(); } @@ -59,14 +61,24 @@ bool MacroActionVCam::Save(obs_data_t *obj) const bool MacroActionVCam::Load(obs_data_t *obj) { MacroAction::Load(obj); - _action = static_cast(obs_data_get_int(obj, "action")); + _action = static_cast(obs_data_get_int(obj, "action")); return true; } +std::shared_ptr MacroActionVCam::Create(Macro *m) +{ + return std::shared_ptr(); +} + +std::shared_ptr MacroActionVCam::Copy() const +{ + return std::shared_ptr(); +} + static inline void populateActionSelection(QComboBox *list) { - for (auto entry : actionTypes) { - list->addItem(obs_module_text(entry.second.c_str())); + for (const auto &[_, name] : actionTypes) { + list->addItem(obs_module_text(name.c_str())); } } @@ -110,7 +122,7 @@ void MacroActionVCamEdit::ActionChanged(int value) } auto lock = LockContext(); - _entryData->_action = static_cast(value); + _entryData->_action = static_cast(value); } } // namespace advss diff --git a/plugins/base/macro-action-virtual-cam.hpp b/plugins/base/macro-action-virtual-cam.hpp index 2bd5be2f..0eade7f1 100644 --- a/plugins/base/macro-action-virtual-cam.hpp +++ b/plugins/base/macro-action-virtual-cam.hpp @@ -6,11 +6,6 @@ namespace advss { -enum class VCamAction { - STOP, - START, -}; - class MacroActionVCam : public MacroAction { public: MacroActionVCam(Macro *m) : MacroAction(m) {} @@ -19,12 +14,14 @@ public: bool Save(obs_data_t *obj) const; bool Load(obs_data_t *obj); std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; - VCamAction _action = VCamAction::STOP; + enum class Action { + STOP, + START, + }; + Action _action = Action::STOP; private: static bool _registered; diff --git a/plugins/base/macro-action-wait.cpp b/plugins/base/macro-action-wait.cpp index 61ede409..41f7f675 100644 --- a/plugins/base/macro-action-wait.cpp +++ b/plugins/base/macro-action-wait.cpp @@ -97,10 +97,26 @@ std::string MacroActionWait::GetShortDesc() const return _duration.ToString() + " - " + _duration2.ToString(); } +std::shared_ptr MacroActionWait::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionWait::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionWait::ResolveVariablesToFixedValues() +{ + _duration.ResolveVariables(); + _duration2.ResolveVariables(); +} + static inline void populateTypeSelection(QComboBox *list) { - for (const auto &entry : waitTypes) { - list->addItem(obs_module_text(entry.second.c_str())); + for (const auto &[_, name] : waitTypes) { + list->addItem(obs_module_text(name.c_str())); } } diff --git a/plugins/base/macro-action-wait.hpp b/plugins/base/macro-action-wait.hpp index c9903457..ba576c3e 100644 --- a/plugins/base/macro-action-wait.hpp +++ b/plugins/base/macro-action-wait.hpp @@ -15,10 +15,10 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); + Duration _duration; Duration _duration2; diff --git a/plugins/base/macro-action-websocket.cpp b/plugins/base/macro-action-websocket.cpp index 3ab470fd..3a26c2a0 100644 --- a/plugins/base/macro-action-websocket.cpp +++ b/plugins/base/macro-action-websocket.cpp @@ -116,6 +116,21 @@ std::string MacroActionWebsocket::GetShortDesc() const return ""; } +std::shared_ptr MacroActionWebsocket::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionWebsocket::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionWebsocket::ResolveVariablesToFixedValues() +{ + _message.ResolveVariables(); +} + static inline void populateAPISelection(QComboBox *list) { for (const auto &[_, name] : apiTypes) { diff --git a/plugins/base/macro-action-websocket.hpp b/plugins/base/macro-action-websocket.hpp index 9f4ff0a3..92bdb66c 100644 --- a/plugins/base/macro-action-websocket.hpp +++ b/plugins/base/macro-action-websocket.hpp @@ -19,10 +19,9 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); enum class API { SCENE_SWITCHER, diff --git a/plugins/base/macro-action-window.cpp b/plugins/base/macro-action-window.cpp index ebcc192b..626e5aa8 100644 --- a/plugins/base/macro-action-window.cpp +++ b/plugins/base/macro-action-window.cpp @@ -136,6 +136,21 @@ std::string MacroActionWindow::GetShortDesc() const return _window; } +std::shared_ptr MacroActionWindow::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionWindow::Copy() const +{ + return std::make_shared(*this); +} + +void MacroActionWindow::ResolveVariablesToFixedValues() +{ + _window.ResolveVariables(); +} + static inline void populateActionSelection(QComboBox *list) { for (const auto &[_, name] : actionTypes) { diff --git a/plugins/base/macro-action-window.hpp b/plugins/base/macro-action-window.hpp index ee8633b7..93185f1d 100644 --- a/plugins/base/macro-action-window.hpp +++ b/plugins/base/macro-action-window.hpp @@ -14,10 +14,9 @@ public: bool Load(obs_data_t *obj); std::string GetShortDesc() const; std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + void ResolveVariablesToFixedValues(); enum class Action { SET_FOCUS_WINDOW, diff --git a/plugins/midi/macro-action-midi.cpp b/plugins/midi/macro-action-midi.cpp index 3d1c4972..dd7e9d4f 100644 --- a/plugins/midi/macro-action-midi.cpp +++ b/plugins/midi/macro-action-midi.cpp @@ -48,6 +48,21 @@ std::string MacroActionMidi::GetShortDesc() const return _device.Name(); } +void MacroActionMidi::ResolveVariablesToFixedValues() +{ + _message.ResolveVariables(); +} + +std::shared_ptr MacroActionMidi::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionMidi::Copy() const +{ + return std::make_shared(*this); +} + MacroActionMidiEdit::MacroActionMidiEdit( QWidget *parent, std::shared_ptr entryData) : QWidget(parent), diff --git a/plugins/midi/macro-action-midi.hpp b/plugins/midi/macro-action-midi.hpp index c04fd97b..dbee1810 100644 --- a/plugins/midi/macro-action-midi.hpp +++ b/plugins/midi/macro-action-midi.hpp @@ -15,11 +15,10 @@ public: bool Save(obs_data_t *obj) const; bool Load(obs_data_t *obj); std::string GetShortDesc() const; + void ResolveVariablesToFixedValues(); std::string GetId() const { return id; }; - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; MidiDevice _device; MidiMessage _message; diff --git a/plugins/midi/midi-helpers.cpp b/plugins/midi/midi-helpers.cpp index b484b3a0..eee6820f 100644 --- a/plugins/midi/midi-helpers.cpp +++ b/plugins/midi/midi-helpers.cpp @@ -91,6 +91,13 @@ std::string MidiMessage::ToString() const " Value: " + std::to_string(_value); } +void MidiMessage::ResolveVariables() +{ + _channel.ResolveVariables(); + _note.ResolveVariables(); + _value.ResolveVariables(); +} + std::string MidiMessage::ToString(const libremidi::message &msg) { return "Type: " + GetMidiType(msg) + diff --git a/plugins/midi/midi-helpers.hpp b/plugins/midi/midi-helpers.hpp index 5adc7b4b..fbb4b2ad 100644 --- a/plugins/midi/midi-helpers.hpp +++ b/plugins/midi/midi-helpers.hpp @@ -38,6 +38,8 @@ public: int Note() const { return _note; } int Value() const { return _value; } + void ResolveVariables(); + private: // Values which don't appear for channel, note, and value will be used // to indicate whether this part of the message is optional and can be diff --git a/plugins/twitch/channel-selection.cpp b/plugins/twitch/channel-selection.cpp index 3430e042..f8f2e413 100644 --- a/plugins/twitch/channel-selection.cpp +++ b/plugins/twitch/channel-selection.cpp @@ -110,8 +110,9 @@ TwitchChannel::GetLiveInfo(const TwitchToken &token) return {}; } - httplib::Params params = { - {"first", "1"}, {"after", ""}, {"user_id", id}}; + httplib::Params params = {{"first", "1"}, + {"after", ""}, + {"user_id", id}}; auto result = SendGetRequest(token, "https://api.twitch.tv", "/helix/streams", params, true); if (result.status != 200) { @@ -151,8 +152,9 @@ std::optional TwitchChannel::GetInfo(const TwitchToken &token) return {}; } - httplib::Params params = { - {"first", "1"}, {"after", ""}, {"broadcaster_id", id}}; + httplib::Params params = {{"first", "1"}, + {"after", ""}, + {"broadcaster_id", id}}; auto result = SendGetRequest(token, "https://api.twitch.tv", "/helix/channels", params, true); if (result.status != 200) { @@ -183,6 +185,11 @@ std::optional TwitchChannel::GetInfo(const TwitchToken &token) return info; } +void TwitchChannel::ResolveVariables() +{ + _name.ResolveVariables(); +} + bool TwitchChannel::IsValid(const std::string &id) const { return id != "invalid" && !id.empty(); diff --git a/plugins/twitch/channel-selection.hpp b/plugins/twitch/channel-selection.hpp index 5c26121d..175b751d 100644 --- a/plugins/twitch/channel-selection.hpp +++ b/plugins/twitch/channel-selection.hpp @@ -48,11 +48,12 @@ struct ChannelInfo { struct TwitchChannel { void Load(obs_data_t *obj); void Save(obs_data_t *obj) const; - StringVariable GetName() const { return _name; }; + StringVariable GetName() const { return _name; } std::string GetUserID(const TwitchToken &token) const; bool IsValid(const std::string &id) const; std::optional GetLiveInfo(const TwitchToken &); std::optional GetInfo(const TwitchToken &); + void ResolveVariables(); private: StringVariable _name = ""; diff --git a/plugins/twitch/macro-action-twitch.cpp b/plugins/twitch/macro-action-twitch.cpp index 624518ae..8d59d017 100644 --- a/plugins/twitch/macro-action-twitch.cpp +++ b/plugins/twitch/macro-action-twitch.cpp @@ -13,6 +13,26 @@ bool MacroActionTwitch::_registered = MacroActionFactory::Register( {MacroActionTwitch::Create, MacroActionTwitchEdit::Create, "AdvSceneSwitcher.action.twitch"}); +void MacroActionTwitch::ResolveVariablesToFixedValues() +{ + _streamTitle.ResolveVariables(); + _markerDescription.ResolveVariables(); + _duration.ResolveVariables(); + _announcementMessage.ResolveVariables(); + _channel.ResolveVariables(); + _chatMessage.ResolveVariables(); +} + +std::shared_ptr MacroActionTwitch::Create(Macro *m) +{ + return std::make_shared(m); +} + +std::shared_ptr MacroActionTwitch::Copy() const +{ + return std::make_shared(*this); +} + std::string MacroActionTwitch::GetShortDesc() const { return GetWeakTwitchTokenName(_token); diff --git a/plugins/twitch/macro-action-twitch.hpp b/plugins/twitch/macro-action-twitch.hpp index 25fa0708..9771bf07 100644 --- a/plugins/twitch/macro-action-twitch.hpp +++ b/plugins/twitch/macro-action-twitch.hpp @@ -15,10 +15,9 @@ namespace advss { class MacroActionTwitch : public MacroAction { public: MacroActionTwitch(Macro *m) : MacroAction(m) {} - static std::shared_ptr Create(Macro *m) - { - return std::make_shared(m); - } + static std::shared_ptr Create(Macro *m); + std::shared_ptr Copy() const; + std::string GetId() const { return id; }; std::string GetShortDesc() const; @@ -151,6 +150,7 @@ public: void LogAction() const; bool Save(obs_data_t *obj) const; bool Load(obs_data_t *obj); + void ResolveVariablesToFixedValues(); void SetAction(Action); Action GetAction() const { return _action; } bool ActionIsSupportedByToken();