Copyright 2010 Comarch S.A.
*******************************************************************************/
-
-/*! \file xdxfplugin.cpp
-\author Jakub Jaszczynski <j.j.jaszczynski@gmail.com>
+/*!
+ \file xdxfplugin.cpp
+ \author Jakub Jaszczynski <j.j.jaszczynski@gmail.com>
*/
#include "xdxfplugin.h"
#include <QDebug>
#include "../../include/Notify.h"
+#include "DownloadDict.h"
+#include "XdxfDictDownloader.h"
+
+XdxfDictDownloader XdxfPlugin::dictDownloader;
+
+
+bool XdxfPlugin::dictDownloaderInitialized = false;
+
XdxfPlugin::XdxfPlugin(QObject *parent) : CommonDictInterface(parent),
_langFrom(""), _langTo(""),_name(""), _infoNote("") {
_settings = new Settings();
- _dictDialog = new XdxfDictDialog(this);
- cachingDialog = new XdxfCachingDialog(this);
+ _dictDialog = new XdxfDictDialog(this, this);
+
+ connect(_dictDialog, SIGNAL(notify(Notify::NotifyType,QString)),
+ this, SIGNAL(notify(Notify::NotifyType,QString)));
+
+ if(!dictDownloaderInitialized) {
+ connect(&dictDownloader, SIGNAL(notify(Notify::NotifyType,QString)),
+ this, SIGNAL(notify(Notify::NotifyType,QString)));
+ dictDownloaderInitialized = true;
+ }
_settings->setValue("type","xdxf");
_icon = QIcon("/usr/share/mdictionary/xdxf.png");
_wordsCount = -1;
stopped = false;
- connect(cachingDialog, SIGNAL(cancelCaching()),
- this, SLOT(stop()));
- connect(this, SIGNAL(updateCachingProgress(int,int)),
- cachingDialog, SLOT(updateCachingProgress(int,int)));
initAccents();
}
+
void XdxfPlugin::retranslate() {
QString locale = QLocale::system().name();
-
QTranslator *translator = new QTranslator(this);
- if(locale == "pl_PL")
- translator->load(":/translations/dict_xdxf_pl");
- else
- translator->load(":/translations/dict_xdxf_en");
-
+ if(!translator->load(":/xdxf/translations/" + locale)) {
+ translator->load(":/xdxf/translations/en_US");
+ }
QCoreApplication::installTranslator(translator);
}
XdxfPlugin::~XdxfPlugin() {
delete _settings;
- delete cachingDialog;
delete _dictDialog;
}
QString XdxfPlugin::infoNote() const {
- return _infoNote;
+ return _infoNote;
}
QList<Translation*> XdxfPlugin::searchWordListCache(QString word, int limit) {
- int i=0;
QSet<Translation*> translations;
QString cacheFilePath = _settings->value("cache_path");
_settings->setValue("cached","false");
return searchWordListFile(word, limit);
}
+
stopped = false;
word = word.toLower();
word = word.replace("*", "%");
cur.addBindValue(limit);
cur.exec();
- bool in = false;
- while(cur.next() && (i<limit || limit==0 ) ) {
- in = true;
- bool ok=true;
- Translation *tran;
- foreach(tran,translations) {
- if(tran->key().toLower()==cur.value(0).toString().toLower())
- ok=false;
- }
- if(ok) { /*add key word to list*/
- translations.insert(new TranslationXdxf(
- cur.value(0).toString().toLower(),
- _infoNote, this));
- i++;
- }
+ while(cur.next() && (translations.size()<limit || limit==0)) {
+ translations.insert(new TranslationXdxf(
+ cur.value(0).toString(),
+ _dictionaryInfo, this));
}
db.close();
return translations.toList();
readKey = reader.readElementText();
if((regWord.exactMatch(readKey)
|| regWord.exactMatch(removeAccents(readKey)))
- && (i<limit || limit==0)) {
- bool ok=true;
- Translation *tran;
- foreach(tran,translations) {
- if(tran->key().toLower()==readKey.toLower())
- ok=false; /*if key is in the dictionary more that one */
- }
- if(ok) { /*add key word to list*/
- translations<<(new TranslationXdxf(readKey.toLower(),
- _infoNote,this));
- i++;
- }
- if(i>=limit && limit!=0)
+ && (i<limit || limit==0) && !reader.atEnd()) {
+ translations<<(new TranslationXdxf(readKey.toLower(),
+ _dictionaryInfo,this));
+ if(translations.size()==limit && limit!=0)
break;
}
}
cur.exec();
while(cur.next())
result += cur.value(0).toString();
-
db.close();
return result;
-
}
CommonDictInterface* XdxfPlugin::getNew(const Settings *settings) const {
XdxfPlugin *plugin = new XdxfPlugin();
+
+ connect(plugin, SIGNAL(notify(Notify::NotifyType,QString)),
+ this, SIGNAL(notify(Notify::NotifyType,QString)));
+
+ ((XdxfDictDialog*)plugin->dictDialog())->setLastDialogParent(_dictDialog->lastDialogParent());
+
if(settings && plugin->setSettings(settings)) {
+ disconnect(plugin, SIGNAL(notify(Notify::NotifyType,QString)),
+ this, SIGNAL(notify(Notify::NotifyType,QString)));
return plugin;
}
else {
+ disconnect(plugin, SIGNAL(notify(Notify::NotifyType,QString)),
+ this, SIGNAL(notify(Notify::NotifyType,QString)));
delete plugin;
return 0;
}
}
-void XdxfPlugin::setHash(uint _hash) {
- this->_hash=_hash;
-}
-
-
-uint XdxfPlugin::hash() const {
- return _hash;
-}
-
-
Settings* XdxfPlugin::settings() {
-/*
- Settings *returnSettings=new Settings;
- QStringList list = _settings->keys();
- foreach(QString key, list)
- returnSettings->setValue(key,_settings->value(key));
- return returnSettings;
-*/
return _settings;
}
foreach(QString key, _settings->keys())
oldSettings->setValue(key, _settings->value(key));
- foreach(QString key, settings->keys()) {
+ foreach(QString key, settings->keys())
if(key != "generateCache")
_settings->setValue(key, settings->value(key));
- }
if(!getDictionaryInfo()) {
Q_EMIT notify(Notify::Warning,
reader.readNextStartElement();
if(reader.name()=="full_name")
_name=reader.readElementText();
+ else
+ qDebug()<<"no full_name";
reader.readNextStartElement();
if(reader.name()=="description")
_infoNote=reader.readElementText();
+ else
+ qDebug()<<"no description";
- QString initialPath = "/usr/share/mdictionary/xdxf.png";
-
- _infoNote=" path=\""+initialPath+"\"> \n" + _name + " [" + _langFrom + "-"
+ _dictionaryInfo= _name + " [" + _langFrom + "-"
+ _langTo + "]";
+
dictionaryFile.close();
if(okFormat)
return true;
}
dictionaryFile.seek(0);
-
long wordsCount = 0;
QString line;
bool XdxfPlugin::makeCache(QString) {
- cachingDialog->setVisible(true);
+ XdxfCachingDialog d(_dictDialog->lastDialogParent());
+
+ connect(&d, SIGNAL(cancelCaching()),
+ this, SLOT(stop()));
+ connect(this, SIGNAL(updateCachingProgress(int,int)),
+ &d, SLOT(updateCachingProgress(int,int)));
+
+ d.show();
QCoreApplication::processEvents();
QFileInfo dictFileN(_settings->value("path"));
QString cachePathN;
temp="<key>" + readKey + "</key>" + "<t>" + temp+ "</t>";
match=false;
cur.prepare("insert into dict values(?,?,?)");
- cur.addBindValue(readKey);
- cur.addBindValue(removeAccents(readKey));
+ cur.addBindValue(readKey.toLower());
+ cur.addBindValue(removeAccents(readKey).toLower());
cur.addBindValue(temp);
cur.exec();
counter++;
int prog = counter*100/_wordsCount;
- if(prog % 5 == 0 && lastProg != prog) {
+ if(prog % 2 == 0 && lastProg != prog) {
Q_EMIT updateCachingProgress(prog,timer.restart());
lastProg = prog;
}
}
cur.exec("END;");
cur.exec("select count(*) from dict");
- cachingDialog->setVisible(false);
/*checke errors (wrong number of added words)*/
countWords();
Q_EMIT notify(Notify::Warning,
QString(tr("Database caching error, please try again.")));
db.close();
+ _settings->setValue("cache_path", cachePathN);
+ if(stopped)
+ clean();
+ _settings->setValue("cache_path","");
return false;
}
_settings->setValue("cache_path", cachePathN);
_settings->setValue("cached", "true");
+ disconnect(&d, SIGNAL(cancelCaching()),
+ this, SLOT(stop()));
+ disconnect(this, SIGNAL(updateCachingProgress(int,int)),
+ &d, SLOT(updateCachingProgress(int,int)));
db.close();
return true;
}