summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexis Menard <alexis.menard@openbossa.org>2011-08-11 12:31:41 -0300
committerAlexis Menard <alexis.menard@openbossa.org>2011-08-11 18:02:04 -0300
commitb8cf8138e8284007517f3f4a613c98f882c60c80 (patch)
treed8575423a58b5f92e072e19942ca3b6507c6ef65
parente796525148498646bb61ca1592d5aa21d52405c9 (diff)
downloadsnowshoe-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.cpp28
-rw-r--r--src/BookmarkModel.h4
-rw-r--r--tests/database/tst_database.cpp12
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();