delete unnecessary variable
[mdictionary] / trunk / src / plugins / google / src / GooglePlugin.cpp
index 98e174b..39aa5ae 100644 (file)
 *******************************************************************************/
 
 /*! \file GooglePlugin.cpp
+    \author Jakub Jaszczynski <j.j.jaszczynski@gmail.com>
 */
 
 #include "GooglePlugin.h"
 #include <QDebug>
-#include "GoogleDictDialog.h"S
-
+#include "GoogleDictDialog.h"
 
 GooglePlugin::GooglePlugin(QObject *parent): CommonDictInterface(parent),
-                    _langFrom(tr("")), _langTo(tr("")),_name(tr("")),
-                    _type(tr("google")), _infoNote(tr("")) {
+                    _name(tr("")),_infoNote(tr("")) {
 
-    stopped = false;
     _settings = new Settings();
+    _settings->setValue("lang_to","");
+    _settings->setValue("lang_from","");
+    _settings->setValue("type","google");
+    _settings->setValue("connection_acepted","true");
     _dictDialog = new GoogleDictDialog(this,this);
+    _icon = QIcon(":/icons/drawing.png");
 
-    //_icon = QIcon(":/icon/google.png");
-    initLanguages();
-    _settings->setValue("type","google");
+    stopped = false;
+    languages=initLanguages();
 
     http = new QHttp(this);
     connect(http, SIGNAL(done(bool)), this, SLOT(done()));
 }
 
+
 GooglePlugin::~GooglePlugin() {
     delete _settings;
 }
 
+
 QString GooglePlugin::langFrom() const {
-    return _langFrom;
+    return languages.key(_settings->value("lang_from"));
 }
 
+
 QString GooglePlugin::langTo() const {
-    return _langTo;
+    return languages.key(_settings->value("lang_to"));
 }
 
+
 QString GooglePlugin::name() const {
-    return _name;
+    return QString("dictionary");
 }
 
+
 QString GooglePlugin::type() const {
-    return _type;
+    return QString("google");
 }
 
+
 QString GooglePlugin::infoNote() const {
     return _infoNote;
 }
 
+
 void GooglePlugin::setLangTo(QString langTo){
-    _langTo=langTo;
+    _settings->setValue("lang_to",langTo);
 }
 
+
 void GooglePlugin::setLangFrom(QString langFrom){
-    _langFrom=langFrom;
+    _settings->setValue("lang_from",langFrom);;
 }
 
+
 DictDialog* GooglePlugin::dictDialog() {
     return _dictDialog;
 }
 
+
 bool GooglePlugin::isAvailable() const {
-   return true;
+    return isConnectionAccept();
 }
 
-QString GooglePlugin::search(QString key) {
-    /*function is not used on this plagin */
-    return QString("");
+
+void GooglePlugin::setConnectionAccept(QString connectionAcepted) {
+    if(connectionAcepted=="true")
+        _settings->setValue("connection_acepted","true");
+    else
+        _settings->setValue("connection_acepted","false");
+}
+
+bool GooglePlugin::isConnectionAccept() const {
+    if(_settings->value("connection_acepted")=="true")
+        return true;
+    else
+        return false;
 }
 
+
 uint GooglePlugin::hash() const {
     return _hash;
 }
 
+
 void GooglePlugin::setHash(uint) {
     this->_hash=_hash;
 }
 
+
 Settings* GooglePlugin::settings() {
-    return _settings;
+    Settings *returnSettings=new Settings;
+    QStringList list = _settings->keys();
+    foreach(QString key, list)
+            returnSettings->setValue(key,_settings->value(key));
+    return returnSettings;
+}
+
+
+void GooglePlugin::setSettings(const Settings* settings) {
+    if(settings) {
+        QStringList list = settings->keys();
+        foreach(QString key, list)
+            _settings->setValue(key, settings->value(key));
+        getDictionaryInfo();
+    }
 }
 
+
 QIcon* GooglePlugin::icon() {
     return &_icon;
 }
 
-CommonDictInterface* GooglePlugin::getNew(const Settings* settings) const
-{
+
+CommonDictInterface* GooglePlugin::getNew(const Settings* settings) const {
     GooglePlugin *plugin = new GooglePlugin();
-    if(settings)   {
-        plugin->setLangFrom(settings->value("langFrom"));
-        plugin->setLangTo(settings->value("langTo"));
-        QStringList list = settings->keys();
-        foreach(QString key, list)
-            plugin->settings()->setValue(key, settings->value(key));
-    }
-    delete settings;
+    plugin->setSettings(settings);
     return plugin;
 }
 
-void GooglePlugin::setSettings(Settings* settings) {
-    plugin->setLangFrom(settings->value("langFrom"));
-    plugin->setLangTo(settings->value("langTo"));
-    QStringList list = settings->keys();
-    foreach(QString key, list)
-        plugin->settings()->setValue(key, settings->value(key));
-    delete settings;
+
+QString GooglePlugin::search(QString) {
+    qDebug() << "function is not used on this plagin";
+    return QString("");
 }
 
-Translation* getTranslationFor(QString key) {
-    return searchWordList(key);
+
+Translation* GooglePlugin::getTranslationFor(QString key) {
+    return (new TranslationGoogle(key,"",_infoNote,this));
 }
 
-QList<Translation*> GooglePlugin::searchWordList(QString word, int limit) {
+
+QList<Translation*> GooglePlugin::searchWordList(QString word, int ) {
     QList<Translation*> translations;
-    QString url = QString("/translate_a/t?client=t&sl=%1+&tl=%2").arg(_langFrom,_langTo);
-    QHttpRequestHeader head = QHttpRequestHeader("POST", url, 1,1);
-    head.setValue("Host", "www.google.pl");
-    head.setValue("User-Agent", "Mozilla/5.0");
-    head.setValue("Accept-Encoding", "deflate");
-    head.setContentLength(word.length());
-    head.setValue("Connection", "Close");
-
-    QByteArray data("text=");
-    data.append(word.toUtf8());
-    http->setHost("www.google.pl");
-    wait=true;
-    http->request(head, data);
-    while(wait);
-
-    QString text = QString::fromUtf8(http->readAll());
-    text=tr("<key>") + key + tr("</key>") + tr("<t>") + text + tr("</t>");
-
-    translations<<(new TranslationGoogle(word,text,_infoNote,this));
+    if(isAvailable()) {
+        QString error("");
+        word.replace("*","");   /*remove wildcard*/
+        word.replace("?","");
+        QString url=QString("/translate_a/t?client=t&sl=%1&tl=%2").arg(
+                                              _settings->value("lang_from"),
+                                              _settings->value("lang_to"));
+        QHttpRequestHeader head = QHttpRequestHeader("POST", url, 1,1);
+        head.setValue("Host","www.google.pl");
+        head.setValue("User-Agent", "Mozilla/5.0");
+        head.setValue("Accept-Encoding", "deflate");
+        head.setContentLength(word.length());
+        head.setValue("Connection", "Close");
+
+        QByteArray data("text=");
+        data.append(word.toUtf8());
+        http->setHost("www.google.pl");
+
+        wait=true;      /* bool - change in slot done (initiate by http) */
+        stopped=false;  /* bool - change in slot stop (initiate in gui)  */
+        http->request(head, data);
+        while(wait && (error=="" || error=="Unknown error") && !stopped)
+            error=http->errorString();
+
+        if(error!="" && error!="Unknown error") {
+            qDebug()<<error;
+            Q_EMIT notify(Notify::Warning,
+                    QString("GooglePlugin: %1").arg(error));
+        }
+
+        QString text = QString::fromUtf8(http->readAll());
+        text=jsonParse(text);
+        if(text!="") {
+            text="<key>" + word + "</key>" + "<t>" + text + "</t>";
+            translations<<(new TranslationGoogle(word,text,_infoNote,this));
+        }
+    }
     return translations;
 }
 
+
+QString GooglePlugin::jsonParse(QString result) {
+    int pos=0,pos2=0,index=0,size=0;
+    QString returnLang;
+    QString translation;
+    QString original;
+    QList<QString> partOfSpeach;
+    QList<QList<QString>* > words;
+    QStringList list1 = result.split("\"");
+
+    size=(list1.size()-1)/2;
+    if(size<=2)
+        return QString(""); // wrong format of data
+
+    translation=list1.at(index*2+1);
+    index++;
+    original=list1.at(index*2+1);
+    pos=result.indexOf("]");
+    index++;
+    while(result.at(pos+1)==QChar(',')) {
+        index++;
+        translation+=list1.at(index*2+1);
+        index++;
+        original=list1.at(index*2+1);
+        pos=result.indexOf("]",pos+1);
+        index++;
+    }
+
+    pos=result.indexOf("]",pos+1);
+    pos++;
+    index++;
+    if(result.at(pos+1)==QChar(','))
+        returnLang=list1.at(index*2+1); /*return when translate sentence*/
+
+    while(result.indexOf("[",pos+1)!=-1){
+        partOfSpeach.append(list1.at(index*2+1));
+        pos2=result.indexOf("]",pos+1);
+        pos=result.indexOf("\"",pos+1);
+        pos=result.indexOf("\"",pos+1);
+        pos=result.indexOf("\"",pos+1);
+        pos=result.indexOf("\"",pos+1);
+        QList<QString> *list=new QList<QString>;
+        while(pos2>pos && pos2!=-1 && pos!= -1) {
+            index++;
+            if(size==index)
+                return QString("");
+            list->append(list1.at(index*2+1));
+            pos=result.indexOf("\"",pos+1);
+            pos=result.indexOf("\"",pos+1);
+        }
+        words.append(list);
+        index++;
+        if(size==index)
+            return QString("");
+        pos=pos2+2;
+    }
+
+    if(words.size()!=partOfSpeach.size()) {
+        qDebug()<<"Error in Google Plugin (JsonParse)";
+        Q_EMIT notify(Notify::Warning,
+                QString("GooglePlugin: can't parse Json"));
+        return QString("");
+    }
+    returnLang=list1.at(index*2+1);
+    if(partOfSpeach.size()==0){
+        if(translation.toLower()==original.toLower()){
+            return QString(""); // word don't exist";
+        }
+        else
+            return "\""+translation+"\"";
+    }
+    result=translation;
+    for(int i=0; i<words.size();i++) {
+        result+="<br/><pos>"+partOfSpeach.at(i)+"</pos>: ";
+        for(int j=0; j<words.at(i)->size();j++)
+            result+=words.at(i)->at(j)+", ";
+        result.remove(result.size()-2,2);
+    }
+    return result;
+}
+
+
 void GooglePlugin::done() {
     wait=false;
 }
 
-void GooglePlugin::started(int a) {
-    qDebug()<<"test";
-}
 
 void GooglePlugin::stop() {
     stopped=true;
 }
 
-void GooglePlugin::initLanguages() {
+
+QMap<QString, QString> GooglePlugin::initLanguages() {
+    QMap<QString, QString> languages;
     languages["AFRIKAANS"] = "af";
     languages["ALBANIAN"] = "sq";
-    languages["AMHARIC"] = "am";
     languages["ARABIC"] = "ar";
     languages["ARMENIAN"] = "hy";
     languages["AZERBAIJANI"] = "az";
     languages["BASQUE"] = "eu";
     languages["BELARUSIAN"] = "be";
-    languages["BENGALI"] = "bn";
-    languages["BIHARI"] = "bh";
-    languages["BRETON"] = "br";
     languages["BULGARIAN"] = "bg";
-    languages["BURMESE"] = "my";
     languages["CATALAN"] = "ca";
-    languages["CHEROKEE"] = "chr";
     languages["CHINESE"] = "zh";
-    languages["CHINESE_SIMPLIFIED"] = "zh-CN";
-    languages["CHINESE_TRADITIONAL"] = "zh-TW";
-    languages["CORSICAN"] = "co";
     languages["CROATIAN"] = "hr";
     languages["CZECH"] = "cs";
     languages["DANISH"] = "da";
-    languages["DHIVEHI"] = "dv";
     languages["DUTCH"] = "nl";
     languages["ENGLISH"] = "en";
-    languages["ESPERANTO"] = "eo";
     languages["ESTONIAN"] = "et";
-    languages["FAROESE"] = "fo";
     languages["FILIPINO"] = "tl";
     languages["FINNISH"] = "fi";
     languages["FRENCH"] = "fr";
-    languages["FRISIAN"] = "fy";
     languages["GALICIAN"] = "gl";
     languages["GEORGIAN"] = "ka";
     languages["GERMAN"] = "de";
     languages["GREEK"] = "el";
-    languages["GUJARATI"] = "gu";
     languages["HAITIAN_CREOLE"] = "ht";
     languages["HEBREW"] = "iw";
     languages["HINDI"] = "hi";
     languages["HUNGARIAN"] = "hu";
     languages["ICELANDIC"] = "is";
     languages["INDONESIAN"] = "id";
-    languages["INUKTITUT"] = "iu";
     languages["IRISH"] = "ga";
     languages["ITALIAN"] = "it";
     languages["JAPANESE"] = "ja";
-    languages["JAVANESE"] = "jw";
-    languages["KANNADA"] = "kn";
-    languages["KAZAKH"] = "kk";
-    languages["KHMER"] = "km";
     languages["KOREAN"] = "ko";
-    languages["KURDISH"] = "ku";
-    languages["KYRGYZ"] = "ky";
-    languages["LAO"] = "lo";
-    languages["LATIN"] = "la";
     languages["LATVIAN"] = "lv";
     languages["LITHUANIAN"] = "lt";
-    languages["LUXEMBOURGISH"] = "lb";
     languages["MACEDONIAN"] = "mk";
     languages["MALAY"] = "ms";
-    languages["MALAYALAM"] = "ml";
     languages["MALTESE"] = "mt";
-    languages["MAORI"] = "mi";
-    languages["MARATHI"] = "mr";
-    languages["MONGOLIAN"] = "mn";
-    languages["NEPALI"] = "ne";
     languages["NORWEGIAN"] = "no";
-    languages["OCCITAN"] = "oc";
-    languages["ORIYA"] = "or";
-    languages["PASHTO"] = "ps";
     languages["PERSIAN"] = "fa";
     languages["POLISH"] = "pl";
     languages["PORTUGUESE"] = "pt";
-    languages["PORTUGUESE_PORTUGAL"] = "pt-PT";
-    languages["PUNJABI"] = "pa";
-    languages["QUECHUA"] = "qu";
     languages["ROMANIAN"] = "ro";
     languages["RUSSIAN"] = "ru";
-    languages["SANSKRIT"] = "sa";
-    languages["SCOTS_GAELIC"] = "gd";
     languages["SERBIAN"] = "sr";
-    languages["SINDHI"] = "sd";
-    languages["SINHALESE"] = "si";
     languages["SLOVAK"] = "sk";
     languages["SLOVENIAN"] = "sl";
     languages["SPANISH"] = "es";
-    languages["SUNDANESE"] = "su";
     languages["SWAHILI"] = "sw";
     languages["SWEDISH"] = "sv";
-    languages["SYRIAC"] = "syr";
-    languages["TAJIK"] = "tg";
-    languages["TAMIL"] = "ta";
-    languages["TATAR"] = "tt";
-    languages["TELUGU"] = "te";
     languages["THAI"] = "th";
-    languages["TIBETAN"] = "bo";
-    languages["TONGA"] = "to";
     languages["TURKISH"] = "tr";
     languages["UKRAINIAN"] = "uk";
     languages["URDU"] = "ur";
-    languages["UZBEK"] = "uz";
-    languages["UIGHUR"] = "ug";
     languages["VIETNAMESE"] = "vi";
     languages["WELSH"] = "cy";
     languages["YIDDISH"] = "yi";
-    languages["YORUBA"] = "yo";
-    languages["UNKNOWN"] = "";
+    languages["DETECT LANGLAGE"] = "";
+//    languages["AMHARIC"] = "am";
+//    languages["BENGALI"] = "bn";
+//    languages["BIHARI"] = "bh";
+//    languages["BRETON"] = "br";
+//    languages["BURMESE"] = "my";
+//    languages["CHEROKEE"] = "chr";
+//    languages["CHINESE_SIMPLIFIED"] = "zh-CN";
+//    languages["CHINESE_TRADITIONAL"] = "zh-TW";
+//    languages["CORSICAN"] = "co";
+//    languages["DHIVEHI"] = "dv";
+//    languages["ESPERANTO"] = "eo";
+//    languages["FAROESE"] = "fo";
+//    languages["FRISIAN"] = "fy";
+//    languages["GUJARATI"] = "gu";
+//    languages["INUKTITUT"] = "iu";
+//    languages["JAVANESE"] = "jw";
+//    languages["KANNADA"] = "kn";
+//    languages["KAZAKH"] = "kk";
+//    languages["KHMER"] = "km";
+//    languages["KURDISH"] = "ku";
+//    languages["KYRGYZ"] = "ky";
+//    languages["LAO"] = "lo";
+//    languages["LATIN"] = "la";
+//    languages["LUXEMBOURGISH"] = "lb";
+//    languages["MALAYALAM"] = "ml";
+//    languages["MAORI"] = "mi";
+//    languages["MARATHI"] = "mr";
+//    languages["MONGOLIAN"] = "mn";
+//    languages["NEPALI"] = "ne";
+//    languages["OCCITAN"] = "oc";
+//    languages["ORIYA"] = "or";
+//    languages["PASHTO"] = "ps";
+//    languages["PORTUGUESE_PORTUGAL"] = "pt-PT";
+//    languages["PUNJABI"] = "pa";
+//    languages["QUECHUA"] = "qu";
+//    languages["SANSKRIT"] = "sa";
+//    languages["SCOTS_GAELIC"] = "gd";
+//    languages["SINDHI"] = "sd";
+//    languages["SINHALESE"] = "si";
+//    languages["SUNDANESE"] = "su";
+//    languages["SYRIAC"] = "syr";
+//    languages["TAJIK"] = "tg";
+//    languages["TAMIL"] = "ta";
+//    languages["TATAR"] = "tt";
+//    languages["TELUGU"] = "te";
+//    languages["TIBETAN"] = "bo";
+//    languages["TONGA"] = "to";
+//    languages["UZBEK"] = "uz";
+//    languages["UIGHUR"] = "ug";
+    return languages;  
 }
 
+
+void GooglePlugin::getDictionaryInfo() {
+    QString fullLangFrom=languages.key(_settings->value("lang_from"));
+    QString fullLangTo=languages.key(_settings->value("lang_to"));
+    _infoNote=" [" + fullLangFrom + "-" + fullLangTo + "] (Google)";
+}
+
+
 Q_EXPORT_PLUGIN2(google, GooglePlugin)