Skip to content
This repository has been archived by the owner on Feb 12, 2023. It is now read-only.

Commit

Permalink
feat: add function for generating a filter for search word only
Browse files Browse the repository at this point in the history
  • Loading branch information
TriKriSta committed Jul 8, 2018
1 parent 60a2c5e commit 17a97f1
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 9 deletions.
6 changes: 3 additions & 3 deletions src/persistence/history.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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];
Expand Down
12 changes: 6 additions & 6 deletions src/widget/form/genericchatform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down
22 changes: 22 additions & 0 deletions src/widget/searchtypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 17a97f1

Please sign in to comment.