mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
Requests: More requests and code cleanup
(plus very slight performance improvement)
This commit is contained in:
parent
25b3bd44ba
commit
96dcc49adb
@ -71,6 +71,12 @@ const std::map<std::string, RequestMethodHandler> RequestHandler::_handlerMap
|
|||||||
{"GetGroupSceneItemList", &RequestHandler::GetGroupSceneItemList},
|
{"GetGroupSceneItemList", &RequestHandler::GetGroupSceneItemList},
|
||||||
{"CreateSceneItem", &RequestHandler::CreateSceneItem},
|
{"CreateSceneItem", &RequestHandler::CreateSceneItem},
|
||||||
{"RemoveSceneItem", &RequestHandler::RemoveSceneItem},
|
{"RemoveSceneItem", &RequestHandler::RemoveSceneItem},
|
||||||
|
{"GetSceneItemEnabled", &RequestHandler::GetSceneItemEnabled},
|
||||||
|
{"SetSceneItemEnabled", &RequestHandler::SetSceneItemEnabled},
|
||||||
|
{"GetSceneItemLocked", &RequestHandler::GetSceneItemLocked},
|
||||||
|
{"SetSceneItemLocked", &RequestHandler::SetSceneItemLocked},
|
||||||
|
{"GetSceneItemIndex", &RequestHandler::GetSceneItemIndex},
|
||||||
|
{"SetSceneItemIndex", &RequestHandler::SetSceneItemIndex},
|
||||||
|
|
||||||
// Stream
|
// Stream
|
||||||
{"GetStreamStatus", &RequestHandler::GetStreamStatus},
|
{"GetStreamStatus", &RequestHandler::GetStreamStatus},
|
||||||
|
@ -87,6 +87,12 @@ class RequestHandler {
|
|||||||
RequestResult GetGroupSceneItemList(const Request&);
|
RequestResult GetGroupSceneItemList(const Request&);
|
||||||
RequestResult CreateSceneItem(const Request&);
|
RequestResult CreateSceneItem(const Request&);
|
||||||
RequestResult RemoveSceneItem(const Request&);
|
RequestResult RemoveSceneItem(const Request&);
|
||||||
|
RequestResult GetSceneItemEnabled(const Request&);
|
||||||
|
RequestResult SetSceneItemEnabled(const Request&);
|
||||||
|
RequestResult GetSceneItemLocked(const Request&);
|
||||||
|
RequestResult SetSceneItemLocked(const Request&);
|
||||||
|
RequestResult GetSceneItemIndex(const Request&);
|
||||||
|
RequestResult SetSceneItemIndex(const Request&);
|
||||||
|
|
||||||
// Stream
|
// Stream
|
||||||
RequestResult GetStreamStatus(const Request&);
|
RequestResult GetStreamStatus(const Request&);
|
||||||
|
@ -267,16 +267,16 @@ RequestResult RequestHandler::SetVideoSettings(const Request& request)
|
|||||||
|
|
||||||
RequestStatus::RequestStatus statusCode = RequestStatus::NoError;
|
RequestStatus::RequestStatus statusCode = RequestStatus::NoError;
|
||||||
std::string comment;
|
std::string comment;
|
||||||
bool changeFps = (request.ValidateNumber("fpsNumerator", statusCode, comment, 1) && request.ValidateNumber("fpsDenominator", statusCode, comment, 1));
|
bool changeFps = (request.Contains("fpsNumerator") && request.Contains("fpsDenominator"));
|
||||||
if (!changeFps && statusCode != RequestStatus::MissingRequestParameter)
|
if (changeFps && !(request.ValidateOptionalNumber("fpsNumerator", statusCode, comment, 1) && request.ValidateOptionalNumber("fpsDenominator", statusCode, comment, 1)))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
bool changeBaseRes = (request.ValidateNumber("baseWidth", statusCode, comment, 8, 4096) && request.ValidateNumber("baseHeight", statusCode, comment, 8, 4096));
|
bool changeBaseRes = (request.Contains("baseWidth") && request.Contains("baseHeight"));
|
||||||
if (!changeBaseRes && statusCode != RequestStatus::MissingRequestParameter)
|
if (changeBaseRes && !(request.ValidateOptionalNumber("baseWidth", statusCode, comment, 8, 4096) && request.ValidateOptionalNumber("baseHeight", statusCode, comment, 8, 4096)))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
bool changeOutputRes = (request.ValidateNumber("outputWidth", statusCode, comment, 8, 4096) && request.ValidateNumber("outputHeight", statusCode, comment, 8, 4096));
|
bool changeOutputRes = (request.Contains("outputWidth") && request.Contains("outputHeight"));
|
||||||
if (!changeOutputRes && statusCode != RequestStatus::MissingRequestParameter)
|
if (changeOutputRes && !(request.ValidateOptionalNumber("outputWidth", statusCode, comment, 8, 4096) && request.ValidateOptionalNumber("outputHeight", statusCode, comment, 8, 4096)))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
config_t *config = obs_frontend_get_profile_config();
|
config_t *config = obs_frontend_get_profile_config();
|
||||||
|
@ -4,10 +4,10 @@ RequestResult RequestHandler::GetInputList(const Request& request)
|
|||||||
{
|
{
|
||||||
std::string inputKind;
|
std::string inputKind;
|
||||||
|
|
||||||
if (request.RequestData.contains("inputKind") && !request.RequestData["inputKind"].is_null()) {
|
if (request.Contains("inputKind")) {
|
||||||
RequestStatus::RequestStatus statusCode;
|
RequestStatus::RequestStatus statusCode;
|
||||||
std::string comment;
|
std::string comment;
|
||||||
if (!request.ValidateString("inputKind", statusCode, comment))
|
if (!request.ValidateOptionalString("inputKind", statusCode, comment))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
inputKind = request.RequestData["inputKind"];
|
inputKind = request.RequestData["inputKind"];
|
||||||
@ -22,10 +22,10 @@ RequestResult RequestHandler::GetInputKindList(const Request& request)
|
|||||||
{
|
{
|
||||||
bool unversioned = false;
|
bool unversioned = false;
|
||||||
|
|
||||||
if (request.RequestData.contains("unversioned") && !request.RequestData["unversioned"].is_null()) {
|
if (request.Contains("unversioned")) {
|
||||||
RequestStatus::RequestStatus statusCode;
|
RequestStatus::RequestStatus statusCode;
|
||||||
std::string comment;
|
std::string comment;
|
||||||
if (!request.ValidateBoolean("unversioned", statusCode, comment))
|
if (!request.ValidateOptionalBoolean("unversioned", statusCode, comment))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
unversioned = request.RequestData["unversioned"];
|
unversioned = request.RequestData["unversioned"];
|
||||||
@ -41,9 +41,7 @@ RequestResult RequestHandler::CreateInput(const Request& request)
|
|||||||
RequestStatus::RequestStatus statusCode;
|
RequestStatus::RequestStatus statusCode;
|
||||||
std::string comment;
|
std::string comment;
|
||||||
OBSSourceAutoRelease sceneSource = request.ValidateScene("sceneName", statusCode, comment);
|
OBSSourceAutoRelease sceneSource = request.ValidateScene("sceneName", statusCode, comment);
|
||||||
if (!(request.ValidateString("inputName", statusCode, comment) &&
|
if (!(sceneSource && request.ValidateString("inputName", statusCode, comment) && request.ValidateString("inputKind", statusCode, comment)))
|
||||||
request.ValidateString("inputKind", statusCode, comment) &&
|
|
||||||
sceneSource))
|
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
std::string inputName = request.RequestData["inputName"];
|
std::string inputName = request.RequestData["inputName"];
|
||||||
@ -52,14 +50,13 @@ RequestResult RequestHandler::CreateInput(const Request& request)
|
|||||||
return RequestResult::Error(RequestStatus::ResourceAlreadyExists, "A source already exists by that input name.");
|
return RequestResult::Error(RequestStatus::ResourceAlreadyExists, "A source already exists by that input name.");
|
||||||
|
|
||||||
std::string inputKind = request.RequestData["inputKind"];
|
std::string inputKind = request.RequestData["inputKind"];
|
||||||
|
|
||||||
auto kinds = Utils::Obs::ListHelper::GetInputKindList();
|
auto kinds = Utils::Obs::ListHelper::GetInputKindList();
|
||||||
if (std::find(kinds.begin(), kinds.end(), inputKind) == kinds.end())
|
if (std::find(kinds.begin(), kinds.end(), inputKind) == kinds.end())
|
||||||
return RequestResult::Error(RequestStatus::InvalidInputKind, "Your specified input kind is not supported by OBS. Check that your specified kind is properly versioned and that any necessary plugins are loaded.");
|
return RequestResult::Error(RequestStatus::InvalidInputKind, "Your specified input kind is not supported by OBS. Check that your specified kind is properly versioned and that any necessary plugins are loaded.");
|
||||||
|
|
||||||
OBSDataAutoRelease inputSettings = nullptr;
|
OBSDataAutoRelease inputSettings = nullptr;
|
||||||
if (request.RequestData.contains("inputSettings") && !request.RequestData["inputSettings"].is_null()) {
|
if (request.Contains("inputSettings")) {
|
||||||
if (!request.ValidateObject("inputSettings", statusCode, comment, true))
|
if (!request.ValidateOptionalObject("inputSettings", statusCode, comment, true))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
inputSettings = Utils::Json::JsonToObsData(request.RequestData["inputSettings"]);
|
inputSettings = Utils::Json::JsonToObsData(request.RequestData["inputSettings"]);
|
||||||
@ -68,8 +65,8 @@ RequestResult RequestHandler::CreateInput(const Request& request)
|
|||||||
OBSScene scene = obs_scene_from_source(sceneSource);
|
OBSScene scene = obs_scene_from_source(sceneSource);
|
||||||
|
|
||||||
bool sceneItemEnabled = true;
|
bool sceneItemEnabled = true;
|
||||||
if (request.RequestData.contains("sceneItemEnabled") && !request.RequestData["sceneItemEnabled"].is_null()) {
|
if (request.Contains("sceneItemEnabled")) {
|
||||||
if (!request.ValidateBoolean("sceneItemEnabled", statusCode, comment))
|
if (!request.ValidateOptionalBoolean("sceneItemEnabled", statusCode, comment))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
sceneItemEnabled = request.RequestData["sceneItemEnabled"];
|
sceneItemEnabled = request.RequestData["sceneItemEnabled"];
|
||||||
@ -148,8 +145,8 @@ RequestResult RequestHandler::SetInputSettings(const Request& request)
|
|||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
bool overlay = true;
|
bool overlay = true;
|
||||||
if (request.RequestData.contains("overlay") && !request.RequestData["overlay"].is_null()) {
|
if (request.Contains("overlay")) {
|
||||||
if (!request.ValidateBoolean("overlay", statusCode, comment))
|
if (!request.ValidateOptionalBoolean("overlay", statusCode, comment))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
overlay = request.RequestData["overlay"];
|
overlay = request.RequestData["overlay"];
|
||||||
@ -243,12 +240,12 @@ RequestResult RequestHandler::SetInputVolume(const Request& request)
|
|||||||
if (!input)
|
if (!input)
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
bool hasMul = request.ValidateNumber("inputVolumeMul", statusCode, comment, 0, 20);
|
bool hasMul = request.Contains("inputVolumeMul");
|
||||||
if (!hasMul && statusCode != RequestStatus::MissingRequestParameter)
|
if (hasMul && !request.ValidateOptionalNumber("inputVolumeMul", statusCode, comment, 0, 20))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
bool hasDb = request.ValidateNumber("inputVolumeDb", statusCode, comment, -100, 26);
|
bool hasDb = request.Contains("inputVolumeDb");
|
||||||
if (!hasDb && statusCode != RequestStatus::MissingRequestParameter)
|
if (hasDb && !request.ValidateOptionalNumber("inputVolumeDb", statusCode, comment, -100, 26))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
if (hasMul && hasDb)
|
if (hasMul && hasDb)
|
||||||
@ -257,7 +254,7 @@ RequestResult RequestHandler::SetInputVolume(const Request& request)
|
|||||||
if (!hasMul && !hasDb)
|
if (!hasMul && !hasDb)
|
||||||
return RequestResult::Error(RequestStatus::MissingRequestParameter, "You must specify one volume parameter.");
|
return RequestResult::Error(RequestStatus::MissingRequestParameter, "You must specify one volume parameter.");
|
||||||
|
|
||||||
float inputVolumeMul = 0.0;
|
float inputVolumeMul;
|
||||||
if (hasMul)
|
if (hasMul)
|
||||||
inputVolumeMul = request.RequestData["inputVolumeMul"];
|
inputVolumeMul = request.RequestData["inputVolumeMul"];
|
||||||
else
|
else
|
||||||
|
@ -69,3 +69,90 @@ RequestResult RequestHandler::RemoveSceneItem(const Request& request)
|
|||||||
|
|
||||||
return RequestResult::Success();
|
return RequestResult::Success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RequestResult RequestHandler::GetSceneItemEnabled(const Request& request)
|
||||||
|
{
|
||||||
|
RequestStatus::RequestStatus statusCode;
|
||||||
|
std::string comment;
|
||||||
|
OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment);
|
||||||
|
if (!sceneItem)
|
||||||
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
|
json responseData;
|
||||||
|
responseData["sceneItemEnabled"] = obs_sceneitem_visible(sceneItem);
|
||||||
|
|
||||||
|
return RequestResult::Success(responseData);
|
||||||
|
}
|
||||||
|
|
||||||
|
RequestResult RequestHandler::SetSceneItemEnabled(const Request& request)
|
||||||
|
{
|
||||||
|
RequestStatus::RequestStatus statusCode;
|
||||||
|
std::string comment;
|
||||||
|
OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment);
|
||||||
|
if (!(sceneItem && request.ValidateBoolean("sceneItemEnabled", statusCode, comment)))
|
||||||
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
|
bool sceneItemEnabled = request.RequestData["sceneItemEnabled"];
|
||||||
|
|
||||||
|
obs_sceneitem_set_visible(sceneItem, sceneItemEnabled);
|
||||||
|
|
||||||
|
return RequestResult::Success();
|
||||||
|
}
|
||||||
|
|
||||||
|
RequestResult RequestHandler::GetSceneItemLocked(const Request& request)
|
||||||
|
{
|
||||||
|
RequestStatus::RequestStatus statusCode;
|
||||||
|
std::string comment;
|
||||||
|
OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment);
|
||||||
|
if (!sceneItem)
|
||||||
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
|
json responseData;
|
||||||
|
responseData["sceneItemLocked"] = obs_sceneitem_locked(sceneItem);
|
||||||
|
|
||||||
|
return RequestResult::Success(responseData);
|
||||||
|
}
|
||||||
|
|
||||||
|
RequestResult RequestHandler::SetSceneItemLocked(const Request& request)
|
||||||
|
{
|
||||||
|
RequestStatus::RequestStatus statusCode;
|
||||||
|
std::string comment;
|
||||||
|
OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment);
|
||||||
|
if (!(sceneItem && request.ValidateBoolean("sceneItemLocked", statusCode, comment)))
|
||||||
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
|
bool sceneItemLocked = request.RequestData["sceneItemLocked"];
|
||||||
|
|
||||||
|
obs_sceneitem_set_locked(sceneItem, sceneItemLocked);
|
||||||
|
|
||||||
|
return RequestResult::Success();
|
||||||
|
}
|
||||||
|
|
||||||
|
RequestResult RequestHandler::GetSceneItemIndex(const Request& request)
|
||||||
|
{
|
||||||
|
RequestStatus::RequestStatus statusCode;
|
||||||
|
std::string comment;
|
||||||
|
OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment);
|
||||||
|
if (!sceneItem)
|
||||||
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
|
json responseData;
|
||||||
|
responseData["sceneItemIndex"] = obs_sceneitem_get_order_position(sceneItem);
|
||||||
|
|
||||||
|
return RequestResult::Success(responseData);
|
||||||
|
}
|
||||||
|
|
||||||
|
RequestResult RequestHandler::SetSceneItemIndex(const Request& request)
|
||||||
|
{
|
||||||
|
RequestStatus::RequestStatus statusCode;
|
||||||
|
std::string comment;
|
||||||
|
OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment);
|
||||||
|
if (!(sceneItem && request.ValidateNumber("sceneItemIndex", statusCode, comment, 0, 8192)))
|
||||||
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
|
int sceneItemIndex = request.RequestData["sceneItemIndex"];
|
||||||
|
|
||||||
|
obs_sceneitem_set_order_position(sceneItem, sceneItemIndex);
|
||||||
|
|
||||||
|
return RequestResult::Success();
|
||||||
|
}
|
||||||
|
@ -116,15 +116,10 @@ RequestResult RequestHandler::GetSourceScreenshot(const Request& request)
|
|||||||
{
|
{
|
||||||
RequestStatus::RequestStatus statusCode;
|
RequestStatus::RequestStatus statusCode;
|
||||||
std::string comment;
|
std::string comment;
|
||||||
if (!(request.ValidateString("sourceName", statusCode, comment) && request.ValidateString("imageFormat", statusCode, comment)))
|
OBSSourceAutoRelease source = request.ValidateSource("sourceName", statusCode, comment);
|
||||||
|
if (!(source && request.ValidateString("imageFormat", statusCode, comment)))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
std::string sourceName = request.RequestData["sourceName"];
|
|
||||||
|
|
||||||
OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.c_str());
|
|
||||||
if (!source)
|
|
||||||
return RequestResult::Error(RequestStatus::ResourceNotFound);
|
|
||||||
|
|
||||||
if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT && obs_source_get_type(source) != OBS_SOURCE_TYPE_SCENE)
|
if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT && obs_source_get_type(source) != OBS_SOURCE_TYPE_SCENE)
|
||||||
return RequestResult::Error(RequestStatus::InvalidResourceType, "The specified source is not an input or a scene.");
|
return RequestResult::Error(RequestStatus::InvalidResourceType, "The specified source is not an input or a scene.");
|
||||||
|
|
||||||
@ -137,22 +132,22 @@ RequestResult RequestHandler::GetSourceScreenshot(const Request& request)
|
|||||||
uint32_t requestedHeight{0};
|
uint32_t requestedHeight{0};
|
||||||
int compressionQuality{-1};
|
int compressionQuality{-1};
|
||||||
|
|
||||||
if (request.RequestData.contains("imageWidth") && !request.RequestData["imageWidth"].is_null()) {
|
if (request.Contains("imageWidth")) {
|
||||||
if (!request.ValidateNumber("imageWidth", statusCode, comment, 8, 4096))
|
if (!request.ValidateOptionalNumber("imageWidth", statusCode, comment, 8, 4096))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
requestedWidth = request.RequestData["imageWidth"];
|
requestedWidth = request.RequestData["imageWidth"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.RequestData.contains("imageHeight") && !request.RequestData["imageHeight"].is_null()) {
|
if (request.Contains("imageHeight")) {
|
||||||
if (!request.ValidateNumber("imageHeight", statusCode, comment, 8, 4096))
|
if (!request.ValidateOptionalNumber("imageHeight", statusCode, comment, 8, 4096))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
requestedHeight = request.RequestData["imageHeight"];
|
requestedHeight = request.RequestData["imageHeight"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.RequestData.contains("imageCompressionQuality") && !request.RequestData["imageCompressionQuality"].is_null()) {
|
if (request.Contains("imageCompressionQuality")) {
|
||||||
if (!request.ValidateNumber("imageCompressionQuality", statusCode, comment, -1, 100))
|
if (!request.ValidateOptionalNumber("imageCompressionQuality", statusCode, comment, -1, 100))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
compressionQuality = request.RequestData["imageCompressionQuality"];
|
compressionQuality = request.RequestData["imageCompressionQuality"];
|
||||||
@ -184,43 +179,43 @@ RequestResult RequestHandler::SaveSourceScreenshot(const Request& request)
|
|||||||
{
|
{
|
||||||
RequestStatus::RequestStatus statusCode;
|
RequestStatus::RequestStatus statusCode;
|
||||||
std::string comment;
|
std::string comment;
|
||||||
if (!(request.ValidateString("sourceName", statusCode, comment) && request.ValidateString("imageFilePath", statusCode, comment) && request.ValidateString("imageFormat", statusCode, comment)))
|
OBSSourceAutoRelease source = request.ValidateSource("sourceName", statusCode, comment);
|
||||||
|
if (!(source && request.ValidateString("imageFormat", statusCode, comment) && request.ValidateString("imageFilePath", statusCode, comment)))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
std::string sourceName = request.RequestData["sourceName"];
|
|
||||||
|
|
||||||
OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.c_str());
|
|
||||||
if (!source)
|
|
||||||
return RequestResult::Error(RequestStatus::ResourceNotFound, "No source was found by that name.");
|
|
||||||
|
|
||||||
if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT && obs_source_get_type(source) != OBS_SOURCE_TYPE_SCENE)
|
if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT && obs_source_get_type(source) != OBS_SOURCE_TYPE_SCENE)
|
||||||
return RequestResult::Error(RequestStatus::InvalidResourceType, "The specified source is not an input or a scene.");
|
return RequestResult::Error(RequestStatus::InvalidResourceType, "The specified source is not an input or a scene.");
|
||||||
|
|
||||||
std::string imageFormat = request.RequestData["imageFormat"];
|
std::string imageFormat = request.RequestData["imageFormat"];
|
||||||
|
std::string imageFilePath = request.RequestData["imageFilePath"];
|
||||||
|
|
||||||
if (!IsImageFormatValid(imageFormat))
|
if (!IsImageFormatValid(imageFormat))
|
||||||
return RequestResult::Error(RequestStatus::InvalidRequestParameter, "Your specified image format is invalid or not supported by this system.");
|
return RequestResult::Error(RequestStatus::InvalidRequestParameter, "Your specified image format is invalid or not supported by this system.");
|
||||||
|
|
||||||
|
QFileInfo filePathInfo(QString::fromStdString(imageFilePath));
|
||||||
|
if (!filePathInfo.absoluteDir().exists())
|
||||||
|
return RequestResult::Error(RequestStatus::ResourceNotFound, "The directory for your file path does not exist.");
|
||||||
|
|
||||||
uint32_t requestedWidth{0};
|
uint32_t requestedWidth{0};
|
||||||
uint32_t requestedHeight{0};
|
uint32_t requestedHeight{0};
|
||||||
int compressionQuality{-1};
|
int compressionQuality{-1};
|
||||||
|
|
||||||
if (request.RequestData.contains("imageWidth") && !request.RequestData["imageWidth"].is_null()) {
|
if (request.Contains("imageWidth")) {
|
||||||
if (!request.ValidateNumber("imageWidth", statusCode, comment, 8, 4096))
|
if (!request.ValidateOptionalNumber("imageWidth", statusCode, comment, 8, 4096))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
requestedWidth = request.RequestData["imageWidth"];
|
requestedWidth = request.RequestData["imageWidth"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.RequestData.contains("imageHeight") && !request.RequestData["imageHeight"].is_null()) {
|
if (request.Contains("imageHeight")) {
|
||||||
if (!request.ValidateNumber("imageHeight", statusCode, comment, 8, 4096))
|
if (!request.ValidateOptionalNumber("imageHeight", statusCode, comment, 8, 4096))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
requestedHeight = request.RequestData["imageHeight"];
|
requestedHeight = request.RequestData["imageHeight"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.RequestData.contains("imageCompressionQuality") && !request.RequestData["imageCompressionQuality"].is_null()) {
|
if (request.Contains("imageCompressionQuality")) {
|
||||||
if (!request.ValidateNumber("imageCompressionQuality", statusCode, comment, -1, 100))
|
if (!request.ValidateOptionalNumber("imageCompressionQuality", statusCode, comment, -1, 100))
|
||||||
return RequestResult::Error(statusCode, comment);
|
return RequestResult::Error(statusCode, comment);
|
||||||
|
|
||||||
compressionQuality = request.RequestData["imageCompressionQuality"];
|
compressionQuality = request.RequestData["imageCompressionQuality"];
|
||||||
@ -232,12 +227,6 @@ RequestResult RequestHandler::SaveSourceScreenshot(const Request& request)
|
|||||||
if (!success)
|
if (!success)
|
||||||
return RequestResult::Error(RequestStatus::RequestProcessingFailed, "Failed to render screenshot.");
|
return RequestResult::Error(RequestStatus::RequestProcessingFailed, "Failed to render screenshot.");
|
||||||
|
|
||||||
std::string imageFilePath = request.RequestData["imageFilePath"];
|
|
||||||
|
|
||||||
QFileInfo filePathInfo(QString::fromStdString(imageFilePath));
|
|
||||||
if (!filePathInfo.absoluteDir().exists())
|
|
||||||
return RequestResult::Error(RequestStatus::ResourceNotFound, "The directory for your file path does not exist.");
|
|
||||||
|
|
||||||
QString absoluteFilePath = filePathInfo.absoluteFilePath();
|
QString absoluteFilePath = filePathInfo.absoluteFilePath();
|
||||||
|
|
||||||
if (!renderedImage.save(absoluteFilePath, imageFormat.c_str(), compressionQuality))
|
if (!renderedImage.save(absoluteFilePath, imageFormat.c_str(), compressionQuality))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user