forked from Public-Mirror/Textractor
improve ui for rate limiter
This commit is contained in:
parent
ac95d873f1
commit
a566818ad4
@ -193,7 +193,7 @@ extern const std::unordered_map<std::wstring, std::wstring> codes
|
|||||||
};
|
};
|
||||||
|
|
||||||
bool translateSelectedOnly = false, rateLimitAll = true, rateLimitSelected = false, useCache = true, useFilter = true;
|
bool translateSelectedOnly = false, rateLimitAll = true, rateLimitSelected = false, useCache = true, useFilter = true;
|
||||||
int tokenCount = 30, tokenRestoreDelay = 60000, maxSentenceSize = 1000;
|
int tokenCount = 30, rateLimitTimespan = 60000, maxSentenceSize = 1000;
|
||||||
|
|
||||||
std::pair<bool, std::wstring> Translate(const std::wstring& text, TranslationParam tlp)
|
std::pair<bool, std::wstring> Translate(const std::wstring& text, TranslationParam tlp)
|
||||||
{
|
{
|
||||||
|
@ -98,7 +98,7 @@ extern const std::unordered_map<std::wstring, std::wstring> codes
|
|||||||
};
|
};
|
||||||
|
|
||||||
bool translateSelectedOnly = true, rateLimitAll = true, rateLimitSelected = true, useCache = true, useFilter = true;
|
bool translateSelectedOnly = true, rateLimitAll = true, rateLimitSelected = true, useCache = true, useFilter = true;
|
||||||
int tokenCount = 10, tokenRestoreDelay = 60000, maxSentenceSize = 1000;
|
int tokenCount = 10, rateLimitTimespan = 60000, maxSentenceSize = 1000;
|
||||||
|
|
||||||
enum KeyType { CAT, REST };
|
enum KeyType { CAT, REST };
|
||||||
int keyType = REST;
|
int keyType = REST;
|
||||||
|
@ -98,7 +98,7 @@ extern const std::unordered_map<std::wstring, std::wstring> codes
|
|||||||
};
|
};
|
||||||
|
|
||||||
bool translateSelectedOnly = true, rateLimitAll = false, rateLimitSelected = false, useCache = true, useFilter = true;
|
bool translateSelectedOnly = true, rateLimitAll = false, rateLimitSelected = false, useCache = true, useFilter = true;
|
||||||
int tokenCount = 30, tokenRestoreDelay = 60000, maxSentenceSize = 2500;
|
int tokenCount = 30, rateLimitTimespan = 60000, maxSentenceSize = 2500;
|
||||||
|
|
||||||
BOOL WINAPI DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
|
BOOL WINAPI DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
|
||||||
{
|
{
|
||||||
|
@ -47,7 +47,7 @@ extern const std::unordered_map<std::wstring, std::wstring> codes
|
|||||||
};
|
};
|
||||||
|
|
||||||
bool translateSelectedOnly = true, rateLimitAll = false, rateLimitSelected = false, useCache = true, useFilter = true;
|
bool translateSelectedOnly = true, rateLimitAll = false, rateLimitSelected = false, useCache = true, useFilter = true;
|
||||||
int tokenCount = 30, tokenRestoreDelay = 60000, maxSentenceSize = 2500;
|
int tokenCount = 30, rateLimitTimespan = 60000, maxSentenceSize = 2500;
|
||||||
|
|
||||||
BOOL WINAPI DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
|
BOOL WINAPI DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
|
||||||
{
|
{
|
||||||
|
@ -113,7 +113,7 @@ extern const std::unordered_map<std::wstring, std::wstring> codes
|
|||||||
};
|
};
|
||||||
|
|
||||||
bool translateSelectedOnly = true, rateLimitAll = false, rateLimitSelected = false, useCache = true, useFilter = true;
|
bool translateSelectedOnly = true, rateLimitAll = false, rateLimitSelected = false, useCache = true, useFilter = true;
|
||||||
int tokenCount = 30, tokenRestoreDelay = 60000, maxSentenceSize = 2500;
|
int tokenCount = 30, rateLimitTimespan = 60000, maxSentenceSize = 2500;
|
||||||
|
|
||||||
BOOL WINAPI DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
|
BOOL WINAPI DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
|
||||||
{
|
{
|
||||||
|
@ -233,7 +233,7 @@ extern const std::unordered_map<std::wstring, std::wstring> codes
|
|||||||
};
|
};
|
||||||
|
|
||||||
bool translateSelectedOnly = false, rateLimitAll = true, rateLimitSelected = false, useCache = true, useFilter = true;
|
bool translateSelectedOnly = false, rateLimitAll = true, rateLimitSelected = false, useCache = true, useFilter = true;
|
||||||
int tokenCount = 30, tokenRestoreDelay = 60000, maxSentenceSize = 1000;
|
int tokenCount = 30, rateLimitTimespan = 60000, maxSentenceSize = 1000;
|
||||||
|
|
||||||
std::pair<bool, std::wstring> Translate(const std::wstring& text, TranslationParam tlp)
|
std::pair<bool, std::wstring> Translate(const std::wstring& text, TranslationParam tlp)
|
||||||
{
|
{
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include "translatewrapper.h"
|
#include "translatewrapper.h"
|
||||||
#include "blockmarkup.h"
|
#include "blockmarkup.h"
|
||||||
#include "network.h"
|
#include "network.h"
|
||||||
|
#include <concurrent_priority_queue.h>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
@ -15,8 +16,8 @@ extern const char* RATE_LIMIT_ALL_THREADS;
|
|||||||
extern const char* RATE_LIMIT_SELECTED_THREAD;
|
extern const char* RATE_LIMIT_SELECTED_THREAD;
|
||||||
extern const char* USE_TRANS_CACHE;
|
extern const char* USE_TRANS_CACHE;
|
||||||
extern const char* FILTER_GARBAGE;
|
extern const char* FILTER_GARBAGE;
|
||||||
extern const char* RATE_LIMIT_TOKEN_COUNT;
|
extern const char* MAX_TRANSLATIONS_IN_TIMESPAN;
|
||||||
extern const char* RATE_LIMIT_TOKEN_RESTORE_DELAY;
|
extern const char* TIMESPAN;
|
||||||
extern const char* MAX_SENTENCE_SIZE;
|
extern const char* MAX_SENTENCE_SIZE;
|
||||||
extern const char* API_KEY;
|
extern const char* API_KEY;
|
||||||
extern const wchar_t* TOO_MANY_TRANS_REQUESTS;
|
extern const wchar_t* TOO_MANY_TRANS_REQUESTS;
|
||||||
@ -25,7 +26,7 @@ extern const char* TRANSLATION_PROVIDER;
|
|||||||
extern const char* GET_API_KEY_FROM;
|
extern const char* GET_API_KEY_FROM;
|
||||||
extern const QStringList languagesTo, languagesFrom;
|
extern const QStringList languagesTo, languagesFrom;
|
||||||
extern bool translateSelectedOnly, rateLimitAll, rateLimitSelected, useCache, useFilter;
|
extern bool translateSelectedOnly, rateLimitAll, rateLimitSelected, useCache, useFilter;
|
||||||
extern int tokenCount, tokenRestoreDelay, maxSentenceSize;
|
extern int tokenCount, rateLimitTimespan, maxSentenceSize;
|
||||||
std::pair<bool, std::wstring> Translate(const std::wstring& text, TranslationParam tlp);
|
std::pair<bool, std::wstring> Translate(const std::wstring& text, TranslationParam tlp);
|
||||||
|
|
||||||
const std::string TRANSLATION_CACHE_FILE = FormatString("%s Translation Cache.txt", TRANSLATION_PROVIDER);
|
const std::string TRANSLATION_CACHE_FILE = FormatString("%s Translation Cache.txt", TRANSLATION_PROVIDER);
|
||||||
@ -92,8 +93,8 @@ public:
|
|||||||
connect(checkBox, &QCheckBox::clicked, [label, &value](bool checked) { settings.setValue(label, value = checked); });
|
connect(checkBox, &QCheckBox::clicked, [label, &value](bool checked) { settings.setValue(label, value = checked); });
|
||||||
}
|
}
|
||||||
for (auto [value, label] : Array<int&, const char*>{
|
for (auto [value, label] : Array<int&, const char*>{
|
||||||
{ tokenCount, RATE_LIMIT_TOKEN_COUNT },
|
{ tokenCount, MAX_TRANSLATIONS_IN_TIMESPAN },
|
||||||
{ tokenRestoreDelay, RATE_LIMIT_TOKEN_RESTORE_DELAY },
|
{ rateLimitTimespan, TIMESPAN },
|
||||||
{ maxSentenceSize, MAX_SENTENCE_SIZE },
|
{ maxSentenceSize, MAX_SENTENCE_SIZE },
|
||||||
})
|
})
|
||||||
{
|
{
|
||||||
@ -153,15 +154,18 @@ bool ProcessSentence(std::wstring& sentence, SentenceInfo sentenceInfo)
|
|||||||
public:
|
public:
|
||||||
bool Request()
|
bool Request()
|
||||||
{
|
{
|
||||||
auto tokens = this->tokens.Acquire();
|
DWORD current = GetTickCount(), token;
|
||||||
tokens->push_back(GetTickCount());
|
while (tokens.try_pop(token)) if (token > current - rateLimitTimespan)
|
||||||
if (tokens->size() > tokenCount * 5) tokens->erase(tokens->begin(), tokens->begin() + tokenCount * 3);
|
{
|
||||||
tokens->erase(std::remove_if(tokens->begin(), tokens->end(), [](DWORD token) { return GetTickCount() - token > tokenRestoreDelay; }), tokens->end());
|
tokens.push(token); // popped one too many
|
||||||
return tokens->size() < tokenCount;
|
break;
|
||||||
|
}
|
||||||
|
tokens.push(current);
|
||||||
|
return tokens.size() < tokenCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Synchronized<std::vector<DWORD>> tokens;
|
concurrency::concurrent_priority_queue<DWORD, std::greater<DWORD>> tokens;
|
||||||
} rateLimiter;
|
} rateLimiter;
|
||||||
|
|
||||||
auto Trim = [](std::wstring& text)
|
auto Trim = [](std::wstring& text)
|
||||||
|
20
text.cpp
20
text.cpp
@ -141,8 +141,8 @@ const char* TRANSLATE_SELECTED_THREAD_ONLY = u8"Translate selected text thread o
|
|||||||
const char* RATE_LIMIT_ALL_THREADS = u8"Rate limit all text threads";
|
const char* RATE_LIMIT_ALL_THREADS = u8"Rate limit all text threads";
|
||||||
const char* RATE_LIMIT_SELECTED_THREAD = u8"Rate limit selected text thread";
|
const char* RATE_LIMIT_SELECTED_THREAD = u8"Rate limit selected text thread";
|
||||||
const char* USE_TRANS_CACHE = u8"Use translation cache";
|
const char* USE_TRANS_CACHE = u8"Use translation cache";
|
||||||
const char* RATE_LIMIT_TOKEN_COUNT = u8"Rate limiter token count";
|
const char* MAX_TRANSLATIONS_IN_TIMESPAN = u8"Max translation requests in timespan";
|
||||||
const char* RATE_LIMIT_TOKEN_RESTORE_DELAY = u8"Rate limiter token restore delay (ms)";
|
const char* TIMESPAN = u8"Timespan (ms)";
|
||||||
const wchar_t* TOO_MANY_TRANS_REQUESTS = L"Rate limit exceeded: refuse to make more translation requests";
|
const wchar_t* TOO_MANY_TRANS_REQUESTS = L"Rate limit exceeded: refuse to make more translation requests";
|
||||||
const wchar_t* TRANSLATION_ERROR = L"Error while translating";
|
const wchar_t* TRANSLATION_ERROR = L"Error while translating";
|
||||||
const char* USE_PREV_SENTENCE_CONTEXT = u8"Use previous sentence as context";
|
const char* USE_PREV_SENTENCE_CONTEXT = u8"Use previous sentence as context";
|
||||||
@ -418,8 +418,8 @@ Clic y arrastra los bordes de la ventana para moverla, o en la esquina inferior
|
|||||||
RATE_LIMIT_ALL_THREADS = u8"限制所有文本线程的请求频率";
|
RATE_LIMIT_ALL_THREADS = u8"限制所有文本线程的请求频率";
|
||||||
RATE_LIMIT_SELECTED_THREAD = u8"限制当前选择线程的请求频率";
|
RATE_LIMIT_SELECTED_THREAD = u8"限制当前选择线程的请求频率";
|
||||||
USE_TRANS_CACHE = u8"使用缓存的翻译结果";
|
USE_TRANS_CACHE = u8"使用缓存的翻译结果";
|
||||||
RATE_LIMIT_TOKEN_COUNT = u8"限流器令牌数";
|
MAX_TRANSLATIONS_IN_TIMESPAN = u8"限流器令牌数";
|
||||||
RATE_LIMIT_TOKEN_RESTORE_DELAY = u8"限流器令牌重置时间 (ms)";
|
TIMESPAN = u8"限流器令牌重置时间 (ms)";
|
||||||
TOO_MANY_TRANS_REQUESTS = L"太多翻译请求: 拒绝生成更多";
|
TOO_MANY_TRANS_REQUESTS = L"太多翻译请求: 拒绝生成更多";
|
||||||
TRANSLATION_ERROR = L"翻译时出错";
|
TRANSLATION_ERROR = L"翻译时出错";
|
||||||
USE_PREV_SENTENCE_CONTEXT = u8"使用之前的句子作为上下文";
|
USE_PREV_SENTENCE_CONTEXT = u8"使用之前的句子作为上下文";
|
||||||
@ -593,8 +593,8 @@ padding: длина добавочных данных перед строкой
|
|||||||
RATE_LIMIT_ALL_THREADS = u8"Ограничение скорости для всех текстовых потоков";
|
RATE_LIMIT_ALL_THREADS = u8"Ограничение скорости для всех текстовых потоков";
|
||||||
RATE_LIMIT_SELECTED_THREAD = u8"Ограничение скорости выделенного текстового потока";
|
RATE_LIMIT_SELECTED_THREAD = u8"Ограничение скорости выделенного текстового потока";
|
||||||
USE_TRANS_CACHE = u8"Использовать кеш перевода";
|
USE_TRANS_CACHE = u8"Использовать кеш перевода";
|
||||||
RATE_LIMIT_TOKEN_COUNT = u8"Ограничение частоты подсчёта токенов";
|
MAX_TRANSLATIONS_IN_TIMESPAN = u8"Ограничение частоты подсчёта токенов";
|
||||||
RATE_LIMIT_TOKEN_RESTORE_DELAY = u8"Ограничение частоты задержки восстановления токенов (мс)";
|
TIMESPAN = u8"Ограничение частоты задержки восстановления токенов (мс)";
|
||||||
TOO_MANY_TRANS_REQUESTS = L"Слишком много запросов для перевода: отклонено";
|
TOO_MANY_TRANS_REQUESTS = L"Слишком много запросов для перевода: отклонено";
|
||||||
TRANSLATION_ERROR = L"Ошибка при переводе";
|
TRANSLATION_ERROR = L"Ошибка при переводе";
|
||||||
USE_PREV_SENTENCE_CONTEXT = u8"Использовать предыдущее предложение как контекст";
|
USE_PREV_SENTENCE_CONTEXT = u8"Использовать предыдущее предложение как контекст";
|
||||||
@ -852,8 +852,8 @@ esempio: Textractor -p4466 -p"My Game.exe" sta tentando di inniettare i processi
|
|||||||
RATE_LIMIT_ALL_THREADS = u8"Rate limit tutti i thread del testo";
|
RATE_LIMIT_ALL_THREADS = u8"Rate limit tutti i thread del testo";
|
||||||
RATE_LIMIT_SELECTED_THREAD = u8"Rate limit thread del testo selezionato";
|
RATE_LIMIT_SELECTED_THREAD = u8"Rate limit thread del testo selezionato";
|
||||||
USE_TRANS_CACHE = u8"Utilizza la cache di traduzione";
|
USE_TRANS_CACHE = u8"Utilizza la cache di traduzione";
|
||||||
RATE_LIMIT_TOKEN_COUNT = u8"Numero di token del Rate Limit";
|
MAX_TRANSLATIONS_IN_TIMESPAN = u8"Numero di token del Rate Limit";
|
||||||
RATE_LIMIT_TOKEN_RESTORE_DELAY = u8"Token del rate limit ripristina il ritardo (ms)";
|
TIMESPAN = u8"Token del rate limit ripristina il ritardo (ms)";
|
||||||
TOO_MANY_TRANS_REQUESTS = L"Rate limit superato: rifiuta per fare altre richieste di traduzione";
|
TOO_MANY_TRANS_REQUESTS = L"Rate limit superato: rifiuta per fare altre richieste di traduzione";
|
||||||
TRANSLATION_ERROR = L"Errore durante la traduzione";
|
TRANSLATION_ERROR = L"Errore durante la traduzione";
|
||||||
USE_PREV_SENTENCE_CONTEXT = u8"Utilizza la precedente sentenza come contesto";
|
USE_PREV_SENTENCE_CONTEXT = u8"Utilizza la precedente sentenza come contesto";
|
||||||
@ -1272,8 +1272,8 @@ example: Textractor -p4466 -p"My Game.exe" tries to inject processes with id 446
|
|||||||
RATE_LIMIT_ALL_THREADS = u8"Taux limite tout les threads de texte";
|
RATE_LIMIT_ALL_THREADS = u8"Taux limite tout les threads de texte";
|
||||||
RATE_LIMIT_SELECTED_THREAD = u8"Limite de débit du thread de texte sélectionné";
|
RATE_LIMIT_SELECTED_THREAD = u8"Limite de débit du thread de texte sélectionné";
|
||||||
USE_TRANS_CACHE = u8"Utiliser le cache de traduction";
|
USE_TRANS_CACHE = u8"Utiliser le cache de traduction";
|
||||||
RATE_LIMIT_TOKEN_COUNT = u8"Nombre de tokens du limiteur de débit";
|
MAX_TRANSLATIONS_IN_TIMESPAN = u8"Nombre de tokens du limiteur de débit";
|
||||||
RATE_LIMIT_TOKEN_RESTORE_DELAY = u8"Délai de restauration du token du limiteur de débit (ms)";
|
TIMESPAN = u8"Délai de restauration du token du limiteur de débit (ms)";
|
||||||
TOO_MANY_TRANS_REQUESTS = L"Limite de taux dépassée: refus de faire plus de demande de traduction";
|
TOO_MANY_TRANS_REQUESTS = L"Limite de taux dépassée: refus de faire plus de demande de traduction";
|
||||||
TRANSLATION_ERROR = L"Une erreur est survenue pendant la traduction";
|
TRANSLATION_ERROR = L"Une erreur est survenue pendant la traduction";
|
||||||
USE_PREV_SENTENCE_CONTEXT = u8"Utiliser la phrase précédente comme contexte";
|
USE_PREV_SENTENCE_CONTEXT = u8"Utiliser la phrase précédente comme contexte";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user