Added GetPreviewScene and modified GetStudioModeStatus

This commit is contained in:
Palakis 2017-04-19 15:21:21 +02:00
parent 85fa6b60e2
commit 5748e163f8
5 changed files with 42 additions and 11 deletions

View File

@ -348,12 +348,19 @@ __Response__ : OK if source exists in the current scene, error otherwise.
--- ---
#### "GetStudioModeStatus" #### "GetStudioModeStatus"
List OBS' scenes. Tells if Studio Mode is currently enabled or disabled.
__Request fields__ : none __Request fields__ : none
__Response__ : always OK, with these additional fields : __Response__ : always OK, with these additional fields :
- **"studio-mode"** (bool) : true if OBS is in Studio Mode, false otherwise. - **"studio-mode"** (bool) : true if OBS is in Studio Mode, false otherwise.
- **"preview-scene"** (string, optional) : name of the current Previewed scene (present only if Studio Mode is enabled).
---
#### "GetPreviewScene"
Studio Mode only. Gets the name of the currently Previewed scene, along with a list of its sources.
__Request fields__ : none
__Response__ : OK if Studio Mode is enabled, with the same fields as [`GetCurrentScene`](#getcurrentscene), error otherwise.
--- ---

View File

@ -299,7 +299,7 @@ void Utils::TogglePreviewMode()
GetPreviewModeButtonControl()->click(); GetPreviewModeButtonControl()->click();
} }
const char* Utils::GetPreviewSceneName() obs_scene_t* Utils::GetPreviewScene()
{ {
if (IsPreviewModeActive()) if (IsPreviewModeActive())
{ {
@ -309,9 +309,10 @@ const char* Utils::GetPreviewSceneName()
blog(LOG_INFO, "GetPreviewSceneName: %d selected item(s)", selected.count()); blog(LOG_INFO, "GetPreviewSceneName: %d selected item(s)", selected.count());
// Qt::UserRole == QtUserRole::OBSRef // Qt::UserRole == QtUserRole::OBSRef
obs_source_t* source = obs_scene_get_source(Utils::SceneListItemToScene(selected.first())); obs_scene_t* scene = Utils::SceneListItemToScene(selected.first());
return obs_source_get_name(source); obs_scene_addref(scene);
return scene;
} }
return nullptr; return nullptr;

View File

@ -55,7 +55,7 @@ class Utils
static void DisablePreviewMode(); static void DisablePreviewMode();
static void TogglePreviewMode(); static void TogglePreviewMode();
static const char* GetPreviewSceneName(); static obs_scene_t* GetPreviewScene();
static void SetPreviewScene(const char* name); static void SetPreviewScene(const char* name);
static void TransitionToProgram(); static void TransitionToProgram();

View File

@ -72,6 +72,7 @@ WSRequestHandler::WSRequestHandler(QWebSocket *client) :
messageMap["ListProfiles"] = WSRequestHandler::HandleListProfiles; messageMap["ListProfiles"] = WSRequestHandler::HandleListProfiles;
messageMap["GetStudioModeStatus"] = WSRequestHandler::HandleGetStudioModeStatus; messageMap["GetStudioModeStatus"] = WSRequestHandler::HandleGetStudioModeStatus;
messageMap["GetPreviewScene"] = WSRequestHandler::HandleGetPreviewScene;
messageMap["SetPreviewScene"] = WSRequestHandler::HandleSetPreviewScene; messageMap["SetPreviewScene"] = WSRequestHandler::HandleSetPreviewScene;
messageMap["TransitionToProgram"] = WSRequestHandler::HandleTransitionToProgram; messageMap["TransitionToProgram"] = WSRequestHandler::HandleTransitionToProgram;
messageMap["EnableStudioMode"] = WSRequestHandler::HandleEnableStudioMode; messageMap["EnableStudioMode"] = WSRequestHandler::HandleEnableStudioMode;
@ -760,16 +761,37 @@ void WSRequestHandler::HandleGetStudioModeStatus(WSRequestHandler *owner)
obs_data_t* response = obs_data_create(); obs_data_t* response = obs_data_create();
obs_data_set_bool(response, "studio-mode", previewActive); obs_data_set_bool(response, "studio-mode", previewActive);
if (previewActive) {
const char* currentPreviewScene = Utils::GetPreviewSceneName();
obs_data_set_string(response, "preview-scene", currentPreviewScene);
}
owner->SendOKResponse(response); owner->SendOKResponse(response);
obs_data_release(response); obs_data_release(response);
} }
void WSRequestHandler::HandleGetPreviewScene(WSRequestHandler *owner)
{
if (!Utils::IsPreviewModeActive())
{
owner->SendErrorResponse("studio mode not enabled");
return;
}
obs_scene_t* preview_scene = Utils::GetPreviewScene();
obs_source_t* source = obs_scene_get_source(preview_scene);
const char *name = obs_source_get_name(source);
obs_data_array_t *scene_items = Utils::GetSceneItems(source);
obs_data_t *data = obs_data_create();
obs_data_set_string(data, "name", name);
obs_data_set_array(data, "sources", scene_items);
owner->SendOKResponse(data);
obs_data_release(data);
obs_data_array_release(scene_items);
obs_scene_release(preview_scene);
}
void WSRequestHandler::HandleSetPreviewScene(WSRequestHandler *owner) void WSRequestHandler::HandleSetPreviewScene(WSRequestHandler *owner)
{ {
const char* scene_name = obs_data_get_string(owner->_requestData, "scene-name"); const char* scene_name = obs_data_get_string(owner->_requestData, "scene-name");

View File

@ -89,6 +89,7 @@ class WSRequestHandler : public QObject
static void HandleGetTransitionDuration(WSRequestHandler *owner); static void HandleGetTransitionDuration(WSRequestHandler *owner);
static void HandleGetStudioModeStatus(WSRequestHandler *owner); static void HandleGetStudioModeStatus(WSRequestHandler *owner);
static void HandleGetPreviewScene(WSRequestHandler *owner);
static void HandleSetPreviewScene(WSRequestHandler *owner); static void HandleSetPreviewScene(WSRequestHandler *owner);
static void HandleTransitionToProgram(WSRequestHandler *owner); static void HandleTransitionToProgram(WSRequestHandler *owner);
static void HandleEnableStudioMode(WSRequestHandler *owner); static void HandleEnableStudioMode(WSRequestHandler *owner);