From e6dbc9bfdf71ae9b4872f0f8f8c85a014c155a3f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Lepin?= <stephane.lepin@gmail.com>
Date: Fri, 15 Nov 2019 19:24:26 +0100
Subject: [PATCH] WSRequestHandler(General): fixes

---
 src/WSRequestHandler_General.cpp | 82 ++++++++++++++++----------------
 1 file changed, 42 insertions(+), 40 deletions(-)

diff --git a/src/WSRequestHandler_General.cpp b/src/WSRequestHandler_General.cpp
index ecb3f48f..9b864af9 100644
--- a/src/WSRequestHandler_General.cpp
+++ b/src/WSRequestHandler_General.cpp
@@ -66,10 +66,10 @@ const char *describe_scale_type(int scale) {
  * @category general
  * @since 0.3
  */
-HandlerResponse WSRequestHandler::HandleGetVersion(WSRequestHandler* req) {
+RpcResponse WSRequestHandler::HandleGetVersion(const RpcRequest& request) {
 	QString obsVersion = Utils::OBSVersionString();
 
-	QList<QString> names = req->messageMap.keys();
+	QList<QString> names = messageMap.keys();
 	names.sort(Qt::CaseInsensitive);
 
 	// (Palakis) OBS' data arrays only support object arrays, so I improvised.
@@ -85,7 +85,7 @@ HandlerResponse WSRequestHandler::HandleGetVersion(WSRequestHandler* req) {
 	obs_data_set_string(data, "obs-studio-version", obsVersion.toUtf8());
 	obs_data_set_string(data, "available-requests", requests.toUtf8());
 
-	return req->SendOKResponse(data);
+	return RpcResponse::ok(request, data);
 }
 
 /**
@@ -101,7 +101,7 @@ HandlerResponse WSRequestHandler::HandleGetVersion(WSRequestHandler* req) {
  * @category general
  * @since 0.3
  */
-HandlerResponse WSRequestHandler::HandleGetAuthRequired(WSRequestHandler* req) {
+RpcResponse WSRequestHandler::HandleGetAuthRequired(const RpcRequest& request) {
 	bool authRequired = GetConfig()->AuthRequired;
 
 	OBSDataAutoRelease data = obs_data_create();
@@ -115,7 +115,7 @@ HandlerResponse WSRequestHandler::HandleGetAuthRequired(WSRequestHandler* req) {
 			config->Salt.toUtf8());
 	}
 
-	return req->SendOKResponse(data);
+	return RpcResponse::ok(request, data);
 }
 
 /**
@@ -128,26 +128,26 @@ HandlerResponse WSRequestHandler::HandleGetAuthRequired(WSRequestHandler* req) {
  * @category general
  * @since 0.3
  */
-HandlerResponse WSRequestHandler::HandleAuthenticate(WSRequestHandler* req) {
-	if (!req->hasField("auth")) {
-		return req->SendErrorResponse("missing request parameters");
+RpcResponse WSRequestHandler::HandleAuthenticate(const RpcRequest& request) {
+	if (!request.hasField("auth")) {
+		return RpcResponse::fail(request, "missing request parameters");
 	}
 
-	if (req->_connProperties.isAuthenticated()) {
-		return req->SendErrorResponse("already authenticated");
+	if (_connProperties.isAuthenticated()) {
+		return RpcResponse::fail(request, "already authenticated");
 	}
 
-	QString auth = obs_data_get_string(req->data, "auth");
+	QString auth = obs_data_get_string(request.parameters(), "auth");
 	if (auth.isEmpty()) {
-		return req->SendErrorResponse("auth not specified!");
+		return RpcResponse::fail(request, "auth not specified!");
 	}
 
 	if (GetConfig()->CheckAuth(auth) == false) {
-		return req->SendErrorResponse("Authentication Failed.");
+		return RpcResponse::fail(request, "Authentication Failed.");
 	}
 
-	req->_connProperties.setAuthenticated(true);
-	return req->SendOKResponse();
+	_connProperties.setAuthenticated(true);
+	return RpcResponse::ok(request);
 }
 
 /**
@@ -160,17 +160,17 @@ HandlerResponse WSRequestHandler::HandleAuthenticate(WSRequestHandler* req) {
  * @category general
  * @since 4.3.0
  */
-HandlerResponse WSRequestHandler::HandleSetHeartbeat(WSRequestHandler* req) {
-	if (!req->hasField("enable")) {
-		return req->SendErrorResponse("Heartbeat <enable> parameter missing");
+RpcResponse WSRequestHandler::HandleSetHeartbeat(const RpcRequest& request) {
+	if (!request.hasField("enable")) {
+		return RpcResponse::fail(request, "Heartbeat <enable> parameter missing");
 	}
 
 	auto events = GetEventsSystem();
-	events->HeartbeatIsActive = obs_data_get_bool(req->data, "enable");
+	events->HeartbeatIsActive = obs_data_get_bool(request.parameters(), "enable");
 
 	OBSDataAutoRelease response = obs_data_create();
 	obs_data_set_bool(response, "enable", events->HeartbeatIsActive);
-	return req->SendOKResponse(response);
+	return RpcResponse::ok(request, response);
 }
 
 /**
@@ -183,18 +183,18 @@ HandlerResponse WSRequestHandler::HandleSetHeartbeat(WSRequestHandler* req) {
  * @category general
  * @since 4.3.0
  */
-HandlerResponse WSRequestHandler::HandleSetFilenameFormatting(WSRequestHandler* req) {
-	if (!req->hasField("filename-formatting")) {
-		return req->SendErrorResponse("<filename-formatting> parameter missing");
+RpcResponse WSRequestHandler::HandleSetFilenameFormatting(const RpcRequest& request) {
+	if (!request.hasField("filename-formatting")) {
+		return RpcResponse::fail(request, "<filename-formatting> parameter missing");
 	}
 
-	QString filenameFormatting = obs_data_get_string(req->data, "filename-formatting");
+	QString filenameFormatting = obs_data_get_string(request.parameters(), "filename-formatting");
 	if (filenameFormatting.isEmpty()) {
-		return req->SendErrorResponse("invalid request parameters");
+		return RpcResponse::fail(request, "invalid request parameters");
 	}
 
 	Utils::SetFilenameFormatting(filenameFormatting.toUtf8());
-	return req->SendOKResponse();
+	return RpcResponse::ok(request);
 }
 
 /**
@@ -207,10 +207,10 @@ HandlerResponse WSRequestHandler::HandleSetFilenameFormatting(WSRequestHandler*
  * @category general
  * @since 4.3.0
  */
-HandlerResponse WSRequestHandler::HandleGetFilenameFormatting(WSRequestHandler* req) {
+RpcResponse WSRequestHandler::HandleGetFilenameFormatting(const RpcRequest& request) {
 	OBSDataAutoRelease response = obs_data_create();
 	obs_data_set_string(response, "filename-formatting", Utils::GetFilenameFormatting());
-	return req->SendOKResponse(response);
+	return RpcResponse::ok(request, response);
 }
 
 /**
@@ -223,12 +223,12 @@ HandlerResponse WSRequestHandler::HandleGetFilenameFormatting(WSRequestHandler*
  * @category general
  * @since 4.6.0
  */
-HandlerResponse WSRequestHandler::HandleGetStats(WSRequestHandler* req) {
+RpcResponse WSRequestHandler::HandleGetStats(const RpcRequest& request) {
 	OBSDataAutoRelease stats = GetEventsSystem()->GetStats();
 
 	OBSDataAutoRelease response = obs_data_create();
 	obs_data_set_obj(response, "stats", stats);
-	return req->SendOKResponse(response);
+	return RpcResponse::ok(request, response);
 }
 
 /**
@@ -242,26 +242,26 @@ HandlerResponse WSRequestHandler::HandleGetStats(WSRequestHandler* req) {
  * @category general
  * @since 4.7.0
  */
-HandlerResponse WSRequestHandler::HandleBroadcastCustomMessage(WSRequestHandler* req) {
-	if (!req->hasField("realm") || !req->hasField("data")) {
-		return req->SendErrorResponse("missing request parameters");
+RpcResponse WSRequestHandler::HandleBroadcastCustomMessage(const RpcRequest& request) {
+	if (!request.hasField("realm") || !request.hasField("data")) {
+		return RpcResponse::fail(request, "missing request parameters");
 	}
 
-	QString realm = obs_data_get_string(req->data, "realm");
-	OBSDataAutoRelease data = obs_data_get_obj(req->data, "data");
+	QString realm = obs_data_get_string(request.parameters(), "realm");
+	OBSDataAutoRelease data = obs_data_get_obj(request.parameters(), "data");
 
 	if (realm.isEmpty()) {
-		return req->SendErrorResponse("realm not specified!");
+		return RpcResponse::fail(request, "realm not specified!");
 	}
 
 	if (!data) {
-		return req->SendErrorResponse("data not specified!");
+		return RpcResponse::fail(request, "data not specified!");
 	}
 
 	auto events = GetEventsSystem();
 	events->OnBroadcastCustomMessage(realm, data);
 
-	return req->SendOKResponse();
+	return RpcResponse::ok(request);
 }
 
 
@@ -283,9 +283,10 @@ HandlerResponse WSRequestHandler::HandleBroadcastCustomMessage(WSRequestHandler*
  * @category general
  * @since 4.6.0 
  */
-HandlerResponse WSRequestHandler::HandleGetVideoInfo(WSRequestHandler* req) {
+RpcResponse WSRequestHandler::HandleGetVideoInfo(const RpcRequest& request) {
 	obs_video_info ovi;
 	obs_get_video_info(&ovi);
+
 	OBSDataAutoRelease response = obs_data_create();
 	obs_data_set_int(response, "baseWidth", ovi.base_width);
 	obs_data_set_int(response, "baseHeight", ovi.base_height);
@@ -296,5 +297,6 @@ HandlerResponse WSRequestHandler::HandleGetVideoInfo(WSRequestHandler* req) {
 	obs_data_set_string(response, "colorSpace", describe_color_space(ovi.colorspace));
 	obs_data_set_string(response, "colorRange", describe_color_range(ovi.range));
 	obs_data_set_string(response, "scaleType", describe_scale_type(ovi.scale_type));
-	return req->SendOKResponse(response);
+	
+	return RpcResponse::ok(request, response);
 }