Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/EntrySearcher.cpp')
-rw-r--r--src/core/EntrySearcher.cpp24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/core/EntrySearcher.cpp b/src/core/EntrySearcher.cpp
index c0360a36c..01e152e2a 100644
--- a/src/core/EntrySearcher.cpp
+++ b/src/core/EntrySearcher.cpp
@@ -42,7 +42,11 @@ QList<Entry*> EntrySearcher::searchEntries(const QString& searchTerm, const Grou
const QList<Group*> children = group->children();
for (Group* childGroup : children) {
if (childGroup->searchingEnabled() != Group::Disable) {
- searchResult.append(searchEntries(searchTerm, childGroup, caseSensitivity));
+ if (matchGroup(searchTerm, childGroup, caseSensitivity)) {
+ searchResult.append(childGroup->entriesRecursive());
+ } else {
+ searchResult.append(searchEntries(searchTerm, childGroup, caseSensitivity));
+ }
}
}
@@ -69,3 +73,21 @@ bool EntrySearcher::wordMatch(const QString& word, Entry* entry, Qt::CaseSensiti
entry->url().contains(word, caseSensitivity) ||
entry->notes().contains(word, caseSensitivity);
}
+
+bool EntrySearcher::matchGroup(const QString& searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity)
+{
+ const QStringList wordList = searchTerm.split(QRegExp("\\s"), QString::SkipEmptyParts);
+ for (const QString& word : wordList) {
+ if (!wordMatch(word, group, caseSensitivity)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool EntrySearcher::wordMatch(const QString& word, const Group* group, Qt::CaseSensitivity caseSensitivity)
+{
+ return group->name().contains(word, caseSensitivity) ||
+ group->notes().contains(word, caseSensitivity);
+}