mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
Requests: Add scene transition override requests
Adds these requests: - `SetSceneTransitionOverride` - `RemoveSceneTransitionOverride` - `GetSceneTransitionOverride`
This commit is contained in:
parent
590943ed95
commit
19b33a8558
@ -46,6 +46,9 @@ const QHash<QString, RpcMethodHandler> WSRequestHandler::messageMap {
|
||||
{ "SetCurrentScene", &WSRequestHandler::SetCurrentScene },
|
||||
{ "GetCurrentScene", &WSRequestHandler::GetCurrentScene },
|
||||
{ "GetSceneList", &WSRequestHandler::GetSceneList },
|
||||
{ "SetSceneTransitionOverride", &WSRequestHandler::SetSceneTransitionOverride },
|
||||
{ "RemoveSceneTransitionOverride", &WSRequestHandler::RemoveSceneTransitionOverride },
|
||||
{ "GetSceneTransitionOverride", &WSRequestHandler::GetSceneTransitionOverride },
|
||||
|
||||
{ "SetSourceRender", &WSRequestHandler::SetSceneItemRender }, // Retrocompat
|
||||
{ "SetSceneItemRender", &WSRequestHandler::SetSceneItemRender },
|
||||
|
@ -64,6 +64,9 @@ class WSRequestHandler {
|
||||
RpcResponse SetCurrentScene(const RpcRequest&);
|
||||
RpcResponse GetCurrentScene(const RpcRequest&);
|
||||
RpcResponse GetSceneList(const RpcRequest&);
|
||||
RpcResponse SetSceneTransitionOverride(const RpcRequest&);
|
||||
RpcResponse RemoveSceneTransitionOverride(const RpcRequest&);
|
||||
RpcResponse GetSceneTransitionOverride(const RpcRequest&);
|
||||
|
||||
RpcResponse SetSceneItemRender(const RpcRequest&);
|
||||
RpcResponse SetSceneItemPosition(const RpcRequest&);
|
||||
|
@ -148,3 +148,119 @@ RpcResponse WSRequestHandler::ReorderSceneItems(const RpcRequest& request) {
|
||||
|
||||
return request.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a scene to use a specific transition override.
|
||||
*
|
||||
* @param {String} `sceneName` Name of the scene to switch to.
|
||||
* @param {String} `transitionName` Name of the transition to use.
|
||||
* @param {int (Optional)} `transitionDuration` Duration in milliseconds of the transition if transition is not fixed. Defaults 300 if there is no current override and this value is not given.
|
||||
*
|
||||
* @api requests
|
||||
* @name SetSceneTransitionOverride
|
||||
* @category scenes
|
||||
* @since 4.9.0
|
||||
*/
|
||||
RpcResponse WSRequestHandler::SetSceneTransitionOverride(const RpcRequest& request) {
|
||||
if (!request.hasField("sceneName") || !request.hasField("transitionName")) {
|
||||
return request.failed("missing request parameters");
|
||||
}
|
||||
|
||||
QString sceneName = obs_data_get_string(request.parameters(), "sceneName");
|
||||
OBSSourceAutoRelease source = obs_get_source_by_name(sceneName.toUtf8());
|
||||
if (!source) {
|
||||
return request.failed("requested scene does not exist");
|
||||
} else if (!(obs_source_get_type(source) == OBS_SOURCE_TYPE_SCENE)) {
|
||||
return request.failed("requested scene is invalid");
|
||||
}
|
||||
|
||||
QString transitionName = obs_data_get_string(request.parameters(), "transitionName");
|
||||
if (!Utils::GetTransitionFromName(transitionName)) {
|
||||
return request.failed("requested transition does not exist");
|
||||
}
|
||||
|
||||
obs_data_t *sourceData = obs_source_get_private_settings(source);
|
||||
|
||||
int transitionDuration = obs_data_get_int(sourceData, "transition_duration");
|
||||
if (request.hasField("transitionDuration")) {
|
||||
transitionDuration = obs_data_get_int(request.parameters(), "transitionDuration");
|
||||
} else if (!transitionDuration) {
|
||||
transitionDuration = 300;
|
||||
}
|
||||
|
||||
obs_data_set_string(sourceData, "transition", transitionName.toUtf8());
|
||||
obs_data_set_int(sourceData, "transition_duration", transitionDuration);
|
||||
obs_data_release(sourceData);
|
||||
|
||||
return request.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove any transition override on a scene.
|
||||
*
|
||||
* @param {String} `sceneName` Name of the scene to switch to.
|
||||
*
|
||||
* @api requests
|
||||
* @name RemoveSceneTransitionOverride
|
||||
* @category scenes
|
||||
* @since 4.9.0
|
||||
*/
|
||||
RpcResponse WSRequestHandler::RemoveSceneTransitionOverride(const RpcRequest& request) {
|
||||
if (!request.hasField("sceneName")) {
|
||||
return request.failed("missing request parameters");
|
||||
}
|
||||
|
||||
QString sceneName = obs_data_get_string(request.parameters(), "sceneName");
|
||||
OBSSourceAutoRelease source = obs_get_source_by_name(sceneName.toUtf8());
|
||||
if (!source) {
|
||||
return request.failed("requested scene does not exist");
|
||||
} else if (!(obs_source_get_type(source) == OBS_SOURCE_TYPE_SCENE)) {
|
||||
return request.failed("requested scene is invalid");
|
||||
}
|
||||
|
||||
obs_data_t *sourceData = obs_source_get_private_settings(source);
|
||||
obs_data_erase(sourceData, "transition");
|
||||
obs_data_erase(sourceData, "transition_duration");
|
||||
obs_data_release(sourceData);
|
||||
|
||||
return request.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current scene transition override.
|
||||
*
|
||||
* @param {String} `sceneName` Name of the scene to switch to.
|
||||
*
|
||||
* @return {String} `transitionName` Name of the current overriding transition. Empty string if no override is set.
|
||||
* @return {int} `transitionDuration` Transition duration. `-1` if no override is set.
|
||||
*
|
||||
* @api requests
|
||||
* @name GetSceneTransitionOverride
|
||||
* @category scenes
|
||||
* @since 4.9.0
|
||||
*/
|
||||
RpcResponse WSRequestHandler::GetSceneTransitionOverride(const RpcRequest& request) {
|
||||
if (!request.hasField("sceneName")) {
|
||||
return request.failed("missing request parameters");
|
||||
}
|
||||
|
||||
QString sceneName = obs_data_get_string(request.parameters(), "sceneName");
|
||||
OBSSourceAutoRelease source = obs_get_source_by_name(sceneName.toUtf8());
|
||||
if (!source) {
|
||||
return request.failed("requested scene does not exist");
|
||||
} else if (!(obs_source_get_type(source) == OBS_SOURCE_TYPE_SCENE)) {
|
||||
return request.failed("requested scene is invalid");
|
||||
}
|
||||
|
||||
OBSDataAutoRelease data = obs_data_create();
|
||||
obs_data_t *sourceData = obs_source_get_private_settings(source);
|
||||
obs_data_set_string(data, "transitionName", obs_data_get_string(sourceData, "transition"));
|
||||
if (!obs_data_get_int(sourceData, "transition_duration")) {
|
||||
obs_data_set_int(data, "transitionDuration", -1);
|
||||
} else {
|
||||
obs_data_set_int(data, "transitionDuration", obs_data_get_int(sourceData, "transition_duration"));
|
||||
}
|
||||
obs_data_release(sourceData);
|
||||
|
||||
return request.success(data);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user