mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
Added GetPreviewScene and modified GetStudioModeStatus
This commit is contained in:
parent
85fa6b60e2
commit
5748e163f8
11
PROTOCOL.md
11
PROTOCOL.md
@ -348,12 +348,19 @@ __Response__ : OK if source exists in the current scene, error otherwise.
|
||||
---
|
||||
|
||||
#### "GetStudioModeStatus"
|
||||
List OBS' scenes.
|
||||
Tells if Studio Mode is currently enabled or disabled.
|
||||
|
||||
__Request fields__ : none
|
||||
__Response__ : always OK, with these additional fields :
|
||||
- **"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.
|
||||
|
||||
---
|
||||
|
||||
|
@ -299,7 +299,7 @@ void Utils::TogglePreviewMode()
|
||||
GetPreviewModeButtonControl()->click();
|
||||
}
|
||||
|
||||
const char* Utils::GetPreviewSceneName()
|
||||
obs_scene_t* Utils::GetPreviewScene()
|
||||
{
|
||||
if (IsPreviewModeActive())
|
||||
{
|
||||
@ -309,9 +309,10 @@ const char* Utils::GetPreviewSceneName()
|
||||
blog(LOG_INFO, "GetPreviewSceneName: %d selected item(s)", selected.count());
|
||||
|
||||
// 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;
|
||||
|
2
Utils.h
2
Utils.h
@ -55,7 +55,7 @@ class Utils
|
||||
static void DisablePreviewMode();
|
||||
static void TogglePreviewMode();
|
||||
|
||||
static const char* GetPreviewSceneName();
|
||||
static obs_scene_t* GetPreviewScene();
|
||||
static void SetPreviewScene(const char* name);
|
||||
static void TransitionToProgram();
|
||||
|
||||
|
@ -72,6 +72,7 @@ WSRequestHandler::WSRequestHandler(QWebSocket *client) :
|
||||
messageMap["ListProfiles"] = WSRequestHandler::HandleListProfiles;
|
||||
|
||||
messageMap["GetStudioModeStatus"] = WSRequestHandler::HandleGetStudioModeStatus;
|
||||
messageMap["GetPreviewScene"] = WSRequestHandler::HandleGetPreviewScene;
|
||||
messageMap["SetPreviewScene"] = WSRequestHandler::HandleSetPreviewScene;
|
||||
messageMap["TransitionToProgram"] = WSRequestHandler::HandleTransitionToProgram;
|
||||
messageMap["EnableStudioMode"] = WSRequestHandler::HandleEnableStudioMode;
|
||||
@ -760,16 +761,37 @@ void WSRequestHandler::HandleGetStudioModeStatus(WSRequestHandler *owner)
|
||||
obs_data_t* response = obs_data_create();
|
||||
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);
|
||||
|
||||
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)
|
||||
{
|
||||
const char* scene_name = obs_data_get_string(owner->_requestData, "scene-name");
|
||||
|
@ -89,6 +89,7 @@ class WSRequestHandler : public QObject
|
||||
static void HandleGetTransitionDuration(WSRequestHandler *owner);
|
||||
|
||||
static void HandleGetStudioModeStatus(WSRequestHandler *owner);
|
||||
static void HandleGetPreviewScene(WSRequestHandler *owner);
|
||||
static void HandleSetPreviewScene(WSRequestHandler *owner);
|
||||
static void HandleTransitionToProgram(WSRequestHandler *owner);
|
||||
static void HandleEnableStudioMode(WSRequestHandler *owner);
|
||||
|
Loading…
x
Reference in New Issue
Block a user