From 497b3b3e0437699d3f3287641f3cd0afd01c8238 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Sat, 9 Mar 2024 09:42:37 +0100 Subject: [PATCH] Clean up macro import and add action queues --- lib/macro/macro-tab.cpp | 26 +++++--------------------- lib/utils/action-queue.cpp | 21 +++++++++++++++++++++ lib/utils/action-queue.hpp | 1 + lib/variables/variable.cpp | 22 ++++++++++++++++++++++ lib/variables/variable.hpp | 1 + 5 files changed, 50 insertions(+), 21 deletions(-) diff --git a/lib/macro/macro-tab.cpp b/lib/macro/macro-tab.cpp index 62848f26..40a8cbd4 100644 --- a/lib/macro/macro-tab.cpp +++ b/lib/macro/macro-tab.cpp @@ -1,4 +1,5 @@ #include "advanced-scene-switcher.hpp" +#include "action-queue.hpp" #include "macro-action-edit.hpp" #include "macro-condition-edit.hpp" #include "macro-export-import-dialog.hpp" @@ -248,6 +249,7 @@ void AdvSceneSwitcher::ExportMacros() } obs_data_set_array(data, "macros", macroArray); SaveVariables(data); + SaveActionQueues(data); obs_data_set_string(data, "version", g_GIT_TAG); auto json = obs_data_get_json(data); QString exportString(json); @@ -370,26 +372,6 @@ bool AdvSceneSwitcher::ResolveMacroImportNameConflict( return true; } -static bool variableWithNameExists(const std::string &name) -{ - return !!GetVariableByName(name); -} - -static void importVariables(obs_data_t *obj) -{ - OBSDataArrayAutoRelease array = obs_data_get_array(obj, "variables"); - size_t count = obs_data_array_count(array); - for (size_t i = 0; i < count; i++) { - OBSDataAutoRelease data = obs_data_array_item(array, i); - auto var = Variable::Create(); - var->Load(data); - if (variableWithNameExists(var->Name())) { - continue; - } - GetVariables().emplace_back(var); - } -} - void AdvSceneSwitcher::ImportMacros() { QString json; @@ -404,7 +386,8 @@ void AdvSceneSwitcher::ImportMacros() ImportMacros(); return; } - importVariables(data); + ImportVariables(data); + ImportQueues(data); auto version = obs_data_get_string(data, "version"); if (strcmp(version, g_GIT_TAG) != 0) { @@ -425,6 +408,7 @@ void AdvSceneSwitcher::ImportMacros() OBSDataAutoRelease array_obj = obs_data_array_item(array, i); auto macro = std::make_shared(); macro->Load(array_obj); + RunPostLoadSteps(); if (macroNameExists(macro->Name()) && !ResolveMacroImportNameConflict(macro)) { diff --git a/lib/utils/action-queue.cpp b/lib/utils/action-queue.cpp index 331a4b89..3fdd7959 100644 --- a/lib/utils/action-queue.cpp +++ b/lib/utils/action-queue.cpp @@ -358,6 +358,27 @@ void LoadActionQueues(obs_data_t *obj) } } +static bool queueWithNameExists(const std::string &name) +{ + return !GetWeakActionQueueByName(name).expired(); +} + +void ImportQueues(obs_data_t *data) +{ + OBSDataArrayAutoRelease array = + obs_data_get_array(data, "actionQueues"); + size_t count = obs_data_array_count(array); + for (size_t i = 0; i < count; i++) { + OBSDataAutoRelease arrayElement = obs_data_array_item(array, i); + auto queue = ActionQueue::Create(); + queue->Load(arrayElement); + if (queueWithNameExists(queue->Name())) { + continue; + } + queues.emplace_back(queue); + } +} + std::weak_ptr GetWeakActionQueueByName(const std::string &name) { for (const auto &queue : queues) { diff --git a/lib/utils/action-queue.hpp b/lib/utils/action-queue.hpp index 2dd7f403..0ef41444 100644 --- a/lib/utils/action-queue.hpp +++ b/lib/utils/action-queue.hpp @@ -98,6 +98,7 @@ signals: void SetupActionQueues(); void SaveActionQueues(obs_data_t *); void LoadActionQueues(obs_data_t *); +void ImportQueues(obs_data_t *); std::weak_ptr GetWeakActionQueueByName(const std::string &name); std::weak_ptr GetWeakActionQueueByQString(const QString &name); std::string GetActionQueueName(const std::weak_ptr &); diff --git a/lib/variables/variable.cpp b/lib/variables/variable.cpp index edcfc330..638a8990 100644 --- a/lib/variables/variable.cpp +++ b/lib/variables/variable.cpp @@ -187,6 +187,28 @@ void LoadVariables(obs_data_t *obj) obs_data_array_release(variablesArray); } +static bool variableWithNameExists(const std::string &name) +{ + return !!GetVariableByName(name); +} + +void ImportVariables(obs_data_t *data) +{ + obs_data_array_t *array = obs_data_get_array(data, "variables"); + size_t count = obs_data_array_count(array); + for (size_t i = 0; i < count; i++) { + obs_data_t *arrayElement = obs_data_array_item(array, i); + auto var = Variable::Create(); + var->Load(arrayElement); + obs_data_release(arrayElement); + if (variableWithNameExists(var->Name())) { + continue; + } + GetVariables().emplace_back(var); + } + obs_data_array_release(array); +} + static void populateSaveActionSelection(QComboBox *list) { list->addItem( diff --git a/lib/variables/variable.hpp b/lib/variables/variable.hpp index 88cf5fe3..a0743bf6 100644 --- a/lib/variables/variable.hpp +++ b/lib/variables/variable.hpp @@ -88,6 +88,7 @@ signals: void SaveVariables(obs_data_t *obj); void LoadVariables(obs_data_t *obj); +void ImportVariables(obs_data_t *obj); std::deque> &GetVariables();