Added TranslatorHelper class.

This commit is contained in:
Gres 2015-10-09 23:18:22 +03:00
parent 186395f692
commit 67a4c8e0ea
4 changed files with 111 additions and 2 deletions

View File

@ -10,6 +10,7 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = ScreenTranslator
TEMPLATE = app
CONFIG += c++11
win32{
RC_FILE = app.rc
@ -37,7 +38,8 @@ SOURCES += main.cpp\
ImageProcessing.cpp \
LanguageHelper.cpp \
WebTranslator.cpp \
WebTranslatorProxy.cpp
WebTranslatorProxy.cpp \
TranslatorHelper.cpp
HEADERS += \
Manager.h \
@ -52,7 +54,8 @@ HEADERS += \
LanguageHelper.h \
WebTranslator.h \
WebTranslatorProxy.h \
StAssert.h
StAssert.h \
TranslatorHelper.h
FORMS += \
SettingsEditor.ui \
@ -71,5 +74,8 @@ OTHER_FILES += \
images/icon.ico \
README.md \
uncrustify.cfg\
images/README.md \
translators/google.js \
translators/yandex.js \
translators/bing.js \
TODO.md

View File

@ -25,6 +25,7 @@ namespace settings_names {
const QString sourceLanguage = "source_language";
const QString translationLanguage = "translation_language";
const QString translationTimeout = "translation_timeout";
const QString translators = "translators";
}
@ -49,6 +50,7 @@ namespace settings_values {
const QString sourceLanguage = "auto";
const QString translationLanguage = "ru";
const int translationTimeout = 15; // secs
const QString translators = "";
}
#endif // SETTINGS_H

74
TranslatorHelper.cpp Normal file
View File

@ -0,0 +1,74 @@
#include <QSettings>
#include <QDir>
#include <QFile>
#include "TranslatorHelper.h"
#include "Settings.h"
TranslatorHelper::TranslatorHelper ()
: translatorsDir_ ("translators"), currentIndex_ (0) {
}
void TranslatorHelper::setEnabledTranslators (const QStringList &enabled) const {
QSettings settings;
settings.beginGroup (settings_names::translationGroup);
settings.setValue (settings_names::translators, enabled.join ("|"));
}
QStringList TranslatorHelper::possibleTranslators (QStringList &enabled) const {
#define GET(FIELD) settings.value (settings_names::FIELD, settings_values::FIELD)
QSettings settings;
settings.beginGroup (settings_names::translationGroup);
QStringList exist = QDir (translatorsDir_).entryList (QStringList () << "*.js", QDir::Files);
QStringList saved = GET (translators).toString ().split ("|", QString::SkipEmptyParts);
QStringList on, off;
std::copy_if (saved.begin (), saved.end (), std::back_inserter (on), [&](const QString &i) {
return exist.contains (i);
});
on = on.isEmpty () ? exist : on;
std::copy_if (exist.begin (), exist.end (), std::back_inserter (off), [&](const QString &i) {
return !on.contains (i);
});
enabled = on;
return (on + off);
#undef GET
}
QStringList TranslatorHelper::enabledTranslatorScripts () const {
QStringList enabled;
possibleTranslators (enabled);
QStringList scripts;
foreach (const QString &name, enabled) {
QFile f (translatorsDir_ + QDir::separator () + name);
if (f.open (QFile::ReadOnly)) {
QString script = QString::fromUtf8 (f.readAll ());
if (!script.isEmpty ()) {
scripts << script;
}
}
}
return scripts;
}
void TranslatorHelper::loadScripts () {
scripts_ = enabledTranslatorScripts ();
}
void TranslatorHelper::newItem () {
currentIndex_ = 0;
}
QString TranslatorHelper::currentScript () const {
return (currentIndex_ < scripts_.size () ? scripts_.at (currentIndex_) : QString ());
}
QString TranslatorHelper::nextScript () {
++currentIndex_;
return currentScript ();
}
bool TranslatorHelper::gotScripts () const {
return !scripts_.isEmpty ();
}

27
TranslatorHelper.h Normal file
View File

@ -0,0 +1,27 @@
#ifndef TRANSLATORHELPER_H
#define TRANSLATORHELPER_H
#include <QStringList>
class TranslatorHelper {
public:
TranslatorHelper ();
QStringList possibleTranslators (QStringList &enabled) const;
QStringList enabledTranslatorScripts () const;
void setEnabledTranslators (const QStringList &enabled) const;
void loadScripts ();
void newItem ();
QString currentScript () const;
QString nextScript ();
bool gotScripts () const;
private:
QString translatorsDir_;
QStringList scripts_;
int currentIndex_;
};
#endif // TRANSLATORHELPER_H