diff --git a/src/macro-core/macro-action-random.cpp b/src/macro-core/macro-action-random.cpp index 489b54aa..cb1c2861 100644 --- a/src/macro-core/macro-action-random.cpp +++ b/src/macro-core/macro-action-random.cpp @@ -60,31 +60,14 @@ void MacroActionRandom::LogAction() bool MacroActionRandom::Save(obs_data_t *obj) { MacroAction::Save(obj); - obs_data_array_t *args = obs_data_array_create(); - for (auto &m : _macros) { - obs_data_t *array_obj = obs_data_create(); - m.Save(array_obj); - obs_data_array_push_back(args, array_obj); - obs_data_release(array_obj); - } - obs_data_set_array(obj, "macros", args); - obs_data_array_release(args); + SaveMacroList(obj, _macros); return true; } bool MacroActionRandom::Load(obs_data_t *obj) { MacroAction::Load(obj); - obs_data_array_t *args = obs_data_get_array(obj, "macros"); - size_t count = obs_data_array_count(args); - for (size_t i = 0; i < count; i++) { - obs_data_t *array_obj = obs_data_array_item(args, i); - MacroRef ref; - ref.Load(array_obj); - _macros.push_back(ref); - obs_data_release(array_obj); - } - obs_data_array_release(args); + LoadMacroList(obj, _macros); return true; } diff --git a/src/macro-core/macro-action-sequence.cpp b/src/macro-core/macro-action-sequence.cpp index 02ca09ec..495b0b06 100644 --- a/src/macro-core/macro-action-sequence.cpp +++ b/src/macro-core/macro-action-sequence.cpp @@ -74,15 +74,7 @@ void MacroActionSequence::LogAction() bool MacroActionSequence::Save(obs_data_t *obj) { MacroAction::Save(obj); - obs_data_array_t *args = obs_data_array_create(); - for (auto &m : _macros) { - obs_data_t *array_obj = obs_data_create(); - m.Save(array_obj); - obs_data_array_push_back(args, array_obj); - obs_data_release(array_obj); - } - obs_data_set_array(obj, "macros", args); - obs_data_array_release(args); + SaveMacroList(obj, _macros); obs_data_set_bool(obj, "restart", _restart); return true; } @@ -90,16 +82,7 @@ bool MacroActionSequence::Save(obs_data_t *obj) bool MacroActionSequence::Load(obs_data_t *obj) { MacroAction::Load(obj); - obs_data_array_t *args = obs_data_get_array(obj, "macros"); - size_t count = obs_data_array_count(args); - for (size_t i = 0; i < count; i++) { - obs_data_t *array_obj = obs_data_array_item(args, i); - MacroRef ref; - ref.Load(array_obj); - _macros.push_back(ref); - obs_data_release(array_obj); - } - obs_data_array_release(args); + LoadMacroList(obj, _macros); _restart = obs_data_get_bool(obj, "restart"); return true; } diff --git a/src/macro-core/macro-ref.cpp b/src/macro-core/macro-ref.cpp index 6c35ec1c..9e79d8a2 100644 --- a/src/macro-core/macro-ref.cpp +++ b/src/macro-core/macro-ref.cpp @@ -19,7 +19,8 @@ void MacroRef::UpdateRef(QString newName) _name = newName.toStdString(); UpdateRef(); } -void MacroRef::Save(obs_data_t *obj) + +void MacroRef::Save(obs_data_t *obj) const { if (_ref) { obs_data_set_string(obj, "macro", _ref->Name().c_str()); @@ -40,3 +41,35 @@ Macro *MacroRef::operator->() { return _ref; } + +void SaveMacroList(obs_data_t *obj, const std::vector ¯os, + const std::string &name) +{ + obs_data_array_t *array = obs_data_array_create(); + for (auto &m : macros) { + if (!m.get()) { + continue; + } + obs_data_t *array_obj = obs_data_create(); + m.Save(array_obj); + obs_data_array_push_back(array, array_obj); + obs_data_release(array_obj); + } + obs_data_set_array(obj, name.c_str(), array); + obs_data_array_release(array); +} + +void LoadMacroList(obs_data_t *obj, std::vector ¯os, + const std::string &name) +{ + obs_data_array_t *array = obs_data_get_array(obj, name.c_str()); + size_t count = obs_data_array_count(array); + for (size_t i = 0; i < count; i++) { + obs_data_t *array_obj = obs_data_array_item(array, i); + MacroRef ref; + ref.Load(array_obj); + macros.push_back(ref); + obs_data_release(array_obj); + } + obs_data_array_release(array); +} diff --git a/src/macro-core/macro-ref.hpp b/src/macro-core/macro-ref.hpp index 66ca97c9..e93f354e 100644 --- a/src/macro-core/macro-ref.hpp +++ b/src/macro-core/macro-ref.hpp @@ -12,7 +12,7 @@ public: void UpdateRef(); void UpdateRef(std::string name); void UpdateRef(QString name); - void Save(obs_data_t *obj); + void Save(obs_data_t *obj) const; void Load(obs_data_t *obj); Macro *get(); Macro *operator->(); @@ -21,3 +21,8 @@ private: std::string _name = ""; Macro *_ref = nullptr; }; + +void SaveMacroList(obs_data_t *obj, const std::vector ¯os, + const std::string &name = "macros"); +void LoadMacroList(obs_data_t *obj, std::vector ¯os, + const std::string &name = "macros");