2 #include "BookmarkTranslations.h"
5 Bookmarks::Bookmarks() {
6 this->dbName = QDir::homePath() + "/.mdictionary/"
12 QSqlDatabase Bookmarks::getDbCnx(QString dbName) {
13 QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
14 QString("%2").arg((int)QThread::currentThreadId()));
15 db.setDatabaseName(dbName);
19 bool Bookmarks::checkAndCreateDb() {
20 QSqlDatabase db = getDbCnx(dbName);
21 if(!db.isOpen() && !db.open()) {
22 qDebug() << "Database error: " << db.lastError().text() << endl;
26 cur.exec("create table bookmarks(key text ,translation text)");
34 void Bookmarks::clear() {
35 QSqlDatabase db = getDbCnx(dbName);
36 if(!db.isOpen() && !db.open()) {
37 qDebug() << "Database error: " << db.lastError().text() << endl;
41 cur.exec("drop table bookmarks");
42 cur.exec("create table bookmarks(key text ,translation text)");
48 void Bookmarks::add(Translation* translation) {
49 QSqlDatabase db = getDbCnx(dbName);
50 if(!db.isOpen() && !db.open()) {
51 qDebug() << "Database error: " << db.lastError().text() << endl;
54 translation->setBookmark(true);
56 cur.prepare("insert into bookmarks values (?,?)");
57 cur.addBindValue(translation->key());
58 cur.addBindValue(translation->toHtml());
65 void Bookmarks::remove(Translation* translation) {
66 QSqlDatabase db = getDbCnx(dbName);
67 if(!db.isOpen() && !db.open()) {
68 qDebug() << "Database error: " << db.lastError().text() << endl;
72 cur.prepare("delete from bookmarks where key=?");
73 cur.addBindValue(translation->key());
80 QList<Translation*> Bookmarks::list() {
81 QList<Translation*> res;
82 QSqlDatabase db = getDbCnx(dbName);
83 if(!db.isOpen() && !db.open()) {
84 qDebug() << "Database error: " << db.lastError().text() << endl;
88 cur.exec("select distinct key from bookmarks");
90 res.append(new BookmarkTranslation(cur.value(0).toString(), this, dbName));
97 QList<Translation*> Bookmarks::searchWordList(QString word) {
99 if(word.indexOf("*")==-1 && word.indexOf("?")== -1)
101 word = word.replace("*", "%");
102 word = word.replace("?", "_");
103 word = removeAccents(word);
105 QList<Translation*> tr;
106 QSqlDatabase db = getDbCnx(dbName);
107 if(!db.isOpen() && !db.open()) {
108 qDebug() << "Database error: " << db.lastError().text() << endl;
112 cur.prepare("select key from bookmarks where key like ?");
113 cur.addBindValue(word);
117 res.insert(cur.value(0).toString());
118 foreach(QString str, res.toList())
119 tr.append(new BookmarkTranslation(str, this, dbName));
126 QStringList Bookmarks::search(QString word, QString dbName) {
128 QSqlDatabase db = getDbCnx(dbName);
129 if(!db.isOpen() && !db.open()) {
130 qDebug() << "Database error: " << db.lastError().text() << endl;
134 cur.prepare("select translation from bookmarks where key=?");
135 cur.addBindValue(word);
138 result << cur.value(0).toString();
146 QString Bookmarks::removeAccents(QString string) {
147 string = string.replace(QString::fromUtf8("ł"), "l", Qt::CaseInsensitive);
148 QString normalized = string.normalized(QString::NormalizationForm_D);
149 normalized = normalized;
150 for(int i=0; i<normalized.size(); i++) {
151 if( !normalized[i].isLetterOrNumber() &&
152 !normalized[i].isSpace() &&
153 !normalized[i].isDigit() &&
154 normalized[i] != '*' &&
155 normalized[i] != '%') {
156 normalized.remove(i,1);
164 bool Bookmarks::inBookmarks(QString word) {
165 QSqlDatabase db = getDbCnx(dbName);
166 if(!db.isOpen() && !db.open()) {
167 qDebug() << "Database error: " << db.lastError().text() << endl;
171 cur.prepare("select translation from bookmarks where key like ? limit 1");
172 cur.addBindValue(word);