SIGSEGV Fixed
[vicar] / src / vicar-lib / cpp / databaseutility.cpp
index e2df72b..b00cdef 100644 (file)
@@ -1,4 +1,5 @@
 #include "databaseutility.h"
+#include <QCryptographicHash>
 #include <QSqlDatabase>
 #include <QSqlError>
 #include <QSqlQuery>
@@ -16,45 +17,51 @@ DatabaseUtility::~DatabaseUtility(){
 }
 
 bool DatabaseUtility::openDatabase(){
-    profilesDB = QSqlDatabase::addDatabase("QSQLITE");
-    //QString path(QDir::home().path());
-    //path.append(QDir::separator()).append("vicar.db.sqlite");
+    vicarDB = QSqlDatabase::addDatabase("QSQLITE");
+#if defined(Q_WS_MAEMO_5)
     QString path("/home/user/vicar.db.sqlite");
+#elif defined(Q_WS_MAEMO_6)
+    QString path("/home/user/.local/share/data/QML/OfflineStorage/Databases/");
+    path.append(QCryptographicHash::hash("VICaR",QCryptographicHash::Md5).toHex()).append(".sqlite");
+#endif
     path = QDir::toNativeSeparators(path);
     qDebug()<< "Opening database at "<<path;
-    profilesDB.setDatabaseName(path);
-    return profilesDB.open();
+    vicarDB.setDatabaseName(path);
+    return vicarDB.open();
 }
 
 bool DatabaseUtility::deleteDatabase(){
     closeDatabase();
-    //QString path(QDir::home().path());
-    //path.append(QDir::separator()).append("vicar.db.sqlite");
+#if defined(Q_WS_MAEMO_5)
     QString path("/home/user/vicar.db.sqlite");
+#elif defined(Q_WS_MAEMO_6)
+    QString path("/home/user/.local/share/data/QML/OfflineStorage/Databases/");
+    path.append(QCryptographicHash::hash("VICaR",QCryptographicHash::Md5).toHex()).append(".sqlite");
+#endif
     path = QDir::toNativeSeparators(path);
     return QFile::remove(path);
 }
 
 void DatabaseUtility::closeDatabase(){
-    if (profilesDB.isOpen()){
-        profilesDB.close();
+    if (vicarDB.isOpen()){
+        vicarDB.close();
     }
 }
 
 bool DatabaseUtility::tableExists(QString tableName){
     bool exists = false;
-    if (profilesDB.isOpen()){
-        QStringList tablesList = profilesDB.tables();
+    if (vicarDB.isOpen()){
+        QStringList tablesList = vicarDB.tables();
         exists = tablesList.contains(tableName,Qt::CaseInsensitive);
     }
     return exists;
 }
 
-bool DatabaseUtility::createProfilesTable(){
-    bool result = false;
-    if (profilesDB.isOpen()){
+bool DatabaseUtility::prepareTables(){
+    bool result = true;
+    if (vicarDB.isOpen()){
         QSqlQuery query;
-        QString strQuery = "create table profiles"
+        QString strQuery = "create table if not exists profiles"
                            "(id integer primary key,"
                            "numberpattern varchar(20),"
                            "gatewaynumber varchar(30),"
@@ -62,6 +69,40 @@ bool DatabaseUtility::createProfilesTable(){
                            "dtmfprefix varchar(20),"
                            "dtmfsuffix varchar(20)"
                            ")";
+        if (!query.exec(strQuery)){
+            qDebug() << "Error creating profiles table";
+            result = false;
+        }
+
+        strQuery = "CREATE TABLE IF NOT EXISTS settings(setting TEXT UNIQUE, value TEXT)";
+        if (!query.exec(strQuery)){
+            qDebug() << "Error creating settings table";
+            result = false;
+        }
+    }
+    return result;
+}
+
+QString DatabaseUtility::getSetting(QString setting){
+    QString value = "Unknown";
+    if (vicarDB.isOpen()){
+        QString strQuery = QString("'SELECT value FROM settings WHERE setting='%1'").arg(setting);
+        qDebug() << "SQL>"<<strQuery;
+        QSqlQuery query(strQuery);
+        if (query.next()){
+            value = query.value(0).toString();
+        }
+    }
+    return value;
+}
+
+bool DatabaseUtility::setSetting(QString setting, QString value){
+    bool result = false;
+    if (vicarDB.isOpen()){
+        QSqlQuery query;
+        QString strQuery = QString("INSERT OR REPLACE INTO settings VALUES ('%1','%2')")
+                           .arg(setting).arg(value);
+        qDebug() << "SQL>"<<strQuery;
         result = query.exec(strQuery);
     }
     return result;
@@ -69,7 +110,7 @@ bool DatabaseUtility::createProfilesTable(){
 
 bool DatabaseUtility::selectProfile(int id,org::maemo::vicar::Profile* profile){
     bool result = false;
-    if (profilesDB.isOpen()){
+    if (vicarDB.isOpen()){
         QString strQuery = QString("select * from profiles where id = %1").arg(id);
         qDebug() << "SQL>"<<strQuery;
         QSqlQuery query(strQuery);
@@ -88,7 +129,7 @@ bool DatabaseUtility::selectProfile(int id,org::maemo::vicar::Profile* profile){
 
 bool DatabaseUtility::getAllProfiles(org::maemo::vicar::ProfileList* profileList){
     bool result = false;
-    if (profilesDB.isOpen()){
+    if (vicarDB.isOpen()){
         QString strQuery = QString("select * from profiles order by id");
         qDebug() << "SQL>"<<strQuery;
         QSqlQuery query(strQuery);
@@ -109,7 +150,7 @@ bool DatabaseUtility::getAllProfiles(org::maemo::vicar::ProfileList* profileList
 
 bool DatabaseUtility::findProfileByNumber(QString number,org::maemo::vicar::Profile* profile){
     bool result = false;
-    if (profilesDB.isOpen()){
+    if (vicarDB.isOpen()){
         QString strQuery = QString("select * from profiles where '%1' like numberpattern||'%' order by length(numberpattern) desc")
                            .arg(number);
         qDebug() << "SQL>"<<strQuery;
@@ -129,7 +170,7 @@ bool DatabaseUtility::findProfileByNumber(QString number,org::maemo::vicar::Prof
 
 bool DatabaseUtility::getDefaultProfile(org::maemo::vicar::Profile *profile){
     bool result = false;
-    if (profilesDB.isOpen()){
+    if (vicarDB.isOpen()){
         QString strQuery = QString("select * from profiles where numberpattern = '%' order by id");
         qDebug() << "SQL>"<<strQuery;
         QSqlQuery query(strQuery);
@@ -149,10 +190,10 @@ bool DatabaseUtility::getDefaultProfile(org::maemo::vicar::Profile *profile){
 int DatabaseUtility::insertProfile(org::maemo::vicar::Profile profile){
     int newId   = -1;
     bool result = false;    
-    if (profilesDB.isOpen()){
+    if (vicarDB.isOpen()){
         bool continueInsert = true;
         if (!this->tableExists("profiles")){
-            continueInsert = this->createProfilesTable();
+            continueInsert = this->prepareTables();
         }
 
         if (continueInsert)
@@ -173,7 +214,7 @@ int DatabaseUtility::insertProfile(org::maemo::vicar::Profile profile){
 
 bool DatabaseUtility::updateProfile(org::maemo::vicar::Profile profile){
     bool result = false;
-    if (profilesDB.isOpen()){
+    if (vicarDB.isOpen()){
         QSqlQuery query;
         QString strQuery = QString("update profiles set numberpattern = '%1', "
                                    "gatewaynumber = '%2', dtmfformat = '%3', "
@@ -189,7 +230,7 @@ bool DatabaseUtility::updateProfile(org::maemo::vicar::Profile profile){
 
 bool DatabaseUtility::deleteProfile(int id){
     bool result = false;
-    if (profilesDB.isOpen()){
+    if (vicarDB.isOpen()){
         QSqlQuery query;
         QString strQuery = QString("delete from profiles where id=%1").arg(id);
         qDebug() << "SQL>"<<strQuery;
@@ -199,5 +240,5 @@ bool DatabaseUtility::deleteProfile(int id){
 }
 
 QSqlError DatabaseUtility::lastError(){
-    return profilesDB.lastError();
+    return vicarDB.lastError();
 }