mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
RequestHandler: More transition requests
This commit is contained in:
parent
5cbf439f55
commit
14238027cc
@ -88,6 +88,9 @@ const std::map<std::string, RequestMethodHandler> RequestHandler::_handlerMap
|
|||||||
|
|
||||||
// Transitions
|
// Transitions
|
||||||
{"GetTransitionKindList", &RequestHandler::GetTransitionKindList},
|
{"GetTransitionKindList", &RequestHandler::GetTransitionKindList},
|
||||||
|
{"GetSceneTransitionList", &RequestHandler::GetSceneTransitionList},
|
||||||
|
{"GetCurrentSceneTransition", &RequestHandler::GetCurrentSceneTransition},
|
||||||
|
{"SetCurrentSceneTransition", &RequestHandler::SetCurrentSceneTransition},
|
||||||
|
|
||||||
// Scene Items
|
// Scene Items
|
||||||
{"GetSceneItemList", &RequestHandler::GetSceneItemList},
|
{"GetSceneItemList", &RequestHandler::GetSceneItemList},
|
||||||
|
@ -110,6 +110,9 @@ class RequestHandler {
|
|||||||
|
|
||||||
// Transitions
|
// Transitions
|
||||||
RequestResult GetTransitionKindList(const Request&);
|
RequestResult GetTransitionKindList(const Request&);
|
||||||
|
RequestResult GetSceneTransitionList(const Request&);
|
||||||
|
RequestResult GetCurrentSceneTransition(const Request&);
|
||||||
|
RequestResult SetCurrentSceneTransition(const Request&);
|
||||||
|
|
||||||
// Scene Items
|
// Scene Items
|
||||||
RequestResult GetSceneItemList(const Request&);
|
RequestResult GetSceneItemList(const Request&);
|
||||||
|
@ -25,3 +25,70 @@ RequestResult RequestHandler::GetTransitionKindList(const Request&)
|
|||||||
responseData["transitionKinds"] = Utils::Obs::ArrayHelper::GetTransitionKindList();
|
responseData["transitionKinds"] = Utils::Obs::ArrayHelper::GetTransitionKindList();
|
||||||
return RequestResult::Success(responseData);
|
return RequestResult::Success(responseData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RequestResult RequestHandler::GetSceneTransitionList(const Request&)
|
||||||
|
{
|
||||||
|
json responseData;
|
||||||
|
|
||||||
|
OBSSourceAutoRelease transition = obs_frontend_get_current_transition();
|
||||||
|
if (transition) {
|
||||||
|
responseData["currentSceneTransitionName"] = obs_source_get_name(transition);
|
||||||
|
responseData["currentSceneTransitionKind"] = obs_source_get_id(transition);
|
||||||
|
} else {
|
||||||
|
responseData["currentSceneTransitionName"] = nullptr;
|
||||||
|
responseData["currentSceneTransitionKind"] = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
responseData["transitions"] = Utils::Obs::ArrayHelper::GetSceneTransitionList();
|
||||||
|
|
||||||
|
return RequestResult::Success(responseData);
|
||||||
|
}
|
||||||
|
|
||||||
|
RequestResult RequestHandler::GetCurrentSceneTransition(const Request&)
|
||||||
|
{
|
||||||
|
OBSSourceAutoRelease transition = obs_frontend_get_current_transition();
|
||||||
|
if (!transition)
|
||||||
|
return RequestResult::Error(RequestStatus::InvalidResourceState, "OBS does not currently have a scene transition set."); // This should not happen!
|
||||||
|
|
||||||
|
json responseData;
|
||||||
|
responseData["transitionName"] = obs_source_get_name(transition);
|
||||||
|
responseData["transitionKind"] = obs_source_get_id(transition);
|
||||||
|
|
||||||
|
if (obs_transition_fixed(transition)) {
|
||||||
|
responseData["transitionFixed"] = true;
|
||||||
|
responseData["transitionDuration"] = nullptr;
|
||||||
|
} else {
|
||||||
|
responseData["transitionFixed"] = false;
|
||||||
|
responseData["transitionDuration"] = obs_frontend_get_transition_duration();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obs_source_configurable(transition)) {
|
||||||
|
responseData["transitionConfigurable"] = true;
|
||||||
|
OBSDataAutoRelease transitionSettings = obs_source_get_settings(transition);
|
||||||
|
responseData["transitionSettings"] = Utils::Json::ObsDataToJson(transitionSettings);
|
||||||
|
} else {
|
||||||
|
responseData["transitionConfigurable"] = false;
|
||||||
|
responseData["transitionSettings"] = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return RequestResult::Success(responseData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transition names being unique are a UI concept and are not enforced by libobs
|
||||||
|
RequestResult RequestHandler::SetCurrentSceneTransition(const Request& request)
|
||||||
|
{
|
||||||
|
RequestStatus::RequestStatus statusCode;
|
||||||
|
std::string comment;
|
||||||
|
if (!request.ValidateString("transitionName", statusCode, comment))
|
||||||
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
|
std::string transitionName = request.RequestData["transitionName"];
|
||||||
|
|
||||||
|
OBSSourceAutoRelease transition = Utils::Obs::SearchHelper::GetSceneTransitionByName(transitionName);
|
||||||
|
if (!transition)
|
||||||
|
return RequestResult::Error(RequestStatus::ResourceNotFound, "No scene transition was found by that name.");
|
||||||
|
|
||||||
|
obs_frontend_set_current_transition(transition);
|
||||||
|
|
||||||
|
return RequestResult::Success();
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user