X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=trunk%2Fsrc%2Fbase%2Fbackbone%2FBookmarks.cpp;h=c39f8683036f2a03407d643eec1417bc09222ef9;hb=849177861d4fd39904e1121e55f5896a70b1d6f6;hp=8d689116f8e3584bd906e102cd5a08267408eee6;hpb=2d3b711aa57f021304cdbea7f24ff31bf52b1a77;p=mdictionary diff --git a/trunk/src/base/backbone/Bookmarks.cpp b/trunk/src/base/backbone/Bookmarks.cpp index 8d68911..c39f868 100644 --- a/trunk/src/base/backbone/Bookmarks.cpp +++ b/trunk/src/base/backbone/Bookmarks.cpp @@ -1,129 +1,171 @@ #include "Bookmarks.h" #include "BookmarkTranslations.h" +#include Bookmarks::Bookmarks() { - dbName = QDir::homePath() + "/.mdictionary/" + this->dbName = QDir::homePath() + "/.mdictionary/" + "bookmarks.db"; - db = QSqlDatabase::addDatabase("QSQLITE", "bookmarks"); - db.setDatabaseName(dbName); 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); + return db; } bool Bookmarks::checkAndCreateDb() { - if(!db.open()) { - qDebug() << "Database error: " << db.lastError().text() << endl; - return false; - } + QSqlDatabase db = getDbCnx(dbName); + db.open(); QSqlQuery cur(db); - cur.exec("create table bookmarks(key text ,translation text)"); - + 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; + return ; + } QSqlQuery cur(db); cur.exec("drop table bookmarks"); - cur.exec("create table bookmarks(key text ,translation text)"); + cur.exec("create table bookmarks(key text, normalized text,translation text)"); + db.close(); } void Bookmarks::add(Translation* translation) { - qDebug()<<"added"; + checkAndCreateDb(); + QSqlDatabase db = getDbCnx(dbName); + if(!db.isOpen() && !db.open()) { + qDebug() << "Database error: " << db.lastError().text() << endl; + return ; + } + translation->setBookmark(true); QSqlQuery cur(db); - cur.prepare("insert into bookmarks values (?,?)"); + cur.prepare("insert into bookmarks values (?,?,?)"); cur.addBindValue(translation->key()); + cur.addBindValue(removeAccents(translation->key())); cur.addBindValue(translation->toHtml()); cur.exec(); + db.close(); } - void Bookmarks::remove(Translation* translation) { + checkAndCreateDb(); + QSqlDatabase db = getDbCnx(dbName); + if(!db.isOpen() && !db.open()) { + qDebug() << "Database error: " << db.lastError().text() << endl; + return ; + } QSqlQuery cur(db); - cur.prepare("delete from bookmarks where key=? and translation=?"); - cur.addBindValue(translation->key()); + cur.prepare("delete from bookmarks where key=?"); cur.addBindValue(translation->key()); cur.exec(); + db.close(); } QList Bookmarks::list() { + checkAndCreateDb(); + QList res; + QSqlDatabase db = getDbCnx(dbName); + if(!db.isOpen() && !db.open()) { + qDebug() << "Database error: " << db.lastError().text() << endl; + return res; + } QSqlQuery cur(db); cur.exec("select distinct key from bookmarks"); - QList res; while(cur.next()) - res.append(new BookmarkTranslation(cur.value(0).toString(), this)); + res.append(new BookmarkTranslation(cur.value(0).toString(), + this, dbName)); + db.close(); return res; } QList Bookmarks::searchWordList(QString word) { - + checkAndCreateDb(); if(word.indexOf("*")==-1 && word.indexOf("?")== -1) word+="%"; word = word.replace("*", "%"); word = word.replace("?", "_"); - word = removeAccents(word); + QList tr; + QSqlDatabase db = getDbCnx(dbName); + if(!db.isOpen() && !db.open()) { + qDebug() << "Database error: " << db.lastError().text() << endl; + return tr; + } QSqlQuery cur(db); - cur.prepare("select key from bookmarks where key like ?"); + cur.prepare("select key from bookmarks where key like ? or normalized like ?"); + cur.addBindValue(word); cur.addBindValue(word); cur.exec(); QSet res; while(cur.next()) res.insert(cur.value(0).toString()); - qDebug() << "searchWordList " << res.size(); - QList tr; foreach(QString str, res.toList()) - tr.append(new BookmarkTranslation(str, this)); + tr.append(new BookmarkTranslation(str, this, dbName)); + db.close(); return tr; } -QStringList Bookmarks::search(QString word) { - qDebug() << "bookmarks::search"; - QSqlQuery cur(db); +QStringList Bookmarks::search(QString word, QString dbName) { + //checkAndCreateDb(); QStringList result; + QSqlDatabase db = getDbCnx(dbName); + if(!db.isOpen() && !db.open()) { + qDebug() << "Database error: " << db.lastError().text() << endl; + return result; + } + QSqlQuery cur(db); cur.prepare("select translation from bookmarks where key=?"); cur.addBindValue(word); cur.exec(); while(cur.next()) result << cur.value(0).toString(); - qDebug() << result.size() << " " << result; + db.close(); return result; } -QString Bookmarks::removeAccents(QString string) { - string = string.replace(QString::fromUtf8("ł"), "l", Qt::CaseInsensitive); - QString normalized = string.normalized(QString::NormalizationForm_D); - normalized = normalized; - for(int i=0; i