forked from Public-Mirror/Textractor
extract http request and refactor == L""/.size() == 0
This commit is contained in:
parent
d71fe0f147
commit
8f60060e37
@ -28,7 +28,7 @@ void TextThread::Flush()
|
||||
std::wstring sentence;
|
||||
{
|
||||
LOCK(ttMutex);
|
||||
if (buffer.size() == 0) return;
|
||||
if (buffer.empty()) return;
|
||||
if (buffer.size() < maxBufferSize && GetTickCount() - timestamp < flushDelay) return;
|
||||
sentence = buffer;
|
||||
buffer.clear();
|
||||
|
@ -205,7 +205,7 @@ void MainWindow::on_hookButton_clicked()
|
||||
void MainWindow::on_unhookButton_clicked()
|
||||
{
|
||||
QVector<HookParam> hooks = GetAllHooks(GetSelectedProcessId());
|
||||
if (hooks.size() == 0) return Host::AddConsoleOutput(L"no hooks detected");
|
||||
if (hooks.empty()) return Host::AddConsoleOutput(L"no hooks detected");
|
||||
QStringList hookList;
|
||||
for (auto hook : hooks)
|
||||
hookList.push_back(
|
||||
@ -248,7 +248,7 @@ void MainWindow::on_addExtenButton_clicked()
|
||||
|
||||
void MainWindow::on_rmvExtenButton_clicked()
|
||||
{
|
||||
if (extenCombo->currentText().size() == 0) return;
|
||||
if (extenCombo->currentText() == "") return;
|
||||
UnloadExtension(extenCombo->currentText().split(":")[0].toInt());
|
||||
ReloadExtensions();
|
||||
}
|
||||
|
@ -201,7 +201,7 @@ namespace
|
||||
MEMORY_BASIC_INFORMATION info;
|
||||
if (!VirtualQueryEx(processHandle, (LPCVOID)hp.address, &info, sizeof(info))) goto fin;
|
||||
QString moduleName = GetModuleName(processId, (HMODULE)info.AllocationBase);
|
||||
if (moduleName.size() == 0) goto fin;
|
||||
if (moduleName == "") goto fin;
|
||||
hp.type |= MODULE_OFFSET;
|
||||
hp.address -= (uint64_t)info.AllocationBase;
|
||||
wcscpy_s<MAX_MODULE_SIZE>(hp.module, moduleName.toStdWString().c_str());
|
||||
|
@ -54,13 +54,46 @@ QStringList languages
|
||||
"Portuguese: pt"
|
||||
};
|
||||
|
||||
bool ProcessSentence(std::wstring& sentence, SentenceInfo sentenceInfo)
|
||||
// This function detects language and puts it in translateFrom if it's empty
|
||||
std::wstring Translate(std::wstring text, std::wstring& translateFrom, std::wstring translateTo)
|
||||
{
|
||||
static HINTERNET internet = NULL;
|
||||
if (!internet) internet = WinHttpOpen(L"Mozilla/5.0 Textractor", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, NULL, NULL, 0);
|
||||
|
||||
std::wstring translation;
|
||||
if (internet)
|
||||
{
|
||||
std::wstring location = translateFrom.empty()
|
||||
? L"/tdetect?text=" + text
|
||||
: L"/ttranslate?from=" + translateFrom + L"&to=" + translateTo + L"&text=" + text;
|
||||
if (HINTERNET connection = WinHttpConnect(internet, L"www.bing.com", INTERNET_DEFAULT_HTTPS_PORT, 0))
|
||||
{
|
||||
if (HINTERNET request = WinHttpOpenRequest(connection, L"POST", location.c_str(), NULL, NULL, NULL, WINHTTP_FLAG_ESCAPE_DISABLE | WINHTTP_FLAG_SECURE))
|
||||
{
|
||||
if (WinHttpSendRequest(request, NULL, 0, NULL, 0, 0, NULL))
|
||||
{
|
||||
DWORD bytesRead;
|
||||
char buffer[10000] = {};
|
||||
WinHttpReceiveResponse(request, NULL);
|
||||
WinHttpReadData(request, buffer, 10000, &bytesRead);
|
||||
wchar_t wbuffer[10000] = {};
|
||||
MultiByteToWideChar(CP_UTF8, 0, buffer, -1, wbuffer, 10000);
|
||||
if (translateFrom.empty()) translateFrom = wbuffer;
|
||||
// Response formatted as JSON: translation starts with :" and ends with "}
|
||||
if (std::wcmatch results; std::regex_search(wbuffer, results, std::wregex(L":\"(.+)\"\\}"))) translation = results[1];
|
||||
}
|
||||
WinHttpCloseHandle(request);
|
||||
}
|
||||
WinHttpCloseHandle(connection);
|
||||
}
|
||||
}
|
||||
return translation;
|
||||
}
|
||||
|
||||
bool ProcessSentence(std::wstring& sentence, SentenceInfo sentenceInfo)
|
||||
{
|
||||
static std::wstring translateTo;
|
||||
if (translateTo == L"" && QApplication::instance()->thread() == QThread::currentThread())
|
||||
if (translateTo.empty() && QApplication::instance()->thread() == QThread::currentThread())
|
||||
{
|
||||
languages.sort();
|
||||
bool ok;
|
||||
@ -73,59 +106,10 @@ bool ProcessSentence(std::wstring& sentence, SentenceInfo sentenceInfo)
|
||||
|
||||
std::wstring translation;
|
||||
std::wstring translateFrom;
|
||||
|
||||
if (internet)
|
||||
{
|
||||
if (HINTERNET connection = WinHttpConnect(internet, L"www.bing.com", INTERNET_DEFAULT_HTTPS_PORT, 0))
|
||||
{
|
||||
if (HINTERNET request = WinHttpOpenRequest(
|
||||
connection, L"POST",
|
||||
(L"/tdetect?text=" + sentence).c_str(),
|
||||
NULL, NULL, NULL,
|
||||
WINHTTP_FLAG_ESCAPE_DISABLE | WINHTTP_FLAG_SECURE
|
||||
))
|
||||
{
|
||||
if (WinHttpSendRequest(request, NULL, 0, NULL, 0, 0, NULL))
|
||||
{
|
||||
DWORD bytesRead;
|
||||
char buffer[10000] = {};
|
||||
WinHttpReceiveResponse(request, NULL);
|
||||
WinHttpReadData(request, buffer, 10000, &bytesRead);
|
||||
translateFrom = std::wstring(buffer, buffer + bytesRead);
|
||||
}
|
||||
WinHttpCloseHandle(request);
|
||||
}
|
||||
|
||||
if (HINTERNET request = WinHttpOpenRequest(
|
||||
connection,
|
||||
L"POST",
|
||||
(L"/ttranslate?from=" + translateFrom + L"&to=" + translateTo + L"&text=" + sentence).c_str(),
|
||||
NULL, NULL, NULL,
|
||||
WINHTTP_FLAG_ESCAPE_DISABLE | WINHTTP_FLAG_SECURE
|
||||
))
|
||||
{
|
||||
if (WinHttpSendRequest(request, NULL, 0, NULL, 0, 0, NULL))
|
||||
{
|
||||
DWORD bytesRead;
|
||||
char buffer[10000] = {};
|
||||
WinHttpReceiveResponse(request, NULL);
|
||||
WinHttpReadData(request, buffer, 10000, &bytesRead);
|
||||
// Response formatted as JSON: starts with '{'
|
||||
if (buffer[0] == '{')
|
||||
{
|
||||
wchar_t wbuffer[10000] = {};
|
||||
MultiByteToWideChar(CP_UTF8, 0, buffer, -1, wbuffer, 10000);
|
||||
if (std::wcmatch results; std::regex_search(wbuffer, results, std::wregex(L":\"(.+)\"\\}"))) translation = results[1];
|
||||
for (auto& c : translation) if (c == L'\\') c = 0x200b;
|
||||
}
|
||||
}
|
||||
WinHttpCloseHandle(request);
|
||||
}
|
||||
WinHttpCloseHandle(connection);
|
||||
}
|
||||
}
|
||||
|
||||
if (translation == L"") translation = L"Error while translating.";
|
||||
Translate(sentence, translateFrom, translateTo);
|
||||
translation = Translate(sentence, translateFrom, translateTo);
|
||||
for (auto& c : translation) if (c == L'\\') c = 0x200b;
|
||||
if (translation.empty()) translation = L"Error while translating.";
|
||||
sentence += L"\r\n" + translation;
|
||||
return true;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user