diff options
author | Richard Maudsley <richard.maudsley@isode.com> | 2014-07-01 13:49:08 (GMT) |
---|---|---|
committer | Swift Review <review@swift.im> | 2014-07-09 13:39:30 (GMT) |
commit | 8e03583fe21bcd5e0025da81d8f4a34ed05cd058 (patch) | |
tree | 33fe40aa6e38c47d4e76145209e59787db90d100 | |
parent | 43fce94494307d1b3a866f5781528c94df7e5bca (diff) | |
download | swift-8e03583fe21bcd5e0025da81d8f4a34ed05cd058.zip swift-8e03583fe21bcd5e0025da81d8f4a34ed05cd058.tar.bz2 |
Improve search filter matching algrorithm.
After this patch roster items only match if the letters are present in the name or the JID of the roster item in the same order as in the search term
Test-Information:
Try various search terms and verify that search results are logical.
Change-Id: I4bc5febc465613a44930334fd8e498875fefda7a
-rw-r--r-- | Swift/Controllers/ContactSuggester.cpp | 14 | ||||
-rw-r--r-- | Swift/QtUI/UserSearch/QtUserSearchWindow.cpp | 2 |
2 files changed, 10 insertions, 6 deletions
diff --git a/Swift/Controllers/ContactSuggester.cpp b/Swift/Controllers/ContactSuggester.cpp index 09a1567..42e8308 100644 --- a/Swift/Controllers/ContactSuggester.cpp +++ b/Swift/Controllers/ContactSuggester.cpp @@ -63,13 +63,17 @@ std::vector<Contact::ref> ContactSuggester::getSuggestions(const std::string& se } bool ContactSuggester::fuzzyMatch(std::string text, std::string match) { - for (std::string::iterator currentQueryChar = match.begin(); currentQueryChar != match.end(); currentQueryChar++) { - //size_t result = text.find(*currentQueryChar); - std::string::iterator result = boost::algorithm::ifind_first(text, std::string(currentQueryChar, currentQueryChar+1)).begin(); - if (result == text.end()) { + std::string lowerText = text; + boost::algorithm::to_lower(lowerText); + std::string lowerMatch = match; + boost::algorithm::to_lower(lowerMatch); + size_t lastMatch = 0; + for (size_t i = 0; i < lowerMatch.length(); ++i) { + size_t where = lowerText.find_first_of(lowerMatch[i], lastMatch); + if (where == std::string::npos) { return false; } - text.erase(result); + lastMatch = where + 1; } return true; } diff --git a/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp b/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp index ca84759..e309265 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp +++ b/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp @@ -245,7 +245,7 @@ JID QtUserSearchWindow::getContactJID() const { if (userItem) { /* Remember to leave this if we change to dynamic cast */ jid = userItem->getJID(); } - } else { + } else if (dynamic_cast<QtFormResultItemModel*>(model_)) { int row = resultsPage_->results_->currentIndex().row(); Form::FormItem item = dynamic_cast<QtFormResultItemModel*>(model_)->getForm()->getItems().at(row); |