toggleable repetition filter

This commit is contained in:
Akash Mozumdar 2019-02-04 15:53:13 -05:00
parent e6805a2be3
commit 4b7452bef2
5 changed files with 15 additions and 1 deletions

View File

@ -42,7 +42,7 @@ void TextThread::Push(const BYTE* data, int len)
lastPushTime = GetTickCount(); lastPushTime = GetTickCount();
if (std::all_of(buffer.begin(), buffer.end(), [&](wchar_t c) { return repeatingChars.count(c) > 0; })) buffer.clear(); if (std::all_of(buffer.begin(), buffer.end(), [&](wchar_t c) { return repeatingChars.count(c) > 0; })) buffer.clear();
if (Util::RemoveRepetition(buffer)) // sentence repetition detected, which means the entire sentence has already been received if (filterRepetition && Util::RemoveRepetition(buffer)) // sentence repetition detected, which means the entire sentence has already been received
{ {
repeatingChars = std::unordered_set(buffer.begin(), buffer.end()); repeatingChars = std::unordered_set(buffer.begin(), buffer.end());
AddSentence(buffer); AddSentence(buffer);

View File

@ -9,6 +9,7 @@ public:
using OutputCallback = std::function<bool(TextThread&, std::wstring&)>; using OutputCallback = std::function<bool(TextThread&, std::wstring&)>;
inline static OutputCallback Output; inline static OutputCallback Output;
inline static bool filterRepetition = true;
inline static int flushDelay = 400; // flush every 400ms by default inline static int flushDelay = 400; // flush every 400ms by default
inline static int maxBufferSize = 1000; inline static int maxBufferSize = 1000;

View File

@ -9,6 +9,7 @@
#include <winhttp.h> #include <winhttp.h>
#include <QFormLayout> #include <QFormLayout>
#include <QPushButton> #include <QPushButton>
#include <QCheckBox>
#include <QSpinBox> #include <QSpinBox>
#include <QMessageBox> #include <QMessageBox>
#include <QInputDialog> #include <QInputDialog>
@ -42,6 +43,7 @@ MainWindow::MainWindow(QWidget *parent) :
QSettings settings(CONFIG_FILE, QSettings::IniFormat); QSettings settings(CONFIG_FILE, QSettings::IniFormat);
if (settings.contains(WINDOW)) setGeometry(settings.value(WINDOW).toRect()); if (settings.contains(WINDOW)) setGeometry(settings.value(WINDOW).toRect());
TextThread::filterRepetition = settings.value(FILTER_REPETITION, TextThread::filterRepetition).toBool();
TextThread::flushDelay = settings.value(FLUSH_DELAY, TextThread::flushDelay).toInt(); TextThread::flushDelay = settings.value(FLUSH_DELAY, TextThread::flushDelay).toInt();
TextThread::maxBufferSize = settings.value(MAX_BUFFER_SIZE, TextThread::maxBufferSize).toInt(); TextThread::maxBufferSize = settings.value(MAX_BUFFER_SIZE, TextThread::maxBufferSize).toInt();
Host::defaultCodepage = settings.value(DEFAULT_CODEPAGE, Host::defaultCodepage).toInt(); Host::defaultCodepage = settings.value(DEFAULT_CODEPAGE, Host::defaultCodepage).toInt();
@ -311,6 +313,15 @@ void MainWindow::Settings()
layout->insertRow(0, label, spinBox); layout->insertRow(0, label, spinBox);
connect(save, &QPushButton::clicked, [=, &value] { settings->setValue(label, value = spinBox->value()); }); connect(save, &QPushButton::clicked, [=, &value] { settings->setValue(label, value = spinBox->value()); });
} }
for (auto[value, label] : Array<std::tuple<bool&, const char*>>{
{ TextThread::filterRepetition, FILTER_REPETITION },
})
{
auto checkBox = new QCheckBox(this);
checkBox->setChecked(value);
layout->insertRow(0, label, checkBox);
connect(save, &QPushButton::clicked, [=, &value] { settings->setValue(label, value = checkBox->isChecked()); });
}
connect(save, &QPushButton::clicked, this, &QDialog::accept); connect(save, &QPushButton::clicked, this, &QDialog::accept);
setWindowTitle(SETTINGS); setWindowTitle(SETTINGS);
exec(); exec();

View File

@ -18,6 +18,7 @@ extern const char* SAVE_SETTINGS;
extern const char* EXTEN_WINDOW_INSTRUCTIONS; extern const char* EXTEN_WINDOW_INSTRUCTIONS;
extern const char* WINDOW; extern const char* WINDOW;
extern const char* USE_JP_LOCALE; extern const char* USE_JP_LOCALE;
extern const char* FILTER_REPETITION;
extern const char* DEFAULT_CODEPAGE; extern const char* DEFAULT_CODEPAGE;
extern const char* FLUSH_DELAY; extern const char* FLUSH_DELAY;
extern const char* MAX_BUFFER_SIZE; extern const char* MAX_BUFFER_SIZE;

View File

@ -39,6 +39,7 @@ Drag and drop within the list to reorder
Press delete with an extension selected to remove it)"; Press delete with an extension selected to remove it)";
const char* WINDOW = u8"Window"; const char* WINDOW = u8"Window";
const char* USE_JP_LOCALE = u8"Emulate japanese locale?"; const char* USE_JP_LOCALE = u8"Emulate japanese locale?";
const char* FILTER_REPETITION = u8"Repetition Filter";
const char* DEFAULT_CODEPAGE = u8"Default Codepage"; const char* DEFAULT_CODEPAGE = u8"Default Codepage";
const char* FLUSH_DELAY = u8"Flush Delay"; const char* FLUSH_DELAY = u8"Flush Delay";
const char* MAX_BUFFER_SIZE = u8"Max Buffer Size"; const char* MAX_BUFFER_SIZE = u8"Max Buffer Size";