plugins icon in translation
[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     qDebug()<<"dename1"<<dbName;
47     QSqlDatabase db = getDbCnx(dbName);
48     if(!db.isOpen() && !db.open()) {
49         qDebug() << "Database error1: " << db.lastError().text() << endl;
50         return ;
51     }
52     QSqlQuery cur(db);
53     cur.exec("drop table bookmarks");
54     cur.exec("create table bookmarks(key text, normalized text,translation text)");
55     db.close();
56 }
57
58
59
60 void Bookmarks::add(Translation* translation) {
61     checkAndCreateDb();
62     qDebug()<<"dename2"<<dbName;
63     QSqlDatabase db = getDbCnx(dbName);
64     if(!db.isOpen() && !db.open()) {
65         qDebug() << "Database error2: " << db.lastError().text() << endl;
66         return ;
67     }
68     translation->setBookmark(true);
69     QSqlQuery cur(db);
70     cur.prepare("insert into bookmarks values (?,?,?)");
71     cur.addBindValue(translation->key());
72     cur.addBindValue(removeAccents(translation->key()));
73     cur.addBindValue(translation->toHtml());
74     cur.exec();
75     db.close();
76 }
77
78
79 void Bookmarks::remove(Translation* translation) {
80     qDebug()<<"dename3"<<dbName;
81     checkAndCreateDb();
82     QSqlDatabase db = getDbCnx(dbName);
83     if(!db.isOpen() && !db.open()) {
84         qDebug() << "Database error3: " << db.lastError().text() << endl;
85         return ;
86     }
87     QSqlQuery cur(db);
88     cur.prepare("delete from bookmarks where key=?");
89     cur.addBindValue(translation->key());
90     cur.exec();
91     db.close();
92 }
93
94
95
96 QList<Translation*> Bookmarks::list() {
97     qDebug()<<"dename4"<<dbName;
98     checkAndCreateDb();
99     QList<Translation*> res;
100     QSqlDatabase db = getDbCnx(dbName);
101     if(!db.isOpen() && !db.open()) {
102         qDebug() << "Database error4: " << db.lastError().text() << endl;
103         return res;
104     }
105     QSqlQuery cur(db);
106     cur.exec("select distinct key from bookmarks");
107     while(cur.next())
108         res.append(new BookmarkTranslation(cur.value(0).toString(),
109                 this, dbName));
110     db.close();
111     return res;
112 }
113
114
115
116 QList<Translation*> Bookmarks::searchWordList(QString word) {
117     qDebug()<<"dename5"<<dbName;
118     checkAndCreateDb();
119     if(word.indexOf("*")==-1 && word.indexOf("?")== -1)
120         word+="%";
121     word = word.replace("*", "%");
122     word = word.replace("?", "_");
123
124     QList<Translation*> tr;
125     QSqlDatabase db = getDbCnx(dbName);
126     if(!db.isOpen() && !db.open()) {
127         qDebug() << "Database error5: " << db.lastError().text() << endl;
128         return tr;
129     }
130     QSqlQuery cur(db);
131     cur.prepare("select key from bookmarks where key like ? or normalized like ?");
132     cur.addBindValue(word);
133     cur.addBindValue(word);
134     cur.exec();
135     QSet<QString> res;
136     while(cur.next())
137         res.insert(cur.value(0).toString());
138     foreach(QString str, res.toList())
139         tr.append(new BookmarkTranslation(str, this, dbName));
140     db.close();
141     return tr;
142 }
143
144
145
146 QStringList Bookmarks::search(QString word, QString dbName) {
147     checkAndCreateDb();
148     qDebug()<<"dename6"<<dbName;
149     QStringList result;
150     QSqlDatabase db = getDbCnx(dbName);
151     if(!db.isOpen() && !db.open()) {
152         qDebug() << "Database error6: " << 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     db.close();
163     return result;
164 }
165
166
167
168
169 bool Bookmarks::inBookmarks(QString word) {
170     qDebug()<<"dename7"<<dbName;
171     if(!mdb.isOpen() && !mdb.open()) {
172         qDebug() << "Database error7: " << mdb.lastError().text() << endl;
173         return false;
174     }
175     QSqlQuery cur(mdb);
176     cur.prepare("select translation from bookmarks where key like ? limit 1");
177     cur.addBindValue(word);
178     cur.exec();
179     if(cur.next())
180         return true;
181     return false;
182 }