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