From 61af0ec9c6fb3cdf6dbf351352dc8d565265d03d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lepin?= Date: Mon, 11 Nov 2019 12:58:36 +0100 Subject: [PATCH] requests(sources): add SetSourceFilterVisibility method --- src/WSRequestHandler.cpp | 1 + src/WSRequestHandler.h | 1 + src/WSRequestHandler_Sources.cpp | 36 ++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index cc73a5bd..8b31c0b7 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -101,6 +101,7 @@ QHash WSRequestHandler::messageM { "ReorderSourceFilter", WSRequestHandler::HandleReorderSourceFilter }, { "MoveSourceFilter", WSRequestHandler::HandleMoveSourceFilter }, { "SetSourceFilterSettings", WSRequestHandler::HandleSetSourceFilterSettings }, + { "SetSourceFilterVisibility", WSRequestHandler::HandleSetSourceFilterVisibility }, { "SetCurrentSceneCollection", WSRequestHandler::HandleSetCurrentSceneCollection }, { "GetCurrentSceneCollection", WSRequestHandler::HandleGetCurrentSceneCollection }, diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index 913fee6d..0e729e55 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -145,6 +145,7 @@ class WSRequestHandler : public QObject { static HandlerResponse HandleReorderSourceFilter(WSRequestHandler* req); static HandlerResponse HandleMoveSourceFilter(WSRequestHandler* req); static HandlerResponse HandleSetSourceFilterSettings(WSRequestHandler* req); + static HandlerResponse HandleSetSourceFilterVisibility(WSRequestHandler* req); static HandlerResponse HandleSetCurrentSceneCollection(WSRequestHandler* req); static HandlerResponse HandleGetCurrentSceneCollection(WSRequestHandler* req); diff --git a/src/WSRequestHandler_Sources.cpp b/src/WSRequestHandler_Sources.cpp index 44eb7337..b84e38db 100644 --- a/src/WSRequestHandler_Sources.cpp +++ b/src/WSRequestHandler_Sources.cpp @@ -1378,6 +1378,42 @@ HandlerResponse WSRequestHandler::HandleSetSourceFilterSettings(WSRequestHandler return req->SendOKResponse(); } +/** +* Change the visibility/enabled state of a filter +* +* @param {String} `sourceName` Source name +* @param {String} `filterName` Source filter name +* @param {String} `filterEnabled` New filter state +* +* @api requests +* @name EnableSourceFilter +* @category sources +* @since 4.7.0 +*/ +HandlerResponse WSRequestHandler::HandleSetSourceFilterVisibility(WSRequestHandler* req) +{ + if (!req->hasField("sourceName") || !req->hasField("filterName") || !req->hasField("filterEnabled")) { + return req->SendErrorResponse("missing request parameters"); + } + + const char* sourceName = obs_data_get_string(req->data, "sourceName"); + OBSSourceAutoRelease source = obs_get_source_by_name(sourceName); + if (!source) { + return req->SendErrorResponse("specified source doesn't exist"); + } + + const char* filterName = obs_data_get_string(req->data, "filterName"); + OBSSourceAutoRelease filter = obs_source_get_filter_by_name(source, "filterName"); + if (!filter) { + return req->SendErrorResponse("specified filter doesn't exist on specified source"); + } + + bool filterEnabled = obs_data_get_string(req->data, "filterEnabled"); + obs_source_set_enabled(filter, filterEnabled); + + return req->SendOKResponse(); +} + /** * Takes a picture snapshot of a source and then can either or both: * - Send it over as a Data URI (base64-encoded data) in the response (by specifying `embedPictureFormat` in the request)