From 591b4c3cb201c3d405f4a0a168c65bfe83325c0c Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Wed, 15 Feb 2012 16:54:55 +0100 Subject: New History Manager, NO MORE QWebHistoryInterface based. We are just saving datas on our own, I don't like QtWebKit APIs to do it. We now call addHistoryEntry(url, title) on loadFinished. Data structure will remain the same as usual, but I think API is better and data are now saved when we really have them ready. REVIEW:104257 --- src/history/historymanager.cpp | 55 ++++++++++-------------------------------- src/history/historymanager.h | 7 ++---- src/history/historymodels.cpp | 8 ------ src/history/historymodels.h | 1 - src/mainview.cpp | 1 - src/protocolhandler.cpp | 2 +- src/webtab.cpp | 24 ++++++++++++------ src/webtab.h | 3 +++ 8 files changed, 36 insertions(+), 65 deletions(-) (limited to 'src') diff --git a/src/history/historymanager.cpp b/src/history/historymanager.cpp index 602e4606..c78bb009 100644 --- a/src/history/historymanager.cpp +++ b/src/history/historymanager.cpp @@ -63,7 +63,7 @@ static const unsigned int HISTORY_VERSION = 25; HistoryManager::HistoryManager(QObject *parent) - : QWebHistoryInterface(parent) + : QObject(parent) , m_saveTimer(new AutoSaver(this)) , m_historyLimit(0) , m_historyTreeModel(0) @@ -77,9 +77,6 @@ HistoryManager::HistoryManager(QObject *parent) HistoryModel *historyModel = new HistoryModel(this, this); m_historyFilterModel = new HistoryFilterModel(historyModel, this); m_historyTreeModel = new HistoryTreeModel(m_historyFilterModel, this); - - // QWebHistoryInterface will delete the history manager - QWebHistoryInterface::setDefaultInterface(this); } @@ -95,30 +92,33 @@ bool HistoryManager::historyContains(const QString &url) const } -void HistoryManager::addHistoryEntry(const QString &url) +void HistoryManager::addHistoryEntry(const KUrl &url, const QString &title) { QWebSettings *globalSettings = QWebSettings::globalSettings(); if (globalSettings->testAttribute(QWebSettings::PrivateBrowsingEnabled)) return; - QUrl cleanUrl(url); + if (url.isEmpty()) + return; + + QUrl urlToClean(url); // don't store about: urls (home page related) - if (cleanUrl.scheme() == QString("about")) + if (urlToClean.scheme() == QString("about")) return; - cleanUrl.setPassword(QString()); - cleanUrl.setHost(cleanUrl.host().toLower()); - QString checkUrlString = cleanUrl.toString(); + urlToClean.setPassword(QString()); + urlToClean.setHost(urlToClean.host().toLower()); + QString urlString = urlToClean.toString(); HistoryItem item; // NOTE // check if the url has just been visited. // if so, remove previous entry from history, update and prepend it - if (historyContains(checkUrlString)) + if (historyContains(urlString)) { - int index = m_historyFilterModel->historyLocation(checkUrlString); + int index = m_historyFilterModel->historyLocation(urlString); item = m_history.at(index); m_history.removeOne(item); emit entryRemoved(item); @@ -128,7 +128,7 @@ void HistoryManager::addHistoryEntry(const QString &url) } else { - item = HistoryItem(checkUrlString, QDateTime::currentDateTime()); + item = HistoryItem(urlString, QDateTime::currentDateTime(), title); } m_history.prepend(item); @@ -196,35 +196,6 @@ void HistoryManager::checkForExpired() } -void HistoryManager::updateHistoryEntry(const KUrl &url, const QString &title) -{ - QString urlString = url.url(); - urlString.remove(QL1S("www.")); - if (urlString.startsWith(QL1S("http")) && urlString.endsWith(QL1C('/'))) - urlString.remove(urlString.length() - 1, 1); - - for (int i = 0; i < m_history.count(); ++i) - { - QString itemUrl = m_history.at(i).url; - itemUrl.remove(QL1S("www.")); - if (itemUrl.startsWith(QL1S("http")) && itemUrl.endsWith(QL1C('/'))) - itemUrl.remove(itemUrl.length() - 1, 1); - - if (urlString == itemUrl) - { - m_history[i].title = title; - m_history[i].url = url.url(); - m_saveTimer->changeOccurred(); - if (m_lastSavedUrl.isEmpty()) - m_lastSavedUrl = m_history.at(i).url; - - emit entryUpdated(i); - break; - } - } -} - - void HistoryManager::removeHistoryEntry(const KUrl &url, const QString &title) { HistoryItem item; diff --git a/src/history/historymanager.h b/src/history/historymanager.h index d4531e5c..fc2e9abd 100644 --- a/src/history/historymanager.h +++ b/src/history/historymanager.h @@ -45,7 +45,6 @@ #include #include #include -#include #include #include @@ -146,7 +145,7 @@ class HistoryTreeModel; * It manages rekonq history * */ -class REKONQ_TESTS_EXPORT HistoryManager : public QWebHistoryInterface +class REKONQ_TESTS_EXPORT HistoryManager : public QObject { Q_OBJECT @@ -155,8 +154,7 @@ public: ~HistoryManager(); bool historyContains(const QString &url) const; - void addHistoryEntry(const QString &url); - void updateHistoryEntry(const KUrl &url, const QString &title); + void addHistoryEntry(const KUrl &url, const QString &title); void removeHistoryEntry(const KUrl &url, const QString &title = QString()); QList find(const QString &text); @@ -181,7 +179,6 @@ Q_SIGNALS: void historyReset(); void entryAdded(const HistoryItem &item); void entryRemoved(const HistoryItem &item); - void entryUpdated(int offset); void historySaved(); diff --git a/src/history/historymodels.cpp b/src/history/historymodels.cpp index 16054054..d50d28a0 100644 --- a/src/history/historymodels.cpp +++ b/src/history/historymodels.cpp @@ -66,7 +66,6 @@ HistoryModel::HistoryModel(HistoryManager *history, QObject *parent) connect(m_historyManager, SIGNAL(historyReset()), this, SLOT(historyReset())); connect(m_historyManager, SIGNAL(entryRemoved(HistoryItem)), this, SLOT(historyReset())); connect(m_historyManager, SIGNAL(entryAdded(HistoryItem)), this, SLOT(entryAdded())); - connect(m_historyManager, SIGNAL(entryUpdated(int)), this, SLOT(entryUpdated(int))); } @@ -83,13 +82,6 @@ void HistoryModel::entryAdded() } -void HistoryModel::entryUpdated(int offset) -{ - QModelIndex idx = index(offset, 0); - emit dataChanged(idx, idx); -} - - QVariant HistoryModel::headerData(int section, Qt::Orientation orientation, int role) const { if (orientation == Qt::Horizontal diff --git a/src/history/historymodels.h b/src/history/historymodels.h index 9c3bfc36..4f4f30b5 100644 --- a/src/history/historymodels.h +++ b/src/history/historymodels.h @@ -65,7 +65,6 @@ public: public Q_SLOTS: void historyReset(); void entryAdded(); - void entryUpdated(int offset); public: QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; diff --git a/src/mainview.cpp b/src/mainview.cpp index b164c72b..ec838ff4 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -615,7 +615,6 @@ void MainView::webViewTitleChanged(const QString &title) tabBar()->setTabHighlighted(index); } - rApp->historyManager()->updateHistoryEntry(tab->url(), tabTitle); if (ReKonfig::hoveringTabOption() == 1) tabBar()->setTabToolTip(index, tabTitle.remove('&')); } diff --git a/src/protocolhandler.cpp b/src/protocolhandler.cpp index 4744e766..fb7ee936 100644 --- a/src/protocolhandler.cpp +++ b/src/protocolhandler.cpp @@ -250,7 +250,7 @@ void ProtocolHandler::showResults(const KFileItemList &list) rApp->mainWindow()->mainView()->currentUrlBar()->setQUrl(_url); rApp->mainWindow()->currentTab()->setFocus(); - rApp->historyManager()->addHistoryEntry(_url.prettyUrl()); + rApp->historyManager()->addHistoryEntry(_url, _url.prettyUrl()); } } diff --git a/src/webtab.cpp b/src/webtab.cpp index 8db44dd8..cbb38a5e 100644 --- a/src/webtab.cpp +++ b/src/webtab.cpp @@ -33,17 +33,18 @@ #include "rekonq.h" // Local Includes -#include "urlbar.h" +#include "application.h" +#include "historymanager.h" +#include "messagebar.h" +#include "opensearchmanager.h" #include "previewselectorbar.h" #include "rsswidget.h" +#include "sessionmanager.h" +#include "syncmanager.h" +#include "urlbar.h" #include "walletbar.h" #include "webpage.h" #include "webshortcutwidget.h" -#include "application.h" -#include "sessionmanager.h" -#include "syncmanager.h" -#include "opensearchmanager.h" -#include "messagebar.h" // KDE Includes #include @@ -55,7 +56,7 @@ #include // Qt Includes -#include +#include WebTab::WebTab(QWidget *parent) @@ -88,6 +89,7 @@ WebTab::WebTab(QWidget *parent) connect(view(), SIGNAL(loadProgress(int)), this, SLOT(updateProgress(int))); connect(view(), SIGNAL(loadStarted()), this, SLOT(resetProgress())); connect(view(), SIGNAL(titleChanged(QString)), this, SIGNAL(titleChanged(QString))); + connect(view(), SIGNAL(loadFinished(bool)), this, SLOT(loadFinished())); // Session Manager connect(view(), SIGNAL(loadFinished(bool)), rApp->sessionManager(), SLOT(saveSession())); @@ -353,3 +355,11 @@ bool WebTab::hasAdBlockedElements() { return page()->hasAdBlockedElements(); } + + +void WebTab::loadFinished() +{ + // add page to history + QString pageTitle = (page() && page()->isOnRekonqPage()) ? url().url() : m_webView->title(); + rApp->historyManager()->addHistoryEntry(url(), pageTitle); +} diff --git a/src/webtab.h b/src/webtab.h index b0c849ef..257f7380 100644 --- a/src/webtab.h +++ b/src/webtab.h @@ -72,6 +72,7 @@ public: } KUrl url(); + void createPreviewSelectorBar(int index); void hideSelectorBar(); @@ -79,6 +80,7 @@ public: bool hasRSSInfo(); bool isPageLoading(); + bool hasNewSearchEngine(); KParts::ReadOnlyPart *part() @@ -101,6 +103,7 @@ private Q_SLOTS: void openSearchEngineAdded(); void showMessageBar(); + void loadFinished(); private: KUrl extractOpensearchUrl(QWebElement e); -- cgit v1.2.1