Reduce dependencies to macro internals

This commit is contained in:
WarmUpTill 2024-01-01 23:45:50 +01:00 committed by WarmUpTill
parent 43a3ae9726
commit 0317d45ea8
20 changed files with 180 additions and 60 deletions

View File

@ -429,8 +429,8 @@ bool SwitcherData::CheckForMatch(OBSWeakSource &scene,
static void ResetMacros()
{
for (auto &m : GetMacros()) {
m->ResetRunCount();
m->ResetTimers();
ResetMacroRunCount(m.get());
ResetMacroConditionTimers(m.get());
}
}

View File

@ -1,10 +1,11 @@
#include "advanced-scene-switcher.hpp"
#include "switcher-data.hpp"
#include "status-control.hpp"
#include "file-selection.hpp"
#include "filter-combo-box.hpp"
#include "variable.hpp"
#include "macro.hpp"
#include "status-control.hpp"
#include "switcher-data.hpp"
#include "utility.hpp"
#include "variable.hpp"
#include "version.h"
#include <QFileDialog>

View File

@ -1,5 +1,5 @@
#include "macro-action-audio.hpp"
#include "macro.hpp"
#include "macro-helpers.hpp"
#include "utility.hpp"
#include <cmath>
@ -168,7 +168,8 @@ void MacroActionAudio::FadeVolume() const
int step = 0;
auto fadeId = GetFadeIdPtr();
int expectedFadeId = ++(*fadeId);
for (; step < nrSteps && !macro->GetStop() && expectedFadeId == *fadeId;
for (; step < nrSteps && !MacroIsStopped(macro) &&
expectedFadeId == *fadeId;
++step) {
curVol = (volIncrease) ? curVol + volStep : curVol - volStep;
SetVolume(curVol);
@ -203,8 +204,9 @@ void MacroActionAudio::StartFade() const
if (_wait) {
FadeVolume();
} else {
GetMacro()->AddHelperThread(
std::thread(&MacroActionAudio::FadeVolume, this));
AddMacroHelperThread(GetMacro(),
std::thread(&MacroActionAudio::FadeVolume,
this));
}
}

View File

@ -1,5 +1,5 @@
#include "macro-action-random.hpp"
#include "macro.hpp"
#include "macro-helpers.hpp"
#include "utility.hpp"
#include <cstdlib>
@ -15,7 +15,7 @@ bool MacroActionRandom::_registered = MacroActionFactory::Register(
static bool validNextMacro(const std::shared_ptr<Macro> &macro)
{
return macro && !macro->Paused();
return !MacroIsPaused(macro.get());
}
static std::vector<std::shared_ptr<Macro>>
@ -54,12 +54,12 @@ bool MacroActionRandom::PerformAction()
}
if (macros.size() == 1) {
lastRandomMacro = macros[0];
return macros[0]->PerformActions(true);
return RunMacroActions(macros[0].get());
}
srand((unsigned int)time(0));
size_t idx = std::rand() % (macros.size());
lastRandomMacro = macros[idx];
return macros[idx]->PerformActions(true);
return RunMacroActions(macros[idx].get());
}
void MacroActionRandom::LogAction() const

View File

@ -1,7 +1,6 @@
#include "macro-action-scene-switch.hpp"
#include "macro-helpers.hpp"
#include "plugin-state-helpers.hpp"
#include "macro.hpp"
#include "scene-switch-helpers.hpp"
#include "utility.hpp"
@ -36,7 +35,7 @@ static void waitForTransitionChange(OBSWeakSource &transition,
bool stillTransitioning = true;
while (stillTransitioning && !MacroWaitShouldAbort() &&
!macro->GetStop()) {
!MacroIsStopped(macro)) {
GetMacroTransitionCV().wait_for(*lock, time);
float t = obs_transition_get_time(source);
stillTransitioning = t < 1.0f && t > 0.0f;
@ -51,7 +50,7 @@ static void waitForTransitionChangeFixedDuration(
auto time = std::chrono::high_resolution_clock::now() +
std::chrono::milliseconds(duration);
while (!MacroWaitShouldAbort() && !macro->GetStop()) {
while (!MacroWaitShouldAbort() && !MacroIsStopped(macro)) {
if (GetMacroTransitionCV().wait_until(*lock, time) ==
std::cv_status::timeout) {
break;

View File

@ -1,5 +1,5 @@
#include "macro-action-sequence.hpp"
#include "macro.hpp"
#include "macro-helpers.hpp"
#include "utility.hpp"
namespace advss {
@ -15,7 +15,7 @@ static int getNextUnpausedMacroIdx(std::vector<MacroRef> &macros, int startIdx)
{
for (; (int)macros.size() > startIdx; ++startIdx) {
auto macro = macros[startIdx].GetMacro();
if (macro && !macro->Paused()) {
if (!MacroIsPaused(macro.get())) {
return startIdx;
}
}
@ -66,7 +66,7 @@ bool MacroActionSequence::PerformAction()
return true;
}
return macro->PerformActions(true);
return RunMacroActions(macro.get());
}
void MacroActionSequence::LogAction() const
@ -254,11 +254,13 @@ void MacroActionSequenceEdit::UpdateStatusLine()
obs_module_text("AdvSceneSwitcher.action.sequence.status.none");
if (_entryData) {
if (auto macro = _entryData->_lastSequenceMacro.GetMacro()) {
lastMacroName = QString::fromStdString(macro->Name());
lastMacroName = QString::fromStdString(
GetMacroName(macro.get()));
}
auto next = _entryData->GetNextMacro(false).GetMacro();
if (next) {
nextMacroName = QString::fromStdString(next->Name());
nextMacroName = QString::fromStdString(
GetMacroName(next.get()));
}
}

View File

@ -1,6 +1,6 @@
#include "macro-action-timer.hpp"
#include "macro-condition-timer.hpp"
#include "macro.hpp"
#include "macro-helpers.hpp"
#include "utility.hpp"
#include <random>
@ -28,12 +28,13 @@ bool MacroActionTimer::PerformAction()
if (!macro) {
return true;
}
for (auto c : macro->Conditions()) {
if (c->GetId() != "timer") {
auto conditions = *GetMacroConditions(macro.get());
for (auto condition : conditions) {
if (condition->GetId() != id) {
continue;
}
auto timerCondition =
dynamic_cast<MacroConditionTimer *>(c.get());
dynamic_cast<MacroConditionTimer *>(condition.get());
if (!timerCondition) {
continue;
}
@ -68,20 +69,21 @@ void MacroActionTimer::LogAction() const
switch (_actionType) {
case TimerAction::PAUSE:
vblog(LOG_INFO, "paused timers on \"%s\"",
macro->Name().c_str());
GetMacroName(macro.get()).c_str());
break;
case TimerAction::CONTINUE:
vblog(LOG_INFO, "continued timers on \"%s\"",
macro->Name().c_str());
GetMacroName(macro.get()).c_str());
break;
case TimerAction::RESET:
vblog(LOG_INFO, "reset timers on \"%s\"",
macro->Name().c_str());
GetMacroName(macro.get()).c_str());
break;
case TimerAction::SET_TIME_REMAINING:
vblog(LOG_INFO,
"set time remaining of timers on \"%s\" to \"%s\"",
macro->Name().c_str(), _duration.ToString().c_str());
GetMacroName(macro.get()).c_str(),
_duration.ToString().c_str());
break;
default:
break;

View File

@ -1,6 +1,5 @@
#include "macro-action-wait.hpp"
#include "macro-helpers.hpp"
#include "macro.hpp"
#include "sync-helpers.hpp"
#include "utility.hpp"
@ -28,7 +27,7 @@ static std::default_random_engine re(rd());
static void waitHelper(std::unique_lock<std::mutex> *lock, Macro *macro,
std::chrono::high_resolution_clock::time_point &time)
{
while (!MacroWaitShouldAbort() && !macro->GetStop()) {
while (!MacroWaitShouldAbort() && !MacroIsStopped(macro)) {
if (GetMacroWaitCV().wait_until(*lock, time) ==
std::cv_status::timeout) {
break;

View File

@ -1,5 +1,5 @@
#include "macro-condition-audio.hpp"
#include "macro.hpp"
#include "macro-helpers.hpp"
#include "utility.hpp"
namespace advss {
@ -281,9 +281,9 @@ void MacroConditionAudio::SetVolumeLevel(void *data, const float *,
const float peak[MAX_AUDIO_CHANNELS],
const float *)
{
MacroConditionAudio *c = static_cast<MacroConditionAudio *>(data);
auto c = static_cast<MacroConditionAudio *>(data);
const auto macro = c->GetMacro();
if (macro && macro->Paused()) {
if (MacroIsPaused(macro)) {
return;
}

View File

@ -1,5 +1,5 @@
#include "macro-condition-date.hpp"
#include "macro.hpp"
#include "macro-helpers.hpp"
#include "utility.hpp"
#include <QCalendarWidget>
@ -180,7 +180,7 @@ bool MacroConditionDate::CheckCondition()
if (!m) {
return false;
}
auto msSinceLastCheck = m->MsSinceLastCheck();
auto msSinceLastCheck = MillisecondsSinceMacroConditionCheck(m);
if (_dayOfWeekCheck) {
return CheckDayOfWeek(msSinceLastCheck);
}

View File

@ -1,5 +1,5 @@
#include "macro-condition-media.hpp"
#include "macro.hpp"
#include "macro-helpers.hpp"
#include "plugin-state-helpers.hpp"
#include "scene-switch-helpers.hpp"
#include "utility.hpp"
@ -13,20 +13,21 @@ bool MacroConditionMedia::_registered = MacroConditionFactory::Register(
{MacroConditionMedia::Create, MacroConditionMediaEdit::Create,
"AdvSceneSwitcher.condition.media"});
static std::map<MacroConditionMedia::Time, std::string> mediaTimeRestrictions = {
{MacroConditionMedia::Time::TIME_RESTRICTION_NONE,
"AdvSceneSwitcher.mediaTab.timeRestriction.none"},
{MacroConditionMedia::Time::TIME_RESTRICTION_SHORTER,
"AdvSceneSwitcher.mediaTab.timeRestriction.shorter"},
{MacroConditionMedia::Time::TIME_RESTRICTION_LONGER,
"AdvSceneSwitcher.mediaTab.timeRestriction.longer"},
{MacroConditionMedia::Time::TIME_RESTRICTION_REMAINING_SHORTER,
"AdvSceneSwitcher.mediaTab.timeRestriction.remainShorter"},
{MacroConditionMedia::Time::TIME_RESTRICTION_REMAINING_LONGER,
"AdvSceneSwitcher.mediaTab.timeRestriction.remainLonger"},
static const std::map<MacroConditionMedia::Time, std::string>
mediaTimeRestrictions = {
{MacroConditionMedia::Time::TIME_RESTRICTION_NONE,
"AdvSceneSwitcher.mediaTab.timeRestriction.none"},
{MacroConditionMedia::Time::TIME_RESTRICTION_SHORTER,
"AdvSceneSwitcher.mediaTab.timeRestriction.shorter"},
{MacroConditionMedia::Time::TIME_RESTRICTION_LONGER,
"AdvSceneSwitcher.mediaTab.timeRestriction.longer"},
{MacroConditionMedia::Time::TIME_RESTRICTION_REMAINING_SHORTER,
"AdvSceneSwitcher.mediaTab.timeRestriction.remainShorter"},
{MacroConditionMedia::Time::TIME_RESTRICTION_REMAINING_LONGER,
"AdvSceneSwitcher.mediaTab.timeRestriction.remainLonger"},
};
static std::map<MacroConditionMedia::State, std::string> mediaStates = {
static const std::map<MacroConditionMedia::State, std::string> mediaStates = {
{MacroConditionMedia::State::OBS_MEDIA_STATE_NONE,
"AdvSceneSwitcher.mediaTab.states.none"},
{MacroConditionMedia::State::OBS_MEDIA_STATE_PLAYING,
@ -332,7 +333,7 @@ void MacroConditionMedia::MediaStopped(void *data, calldata_t *)
{
MacroConditionMedia *media = static_cast<MacroConditionMedia *>(data);
const auto macro = media->GetMacro();
if (macro && macro->Paused()) {
if (MacroIsPaused(macro)) {
return;
}
media->_stopped = true;
@ -342,7 +343,7 @@ void MacroConditionMedia::MediaEnded(void *data, calldata_t *)
{
MacroConditionMedia *media = static_cast<MacroConditionMedia *>(data);
const auto macro = media->GetMacro();
if (macro && macro->Paused()) {
if (MacroIsPaused(macro)) {
return;
}
media->_ended = true;
@ -352,7 +353,7 @@ void MacroConditionMedia::MediaNext(void *data, calldata_t *)
{
MacroConditionMedia *media = static_cast<MacroConditionMedia *>(data);
const auto macro = media->GetMacro();
if (macro && macro->Paused()) {
if (MacroIsPaused(macro)) {
return;
}
media->_next = true;

View File

@ -1,5 +1,5 @@
#include "macro-condition-slideshow.hpp"
#include "macro.hpp"
#include "macro-helpers.hpp"
#include "utility.hpp"
namespace advss {
@ -121,7 +121,7 @@ void MacroConditionSlideshow::SlideChanged(void *c, calldata_t *data)
{
auto condition = static_cast<MacroConditionSlideshow *>(c);
const auto macro = condition->GetMacro();
if (macro && macro->Paused()) {
if (MacroIsPaused(macro)) {
return;
}

View File

@ -1,4 +1,5 @@
#include "macro-helpers.hpp"
#include "macro.hpp"
#include "plugin-state-helpers.hpp"
namespace advss {
@ -7,6 +8,24 @@ static std::atomic_bool abortMacroWait = {false};
static std::atomic_bool macroSceneSwitched = {false};
static std::atomic_int shutdownConditionCount = {0};
std::optional<std::deque<std::shared_ptr<MacroAction>>>
GetMacroActions(Macro *macro)
{
if (!macro) {
return {};
}
return macro->Actions();
}
std::optional<std::deque<std::shared_ptr<MacroCondition>>>
GetMacroConditions(Macro *macro)
{
if (!macro) {
return {};
}
return macro->Conditions();
}
std::condition_variable &GetMacroWaitCV()
{
static std::condition_variable cv;
@ -56,4 +75,53 @@ bool MacroSwitchedScene()
return macroSceneSwitched;
}
std::string GetMacroName(Macro *macro)
{
return macro ? macro->Name() : "";
}
int64_t MillisecondsSinceMacroConditionCheck(Macro *macro)
{
return macro ? macro->MsSinceLastCheck() : 0;
}
bool MacroIsStopped(Macro *macro)
{
return macro ? macro->GetStop() : true;
}
bool MacroIsPaused(Macro *macro)
{
return macro ? macro->Paused() : true;
}
void AddMacroHelperThread(Macro *macro, std::thread &&newThread)
{
if (!macro) {
return;
}
macro->AddHelperThread(std::move(newThread));
}
bool RunMacroActions(Macro *macro)
{
return macro && macro->PerformActions(true);
}
void ResetMacroConditionTimers(Macro *macro)
{
if (!macro) {
return;
}
macro->ResetTimers();
}
void ResetMacroRunCount(Macro *macro)
{
if (!macro) {
return;
}
macro->ResetRunCount();
}
} // namespace advss

View File

@ -1,21 +1,65 @@
#pragma once
#include <atomic>
#include <condition_variable>
#include <deque>
#include <optional>
#include <string_view>
#include <thread>
struct obs_data;
typedef struct obs_data obs_data_t;
namespace advss {
class Macro;
class MacroAction;
class MacroCondition;
std::deque<std::shared_ptr<Macro>> &GetMacros();
std::optional<std::deque<std::shared_ptr<MacroAction>>>
GetMacroActions(Macro *);
std::optional<std::deque<std::shared_ptr<MacroCondition>>>
GetMacroConditions(Macro *);
constexpr std::string_view GetSceneSwitchActionId()
{
return "scene_switch";
}
constexpr auto macro_func = 10;
std::condition_variable &GetMacroWaitCV();
std::condition_variable &GetMacroTransitionCV();
std::atomic_bool &MacroWaitShouldAbort();
void SetMacroAbortWait(bool);
bool ShutdownCheckIsNecessary();
std::atomic_int &GetShutdownConditionCount();
void SetMacroSwitchedScene(bool value);
bool MacroSwitchedScene();
std::string GetMacroName(Macro *);
int64_t MillisecondsSinceMacroConditionCheck(Macro *);
bool MacroIsStopped(Macro *);
bool MacroIsPaused(Macro *);
void AddMacroHelperThread(Macro *, std::thread &&);
bool CheckMacros();
bool RunMacroActions(Macro *);
bool RunMacros();
void LoadMacros(obs_data_t *obj);
void SaveMacros(obs_data_t *obj);
void InvalidateMacroTempVarValues();
void ResetMacroConditionTimers(Macro *);
void ResetMacroRunCount(Macro *);
} // namespace advss

View File

@ -1,4 +1,5 @@
#include "macro-properties.hpp"
#include "macro.hpp"
#include "obs-module-helper.hpp"
#include "utility.hpp"

View File

@ -1,5 +1,4 @@
#pragma once
#include "macro.hpp"
#include "variable-line-edit.hpp"
#include <QWidget>
@ -12,6 +11,8 @@
namespace advss {
class Macro;
class MacroProperties {
public:
void Save(obs_data_t *obj) const;

View File

@ -1,6 +1,7 @@
#pragma once
#include "macro-action.hpp"
#include "macro-condition.hpp"
#include "macro-helpers.hpp"
#include "macro-ref.hpp"
#include "variable-string.hpp"
#include "temp-variable.hpp"
@ -17,8 +18,6 @@
namespace advss {
constexpr auto macro_func = 10;
class MacroDock;
class Macro {

View File

@ -1,5 +1,5 @@
#pragma once
#include <macro.hpp>
#include <macro-condition-edit.hpp>
#include <variable-spinbox.hpp>
#include <QComboBox>

View File

@ -4,7 +4,7 @@
#include "preview-dialog.hpp"
#include "paramerter-wrappers.hpp"
#include <macro.hpp>
#include <macro-condition-edit.hpp>
#include <file-selection.hpp>
#include <screenshot-helper.hpp>
#include <slider-spinbox.hpp>

View File

@ -1,6 +1,7 @@
#include "macro-list.hpp"
#include "macro.hpp"
#include "macro-helpers.hpp"
#include "macro-selection.hpp"
#include "obs-module-helper.hpp"
#include "utility.hpp"
namespace advss {