Merge branch 'master' into google
[mdictionary] / trunk / src / base / backbone / backbone.cpp
index 451ca9f..10116c7 100644 (file)
@@ -26,6 +26,8 @@
 */
 
 #include "backbone.h"
+#include "ConfigGenerator.h"
+class ConfigGenerator;
 #include <QDebug>
 
 int Backbone::_searchLimit;
@@ -69,15 +71,22 @@ public:
 
 void Backbone::init() {
 
+   _dir = QDir::homePath() + "/.mdictionary/";
    if(!_configPath.size())
-       _configPath = QDir::homePath() + "/.mdictionary/mdictionary.config";
+       _configPath = _dir + "mdictionary.config";
    if(!_defaultConfigPath.size())
-       _defaultConfigPath = QDir::homePath() + "/.mdictionary/mdictionary.defaults";
+       _defaultConfigPath = _dir + "mdictionary.defaults";
    if(!_pluginPath.size())
        _pluginPath = "/usr/lib/mdictionary";
    _historyLen = 10;
    _searchLimit = 15;
 
+   //Install default config files
+   ConfigGenerator confGen;
+   confGen.generateCss(_dir + "style.css");
+
+
+
    loadPrefs(_defaultConfigPath);
 
    // Default configuration are stored in separate config file and we dont want
@@ -305,9 +314,9 @@ void Backbone::translationReady() {
 QStringList Backbone::getFilesFromDir(QString dir, QStringList nameFilter) {
     QDir plug(QDir::toNativeSeparators(dir));
     if(!plug.exists()) {
-        qDebug() << plug.absolutePath() << " folder dosen't exists";
+        qDebug() << plug.absolutePath() << " folder doesn't exist";
         Q_EMIT notify(Notify::Warning,
-                QString("%1 folder dosen't exists.").arg(plug.path()));
+                QString("%1 folder doesn't exist.").arg(plug.path()));
         return QStringList();
     }
     plug.setFilter(QDir::Files);
@@ -323,7 +332,7 @@ void Backbone::loadPlugins() {
     if(dryRun)
         return;
     QStringList nameFilter;
-    nameFilter << "*.so";
+    nameFilter << "*.so" << "*.so.*";
     QStringList files = getFilesFromDir(_pluginPath, nameFilter);
 
     foreach(QString file, files) {
@@ -337,8 +346,15 @@ void Backbone::loadPlugins() {
         }
         QObject *pl = loader.instance();
 
+        bool exists = 0;
         CommonDictInterface *plugin = qobject_cast<CommonDictInterface*>(pl);
-        _plugins.append(plugin);
+        foreach(CommonDictInterface* pl, _plugins)
+            if(pl->type() == plugin->type()) {
+                exists = 1;
+                break;
+           }
+        if(!exists)
+            _plugins.append(plugin);
     }
 }
 
@@ -359,10 +375,10 @@ void Backbone::loadPrefs(QString fileName) {
     QFileInfo file(QDir::toNativeSeparators(fileName));
     QDir confDir(file.dir());
     if(!confDir.exists()){
-        qDebug() << "Configuration file dosn't exists ("
+        qDebug() << "Configuration file doesn't exist ("
                 << file.filePath() << ")";
         Q_EMIT notify(Notify::Warning,
-                QString("%1 configurationfile dosen't exists.")
+                QString("%1 configuration file doesn't exist.")
                 .arg(file.filePath()));
         return;
     }
@@ -405,10 +421,10 @@ void Backbone::loadDicts(QString fileName, bool _default) {
     QFileInfo file(QDir::toNativeSeparators(fileName));
     QDir confDir(file.dir());
     if(!confDir.exists()){
-        qDebug() << "Configuration file dosn't exists ("
+        qDebug() << "Configuration file doesn't exist ("
                 << file.filePath() << ")";
         Q_EMIT notify(Notify::Warning,
-                QString("%1 configurationfile dosen't exists.")
+                QString("%1 configurationfile doesn't exist.")
                 .arg(file.filePath()));
         return;
     }
@@ -423,9 +439,9 @@ void Backbone::loadDicts(QString fileName, bool _default) {
         if(!plug) {
             qDebug() << "Config file error: "
                     << set.value(dict + "/type", "").toString()
-                    << " dosen't exists";
+                    << " doesn't exist";
             Q_EMIT notify(Notify::Warning,
-                    QString("Configuration file error. %2 plugin dosen't exists.")
+                    QString("Configuration file error. %2 plugin doesn't exist.")
                     .arg(set.value(dict + "/type", "").toString()));
             continue;
         }
@@ -514,20 +530,38 @@ void Backbone::searchHtml(QList<Translation *> translations) {
     QList<TranslationPtr> dummy;
     stopped = false;
     foreach(Translation* tr, translations) {
-        if(containsDict(tr->dict()) || !tr->dict())
+         if(containsDict(tr->dict()) || !tr->dict())
             dummy.append(TranslationPtr(tr));
-  }
+  /*      foreach(CommonDictInterface* dict, activeDicts()) {
+            Translation* trans = dict->getTranslationFor(tr->key());
+            if(trans)
+                dummy.append(TranslationPtr(trans));
+        } */
+    }
+    if(translations.size()>0) {
+        Translation *tr = translations.at(0);
+        foreach(CommonDictInterface* dict, activeDicts()) {
+            Translation* trans = dict->getTranslationFor(tr->key());
+            if(trans)
+                dummy.append(TranslationPtr(trans));
+        }
+    }
 
    _innerHtmlResult = QtConcurrent::mapped(dummy,
                                             &TranslationPtr::toHtml);
    _htmlResultWatcher.setFuture(_innerHtmlResult);
 }
 
+
+
 void Backbone::htmlTranslationReady() {
 
     QFutureIterator<QString> it(_innerHtmlResult);
+    QSet<QString> uniqe;
     while(it.hasNext())
-       _htmlResult.append(it.next());
+        uniqe.insert(it.next());
+    _htmlResult.clear();
+    _htmlResult = uniqe.toList();
 
     if(!stopped)
         Q_EMIT htmlReady();