Add helper functions to save / load list of macro refs

This commit is contained in:
WarmUpTill 2022-08-21 04:09:31 +02:00 committed by WarmUpTill
parent face0f7f3c
commit 6f7bcc34af
4 changed files with 44 additions and 40 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<MacroRef> &macros,
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<MacroRef> &macros,
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);
}

View File

@ -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<MacroRef> &macros,
const std::string &name = "macros");
void LoadMacroList(obs_data_t *obj, std::vector<MacroRef> &macros,
const std::string &name = "macros");