2 #include "BookmarkTranslations.h"
5 Bookmarks::Bookmarks() {
6 this->dbName = QDir::homePath() + "/.mdictionary/"
12 QSqlDatabase Bookmarks::getDbCnx(QString dbName) {
13 QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
14 QString("%2").arg((int)QThread::currentThreadId()));
15 db.setDatabaseName(dbName);
19 bool Bookmarks::checkAndCreateDb() {
20 QSqlDatabase db = getDbCnx(dbName);
21 if(!db.isOpen() && !db.open()) {
22 qDebug() << "Database error: " << db.lastError().text() << endl;
26 cur.exec("create table bookmarks(key text ,translation text)");
34 void Bookmarks::clear() {
35 QSqlDatabase db = getDbCnx(dbName);
36 if(!db.isOpen() && !db.open()) {
37 qDebug() << "Database error: " << db.lastError().text() << endl;
41 cur.exec("drop table bookmarks");
42 cur.exec("create table bookmarks(key text ,translation text)");
48 void Bookmarks::add(Translation* translation) {
49 QSqlDatabase db = getDbCnx(dbName);
50 if(!db.isOpen() && !db.open()) {
51 qDebug() << "Database error: " << db.lastError().text() << endl;
55 cur.prepare("insert into bookmarks values (?,?)");
56 cur.addBindValue(translation->key());
57 cur.addBindValue(translation->toHtml());
63 void Bookmarks::remove(Translation* translation) {
64 QSqlDatabase db = getDbCnx(dbName);
65 if(!db.isOpen() && !db.open()) {
66 qDebug() << "Database error: " << db.lastError().text() << endl;
70 cur.prepare("delete from bookmarks where key=?");
71 cur.addBindValue(translation->key());
78 QList<Translation*> Bookmarks::list() {
79 QList<Translation*> res;
80 QSqlDatabase db = getDbCnx(dbName);
81 if(!db.isOpen() && !db.open()) {
82 qDebug() << "Database error: " << db.lastError().text() << endl;
86 cur.exec("select distinct key from bookmarks");
88 res.append(new BookmarkTranslation(cur.value(0).toString(), this, dbName));
95 QList<Translation*> Bookmarks::searchWordList(QString word) {
97 if(word.indexOf("*")==-1 && word.indexOf("?")== -1)
99 word = word.replace("*", "%");
100 word = word.replace("?", "_");
101 word = removeAccents(word);
103 QList<Translation*> tr;
104 QSqlDatabase db = getDbCnx(dbName);
105 if(!db.isOpen() && !db.open()) {
106 qDebug() << "Database error: " << db.lastError().text() << endl;
110 cur.prepare("select key from bookmarks where key like ?");
111 cur.addBindValue(word);
115 res.insert(cur.value(0).toString());
116 foreach(QString str, res.toList())
117 tr.append(new BookmarkTranslation(str, this, dbName));
124 QStringList Bookmarks::search(QString word, QString dbName) {
126 QSqlDatabase db = getDbCnx(dbName);
127 if(!db.isOpen() && !db.open()) {
128 qDebug() << "Database error: " << db.lastError().text() << endl;
132 cur.prepare("select translation from bookmarks where key=?");
133 cur.addBindValue(word);
136 result << cur.value(0).toString();
144 QString Bookmarks::removeAccents(QString string) {
145 string = string.replace(QString::fromUtf8("ł"), "l", Qt::CaseInsensitive);
146 QString normalized = string.normalized(QString::NormalizationForm_D);
147 normalized = normalized;
148 for(int i=0; i<normalized.size(); i++) {
149 if( !normalized[i].isLetterOrNumber() &&
150 !normalized[i].isSpace() &&
151 !normalized[i].isDigit() &&
152 normalized[i] != '*' &&
153 normalized[i] != '%') {
154 normalized.remove(i,1);
162 bool Bookmarks::inBookmarks(QString word) {
163 QSqlDatabase db = getDbCnx(dbName);
164 if(!db.isOpen() && !db.open()) {
165 qDebug() << "Database error: " << db.lastError().text() << endl;
169 cur.prepare("select translation from bookmarks where key like ? limit 1");
170 cur.addBindValue(word);