Refactor save / load handling

This commit is contained in:
WarmUpTill 2025-10-15 21:03:17 +02:00 committed by WarmUpTill
parent d9f05d3f7b
commit 0c886c8679
5 changed files with 62 additions and 48 deletions

View File

@ -451,16 +451,14 @@ void SwitcherData::LoadSettings(obs_data_t *obj)
}
// New post load steps to be declared during load
postLoadSteps.clear();
ClearPostLoadSteps();
// Needs to be loaded before any entries which might rely on scene group
// selections to be available.
loadSceneGroups(obj);
LoadVariables(obj);
for (const auto &func : loadSteps) {
func(obj);
}
RunLoadSteps(obj);
LoadMacros(obj);
LoadGlobalMacroSettings(obj);
@ -516,9 +514,7 @@ void SwitcherData::SaveSettings(obs_data_t *obj)
SaveUISettings(obj);
SaveVersion(obj, g_GIT_SHA1);
for (const auto &func : saveSteps) {
func(obj);
}
RunSaveSteps(obj);
}
void SwitcherData::SaveGeneralSettings(obs_data_t *obj)

View File

@ -168,31 +168,6 @@ void SwitcherData::SaveVersion(obs_data_t *obj,
obs_data_set_string(obj, "version", currentVersion.c_str());
}
void SwitcherData::RunPostLoadSteps()
{
for (const auto &func : postLoadSteps) {
func();
}
postLoadSteps.clear();
}
void SwitcherData::AddSaveStep(std::function<void(obs_data_t *)> function)
{
std::lock_guard<std::mutex> lock(switcher->m);
saveSteps.emplace_back(function);
}
void SwitcherData::AddLoadStep(std::function<void(obs_data_t *)> function)
{
std::lock_guard<std::mutex> lock(switcher->m);
loadSteps.emplace_back(function);
}
void SwitcherData::AddPostLoadStep(std::function<void()> function)
{
postLoadSteps.emplace_back(function);
}
static void startHotkeyFunc(void *, obs_hotkey_id, obs_hotkey_t *, bool pressed)
{
if (pressed) {

View File

@ -57,10 +57,6 @@ public:
bool AnySceneTransitionStarted();
void SetPreconditions();
void AddSaveStep(std::function<void(obs_data_t *)>);
void AddLoadStep(std::function<void(obs_data_t *)>);
void AddPostLoadStep(std::function<void()>);
void RunPostLoadSteps();
bool CheckForMatch(OBSWeakSource &scene, OBSWeakSource &transition,
int &linger, bool &setPreviousSceneAsMatch,
bool &macroMatch);
@ -95,10 +91,6 @@ public:
bool stop = false;
std::condition_variable cv;
std::vector<std::function<void(obs_data_t *)>> saveSteps;
std::vector<std::function<void(obs_data_t *)>> loadSteps;
std::vector<std::function<void()>> postLoadSteps;
bool firstBoot = true;
bool transitionActive = false;
bool sceneCollectionStop = false;

View File

@ -4,6 +4,10 @@
namespace advss {
static std::mutex initMutex;
static std::mutex postLoadMutex;
static std::mutex mutex;
static std::vector<std::function<void()>> &getPluginInitSteps()
{
static std::vector<std::function<void()>> steps;
@ -40,7 +44,23 @@ static std::vector<std::function<void()>> &getStopSteps()
return steps;
}
static std::mutex mutex;
static std::vector<std::function<void(obs_data_t *)>> &getSaveSteps()
{
static std::vector<std::function<void(obs_data_t *)>> steps;
return steps;
}
static std::vector<std::function<void(obs_data_t *)>> &getLoadSteps()
{
static std::vector<std::function<void(obs_data_t *)>> steps;
return steps;
}
static std::vector<std::function<void()>> &getPostLoadSteps()
{
static std::vector<std::function<void()>> steps;
return steps;
}
void SavePluginSettings(obs_data_t *obj)
{
@ -54,17 +74,20 @@ void LoadPluginSettings(obs_data_t *obj)
void AddSaveStep(std::function<void(obs_data_t *)> step)
{
GetSwitcher()->AddSaveStep(step);
std::lock_guard<std::mutex> lock(mutex);
getSaveSteps().emplace_back(step);
}
void AddLoadStep(std::function<void(obs_data_t *)> step)
{
GetSwitcher()->AddLoadStep(step);
std::lock_guard<std::mutex> lock(mutex);
getLoadSteps().emplace_back(step);
}
void AddPostLoadStep(std::function<void()> step)
{
GetSwitcher()->AddPostLoadStep(step);
std::lock_guard<std::mutex> lock(postLoadMutex);
getPostLoadSteps().emplace_back(step);
}
void AddIntervalResetStep(std::function<void()> step)
@ -73,20 +96,45 @@ void AddIntervalResetStep(std::function<void()> step)
getResetIntervalSteps().emplace_back(step);
}
void RunSaveSteps(obs_data_t *obj)
{
std::lock_guard<std::mutex> lock(mutex);
for (const auto &func : getSaveSteps()) {
func(obj);
}
}
void RunLoadSteps(obs_data_t *obj)
{
std::lock_guard<std::mutex> lock(mutex);
for (const auto &func : getLoadSteps()) {
func(obj);
}
}
void RunPostLoadSteps()
{
GetSwitcher()->RunPostLoadSteps();
std::lock_guard<std::mutex> lock(postLoadMutex);
for (const auto &func : getPostLoadSteps()) {
func();
}
}
void ClearPostLoadSteps()
{
std::lock_guard<std::mutex> lock(postLoadMutex);
getPostLoadSteps().clear();
}
void AddPluginInitStep(std::function<void()> step)
{
std::lock_guard<std::mutex> lock(mutex);
std::lock_guard<std::mutex> lock(initMutex);
getPluginInitSteps().emplace_back(step);
}
void AddPluginPostLoadStep(std::function<void()> step)
{
std::lock_guard<std::mutex> lock(mutex);
std::lock_guard<std::mutex> lock(initMutex);
getPluginPostLoadSteps().emplace_back(step);
}
@ -98,7 +146,7 @@ void AddPluginCleanupStep(std::function<void()> step)
void RunPluginInitSteps()
{
std::lock_guard<std::mutex> lock(mutex);
std::lock_guard<std::mutex> lock(initMutex);
for (const auto &step : getPluginInitSteps()) {
step();
}

View File

@ -12,7 +12,10 @@ EXPORT void AddSaveStep(std::function<void(obs_data_t *)>);
EXPORT void AddLoadStep(std::function<void(obs_data_t *)>);
EXPORT void AddPostLoadStep(std::function<void()>);
EXPORT void AddIntervalResetStep(std::function<void()>);
void RunSaveSteps(obs_data_t *);
void RunLoadSteps(obs_data_t *);
EXPORT void RunPostLoadSteps();
void ClearPostLoadSteps();
EXPORT void AddPluginInitStep(std::function<void()>);
EXPORT void AddPluginPostLoadStep(std::function<void()>);