diff options
author | Andrea Diamantini <adjam7@gmail.com> | 2010-12-29 11:34:39 +0100 |
---|---|---|
committer | Andrea Diamantini <adjam7@gmail.com> | 2011-01-07 15:36:49 +0100 |
commit | c466aa12bd18c04021417c54781312bc8db7da2c (patch) | |
tree | ba69fc109c9f2d01bca8a5343b783af1484e6fba | |
parent | Disable multi-dimensional scroll button on scrollbars. (diff) | |
download | rekonq-c466aa12bd18c04021417c54781312bc8db7da2c.tar.xz |
Added a visit count parameter to the history.
This change will preserve old history on first load, adding the visit count parameter
and saving the new structure on close
This will used expecially in the Awesome UrlBar ordering suggestions code.
WARNING: HISTORY_VERSION upgrade
CCMAIL:megabigbug@yahoo.fr
-rw-r--r-- | src/history/historymanager.cpp | 61 | ||||
-rw-r--r-- | src/history/historymanager.h | 25 | ||||
-rw-r--r-- | src/history/historymodels.cpp | 4 | ||||
-rw-r--r-- | src/history/historymodels.h | 17 |
4 files changed, 72 insertions, 35 deletions
diff --git a/src/history/historymanager.cpp b/src/history/historymanager.cpp index 92f9caee..59cc121e 100644 --- a/src/history/historymanager.cpp +++ b/src/history/historymanager.cpp @@ -59,7 +59,7 @@ #include <QtAlgorithms> -static const unsigned int HISTORY_VERSION = 23; +static const unsigned int HISTORY_VERSION = 24; HistoryManager::HistoryManager(QObject *parent) @@ -68,8 +68,6 @@ HistoryManager::HistoryManager(QObject *parent) , m_historyLimit(0) , m_historyTreeModel(0) { - kDebug() << "Loading HistoryManager..."; - connect(this, SIGNAL(entryAdded(const HistoryItem &)), m_saveTimer, SLOT(changeOccurred())); connect(this, SIGNAL(entryRemoved(const HistoryItem &)), m_saveTimer, SLOT(changeOccurred())); connect(m_saveTimer, SIGNAL(saveNeeded()), this, SLOT(save())); @@ -82,7 +80,6 @@ HistoryManager::HistoryManager(QObject *parent) // QWebHistoryInterface will delete the history manager QWebHistoryInterface::setDefaultInterface(this); - kDebug() << "Loading HistoryManager... DONE"; } @@ -115,11 +112,31 @@ void HistoryManager::addHistoryEntry(const QString &url) cleanUrl.setPassword(QString()); cleanUrl.setHost(cleanUrl.host().toLower()); - HistoryItem item(cleanUrl.toString(), QDateTime::currentDateTime()); + QString checkUrlString = cleanUrl.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)) + { + int index = m_historyFilterModel->historyLocation(checkUrlString); + item = m_history.at(index); + m_history.removeOne(item); + emit entryRemoved(item); + + item.dateTime = QDateTime::currentDateTime(); + item.visitCount++; + } + else + { + item = HistoryItem(checkUrlString, QDateTime::currentDateTime()); + } + m_history.prepend(item); emit entryAdded(item); - + if (m_history.count() == 1) checkForExpired(); } @@ -328,15 +345,31 @@ void HistoryManager::load() buffer.close(); buffer.setBuffer(&data); buffer.open(QIODevice::ReadOnly); - quint32 ver; - stream >> ver; - if (ver != HISTORY_VERSION) - continue; + quint32 version; + stream >> version; + HistoryItem item; - stream >> item.url; - stream >> item.dateTime; - stream >> item.title; + + switch (version) + { + case HISTORY_VERSION: // default case + stream >> item.url; + stream >> item.dateTime; + stream >> item.title; + stream >> item.visitCount; + break; + case 23: // this will be used to upgrade previous structure... + stream >> item.url; + stream >> item.dateTime; + stream >> item.title; + item.visitCount = 1; + break; + + default: + continue; + }; + if (!item.dateTime.isValid()) continue; @@ -415,7 +448,7 @@ void HistoryManager::save() QByteArray data; QDataStream stream(&data, QIODevice::WriteOnly); HistoryItem item = m_history.at(i); - stream << HISTORY_VERSION << item.url << item.dateTime << item.title; + stream << HISTORY_VERSION << item.url << item.dateTime << item.title << item.visitCount; out << data; } tempFile.close(); diff --git a/src/history/historymanager.h b/src/history/historymanager.h index 1e03fb1c..a4099de7 100644 --- a/src/history/historymanager.h +++ b/src/history/historymanager.h @@ -61,14 +61,16 @@ public: const QString &t = QString() ) : title(t) - , url(u), - dateTime(d) + , url(u) + , dateTime(d) + , visitCount(1) {} inline bool operator==(const HistoryItem &other) const { return other.title == title - && other.url == url && other.dateTime == dateTime; + && other.url == url + && other.dateTime == dateTime; } // history is sorted in reverse @@ -80,6 +82,7 @@ public: QString title; QString url; QDateTime dateTime; + int visitCount; }; @@ -100,12 +103,6 @@ class REKONQ_TESTS_EXPORT HistoryManager : public QWebHistoryInterface { Q_OBJECT -signals: - void historyReset(); - void entryAdded(const HistoryItem &item); - void entryRemoved(const HistoryItem &item); - void entryUpdated(int offset); - public: HistoryManager(QObject *parent = 0); ~HistoryManager(); @@ -123,12 +120,18 @@ public: // History manager keeps around these models for use by the completer and other classes HistoryFilterModel *historyFilterModel() const { return m_historyFilterModel; }; HistoryTreeModel *historyTreeModel() const { return m_historyTreeModel; }; + +Q_SIGNALS: + void historyReset(); + void entryAdded(const HistoryItem &item); + void entryRemoved(const HistoryItem &item); + void entryUpdated(int offset); -public slots: +public Q_SLOTS: void clear(); void loadSettings(); -private slots: +private Q_SLOTS: void save(); void checkForExpired(); diff --git a/src/history/historymodels.cpp b/src/history/historymodels.cpp index 793ff7e5..d9d3efef 100644 --- a/src/history/historymodels.cpp +++ b/src/history/historymodels.cpp @@ -192,8 +192,8 @@ bool HistoryModel::removeRows(int row, int count, const QModelIndex &parent) HistoryFilterModel::HistoryFilterModel(QAbstractItemModel *sourceModel, QObject *parent) - : QAbstractProxyModel(parent), - m_loaded(false) + : QAbstractProxyModel(parent) + , m_loaded(false) { setSourceModel(sourceModel); } diff --git a/src/history/historymodels.h b/src/history/historymodels.h index d193cf86..8cac9245 100644 --- a/src/history/historymodels.h +++ b/src/history/historymodels.h @@ -50,11 +50,6 @@ class REKONQ_TESTS_EXPORT HistoryModel : public QAbstractTableModel { Q_OBJECT -public slots: - void historyReset(); - void entryAdded(); - void entryUpdated(int offset); - public: enum Roles { @@ -66,12 +61,18 @@ public: explicit HistoryModel(HistoryManager *history, QObject *parent = 0); +public Q_SLOTS: + void historyReset(); + void entryAdded(); + void entryUpdated(int offset); + +public: QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; int rowCount(const QModelIndex &parent = QModelIndex()) const; bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); - + private: HistoryManager *m_historyManager; }; @@ -118,7 +119,7 @@ public: bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; -private slots: +private Q_SLOTS: void sourceReset(); void sourceDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); void sourceRowsInserted(const QModelIndex &parent, int start, int end); @@ -165,7 +166,7 @@ public: void setSourceModel(QAbstractItemModel *sourceModel); -private slots: +private Q_SLOTS: void sourceReset(); void sourceRowsInserted(const QModelIndex &parent, int start, int end); void sourceRowsRemoved(const QModelIndex &parent, int start, int end); |