mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-10-11 13:08:40 -04:00
extract syntax checking methods as static methods to the Autotype class
This commit is contained in:
parent
2bf68b7970
commit
70127bad4b
3 changed files with 51 additions and 62 deletions
|
@ -692,3 +692,43 @@ bool AutoType::windowMatchesUrl(const QString& windowTitle, const QString& resol
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AutoType::checkSynatx(const QString &string)
|
||||||
|
{
|
||||||
|
//checks things like {word 23}{F1 23}{~ 23}{% 23}{^}{F12}{(}{) 23}{[}{[}{]}{Delay=23}{+}{-}~+%@fixedstring
|
||||||
|
QString allowRepetition = "(\\s[0-9]*){0,1}";
|
||||||
|
QString normalCommands = "[A-Z]*" + allowRepetition;
|
||||||
|
QString specialLiterals = "[\\^\\%\\(\\)~\\{\\}\\[\\]\\+-]" + allowRepetition;
|
||||||
|
QString functionKeys = "(F[1-9]" + allowRepetition + "|F1[0-2])" + allowRepetition;
|
||||||
|
QString numpad = "NUMPAD[0-9]" + allowRepetition;
|
||||||
|
QString delay = "DELAY=[0-9]+";
|
||||||
|
QString beep = "BEEP\\s[0-9]*\\s[0-9]*";
|
||||||
|
QString vkey = "VKEY(-[EN]X){0,1}" + allowRepetition;
|
||||||
|
|
||||||
|
//these arent in parenthesis
|
||||||
|
QString shortcutKeys = "[\\^\\%~\\+@]";
|
||||||
|
QString fixedStrings = "[^\\^\\%~\\+@\\{\\}]*";
|
||||||
|
|
||||||
|
QRegExp autoTypeSyntax
|
||||||
|
("(" + shortcutKeys + "|" + fixedStrings + "|\\{(" + normalCommands + "|" + specialLiterals + "|"
|
||||||
|
+ functionKeys
|
||||||
|
+ "|" + numpad + "|" + delay + "|" + beep + "|" + vkey + ")\\})*");
|
||||||
|
autoTypeSyntax.setCaseSensitivity(Qt::CaseInsensitive);
|
||||||
|
autoTypeSyntax.setPatternSyntax(QRegExp::RegExp);
|
||||||
|
return autoTypeSyntax.exactMatch(string);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AutoType::checkHighDelay(const QString &string)
|
||||||
|
{
|
||||||
|
QRegExp highDelay(".*\\{Delay\\s[0-9]{5,}\\}.*"); //the 3 means 3 digitnumbers are too much
|
||||||
|
highDelay.setCaseSensitivity(Qt::CaseInsensitive);
|
||||||
|
highDelay.setPatternSyntax(QRegExp::RegExp);
|
||||||
|
return highDelay.exactMatch(string);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AutoType::checkHighRepetition(const QString &string)
|
||||||
|
{
|
||||||
|
QRegExp highRepetition(".*\\s[0-9]{3,}.*");
|
||||||
|
highRepetition.setPatternSyntax(QRegExp::RegExp);
|
||||||
|
return highRepetition.exactMatch(string);
|
||||||
|
}
|
||||||
|
|
|
@ -34,6 +34,7 @@ class AutoType : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QStringList windowTitles();
|
QStringList windowTitles();
|
||||||
void performAutoType(const Entry* entry, QWidget* hideWindow = nullptr,
|
void performAutoType(const Entry* entry, QWidget* hideWindow = nullptr,
|
||||||
|
@ -41,6 +42,9 @@ public:
|
||||||
bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers);
|
bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers);
|
||||||
void unregisterGlobalShortcut();
|
void unregisterGlobalShortcut();
|
||||||
int callEventFilter(void* event);
|
int callEventFilter(void* event);
|
||||||
|
static bool checkSynatx(const QString &string);
|
||||||
|
static bool checkHighRepetition(const QString &string);
|
||||||
|
static bool checkHighDelay(const QString &string);
|
||||||
|
|
||||||
inline bool isAvailable() {
|
inline bool isAvailable() {
|
||||||
return m_plugin;
|
return m_plugin;
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include <QMimeData>
|
#include <QMimeData>
|
||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <autotype/AutoType.h>
|
||||||
|
|
||||||
#include "core/Config.h"
|
#include "core/Config.h"
|
||||||
#include "core/Database.h"
|
#include "core/Database.h"
|
||||||
|
@ -765,73 +766,17 @@ void EditEntryWidget::updateEntryData(Entry* entry) const
|
||||||
entry->setDefaultAutoTypeSequence(QString());
|
entry->setDefaultAutoTypeSequence(QString());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//checks things like {word 23}{F1 23}{~ 23}{% 23}{^}{F12}{(}{) 23}{[}{[}{]}{Delay=23}{+}{-}~+%@fixedstring
|
if (!AutoType::checkSynatx(m_autoTypeUi->sequenceEdit->text())) {
|
||||||
|
|
||||||
QString allowRepetition = "(\\s[0-9]*){0,1}";
|
|
||||||
QString normalCommands = "[A-Z]*" + allowRepetition;
|
|
||||||
QString specialLiterals = "[\\^\\%\\(\\)~\\{\\}\\[\\]\\+-]" + allowRepetition;
|
|
||||||
QString functionKeys = "(F[1-9]" + allowRepetition + "|F1[0-2])" + allowRepetition;
|
|
||||||
QString numpad = "NUMPAD[0-9]" + allowRepetition;
|
|
||||||
QString delay = "DELAY=[0-9]+";
|
|
||||||
QString beep = "BEEP\\s[0-9]*\\s[0-9]*";
|
|
||||||
QString vkey = "VKEY(-[EN]X){0,1}" + allowRepetition;
|
|
||||||
|
|
||||||
//these arent in parenthesis
|
|
||||||
QString shortcutKeys = "[\\^\\%~\\+@]";
|
|
||||||
QString fixedStrings = "[^\\^\\%~\\+@\\{\\}]*";
|
|
||||||
|
|
||||||
QRegExp autoTypeSyntax
|
|
||||||
("(" + shortcutKeys + "|" + fixedStrings + "|\\{(" + normalCommands + "|" + specialLiterals + "|"
|
|
||||||
+ functionKeys
|
|
||||||
+ "|" + numpad + "|" + delay + "|" + beep + "|" + vkey + ")\\})*");
|
|
||||||
autoTypeSyntax.setCaseSensitivity(Qt::CaseInsensitive);
|
|
||||||
autoTypeSyntax.setPatternSyntax(QRegExp::RegExp);
|
|
||||||
|
|
||||||
QRegExp highDelay(".*\\{Delay\\s[0-9]{5,}\\}.*"); //the 3 means 3 digitnumbers are too much
|
|
||||||
highDelay.setCaseSensitivity(Qt::CaseInsensitive);
|
|
||||||
highDelay.setPatternSyntax(QRegExp::RegExp);
|
|
||||||
|
|
||||||
QRegExp highRepetition(".*\\s[0-9]{3,}.*");
|
|
||||||
highRepetition.setPatternSyntax(QRegExp::RegExp);
|
|
||||||
|
|
||||||
|
|
||||||
//small test @TODO delete
|
|
||||||
if (autoTypeSyntax.exactMatch(QString(
|
|
||||||
"{word 23}{F1 23}{~ 23}{% 23}{^}{F12}{(}{) 23}{[}{[}{]}{Delay=23}{+}{-}~+%@fixeds{Beep 23 32}{Vkey-NX 34}"))) {
|
|
||||||
std::cout << "yes\n";
|
|
||||||
}
|
|
||||||
if (autoTypeSyntax
|
|
||||||
.exactMatch(QString("word 23}{F1 23}{~ 23}{% 23}{^}{F12}{(}{) 23}{[}{[}{]}{Delay=23}{+}{-}~+%@fixeds"))) {
|
|
||||||
std::cout << "no1\n";
|
|
||||||
}
|
|
||||||
if (autoTypeSyntax
|
|
||||||
.exactMatch(QString("{@}{F1 23}{~ 23}{% 23}{^}{F12}{(}{) 23}{[}{[}{]}{Delay=23}{+}{-}~+%@fixeds"))) {
|
|
||||||
std::cout << "no2\n";
|
|
||||||
}
|
|
||||||
if (highDelay.exactMatch("{asfd}{DELAY 10000}{dasf}")) {
|
|
||||||
std::cout << "yes1\n";
|
|
||||||
}
|
|
||||||
if (highDelay.exactMatch("{asfd}{DELAY 1000}{dasf}")) {
|
|
||||||
std::cout << "no3\n";
|
|
||||||
}
|
|
||||||
if (highRepetition.exactMatch("{asfd}{DELAY 100}{dasf}")) {
|
|
||||||
std::cout << "yes2\n";
|
|
||||||
}
|
|
||||||
if (highRepetition.exactMatch("{asfd}{DELAY 10}{dasf}")) {
|
|
||||||
std::cout << "no4\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!autoTypeSyntax.exactMatch(m_autoTypeUi->sequenceEdit->text())) {
|
|
||||||
//@TODO handle wrong syntax
|
//@TODO handle wrong syntax
|
||||||
|
std::cout << "wrong syntax\n";
|
||||||
}
|
}
|
||||||
else if (highDelay.exactMatch(m_autoTypeUi->sequenceEdit->text())) {
|
else if (AutoType::checkHighDelay(m_autoTypeUi->sequenceEdit->text())) {
|
||||||
//@TODO handle too long delay
|
//@TODO handle too long delay
|
||||||
|
std::cout << "too long delay\n";
|
||||||
}
|
}
|
||||||
else if (highRepetition.exactMatch(m_autoTypeUi->sequenceEdit->text())) {
|
else if (AutoType::checkHighRepetition(m_autoTypeUi->sequenceEdit->text())) {
|
||||||
//@TODO handle too much repetition
|
//@TODO handle too much repetition
|
||||||
|
std::cout << "too much repetition\n";
|
||||||
}
|
}
|
||||||
entry->setDefaultAutoTypeSequence(m_autoTypeUi->sequenceEdit->text());
|
entry->setDefaultAutoTypeSequence(m_autoTypeUi->sequenceEdit->text());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue