mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
request(scenes): refactor Set/Get/RemoveSceneTransitionOverride + use current transition duration
This commit is contained in:
parent
19b33a8558
commit
517788e86a
@ -154,7 +154,7 @@ RpcResponse WSRequestHandler::ReorderSceneItems(const RpcRequest& request) {
|
|||||||
*
|
*
|
||||||
* @param {String} `sceneName` Name of the scene to switch to.
|
* @param {String} `sceneName` Name of the scene to switch to.
|
||||||
* @param {String} `transitionName` Name of the transition to use.
|
* @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.
|
* @param {int (Optional)} `transitionDuration` Duration in milliseconds of the transition if transition is not fixed. Defaults to the current transition duration specified in the UI if this value is not given.
|
||||||
*
|
*
|
||||||
* @api requests
|
* @api requests
|
||||||
* @name SetSceneTransitionOverride
|
* @name SetSceneTransitionOverride
|
||||||
@ -170,7 +170,10 @@ RpcResponse WSRequestHandler::SetSceneTransitionOverride(const RpcRequest& reque
|
|||||||
OBSSourceAutoRelease source = obs_get_source_by_name(sceneName.toUtf8());
|
OBSSourceAutoRelease source = obs_get_source_by_name(sceneName.toUtf8());
|
||||||
if (!source) {
|
if (!source) {
|
||||||
return request.failed("requested scene does not exist");
|
return request.failed("requested scene does not exist");
|
||||||
} else if (!(obs_source_get_type(source) == OBS_SOURCE_TYPE_SCENE)) {
|
}
|
||||||
|
|
||||||
|
enum obs_source_type sourceType = obs_source_get_type(source);
|
||||||
|
if (sourceType != OBS_SOURCE_TYPE_SCENE) {
|
||||||
return request.failed("requested scene is invalid");
|
return request.failed("requested scene is invalid");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,18 +182,15 @@ RpcResponse WSRequestHandler::SetSceneTransitionOverride(const RpcRequest& reque
|
|||||||
return request.failed("requested transition does not exist");
|
return request.failed("requested transition does not exist");
|
||||||
}
|
}
|
||||||
|
|
||||||
obs_data_t *sourceData = obs_source_get_private_settings(source);
|
int transitionOverrideDuration = (
|
||||||
|
request.hasField("transitionDuration")
|
||||||
|
? obs_data_get_int(request.parameters(), "transitionDuration")
|
||||||
|
: obs_frontend_get_transition_duration()
|
||||||
|
);
|
||||||
|
|
||||||
int transitionDuration = obs_data_get_int(sourceData, "transition_duration");
|
OBSDataAutoRelease sourceData = obs_source_get_private_settings(source);
|
||||||
if (request.hasField("transitionDuration")) {
|
obs_data_set_string(sourceData, "transition", transitionName.toUtf8().constData());
|
||||||
transitionDuration = obs_data_get_int(request.parameters(), "transitionDuration");
|
obs_data_set_int(sourceData, "transition_duration", transitionOverrideDuration);
|
||||||
} 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();
|
return request.success();
|
||||||
}
|
}
|
||||||
@ -214,14 +214,16 @@ RpcResponse WSRequestHandler::RemoveSceneTransitionOverride(const RpcRequest& re
|
|||||||
OBSSourceAutoRelease source = obs_get_source_by_name(sceneName.toUtf8());
|
OBSSourceAutoRelease source = obs_get_source_by_name(sceneName.toUtf8());
|
||||||
if (!source) {
|
if (!source) {
|
||||||
return request.failed("requested scene does not exist");
|
return request.failed("requested scene does not exist");
|
||||||
} else if (!(obs_source_get_type(source) == OBS_SOURCE_TYPE_SCENE)) {
|
}
|
||||||
|
|
||||||
|
enum obs_source_type sourceType = obs_source_get_type(source);
|
||||||
|
if (sourceType != OBS_SOURCE_TYPE_SCENE) {
|
||||||
return request.failed("requested scene is invalid");
|
return request.failed("requested scene is invalid");
|
||||||
}
|
}
|
||||||
|
|
||||||
obs_data_t *sourceData = obs_source_get_private_settings(source);
|
OBSDataAutoRelease sourceData = obs_source_get_private_settings(source);
|
||||||
obs_data_erase(sourceData, "transition");
|
obs_data_erase(sourceData, "transition");
|
||||||
obs_data_erase(sourceData, "transition_duration");
|
obs_data_erase(sourceData, "transition_duration");
|
||||||
obs_data_release(sourceData);
|
|
||||||
|
|
||||||
return request.success();
|
return request.success();
|
||||||
}
|
}
|
||||||
@ -248,19 +250,24 @@ RpcResponse WSRequestHandler::GetSceneTransitionOverride(const RpcRequest& reque
|
|||||||
OBSSourceAutoRelease source = obs_get_source_by_name(sceneName.toUtf8());
|
OBSSourceAutoRelease source = obs_get_source_by_name(sceneName.toUtf8());
|
||||||
if (!source) {
|
if (!source) {
|
||||||
return request.failed("requested scene does not exist");
|
return request.failed("requested scene does not exist");
|
||||||
} else if (!(obs_source_get_type(source) == OBS_SOURCE_TYPE_SCENE)) {
|
}
|
||||||
|
|
||||||
|
enum obs_source_type sourceType = obs_source_get_type(source);
|
||||||
|
if (sourceType != OBS_SOURCE_TYPE_SCENE) {
|
||||||
return request.failed("requested scene is invalid");
|
return request.failed("requested scene is invalid");
|
||||||
}
|
}
|
||||||
|
|
||||||
OBSDataAutoRelease data = obs_data_create();
|
OBSDataAutoRelease sourceData = obs_source_get_private_settings(source);
|
||||||
obs_data_t *sourceData = obs_source_get_private_settings(source);
|
const char* transitionOverrideName = obs_data_get_string(sourceData, "transition");
|
||||||
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);
|
bool hasDurationOverride = obs_data_has_autoselect_value(sourceData, "transition_duration");
|
||||||
}
|
int transitionOverrideDuration = obs_data_get_int(sourceData, "transition_duration");
|
||||||
|
|
||||||
|
OBSDataAutoRelease fields = obs_data_create();
|
||||||
|
obs_data_set_string(fields, "transitionName", transitionOverrideName);
|
||||||
|
obs_data_set_int(fields, "transitionDuration",
|
||||||
|
(hasDurationOverride ? transitionOverrideDuration : -1)
|
||||||
|
);
|
||||||
|
|
||||||
|
return request.success(fields);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user