google translation can be added to bookmark
authorJakub Jaszczynski <j.j.jaszczynski@gmail.com>
Fri, 1 Oct 2010 10:49:30 +0000 (12:49 +0200)
committerJakub Jaszczynski <j.j.jaszczynski@gmail.com>
Fri, 1 Oct 2010 10:49:30 +0000 (12:49 +0200)
src/mdictionary/backbone/Bookmarks.cpp
src/mdictionary/backbone/Bookmarks.h
src/mdictionary/backbone/backbone.cpp
src/mdictionary/backbone/backbone.h
src/mdictionary/gui/MainWindow.cpp
src/plugins/google/GooglePlugin.cpp
src/plugins/google/GooglePlugin.h
src/plugins/google/TranslationGoogle.cpp
src/plugins/google/TranslationGoogle.h

index a2f55c8..56d8020 100644 (file)
@@ -55,7 +55,7 @@ void Bookmarks::clear() {
 void Bookmarks::add(Translation* translation) {
     if (!translation)
         return ;
-    checkAndCreateDb();
+    checkAndCreateDb();   
     QSqlDatabase db = getDbCnx();
     if(!db.isOpen() && !db.open()) {
         qDebug() << "Database error: " << db.lastError().text() << endl;
@@ -70,6 +70,21 @@ void Bookmarks::add(Translation* translation) {
     cur.exec();
 }
 
+void Bookmarks::add(QString key,QString removeAccentKey,QString value){
+    checkAndCreateDb();
+    QSqlDatabase db = getDbCnx();
+    if(!db.isOpen() && !db.open()) {
+        qDebug() << "Database error: " << db.lastError().text() << endl;
+        return ;
+    }
+    QSqlQuery cur(db);
+    cur.prepare("insert into bookmarks values (?,?,?)");
+    cur.addBindValue(key);
+    cur.addBindValue(removeAccentKey);
+    cur.addBindValue(value);
+    cur.exec();
+}
+
 
 void Bookmarks::remove(Translation* translation) {
     if (!translation)
index 74e4721..1731499 100644 (file)
@@ -63,6 +63,8 @@ public:
     */
     void add(Translation* translation);
 
+    void add(QString key,QString removeAccentKey,QString value);
+
     /*! Removes word and corresponding translation cache from bookmarks list
         \param translation translation to be removed
     */
index 4ab57cc..e441ecb 100644 (file)
@@ -514,6 +514,34 @@ QStringList Backbone::xmls() {
     return _xmlResult;
 }
 
+void Backbone::addBookmark(QList<Translation*> translations) {
+    if(translations.size()>0) {
+        Translation *tr = translations.at(0);
+        foreach(CommonDictInterface* dict, activeDicts()) {
+            Translation* trans = dict->getTranslationFor(tr->key());
+            if(trans) {
+                translations.append(trans);
+            }
+        }
+    }
+
+    Translation* translation;
+    QHash<QString,QString> trans;
+    foreach(translation,translations){
+        translation->setBookmark(true);
+        trans.insert(translation->toXml(),translation->key());
+    }
+
+    foreach(QString value,trans.keys()){
+        QString key= trans.value(value);
+        _bookmarks.add(key,key,value);
+    }
+
+    // Translation* translation;
+    // foreach(translation, translations)
+    // _bookmarks.add(translation);
+    // emit bookmarkReady();
+}
 
 
 void Backbone::searchXml(QList<Translation *> translations) {
index 58ec3bd..e5c619d 100644 (file)
@@ -45,6 +45,7 @@
 #include <QDebug>
 #include <QSettings>
 #include <QFutureWatcher>
+#include <QMultiMap>
 #include "../../include/CommonDictInterface.h"
 #include "../../include/settings.h"
 #include "../../include/translation.h"
@@ -194,11 +195,7 @@ public Q_SLOTS:
       added to bookmarks data base (key and translation stored in db))
       \param translations list of Translation objects to be stored in db
       */
-    void addBookmark(QList<Translation*> translations) {
-        Translation* translation;
-        foreach(translation, translations)
-            _bookmarks.add(translation);
-    }
+    void addBookmark(QList<Translation*> translations);
 
 
     /*! Removes bookmarks to given translations
@@ -234,15 +231,12 @@ public Q_SLOTS:
         _bookmarkSearchWatcher.setFuture(_innerBookmarks);
    }
 
-
-
    /*! Sets settings for backbone: history_size, search_limit,
        searching backends (search_bookmarks, search_dictionaries)
        \param settings settings object with options set
        */
     void setSettings(Settings* settings);
 
-
     /*! \return corresponding settings object with history_size, search_limit,
        searching backends (search_bookmarks, search_dictionaries)
        */
@@ -277,6 +271,8 @@ Q_SIGNALS:
     */
     void notify(Notify::NotifyType, QString);
 
+    void bookmarkReady();
+
 private Q_SLOTS:
     void bookmarksListReady();
 
index e347a7b..51384d6 100644 (file)
@@ -464,6 +464,13 @@ void MainWindow::connectBackbone() {
 
     connect(backbone, SIGNAL(closeOk()),
             this, SLOT(close()));
+
+
+    //connect(wordListWidget, SIGNAL(addBookmark(QList<Translation*>)),
+    //       this, SIGNAL(setBusy()));
+
+    //connect(backbone, SIGNAL(bookmarkReady()),
+    //        this, SIGNAL(setIdle()));
 }
 
 void MainWindow::connectSearchBar() {
index 37eaf20..0d85f4c 100644 (file)
@@ -44,8 +44,11 @@ GooglePlugin::GooglePlugin(QObject *parent): CommonDictInterface(parent),
     stopped = false;
     initLanguages();
 
-    http = new QHttp(this);
+    http = new QHttp();
     connect(http, SIGNAL(done(bool)), this, SLOT(done()));
+    threa=new QThread();
+    http->moveToThread(threa);
+    threa->start();
 }
 
 void GooglePlugin::retranslate() {
@@ -189,10 +192,22 @@ QList<Translation*> GooglePlugin::searchWordList(QString word, int ) {
 
         wait=true;      /* bool - change in slot done (initiate by http) */
         stopped=false;  /* bool - change in slot stop (initiate in gui)  */
+
+        int lastState=0;
+        //qDebug()<<"google3";
         http->request(head, data);
-        while(wait && (error=="" || error=="Unknown error") && !stopped)
+        while(wait && (error=="" || error=="Unknown error") && !stopped){
             error=http->errorString();
-
+            if(lastState!=http->state()) {
+                lastState=http->state();
+        //        qDebug()<<lastState;
+                if(lastState==0){
+                    done();
+        //            qDebug()<<"done2";
+                }
+            }
+        }
+        //qDebug()<<"google4";
         if(error!="" && error!="Unknown error") {
             if(!noNetworkErrorShowed) {
                 noNetworkErrorShowed = true;
@@ -213,7 +228,7 @@ QList<Translation*> GooglePlugin::searchWordList(QString word, int ) {
 
 
 QString GooglePlugin::jsonParse(QString result) {
-    qDebug()<<"Json"<<result;
+    //qDebug()<<"Json"<<result;
     int pos=0,pos2=0,index=0,size=0;
     QString returnLang;
     QString translation;
@@ -290,12 +305,13 @@ QString GooglePlugin::jsonParse(QString result) {
             result+=words.at(i)->at(j)+", ";
         result.remove(result.size()-2,2);
     }
-    qDebug()<<"PO"<<result;
+    //qDebug()<<"PO"<<result;
     return result;
 }
 
 
 void GooglePlugin::done() {
+//    qDebug()<<"done";
     wait=false;
 }
 
index 17c0154..4f84f07 100644 (file)
@@ -153,6 +153,7 @@ private:
     volatile bool wait;
     QHttp *http;
     GoogleDictDialog *_dictDialog;
+    QThread *threa;
 };
 
 #endif // GOOGLEPLUGIN_H
index f0355e7..fa6e35d 100644 (file)
@@ -53,19 +53,18 @@ QString TranslationGoogle::toXml() const {
         return result;   
     result="<dict> <info path=\"/usr/share/mdictionary/google.png\" ";
     if(isBookmark())
-        result+="bookmark=\"true\" >";
+        result+=" bookmark=\"true\" > \n";
     else
-        result+="bookmark=\"false\" >";
-
-    //qDebug()<<"trans: "<<_trans;
+        result+=" bookmark=\"false\" > \n";
 
     if(_trans!="")
         return result+=_dictionaryInfo+ "</info>"+_trans +"</dict>";
-
     QList<Translation*> translations=googlePlugin->searchWordList(_key);
-    //qDebug()<<"test: "<<translations.size();
-    if(translations.size()>0 && translations.at(0))
+    if(translations.size()>0 && translations.at(0)){
+        if(isBookmark())
+            translations.at(0)->setBookmark(true);
         return translations.at(0)->toXml();
+    }
     return "";
 
 }
index 5ce1f76..4eb41cc 100644 (file)
@@ -55,7 +55,7 @@ public:
     //! \return whether given translation is taken from bookmarks
     int isBookmark() const {
         return _bookmark;
-   }
+  }
 
     //! \returns corresponding dict object
     uint dict() const {return _dictHash;}