diff --git a/GUI/host/textthread.cc b/GUI/host/textthread.cc index 519e999..c29599a 100644 --- a/GUI/host/textthread.cc +++ b/GUI/host/textthread.cc @@ -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(); diff --git a/GUI/mainwindow.cpp b/GUI/mainwindow.cpp index 8e527b5..ad453dc 100644 --- a/GUI/mainwindow.cpp +++ b/GUI/mainwindow.cpp @@ -205,7 +205,7 @@ void MainWindow::on_hookButton_clicked() void MainWindow::on_unhookButton_clicked() { QVector 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(); } diff --git a/GUI/misc.cpp b/GUI/misc.cpp index 6332c85..20e3325 100644 --- a/GUI/misc.cpp +++ b/GUI/misc.cpp @@ -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(hp.module, moduleName.toStdWString().c_str()); diff --git a/extensions/bingtranslate.cpp b/extensions/bingtranslate.cpp index 0127104..8eb3df3 100644 --- a/extensions/bingtranslate.cpp +++ b/extensions/bingtranslate.cpp @@ -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; } \ No newline at end of file