Requests: Add ToggleSceneItemEnabled

Adds a new request called `ToggleSceneItemEnabled` which toggles
the enable state of a scene item and returns the new state.
This commit is contained in:
Lorena García 2023-07-22 11:59:54 +02:00
parent 417725801c
commit afb86dbdcb
3 changed files with 36 additions and 0 deletions

View File

@ -132,6 +132,7 @@ const std::unordered_map<std::string, RequestMethodHandler> RequestHandler::_han
{"SetSceneItemTransform", &RequestHandler::SetSceneItemTransform},
{"GetSceneItemEnabled", &RequestHandler::GetSceneItemEnabled},
{"SetSceneItemEnabled", &RequestHandler::SetSceneItemEnabled},
{"ToggleSceneItemEnabled", &RequestHandler::ToggleSceneItemEnabled},
{"GetSceneItemLocked", &RequestHandler::GetSceneItemLocked},
{"SetSceneItemLocked", &RequestHandler::SetSceneItemLocked},
{"GetSceneItemIndex", &RequestHandler::GetSceneItemIndex},

View File

@ -151,6 +151,7 @@ private:
RequestResult SetSceneItemTransform(const Request &);
RequestResult GetSceneItemEnabled(const Request &);
RequestResult SetSceneItemEnabled(const Request &);
RequestResult ToggleSceneItemEnabled(const Request &);
RequestResult GetSceneItemLocked(const Request &);
RequestResult SetSceneItemLocked(const Request &);
RequestResult GetSceneItemIndex(const Request &);

View File

@ -525,6 +525,40 @@ RequestResult RequestHandler::SetSceneItemEnabled(const Request &request)
return RequestResult::Success();
}
/**
* Toggles the enable state of a scene item.
*
* Scenes and Groups
*
* @requestField sceneName | String | Name of the scene the item is in
* @requestField sceneItemId | Number | Numeric ID of the scene item | >= 0
*
* @responseField sceneItemEnabled | Boolean | Whether the scene item has been enabled. `true` for enabled, `false` for disabled
*
* @requestType ToggleSceneItemEnabled
* @complexity 2
* @rpcVersion -1
* @initialVersion 5.3.0
* @api requests
* @category scene items
*/
RequestResult RequestHandler::ToggleSceneItemEnabled(const Request &request)
{
RequestStatus::RequestStatus statusCode;
std::string comment;
OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment,
OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP);
if (!sceneItem)
return RequestResult::Error(statusCode, comment);
bool sceneItemEnabled = !obs_sceneitem_visible(sceneItem);
obs_sceneitem_set_visible(sceneItem, sceneItemEnabled);
json responseData;
responseData["sceneItemEnabled"] = sceneItemEnabled;
return RequestResult::Success(responseData);
}
/**
* Gets the lock state of a scene item.
*