Merge pull request #593 from Palakis/feature/getsceneitemlist-default-scene

requests(GetSceneItemList): fallback to current scene if sceneName is not specified
This commit is contained in:
Stéphane Lepin 2020-10-25 19:34:11 +01:00 committed by GitHub
commit acd3940a7b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,8 +17,9 @@ void AddSourceHelper(void *_data, obs_scene_t *scene) {
/** /**
* Get a list of all scene items in a 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 {String} `sceneName` Name of the requested (or current) scene
* @return {Array<Object>} `sceneItems` Array of scene items * @return {Array<Object>} `sceneItems` Array of scene items
* @return {int} `sceneItems.*.itemId` Unique item id of the source item * @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` * @return {String} `sceneItems.*.sourceKind` ID if the scene item's source. For example `vlc_source` or `image_source`
@ -31,12 +32,15 @@ void AddSourceHelper(void *_data, obs_scene_t *scene) {
* @since unreleased * @since unreleased
*/ */
RpcResponse WSRequestHandler::GetSceneItemList(const RpcRequest& request) { RpcResponse WSRequestHandler::GetSceneItemList(const RpcRequest& request) {
if (!request.hasField("sceneName")) { const char* sceneName = obs_data_get_string(request.parameters(), "sceneName");
return request.failed("missing request parameters");
OBSSourceAutoRelease sceneSource;
if (sceneName && strcmp(sceneName, "") != 0) {
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); OBSScene scene = obs_scene_from_source(sceneSource);
if (!scene) { if (!scene) {
return request.failed("requested scene is invalid or doesnt exist"); return request.failed("requested scene is invalid or doesnt exist");
@ -76,6 +80,7 @@ RpcResponse WSRequestHandler::GetSceneItemList(const RpcRequest& request) {
obs_scene_enum_items(scene, sceneItemEnumProc, sceneItemArray); obs_scene_enum_items(scene, sceneItemEnumProc, sceneItemArray);
OBSDataAutoRelease response = obs_data_create(); OBSDataAutoRelease response = obs_data_create();
obs_data_set_string(response, "sceneName", obs_source_get_name(sceneSource));
obs_data_set_array(response, "sceneItems", sceneItemArray); obs_data_set_array(response, "sceneItems", sceneItemArray);
return request.success(response); return request.success(response);