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());
64 void Bookmarks::remove(Translation* translation) {
65 QSqlDatabase db = getDbCnx(dbName);
66 if(!db.isOpen() && !db.open()) {
67 qDebug() << "Database error: " << db.lastError().text() << endl;
71 cur.prepare("delete from bookmarks where key=?");
72 cur.addBindValue(translation->key());
79 QList<Translation*> Bookmarks::list() {
80 QList<Translation*> res;
81 QSqlDatabase db = getDbCnx(dbName);
82 if(!db.isOpen() && !db.open()) {
83 qDebug() << "Database error: " << db.lastError().text() << endl;
87 cur.exec("select distinct key from bookmarks");
89 res.append(new BookmarkTranslation(cur.value(0).toString(), this, dbName));
96 QList<Translation*> Bookmarks::searchWordList(QString word) {
98 if(word.indexOf("*")==-1 && word.indexOf("?")== -1)
100 word = word.replace("*", "%");
101 word = word.replace("?", "_");
102 word = removeAccents(word);
104 QList<Translation*> tr;
105 QSqlDatabase db = getDbCnx(dbName);
106 if(!db.isOpen() && !db.open()) {
107 qDebug() << "Database error: " << db.lastError().text() << endl;
111 cur.prepare("select key from bookmarks where key like ?");
112 cur.addBindValue(word);
116 res.insert(cur.value(0).toString());
117 foreach(QString str, res.toList())
118 tr.append(new BookmarkTranslation(str, this, dbName));
125 QStringList Bookmarks::search(QString word, QString dbName) {
127 QSqlDatabase db = getDbCnx(dbName);
128 if(!db.isOpen() && !db.open()) {
129 qDebug() << "Database error: " << db.lastError().text() << endl;
133 cur.prepare("select translation from bookmarks where key=?");
134 cur.addBindValue(word);
137 result << cur.value(0).toString();
145 QString Bookmarks::removeAccents(QString string) {
146 string = string.replace(QString::fromUtf8("ł"), "l", Qt::CaseInsensitive);
147 QString normalized = string.normalized(QString::NormalizationForm_D);
148 normalized = normalized;
149 for(int i=0; i<normalized.size(); i++) {
150 if( !normalized[i].isLetterOrNumber() &&
151 !normalized[i].isSpace() &&
152 !normalized[i].isDigit() &&
153 normalized[i] != '*' &&
154 normalized[i] != '%') {
155 normalized.remove(i,1);
163 bool Bookmarks::inBookmarks(QString word) {
164 QSqlDatabase db = getDbCnx(dbName);
165 if(!db.isOpen() && !db.open()) {
166 qDebug() << "Database error: " << db.lastError().text() << endl;
170 cur.prepare("select translation from bookmarks where key like ? limit 1");
171 cur.addBindValue(word);