This commit is contained in:
Akash Mozumdar 2019-02-16 22:43:31 -05:00
parent ef8783d82d
commit 8e40c71563
2 changed files with 13 additions and 5 deletions

View File

@ -94,12 +94,12 @@ std::wstring Translate(const std::wstring& text, std::wstring translateFrom, std
{ {
wchar_t escapedChar[4] = {}; wchar_t escapedChar[4] = {};
swprintf_s<4>(escapedChar, L"%%%02X", (int)ch); swprintf_s<4>(escapedChar, L"%%%02X", (int)ch);
escapedText = escapedChar; escapedText += escapedChar;
} }
std::wstring location = translateFrom.empty() std::wstring location = translateFrom.empty()
? L"/tdetect?text=" + text ? L"/tdetect?text=" + escapedText
: L"/ttranslate?from=" + translateFrom + L"&to=" + translateTo + L"&text=" + text; : L"/ttranslate?from=" + translateFrom + L"&to=" + translateTo + L"&text=" + escapedText;
std::wstring translation; std::wstring translation;
if (internet) if (internet)
if (InternetHandle connection = WinHttpConnect(internet, L"www.bing.com", INTERNET_DEFAULT_HTTPS_PORT, 0)) if (InternetHandle connection = WinHttpConnect(internet, L"www.bing.com", INTERNET_DEFAULT_HTTPS_PORT, 0))
@ -107,6 +107,7 @@ std::wstring Translate(const std::wstring& text, std::wstring translateFrom, std
if (WinHttpSendRequest(request, NULL, 0, NULL, 0, 0, NULL)) if (WinHttpSendRequest(request, NULL, 0, NULL, 0, 0, NULL))
if (auto response = ReceiveHttpRequest(request)) if (auto response = ReceiveHttpRequest(request))
if (translateFrom.empty()) translation = response.value(); if (translateFrom.empty()) translation = response.value();
// Response formatted as JSON: translation starts with :" and ends with "}
else if (std::wsmatch results; std::regex_search(response.value(), results, std::wregex(L":\"(.+)\"\\}"))) translation = results[1]; else if (std::wsmatch results; std::regex_search(response.value(), results, std::wregex(L":\"(.+)\"\\}"))) translation = results[1];
Escape(translation); Escape(translation);

View File

@ -151,14 +151,21 @@ bool ProcessSentence(std::wstring& sentence, SentenceInfo sentenceInfo)
if (InternetHandle request = WinHttpOpenRequest(connection, L"GET", GetTranslationUri(sentence, TKK).c_str(), NULL, NULL, NULL, WINHTTP_FLAG_ESCAPE_DISABLE | WINHTTP_FLAG_SECURE)) if (InternetHandle request = WinHttpOpenRequest(connection, L"GET", GetTranslationUri(sentence, TKK).c_str(), NULL, NULL, NULL, WINHTTP_FLAG_ESCAPE_DISABLE | WINHTTP_FLAG_SECURE))
if (WinHttpSendRequest(request, NULL, 0, NULL, 0, 0, NULL)) if (WinHttpSendRequest(request, NULL, 0, NULL, 0, 0, NULL))
if (auto response = ReceiveHttpRequest(request)) if (auto response = ReceiveHttpRequest(request))
// Response formatted as JSON: starts with [[["
if (response.value()[0] == L'[') if (response.value()[0] == L'[')
{
for (std::wsmatch results; std::regex_search(response.value(), results, std::wregex(L"\\[\"(.*?)\",[n\"]")); response = results.suffix()) for (std::wsmatch results; std::regex_search(response.value(), results, std::wregex(L"\\[\"(.*?)\",[n\"]")); response = results.suffix())
translation += std::wstring(results[1]) + L" "; translation += std::wstring(results[1]) + L" ";
else std::tie(translation, TKK) = std::tuple(TRANSLATION_ERROR + (L" (TKK=" + std::to_wstring(TKK) + L")"), 0); Escape(translation);
}
else
{
translation = TRANSLATION_ERROR + (L" (TKK=" + std::to_wstring(TKK) + L")");
TKK = 0;
}
} }
if (translation.empty()) translation = TRANSLATION_ERROR; if (translation.empty()) translation = TRANSLATION_ERROR;
Escape(translation);
sentence += L"\n" + translation; sentence += L"\n" + translation;
return true; return true;
} }