mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
RequestHandler: Add SetInputSettings
This commit is contained in:
parent
ce8f393eb8
commit
d6aeeeea0c
@ -42,6 +42,7 @@ const std::map<std::string, RequestMethodHandler> RequestHandler::_handlerMap
|
||||
{"GetInputKindList", &RequestHandler::GetInputKindList},
|
||||
{"GetInputDefaultSettings", &RequestHandler::GetInputDefaultSettings},
|
||||
{"GetInputSettings", &RequestHandler::GetInputSettings},
|
||||
{"SetInputSettings", &RequestHandler::SetInputSettings},
|
||||
};
|
||||
|
||||
RequestResult RequestHandler::ProcessRequest(const Request& request)
|
||||
|
@ -56,6 +56,7 @@ class RequestHandler {
|
||||
RequestResult GetInputKindList(const Request&);
|
||||
RequestResult GetInputDefaultSettings(const Request&);
|
||||
RequestResult GetInputSettings(const Request&);
|
||||
RequestResult SetInputSettings(const Request&);
|
||||
|
||||
static const std::map<std::string, RequestMethodHandler> _handlerMap;
|
||||
};
|
||||
|
@ -44,9 +44,8 @@ RequestResult RequestHandler::GetInputDefaultSettings(const Request& request)
|
||||
{
|
||||
RequestStatus::RequestStatus statusCode;
|
||||
std::string comment;
|
||||
if (!request.ValidateString("inputKind", statusCode, comment)) {
|
||||
if (!request.ValidateString("inputKind", statusCode, comment))
|
||||
return RequestResult::Error(statusCode, comment);
|
||||
}
|
||||
|
||||
std::string inputKind = request.RequestData["inputKind"];
|
||||
|
||||
@ -74,3 +73,42 @@ RequestResult RequestHandler::GetInputSettings(const Request& request)
|
||||
responseData["inputKind"] = obs_source_get_id(input);
|
||||
return RequestResult::Success(responseData);
|
||||
}
|
||||
|
||||
RequestResult RequestHandler::SetInputSettings(const Request& request)
|
||||
{
|
||||
RequestStatus::RequestStatus statusCode;
|
||||
std::string comment;
|
||||
OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment);
|
||||
if (!input)
|
||||
return RequestResult::Error(statusCode, comment);
|
||||
|
||||
if (!request.ValidateObject("inputSettings", statusCode, comment, true))
|
||||
return RequestResult::Error(statusCode, comment);
|
||||
|
||||
bool overlay = true;
|
||||
if (request.RequestData.contains("overlay") && !request.RequestData["overlay"].is_null()) {
|
||||
if (!request.ValidateBoolean("overlay", statusCode, comment)) {
|
||||
return RequestResult::Error(statusCode, comment);
|
||||
}
|
||||
|
||||
overlay = request.RequestData["overlay"];
|
||||
}
|
||||
|
||||
// Get the new settings and convert it to obs_data_t*
|
||||
OBSDataAutoRelease newSettings = Utils::Json::JsonToObsData(request.RequestData["inputSettings"]);
|
||||
if (!newSettings)
|
||||
// This should never happen
|
||||
return RequestResult::Error(RequestStatus::RequestProcessingFailed, "An internal data conversion operation failed. Please report this!");
|
||||
|
||||
if (overlay)
|
||||
// Applies the new settings on top of the existing user settings
|
||||
obs_source_update(input, newSettings);
|
||||
else
|
||||
// Clears all user settings (leaving defaults) then applies the new settings
|
||||
obs_source_reset_settings(input, newSettings);
|
||||
|
||||
// Tells any open source properties windows to perform a UI refresh
|
||||
obs_source_update_properties(input);
|
||||
|
||||
return RequestResult::Success();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user