ScreenTranslator/TranslatorHelper.cpp

89 lines
2.5 KiB
C++
Raw Normal View History

2015-10-10 03:18:22 +07:00
#include <QSettings>
#include <QDir>
#include <QFile>
#include <QApplication>
2015-10-10 03:18:22 +07:00
#include "TranslatorHelper.h"
#include "Settings.h"
TranslatorHelper::TranslatorHelper ()
2018-02-23 01:31:24 +07:00
: translatorsDir_ ("translators"), currentIndex_ (0), triesLeft_ (0) {
translatorsDir_ = QApplication::applicationDirPath () + QDir::separator () + translatorsDir_;
2015-10-10 03:18:22 +07:00
}
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 ();
}
2018-02-23 01:31:24 +07:00
void TranslatorHelper::newItem (bool forceRotate) {
triesLeft_ = scripts_.size ();
currentIndex_ = forceRotate ? currentIndex_ + 1 : 0;
2018-10-17 23:32:55 +07:00
if (currentIndex_ >= scripts_.size ()) {
currentIndex_ = 0;
}
2015-10-10 03:18:22 +07:00
}
QString TranslatorHelper::nextScript () {
2018-02-23 01:31:24 +07:00
--triesLeft_;
if (++currentIndex_ >= scripts_.size ()) {
currentIndex_ = 0;
}
2015-10-10 03:18:22 +07:00
return currentScript ();
}
2018-02-23 01:31:24 +07:00
QString TranslatorHelper::currentScript () const {
2018-10-17 23:32:55 +07:00
if (triesLeft_ > 0 && currentIndex_ < scripts_.size ()) {
return scripts_.at (currentIndex_);
}
return QString ();
2018-02-23 01:31:24 +07:00
}
2015-10-10 03:18:22 +07:00
bool TranslatorHelper::gotScripts () const {
return !scripts_.isEmpty ();
}