RequestHandler: Add more scene requests

This commit is contained in:
tt2468 2021-06-14 23:42:18 -07:00
parent 5e3ed3d167
commit c5af073780
3 changed files with 81 additions and 0 deletions

View File

@ -29,6 +29,10 @@ const std::map<std::string, RequestMethodHandler> RequestHandler::_handlerMap
// Scenes
{"GetSceneList", &RequestHandler::GetSceneList},
{"GetCurrentProgramScene", &RequestHandler::GetCurrentProgramScene},
{"SetCurrentProgramScene", &RequestHandler::SetCurrentProgramScene},
{"GetCurrentPreviewScene", &RequestHandler::GetCurrentPreviewScene},
{"SetCurrentPreviewScene", &RequestHandler::SetCurrentPreviewScene},
};
RequestResult RequestHandler::ProcessRequest(const Request& request)

View File

@ -43,6 +43,10 @@ class RequestHandler {
// Scenes
RequestResult GetSceneList(const Request&);
RequestResult GetCurrentProgramScene(const Request&);
RequestResult SetCurrentProgramScene(const Request&);
RequestResult GetCurrentPreviewScene(const Request&);
RequestResult SetCurrentPreviewScene(const Request&);
static const std::map<std::string, RequestMethodHandler> _handlerMap;
};

View File

@ -20,3 +20,76 @@ RequestResult RequestHandler::GetSceneList(const Request& request)
return RequestResult::Success(responseData);
}
RequestResult RequestHandler::GetCurrentProgramScene(const Request& request)
{
json responseData;
OBSSourceAutoRelease currentProgramScene = obs_frontend_get_current_scene();
responseData["currentProgramSceneName"] = obs_source_get_name(currentProgramScene);
return RequestResult::Success(responseData);
}
RequestResult RequestHandler::SetCurrentProgramScene(const Request& request)
{
RequestStatus::RequestStatus statusCode;
std::string comment;
if (!request.ValidateString("sceneName", statusCode, comment)) {
return RequestResult::Error(statusCode, comment);
}
std::string sceneName = request.RequestData["sceneName"];
OBSSourceAutoRelease scene = obs_get_source_by_name(sceneName.c_str());
if (!scene)
return RequestResult::Error(RequestStatus::SceneNotFound);
if (obs_source_get_type(scene) != OBS_SOURCE_TYPE_SCENE)
return RequestResult::Error(RequestStatus::InvalidSourceType, "The specified source is not a scene.");
obs_frontend_set_current_scene(scene);
return RequestResult::Success();
}
RequestResult RequestHandler::GetCurrentPreviewScene(const Request& request)
{
json responseData;
OBSSourceAutoRelease currentPreviewScene = obs_frontend_get_current_preview_scene();
if (currentPreviewScene) {
responseData["currentPreviewSceneName"] = obs_source_get_name(currentPreviewScene);
} else if (request.IgnoreNonFatalRequestChecks) {
responseData["currentPreviewSceneName"] = nullptr;
} else {
return RequestResult::Error(RequestStatus::StudioModeNotActive);
}
return RequestResult::Success(responseData);
}
RequestResult RequestHandler::SetCurrentPreviewScene(const Request& request)
{
if (!obs_frontend_preview_program_mode_active())
return RequestResult::Error(RequestStatus::StudioModeNotActive);
RequestStatus::RequestStatus statusCode;
std::string comment;
if (!request.ValidateString("sceneName", statusCode, comment)) {
return RequestResult::Error(statusCode, comment);
}
std::string sceneName = request.RequestData["sceneName"];
OBSSourceAutoRelease scene = obs_get_source_by_name(sceneName.c_str());
if (!scene)
return RequestResult::Error(RequestStatus::SceneNotFound);
if (obs_source_get_type(scene) != OBS_SOURCE_TYPE_SCENE)
return RequestResult::Error(RequestStatus::InvalidSourceType, "The specified source is not a scene.");
obs_frontend_set_current_preview_scene(scene);
return RequestResult::Success();
}