Merge branch 'master' into cache
[mdictionary] / trunk / src / plugins / xdxf / src / xdxfplugin.cpp
index 807937e..7f1e985 100644 (file)
@@ -104,7 +104,8 @@ QList<Translation*> XdxfPlugin::searchWordListCache(QString word, int limit) {
             translations.insert(new TranslationXdxf(
                         cur.value(0).toString().toLower(),
                         _infoNote, this));
-        return translations.toList();
+        db.close();
+       return translations.toList();
 }
 
 
@@ -125,17 +126,17 @@ QList<Translation*> XdxfPlugin::searchWordListFile(QString word, int limit) {
         return translations.toList();
     }
 
-    QXmlStreamReader dictionaryReader(&dictionaryFile);
+    QXmlStreamReader reader(&dictionaryFile);
     /*search words list*/
     QString a;
     int i=0;
-    while(!dictionaryReader.atEnd() && !stopped){
-        dictionaryReader.readNextStartElement();
-        if(dictionaryReader.name()=="ar"){
-            while(dictionaryReader.name()!="k" && !dictionaryReader.atEnd())
-                dictionaryReader.readNextStartElement();
-            if(!dictionaryReader.atEnd())
-                a = dictionaryReader.readElementText();
+    while(!reader.atEnd() && !stopped){
+        reader.readNextStartElement();
+        if(reader.name()=="ar") {
+            while(reader.name()!="k" && !reader.atEnd())
+                reader.readNextStartElement();
+            if(!reader.atEnd())
+                a = reader.readElementText();
             if(regWord.exactMatch(removeAccents(a)) && (i<limit || limit==0)) {
                 bool ok=true;
                 Translation *tran;
@@ -184,6 +185,7 @@ QString XdxfPlugin::searchCache(QString key) {
     cur.exec();
     if(cur.next())
         result = cur.value(0).toString();
+    db.close();
     return result;
 
 }
@@ -199,69 +201,46 @@ QString XdxfPlugin::searchFile(QString key) {
         qDebug()<<"Error: could not open file";
         return "";
     }
-    QXmlStreamReader dictionaryReader(&dictionaryFile);
+    QXmlStreamReader reader(&dictionaryFile);
 
 
     QString a;
 
     bool match =false;
     stopped = false;
-    while (!dictionaryReader.atEnd()&& !stopped) {
-        dictionaryReader.readNext();
-        if(dictionaryReader.tokenType() == QXmlStreamReader::StartElement) {
-            if(dictionaryReader.name()=="k") {
-                a = dictionaryReader.readElementText();
+    while (!reader.atEnd()&& !stopped) {
+        reader.readNext();
+        if(reader.tokenType() == QXmlStreamReader::StartElement) {
+            if(reader.name()=="k") {
+                a = reader.readElementText();
                 if(a==key)
                     match = true;
             }
         }
-        else if(dictionaryReader.tokenType() == QXmlStreamReader::Characters) {
-            if(match) {
- /*             QString temp(dictionaryReader.text().toString());
-                if(temp=="\n")
-                    temp=dictionaryReader.readElementText();
-                temp.replace("\n","");
-                if(temp == ""){
-                    int i=0;
-                    while(dictionaryReader.name()!="ar"&&
-                                !dictionaryReader.atEnd()){
-                        dictionaryReader.readNext();
-                        if(dictionaryReader.name()!="" &&
-                                         dictionaryReader.name()!="ar") {
-                            if(dictionaryReader.tokenType()==QXmlStreamReader::EndElement)
-                                temp+=tr("</");
-                            if(dictionaryReader.tokenType()==QXmlStreamReader::StartElement)
-                                temp+=tr("<");
-                            qDebug()<<dictionaryReader.tokenType();
-                            temp=temp+dictionaryReader.name().toString() + tr(">");
-                            i++;
-                        }
-                        temp+=dictionaryReader.text().toString();
-                    }
-                }
-                resultString+=temp.replace("\n","")+"\n";
-                match=false;
-*/
-                QString temp("");
-                while(dictionaryReader.name()!="ar" && !dictionaryReader.atEnd()) {
-                    if(dictionaryReader.name()!="") {
-                        if(dictionaryReader.tokenType()==QXmlStreamReader::EndElement)
-                            temp+=tr("</");
-                        if(dictionaryReader.tokenType()==QXmlStreamReader::StartElement)
-                            temp+=tr("<");
-                        temp=temp+dictionaryReader.name().toString() + tr(">");
-                    }
-                    temp+= dictionaryReader.text().toString();
-                    dictionaryReader.readNext();
+        if(match) {
+            QString temp("");
+            while(reader.name()!="ar" && !reader.atEnd()) {
+                if(reader.name()!="" && reader.name()!="k") {
+                    if(reader.tokenType()==QXmlStreamReader::EndElement)
+                        temp+=tr("</");
+                    if(reader.tokenType()==QXmlStreamReader::StartElement)
+                        temp+=tr("<");
+                    temp+=reader.name().toString();
+                    if(reader.name().toString()=="c" && reader.tokenType()==QXmlStreamReader::StartElement)
+                       temp= temp + tr(" c=\"") + reader.attributes().value(tr("c")).toString() + tr("\"");
+                    temp+=tr(">");
                 }
-                resultString+=tr("<t>") + temp.replace("\n","") + tr("</t>");
-                match=false;
+                temp+= reader.text().toString();
+                reader.readNext();
             }
+            resultString+=tr("<t>") + temp.replace("\n","") + tr("</t>");
+            match=false;
         }
         this->thread()->yieldCurrentThread();
     }
     stopped=false;
     dictionaryFile.close();
+
     return resultString;
 }
 
@@ -292,6 +271,7 @@ CommonDictInterface* XdxfPlugin::getNew(const Settings *settings) const {
 
         plugin->db_name = plugin->_settings->value("type")
                + plugin->_settings->value("path");
+        if(!plugin->db.connectionName().isEmpty())
         plugin->db = QSqlDatabase::addDatabase("QSQLITE", plugin->db_name);
 
         if(settings->value("cached").isEmpty() &&
@@ -353,20 +333,22 @@ void XdxfPlugin::getDictionaryInfo() {
         return;
     }
 
-    QXmlStreamReader dictionaryReader(&dictionaryFile);
-    dictionaryReader.readNextStartElement();
-    if(dictionaryReader.name()=="xdxf") {
-      if(dictionaryReader.attributes().hasAttribute("lang_from"))
-        _langFrom = dictionaryReader.attributes().value("lang_from").toString();
-      if(dictionaryReader.attributes().hasAttribute("lang_to"))
-        _langTo = dictionaryReader.attributes().value("lang_to").toString();
+    QXmlStreamReader reader(&dictionaryFile);
+    reader.readNextStartElement();
+    if(reader.name()=="xdxf") {
+      if(reader.attributes().hasAttribute("lang_from"))
+        _langFrom = reader.attributes().value("lang_from").toString();
+      if(reader.attributes().hasAttribute("lang_to"))
+        _langTo = reader.attributes().value("lang_to").toString();
     }
-    dictionaryReader.readNextStartElement();
-    if(dictionaryReader.name()=="full_name")
-        _name=dictionaryReader.readElementText();
-    dictionaryReader.readNextStartElement();
-    if(dictionaryReader.name()=="description")
-        _infoNote=dictionaryReader.readElementText();
+    reader.readNextStartElement();
+    if(reader.name()=="full_name")
+        _name=reader.readElementText();
+    reader.readNextStartElement();
+    if(reader.name()=="description")
+        _infoNote=reader.readElementText();
+
+    _infoNote="<info path=\""+path+"\">"+"\n" + _name + "(" + _type + ")"  + "</info>";
 
     dictionaryFile.close();
 }
@@ -474,35 +456,35 @@ bool XdxfPlugin::makeCache(QString dir) {
                 match = true;
             }
         }
-        else if(reader.tokenType() == QXmlStreamReader::Characters) {
-             if(match) {
-                QString temp("");
-                while(reader.name()!="ar" && !reader.atEnd()) {
-                    if(reader.name()!="") {
-                        if(reader.tokenType()==QXmlStreamReader::EndElement)
-                            temp+=tr("</");
-                        if(reader.tokenType()==QXmlStreamReader::StartElement)
-                            temp+=tr("<");
-                        temp=temp+reader.name().toString() + tr(">");
-                    }
-                    temp+= reader.text().toString();
-                    reader.readNext();
-                }
-                temp=tr("<t>") + temp.replace("\n","") + tr("</t>");
-                match = false;
-                cur.prepare("insert into dict values(?,?)");
-                cur.addBindValue(a);
-                cur.addBindValue(temp);
-                cur.exec();
-                counter++;
-                int prog = counter*100/_wordsCount;
-                if(prog % 5 == 0 && lastProg != prog) {
-                    Q_EMIT updateCachingProgress(prog,
-                                                 timer.restart());
-                    lastProg = prog;
+        if(match) {
+            QString temp("");
+            while(reader.name()!="ar" && !reader.atEnd()) {
+                if(reader.name()!="" && reader.name()!="k") {
+                    if(reader.tokenType()==QXmlStreamReader::EndElement)
+                        temp+=tr("</");
+                    if(reader.tokenType()==QXmlStreamReader::StartElement)
+                        temp+=tr("<");
+                    temp+=reader.name().toString();
+                    if(reader.name().toString()=="c" && reader.tokenType()==QXmlStreamReader::StartElement)
+                       temp= temp + tr(" c=\"") + reader.attributes().value(tr("c")).toString() + tr("\"");
+                    temp+=tr(">");
                 }
+                temp+= reader.text().toString();
+                reader.readNext();
+            }
+            temp += tr("<t>") + temp.replace("\n","") + tr("</t>");
+            match=false;
+            cur.prepare("insert into dict values(?,?)");
+            cur.addBindValue(a);
+            cur.addBindValue(temp);
+            cur.exec();
+            counter++;
+            int prog = counter*100/_wordsCount;
+            if(prog % 5 == 0 && lastProg != prog) {
+                Q_EMIT updateCachingProgress(prog,
+                                             timer.restart());
+                lastProg = prog;
             }
-
         }
     }
 
@@ -513,10 +495,14 @@ bool XdxfPlugin::makeCache(QString dir) {
     cachingDialog->setVisible(false);
 
     if(!cur.next() || countWords() != cur.value(0).toInt())
+    {
+        db.close();
         return false;
+    }
     _settings->setValue("cache_path", cachePathN);
     _settings->setValue("cached", "true");
 
+    db.close();
     return true;
 }