From d87e4eeb1f391b40476cd8789a1fb8bec1485745 Mon Sep 17 00:00:00 2001 From: Bartosz Szatkowski Date: Wed, 6 Oct 2010 11:56:52 +0200 Subject: [PATCH] Searching for translation kind of working (from searching file side) Still some compressed file reading dont really working --- src/plugins/stardict/StarDialog.cpp | 5 ++++- src/plugins/stardict/StarDictPlugin.cpp | 11 +++++++++-- src/plugins/stardict/StarDictPlugin.h | 11 ++++++++++- src/plugins/stardict/StarDictReaderFactory.cpp | 5 ++++- src/plugins/stardict/TranslationStarDict.cpp | 24 ++++++++++++++++-------- 5 files changed, 43 insertions(+), 13 deletions(-) diff --git a/src/plugins/stardict/StarDialog.cpp b/src/plugins/stardict/StarDialog.cpp index e628b65..46a349f 100644 --- a/src/plugins/stardict/StarDialog.cpp +++ b/src/plugins/stardict/StarDialog.cpp @@ -205,7 +205,10 @@ void StarDialog::saveSettings() { _settings->setValue("path", _dictionaryFilePath); _settings->setValue("ifoFileName", _dictName + ".ifo"); _settings->setValue("idxFileName", _dictName + ".idx"); - _settings->setValue("dictFileName", _dictName + ".dict"); + if(QFile(_dictName + ".dict").exists()) + _settings->setValue("dictFileName", _dictName + ".dict"); + else + _settings->setValue("dictFileName", _dictName + ".dict.dz"); if (QFile::exists(_dictName + ".syn") == true) { _settings->setValue("synFileName", _dictName + ".syn"); } diff --git a/src/plugins/stardict/StarDictPlugin.cpp b/src/plugins/stardict/StarDictPlugin.cpp index 50a7dd8..8e27f51 100644 --- a/src/plugins/stardict/StarDictPlugin.cpp +++ b/src/plugins/stardict/StarDictPlugin.cpp @@ -119,6 +119,7 @@ QList StarDictPlugin::searchWordList(QString word, int limit) { if(keyword.exactMatch(fkey)) { TranslationStarDict tran(fkey, infoNote(), this); + qDebug() << "off/len" << offset << len; int id = translations.indexOf(tran); if(id == -1) { tran.add(offset, len); @@ -140,8 +141,12 @@ QList StarDictPlugin::searchWordList(QString word, int limit) { -QString StarDictPlugin::search(QString key) { - return ""; +QString StarDictPlugin::search(QString key, qint64 offset, qint32 len) { + if(!dictReader) + return ""; + + qDebug() << dictReader->readString(offset, len); + return dictReader->readString(offset, len); } @@ -172,6 +177,8 @@ CommonDictInterface* StarDictPlugin::getNew(const Settings *settings) const { disconnect(plugin, SIGNAL(notify(Notify::NotifyType,QString)), this, SIGNAL(notify(Notify::NotifyType,QString))); plugin->getDictionaryInfo(); + plugin->dictReader = StarDictReaderFactory:: + createReader(settings->value("dictFileName")); return plugin; } else { diff --git a/src/plugins/stardict/StarDictPlugin.h b/src/plugins/stardict/StarDictPlugin.h index 65c4e02..89e38eb 100644 --- a/src/plugins/stardict/StarDictPlugin.h +++ b/src/plugins/stardict/StarDictPlugin.h @@ -82,7 +82,15 @@ public: bool isAvailable() const; //! \returns a description of a word given by a QString - QString search(QString key); + QString search(QString key) { + return search(key, 0, 0); + } + + /*! \return a description of a word given by a QString + \param offset offset of translation to be cut out + \param len lenght of translation to be cut out + */ + QString search(QString key, qint64 offset, qint32 len); //! \returns current plugin settings Settings* settings(); @@ -174,6 +182,7 @@ private: Settings *_settings; StarDictDialog* _dictDialog; Settings* _ifoFileSettings; + StarDictReader * dictReader; }; #endif // XDXFPLUGIN_H diff --git a/src/plugins/stardict/StarDictReaderFactory.cpp b/src/plugins/stardict/StarDictReaderFactory.cpp index 498bdfc..3ae2242 100644 --- a/src/plugins/stardict/StarDictReaderFactory.cpp +++ b/src/plugins/stardict/StarDictReaderFactory.cpp @@ -24,14 +24,17 @@ #include "StarDictReaderFactory.h" #include "CompressedReader.h" #include "UncompressedReader.h" +#include StarDictReader* StarDictReaderFactory::createReader(QString filename) { if(filename.endsWith(".gz", Qt::CaseInsensitive) || - filename.endsWith(".dz", Qt::CaseInsensitive)) { + filename.endsWith(".dz", Qt::CaseInsensitive)) { + qDebug() << "compressed"; return new CompressedReader(filename); } else { + qDebug() << "uncompressed"; return new UncompressedReader(filename); } } diff --git a/src/plugins/stardict/TranslationStarDict.cpp b/src/plugins/stardict/TranslationStarDict.cpp index 74cc0cb..f6720d3 100644 --- a/src/plugins/stardict/TranslationStarDict.cpp +++ b/src/plugins/stardict/TranslationStarDict.cpp @@ -45,6 +45,7 @@ TranslationStarDict::TranslationStarDict(const TranslationStarDict &base) { _dictionaryInfo = base._dictionaryInfo; lengths = base.lengths; offsets = base.offsets; + starDictPlugin = base.starDictPlugin; } @@ -59,17 +60,24 @@ QString TranslationStarDict::key() const { } QString TranslationStarDict::toXml() const { + qDebug() << "asdf" << _dictionaryInfo; QString result(""); if(!starDictPlugin) return result; - - result=result + " \n"; - else - result+= " bookmark=\"false\" > \n"; - result+= _dictionaryInfo + "" + starDictPlugin->search(_key) + ""; - return result.replace("&","&"); + qDebug() << "asdf"; + for(int i = 0; i < offsets.size(); i++) { + result=result + " \n"; + else + result+= " bookmark=\"false\" > \n"; + qDebug() << "!!asdf"; + result+= _dictionaryInfo + "" + + starDictPlugin->search(_key, offsets.at(i), lengths.at(i)) + + ""; + qDebug() << "!!!!asdf"; + } + return result.replace("&","&"); } void TranslationStarDict::setKey(QString _key) { -- 1.7.9.5