RequestHandler: Add SetInputSettings

This commit is contained in:
tt2468 2021-06-16 04:27:08 -07:00
parent ce8f393eb8
commit d6aeeeea0c
3 changed files with 42 additions and 2 deletions

View File

@ -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)

View File

@ -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;
};

View File

@ -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();
}