1 /*******************************************************************************
3 This file is part of mDictionary.
5 mDictionary is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
10 mDictionary is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with mDictionary. If not, see <http://www.gnu.org/licenses/>.
18 Copyright 2010 Comarch S.A.
20 *******************************************************************************/
24 \brief Bookmarks functionality - marking words as favorite, managing marked
25 words, searching in marked words (with cached translations)
27 \author Bartosz Szatkowski <bulislaw@linux.com>
30 #include "Bookmarks.h"
31 #include "BookmarkTranslations.h"
34 Bookmarks::Bookmarks() {
35 this->dbName = QDir::homePath() + "/.mdictionary/"
37 mdb = QSqlDatabase::addDatabase("QSQLITE");
38 mdb.setDatabaseName(dbName);
39 checkAndCreateDb(dbName);
45 Bookmarks::~Bookmarks() {
50 QSqlDatabase Bookmarks::getDbCnx(){
55 bool Bookmarks::checkAndCreateDb(QString dbName) {
56 QSqlDatabase db = QSqlDatabase::database();
58 db.setDatabaseName(dbName);
60 db.setDatabaseName(this->dbName);
63 cur.exec("create table bookmarks(key text, normalized text, translation text)");
68 void Bookmarks::clear() {
70 QSqlDatabase db = getDbCnx();
71 if(!db.isOpen() && !db.open()) {
72 qDebug() << "Database error: " << db.lastError().text() << endl;
76 cur.exec("drop table bookmarks");
77 cur.exec("create table bookmarks(key text, normalized text,translation text)");
81 void Bookmarks::add(Translation* translation) {
85 QSqlDatabase db = getDbCnx();
86 if(!db.isOpen() && !db.open()) {
87 qDebug() << "Database error: " << db.lastError().text() << endl;
90 translation->setBookmark(true);
92 cur.prepare("insert into bookmarks values (?,?,?)");
93 cur.addBindValue(translation->key());
94 cur.addBindValue(removeAccents(translation->key()));
95 cur.addBindValue(translation->toXml());
100 void Bookmarks::add(QString key,QString removeAccentKey,QString value){
102 QSqlDatabase db = getDbCnx();
103 if(!db.isOpen() && !db.open()) {
104 qDebug() << "Database error: " << db.lastError().text() << endl;
108 cur.prepare("insert into bookmarks values (?,?,?)");
109 cur.addBindValue(key);
110 cur.addBindValue(removeAccentKey);
111 cur.addBindValue(value);
116 void Bookmarks::remove(Translation* translation) {
120 QSqlDatabase db = getDbCnx();
121 if(!db.isOpen() && !db.open()) {
122 qDebug() << "Database error: " << db.lastError().text() << endl;
126 cur.prepare("delete from bookmarks where key=?");
127 cur.addBindValue(translation->key());
132 QList<Translation*> Bookmarks::list() {
134 QList<Translation*> res;
135 QSqlDatabase db = getDbCnx();
136 if(!db.isOpen() && !db.open()) {
137 qDebug() << "Database error: " << db.lastError().text() << endl;
141 cur.exec("select distinct key from bookmarks");
143 res.append(new BookmarkTranslation(cur.value(0).toString(),
149 QList<Translation*> Bookmarks::searchWordList(QString word) {
151 if(word.indexOf("*")==-1 && word.indexOf("?")== -1)
153 word = word.replace("*", "%");
154 word = word.replace("?", "_");
156 QList<Translation*> tr;
157 QSqlDatabase db = getDbCnx();
158 if(!db.isOpen() && !db.open()) {
159 qDebug() << "Database error: " << db.lastError().text() << endl;
163 cur.prepare("select key from bookmarks where key like ? or normalized like ?");
164 cur.addBindValue(word);
165 cur.addBindValue(word);
169 res.insert(cur.value(0).toString());
170 foreach(QString str, res.toList())
171 tr.append(new BookmarkTranslation(str, this, dbName));
176 QStringList Bookmarks::search(QString word, QString dbName) {
178 QSqlDatabase db = QSqlDatabase::database();
179 db.setDatabaseName(dbName);
180 if(!db.isOpen() && !db.open()) {
181 qDebug() << "Database error: " << db.lastError().text() << endl;
185 cur.prepare("select translation from bookmarks where key=?");
186 cur.addBindValue(word);
189 result << cur.value(0).toString();
195 bool Bookmarks::inBookmarks(QString word) {
196 if(!mdb.isOpen() && !mdb.open()) {
197 qDebug() << "Database error: " << mdb.lastError().text() << endl;
201 cur.prepare("select translation from bookmarks where key like ? limit 1");
202 cur.addBindValue(word);