Added call log and German translation.
[jenirok] / src / common / db.cpp
index ce0cf97..4028a74 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <QtCore/QDir>
 #include <QtCore/QDebug>
+#include <QtCore/QVariant>
 #include <QtSql/QSqlQuery>
 #include <QtSql/QSqlError>
 #include "db.h"
@@ -26,6 +27,7 @@ namespace
 {
     const QString SQL_DRIVER = "QSQLITE";
     const QString SQL_DATABASE = ".jenirok.db";
+    const int DB_VERSION = 2;
 }
 
 bool DB::initialized_ = false;
@@ -50,11 +52,20 @@ bool DB::connect()
 
     if(ret && !initialized_)
     {
-        QSqlQuery query("SELECT value FROM settings WHERE name = 'initialized'");
+        QSqlQuery query("SELECT value FROM settings WHERE name = 'db_version'");
 
-        if(!query.next())
+        if(query.next())
         {
-            ret = createTables();
+            int currentVersion = query.value(0).toString().toInt();
+
+            if(currentVersion < DB_VERSION)
+            {
+                ret = createTables(true);
+            }
+        }
+        else
+        {
+            ret = createTables(false);
         }
     }
 
@@ -94,15 +105,24 @@ QSqlDatabase& DB::instance()
     return db_;
 }
 
-bool DB::createTables()
+bool DB::createTables(bool update)
 {
     QSqlQuery query;
 
     bool ret = true;
 
-    ret = ret && query.exec("CREATE TABLE cache (id INTEGER PRIMARY KEY, number VARCHAR(32) NOT NULL UNIQUE, name VARCHAR(255) NOT NULL, street VARCHAR(255) NOT NULL, city VARCHAR(255) NOT NULL)");
-    ret = ret && query.exec("CREATE TABLE settings (name VARCHAR(255) NOT NULL PRIMARY KEY, value VARCHAR(255) NOT NULL)");
-    ret = ret && query.exec("INSERT INTO settings(name, value) VALUES('initialized', '1')");
+    ret = ret && query.exec("CREATE TABLE IF NOT EXISTS cache (id INTEGER PRIMARY KEY, number VARCHAR(32) NOT NULL UNIQUE, name VARCHAR(255) NOT NULL, street VARCHAR(255) NOT NULL, city VARCHAR(255) NOT NULL)");
+    ret = ret && query.exec("CREATE TABLE IF NOT EXISTS settings (name VARCHAR(255) NOT NULL PRIMARY KEY, value VARCHAR(255) NOT NULL)");
+    ret = ret && query.exec("CREATE TABLE IF NOT EXISTS log (id INTEGER PRIMARY KEY, number VARCHAR(32) NOT NULL, name VARCHAR(255), street VARCHAR(255), city VARCHAR(255), time INTEGER NOT NULL, missed INTEGER NOT NULL)");
+
+    if(update)
+    {
+        ret = ret && query.exec("UPDATE settings SET value = '" + QString::number(DB_VERSION) + "' WHERE name = 'db_version'");
+    }
+    else
+    {
+        ret = ret && query.exec("INSERT INTO settings(name, value) VALUES('db_version', '" + QString::number(DB_VERSION) + "')");
+    }
 
     return ret;
 }