diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index 2ff897fe..cc73a5bd 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -95,6 +95,7 @@ QHash WSRequestHandler::messageM { "TakeSourceScreenshot", WSRequestHandler::HandleTakeSourceScreenshot }, { "GetSourceFilters", WSRequestHandler::HandleGetSourceFilters }, + { "GetSourceFilterInfo", WSRequestHandler::HandleGetSourceFilterInfo }, { "AddFilterToSource", WSRequestHandler::HandleAddFilterToSource }, { "RemoveFilterFromSource", WSRequestHandler::HandleRemoveFilterFromSource }, { "ReorderSourceFilter", WSRequestHandler::HandleReorderSourceFilter }, diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index bee9566b..913fee6d 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -139,6 +139,7 @@ class WSRequestHandler : public QObject { static HandlerResponse HandleTakeSourceScreenshot(WSRequestHandler* req); static HandlerResponse HandleGetSourceFilters(WSRequestHandler* req); + static HandlerResponse HandleGetSourceFilterInfo(WSRequestHandler* req); static HandlerResponse HandleAddFilterToSource(WSRequestHandler* req); static HandlerResponse HandleRemoveFilterFromSource(WSRequestHandler* req); static HandlerResponse HandleReorderSourceFilter(WSRequestHandler* req); diff --git a/src/WSRequestHandler_Sources.cpp b/src/WSRequestHandler_Sources.cpp index 9e5716d0..44eb7337 100644 --- a/src/WSRequestHandler_Sources.cpp +++ b/src/WSRequestHandler_Sources.cpp @@ -1090,6 +1090,44 @@ HandlerResponse WSRequestHandler::HandleGetSourceFilters(WSRequestHandler* req) return req->SendOKResponse(response); } +/** +* List filters applied to a source +* +* @param {String} `sourceName` Source name +* @param {String} `filterName` Source filter name +* +* @return {Boolean} `enabled` Filter status (enabled or not) +* @return {String} `type` Filter type +* @return {String} `name` Filter name +* @return {Object} `settings` Filter settings +* +* @api requests +* @name GetSourceFilterInfo +* @category sources +* @since 4.7.0 +*/ +HandlerResponse WSRequestHandler::HandleGetSourceFilterInfo(WSRequestHandler* req) +{ + if (!req->hasField("sourceName") || !req->hasField("filterName")) { + 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"); + } + + OBSDataAutoRelease response = Utils::GetSourceFilterInfo(filter, true); + return req->SendOKResponse(response); +} + /** * Add a new filter to a source. Available source types along with their settings properties are available from `GetSourceTypesList`. *