removeAccents refactorized out to the AccentsNormalizer class
[mdictionary] / trunk / src / base / backbone / Bookmarks.cpp
1 #include "Bookmarks.h"
2 #include "BookmarkTranslations.h"
3 #include <QThread>
4
5 Bookmarks::Bookmarks() {
6     this->dbName = QDir::homePath() + "/.mdictionary/"
7                  + "bookmarks.db";
8     checkAndCreateDb();
9     initAccents();
10 }
11
12
13 QSqlDatabase Bookmarks::getDbCnx(QString dbName) {
14     QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
15             QString("%2").arg((int)QThread::currentThreadId()));
16     db.setDatabaseName(dbName);
17     return db;
18 }
19
20
21
22 bool Bookmarks::checkAndCreateDb() {
23     QSqlDatabase db = getDbCnx(dbName);
24     if(!db.isOpen() && !db.open()) {
25         qDebug() << "Database error: " << db.lastError().text() << endl;
26         return false;
27     }
28     QSqlQuery cur(db);
29     cur.exec("create table bookmarks(key text, normalized text, translation text)");
30     db.close();
31
32     return true;
33 }
34
35
36
37 void Bookmarks::clear() {
38     QSqlDatabase db = getDbCnx(dbName);
39     if(!db.isOpen() && !db.open()) {
40         qDebug() << "Database error: " << db.lastError().text() << endl;
41         return ;
42     }
43     QSqlQuery cur(db);
44     cur.exec("drop table bookmarks");
45     cur.exec("create table bookmarks(key text, normalized text,translation text)");
46     db.close();
47 }
48
49
50
51 void Bookmarks::add(Translation* translation) {
52     QSqlDatabase db = getDbCnx(dbName);
53     if(!db.isOpen() && !db.open()) {
54         qDebug() << "Database error: " << db.lastError().text() << endl;
55         return ;
56     }
57     translation->setBookmark(true);
58     QSqlQuery cur(db);
59     cur.prepare("insert into bookmarks values (?,?,?)");
60     cur.addBindValue(translation->key());
61     cur.addBindValue(removeAccents(translation->key()));
62     cur.addBindValue(translation->toHtml());
63     cur.exec();
64     db.close();
65 }
66
67
68 void Bookmarks::remove(Translation* translation) {
69     QSqlDatabase db = getDbCnx(dbName);
70     if(!db.isOpen() && !db.open()) {
71         qDebug() << "Database error: " << db.lastError().text() << endl;
72         return ;
73     }
74     QSqlQuery cur(db);
75     cur.prepare("delete from bookmarks where key=?");
76     cur.addBindValue(translation->key());
77     cur.exec();
78     db.close();
79 }
80
81
82
83 QList<Translation*> Bookmarks::list() {
84     QList<Translation*> res;
85     QSqlDatabase db = getDbCnx(dbName);
86     if(!db.isOpen() && !db.open()) {
87         qDebug() << "Database error: " << db.lastError().text() << endl;
88         return res;
89     }
90     QSqlQuery cur(db);
91     cur.exec("select distinct key from bookmarks");
92     while(cur.next())
93         res.append(new BookmarkTranslation(cur.value(0).toString(), this, dbName));
94     db.close();
95     return res;
96 }
97
98
99
100 QList<Translation*> Bookmarks::searchWordList(QString word) {
101
102     if(word.indexOf("*")==-1 && word.indexOf("?")== -1)
103         word+="%";
104     word = word.replace("*", "%");
105     word = word.replace("?", "_");
106     word = removeAccents(word);
107
108     QList<Translation*> tr;
109     QSqlDatabase db = getDbCnx(dbName);
110     if(!db.isOpen() && !db.open()) {
111         qDebug() << "Database error: " << db.lastError().text() << endl;
112         return tr;
113     }
114     QSqlQuery cur(db);
115     cur.prepare("select key from bookmarks where key like ? or normalized like ?");
116     cur.addBindValue(word);
117     cur.addBindValue(word);
118     cur.exec();
119     QSet<QString> res;
120     while(cur.next())
121         res.insert(cur.value(0).toString());
122     foreach(QString str, res.toList())
123         tr.append(new BookmarkTranslation(str, this, dbName));
124     db.close();
125     return tr;
126 }
127
128
129
130 QStringList Bookmarks::search(QString word, QString dbName) {
131     QStringList result;
132     QSqlDatabase db = getDbCnx(dbName);
133     if(!db.isOpen() && !db.open()) {
134         qDebug() << "Database error: " << db.lastError().text() << endl;
135         return result;
136     }
137     QSqlQuery cur(db);
138     cur.prepare("select translation from bookmarks where key=?");
139     cur.addBindValue(word);
140     cur.exec();
141     while(cur.next())
142         result << cur.value(0).toString();
143
144     db.close();
145     return result;
146 }
147
148
149
150
151 bool Bookmarks::inBookmarks(QString word) {
152     QSqlDatabase db = getDbCnx(dbName);
153     if(!db.isOpen() && !db.open()) {
154         qDebug() << "Database error: " << db.lastError().text() << endl;
155         return false;
156     }
157     QSqlQuery cur(db);
158     cur.prepare("select translation from bookmarks where key like ? limit 1");
159     cur.addBindValue(word);
160     cur.exec();
161     if(cur.next())
162         return true;
163     db.close();
164     return false;
165 }