Decouple plugin init, load, cleanup handling from SwitcherData

This commit is contained in:
WarmUpTill
2024-04-26 23:17:34 +02:00
committed by WarmUpTill
parent ab922f6735
commit 5cba948e02
5 changed files with 55 additions and 40 deletions

View File

@@ -529,9 +529,7 @@ bool SwitcherData::AnySceneTransitionStarted()
extern "C" EXPORT void FreeSceneSwitcher()
{
PlatformCleanup();
for (const auto &cleanupStep : switcher->pluginCleanupSteps) {
cleanupStep();
}
RunPluginCleanupSteps();
delete switcher;
switcher = nullptr;
@@ -761,13 +759,6 @@ QWidget *GetSettingsWindow()
void SetupActionQueues();
extern "C" EXPORT void RunPluginPostLoadSteps()
{
for (const auto &postLoadStep : switcher->pluginPostLoadSteps) {
postLoadStep();
}
}
extern "C" EXPORT void InitSceneSwitcher(obs_module_t *module,
translateFunc translate)
{
@@ -781,9 +772,7 @@ extern "C" EXPORT void InitSceneSwitcher(obs_module_t *module,
SetupDock();
SetupActionQueues();
for (const auto &initStep : switcher->pluginInitSteps) {
initStep();
}
RunPluginInitSteps();
obs_frontend_add_save_callback(SaveSceneSwitcher, nullptr);
obs_frontend_add_event_callback(OBSEvent, switcher);

View File

@@ -187,24 +187,6 @@ void SwitcherData::RunPostLoadSteps()
postLoadSteps.clear();
}
void SwitcherData::AddPluginInitStep(std::function<void()> function)
{
std::lock_guard<std::mutex> lock(switcher->m);
pluginInitSteps.emplace_back(function);
}
void SwitcherData::AddPluginPostLoadStep(std::function<void()> function)
{
std::lock_guard<std::mutex> lock(switcher->m);
pluginPostLoadSteps.emplace_back(function);
}
void SwitcherData::AddPluginCleanupStep(std::function<void()> function)
{
std::lock_guard<std::mutex> lock(switcher->m);
pluginCleanupSteps.emplace_back(function);
}
void SwitcherData::AddSaveStep(std::function<void(obs_data_t *)> function)
{
std::lock_guard<std::mutex> lock(switcher->m);

View File

@@ -65,9 +65,6 @@ public:
void AddPostLoadStep(std::function<void()>);
void AddIntervalResetStep(std::function<void()>, bool lock = true);
void RunPostLoadSteps();
void AddPluginInitStep(std::function<void()>);
void AddPluginPostLoadStep(std::function<void()>);
void AddPluginCleanupStep(std::function<void()>);
bool CheckForMatch(OBSWeakSource &scene, OBSWeakSource &transition,
int &linger, bool &setPreviousSceneAsMatch,
bool &macroMatch);
@@ -106,9 +103,6 @@ public:
std::vector<std::function<void(obs_data_t *)>> loadSteps;
std::vector<std::function<void()>> postLoadSteps;
std::vector<std::function<void()>> resetIntervalSteps;
std::vector<std::function<void()>> pluginInitSteps;
std::vector<std::function<void()>> pluginPostLoadSteps;
std::vector<std::function<void()>> pluginCleanupSteps;
bool firstBoot = true;
bool transitionActive = false;

View File

@@ -3,6 +3,26 @@
namespace advss {
static std::vector<std::function<void()>> &getPluginInitSteps()
{
static std::vector<std::function<void()>> steps;
return steps;
}
static std::vector<std::function<void()>> &getPluginPostLoadSteps()
{
static std::vector<std::function<void()>> steps;
return steps;
}
static std::vector<std::function<void()>> &getPluginCleanupSteps()
{
static std::vector<std::function<void()>> steps;
return steps;
}
static std::mutex mutex;
void SavePluginSettings(obs_data_t *obj)
{
GetSwitcher()->SaveSettings(obj);
@@ -40,17 +60,44 @@ void RunPostLoadSteps()
void AddPluginInitStep(std::function<void()> step)
{
GetSwitcher()->AddPluginInitStep(step);
std::lock_guard<std::mutex> lock(mutex);
getPluginInitSteps().emplace_back(step);
}
void AddPluginPostLoadStep(std::function<void()> step)
{
GetSwitcher()->AddPluginPostLoadStep(step);
std::lock_guard<std::mutex> lock(mutex);
getPluginPostLoadSteps().emplace_back(step);
}
void AddPluginCleanupStep(std::function<void()> step)
{
GetSwitcher()->AddPluginCleanupStep(step);
std::lock_guard<std::mutex> lock(mutex);
getPluginCleanupSteps().emplace_back(step);
}
void RunPluginInitSteps()
{
std::lock_guard<std::mutex> lock(mutex);
for (const auto &step : getPluginInitSteps()) {
step();
}
}
void RunPluginPostLoadSteps()
{
std::lock_guard<std::mutex> lock(mutex);
for (const auto &step : getPluginPostLoadSteps()) {
step();
}
}
void RunPluginCleanupSteps()
{
std::lock_guard<std::mutex> lock(mutex);
for (const auto &step : getPluginCleanupSteps()) {
step();
}
}
void StopPlugin()

View File

@@ -17,6 +17,9 @@ EXPORT void RunPostLoadSteps();
EXPORT void AddPluginInitStep(std::function<void()>);
EXPORT void AddPluginPostLoadStep(std::function<void()>);
EXPORT void AddPluginCleanupStep(std::function<void()>);
void RunPluginInitSteps();
extern "C" EXPORT void RunPluginPostLoadSteps();
void RunPluginCleanupSteps();
EXPORT void StopPlugin();
EXPORT void StartPlugin();