From 0db1abcd2ecc88cb81004a0fef7530011c611000 Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Fri, 5 Mar 2021 17:00:54 +0100 Subject: [PATCH] Requests: Add GetSourceActive --- src/WSRequestHandler.cpp | 1 + src/WSRequestHandler.h | 1 + src/WSRequestHandler_Sources.cpp | 34 ++++++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index 0eec2529..3f36b534 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -124,6 +124,7 @@ const QHash WSRequestHandler::messageMap{ { "GetMute", &WSRequestHandler::GetMute }, { "SetMute", &WSRequestHandler::SetMute }, { "ToggleMute", &WSRequestHandler::ToggleMute }, + { "GetSourceActive", &WSRequestHandler::GetSourceActive }, { "GetAudioActive", &WSRequestHandler::GetAudioActive }, { "SetSourceName", &WSRequestHandler::SetSourceName }, { "SetSyncOffset", &WSRequestHandler::SetSyncOffset }, diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index 82aa5ee3..1c697fc7 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -141,6 +141,7 @@ class WSRequestHandler { RpcResponse GetMute(const RpcRequest&); RpcResponse SetMute(const RpcRequest&); RpcResponse ToggleMute(const RpcRequest&); + RpcResponse GetSourceActive(const RpcRequest&); RpcResponse GetAudioActive(const RpcRequest&); RpcResponse SetSourceName(const RpcRequest&); RpcResponse SetSyncOffset(const RpcRequest&); diff --git a/src/WSRequestHandler_Sources.cpp b/src/WSRequestHandler_Sources.cpp index 35f6e56b..6c65944f 100644 --- a/src/WSRequestHandler_Sources.cpp +++ b/src/WSRequestHandler_Sources.cpp @@ -414,6 +414,40 @@ RpcResponse WSRequestHandler::ToggleMute(const RpcRequest& request) return request.success(); } +/** +* Get the source's active status of a specified source (if it is showing in the final mix). +* +* @param {String} `sourceName` Source name. +* +* @return {boolean} `sourceActive` Source active status of the source. +* +* @api requests +* @name GetSourceActive +* @category sources +* @since unreleased +*/ +RpcResponse WSRequestHandler::GetSourceActive(const RpcRequest& request) +{ + if (!request.hasField("sourceName")) { + return request.failed("missing request parameters"); + } + + QString sourceName = obs_data_get_string(request.parameters(), "sourceName"); + if (sourceName.isEmpty()) { + return request.failed("invalid request parameters"); + } + + OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); + if (!source) { + return request.failed("specified source doesn't exist"); + } + + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_bool(response, "sourceActive", obs_source_active(source)); + + return request.success(response); +} + /** * Get the audio's active status of a specified source. *