From 3e8d6e103a9d59ba905a28c8e0ebd8a03f46dc22 Mon Sep 17 00:00:00 2001 From: WarmUpTill <19472752+WarmUpTill@users.noreply.github.com> Date: Thu, 7 Aug 2025 21:09:04 +0200 Subject: [PATCH] Add temp var to Media condition indicating which source matched --- data/locale/en-US.ini | 2 ++ plugins/base/macro-condition-media.cpp | 20 ++++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index f27b2033..4a6f2032 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -2125,6 +2125,8 @@ AdvSceneSwitcher.tempVar.usb.serialNumber="Serial Number" AdvSceneSwitcher.tempVar.transform.setting="Setting value" AdvSceneSwitcher.tempVar.transform.settings="Settings string" +AdvSceneSwitcher.tempVar.media.source="Source" +AdvSceneSwitcher.tempVar.media.source.description="The name of the source which matched.\nIf multiple sources matched the last one is returned." AdvSceneSwitcher.tempVar.media.state="State" AdvSceneSwitcher.tempVar.media.state.description="The current media state represented as an integer value:\n0 being 'None'\n1 being 'Playing'\n2 being 'Opening'\n3 being 'Buffering'\n4 being 'Paused'\n5 being 'Stopped'\n6 being 'Ended'\n7 being 'Error'" AdvSceneSwitcher.tempVar.media.time="Current time" diff --git a/plugins/base/macro-condition-media.cpp b/plugins/base/macro-condition-media.cpp index a473e082..a6adbc62 100644 --- a/plugins/base/macro-condition-media.cpp +++ b/plugins/base/macro-condition-media.cpp @@ -185,6 +185,12 @@ void MacroConditionMedia::SetupTempVars() MacroCondition::SetupTempVars(); if (_sourceType != SourceType::SOURCE) { + AddTempvar( + "source", + obs_module_text( + "AdvSceneSwitcher.tempVar.media.source"), + obs_module_text( + "AdvSceneSwitcher.tempVar.media.source.description")); return; } @@ -351,13 +357,23 @@ bool MacroConditionMedia::CheckCondition() switch (_sourceType) { case SourceType::ANY: for (auto &source : _sourceGroup) { - match = match || source.CheckCondition(); + const bool matched = source.CheckCondition(); + if (matched) { + SetTempVarValue("source", + source.GetSource().ToString()); + } + match = match || matched; } break; case SourceType::ALL: { bool res = true; for (auto &source : _sourceGroup) { - res = res && source.CheckCondition(); + const bool matched = source.CheckCondition(); + if (matched) { + SetTempVarValue("source", + source.GetSource().ToString()); + } + res = res && matched; } match = res; break;