Improve settings.
[dorian] / model / bookdb.cpp
index c2987c0..ce35c7f 100644 (file)
@@ -1,5 +1,3 @@
-#include <QFileInfo>
-
 #include "bookdb.h"
 #include "platform.h"
 #include "trace.h"
@@ -24,18 +22,21 @@ void BookDb::close()
 
 BookDb::BookDb()
 {
-    Trace t("BookDb::BookDb");
+    TRACE;
     bool shouldCreate = false;
-    QFileInfo info(Platform::dbPath());
+    QFileInfo info(Platform::instance()->dbPath());
     if (!info.exists()) {
         QDir dbDir;
-        dbDir.mkpath(info.absolutePath());
+        if (!dbDir.mkpath(info.absolutePath())) {
+            qCritical() << "Could not create" << info.absolutePath();
+        }
         shouldCreate = true;
     }
     db = QSqlDatabase::addDatabase("QSQLITE");
-    db.setDatabaseName(Platform::dbPath());
+    db.setDatabaseName(QDir::toNativeSeparators(Platform::instance()->dbPath()));
     if (!db.open()) {
-        qCritical() << "Could not open" << Platform::dbPath();
+        qCritical() << "Could not open" << Platform::instance()->dbPath()
+                << ": Error" << db.lastError().text();
     }
     if (shouldCreate) {
         create();
@@ -49,16 +50,18 @@ BookDb::~BookDb()
 
 void BookDb::create()
 {
-    Trace t("BookDb::create");
+    TRACE;
     QSqlQuery query;
-    if (!query.exec("create table book (name text primary key, content blob)")) {
-        qCritical() << "Failed to create database";
+    if (!query.exec("create table book "
+                    "(name text primary key, content blob)")) {
+        qCritical() << "Failed to create database:"
+                << query.lastError().text();
     }
 }
 
 QVariantHash BookDb::load(const QString &book)
 {
-    Trace t("BookDb::load");
+    TRACE;
     qDebug() << book;
     QVariantHash ret;
     QByteArray bytes;
@@ -66,7 +69,7 @@ QVariantHash BookDb::load(const QString &book)
     query.bindValue(0, book);
     query.setForwardOnly(true);
     if (!query.exec()) {
-        qCritical() << "Query failed";
+        qCritical() << "Query failed:" << query.lastError().text();
         return ret;
     }
     while (query.next()) {
@@ -75,15 +78,13 @@ QVariantHash BookDb::load(const QString &book)
         in >> ret;
         break;
     }
-    qDebug() << ret;
     return ret;
 }
 
 void BookDb::save(const QString &book, const QVariantHash &data)
 {
-    Trace t("BookDb::save");
+    TRACE;
     qDebug() << book;
-    qDebug() << data;
     QByteArray bytes;
     QDataStream out(&bytes, QIODevice::WriteOnly);
     out << data;
@@ -91,24 +92,29 @@ void BookDb::save(const QString &book, const QVariantHash &data)
     query.bindValue(0, book);
     query.bindValue(1, bytes);
     if (!query.exec()) {
-        qCritical() << "Query failed";
+        qCritical() << "Query failed:" << query.lastError().text();
     }
 }
 
 void BookDb::remove(const QString &book)
 {
-    // FIXME
-    Q_UNUSED(book);
+    TRACE;
+    qDebug() << book;
+    QSqlQuery query("delete from book where name = ?");
+    query.bindValue(0, book);
+    if (!query.exec()) {
+        qCritical() << "Query failed:" << query.lastError().text();
+    }
 }
 
 QStringList BookDb::books()
 {
-    Trace t("BookDb::books");
+    TRACE;
     QStringList ret;
     QSqlQuery query("select name from book");
     query.setForwardOnly(true);
     if (!query.exec()) {
-        qCritical() << "Query failed";
+        qCritical() << "Query failed:" << query.lastError().text();
         return ret;
     }
     while (query.next()) {
@@ -117,3 +123,10 @@ QStringList BookDb::books()
     qDebug() << ret;
     return ret;
 }
+
+void BookDb::removeAll()
+{
+    foreach (QString book, books()) {
+        remove(book);
+    }
+}