+/*******************************************************************************
+
+ 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();
- mdb = QSqlDatabase::addDatabase("QSQLITE",
- QString("%2").arg((int)QThread::currentThreadId()));
- mdb.setDatabaseName(dbName);
}
}
-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;
+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 ;
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 ;
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 ;
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;
while(cur.next())
res.append(new BookmarkTranslation(cur.value(0).toString(),
this, dbName));
- db.close();
return res;
}
-
QList<Translation*> Bookmarks::searchWordList(QString word) {
checkAndCreateDb();
if(word.indexOf("*")==-1 && word.indexOf("?")== -1)
word = word.replace("?", "_");
QList<Translation*> tr;
- QSqlDatabase db = getDbCnx(dbName);
+ QSqlDatabase db = getDbCnx();
if(!db.isOpen() && !db.open()) {
qDebug() << "Database error: " << db.lastError().text() << endl;
return tr;
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) {
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;
while(cur.next())
result << cur.value(0).toString();
- db.close();
return result;
}
-
-
bool Bookmarks::inBookmarks(QString word) {
if(!mdb.isOpen() && !mdb.open()) {
qDebug() << "Database error: " << mdb.lastError().text() << endl;