From aa1e9a4b7af32a70cad10c0c1312105a53bdf404 Mon Sep 17 00:00:00 2001 From: Bartosz Szatkowski Date: Tue, 17 Aug 2010 10:09:15 +0200 Subject: [PATCH] Searching in bookmarks --- trunk/src/base/backbone/BookmarkTranslations.h | 8 ++++- trunk/src/base/backbone/Bookmarks.cpp | 24 ++++++++++----- trunk/src/base/backbone/backbone.cpp | 37 +++++++++++++++--------- trunk/src/base/backbone/backbone.h | 34 +++++++++++++--------- 4 files changed, 68 insertions(+), 35 deletions(-) diff --git a/trunk/src/base/backbone/BookmarkTranslations.h b/trunk/src/base/backbone/BookmarkTranslations.h index 5848390..73c200e 100644 --- a/trunk/src/base/backbone/BookmarkTranslations.h +++ b/trunk/src/base/backbone/BookmarkTranslations.h @@ -56,10 +56,16 @@ public: //! \return parsed raw format into html QString toHtml() const { + if(!_key.size() || !_bookmarks) + return ""; + qDebug() << ">toHtml"; + QStringList list = _bookmarks->search(_key); + qDebug() << "toHtml" << list.size(); QString result; foreach(QString translation, list) - result += translation; + result += translation + "\n"; + qDebug() << " Bookmarks::list() { QList Bookmarks::searchWordList(QString word) { - if(word.indexOf("*")==-1 && word.indexOf("?")== 0) + + if(word.indexOf("*")==-1 && word.indexOf("?")== -1) word+="%"; word = word.replace("*", "%"); word = word.replace("?", "_"); word = removeAccents(word); QSqlQuery cur(db); - cur.prepare("select key from bookmarks where key=?"); + cur.prepare("select key from bookmarks where key like ?"); cur.addBindValue(word); cur.exec(); - QList res; + QSet res; while(cur.next()) - res.append(new BookmarkTranslation(cur.value(0).toString(), this)); - return res; + res.insert(cur.value(0).toString()); + qDebug() << "searchWordList " << res.size(); + QList tr; + foreach(QString str, res.toList()) + tr.append(new BookmarkTranslation(str, this)); + return tr; } QStringList Bookmarks::search(QString word) { + qDebug() << "bookmarks::search"; QSqlQuery cur(db); QStringList result; - cur.prepare("select translation from bookmarks where word=?"); + cur.prepare("select translation from bookmarks where key=?"); cur.addBindValue(word); cur.exec(); while(cur.next()) result << cur.value(0).toString(); + + qDebug() << result.size() << " " << result; return result; } @@ -115,7 +123,7 @@ QString Bookmarks::removeAccents(QString string) { bool Bookmarks::inBookmarks(QString word) { QSqlQuery cur(db); - cur.prepare("select translation from bookmarks where word=? limit 1"); + cur.prepare("select translation from bookmarks where key like ? limit 1"); cur.addBindValue(word); cur.exec(); if(cur.next()) diff --git a/trunk/src/base/backbone/backbone.cpp b/trunk/src/base/backbone/backbone.cpp index f15e1cd..44ffcad 100644 --- a/trunk/src/base/backbone/backbone.cpp +++ b/trunk/src/base/backbone/backbone.cpp @@ -74,6 +74,8 @@ void Backbone::init() { SLOT(htmlTranslationReady())); connect(&_bookmarkWatcher, SIGNAL(finished()), this, SLOT(bookmarksListReady())); + connect(&_bookmarkSearchWatcher, SIGNAL(finished()), this, + SLOT(translationReady())); QThreadPool::globalInstance()->setMaxThreadCount( QThreadPool::globalInstance()->maxThreadCount()+1); @@ -175,11 +177,15 @@ void Backbone::stopSearching() { void Backbone::search(QString word) { _result.clear(); mappedSearch = word.toLower(); - //_time.restart(); + stopped = false; _innerResult = QtConcurrent::mapped(activeDicts(), mapSearch); _resultWatcher.setFuture(_innerResult); + + _innerBookmarks = QtConcurrent::run(bookmarks, &Bookmarks::searchWordList, + word); + _bookmarkSearchWatcher.setFuture(_innerBookmarks); } @@ -224,18 +230,24 @@ void Backbone::addDictionary(CommonDictInterface *dict, bool active) { void Backbone::translationReady() { - //if(!_innerResult.isFinished()) - // return; - QFutureIterator > it(_innerResult); + if(_innerResult.isFinished()) { + QFutureIterator > it(_innerResult); + + while(it.hasNext()) { + QList list = it.next(); + foreach(Translation* trans, list) + _result.insert(trans->key().toLower(), trans); + } + } - while(it.hasNext()) { - QList list = it.next(); + if(_innerBookmarks.isFinished()) { + QList list = _innerBookmarks.result(); + qDebug() << "translation bookmarks" << list.size(); foreach(Translation* trans, list) - _result.insert(trans->key().toLower(), trans); + _result.insert(trans->key().toLower(), trans); } - //qDebug () << "time " << _time.elapsed(); - if(!stopped) + if(!stopped && _innerResult.isFinished() && _innerBookmarks.isFinished()) Q_EMIT ready(); } @@ -422,24 +434,23 @@ void Backbone::searchHtml(QList translations) { _htmlResult.clear(); QList dummy; stopped = false; - //_time.restart(); + qDebug()<< "search html"; foreach(Translation* tr, translations) dummy.append(TranslationPtr(tr)); + qDebug()<< "search html mapp " << dummy.size(); _innerHtmlResult = QtConcurrent::mapped(dummy, &TranslationPtr::toHtml); + qDebug()<< "search html after map"; _htmlResultWatcher.setFuture(_innerHtmlResult); } void Backbone::htmlTranslationReady() { - //if(!_innerHtmlResult.isFinished()) - //return; QFutureIterator it(_innerHtmlResult); while(it.hasNext()) _htmlResult.append(it.next()); - //qDebug() << "time " << _time.elapsed(); if(!stopped) Q_EMIT htmlReady(); diff --git a/trunk/src/base/backbone/backbone.h b/trunk/src/base/backbone/backbone.h index d92fa50..8ebcc99 100644 --- a/trunk/src/base/backbone/backbone.h +++ b/trunk/src/base/backbone/backbone.h @@ -199,21 +199,30 @@ private Q_SLOTS: private: - QHash _dicts; - QList _plugins; - QFuture > _innerResult; - QFuture _innerHtmlResult; - QFuture > _innerBookmarks; - QMultiHash _result; - QStringList _htmlResult; - QList _bookmarksResult; - //QTime _time; - QString _pluginPath, _defaultPluginPath; - QString _configPath; - QString _defaultConfigPath; + QHash _dicts; // List of dictionaries + QList _plugins; // List of plugins + + + QFuture > _innerResult; //Res of concurent word search + QFuture _innerHtmlResult; // Result of html search + QFuture > _innerBookmarks; //Res of search in bookmarks + QFuture _innerHtmlBookmarks; //Html result of bookmarks search + + QMultiHash _result; //Final result of word search + QStringList _htmlResult; // Final result of html search + QList _bookmarksResult; // Final result of search in bookmarks + + + // Keeps track of concurent computations QFutureWatcher > _resultWatcher; QFutureWatcher > _bookmarkWatcher; + QFutureWatcher > _bookmarkSearchWatcher; QFutureWatcher _htmlResultWatcher; + + + QString _pluginPath, _defaultPluginPath; + QString _configPath; + QString _defaultConfigPath; int _searchLimit, _defaultSearchLimit; int _activeSearchNum; int _historyLen, _defaultHistoryLen; @@ -234,7 +243,6 @@ private: CommonDictInterface* plugin(QString type); //< search for given type plugin QList activeDicts(); - //QList mapSearch(CommonDictInterface*) const; History* _history; -- 1.7.9.5