Browse Source

feat: add function for generating a filter for search word only

reviewable/pr5191/r4
TriKriSta 7 years ago
parent
commit
17a97f1ff6
  1. 6
      src/persistence/history.cpp
  2. 12
      src/widget/form/genericchatform.cpp
  3. 22
      src/widget/searchtypes.h

6
src/persistence/history.cpp

@ -339,10 +339,10 @@ QDateTime History::getDateWhereFindPhrase(const QString& friendPk, const QDateTi @@ -339,10 +339,10 @@ QDateTime History::getDateWhereFindPhrase(const QString& friendPk, const QDateTi
message = QStringLiteral("message LIKE '%%1%'").arg(phrase);
break;
case FilterSearch::WordsOnly:
message = QStringLiteral("message REGEXP '\\b%1\\b'").arg(phrase.toLower());
message = QStringLiteral("message REGEXP '%1'").arg(SearchExtraFunctions::generateFilterWordsOnly(phrase).toLower());
break;
case FilterSearch::RegisterAndWordsOnly:
message = QStringLiteral("REGEXPSENSITIVE(message, '\\b%1\\b')").arg(phrase);
message = QStringLiteral("REGEXPSENSITIVE(message, '%1')").arg(SearchExtraFunctions::generateFilterWordsOnly(phrase));
break;
case FilterSearch::Regular:
message = QStringLiteral("message REGEXP '%1'").arg(phrase);
@ -388,7 +388,7 @@ QDateTime History::getDateWhereFindPhrase(const QString& friendPk, const QDateTi @@ -388,7 +388,7 @@ QDateTime History::getDateWhereFindPhrase(const QString& friendPk, const QDateTi
.arg(message)
.arg(period);
qDebug() << "mes:" << queryText;
db->execNow({queryText, rowCallback});
if (!counts.isEmpty()) {
return counts[0];

12
src/widget/form/genericchatform.cpp

@ -640,11 +640,11 @@ bool GenericChatForm::searchInText(const QString& phrase, const ParameterSearch& @@ -640,11 +640,11 @@ bool GenericChatForm::searchInText(const QString& phrase, const ParameterSearch&
find = txt.contains(phrase, Qt::CaseSensitive);
break;
case FilterSearch::WordsOnly:
exp = QRegularExpression(QString("\\b%1\\b").arg(phrase), flagIns);
exp = QRegularExpression(SearchExtraFunctions::generateFilterWordsOnly(phrase), flagIns);
find = txt.contains(exp);
break;
case FilterSearch::RegisterAndWordsOnly:
exp = QRegularExpression(QString("\\b%1\\b").arg(phrase), flag);
exp = QRegularExpression(SearchExtraFunctions::generateFilterWordsOnly(phrase), flag);
find = txt.contains(exp);
break;
case FilterSearch::RegisterAndRegular:
@ -707,10 +707,10 @@ std::pair<int, int> GenericChatForm::indexForSearchInLine(const QString& txt, co @@ -707,10 +707,10 @@ std::pair<int, int> GenericChatForm::indexForSearchInLine(const QString& txt, co
index = txt.lastIndexOf(phrase, startIndex, Qt::CaseSensitive);
break;
case FilterSearch::WordsOnly:
exp = QRegularExpression(QString("\\b%1\\b").arg(phrase), flagIns);
exp = QRegularExpression(SearchExtraFunctions::generateFilterWordsOnly(phrase), flagIns);
break;
case FilterSearch::RegisterAndWordsOnly:
exp = QRegularExpression(QString("\\b%1\\b").arg(phrase), flag);
exp = QRegularExpression(SearchExtraFunctions::generateFilterWordsOnly(phrase), flag);
break;
case FilterSearch::RegisterAndRegular:
exp = QRegularExpression(phrase, flag);
@ -754,10 +754,10 @@ std::pair<int, int> GenericChatForm::indexForSearchInLine(const QString& txt, co @@ -754,10 +754,10 @@ std::pair<int, int> GenericChatForm::indexForSearchInLine(const QString& txt, co
index = txt.indexOf(phrase, startIndex, Qt::CaseSensitive);
break;
case FilterSearch::WordsOnly:
exp = QRegularExpression(QString("\\b%1\\b").arg(phrase), flagIns);
exp = QRegularExpression(SearchExtraFunctions::generateFilterWordsOnly(phrase), flagIns);
break;
case FilterSearch::RegisterAndWordsOnly:
exp = QRegularExpression(QString("\\b%1\\b").arg(phrase), flag);
exp = QRegularExpression(SearchExtraFunctions::generateFilterWordsOnly(phrase), flag);
break;
case FilterSearch::RegisterAndRegular:
exp = QRegularExpression(phrase, flag);

22
src/widget/searchtypes.h

@ -53,4 +53,26 @@ struct ParameterSearch { @@ -53,4 +53,26 @@ struct ParameterSearch {
}
};
class SearchExtraFunctions {
public:
static QString generateFilterWordsOnly(const QString &phrase) {
QString filter = phrase;
if (filter.contains("\\")) {
filter.replace("\\", "\\\\");
if (filter.front() != '\\') {
filter = "\\b" + filter;
}
if (filter.back() != '\\') {
filter += "\\b";
}
} else {
filter = QStringLiteral("\\b%1\\b").arg(filter);
}
return filter;
};
};
#endif //SEARCHTYPES_H

Loading…
Cancel
Save