diff --git a/src/lib/bookmarks/bookmarks.cpp b/src/lib/bookmarks/bookmarks.cpp index 844c6f9a2..1a5170e57 100644 --- a/src/lib/bookmarks/bookmarks.cpp +++ b/src/lib/bookmarks/bookmarks.cpp @@ -63,87 +63,6 @@ bool Bookmarks::showOnlyIconsInToolbar() const return m_showOnlyIconsInToolbar; } -void Bookmarks::exportToHtml(const QString &fileName) -{ - Q_UNUSED(fileName) -#if 0 - QFile file(fileName); - - if (!file.open(QFile::WriteOnly | QFile::Truncate)) { - qWarning() << "Bookmarks::exportHtml Cannot open file for writing!" << file.errorString(); - } - - QTextStream out(&file); - - out << "" << endl; - out << "" << endl; - out << "" << endl; - out << "Bookmarks" << endl; - out << "

Bookmarks

" << endl; - - out << "

" << endl; - - QString indent = " "; - QList > allFolders; - - QPair menu; - menu.first = "bookmarksMenu"; - menu.second = false; - - QPair toolbar; - toolbar.first = "bookmarksToolbar"; - toolbar.second = false; - - allFolders.append(menu); - allFolders.append(toolbar); - - QSqlQuery query; - query.exec("SELECT name, subfolder FROM folders"); - - while (query.next()) { - QPair pair; - pair.first = query.value(0).toString(); - pair.second = query.value(1).toString() == QLatin1String("yes"); - - allFolders.append(pair); - } - - for (int i = 0; i < allFolders.size(); ++i) { - QPair pair = allFolders.at(i); - - out << indent << "

" << pair.first << "

" << endl; - out << indent << "

" << endl; - - QSqlQuery q; - q.prepare("SELECT title, url FROM bookmarks WHERE folder = ?"); - q.addBindValue(pair.first); - q.exec(); - - while (q.next()) { - QString title = q.value(0).toString(); - QString url = q.value(1).toString(); - - out << indent << indent << "

" << title << "" << endl; - } - - out << indent << "

" << endl; - } - - query.exec("SELECT title, url FROM bookmarks WHERE folder='' OR folder='unsorted'"); - - while (query.next()) { - QString title = query.value(0).toString(); - QString url = query.value(1).toString(); - - out << indent << "

" << title << "" << endl; - } - - out << "

" << endl; -#endif -} - BookmarkItem* Bookmarks::rootItem() const { return m_root; @@ -196,10 +115,10 @@ QList Bookmarks::searchBookmarks(const QUrl &url) const return items; } -QList Bookmarks::searchBookmarks(const QString &string, Qt::CaseSensitivity sensitive) const +QList Bookmarks::searchBookmarks(const QString &string, int limit, Qt::CaseSensitivity sensitive) const { QList items; - search(&items, m_root, string, sensitive); + search(&items, m_root, string, limit, sensitive); return items; } @@ -467,16 +386,20 @@ void Bookmarks::search(QList* items, BookmarkItem* parent, const } } -void Bookmarks::search(QList* items, BookmarkItem* parent, const QString &string, Qt::CaseSensitivity sensitive) const +void Bookmarks::search(QList* items, BookmarkItem* parent, const QString &string, int limit, Qt::CaseSensitivity sensitive) const { Q_ASSERT(items); Q_ASSERT(parent); + if (limit == items->count()) { + return; + } + switch (parent->type()) { case BookmarkItem::Root: case BookmarkItem::Folder: foreach (BookmarkItem* child, parent->children()) { - search(items, child, string, sensitive); + search(items, child, string, limit, sensitive); } break; diff --git a/src/lib/bookmarks/bookmarks.h b/src/lib/bookmarks/bookmarks.h index d0fda69bf..9a9ba02c2 100644 --- a/src/lib/bookmarks/bookmarks.h +++ b/src/lib/bookmarks/bookmarks.h @@ -39,7 +39,6 @@ public: void saveSettings(); bool showOnlyIconsInToolbar() const; - void exportToHtml(const QString &fileName); BookmarkItem* rootItem() const; BookmarkItem* toolbarFolder() const; @@ -54,8 +53,8 @@ public: // Search bookmarks (urls only) for exact url match QList searchBookmarks(const QUrl &url) const; - // Search bookmarks (urls only) for contains match through all properties - QList searchBookmarks(const QString &string, Qt::CaseSensitivity sensitive = Qt::CaseInsensitive) const; + // Search bookmarks for contains match through all properties + QList searchBookmarks(const QString &string, int limit = -1, Qt::CaseSensitivity sensitive = Qt::CaseInsensitive) const; void addBookmark(BookmarkItem* parent, BookmarkItem* item); void insertBookmark(BookmarkItem* parent, int row, BookmarkItem* item); @@ -86,7 +85,7 @@ private: QVariantList writeBookmarks(BookmarkItem* parent); void search(QList* items, BookmarkItem* parent, const QUrl &url) const; - void search(QList* items, BookmarkItem* parent, const QString &string, Qt::CaseSensitivity sensitive) const; + void search(QList* items, BookmarkItem* parent, const QString &string, int limit, Qt::CaseSensitivity sensitive) const; BookmarkItem* m_root; BookmarkItem* m_folderToolbar; diff --git a/src/lib/navigation/completer/locationcompletermodel.cpp b/src/lib/navigation/completer/locationcompletermodel.cpp index 4c9448ba6..abb24595c 100644 --- a/src/lib/navigation/completer/locationcompletermodel.cpp +++ b/src/lib/navigation/completer/locationcompletermodel.cpp @@ -34,8 +34,15 @@ LocationCompleterModel::LocationCompleterModel(QObject* parent) static bool countBiggerThan(const QStandardItem* i1, const QStandardItem* i2) { - return i1->data(LocationCompleterModel::CountRole).toInt() > - i2->data(LocationCompleterModel::CountRole).toInt(); + // Move bookmarks up + bool i1Bookmark = i1->data(LocationCompleterModel::BookmarkRole).toBool(); + bool i2Bookmark = i2->data(LocationCompleterModel::BookmarkRole).toBool(); + + if (i1Bookmark && i2Bookmark) { + return i1->data(LocationCompleterModel::CountRole).toInt() > + i2->data(LocationCompleterModel::CountRole).toInt(); + } + return i1Bookmark; } void LocationCompleterModel::refreshCompletions(const QString &string) @@ -54,20 +61,19 @@ void LocationCompleterModel::refreshCompletions(const QString &string) clear(); - Type showType = (Type) qzSettings->showLocationSuggestions; - - int limit = string.size() < 3 ? 25 : 15; + const int bookmarksLimit = 10; + const int historyLimit = 20; QList urlList; QList itemList; + Type showType = (Type) qzSettings->showLocationSuggestions; if (showType == HistoryAndBookmarks || showType == Bookmarks) { - QList bookmarks = mApp->bookmarks()->searchBookmarks(string); + QList bookmarks = mApp->bookmarks()->searchBookmarks(string, bookmarksLimit); foreach (BookmarkItem* bookmark, bookmarks) { Q_ASSERT(bookmark->isUrl()); QStandardItem* item = new QStandardItem(); - item->setIcon(bookmark->icon()); item->setText(bookmark->url().toEncoded()); item->setData(-1, IdRole); @@ -83,18 +89,20 @@ void LocationCompleterModel::refreshCompletions(const QString &string) urlList.append(bookmark->url()); itemList.append(item); } - - limit -= itemList.count(); } if (showType == HistoryAndBookmarks || showType == History) { - QSqlQuery query = createQuery(string, "count DESC", urlList, limit); + QSqlQuery query = createQuery(string, historyLimit); query.exec(); while (query.next()) { - QStandardItem* item = new QStandardItem(); const QUrl url = query.value(1).toUrl(); + if (urlList.contains(url)) { + continue; + } + + QStandardItem* item = new QStandardItem(); item->setIcon(_iconForUrl(url)); item->setText(url.toEncoded()); item->setData(query.value(0), IdRole); @@ -183,8 +191,7 @@ QString LocationCompleterModel::completeDomain(const QString &text) return sqlQuery.value(0).toUrl().host(); } -QSqlQuery LocationCompleterModel::createQuery(const QString &searchString, const QString &orderBy, - const QList &alreadyFound, int limit, bool exactMatch) +QSqlQuery LocationCompleterModel::createQuery(const QString &searchString, int limit, bool exactMatch) { QStringList searchList; QString query = QLatin1String("SELECT id, url, title, count FROM history WHERE "); @@ -203,17 +210,7 @@ QSqlQuery LocationCompleterModel::createQuery(const QString &searchString, const } } - for (int i = 0; i < alreadyFound.count(); i++) { - query.append(QLatin1String("AND (NOT url=?) ")); - } - - query.append(QLatin1String("GROUP BY url ")); - - if (!orderBy.isEmpty()) { - query.append(QLatin1String("ORDER BY ") + orderBy); - } - - query.append(QLatin1String(" LIMIT ?")); + query.append(QLatin1String("LIMIT ?")); QSqlQuery sqlQuery; sqlQuery.prepare(query); @@ -229,10 +226,6 @@ QSqlQuery LocationCompleterModel::createQuery(const QString &searchString, const } } - foreach (const QUrl &url, alreadyFound) { - sqlQuery.addBindValue(url); - } - sqlQuery.addBindValue(limit); return sqlQuery; diff --git a/src/lib/navigation/completer/locationcompletermodel.h b/src/lib/navigation/completer/locationcompletermodel.h index cc1f2442f..d1d06a3ed 100644 --- a/src/lib/navigation/completer/locationcompletermodel.h +++ b/src/lib/navigation/completer/locationcompletermodel.h @@ -61,7 +61,7 @@ private: Nothing = 4 }; - QSqlQuery createQuery(const QString &searchString, const QString &orderBy, const QList &alreadyFound, + QSqlQuery createQuery(const QString &searchString, int limit, bool exactMatch = false); TabPosition tabPositionForUrl(const QUrl &url) const;