35 lines
964 B
C++
35 lines
964 B
C++
#include "humanizerkeyhandler.h"
|
|
#include <unistd.h>
|
|
|
|
HumanizerKeyHandler::HumanizerKeyHandler(std::unique_ptr<KeyHandler> keyHandler)
|
|
: m_keyHandler(std::move(keyHandler))
|
|
{
|
|
}
|
|
|
|
void HumanizerKeyHandler::Key(SpecialKey key, KeyModifiers mods)
|
|
{
|
|
m_keyHandler->Key(key, mods);
|
|
InsertDelay(0, key, mods);
|
|
}
|
|
|
|
void HumanizerKeyHandler::Key(char key, KeyModifiers mods)
|
|
{
|
|
m_keyHandler->Key(key, mods);
|
|
InsertDelay(key, SpecialKey::NONE, mods);
|
|
}
|
|
|
|
void HumanizerKeyHandler::InsertDelay(char, SpecialKey currentKeySpecial, KeyModifiers mods)
|
|
{
|
|
unsigned delay = minDelay + static_cast<unsigned>(rand()) % (maxDelay - minDelay);
|
|
if (currentKeySpecial == SpecialKey::RETURN) {
|
|
delay = delay * 2;
|
|
}
|
|
if (mods & KeyModifiers::KM_SHIFT_MASK) {
|
|
delay = (delay * 3) / 2;
|
|
}
|
|
if (currentKeySpecial == SpecialKey::HOME || currentKeySpecial == SpecialKey::END) {
|
|
delay = (delay * 3);
|
|
}
|
|
usleep(1000 * delay);
|
|
}
|