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("") {
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");
initAccents();
}
+
void XdxfPlugin::retranslate() {
QString locale = QLocale::system().name();
-
QTranslator *translator = new QTranslator(this);
if(!translator->load(":/xdxf/translations/" + locale)) {
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(),
- _dictionaryInfo, 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(),
- _dictionaryInfo,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;
}
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,
}
dictionaryFile.seek(0);
-
long wordsCount = 0;
QString line;
bool XdxfPlugin::makeCache(QString) {
-
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;
/*add all words to db*/
while (!reader.atEnd() && !stopped) {
-
QCoreApplication::processEvents();
reader.readNext();
if(reader.tokenType() == QXmlStreamReader::StartElement) {
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++;
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;
}