};
void Backbone::init() {
- _interval = 250; //msec
if(!_configPath.size())
_configPath = QDir::homePath() + "/.mdictionary/mdictionary.config";
loadDicts(_defaultConfigPath, true);
loadDicts(_configPath);
- connect(&_timerSearch, SIGNAL(timeout()), this, SLOT(translationReady()));
- connect(&_timerHtmlSearch, SIGNAL(timeout()), this,
+ connect(&_resultWatcher, SIGNAL(finished()), this, SLOT(translationReady()));
+ connect(&_htmlResultWatcher, SIGNAL(finished()), this,
SLOT(htmlTranslationReady()));
QThreadPool::globalInstance()->setMaxThreadCount(
void Backbone::stopSearching() {
- _timerSearch.stop();
- _timerHtmlSearch.stop();
foreach(CommonDictInterface* dict, _dicts.keys())
dict->stop();
+ _innerHtmlResult.cancel();
+ _innerResult.cancel();
}
void Backbone::search(QString word) {
- _timerSearch.stop();
_result.clear();
mappedSearch = word.toLower();
+ //_time.restart();
_innerResult = QtConcurrent::mapped(activeDicts(), mapSearch);
- _timerSearch.start(_interval);
+ _resultWatcher.setFuture(_innerResult);
void Backbone::translationReady() {
- if(!_innerResult.isFinished())
- return;
+ //if(!_innerResult.isFinished())
+ // return;
QFutureIterator<QList<Translation*> > it(_innerResult);
- _timerSearch.stop();
while(it.hasNext()) {
QList<Translation* > list = it.next();
_result.insert(trans->key().toLower(), trans);
}
+ //qDebug () << "time " << _time.elapsed();
Q_EMIT ready();
}
void Backbone::searchHtml(QList<Translation *> translations) {
- _timerHtmlSearch.stop();
_htmlResult.clear();
QList<TranslationPtr> dummy;
+ //_time.restart();
foreach(Translation* tr, translations)
dummy.append(TranslationPtr(tr));
- _timerHtmlSearch.start(_interval);
_innerHtmlResult = QtConcurrent::mapped(dummy,
&TranslationPtr::toHtml);
+ _htmlResultWatcher.setFuture(_innerHtmlResult);
}
void Backbone::htmlTranslationReady() {
- if(!_innerHtmlResult.isFinished())
- return;
+ //if(!_innerHtmlResult.isFinished())
+ //return;
- _timerHtmlSearch.stop();
- QFutureIterator<QString> it(_innerHtmlResult);
- while(it.hasNext())
+ QFutureIterator<QString> it(_innerHtmlResult);
+ while(it.hasNext())
_htmlResult.append(it.next());
+ //qDebug() << "time " << _time.elapsed();
Q_EMIT htmlReady();
}
#include <QDir>
#include <QThread>
#include <QSettings>
+#include <QFutureWatcher>
#include "../../includes/CommonDictInterface.h"
#include "../../includes/settings.h"
#include "../../includes/translation.h"
QFuture<QString> _innerHtmlResult;
QMultiHash<QString, Translation*> _result;
QStringList _htmlResult;
- QTimer _timerSearch, _timerHtmlSearch;
- QTime _time;
+ //QTime _time;
QString _pluginPath, _defaultPluginPath;
QString _configPath;
QString _defaultConfigPath;
- //QString _mappedSearch;
+ QFutureWatcher<QList<Translation*> > _resultWatcher;
+ QFutureWatcher<QString> _htmlResultWatcher;
int _searchLimit, _defaultSearchLimit;
int _activeSearchNum;
- int _interval; //Search fetching timer.timeout interval in msec
int _historyLen, _defaultHistoryLen;
bool dryRun;