#include "backbone.h"
#include <QDebug>
+QString mappedSearch;
+QList<Translation*> mapSearch(CommonDictInterface *dict) {
+ if(dict)
+ return dict->searchWordList(mappedSearch, 15);
+ return QList<Translation*>();
+}
+
void Backbone::init() {
_interval = 250; //msec
dryRun = false;
+
+
void Backbone::search(QString word) {
_timerSearch.stop();
_result.clear();
- _innerResult.clear();
+ mappedSearch = word.toLower();
+ _innerResult = QtConcurrent::mapped(activeDicts(), mapSearch);
_timerSearch.start(_interval);
- foreach(CommonDictInterface* dict, _dicts.keys())
- if(_dicts[dict] == 1) {
- QFuture<QList<Translation*> > tr =
- QtConcurrent::run(dict,
- &CommonDictInterface::searchWordList,word,
- searchLimit());
- _innerResult.append(tr);
- }
+
+
+ //foreach(CommonDictInterface* dict, _dicts.keys())
+ // if(_dicts[dict] == 1) {
+ // QFuture<QList<Translation*> > tr =
+ // QtConcurrent::run(dict,
+ // &CommonDictInterface::searchWordList,word,
+ // searchLimit());
+ // _innerResult.append(tr);
+ // }
}
int Backbone::activeSearches() const {
- return _innerResult.size();
+ return -1; //TODO
}
void Backbone::translationReady() {
- foreach(QFuture<QList<Translation*> > trans, _innerResult) {
- if(!trans.isFinished())
- continue;
- QList<Translation*> tList = trans.result();
- foreach(Translation* t, tList) {
- _result.insert(t->key().toLower(), t);
- }
- _innerResult.removeOne(trans);
- }
- if(!_innerResult.size()) {
- _timerSearch.stop();
- Q_EMIT ready();
+ if(!_innerResult.isFinished())
+ return;
+ QFutureIterator<QList<Translation*> > it(_innerResult);
+
+ while(it.hasNext()) {
+ QList<Translation* > list = it.next();
+ foreach(Translation* trans, list)
+ _result.insert(trans->key().toLower(), trans);
}
+
+ _timerSearch.stop();
+ Q_EMIT ready();
}
QStringList Backbone::getFilesFromDir(QString dir, QStringList nameFilter) {
}
}
+
+
+QList<CommonDictInterface*> Backbone::activeDicts() {
+ QList<CommonDictInterface*>res;
+ foreach(CommonDictInterface* dict, _dicts.keys())
+ if(_dicts[dict])
+ res.append(dict);
+ return res;
+
+}
#include <QPluginLoader>
#include <QFuture>
#include <QtConcurrentRun>
+#include <QtConcurrentMap>
+#include <QFutureIterator>
#include <QTimer>
#include <QTime>
#include <QDir>
private:
QHash<CommonDictInterface*, bool> _dicts;
QList<CommonDictInterface*> _plugins;
- QList<QFuture<QList<Translation*> > > _innerResult;
+ QFuture<QList<Translation*> > _innerResult;
QList<QFuture<QString> > _innerHtmlResult;
QMultiHash<QString, Translation*> _result;
QStringList _htmlResult;
QString _pluginPath, _defaultPluginPath;
QString _configPath;
QString _defaultConfigPath;
+ //QString _mappedSearch;
int _searchLimit, _defaultSearchLimit;
int _activeSearchNum;
int _interval; //Search fetching timer.timeout interval in msec
int _historyLen, _defaultHistoryLen;
bool dryRun;
+
void init();
QStringList getFilesFromDir(QString dir, QStringList nameFilter);
void loadPlugins(); //< locate and load plugins
void savePrefs(QSettings*);
void saveDefaultPrefs(QSettings*);
CommonDictInterface* plugin(QString type); //< search for given type plugin
+ QList<CommonDictInterface*> activeDicts();
+
+ //QList<Translation*> mapSearch(CommonDictInterface*) const;
History* _history;