diff options
author | Alexis Menard <alexis.menard@openbossa.org> | 2011-08-11 12:31:41 -0300 |
---|---|---|
committer | Alexis Menard <alexis.menard@openbossa.org> | 2011-08-11 18:02:04 -0300 |
commit | b8cf8138e8284007517f3f4a613c98f882c60c80 (patch) | |
tree | d8575423a58b5f92e072e19942ca3b6507c6ef65 | |
parent | e796525148498646bb61ca1592d5aa21d52405c9 (diff) | |
download | snowshoe-b8cf8138e8284007517f3f4a613c98f882c60c80.tar.gz |
Make the API of BookmarkModel a bit more usable from the outside
This patch also add an API to ease the usage(contains). It fixes also
a bug that you could add the same url multiple times.
Reviewed-by: Ademar Reis
-rw-r--r-- | src/BookmarkModel.cpp | 28 | ||||
-rw-r--r-- | src/BookmarkModel.h | 4 | ||||
-rw-r--r-- | tests/database/tst_database.cpp | 12 |
3 files changed, 41 insertions, 3 deletions
diff --git a/src/BookmarkModel.cpp b/src/BookmarkModel.cpp index ff9e32d..fcfd0b1 100644 --- a/src/BookmarkModel.cpp +++ b/src/BookmarkModel.cpp @@ -17,6 +17,7 @@ #include "BookmarkModel.h" #include <QtSql/QSqlError> +#include <QtSql/QSqlQuery> #include <QtSql/QSqlRecord> BookmarkModel::BookmarkModel(QSqlDatabase database, QObject *parent) @@ -53,6 +54,8 @@ bool BookmarkModel::select() void BookmarkModel::insert(const QString& name, const QString& url) { + if (contains(url)) + return; QSqlRecord record = this->record(); record.setValue("name", name); record.setValue("url", url); @@ -60,9 +63,22 @@ void BookmarkModel::insert(const QString& name, const QString& url) insertRecord(-1, record); } -void BookmarkModel::remove(int index) +void BookmarkModel::remove(const QString& url) { - removeRow(index); + if (!contains(url)) + return; + QSqlQuery sqlQuery(database()); + sqlQuery.prepare(QString("SELECT id FROM bookmarks WHERE url = '%1'").arg(url)); + sqlQuery.exec(); + sqlQuery.first(); + int indexToDelete = -1; + for (int row = 0; row < rowCount(); ++row) { + if (index(row, 0).data(Qt::DisplayRole).toInt() == sqlQuery.value(0).toInt()) { + indexToDelete = row; + break; + } + } + removeRow(indexToDelete); } void BookmarkModel::update(int index, const QString& name, const QString& url) @@ -71,6 +87,14 @@ void BookmarkModel::update(int index, const QString& name, const QString& url) setData(this->index(index, 2), url); } +bool BookmarkModel::contains(const QString& url) +{ + QSqlQuery sqlQuery(database()); + sqlQuery.prepare(QString("SELECT id FROM bookmarks WHERE url = '%1'").arg(url)); + sqlQuery.exec(); + return sqlQuery.first(); +} + QVariant BookmarkModel::data(const QModelIndex& index, int role) const { QVariant value; diff --git a/src/BookmarkModel.h b/src/BookmarkModel.h index f59bbcb..d49b245 100644 --- a/src/BookmarkModel.h +++ b/src/BookmarkModel.h @@ -36,8 +36,10 @@ public: Q_INVOKABLE bool select(); Q_INVOKABLE void insert(const QString& name, const QString& url); - Q_INVOKABLE void remove(int index); + Q_INVOKABLE void remove(const QString& url); Q_INVOKABLE void update(int index, const QString& name, const QString& url); + Q_INVOKABLE bool contains(const QString& url); + Q_INVOKABLE int rowCount() { return QSqlTableModel::rowCount(); }; private: QHash<int, QByteArray> m_roles; diff --git a/tests/database/tst_database.cpp b/tests/database/tst_database.cpp index 932c4a8..995bb37 100644 --- a/tests/database/tst_database.cpp +++ b/tests/database/tst_database.cpp @@ -41,6 +41,7 @@ public slots: private slots: void initialization(); void insert(); + void remove(); void update(); private: @@ -99,11 +100,22 @@ void tst_DataBase::insert() const QString url = record.value("url").toString(); QCOMPARE(url, QLatin1String("http://www.nokia.com")); + QVERIFY(bookmarkModel->contains("http://www.nokia.com")); + const int date = record.value("dateAdded").toInt(); QVERIFY(date != 0); } } +void tst_DataBase::remove() +{ + BookmarkModel* bookmarkModel = DatabaseManager::instance()->bookmarkDataBaseModel(); + + bookmarkModel->remove("http://www.nokia.com"); + QVERIFY(!bookmarkModel->contains("http://www.nokia.com")); +} + + void tst_DataBase::update() { BookmarkModel* bookmarkModel = DatabaseManager::instance()->bookmarkDataBaseModel(); |