mirror of
https://invent.kde.org/network/falkon.git
synced 2024-12-20 18:56:34 +01:00
Search suggestions in address bar now take into account hit count too
thanks to Franz Fellner
This commit is contained in:
parent
c6d1743706
commit
575b211997
@ -49,7 +49,7 @@ void LocationCompleterModel::refreshCompletions(const QString &string)
|
|||||||
QList<QUrl> urlList;
|
QList<QUrl> urlList;
|
||||||
|
|
||||||
if (showType == HistoryAndBookmarks || showType == Bookmarks) {
|
if (showType == HistoryAndBookmarks || showType == Bookmarks) {
|
||||||
QSqlQuery query = createQuery(string, QString(), limit, true, false);
|
QSqlQuery query = createQuery(string, QString("history.count DESC"), urlList, limit, true, false);
|
||||||
query.exec();
|
query.exec();
|
||||||
|
|
||||||
while (query.next()) {
|
while (query.next()) {
|
||||||
@ -70,17 +70,13 @@ void LocationCompleterModel::refreshCompletions(const QString &string)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (showType == HistoryAndBookmarks || showType == History) {
|
if (showType == HistoryAndBookmarks || showType == History) {
|
||||||
QSqlQuery query = createQuery(string, "count DESC", limit, false, false);
|
QSqlQuery query = createQuery(string, "count DESC", urlList, limit, false, false);
|
||||||
query.exec();
|
query.exec();
|
||||||
|
|
||||||
while (query.next()) {
|
while (query.next()) {
|
||||||
QStandardItem* item = new QStandardItem();
|
QStandardItem* item = new QStandardItem();
|
||||||
const QUrl &url = query.value(1).toUrl();
|
const QUrl &url = query.value(1).toUrl();
|
||||||
|
|
||||||
if (urlList.contains(url)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
item->setIcon(_iconForUrl(url));
|
item->setIcon(_iconForUrl(url));
|
||||||
item->setText(url.toEncoded());
|
item->setText(url.toEncoded());
|
||||||
item->setData(query.value(0), IdRole);
|
item->setData(query.value(0), IdRole);
|
||||||
@ -114,13 +110,14 @@ void LocationCompleterModel::showMostVisited()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QSqlQuery LocationCompleterModel::createQuery(QString searchString, QString orderBy, int limit, bool bookmarks, bool exactMatch)
|
QSqlQuery LocationCompleterModel::createQuery(QString searchString, QString orderBy, const QList<QUrl> &alreadyFound, int limit, bool bookmarks, bool exactMatch)
|
||||||
{
|
{
|
||||||
QString query = "SELECT id, url, title";
|
QString table = bookmarks ? "bookmarks" : "history";
|
||||||
|
QString query = QString("SELECT %1.id, %1.url, %1.title").arg(table);
|
||||||
QStringList searchList;
|
QStringList searchList;
|
||||||
|
|
||||||
if (bookmarks) {
|
if (bookmarks) {
|
||||||
query.append(", icon FROM bookmarks ");
|
query.append(", bookmarks.icon FROM bookmarks LEFT JOIN history ON bookmarks.url=history.url ");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
query.append(" FROM history ");
|
query.append(" FROM history ");
|
||||||
@ -128,19 +125,23 @@ QSqlQuery LocationCompleterModel::createQuery(QString searchString, QString orde
|
|||||||
|
|
||||||
query.append("WHERE ");
|
query.append("WHERE ");
|
||||||
if (exactMatch) {
|
if (exactMatch) {
|
||||||
query.append("title LIKE ? OR url LIKE ? ");
|
query.append(QString("%1.title LIKE ? OR %1.url LIKE ? ").arg(table));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
searchList = searchString.split(' ', QString::SkipEmptyParts);
|
searchList = searchString.split(' ', QString::SkipEmptyParts);
|
||||||
const int slSize = searchList.size();
|
const int slSize = searchList.size();
|
||||||
for (int i = 0; i < slSize; ++i) {
|
for (int i = 0; i < slSize; ++i) {
|
||||||
query.append("(title LIKE ? OR url LIKE ?) ");
|
query.append(QString("(%1.title LIKE ? OR %1.url LIKE ?) ").arg(table));
|
||||||
if (i < slSize - 1) {
|
if (i < slSize - 1) {
|
||||||
query.append("AND ");
|
query.append("AND ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < alreadyFound.count(); i++) {
|
||||||
|
query.append(QString("AND (NOT %1.url=?) ").arg(table));
|
||||||
|
}
|
||||||
|
|
||||||
if (!orderBy.isEmpty()) {
|
if (!orderBy.isEmpty()) {
|
||||||
query.append("ORDER BY " + orderBy);
|
query.append("ORDER BY " + orderBy);
|
||||||
}
|
}
|
||||||
@ -160,6 +161,11 @@ QSqlQuery LocationCompleterModel::createQuery(QString searchString, QString orde
|
|||||||
sqlQuery.addBindValue(QString("%%1%").arg(str));
|
sqlQuery.addBindValue(QString("%%1%").arg(str));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach(const QUrl & url, alreadyFound) {
|
||||||
|
sqlQuery.addBindValue(url);
|
||||||
|
}
|
||||||
|
|
||||||
sqlQuery.addBindValue(limit);
|
sqlQuery.addBindValue(limit);
|
||||||
|
|
||||||
return sqlQuery;
|
return sqlQuery;
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include <QStandardItemModel>
|
#include <QStandardItemModel>
|
||||||
|
|
||||||
class QSqlQuery;
|
class QSqlQuery;
|
||||||
|
class QUrl;
|
||||||
|
|
||||||
class LocationCompleterModel : public QStandardItemModel
|
class LocationCompleterModel : public QStandardItemModel
|
||||||
{
|
{
|
||||||
@ -48,7 +49,7 @@ private:
|
|||||||
Nothing = 4
|
Nothing = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
QSqlQuery createQuery(QString searchString, QString orderBy, int limit, bool bookmarks, bool exactMatch);
|
QSqlQuery createQuery(QString searchString, QString orderBy, const QList<QUrl> &alreadyFound, int limit, bool bookmarks, bool exactMatch);
|
||||||
|
|
||||||
QString m_lastCompletion;
|
QString m_lastCompletion;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user