*******************************************************************************/
/*! \file GooglePlugin.cpp
+ \author Jakub Jaszczynski <j.j.jaszczynski@gmail.com>
*/
#include "GooglePlugin.h"
#include <QDebug>
-
+#include "GoogleDictDialog.h"
GooglePlugin::GooglePlugin(QObject *parent): CommonDictInterface(parent),
- _langFrom(tr("")), _langTo(tr("")),_name(tr("")),
- _type(tr("google")), _infoNote(tr("")) {
+ _name(tr("")),_infoNote(tr("")) {
+ _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");
stopped = false;
- //_icon = QIcon(":/icon/google.png");
- initLanguages();
+ languages=initLanguages();
+
+ http = new QHttp(this);
+ connect(http, SIGNAL(done(bool)), this, SLOT(done()));
}
-GooglePlugin::~GooglePlugin()
-{
+
+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;
}
-DictDialog* GooglePlugin::dictDialog()
-{
+
+void GooglePlugin::setLangTo(QString langTo){
+ _settings->setValue("lang_to",langTo);
}
-CommonDictInterface* GooglePlugin::getNew(const Settings*) const
-{
+
+void GooglePlugin::setLangFrom(QString langFrom){
+ _settings->setValue("lang_from",langFrom);;
}
+
+DictDialog* GooglePlugin::dictDialog() {
+ return _dictDialog;
+}
+
+
bool GooglePlugin::isAvailable() const {
- return true;
+ return isConnectionAccept();
}
-QString GooglePlugin::search(QString key)
-{
+
+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(Settings*)
-{
+
+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;
}
-QList<Translation*> GooglePlugin::searchWordList(QString word, int limit)
-{
+
+CommonDictInterface* GooglePlugin::getNew(const Settings* settings) const {
+ GooglePlugin *plugin = new GooglePlugin();
+ plugin->setSettings(settings);
+ return plugin;
+}
+
+
+QString GooglePlugin::search(QString) {
+ qDebug() << "function is not used on this plagin";
+ return QString("");
+}
+
+
+Translation* GooglePlugin::getTranslationFor(QString key) {
+ return (new TranslationGoogle(key,"",_infoNote,this));
+}
+
+
+QList<Translation*> GooglePlugin::searchWordList(QString word, int ) {
+ QList<Translation*> translations;
+ 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::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)