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 /Swift/Controllers | |
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
Diffstat (limited to 'Swift/Controllers')
-rw-r--r-- | Swift/Controllers/ContactSuggester.cpp | 14 |
1 files changed, 9 insertions, 5 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; } |