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.
*
* @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 {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`
@ -31,12 +32,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 && 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);
if (!scene) {
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);
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);