From ec70c7d43d3107209285374b9669d1e7d539c797 Mon Sep 17 00:00:00 2001 From: nowrep Date: Sun, 2 Sep 2012 15:19:12 +0200 Subject: [PATCH] LocationCompleter: Bookmarks results are now ordered by count --- src/lib/app/profileupdater.cpp | 60 ++++++++++--------- src/lib/app/profileupdater.h | 1 + src/lib/bookmarks/bookmarksmanager.cpp | 19 +++++- src/lib/bookmarks/bookmarksmodel.cpp | 8 +++ src/lib/bookmarks/bookmarksmodel.h | 2 + .../completer/locationcompleter.cpp | 13 +++- .../navigation/completer/locationcompleter.h | 2 +- .../completer/locationcompletermodel.cpp | 7 ++- .../completer/locationcompletermodel.h | 3 +- src/lib/navigation/locationbar.cpp | 17 +++++- src/lib/navigation/locationbar.h | 4 +- src/lib/sidebar/bookmarkssidebar.cpp | 22 +++++-- 12 files changed, 113 insertions(+), 45 deletions(-) diff --git a/src/lib/app/profileupdater.cpp b/src/lib/app/profileupdater.cpp index 2b52445a2..ef3d96ac4 100644 --- a/src/lib/app/profileupdater.cpp +++ b/src/lib/app/profileupdater.cpp @@ -29,6 +29,8 @@ ProfileUpdater::ProfileUpdater(const QString &profilePath) : m_profilePath(profilePath) { + // FIXME: Remove this line when releasing new version + update131(); } void ProfileUpdater::checkProfile() @@ -69,60 +71,38 @@ void ProfileUpdater::updateProfile(const QString ¤t, const QString &profil if (profileVersion == Updater::parseVersionFromString("1.0.0-b4")) { update100b4(); - update100rc1(); - update100(); - update118(); - update120(); - update130(); return; } if (profileVersion == Updater::parseVersionFromString("1.0.0-rc1")) { update100rc1(); - update100(); - update118(); - update120(); - update130(); return; } if (profileVersion == Updater::parseVersionFromString("1.0.0")) { update100(); - update118(); - update120(); - update130(); - return; - } - - if (profileVersion == Updater::parseVersionFromString("1.1.0")) { - update118(); - update120(); - update130(); return; } - if (profileVersion == Updater::parseVersionFromString("1.1.5")) { + if (profileVersion == Updater::parseVersionFromString("1.1.0") || + profileVersion == Updater::parseVersionFromString("1.1.5") || + profileVersion == Updater::parseVersionFromString("1.1.8")) { update118(); - update120(); - update130(); return; } - if (profileVersion == Updater::parseVersionFromString("1.1.8")) { - update118(); + if (profileVersion == Updater::parseVersionFromString("1.2.0")) { update120(); - update130(); return; } - if (profileVersion == Updater::parseVersionFromString("1.2.0")) { - update120(); + if (profileVersion == Updater::parseVersionFromString("1.3.0")) { update130(); return; } - if (profileVersion == Updater::parseVersionFromString("1.3.0")) { - update130(); + if (profileVersion == Updater::parseVersionFromString("1.3.1")) { + update131(); return; } @@ -160,6 +140,8 @@ void ProfileUpdater::update100b4() QSqlQuery query; query.exec("CREATE TABLE IF NOT EXISTS search_engines (id INTEGER PRIMARY KEY, name TEXT, icon TEXT," "url TEXT, shortcut TEXT, suggestionsUrl TEXT, suggestionsParameters TEXT);"); + + update100rc1(); } void ProfileUpdater::update100rc1() @@ -173,6 +155,8 @@ void ProfileUpdater::update100rc1() query.exec("ALTER TABLE bookmarks ADD COLUMN toolbar_position NUMERIC"); query.exec("UPDATE bookmarks SET toolbar_position=0"); + + update100(); } void ProfileUpdater::update100() @@ -183,6 +167,8 @@ void ProfileUpdater::update100() QSqlQuery query; query.exec("ALTER TABLE autofill ADD COLUMN last_used NUMERIC"); query.exec("UPDATE autofill SET last_used=0"); + + update118(); } void ProfileUpdater::update118() @@ -192,6 +178,8 @@ void ProfileUpdater::update118() QSqlQuery query; query.exec("ALTER TABLE folders ADD COLUMN parent TEXT"); + + update120(); } void ProfileUpdater::update120() @@ -213,6 +201,8 @@ void ProfileUpdater::update120() query.exec("CREATE INDEX bookmarksUrl ON bookmarks(url ASC)"); db.commit(); + + update130(); } void ProfileUpdater::update130() @@ -222,4 +212,16 @@ void ProfileUpdater::update130() QSqlQuery query; query.exec("ALTER TABLE bookmarks ADD COLUMN keyword TEXT"); + + update131(); +} + +void ProfileUpdater::update131() +{ + std::cout << "QupZilla: Upgrading profile version from 1.3.1..." << std::endl; + mApp->connectDatabase(); + + QSqlQuery query; + query.exec("ALTER TABLE bookmarks ADD COLUMN count NUMERIC"); + query.exec("UPDATE bookmarks SET count=0"); } diff --git a/src/lib/app/profileupdater.h b/src/lib/app/profileupdater.h index c088f5d92..5b2a11e25 100644 --- a/src/lib/app/profileupdater.h +++ b/src/lib/app/profileupdater.h @@ -38,6 +38,7 @@ class ProfileUpdater void update118(); void update120(); void update130(); + void update131(); QString m_profilePath; }; diff --git a/src/lib/bookmarks/bookmarksmanager.cpp b/src/lib/bookmarks/bookmarksmanager.cpp index ba3261756..36f8a8e56 100644 --- a/src/lib/bookmarks/bookmarksmanager.cpp +++ b/src/lib/bookmarks/bookmarksmanager.cpp @@ -189,14 +189,27 @@ void BookmarksManager::itemControlClicked(QTreeWidgetItem* item) if (!item || item->text(1).isEmpty()) { return; } - getQupZilla()->tabWidget()->addView(QUrl(item->text(1)), item->text(0)); + + int id = item->data(0, Qt::UserRole + 10).toInt(); + mApp->bookmarksModel()->countUpBookmark(id); + + const QUrl &url = QUrl::fromEncoded(item->text(1).toUtf8()); + getQupZilla()->tabWidget()->addView(url, item->text(0)); } void BookmarksManager::loadInNewTab() { - if (QAction* action = qobject_cast(sender())) { - getQupZilla()->tabWidget()->addView(action->data().toUrl(), qzSettings->newTabPosition); + QTreeWidgetItem* item = ui->bookmarksTree->currentItem(); + QAction* action = qobject_cast(sender()); + + if (!item || !action) { + return; } + + int id = item->data(0, Qt::UserRole + 10).toInt(); + mApp->bookmarksModel()->countUpBookmark(id); + + getQupZilla()->tabWidget()->addView(action->data().toUrl(), item->text(0), qzSettings->newTabPosition); } void BookmarksManager::deleteItem() diff --git a/src/lib/bookmarks/bookmarksmodel.cpp b/src/lib/bookmarks/bookmarksmodel.cpp index 7e1742573..d95c25b81 100644 --- a/src/lib/bookmarks/bookmarksmodel.cpp +++ b/src/lib/bookmarks/bookmarksmodel.cpp @@ -368,6 +368,14 @@ bool BookmarksModel::changeIcon(int id, const QIcon &icon) return true; } +void BookmarksModel::countUpBookmark(int id) +{ + QSqlQuery query; + query.prepare("UPDATE bookmarks SET count = count + 1 WHERE id=?"); + query.addBindValue(id); + query.exec(); +} + bool BookmarksModel::createFolder(const QString &name) { if (isFolder(name)) { diff --git a/src/lib/bookmarks/bookmarksmodel.h b/src/lib/bookmarks/bookmarksmodel.h index 02fdea897..ff7f0b8f6 100644 --- a/src/lib/bookmarks/bookmarksmodel.h +++ b/src/lib/bookmarks/bookmarksmodel.h @@ -88,6 +88,8 @@ class QT_QUPZILLA_EXPORT BookmarksModel : public QObject bool editBookmark(int id, const QString &title = QString(), const QUrl &url = QUrl(), const QString &folder = QString()); bool changeIcon(int id, const QIcon &icon); + void countUpBookmark(int id); + bool createFolder(const QString &name); void removeFolder(const QString &name); diff --git a/src/lib/navigation/completer/locationcompleter.cpp b/src/lib/navigation/completer/locationcompleter.cpp index c6f091d3d..b9afdf9e8 100644 --- a/src/lib/navigation/completer/locationcompleter.cpp +++ b/src/lib/navigation/completer/locationcompleter.cpp @@ -63,12 +63,23 @@ void LocationCompleter::showMostVisited() void LocationCompleter::currentChanged(const QModelIndex &index) { + int bookmarkId = -1; QString completion = index.data().toString(); + if (completion.isEmpty()) { completion = m_originalText; } - emit showCompletion(completion); + if (index.data(LocationCompleterModel::BookmarkRole).toBool()) { + bool ok = false; + int id = index.data(LocationCompleterModel::IdRole).toInt(&ok); + + if (ok) { + bookmarkId = id; + } + } + + emit showCompletion(completion, bookmarkId); } void LocationCompleter::popupClosed() diff --git a/src/lib/navigation/completer/locationcompleter.h b/src/lib/navigation/completer/locationcompleter.h index 635d7ad65..7ee6dd686 100644 --- a/src/lib/navigation/completer/locationcompleter.h +++ b/src/lib/navigation/completer/locationcompleter.h @@ -38,7 +38,7 @@ class QT_QUPZILLA_EXPORT LocationCompleter : public QObject void closePopup(); signals: - void showCompletion(const QString &); + void showCompletion(const QString &, int bookmarkId); void completionActivated(); public slots: diff --git a/src/lib/navigation/completer/locationcompletermodel.cpp b/src/lib/navigation/completer/locationcompletermodel.cpp index 1256b3397..4d2ef27f6 100644 --- a/src/lib/navigation/completer/locationcompletermodel.cpp +++ b/src/lib/navigation/completer/locationcompletermodel.cpp @@ -49,7 +49,7 @@ void LocationCompleterModel::refreshCompletions(const QString &string) QList urlList; if (showType == HistoryAndBookmarks || showType == Bookmarks) { - QSqlQuery query = createQuery(string, QString("history.count DESC"), urlList, limit, true, false); + QSqlQuery query = createQuery(string, "bookmarks.count DESC", urlList, limit, true); query.exec(); while (query.next()) { @@ -70,7 +70,7 @@ void LocationCompleterModel::refreshCompletions(const QString &string) } if (showType == HistoryAndBookmarks || showType == History) { - QSqlQuery query = createQuery(string, "count DESC", urlList, limit, false, false); + QSqlQuery query = createQuery(string, "count DESC", urlList, limit); query.exec(); while (query.next()) { @@ -110,7 +110,8 @@ void LocationCompleterModel::showMostVisited() } } -QSqlQuery LocationCompleterModel::createQuery(QString searchString, QString orderBy, const QList &alreadyFound, int limit, bool bookmarks, bool exactMatch) +QSqlQuery LocationCompleterModel::createQuery(const QString &searchString, const QString &orderBy, + const QList &alreadyFound, int limit, bool bookmarks, bool exactMatch) { QString table = bookmarks ? "bookmarks" : "history"; QString query = QString("SELECT %1.id, %1.url, %1.title").arg(table); diff --git a/src/lib/navigation/completer/locationcompletermodel.h b/src/lib/navigation/completer/locationcompletermodel.h index a9db79ebf..9186dc69f 100644 --- a/src/lib/navigation/completer/locationcompletermodel.h +++ b/src/lib/navigation/completer/locationcompletermodel.h @@ -49,7 +49,8 @@ public slots: Nothing = 4 }; - QSqlQuery createQuery(QString searchString, QString orderBy, const QList &alreadyFound, int limit, bool bookmarks, bool exactMatch); + QSqlQuery createQuery(const QString &searchString, const QString &orderBy, const QList &alreadyFound, + int limit, bool bookmarks = false, bool exactMatch = false); QString m_lastCompletion; diff --git a/src/lib/navigation/locationbar.cpp b/src/lib/navigation/locationbar.cpp index b649cb232..5915d2933 100644 --- a/src/lib/navigation/locationbar.cpp +++ b/src/lib/navigation/locationbar.cpp @@ -50,6 +50,7 @@ LocationBar::LocationBar(QupZilla* mainClass) , m_pasteAndGoAction(0) , m_clearAction(0) , m_holdingAlt(false) + , m_completerBookmarkId(-1) , m_loadProgress(0) , m_loadFinished(true) { @@ -76,7 +77,7 @@ LocationBar::LocationBar(QupZilla* mainClass) addWidget(down, LineEdit::RightSide); m_completer.setLocationBar(this); - connect(&m_completer, SIGNAL(showCompletion(QString)), this, SLOT(showCompletion(QString))); + connect(&m_completer, SIGNAL(showCompletion(QString, int)), this, SLOT(showCompletion(QString, int))); connect(&m_completer, SIGNAL(completionActivated()), this, SLOT(urlEnter())); connect(this, SIGNAL(textEdited(QString)), this, SLOT(textEdit())); @@ -109,9 +110,13 @@ void LocationBar::updatePlaceHolderText() setPlaceholderText(tr("Enter URL address or search on %1").arg(mApp->searchEnginesManager()->activeEngine().name)); } -void LocationBar::showCompletion(const QString &newText) +void LocationBar::showCompletion(const QString &newText, int bookmarkId) { + m_completerBookmarkId = bookmarkId; + LineEdit::setText(newText); + + // Move cursor to the end end(false); } @@ -146,6 +151,12 @@ QUrl LocationBar::createUrl() void LocationBar::urlEnter() { + if (m_completerBookmarkId != -1) { + mApp->bookmarksModel()->countUpBookmark(m_completerBookmarkId); + + m_completerBookmarkId = -1; + } + m_completer.closePopup(); m_webView->setFocus(); @@ -161,6 +172,8 @@ void LocationBar::textEdit() m_completer.closePopup(); } + m_completerBookmarkId = -1; + showGoButton(); } diff --git a/src/lib/navigation/locationbar.h b/src/lib/navigation/locationbar.h index cbcc8400f..6682d24c6 100644 --- a/src/lib/navigation/locationbar.h +++ b/src/lib/navigation/locationbar.h @@ -71,7 +71,7 @@ private slots: void pasteAndGo(); void updatePlaceHolderText(); - void showCompletion(const QString &newText); + void showCompletion(const QString &newText, int bookmarkId); void onLoadProgress(int progress); void onLoadFinished(); @@ -107,6 +107,8 @@ private slots: bool m_rssIconVisible; bool m_holdingAlt; + int m_completerBookmarkId; + int m_loadProgress; bool m_loadFinished; }; diff --git a/src/lib/sidebar/bookmarkssidebar.cpp b/src/lib/sidebar/bookmarkssidebar.cpp index 56ab25f0d..79f17dfb9 100644 --- a/src/lib/sidebar/bookmarkssidebar.cpp +++ b/src/lib/sidebar/bookmarkssidebar.cpp @@ -63,7 +63,10 @@ void BookmarksSideBar::itemControlClicked(QTreeWidgetItem* item) return; } - QUrl url = QUrl::fromEncoded(item->text(1).toUtf8()); + int id = item->data(0, Qt::UserRole + 10).toInt(); + mApp->bookmarksModel()->countUpBookmark(id); + + const QUrl &url = QUrl::fromEncoded(item->text(1).toUtf8()); p_QupZilla->tabWidget()->addView(url, item->text(0)); } @@ -73,15 +76,26 @@ void BookmarksSideBar::itemDoubleClicked(QTreeWidgetItem* item) return; } - QUrl url = QUrl::fromEncoded(item->text(1).toUtf8()); + int id = item->data(0, Qt::UserRole + 10).toInt(); + mApp->bookmarksModel()->countUpBookmark(id); + + const QUrl &url = QUrl::fromEncoded(item->text(1).toUtf8()); p_QupZilla->loadAddress(url); } void BookmarksSideBar::loadInNewTab() { - if (QAction* action = qobject_cast(sender())) { - p_QupZilla->tabWidget()->addView(action->data().toUrl(), qzSettings->newTabPosition); + QTreeWidgetItem* item = ui->bookmarksTree->currentItem(); + QAction* action = qobject_cast(sender()); + + if (!item || !action) { + return; } + + int id = item->data(0, Qt::UserRole + 10).toInt(); + mApp->bookmarksModel()->countUpBookmark(id); + + p_QupZilla->tabWidget()->addView(action->data().toUrl(), item->text(0), qzSettings->newTabPosition); } void BookmarksSideBar::copyAddress()