Fixed some leaks and minor bookmark bug
[mdictionary] / trunk / src / base / backbone / Bookmarks.cpp
index 5bdcc24..c39f868 100644 (file)
@@ -7,10 +7,21 @@ Bookmarks::Bookmarks() {
                  + "bookmarks.db";
     checkAndCreateDb();
     initAccents();
+
+    mdb = QSqlDatabase::addDatabase("QSQLITE",
+            QString("%2").arg((int)QThread::currentThreadId()));
+    mdb.setDatabaseName(dbName);
+}
+
+
+Bookmarks::~Bookmarks() {
+    mdb.close();
 }
 
 
 QSqlDatabase Bookmarks::getDbCnx(QString dbName) {
+    QSqlDatabase::removeDatabase(
+            QString("%2").arg((int)QThread::currentThreadId()));
     QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
             QString("%2").arg((int)QThread::currentThreadId()));
     db.setDatabaseName(dbName);
@@ -19,49 +30,19 @@ QSqlDatabase Bookmarks::getDbCnx(QString dbName) {
 
 
 
-void Bookmarks::initAccents() {
-    letters['a'] = QRegExp("[ÀàÁáÂÂâÃãÄäÅåæÆĀāĂ㥹]", Qt::CaseInsensitive);
-    letters['c'] = QRegExp("[ÇçÈçŒĆćĈĉĊċČč]", Qt::CaseInsensitive);
-    letters['d'] = QRegExp("[ÐĐđĎď]", Qt::CaseInsensitive);
-    letters['e'] = QRegExp("[ÈéèÉÊêËëĒēĔĕĖėĘęĚěē]", Qt::CaseInsensitive);
-    letters['f'] = QRegExp("[ſ]", Qt::CaseInsensitive);
-    letters['g'] = QRegExp("[ĠġĢģĜĝĞğ]", Qt::CaseInsensitive);
-    letters['h'] = QRegExp("[ħĤĥĦ]", Qt::CaseInsensitive);
-    letters['i'] = QRegExp("[ÌìÍíÎîÏïİijĨĩĪīĬĭĮį]", Qt::CaseInsensitive);
-    letters['j'] = QRegExp("[Ĵĵ]", Qt::CaseInsensitive);
-    letters['k'] = QRegExp("[Ķķĸ]", Qt::CaseInsensitive);
-    letters['l'] = QRegExp("[ŀŁłĹĺĻļĽľĿ]", Qt::CaseInsensitive);
-    letters['n'] = QRegExp("[ÑñŃńŅņŇňʼnŊŋ]", Qt::CaseInsensitive);
-    letters['o'] = QRegExp("[ÒòÓóÔÕõÖöØøŐőœŌōŎŏ]", Qt::CaseInsensitive);
-    letters['r'] = QRegExp("[ŕŖŖŗŘř]", Qt::CaseInsensitive);
-    letters['s'] = QRegExp("[ߊšŚśŜŝŞş]", Qt::CaseInsensitive);
-    letters['t'] = QRegExp("[ŢţŤťŦŧ]", Qt::CaseInsensitive);
-    letters['u'] = QRegExp("[ÙùÚúÛûÜüŰűŲųŨũŪūŬŮů]", Qt::CaseInsensitive);
-    letters['w'] = QRegExp("[Ŵŵ]", Qt::CaseInsensitive);
-    letters['y'] = QRegExp("[ÿÝýŶŷŸ]", Qt::CaseInsensitive);
-    letters['z'] = QRegExp("[ŹźŻżŽž]", Qt::CaseInsensitive);
-    noLetter = QRegExp("[^a-z ]", Qt::CaseInsensitive);
-}
-
-
-
-
 bool Bookmarks::checkAndCreateDb() {
     QSqlDatabase db = getDbCnx(dbName);
-    if(!db.isOpen() && !db.open()) {
-        qDebug() << "Database error: " << db.lastError().text() << endl;
-        return false;
-    }
+    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);
     if(!db.isOpen() && !db.open()) {
         qDebug() << "Database error: " << db.lastError().text() << endl;
@@ -76,6 +57,7 @@ void Bookmarks::clear() {
 
 
 void Bookmarks::add(Translation* translation) {
+    checkAndCreateDb();
     QSqlDatabase db = getDbCnx(dbName);
     if(!db.isOpen() && !db.open()) {
         qDebug() << "Database error: " << db.lastError().text() << endl;
@@ -93,6 +75,7 @@ void Bookmarks::add(Translation* translation) {
 
 
 void Bookmarks::remove(Translation* translation) {
+    checkAndCreateDb();
     QSqlDatabase db = getDbCnx(dbName);
     if(!db.isOpen() && !db.open()) {
         qDebug() << "Database error: " << db.lastError().text() << endl;
@@ -108,6 +91,7 @@ void Bookmarks::remove(Translation* translation) {
 
 
 QList<Translation*> Bookmarks::list() {
+    checkAndCreateDb();
     QList<Translation*> res;
     QSqlDatabase db = getDbCnx(dbName);
     if(!db.isOpen() && !db.open()) {
@@ -117,7 +101,8 @@ 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));
+        res.append(new BookmarkTranslation(cur.value(0).toString(),
+                this, dbName));
     db.close();
     return res;
 }
@@ -125,12 +110,11 @@ QList<Translation*> Bookmarks::list() {
 
 
 QList<Translation*> Bookmarks::searchWordList(QString word) {
-
+    checkAndCreateDb();
     if(word.indexOf("*")==-1 && word.indexOf("?")== -1)
         word+="%";
     word = word.replace("*", "%");
     word = word.replace("?", "_");
-    word = removeAccents(word);
 
     QList<Translation*> tr;
     QSqlDatabase db = getDbCnx(dbName);
@@ -155,6 +139,7 @@ QList<Translation*> Bookmarks::searchWordList(QString word) {
 
 
 QStringList Bookmarks::search(QString word, QString dbName) {
+    //checkAndCreateDb();
     QStringList result;
     QSqlDatabase db = getDbCnx(dbName);
     if(!db.isOpen() && !db.open()) {
@@ -174,31 +159,17 @@ QStringList Bookmarks::search(QString word, QString dbName) {
 
 
 
-QString Bookmarks::removeAccents(QString string) {
-   string = string.toLower();
-   QString normalized = string.normalized(QString::NormalizationForm_KD);
-   foreach(QChar let, letters.keys())
-       normalized.replace(letters[let], QString(let));
-
-   normalized.replace(noLetter, "");
-   //qDebug() << "NORMALIZED: " << normalized;
-   return normalized;
-}
-
-
 
 bool Bookmarks::inBookmarks(QString word) {
-    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;
 }