Clean and order documentation in source files. Source ready to beta 2 release
[mdictionary] / src / mdictionary / backbone / Bookmarks.cpp
index 527a8a5..5a5faf5 100644 (file)
@@ -1,3 +1,32 @@
+/*******************************************************************************
+
+    This file is part of mDictionary.
+
+    mDictionary is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mDictionary is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mDictionary.  If not, see <http://www.gnu.org/licenses/>.
+
+    Copyright 2010 Comarch S.A.
+
+*******************************************************************************/
+
+/*!
+    \file Bookmarks.cpp
+    \brief Bookmarks functionality - marking words as favorite, managing marked
+    words, searching in marked words (with cached translations)
+
+    \author Bartosz Szatkowski <bulislaw@linux.com>
+*/
+
 #include "Bookmarks.h"
 #include "BookmarkTranslations.h"
 #include <QThread>
 Bookmarks::Bookmarks() {
     this->dbName = QDir::homePath() + "/.mdictionary/"
                  + "bookmarks.db";
-    checkAndCreateDb();
+    mdb = QSqlDatabase::addDatabase("QSQLITE");
+    mdb.setDatabaseName(dbName);
+    checkAndCreateDb(dbName);
     initAccents();
+
 }
 
 
-QSqlDatabase Bookmarks::getDbCnx(QString dbName) {
-    QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
-            QString("%2").arg((int)QThread::currentThreadId()));
-    db.setDatabaseName(dbName);
-    return db;
+Bookmarks::~Bookmarks() {
+    mdb.close();
 }
 
 
+QSqlDatabase Bookmarks::getDbCnx(){
+    return mdb;
+}
+
 
-bool Bookmarks::checkAndCreateDb() {
-    QSqlDatabase db = getDbCnx(dbName);
+bool Bookmarks::checkAndCreateDb(QString dbName) {
+    QSqlDatabase db = QSqlDatabase::database();
+    if(dbName.size())
+        db.setDatabaseName(dbName);
+    else
+        db.setDatabaseName(this->dbName);
     db.open();
     QSqlQuery cur(db);
     cur.exec("create table bookmarks(key text, normalized text, translation text)");
-    db.close();
     return true;
 }
 
 
-
 void Bookmarks::clear() {
     checkAndCreateDb();
-    QSqlDatabase db = getDbCnx(dbName);
+    QSqlDatabase db = getDbCnx();
     if(!db.isOpen() && !db.open()) {
         qDebug() << "Database error: " << db.lastError().text() << endl;
         return ;
@@ -40,14 +75,14 @@ void Bookmarks::clear() {
     QSqlQuery cur(db);
     cur.exec("drop table bookmarks");
     cur.exec("create table bookmarks(key text, normalized text,translation text)");
-    db.close();
 }
 
 
-
 void Bookmarks::add(Translation* translation) {
-    checkAndCreateDb();
-    QSqlDatabase db = getDbCnx(dbName);
+    if (!translation)
+        return ;
+    checkAndCreateDb();   
+    QSqlDatabase db = getDbCnx();
     if(!db.isOpen() && !db.open()) {
         qDebug() << "Database error: " << db.lastError().text() << endl;
         return ;
@@ -57,15 +92,32 @@ void Bookmarks::add(Translation* translation) {
     cur.prepare("insert into bookmarks values (?,?,?)");
     cur.addBindValue(translation->key());
     cur.addBindValue(removeAccents(translation->key()));
-    cur.addBindValue(translation->toHtml());
+    cur.addBindValue(translation->toXml());
+    cur.exec();
+}
+
+
+void Bookmarks::add(QString key,QString removeAccentKey,QString value){
+    checkAndCreateDb();
+    QSqlDatabase db = getDbCnx();
+    if(!db.isOpen() && !db.open()) {
+        qDebug() << "Database error: " << db.lastError().text() << endl;
+        return ;
+    }
+    QSqlQuery cur(db);
+    cur.prepare("insert into bookmarks values (?,?,?)");
+    cur.addBindValue(key);
+    cur.addBindValue(removeAccentKey);
+    cur.addBindValue(value);
     cur.exec();
-    db.close();
 }
 
 
 void Bookmarks::remove(Translation* translation) {
+    if (!translation)
+        return ;
     checkAndCreateDb();
-    QSqlDatabase db = getDbCnx(dbName);
+    QSqlDatabase db = getDbCnx();
     if(!db.isOpen() && !db.open()) {
         qDebug() << "Database error: " << db.lastError().text() << endl;
         return ;
@@ -74,15 +126,13 @@ void Bookmarks::remove(Translation* translation) {
     cur.prepare("delete from bookmarks where key=?");
     cur.addBindValue(translation->key());
     cur.exec();
-    db.close();
 }
 
 
-
 QList<Translation*> Bookmarks::list() {
     checkAndCreateDb();
     QList<Translation*> res;
-    QSqlDatabase db = getDbCnx(dbName);
+    QSqlDatabase db = getDbCnx();
     if(!db.isOpen() && !db.open()) {
         qDebug() << "Database error: " << db.lastError().text() << endl;
         return res;
@@ -90,23 +140,21 @@ QList<Translation*> Bookmarks::list() {
     QSqlQuery cur(db);
     cur.exec("select distinct key from bookmarks");
     while(cur.next())
-        res.append(new BookmarkTranslation(cur.value(0).toString(), this, dbName));
-    db.close();
+        res.append(new BookmarkTranslation(cur.value(0).toString(),
+                this, dbName));
     return res;
 }
 
 
-
 QList<Translation*> Bookmarks::searchWordList(QString word) {
     checkAndCreateDb();
     if(word.indexOf("*")==-1 && word.indexOf("?")== -1)
         word+="%";
     word = word.replace("*", "%");
     word = word.replace("?", "_");
-    qDebug() << word;
 
     QList<Translation*> tr;
-    QSqlDatabase db = getDbCnx(dbName);
+    QSqlDatabase db = getDbCnx();
     if(!db.isOpen() && !db.open()) {
         qDebug() << "Database error: " << db.lastError().text() << endl;
         return tr;
@@ -121,16 +169,14 @@ QList<Translation*> Bookmarks::searchWordList(QString word) {
         res.insert(cur.value(0).toString());
     foreach(QString str, res.toList())
         tr.append(new BookmarkTranslation(str, this, dbName));
-    db.close();
     return tr;
 }
 
 
-
 QStringList Bookmarks::search(QString word, QString dbName) {
-    checkAndCreateDb();
     QStringList result;
-    QSqlDatabase db = getDbCnx(dbName);
+    QSqlDatabase db = QSqlDatabase::database();
+    db.setDatabaseName(dbName);
     if(!db.isOpen() && !db.open()) {
         qDebug() << "Database error: " << db.lastError().text() << endl;
         return result;
@@ -142,26 +188,20 @@ QStringList Bookmarks::search(QString word, QString dbName) {
     while(cur.next())
         result << cur.value(0).toString();
 
-    db.close();
     return result;
 }
 
 
-
-
 bool Bookmarks::inBookmarks(QString word) {
-    checkAndCreateDb();
-    QSqlDatabase db = getDbCnx(dbName);
-    if(!db.isOpen() && !db.open()) {
-        qDebug() << "Database error: " << db.lastError().text() << endl;
+    if(!mdb.isOpen() && !mdb.open()) {
+        qDebug() << "Database error: " << mdb.lastError().text() << endl;
         return false;
     }
-    QSqlQuery cur(db);
+    QSqlQuery cur(mdb);
     cur.prepare("select translation from bookmarks where key like ? limit 1");
     cur.addBindValue(word);
     cur.exec();
     if(cur.next())
         return true;
-    db.close();
     return false;
 }