diff --git a/plugins/base/macro-condition-websocket.cpp b/plugins/base/macro-condition-websocket.cpp index af8d16a6..e66d1b7f 100644 --- a/plugins/base/macro-condition-websocket.cpp +++ b/plugins/base/macro-condition-websocket.cpp @@ -1,5 +1,6 @@ #include "macro-condition-websocket.hpp" #include "layout-helpers.hpp" +#include "macro-helpers.hpp" #include @@ -32,6 +33,14 @@ bool MacroConditionWebsocket::CheckCondition() return false; } + const bool macroWasPausedSinceLastCheck = + MacroWasPausedSince(GetMacro(), _lastCheck); + _lastCheck = std::chrono::high_resolution_clock::now(); + if (macroWasPausedSinceLastCheck) { + _messageBuffer->Clear(); + return false; + } + while (!_messageBuffer->Empty()) { auto message = _messageBuffer->ConsumeMessage(); if (!message) { diff --git a/plugins/base/macro-condition-websocket.hpp b/plugins/base/macro-condition-websocket.hpp index bc2eba78..c5323515 100644 --- a/plugins/base/macro-condition-websocket.hpp +++ b/plugins/base/macro-condition-websocket.hpp @@ -41,6 +41,8 @@ private: std::weak_ptr _connection; WebsocketMessageBuffer _messageBuffer; + std::chrono::high_resolution_clock::time_point _lastCheck{}; + static bool _registered; static const std::string id; }; diff --git a/plugins/midi/macro-condition-midi.cpp b/plugins/midi/macro-condition-midi.cpp index b88e9ef2..3815b105 100644 --- a/plugins/midi/macro-condition-midi.cpp +++ b/plugins/midi/macro-condition-midi.cpp @@ -1,5 +1,6 @@ #include "macro-condition-midi.hpp" #include "layout-helpers.hpp" +#include "macro-helpers.hpp" #include "ui-helpers.hpp" namespace advss { @@ -17,6 +18,14 @@ bool MacroConditionMidi::CheckCondition() return false; } + const bool macroWasPausedSinceLastCheck = + MacroWasPausedSince(GetMacro(), _lastCheck); + _lastCheck = std::chrono::high_resolution_clock::now(); + if (macroWasPausedSinceLastCheck) { + _messageBuffer->Clear(); + return false; + } + while (!_messageBuffer->Empty()) { auto message = _messageBuffer->ConsumeMessage(); if (!message) { diff --git a/plugins/midi/macro-condition-midi.hpp b/plugins/midi/macro-condition-midi.hpp index c70f6bce..5237ad15 100644 --- a/plugins/midi/macro-condition-midi.hpp +++ b/plugins/midi/macro-condition-midi.hpp @@ -30,6 +30,7 @@ private: MidiDevice _device; MidiMessageBuffer _messageBuffer; + std::chrono::high_resolution_clock::time_point _lastCheck{}; static bool _registered; static const std::string id; }; diff --git a/plugins/twitch/macro-condition-twitch.cpp b/plugins/twitch/macro-condition-twitch.cpp index dc914231..1297baaf 100644 --- a/plugins/twitch/macro-condition-twitch.cpp +++ b/plugins/twitch/macro-condition-twitch.cpp @@ -2,6 +2,7 @@ #include "twitch-helpers.hpp" #include +#include #include #include @@ -363,6 +364,9 @@ bool MacroConditionTwitch::CheckChatMessages(TwitchToken &token) if (!_chatConnection) { _chatConnection = TwitchChatConnection::GetChatConnection( token, _channel); + if (!_chatConnection) { + return false; + } _chatBuffer = _chatConnection->RegisterForMessages(); return false; } @@ -435,7 +439,7 @@ void MacroConditionTwitch::SetTempVarValues(const ChannelInfo &info) info.is_branded_content ? "true" : "false"); } -bool advss::MacroConditionTwitch::EventSubscriptionIsSetup( +bool MacroConditionTwitch::EventSubscriptionIsSetup( const std::shared_ptr &eventSub) { if (!eventSub) { @@ -449,6 +453,22 @@ bool advss::MacroConditionTwitch::EventSubscriptionIsSetup( return true; } +void MacroConditionTwitch::HandleMacroPause() +{ + const bool macroWasPausedSinceLastCheck = + MacroWasPausedSince(GetMacro(), _lastCheck); + _lastCheck = std::chrono::high_resolution_clock::now(); + + if (macroWasPausedSinceLastCheck) { + if (_eventBuffer) { + _eventBuffer->Clear(); + } + if (_chatBuffer) { + _chatBuffer->Clear(); + } + } +} + bool MacroConditionTwitch::CheckCondition() { SetVariableValue(""); @@ -458,11 +478,12 @@ bool MacroConditionTwitch::CheckCondition() } auto eventSub = token->GetEventSub(); - if (IsUsingEventSubCondition() && !EventSubscriptionIsSetup(eventSub)) { return false; } + HandleMacroPause(); + switch (_condition) { case Condition::STREAM_ONLINE_EVENT: case Condition::STREAM_OFFLINE_EVENT: diff --git a/plugins/twitch/macro-condition-twitch.hpp b/plugins/twitch/macro-condition-twitch.hpp index b51a846b..c3f1dee3 100644 --- a/plugins/twitch/macro-condition-twitch.hpp +++ b/plugins/twitch/macro-condition-twitch.hpp @@ -119,6 +119,8 @@ private: const char *mainUserIdFieldName = "broadcaster_user_id", obs_data_t *extraConditions = nullptr); + void HandleMacroPause(); + void SetupTempVars(); void SetTempVarValues(const ChannelLiveInfo &); void SetTempVarValues(const ChannelInfo &); @@ -134,6 +136,8 @@ private: ChatMessageBuffer _chatBuffer; std::shared_ptr _chatConnection; + std::chrono::high_resolution_clock::time_point _lastCheck{}; + static bool _registered; static const std::string id; };