#include "Bookmarks.h"
#include "BookmarkTranslations.h"
+#include <QThread>
Bookmarks::Bookmarks() {
- dbName = QDir::homePath() + "/.mdictionary/"
+ this->dbName = QDir::homePath() + "/.mdictionary/"
+ "bookmarks.db";
- db = QSqlDatabase::addDatabase("QSQLITE", "bookmarks");
- db.setDatabaseName(dbName);
checkAndCreateDb();
}
bool Bookmarks::checkAndCreateDb() {
- if(!db.open()) {
+ QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
+ QString((int)QThread::currentThreadId()));
+ db.setDatabaseName(dbName);
+ if(!db.isOpen() && !db.open()) {
qDebug() << "Database error: " << db.lastError().text() << endl;
return false;
}
QSqlQuery cur(db);
cur.exec("create table bookmarks(key text ,translation text)");
+ db.close();
return true;
}
void Bookmarks::clear() {
+ QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
+ QString((int)QThread::currentThreadId()));
+ db.setDatabaseName(dbName);
+ if(!db.isOpen() && !db.open()) {
+ qDebug() << "Database error: " << db.lastError().text() << endl;
+ return ;
+ }
QSqlQuery cur(db);
cur.exec("drop table bookmarks");
cur.exec("create table bookmarks(key text ,translation text)");
+ db.close();
}
void Bookmarks::add(Translation* translation) {
- qDebug()<<"added";
+ QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
+ QString((int)QThread::currentThreadId()));
+ db.setDatabaseName(dbName);
+ if(!db.isOpen() && !db.open()) {
+ qDebug() << "Database error: " << db.lastError().text() << endl;
+ return ;
+ }
QSqlQuery cur(db);
cur.prepare("insert into bookmarks values (?,?)");
cur.addBindValue(translation->key());
cur.addBindValue(translation->toHtml());
cur.exec();
+ db.close();
}
void Bookmarks::remove(Translation* translation) {
+ QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
+ QString((int)QThread::currentThreadId()));
+
+ db.setDatabaseName(dbName);
+ if(!db.isOpen() && !db.open()) {
+ qDebug() << "Database error: " << db.lastError().text() << endl;
+ return ;
+ }
QSqlQuery cur(db);
cur.prepare("delete from bookmarks where key=? and translation=?");
cur.addBindValue(translation->key());
cur.addBindValue(translation->key());
cur.exec();
+ db.close();
}
QList<Translation*> Bookmarks::list() {
+ QList<Translation*> res;
+ QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
+ QString((int)QThread::currentThreadId()));
+ db.setDatabaseName(dbName);
+ if(!db.isOpen() && !db.open()) {
+ qDebug() << "Database error: " << db.lastError().text() << endl;
+ return res;
+ }
QSqlQuery cur(db);
cur.exec("select distinct key from bookmarks");
- QList<Translation*> res;
while(cur.next())
- res.append(new BookmarkTranslation(cur.value(0).toString(), this));
+ res.append(new BookmarkTranslation(cur.value(0).toString(), this, dbName));
+ db.close();
return res;
}
word = word.replace("?", "_");
word = removeAccents(word);
+ QList<Translation*> tr;
+ QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
+ QString((int)QThread::currentThreadId()));
+ db.setDatabaseName(dbName);
+ if(!db.isOpen() && !db.open()) {
+ qDebug() << "Database error: " << db.lastError().text() << endl;
+ return tr;
+ }
QSqlQuery cur(db);
cur.prepare("select key from bookmarks where key like ?");
cur.addBindValue(word);
while(cur.next())
res.insert(cur.value(0).toString());
qDebug() << "searchWordList " << res.size();
- QList<Translation*> tr;
foreach(QString str, res.toList())
- tr.append(new BookmarkTranslation(str, this));
+ tr.append(new BookmarkTranslation(str, this, dbName));
+ db.close();
return tr;
}
-QStringList Bookmarks::search(QString word) {
- qDebug() << "bookmarks::search";
- QSqlQuery cur(db);
+QStringList Bookmarks::search(QString word, QString dbName) {
+ qDebug() << "bookmarks::search " << word << " |" << dbName;
QStringList result;
+ QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
+ QString((int)QThread::currentThreadId()));
+ db.setDatabaseName(dbName);
+ if(!db.isOpen() && !db.open()) {
+ qDebug() << "Database error: " << db.lastError().text() << endl;
+ return result;
+ }
+ qDebug() << "bookmarks::search " << word;
+ QSqlQuery cur(db);
+ qDebug() << "bookmarks::search " << word;
cur.prepare("select translation from bookmarks where key=?");
cur.addBindValue(word);
cur.exec();
result << cur.value(0).toString();
qDebug() << result.size() << " " << result;
+ db.close();
return result;
}
bool Bookmarks::inBookmarks(QString word) {
+ QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
+ QString((int)QThread::currentThreadId()));
+ db.setDatabaseName(dbName);
+ if(!db.isOpen() && !db.open()) {
+ qDebug() << "Database error: " << db.lastError().text() << endl;
+ return false;
+ }
QSqlQuery cur(db);
cur.prepare("select translation from bookmarks where key like ? limit 1");
cur.addBindValue(word);
cur.exec();
if(cur.next())
return true;
+ db.close();
return false;
}
mappedSearch = word.toLower();
stopped = false;
+ dictFin = 0;
+ bookmarkFin = 0;
_innerResult = QtConcurrent::mapped(activeDicts(), mapSearch);
_resultWatcher.setFuture(_innerResult);
void Backbone::translationReady() {
- if(_innerResult.isFinished()) {
+ if(_innerResult.isFinished() && !dictFin) {
+ dictFin = 1;
QFutureIterator<QList<Translation*> > it(_innerResult);
while(it.hasNext()) {
}
}
- if(_innerBookmarks.isFinished()) {
+ if(_innerBookmarks.isFinished() && !bookmarkFin) {
+ bookmarkFin = 1;
QList<Translation*> list = _innerBookmarks.result();
qDebug() << "translation bookmarks" << list.size();
foreach(Translation* trans, list)
void Backbone::searchHtml(QList<Translation *> translations) {
_htmlResult.clear();
+
QList<TranslationPtr> dummy;
stopped = false;
qDebug()<< "search html";
_innerHtmlResult = QtConcurrent::mapped(dummy,
&TranslationPtr::toHtml);
- qDebug()<< "search html after map";
_htmlResultWatcher.setFuture(_innerHtmlResult);
+ qDebug()<< "search html after map";
}
void Backbone::htmlTranslationReady() {
*/
void addBookmark(QList<Translation*> translations) {
foreach(Translation* translation, translations)
- QtConcurrent::run(&bookmarks, &Bookmarks::add, translation);
+ bookmarks.add(translation);
+ //QtConcurrent::run(&bookmarks, &Bookmarks::add, translation);
}
*/
void fetchBookmarks() {
_bookmarksResult.clear();
- _innerBookmarks = QtConcurrent::run(bookmarks, &Bookmarks::list);
- _bookmarkWatcher.setFuture(_innerBookmarks);
+ _innerListBookmarks = QtConcurrent::run(bookmarks, &Bookmarks::list);
+ _bookmarkWatcher.setFuture(_innerListBookmarks);
}
/*! \return list of all bookmarks
QFuture<QList<Translation*> > _innerResult; //Res of concurent word search
QFuture<QString> _innerHtmlResult; // Result of html search
QFuture<QList<Translation*> > _innerBookmarks; //Res of search in bookmarks
+ QFuture<QList<Translation*> > _innerListBookmarks; //Res of search in bookmarks
QFuture<QStringList> _innerHtmlBookmarks; //Html result of bookmarks search
QMultiHash<QString, Translation*> _result; //Final result of word search
int _historyLen, _defaultHistoryLen;
bool dryRun;
bool stopped;
+ bool bookmarkFin, dictFin; // inform whether givent search type is ready
Bookmarks bookmarks;