summaryrefslogtreecommitdiff
path: root/src/urlbar
diff options
context:
space:
mode:
Diffstat (limited to 'src/urlbar')
-rw-r--r--src/urlbar/bookmarkwidget.cpp2
-rw-r--r--src/urlbar/bookmarkwidget.h2
-rw-r--r--src/urlbar/completionwidget.cpp9
-rw-r--r--src/urlbar/listitem.cpp59
-rw-r--r--src/urlbar/listitem.h20
-rw-r--r--src/urlbar/urlbar.cpp25
-rw-r--r--src/urlbar/urlresolver.cpp301
-rw-r--r--src/urlbar/urlresolver.h31
8 files changed, 304 insertions, 145 deletions
diff --git a/src/urlbar/bookmarkwidget.cpp b/src/urlbar/bookmarkwidget.cpp
index bcf85e1f..0e05e776 100644
--- a/src/urlbar/bookmarkwidget.cpp
+++ b/src/urlbar/bookmarkwidget.cpp
@@ -30,7 +30,7 @@
// Local includes
#include "application.h"
-#include "bookmarksmanager.h"
+#include "bookmarkprovider.h"
#include "bookmarkowner.h"
// KDE Includes
diff --git a/src/urlbar/bookmarkwidget.h b/src/urlbar/bookmarkwidget.h
index cdab328e..c3c15e18 100644
--- a/src/urlbar/bookmarkwidget.h
+++ b/src/urlbar/bookmarkwidget.h
@@ -44,7 +44,7 @@ class BookmarkWidget : public QFrame
Q_OBJECT
public:
- BookmarkWidget(const KBookmark &bookmark, QWidget *parent = 0);
+ explicit BookmarkWidget(const KBookmark &bookmark, QWidget *parent = 0);
~BookmarkWidget();
void showAt(const QPoint &pos);
diff --git a/src/urlbar/completionwidget.cpp b/src/urlbar/completionwidget.cpp
index b77e2d7c..a9203bf7 100644
--- a/src/urlbar/completionwidget.cpp
+++ b/src/urlbar/completionwidget.cpp
@@ -153,13 +153,10 @@ void CompletionWidget::activateCurrentListItem()
//update text of the url bar
bar->blockSignals(true); //without compute suggestions
- if (!widget->inherits("SearchListItem"))
- bar->setQUrl( widget->url() );
- else
- bar->setQUrl( _typedString );
+ bar->setQUrl(widget->text());
bar->blockSignals(false);
bar->setFocus();
- bar->setCursorPosition( bar->text().length() );
+ bar->setCursorPosition(bar->text().length());
}
@@ -240,7 +237,7 @@ bool CompletionWidget::eventFilter(QObject *obj, QEvent *ev)
if( _currentIndex == -1)
_currentIndex = 0;
child = findChild<ListItem *>(QString::number(_currentIndex));
- if(child && _typedString == w->text())
+ if(child)
{
emit chosenUrl(child->url(), Rekonq::CurrentTab);
}
diff --git a/src/urlbar/listitem.cpp b/src/urlbar/listitem.cpp
index f10cefd7..e9bb6fbb 100644
--- a/src/urlbar/listitem.cpp
+++ b/src/urlbar/listitem.cpp
@@ -139,6 +139,12 @@ KUrl ListItem::url()
}
+QString ListItem::text()
+{
+ return m_url.url();
+}
+
+
void ListItem::nextItemSubChoice()
{
//will be override
@@ -161,6 +167,7 @@ TypeIconLabel::TypeIconLabel(int type, QWidget *parent)
if (type & UrlSearchItem::Browse) hLayout->addWidget(getIcon("applications-internet"));
if (type & UrlSearchItem::Bookmark) hLayout->addWidget(getIcon("rating"));
if (type & UrlSearchItem::History) hLayout->addWidget(getIcon("view-history"));
+ if (type & UrlSearchItem::Suggestion) hLayout->addWidget(getIcon("help-hint"));
}
@@ -297,6 +304,12 @@ SearchListItem::SearchListItem(const UrlSearchItem &item, const QString &text, Q
}
+QString SearchListItem::text()
+{
+ return m_text;
+}
+
+
QString SearchListItem::searchItemTitle(QString engine, QString text)
{
return QString(i18nc("%1=search engine, e.g. Google, Wikipedia %2=text to search for", "Search %1 for <b>%2</b>", engine, Qt::escape(text)));
@@ -390,6 +403,42 @@ void EngineBar::selectNextEngine()
// ---------------------------------------------------------------
+SuggestionListItem::SuggestionListItem(const UrlSearchItem &item, const QString &text, QWidget *parent)
+ : ListItem(item, parent)
+ , m_text(item.title)
+{
+ QHBoxLayout *hLayout = new QHBoxLayout;
+ hLayout->setSpacing(4);
+
+ QString query = item.title;
+ KService::Ptr engine = SearchEngine::fromString(query);
+ if (engine)
+ {
+ query = query.remove(0, text.indexOf(SearchEngine::delimiter()) + 1);
+ }
+ else
+ {
+ engine = qobject_cast<CompletionWidget *>(parent)->searchEngine();
+ }
+
+ m_url = SearchEngine::buildQuery(engine, query);
+
+ hLayout->addWidget(new IconLabel(SearchEngine::buildQuery(engine, ""), this));
+ hLayout->addWidget(new TextLabel(item.title, text, this));
+ hLayout->addWidget(new TypeIconLabel(item.type, this));
+
+ setLayout(hLayout);
+}
+
+
+QString SuggestionListItem::text()
+{
+ return m_text;
+}
+
+// ---------------------------------------------------------------
+
+
BrowseListItem::BrowseListItem(const UrlSearchItem &item, const QString &text, QWidget *parent)
: ListItem(item, parent)
{
@@ -427,7 +476,15 @@ ListItem *ListItemFactory::create(const UrlSearchItem &item, const QString &text
}
else
{
- newItem = new PreviewListItem(item, text, parent);
+
+ if (item.type & UrlSearchItem::Suggestion)
+ {
+ newItem = new SuggestionListItem(item, text, parent);
+ }
+ else
+ {
+ newItem = new PreviewListItem(item, text, parent);
+ }
}
}
diff --git a/src/urlbar/listitem.h b/src/urlbar/listitem.h
index dcb4f76d..06a02b80 100644
--- a/src/urlbar/listitem.h
+++ b/src/urlbar/listitem.h
@@ -61,7 +61,8 @@ public:
void deactivate();
KUrl url();
-
+ virtual QString text();
+
public slots:
virtual void nextItemSubChoice();
@@ -153,6 +154,7 @@ class SearchListItem : public ListItem
public:
explicit SearchListItem(const UrlSearchItem &item, const QString &text, QWidget *parent = 0);
+ QString text();
public slots:
virtual void nextItemSubChoice();
@@ -174,6 +176,22 @@ private:
// -------------------------------------------------------------------------
+class SuggestionListItem : public ListItem
+{
+ Q_OBJECT
+
+public:
+ SuggestionListItem(const UrlSearchItem &item, const QString &text, QWidget *parent = 0);
+ QString text();
+
+private:
+ QString m_text;
+};
+
+
+// -------------------------------------------------------------------------
+
+
class PreviewListItem : public ListItem
{
Q_OBJECT
diff --git a/src/urlbar/urlbar.cpp b/src/urlbar/urlbar.cpp
index e64959bd..c272d819 100644
--- a/src/urlbar/urlbar.cpp
+++ b/src/urlbar/urlbar.cpp
@@ -41,10 +41,11 @@
#include "webpage.h"
#include "webview.h"
#include "completionwidget.h"
-#include "bookmarksmanager.h"
+#include "bookmarkprovider.h"
#include "bookmarkwidget.h"
// KDE Includes
+#include <KBookmarkManager>
#include <KCompletionBox>
#include <KStandardDirs>
@@ -105,7 +106,7 @@ UrlBar::UrlBar(QWidget *parent)
_tab = qobject_cast<WebTab *>(parent);
connect(_tab, SIGNAL(loadProgressing()), this, SLOT(update()));
-
+
connect(_tab->view(), SIGNAL(urlChanged(const QUrl &)), this, SLOT(setQUrl(const QUrl &)));
connect(_tab->view(), SIGNAL(loadFinished(bool)), this, SLOT(loadFinished()));
connect(_tab->view(), SIGNAL(loadStarted()), this, SLOT(clearRightIcons()));
@@ -114,13 +115,13 @@ UrlBar::UrlBar(QWidget *parent)
_icon->setIcon(KIcon("bookmarks").pixmap(32,32, QIcon::Disabled));
connect(Application::bookmarkProvider()->bookmarkManager(), SIGNAL(changed(const QString &, const QString &)), this, SLOT(onBookmarksChanged()));
connect(_icon, SIGNAL(clicked(const QPoint &)), this, SLOT(showBookmarkInfo(const QPoint &)));
-
+
// load typed urls
connect(this, SIGNAL(returnPressed(const QString &)), this, SLOT(loadTyped(const QString &)));
_suggestionTimer->setSingleShot(true);
connect(_suggestionTimer, SIGNAL(timeout()), this, SLOT(suggest()));
-
+
activateSuggestions(true);
}
@@ -163,10 +164,10 @@ void UrlBar::activated(const KUrl& url, Rekonq::OpenType type)
void UrlBar::paintEvent(QPaintEvent *event)
-{
+{
QColor backgroundColor;
QColor foregroundColor;
-
+
if (_privateMode)
{
backgroundColor = QColor(220, 220, 220); // light gray
@@ -199,7 +200,7 @@ void UrlBar::paintEvent(QPaintEvent *event)
int r = (highlight.red()+2*backgroundColor.red())/3;
int g = (highlight.green()+2*backgroundColor.green())/3;
int b = (highlight.blue()+2*backgroundColor.blue())/3;
-
+
QColor loadingColor(r, g, b);
if (abs(loadingColor.lightness() - backgroundColor.lightness()) < 20) //eg. Gaia color scheme
@@ -320,7 +321,7 @@ void UrlBar::loadFinished()
_icon->setIcon(KIcon("bookmarks"));
_icon->setToolTip(i18n("Edit this bookmark"));
}
-
+
// show KGet downloads??
if (!KStandardDirs::findExe("kget").isNull() && ReKonfig::kgetList())
{
@@ -343,7 +344,7 @@ void UrlBar::loadFinished()
}
// we need to update urlbar after the right icon settings
- // removing this code (where setStyleSheet automatically calls update) needs adding again
+ // removing this code (where setStyleSheet automatically calls update) needs adding again
// an update call
kDebug() << "resetting stylesheet";
int rightIconWidth = 25 * (_rightIconsList.count());
@@ -355,7 +356,7 @@ void UrlBar::showBookmarkInfo(const QPoint &pos)
{
if( _tab->url().scheme() == QL1S("about") )
return;
-
+
KBookmark bookmark = Application::bookmarkProvider()->bookmarkForUrl(_tab->url());
IconButton *bt = qobject_cast<IconButton *>(this->sender());
@@ -367,7 +368,7 @@ void UrlBar::showBookmarkInfo(const QPoint &pos)
bookmark = Application::bookmarkProvider()->rootGroup().addBookmark(_tab->view()->title(), _tab->url());
Application::bookmarkProvider()->bookmarkManager()->emitChanged();
}
-
+
BookmarkWidget *widget = new BookmarkWidget(bookmark, window());
widget->showAt(pos);
}
@@ -480,7 +481,7 @@ void UrlBar::detectTypedString(const QString &typed)
QTimer::singleShot(0, this, SLOT(suggest()));
return;
}
-
+
if(_suggestionTimer->isActive())
_suggestionTimer->stop();
_suggestionTimer->start(50);
diff --git a/src/urlbar/urlresolver.cpp b/src/urlbar/urlresolver.cpp
index b762716a..d60dc563 100644
--- a/src/urlbar/urlresolver.cpp
+++ b/src/urlbar/urlresolver.cpp
@@ -30,10 +30,11 @@
// Local Includes
#include "application.h"
#include "historymanager.h"
-#include "bookmarksmanager.h"
+#include "bookmarkprovider.h"
#include "searchengine.h"
// KDE Includes
+#include <KBookmark>
#include <KUriFilter>
#include <KCompletion>
#include <KService>
@@ -45,9 +46,9 @@
// defines
#define MAX_ELEMENTS 10
+#define MIN_SUGGESTIONS 3
-
-// NOTE
+// NOTE
// default kurifilter plugin list (at least in my box):
// 1. "kshorturifilter"
// 2. "kurisearchfilter"
@@ -63,23 +64,24 @@ QRegExp UrlResolver::_browseRegexp;
QRegExp UrlResolver::_searchEnginesRegexp;
UrlResolver::UrlResolver(const QString &typedUrl)
- : _typedString(typedUrl.trimmed())
+ : QObject()
+ , _typedString(typedUrl.trimmed())
{
if ( _browseRegexp.isEmpty() )
{
kDebug() << "browse regexp empty. Setting value..";
-
+
QString protocol = "^(http://|https://|file://|ftp://|man:|info:|apt:)";
-
+
QString localhost = "^localhost";
-
+
QString local = "^/";
-
+
QString ipv4 = "^0*([1-9]?\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.0*([1-9]?\\d|1\\d\\d|2[0-4]\\d|25[0-5])"\
"\\.0*([1-9]?\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.0*([1-9]?\\d|1\\d\\d|2[0-4]\\d|25[0-5])";
-
+
QString ipv6 = "^([0-9a-fA-F]{4}|0)(\\:([0-9a-fA-F]{4}|0)){7}";
-
+
QString address = "[\\d\\w-.]+\\.(a[cdefgilmnoqrstuwz]|b[abdefghijmnorstvwyz]|"\
"c[acdfghiklmnoruvxyz]|d[ejkmnoz]|e[ceghrst]|f[ijkmnor]|g[abdefghilmnpqrstuwy]|"\
"h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|"\
@@ -87,19 +89,21 @@ UrlResolver::UrlResolver(const QString &typedUrl)
"s[abcdeghijklmnortuvyz]|t[cdfghjkmnoprtvwz]|u[augkmsyz]|v[aceginu]|w[fs]|"\
"y[etu]|z[amw]|aero|arpa|biz|com|coop|edu|info|int|gov|mil|museum|name|net|org|"\
"pro)";
-
+
_browseRegexp = QRegExp('(' + protocol + ")|(" + localhost + ")|(" + local + ")|(" + address + ")|(" + ipv6 + ")|(" + ipv4 +')');
}
-
+
if ( _searchEnginesRegexp.isEmpty() )
{
QString reg;
QString engineUrl;
- foreach(KService::Ptr s, SearchEngine::favorites())
+ Q_FOREACH(KService::Ptr s, SearchEngine::favorites())
{
engineUrl = QRegExp::escape(s->property("Query").toString()).replace("\\\\\\{@\\}","[\\d\\w-.]+");
- if (reg.isEmpty()) reg = "(" + engineUrl + ")";
- else reg = reg + "|(" + engineUrl + ")";
+ if (reg.isEmpty())
+ reg = '(' + engineUrl + ')';
+ else
+ reg = reg + "|(" + engineUrl + ')';
}
_searchEnginesRegexp = QRegExp(reg);
}
@@ -108,20 +112,9 @@ UrlResolver::UrlResolver(const QString &typedUrl)
UrlSearchList UrlResolver::orderedSearchItems()
{
- // NOTE
- // the logic here is : "we wanna suggest (at least) 10 elements"
- // so we have (more or less) 2 from first results (1 from QUrl Resolutions, 1 from
- // search engines).
- // There are 8 remaining: if bookmarkResults + historyResults <= 8, catch all, else
- // catch first 4 results from the two resulting lists :)
-
- QTime myTime;
- myTime.start();
-
- UrlSearchList list;
-
if( _typedString == QL1S("about:") )
{
+ UrlSearchList list;
UrlSearchItem home(UrlSearchItem::Browse, QString("about:home"), QL1S("home") );
list << home;
UrlSearchItem favs(UrlSearchItem::Browse, QString("about:favorites"), QL1S("favorites") );
@@ -137,147 +130,188 @@ UrlSearchList UrlResolver::orderedSearchItems()
return list;
}
-
+
+ _computedListsCount = 0;
+
+ //compute lists
+ computeSuggestions();
+ computeQurlFromUserInput();
+ computeWebSearches();
+ computeBookmarks();
+ computeHistory();
+
+ QTime time;
+ time.start();
+
+ while (_computedListsCount < 5 && time.msec() < 1000)
+ {
+ Application::instance()->processEvents(QEventLoop::WaitForMoreEvents | QEventLoop::ExcludeUserInputEvents);
+ }
+
+ return orderLists();
+}
+
+
+UrlSearchList UrlResolver::orderLists()
+{
+ // NOTE
+ // the logic here is : "we wanna suggest (at least) 10 elements"
+ // so we have (more or less) 2 from first results (1 from QUrl Resolutions, 1 from
+ // search engines).
+ // There are 8 remaining: if bookmarkResults + historyResults <= 8, catch all, else
+ // catch first 4 results from the two resulting lists :)
+
+ QTime myTime;
+ myTime.start();
+
+ UrlSearchList list;
+
if(_browseRegexp.indexIn(_typedString) != -1)
{
- list << qurlFromUserInputResolution();
- list << webSearchesResolution();
+ list << _qurlFromUserInput;
+ list << _webSearches;
}
else
{
- list << webSearchesResolution();
- list << qurlFromUserInputResolution();
+ list << _webSearches;
+ list << _qurlFromUserInput;
}
//find the history items that match the typed string
- UrlSearchList historyList = historyResolution();
- UrlSearchItem privileged = privilegedItem(&historyList);
- int historyResults = historyList.count();
-
+ UrlSearchItem privileged = privilegedItem(&_history);
+ int historyCount = _history.count();
+
//find the bookmarks items that match the typed string
- UrlSearchList bookmarksList = bookmarksResolution();
if (privileged.type == UrlSearchItem::Undefined)
{
- privileged = privilegedItem(&bookmarksList);
+ privileged = privilegedItem(&_bookmarks);
}
- else if(privileged.type == UrlSearchItem::History && bookmarksList.removeOne(privileged))
+ else if(privileged.type == UrlSearchItem::History && _bookmarks.removeOne(privileged))
{
privileged.type |= UrlSearchItem::Bookmark;
}
- int bookmarksResults = bookmarksList.count();
-
+ int bookmarksCount = _bookmarks.count();
+
if (privileged.type != UrlSearchItem::Undefined)
{
list.prepend(privileged);
}
-
- int availableEntries = MAX_ELEMENTS - list.count();
-
- UrlSearchList commonList;
- int commonResutls = 0;
+
+ int availableEntries = MAX_ELEMENTS - list.count() - MIN_SUGGESTIONS;
+
+ UrlSearchList common;
+ int commonCount = 0;
//prefer items which are history items als well bookmarks item
//if there are more than 1000 bookmark results, the performance impact is noticeable
- if(bookmarksResults < 1000)
+ if(bookmarksCount < 1000)
{
//add as many items to the common list as there are available entries in the dropdown list
UrlSearchItem urlSearchItem;
- for(int i = 0; i < historyList.count(); i++)
+ for(int i = 0; i < _history.count(); i++)
{
- if (bookmarksList.removeOne(historyList.at(i)))
+ if (_bookmarks.removeOne(_history.at(i)))
{
- urlSearchItem = historyList.takeAt(i);
+ urlSearchItem = _history.takeAt(i);
urlSearchItem.type |= UrlSearchItem::Bookmark;
- commonList << urlSearchItem;
- commonResutls++;
- if(commonResutls >= availableEntries)
+ common << urlSearchItem;
+ commonCount++;
+ if(commonCount >= availableEntries)
{
break;
}
}
}
-
- commonResutls = commonList.count();
- if(commonResutls >= availableEntries)
+
+ commonCount = common.count();
+ if(commonCount >= availableEntries)
{
- commonList = commonList.mid(0, availableEntries);
- historyList = UrlSearchList();
- bookmarksList = UrlSearchList();
+ common = common.mid(0, availableEntries);
+ _history = UrlSearchList();
+ _bookmarks = UrlSearchList();
availableEntries = 0;
}
else //remove all items from the history and bookmarks list up to the remaining entries in the dropdown list
{
- availableEntries -= commonResutls;
- if(historyResults >= availableEntries)
+ availableEntries -= commonCount;
+ if(historyCount >= availableEntries)
{
- historyList = historyList.mid(0, availableEntries);
+ _history = _history.mid(0, availableEntries);
}
- if(bookmarksResults >= availableEntries)
+ if(bookmarksCount >= availableEntries)
{
- bookmarksList = bookmarksList.mid(0, availableEntries);
+ _bookmarks = _bookmarks.mid(0, availableEntries);
}
}
}
else //if there are too many bookmarks items, remove all items up to the remaining entries in the dropdown list
{
-
- if(historyResults >= availableEntries)
+
+ if(historyCount >= availableEntries)
{
- historyList = historyList.mid(0, availableEntries);
+ _history = _history.mid(0, availableEntries);
}
- if(bookmarksResults >= availableEntries)
+ if(bookmarksCount >= availableEntries)
{
- bookmarksList = bookmarksList.mid(0, availableEntries);
+ _bookmarks = _bookmarks.mid(0, availableEntries);
}
UrlSearchItem urlSearchItem;
- for(int i = 0; i < historyList.count(); i++)
+ for(int i = 0; i < _history.count(); i++)
{
- if (bookmarksList.removeOne(historyList.at(i)))
+ if (_bookmarks.removeOne(_history.at(i)))
{
- urlSearchItem = historyList.takeAt(i);
+ urlSearchItem = _history.takeAt(i);
urlSearchItem.type |= UrlSearchItem::Bookmark;
- commonList << urlSearchItem;
+ common << urlSearchItem;
}
}
-
- availableEntries -= commonList.count();
+
+ availableEntries -= common.count();
}
-
- historyResults = historyList.count();
- bookmarksResults = bookmarksList.count();
- commonResutls = commonList.count();
-
+
+ historyCount = _history.count();
+ bookmarksCount = _bookmarks.count();
+ commonCount = common.count();
+
//now fill the list to MAX_ELEMENTS
if(availableEntries > 0)
{
int historyEntries = ((int) (availableEntries / 2)) + availableEntries % 2;
int bookmarksEntries = availableEntries - historyEntries;
-
- if (historyResults >= historyEntries && bookmarksResults >= bookmarksEntries)
+
+ if (historyCount >= historyEntries && bookmarksCount >= bookmarksEntries)
{
- historyList = historyList.mid(0, historyEntries);
- bookmarksList = bookmarksList.mid(0, bookmarksEntries);
+ _history = _history.mid(0, historyEntries);
+ _bookmarks = _bookmarks.mid(0, bookmarksEntries);
}
- else if (historyResults < historyEntries && bookmarksResults >= bookmarksEntries)
+ else if (historyCount < historyEntries && bookmarksCount >= bookmarksEntries)
{
- if(historyResults + bookmarksResults > availableEntries)
+ if(historyCount + bookmarksCount > availableEntries)
{
- bookmarksList = bookmarksList.mid(0, availableEntries - historyResults);
+ _bookmarks = _bookmarks.mid(0, availableEntries - historyCount);
}
}
- else if (historyResults >= historyEntries && bookmarksResults < bookmarksEntries)
+ else if (historyCount >= historyEntries && bookmarksCount < bookmarksEntries)
{
- if(historyResults + bookmarksResults > availableEntries)
+ if(historyCount + bookmarksCount > availableEntries)
{
- historyList = historyList.mid(0, availableEntries - bookmarksResults);
+ _history = _history.mid(0, availableEntries - bookmarksCount);
}
}
}
-
- list = list + historyList + commonList + bookmarksList;
+
+ availableEntries -= _history.count();
+ availableEntries -= _bookmarks.count();
+
+ if (_suggestions.count() > availableEntries + MIN_SUGGESTIONS)
+ {
+ _suggestions = _suggestions.mid(0, availableEntries + MIN_SUGGESTIONS);
+ }
+
+ list = list + _history + common + _bookmarks + _suggestions;
qWarning() << "orderedSearchItems leave: " << " elapsed: " << myTime.elapsed();
-
+
return list;
}
@@ -286,70 +320,103 @@ UrlSearchList UrlResolver::orderedSearchItems()
// PRIVATE ENGINES
-// STEP 1 = QUrl from User Input (easily the best solution... )
-UrlSearchList UrlResolver::qurlFromUserInputResolution()
+//QUrl from User Input (easily the best solution... )
+void UrlResolver::computeQurlFromUserInput()
{
- UrlSearchList list;
- QString url2 = _typedString;
- QUrl urlFromUserInput = QUrl::fromUserInput(url2);
+ QString url = _typedString;
+ QUrl urlFromUserInput = QUrl::fromUserInput(url);
if (urlFromUserInput.isValid())
{
QString gTitle = i18nc("Browse a website", "Browse");
UrlSearchItem gItem(UrlSearchItem::Browse, urlFromUserInput.toString(), gTitle);
- list << gItem;
+ _qurlFromUserInput << gItem;
}
- return list;
+ _computedListsCount++;
}
-// STEP 2 = Web Searches
-UrlSearchList UrlResolver::webSearchesResolution()
+//webSearches
+void UrlResolver::computeWebSearches()
{
- return UrlSearchList() << UrlSearchItem(UrlSearchItem::Search, QString(), QString());
+ _webSearches = (UrlSearchList() << UrlSearchItem(UrlSearchItem::Search, QString(), QString()));
+ _computedListsCount++;
}
-// STEP 3 = history completion
-UrlSearchList UrlResolver::historyResolution()
+//history
+void UrlResolver::computeHistory()
{
QList<HistoryItem> found = Application::historyManager()->find(_typedString);
qSort(found);
- UrlSearchList list;
- foreach (HistoryItem i, found)
+ Q_FOREACH(const HistoryItem &i, found)
{
if (_searchEnginesRegexp.indexIn(i.url) == -1) //filter all urls that are search engine results
{
UrlSearchItem gItem(UrlSearchItem::History, i.url, i.title);
- list << gItem;
+ _history << gItem;
}
}
- return list;
+
+ _computedListsCount++;
}
-// STEP 4 = bookmarks completion
-UrlSearchList UrlResolver::bookmarksResolution()
+// bookmarks
+void UrlResolver::computeBookmarks()
{
- UrlSearchList list;
QList<KBookmark> found = Application::bookmarkProvider()->find(_typedString);
- foreach (KBookmark b, found)
+
+ Q_FOREACH(const KBookmark &b, found)
{
UrlSearchItem gItem(UrlSearchItem::Bookmark, b.url().url(), b.fullText());
- list << gItem;
+ _bookmarks << gItem;
}
- return list;
+
+ _computedListsCount++;
+}
+
+
+//opensearch suggestion
+void UrlResolver::computeSuggestions()
+{
+ if (Application::opensearchManager()->isSuggestionAvailable())
+ {
+ connect(Application::opensearchManager(),
+ SIGNAL(suggestionReceived(const QStringList &)),
+ this,
+ SLOT(suggestionsReceived(const QStringList &)));
+
+ Application::opensearchManager()->requestSuggestion(_typedString);
+ }
+ else
+ {
+ _computedListsCount++;
+ }
+}
+
+
+void UrlResolver::suggestionsReceived(const QStringList &suggestion)
+{
+
+ foreach (QString s, suggestion)
+ {
+ UrlSearchItem gItem(UrlSearchItem::Suggestion, s, s);
+ _suggestions << gItem;
+ }
+
+ _computedListsCount++;
}
UrlSearchItem UrlResolver::privilegedItem(UrlSearchList* list)
{
UrlSearchItem item;
- QString dot = QString(QL1C('.'));
+ QString dot = QString(QL1C('.'));
QString test1 = QString(QL1C('/')) + _typedString + dot;
QString test2 = dot + _typedString + dot;
-
+
for(int i = 0; i<list->count(); i++)
{
item = list->at(i);
diff --git a/src/urlbar/urlresolver.h b/src/urlbar/urlresolver.h
index c79ce184..f72d6731 100644
--- a/src/urlbar/urlresolver.h
+++ b/src/urlbar/urlresolver.h
@@ -38,6 +38,7 @@
// Qt Includes
#include <QString>
#include <QList>
+#include <QStringList>
class UrlSearchItem
{
@@ -50,6 +51,7 @@ public:
Browse = 0x00000010,
History = 0x00000100,
Bookmark = 0x00001000,
+ Suggestion = 0x00010000,
};
int type;
@@ -93,8 +95,10 @@ typedef QList <UrlSearchItem> UrlSearchList;
// ----------------------------------------------------------------------
-class UrlResolver
+class UrlResolver : public QObject
{
+ Q_OBJECT
+
public:
UrlResolver(const QString &typedUrl);
@@ -103,14 +107,29 @@ public:
private:
QString _typedString;
- UrlSearchList webSearchesResolution();
- UrlSearchList historyResolution();
- UrlSearchList qurlFromUserInputResolution();
- UrlSearchList bookmarksResolution();
+ UrlSearchList _webSearches;
+ UrlSearchList _qurlFromUserInput;
+ UrlSearchList _history;
+ UrlSearchList _bookmarks;
+ UrlSearchList _suggestions;
+
+ void computeWebSearches();
+ void computeHistory();
+ void computeQurlFromUserInput();
+ void computeBookmarks();
+ void computeSuggestions();
+
+ int _computedListsCount;
+
UrlSearchItem privilegedItem(UrlSearchList* list);
-
+ UrlSearchList orderLists();
+
static QRegExp _browseRegexp;
static QRegExp _searchEnginesRegexp;
+
+private slots:
+ void suggestionsReceived(const QStringList &suggestion);
+
};
// ------------------------------------------------------------------------------