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