From 46f624e3b993f35c9a3429b84cd13f61f18707f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lepin?= Date: Tue, 29 Sep 2020 19:37:28 +0200 Subject: [PATCH 1/4] requests(GetSceneItemList): fallback to current scene if sceneName is not specified --- src/WSRequestHandler_SceneItems.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/WSRequestHandler_SceneItems.cpp b/src/WSRequestHandler_SceneItems.cpp index 10ca8212..01b6a29d 100644 --- a/src/WSRequestHandler_SceneItems.cpp +++ b/src/WSRequestHandler_SceneItems.cpp @@ -31,12 +31,15 @@ void AddSourceHelper(void *_data, obs_scene_t *scene) { * @since unreleased */ RpcResponse WSRequestHandler::GetSceneItemList(const RpcRequest& request) { - if (!request.hasField("sceneName")) { - return request.failed("missing request parameters"); + const char* sceneName = obs_data_get_string(request.parameters(), "sceneName"); + + OBSSourceAutoRelease sceneSource; + if (sceneName) { + sceneSource = obs_get_source_by_name(sceneName); + } else { + sceneSource = obs_frontend_get_current_scene(); } - const char* sceneName = obs_data_get_string(request.parameters(), "sceneName"); - OBSSourceAutoRelease sceneSource = obs_get_source_by_name(sceneName); OBSScene scene = obs_scene_from_source(sceneSource); if (!scene) { return request.failed("requested scene is invalid or doesnt exist"); From 32960afc1b64883f1577f848c8cc138203b184c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lepin?= Date: Tue, 29 Sep 2020 19:45:07 +0200 Subject: [PATCH 2/4] requests(GetSceneItemList): update docs --- src/WSRequestHandler_SceneItems.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WSRequestHandler_SceneItems.cpp b/src/WSRequestHandler_SceneItems.cpp index 01b6a29d..d7c08899 100644 --- a/src/WSRequestHandler_SceneItems.cpp +++ b/src/WSRequestHandler_SceneItems.cpp @@ -17,7 +17,7 @@ void AddSourceHelper(void *_data, obs_scene_t *scene) { /** * Get a list of all scene items in a scene. * -* @param {String} `sceneName` Name of the scene to get the list of scene items from. +* @param {String (optional)} `sceneName` Name of the scene to get the list of scene items from. Defaults to the current scene if not specified. * * @return {Array} `sceneItems` Array of scene items * @return {int} `sceneItems.*.itemId` Unique item id of the source item From 4491da0350f5567193d2738717e10db2fa3282c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lepin?= Date: Tue, 29 Sep 2020 23:48:17 +0200 Subject: [PATCH 3/4] requests(GetSceneItemList): fix empty/non-present parameter detection --- src/WSRequestHandler_SceneItems.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WSRequestHandler_SceneItems.cpp b/src/WSRequestHandler_SceneItems.cpp index d7c08899..1d4393f6 100644 --- a/src/WSRequestHandler_SceneItems.cpp +++ b/src/WSRequestHandler_SceneItems.cpp @@ -34,7 +34,7 @@ RpcResponse WSRequestHandler::GetSceneItemList(const RpcRequest& request) { const char* sceneName = obs_data_get_string(request.parameters(), "sceneName"); OBSSourceAutoRelease sceneSource; - if (sceneName) { + if (sceneName && strcmp(sceneName, "") != 0) { sceneSource = obs_get_source_by_name(sceneName); } else { sceneSource = obs_frontend_get_current_scene(); From 4a4c97aac46f0232488c8f8766f9f13396b13101 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lepin?= Date: Tue, 29 Sep 2020 23:48:35 +0200 Subject: [PATCH 4/4] request(GetSceneItemList): provide scene name in response --- src/WSRequestHandler_SceneItems.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/WSRequestHandler_SceneItems.cpp b/src/WSRequestHandler_SceneItems.cpp index 1d4393f6..2d09780d 100644 --- a/src/WSRequestHandler_SceneItems.cpp +++ b/src/WSRequestHandler_SceneItems.cpp @@ -19,6 +19,7 @@ void AddSourceHelper(void *_data, obs_scene_t *scene) { * * @param {String (optional)} `sceneName` Name of the scene to get the list of scene items from. Defaults to the current scene if not specified. * +* @return {String} `sceneName` Name of the requested (or current) scene * @return {Array} `sceneItems` Array of scene items * @return {int} `sceneItems.*.itemId` Unique item id of the source item * @return {String} `sceneItems.*.sourceKind` ID if the scene item's source. For example `vlc_source` or `image_source` @@ -79,6 +80,7 @@ RpcResponse WSRequestHandler::GetSceneItemList(const RpcRequest& request) { obs_scene_enum_items(scene, sceneItemEnumProc, sceneItemArray); OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "sceneName", obs_source_get_name(sceneSource)); obs_data_set_array(response, "sceneItems", sceneItemArray); return request.success(response);