From f9781fb4b7d4c09b71188b43848095a1415a4f1e Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Sun, 25 Nov 2012 12:23:54 +0100 Subject: Improve suggestions, step 2 Every change here is given to trade-off suggestions performance (p) and relevancy (r). - just check bookmarks for relevance if no history entries found (p) - remove bookmarks item duplicates from history (r) - just do it is user typed more than 1 char (p) - order history entries just if user typed more than 1 char (p) - (reverse) order by visit count (most visited first) (r) --- src/history/historymanager.h | 3 ++- src/urlbar/urlsuggester.cpp | 53 +++++++++++++++++++++++++++++++++++--------- src/urlbar/urlsuggester.h | 2 ++ 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/src/history/historymanager.h b/src/history/historymanager.h index 96de8ab8..a0c3a5eb 100644 --- a/src/history/historymanager.h +++ b/src/history/historymanager.h @@ -86,7 +86,8 @@ public: // history is sorted in reverse inline bool operator <(const HistoryItem &other) const { - return lastDateTimeVisit > other.lastDateTimeVisit; + return visitCount > other.visitCount; +// return lastDateTimeVisit > other.lastDateTimeVisit; } QString title; diff --git a/src/urlbar/urlsuggester.cpp b/src/urlbar/urlsuggester.cpp index efa0249b..7fbb2204 100644 --- a/src/urlbar/urlsuggester.cpp +++ b/src/urlbar/urlsuggester.cpp @@ -225,17 +225,22 @@ UrlSuggestionList UrlSuggester::orderLists() } } - // bookmarks - Q_FOREACH(const UrlSuggestionItem & item, _bookmarks) + // just add this is relevant is Null + + if (relevant.count() == 0) { - QString hst = KUrl(item.url).host(); - if (item.url.startsWith(_typedString) - || hst.startsWith(_typedString) - || hst.remove("www.").startsWith(_typedString)) + // bookmarks + Q_FOREACH(const UrlSuggestionItem & item, _bookmarks) { - relevant << item; - _bookmarks.removeOne(item); - break; + QString hst = KUrl(item.url).host(); + if (item.url.startsWith(_typedString) + || hst.startsWith(_typedString) + || hst.remove("www.").startsWith(_typedString)) + { + relevant << item; + _bookmarks.removeOne(item); + break; + } } } @@ -267,6 +272,9 @@ UrlSuggestionList UrlSuggester::orderLists() } } + if (_typedString.count() > 1) + removeBookmarksDuplicates(); + // and finally, results UrlSuggestionList list; if (textIsUrl) @@ -337,8 +345,9 @@ void UrlSuggester::computeHistory() QList found = HistoryManager::self()->find(_typedString); // FIXME: profiling computeHistory, this seems too much expensive (around 1 second for) - // Can we live without (q)sort results??? - // qSort(found.begin(), found.end(), isHistoryItemRelevant); + // doing it just from second time... + if (_typedString.count() > 1) + qSort(found.begin(), found.end(), isHistoryItemRelevant); Q_FOREACH(const HistoryItem & i, found) { @@ -423,3 +432,25 @@ void UrlSuggester::computeSuggestions() // emit suggestionsReady(sugList, _typedString); // this->deleteLater(); // } + + +////////////////////////////////////////////////////////////////////////// + + +// WARNING: this seems A LOT expensive and has to be done just +// when the two groups (history & bookmarks) have just been "restricted".. +void UrlSuggester::removeBookmarksDuplicates() +{ + Q_FOREACH(const UrlSuggestionItem & item, _history) + { + QString hu = item.url; + Q_FOREACH(const UrlSuggestionItem & item, _bookmarks) + { + if (hu == item.url) + { + _bookmarks.removeOne(item); + break; + } + } + } +} diff --git a/src/urlbar/urlsuggester.h b/src/urlbar/urlsuggester.h index 6c77d8dc..f3732d91 100644 --- a/src/urlbar/urlsuggester.h +++ b/src/urlbar/urlsuggester.h @@ -136,6 +136,8 @@ private: void computeQurlFromUserInput(); void computeBookmarks(); + void removeBookmarksDuplicates(); + UrlSuggestionList orderLists(); QString _typedString; -- cgit v1.2.1