diff options
author | Alexis Menard <alexis.menard@openbossa.org> | 2011-08-11 12:20:10 -0300 |
---|---|---|
committer | Alexis Menard <alexis.menard@openbossa.org> | 2011-08-11 14:02:54 -0300 |
commit | e87edef6ea9d1f541e08073796e33359cea1c0a9 (patch) | |
tree | 8edd7d5655b0a91d46bde23028948ebcacb81c2a | |
parent | f445a6209d37222e0a68e0973a292c9aca79c20f (diff) | |
download | snowshoe-e87edef6ea9d1f541e08073796e33359cea1c0a9.tar.gz |
Make the databasemanager a singleton.
It is easier to use as we just instanciate it in the main.cpp and we
can use it no matter which window, no matter which popup. I believe
it is easier than passing pointers around. I also don't see the benefit
of multiple database manager as we will be probably have one model per
information we have, e.g. the bookmark model is sharable around.
Reviewed-by: Ademar Reis
-rw-r--r-- | src/DatabaseManager.cpp | 19 | ||||
-rw-r--r-- | src/DatabaseManager.h | 9 | ||||
-rw-r--r-- | tests/database/tst_database.cpp | 11 |
3 files changed, 29 insertions, 10 deletions
diff --git a/src/DatabaseManager.cpp b/src/DatabaseManager.cpp index 0362eaf..bd993eb 100644 --- a/src/DatabaseManager.cpp +++ b/src/DatabaseManager.cpp @@ -22,6 +22,23 @@ #include <QtSql/QSqlError> #include <QtSql/QSqlQuery> +DatabaseManager* DatabaseManager::m_instance = 0; + +DatabaseManager* DatabaseManager::instance() +{ + if (!m_instance) + m_instance = new DatabaseManager; + return m_instance; +} + +void DatabaseManager::destroy() +{ + if (m_instance) { + delete m_instance; + m_instance = 0; + } +} + DatabaseManager::DatabaseManager() { const QString storagePath = QDesktopServices::storageLocation(QDesktopServices::DataLocation); @@ -60,6 +77,8 @@ bool DatabaseManager::initialize() return false; m_bookmarkModel->generateRoleNames(); + // Populate the model. + m_bookmarkModel->select(); return createdTables; } diff --git a/src/DatabaseManager.h b/src/DatabaseManager.h index 6eef142..42887fd 100644 --- a/src/DatabaseManager.h +++ b/src/DatabaseManager.h @@ -27,9 +27,8 @@ class DatabaseManager { public: - DatabaseManager(); - ~DatabaseManager(); - + static DatabaseManager* instance(); + static void destroy(); bool initialize(); BookmarkModel* bookmarkDataBaseModel() const; @@ -38,6 +37,10 @@ protected: bool createTables(); private: + DatabaseManager(); + ~DatabaseManager(); + + static DatabaseManager* m_instance; QSqlDatabase m_database; BookmarkModel* m_bookmarkModel; }; diff --git a/tests/database/tst_database.cpp b/tests/database/tst_database.cpp index ff6ea40..932c4a8 100644 --- a/tests/database/tst_database.cpp +++ b/tests/database/tst_database.cpp @@ -44,7 +44,6 @@ private slots: void update(); private: - DatabaseManager* m_manager; QByteArray m_XdgDataHome; }; @@ -62,8 +61,6 @@ void tst_DataBase::initTestCase() m_XdgDataHome = qgetenv("XDG_DATA_HOME"); setenv("XDG_DATA_HOME", QDir::tempPath().toLatin1().data(), 1); - - m_manager = new DatabaseManager(); } void tst_DataBase::cleanupTestCase() @@ -72,7 +69,6 @@ void tst_DataBase::cleanupTestCase() databaseDir.remove(QSqlDatabase::database().databaseName()); setenv("XDG_DATA_HOME", m_XdgDataHome.data(), 1); - delete m_manager; } void tst_DataBase::cleanup() @@ -83,12 +79,13 @@ void tst_DataBase::cleanup() void tst_DataBase::initialization() { - QCOMPARE(m_manager->initialize(), true); + QCOMPARE(DatabaseManager::instance(), DatabaseManager::instance()); + QCOMPARE(DatabaseManager::instance()->initialize(), true); } void tst_DataBase::insert() { - BookmarkModel* bookmarkModel = m_manager->bookmarkDataBaseModel(); + BookmarkModel* bookmarkModel = DatabaseManager::instance()->bookmarkDataBaseModel(); QSqlRecord record; { @@ -109,7 +106,7 @@ void tst_DataBase::insert() void tst_DataBase::update() { - BookmarkModel* bookmarkModel = m_manager->bookmarkDataBaseModel(); + BookmarkModel* bookmarkModel = DatabaseManager::instance()->bookmarkDataBaseModel(); QSqlRecord record; bookmarkModel->insert("Google", "http://www.google.com"); |