From a527f343cdbed9c17546cbffc96945e3dc4fe140 Mon Sep 17 00:00:00 2001 From: Mikhail Swift Date: Sun, 26 Feb 2017 18:01:09 -0500 Subject: [PATCH] Moved some repeated code to utils, added source_name to other commands --- Utils.cpp | 12 ++++++++++++ Utils.h | 1 + WSRequestHandler.cpp | 35 ++++++++++++++++++++--------------- 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/Utils.cpp b/Utils.cpp index 201f7d85..26272e08 100644 --- a/Utils.cpp +++ b/Utils.cpp @@ -147,6 +147,18 @@ obs_source_t* Utils::GetTransitionFromName(const char *search_name) { return found_transition; } +obs_source_t* Utils::GetSceneFromNameOrCurrent(const char *scene_name) { + obs_source_t* scene; + if (!scene_name || !strlen(scene_name)) { + scene = obs_frontend_get_current_scene(); + } + else { + scene = obs_get_source_by_name(scene_name); + } + + return scene; +} + obs_data_array_t* Utils::GetScenes() { obs_frontend_source_list sceneList = {}; obs_frontend_get_scenes(&sceneList); diff --git a/Utils.h b/Utils.h index 54f38df4..dcaa7033 100644 --- a/Utils.h +++ b/Utils.h @@ -29,6 +29,7 @@ class Utils static obs_data_t* GetSceneItemData(obs_scene_item *item); static obs_sceneitem_t* GetSceneItemFromName(obs_source_t *source, const char *name); static obs_source_t* GetTransitionFromName(const char *search_name); + static obs_source_t* GetSceneFromNameOrCurrent(const char *scene_name); static obs_data_array_t* GetScenes(); static obs_data_t* GetSceneData(obs_source *source); diff --git a/WSRequestHandler.cpp b/WSRequestHandler.cpp index b7d6c27d..76787087 100644 --- a/WSRequestHandler.cpp +++ b/WSRequestHandler.cpp @@ -262,15 +262,8 @@ void WSRequestHandler::HandleSetSourceRender(WSRequestHandler *owner) return; } - obs_source_t* scene; const char *sceneName = obs_data_get_string(owner->_requestData, "scene-name"); - if (!sceneName || !strlen(sceneName)) { - scene = obs_frontend_get_current_scene(); - } - else { - scene = obs_get_source_by_name(sceneName); - } - + obs_source_t *scene = Utils::GetSceneFromNameOrCurrent(sceneName); if (scene == NULL) { owner->SendErrorResponse("requested scene doesn't exist"); return; @@ -492,12 +485,18 @@ void WSRequestHandler::HandleSetSceneItemPosition(WSRequestHandler *owner) return; } + const char *scene_name = obs_data_get_string(owner->_requestData, "scene-name"); + obs_source_t *scene = Utils::GetSceneFromNameOrCurrent(scene_name); + if (scene == NULL) { + owner->SendErrorResponse("requested scene could not be found"); + return; + } + vec2 item_position = {0}; item_position.x = obs_data_get_double(owner->_requestData, "x"); item_position.y = obs_data_get_double(owner->_requestData, "y"); - obs_source_t* current_scene = obs_frontend_get_current_scene(); - obs_sceneitem_t *scene_item = Utils::GetSceneItemFromName(current_scene, item_name); + obs_sceneitem_t *scene_item = Utils::GetSceneItemFromName(scene, item_name); if (scene_item) { @@ -511,7 +510,7 @@ void WSRequestHandler::HandleSetSceneItemPosition(WSRequestHandler *owner) owner->SendErrorResponse("specified scene item doesn't exist"); } - obs_source_release(current_scene); + obs_source_release(scene); } void WSRequestHandler::HandleSetSceneItemTransform(WSRequestHandler *owner) @@ -523,14 +522,20 @@ void WSRequestHandler::HandleSetSceneItemTransform(WSRequestHandler *owner) return; } + const char *scene_name = obs_data_get_string(owner->_requestData, "scene-name"); + obs_source_t* scene = Utils::GetSceneFromNameOrCurrent(scene_name); + if (scene == NULL) { + owner->SendErrorResponse("requested scene doesn't exist"); + return; + } + vec2 scale; scale.x = obs_data_get_double(owner->_requestData, "x-scale"); scale.y = obs_data_get_double(owner->_requestData, "y-scale"); float rotation = obs_data_get_double(owner->_requestData, "rotation"); - obs_source_t* current_scene = obs_frontend_get_current_scene(); - obs_sceneitem_t *scene_item = Utils::GetSceneItemFromName(current_scene, item_name); + obs_sceneitem_t *scene_item = Utils::GetSceneItemFromName(scene, item_name); if (scene_item) { @@ -545,7 +550,7 @@ void WSRequestHandler::HandleSetSceneItemTransform(WSRequestHandler *owner) owner->SendErrorResponse("specified scene item doesn't exist"); } - obs_source_release(current_scene); + obs_source_release(scene); } void WSRequestHandler::HandleSetCurrentSceneCollection(WSRequestHandler *owner) @@ -629,4 +634,4 @@ void WSRequestHandler::HandleListProfiles(WSRequestHandler *owner) void WSRequestHandler::ErrNotImplemented(WSRequestHandler *owner) { owner->SendErrorResponse("not implemented"); -} +} \ No newline at end of file