From c3a2781c70d892ce909142ad8a55da835781113f Mon Sep 17 00:00:00 2001
From: Alexander Gavriliuk <alexandrgproductengine@lindenlab.com>
Date: Fri, 4 Aug 2023 01:05:40 +0200
Subject: [PATCH] SL-20078 Remove Google Translation UI (just fix error
 processing)

---
 indra/newview/lltranslate.cpp | 44 ++++++++++++++++-------------------
 1 file changed, 20 insertions(+), 24 deletions(-)

diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp
index c37c955e8de..9344eeb5738 100644
--- a/indra/newview/lltranslate.cpp
+++ b/indra/newview/lltranslate.cpp
@@ -253,7 +253,7 @@ void LLTranslationAPIHandler::translateMessageCoro(LanguagePair_t fromTo, std::s
 
     try
     {
-        res = this->parseResponse(httpResults, parseResult, body, translation, detected_lang, err_msg);
+        res = parseResponse(httpResults, parseResult, body, translation, detected_lang, err_msg);
     }
     catch (std::out_of_range&)
     {
@@ -293,8 +293,6 @@ void LLTranslationAPIHandler::translateMessageCoro(LanguagePair_t fromTo, std::s
         if (!failure.empty())
             failure(status, err_msg);
     }
-
-
 }
 
 //=========================================================================
@@ -353,7 +351,6 @@ class LLGoogleTranslationHandler : public LLTranslationAPIHandler
         std::string& translation,
         std::string& detected_lang);
     static std::string getAPIKey();
-
 };
 
 //-------------------------------------------------------------------------
@@ -391,36 +388,37 @@ bool LLGoogleTranslationHandler::checkVerificationResponse(
 
 // virtual
 bool LLGoogleTranslationHandler::parseResponse(
-    const LLSD& http_response,
+	const LLSD& http_response,
 	int& status,
 	const std::string& body,
 	std::string& translation,
 	std::string& detected_lang,
 	std::string& err_msg) const
 {
+	const std::string& text = !body.empty() ? body : http_response["error_body"].asStringRef();
+
 	Json::Value root;
 	Json::Reader reader;
 
-	if (!reader.parse(body, root))
+	if (reader.parse(text, root))
 	{
-		err_msg = reader.getFormatedErrorMessages();
-		return false;
+		if (root.isObject())
+		{
+			// Request succeeded, extract translation from the XML body.
+			if (parseTranslation(root, translation, detected_lang))
+				return true;
+
+			// Request failed. Extract error message from the XML body.
+			parseErrorResponse(root, status, err_msg);
+		}
 	}
-
-	if (!root.isObject()) // empty response? should not happen
+	else
 	{
-		return false;
-	}
-
-	if (status != HTTP_OK)
-	{
-		// Request failed. Extract error message from the response.
-		parseErrorResponse(root, status, err_msg);
-		return false;
+		// XML parsing failed. Extract error message from the XML parser.
+		err_msg = reader.getFormatedErrorMessages();
 	}
 
-	// Request succeeded, extract translation from the response.
-	return parseTranslation(root, translation, detected_lang);
+	return false;
 }
 
 // virtual
@@ -493,7 +491,7 @@ void LLGoogleTranslationHandler::verifyKey(const LLSD &key, LLTranslate::KeyVeri
 /*virtual*/
 void LLGoogleTranslationHandler::initHttpHeader(LLCore::HttpHeaders::ptr_t headers, const std::string& user_agent) const
 {
-    headers->append(HTTP_OUT_HEADER_ACCEPT, HTTP_CONTENT_TEXT_PLAIN);
+    headers->append(HTTP_OUT_HEADER_ACCEPT, HTTP_CONTENT_JSON);
     headers->append(HTTP_OUT_HEADER_USER_AGENT, user_agent);
 }
 
@@ -503,8 +501,7 @@ void LLGoogleTranslationHandler::initHttpHeader(
     const std::string& user_agent,
     const LLSD &key) const
 {
-    headers->append(HTTP_OUT_HEADER_ACCEPT, HTTP_CONTENT_TEXT_PLAIN);
-    headers->append(HTTP_OUT_HEADER_USER_AGENT, user_agent);
+    initHttpHeader(headers, user_agent);
 }
 
 LLSD LLGoogleTranslationHandler::sendMessageAndSuspend(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t adapter,
@@ -1314,5 +1311,4 @@ LLTranslationAPIHandler& LLTranslate::getHandler(EService service)
     }
 
     return azure;
-
 }
-- 
GitLab