From 283025f1a8ecbfeae3fb968cc47b0105a5fb3b68 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Sat, 22 May 2021 02:07:07 +0200 Subject: [PATCH] Add helper function to convert to new id format --- src/headers/macro-condition-edit.hpp | 2 +- src/macro.cpp | 63 ++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/src/headers/macro-condition-edit.hpp b/src/headers/macro-condition-edit.hpp index f03f902d..775ecf6c 100644 --- a/src/headers/macro-condition-edit.hpp +++ b/src/headers/macro-condition-edit.hpp @@ -26,7 +26,7 @@ public: std::shared_ptr); static auto GetConditionTypes() { return _methods; } static std::string GetConditionName(const std::string &); - static std::string GetIdByName(const QString& name); + static std::string GetIdByName(const QString &name); private: static std::map _methods; diff --git a/src/macro.cpp b/src/macro.cpp index 44430113..6072da1d 100644 --- a/src/macro.cpp +++ b/src/macro.cpp @@ -254,8 +254,71 @@ void SwitcherData::saveMacros(obs_data_t *obj) obs_data_array_release(macroArray); } +// Temporary helper functions to convert old settings format to new one +static std::unordered_map actionIntToActionString = { + {2, "audio"}, {4, "recording"}, {5, "replay_buffer"}, {6, "run"}, + {3, "streaming"}, {0, "scene_switch"}, {1, "wait"}, +}; + +static void replaceActionIds(obs_data_t *obj) +{ + obs_data_array_t *actions = obs_data_get_array(obj, "actions"); + size_t count = obs_data_array_count(actions); + + for (size_t i = 0; i < count; i++) { + obs_data_t *array_obj = obs_data_array_item(actions, i); + auto oldId = obs_data_get_int(array_obj, "id"); + obs_data_set_string(array_obj, "id", + actionIntToActionString[oldId].c_str()); + obs_data_release(array_obj); + } + obs_data_array_release(actions); +} + +static std::unordered_map conditionIntToConditionString = { + {3, "audio"}, {4, "file"}, {10, "idle"}, {5, "media"}, + {11, "plugin_state"}, {9, "process"}, {8, "recording"}, {2, "region"}, + {0, "scene"}, {7, "streaming"}, {6, "video"}, {1, "window"}, +}; + +static void replaceConditionIds(obs_data_t *obj) +{ + obs_data_array_t *conditions = obs_data_get_array(obj, "conditions"); + size_t count = obs_data_array_count(conditions); + + for (size_t i = 0; i < count; i++) { + obs_data_t *array_obj = obs_data_array_item(conditions, i); + auto oldId = obs_data_get_int(array_obj, "id"); + obs_data_set_string( + array_obj, "id", + conditionIntToConditionString[oldId].c_str()); + obs_data_release(array_obj); + } + obs_data_array_release(conditions); +} + +static void convertOldMacroIdsToString(obs_data_t *obj) +{ + obs_data_array_t *macroArray = obs_data_get_array(obj, "macros"); + size_t count = obs_data_array_count(macroArray); + + for (size_t i = 0; i < count; i++) { + obs_data_t *array_obj = obs_data_array_item(macroArray, i); + replaceActionIds(array_obj); + replaceConditionIds(array_obj); + obs_data_release(array_obj); + } + obs_data_array_release(macroArray); +} + void SwitcherData::loadMacros(obs_data_t *obj) { + // TODO: Remove conversion helper in future version + std::string previousVersion = obs_data_get_string(obj, "version"); + if (previousVersion == "2ce0b35921be892c987c7dbb5fc90db38f15f0a6") { + convertOldMacroIdsToString(obj); + } + macros.clear(); obs_data_array_t *macroArray = obs_data_get_array(obj, "macros");