From f1371034f7aae779f9cd649c902f335381858573 Mon Sep 17 00:00:00 2001 From: Alex Tsernoh Date: Wed, 27 May 2020 00:13:43 +0300 Subject: [PATCH] Request: Add CreateScene --- src/WSRequestHandler.cpp | 1 + src/WSRequestHandler.h | 1 + src/WSRequestHandler_Scenes.cpp | 25 +++++++++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index 27597abb..77411461 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -46,6 +46,7 @@ const QHash WSRequestHandler::messageMap { { "SetCurrentScene", &WSRequestHandler::SetCurrentScene }, { "GetCurrentScene", &WSRequestHandler::GetCurrentScene }, { "GetSceneList", &WSRequestHandler::GetSceneList }, + { "CreateScene", &WSRequestHandler::CreateScene }, { "SetSceneTransitionOverride", &WSRequestHandler::SetSceneTransitionOverride }, { "RemoveSceneTransitionOverride", &WSRequestHandler::RemoveSceneTransitionOverride }, { "GetSceneTransitionOverride", &WSRequestHandler::GetSceneTransitionOverride }, diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index 4c536c3c..2a33c8f4 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -64,6 +64,7 @@ class WSRequestHandler { RpcResponse SetCurrentScene(const RpcRequest&); RpcResponse GetCurrentScene(const RpcRequest&); RpcResponse GetSceneList(const RpcRequest&); + RpcResponse CreateScene(const RpcRequest&); RpcResponse SetSceneTransitionOverride(const RpcRequest&); RpcResponse RemoveSceneTransitionOverride(const RpcRequest&); RpcResponse GetSceneTransitionOverride(const RpcRequest&); diff --git a/src/WSRequestHandler_Scenes.cpp b/src/WSRequestHandler_Scenes.cpp index 3760e5ba..97918147 100644 --- a/src/WSRequestHandler_Scenes.cpp +++ b/src/WSRequestHandler_Scenes.cpp @@ -79,6 +79,31 @@ RpcResponse WSRequestHandler::GetSceneList(const RpcRequest& request) { return request.success(data); } +/** + * Create a new scene scene. + * + * @param {String} `scene-name` Name of the scene to create. + * + * @api requests + * @name CreateScene + * @category scenes + * @since 4.8.0 + */ +RpcResponse WSRequestHandler::CreateScene(const RpcRequest& request) { + if (!request.hasField("sceneName")) { + return request.failed("missing request parameters"); + } + + const char* sceneName = obs_data_get_string(request.parameters(), "sceneName"); + OBSSourceAutoRelease source = obs_get_source_by_name(sceneName); + + if (source) { + return request.failed("scene with this name already exists"); + } + obs_scene_create(sceneName); + return request.success(); +} + /** * Changes the order of scene items in the requested scene. *