2 #include "BookmarkTranslations.h"
5 Bookmarks::Bookmarks() {
6 this->dbName = QDir::homePath() + "/.mdictionary/"
13 bool Bookmarks::checkAndCreateDb() {
14 QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
15 QString((int)QThread::currentThreadId()));
16 db.setDatabaseName(dbName);
17 if(!db.isOpen() && !db.open()) {
18 qDebug() << "Database error: " << db.lastError().text() << endl;
22 cur.exec("create table bookmarks(key text ,translation text)");
30 void Bookmarks::clear() {
31 QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
32 QString((int)QThread::currentThreadId()));
33 db.setDatabaseName(dbName);
34 if(!db.isOpen() && !db.open()) {
35 qDebug() << "Database error: " << db.lastError().text() << endl;
39 cur.exec("drop table bookmarks");
40 cur.exec("create table bookmarks(key text ,translation text)");
46 void Bookmarks::add(Translation* translation) {
47 QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
48 QString((int)QThread::currentThreadId()));
49 db.setDatabaseName(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 =QSqlDatabase::addDatabase("QSQLITE",
66 QString((int)QThread::currentThreadId()));
68 db.setDatabaseName(dbName);
69 if(!db.isOpen() && !db.open()) {
70 qDebug() << "Database error: " << db.lastError().text() << endl;
74 cur.prepare("delete from bookmarks where key=? and translation=?");
75 cur.addBindValue(translation->key());
76 cur.addBindValue(translation->key());
83 QList<Translation*> Bookmarks::list() {
84 QList<Translation*> res;
85 QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
86 QString((int)QThread::currentThreadId()));
87 db.setDatabaseName(dbName);
88 if(!db.isOpen() && !db.open()) {
89 qDebug() << "Database error: " << db.lastError().text() << endl;
93 cur.exec("select distinct key from bookmarks");
95 res.append(new BookmarkTranslation(cur.value(0).toString(), this, dbName));
102 QList<Translation*> Bookmarks::searchWordList(QString word) {
104 if(word.indexOf("*")==-1 && word.indexOf("?")== -1)
106 word = word.replace("*", "%");
107 word = word.replace("?", "_");
108 word = removeAccents(word);
110 QList<Translation*> tr;
111 QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
112 QString((int)QThread::currentThreadId()));
113 db.setDatabaseName(dbName);
114 if(!db.isOpen() && !db.open()) {
115 qDebug() << "Database error: " << db.lastError().text() << endl;
119 cur.prepare("select key from bookmarks where key like ?");
120 cur.addBindValue(word);
124 res.insert(cur.value(0).toString());
125 qDebug() << "searchWordList " << res.size();
126 foreach(QString str, res.toList())
127 tr.append(new BookmarkTranslation(str, this, dbName));
134 QStringList Bookmarks::search(QString word, QString dbName) {
135 qDebug() << "bookmarks::search " << word << " |" << dbName;
137 QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
138 QString((int)QThread::currentThreadId()));
139 db.setDatabaseName(dbName);
140 if(!db.isOpen() && !db.open()) {
141 qDebug() << "Database error: " << db.lastError().text() << endl;
144 qDebug() << "bookmarks::search " << word;
146 qDebug() << "bookmarks::search " << word;
147 cur.prepare("select translation from bookmarks where key=?");
148 cur.addBindValue(word);
151 result << cur.value(0).toString();
153 qDebug() << result.size() << " " << result;
160 QString Bookmarks::removeAccents(QString string) {
161 string = string.replace(QString::fromUtf8("ł"), "l", Qt::CaseInsensitive);
162 QString normalized = string.normalized(QString::NormalizationForm_D);
163 normalized = normalized;
164 for(int i=0; i<normalized.size(); i++) {
165 if( !normalized[i].isLetterOrNumber() &&
166 !normalized[i].isSpace() &&
167 !normalized[i].isDigit() &&
168 normalized[i] != '*' &&
169 normalized[i] != '%') {
170 normalized.remove(i,1);
178 bool Bookmarks::inBookmarks(QString word) {
179 QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
180 QString((int)QThread::currentThreadId()));
181 db.setDatabaseName(dbName);
182 if(!db.isOpen() && !db.open()) {
183 qDebug() << "Database error: " << db.lastError().text() << endl;
187 cur.prepare("select translation from bookmarks where key like ? limit 1");
188 cur.addBindValue(word);