#include "plugin-state-helpers.hpp" #include "switcher-data.hpp" namespace advss { static std::vector> &getPluginInitSteps() { static std::vector> steps; return steps; } static std::vector> &getPluginPostLoadSteps() { static std::vector> steps; return steps; } static std::vector> &getPluginCleanupSteps() { static std::vector> steps; return steps; } static std::vector> &getResetIntervalSteps() { static std::vector> steps; return steps; } static std::vector> &getStartSteps() { static std::vector> steps; return steps; } static std::vector> &getStopSteps() { static std::vector> steps; return steps; } static std::mutex mutex; void SavePluginSettings(obs_data_t *obj) { GetSwitcher()->SaveSettings(obj); } void LoadPluginSettings(obs_data_t *obj) { GetSwitcher()->LoadSettings(obj); } void AddSaveStep(std::function step) { GetSwitcher()->AddSaveStep(step); } void AddLoadStep(std::function step) { GetSwitcher()->AddLoadStep(step); } void AddPostLoadStep(std::function step) { GetSwitcher()->AddPostLoadStep(step); } void AddIntervalResetStep(std::function step) { std::lock_guard lock(mutex); getResetIntervalSteps().emplace_back(step); } void RunPostLoadSteps() { GetSwitcher()->RunPostLoadSteps(); } void AddPluginInitStep(std::function step) { std::lock_guard lock(mutex); getPluginInitSteps().emplace_back(step); } void AddPluginPostLoadStep(std::function step) { std::lock_guard lock(mutex); getPluginPostLoadSteps().emplace_back(step); } void AddPluginCleanupStep(std::function step) { std::lock_guard lock(mutex); getPluginCleanupSteps().emplace_back(step); } void RunPluginInitSteps() { std::lock_guard lock(mutex); for (const auto &step : getPluginInitSteps()) { step(); } } void RunPluginPostLoadSteps() { std::lock_guard lock(mutex); for (const auto &step : getPluginPostLoadSteps()) { step(); } } void RunPluginCleanupSteps() { std::lock_guard lock(mutex); for (const auto &step : getPluginCleanupSteps()) { step(); } } void RunIntervalResetSteps() { std::lock_guard lock(mutex); for (const auto &step : getResetIntervalSteps()) { step(); } } void AddStartStep(std::function step) { std::lock_guard lock(mutex); getStartSteps().emplace_back(step); } void AddStopStep(std::function step) { std::lock_guard lock(mutex); getStopSteps().emplace_back(step); } void RunStartSteps() { std::lock_guard lock(mutex); for (const auto &step : getStartSteps()) { step(); } } void RunStopSteps() { std::lock_guard lock(mutex); for (const auto &step : getStopSteps()) { step(); } } void StopPlugin() { GetSwitcher()->Stop(); } void StartPlugin() { GetSwitcher()->Start(); } bool PluginIsRunning() { return GetSwitcher() && GetSwitcher()->th && GetSwitcher()->th->isRunning(); } int GetIntervalValue() { return GetSwitcher()->interval; } void SetPluginNoMatchBehavior(NoMatchBehavior behavior) { GetSwitcher()->switchIfNotMatching = behavior; } NoMatchBehavior GetPluginNoMatchBehavior() { return GetSwitcher()->switchIfNotMatching; } void SetNoMatchScene(const OBSWeakSource &scene) { GetSwitcher()->nonMatchingScene = scene; } std::string ForegroundWindowTitle() { return GetSwitcher()->currentTitle; } std::string PreviousForegroundWindowTitle() { return GetSwitcher()->lastTitle; } bool SettingsWindowIsOpened() { return GetSwitcher()->settingsWindowOpened; } bool HighlightUIElementsEnabled() { return GetSwitcher() && !GetSwitcher()->disableHints; } bool OBSIsShuttingDown() { return GetSwitcher() && GetSwitcher()->obsIsShuttingDown; } bool InitialLoadIsComplete() { return GetSwitcher()->startupLoadDone; } bool IsFirstInterval() { return GetSwitcher()->firstInterval; } bool IsFirstIntervalAfterStop() { return GetSwitcher()->firstIntervalAfterStop; } } // namespace advss