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