File indexing completed on 2024-05-12 16:16:03

0001 /*
0002    SPDX-FileCopyrightText: 2019-2023 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "languagetoolmanager.h"
0008 
0009 #include <KConfigGroup>
0010 #include <KSharedConfig>
0011 #include <QColor>
0012 #include <QNetworkAccessManager>
0013 #include <QRandomGenerator>
0014 namespace
0015 {
0016 static const char myLanguageToolManagerGroupName[] = "LanguageTool";
0017 }
0018 using namespace TextGrammarCheck;
0019 LanguageToolManager::LanguageToolManager(QObject *parent)
0020     : QObject(parent)
0021     , mNetworkAccessManager(new QNetworkAccessManager(this))
0022 {
0023     mNetworkAccessManager->setRedirectPolicy(QNetworkRequest::NoLessSafeRedirectPolicy);
0024     mNetworkAccessManager->setStrictTransportSecurityEnabled(true);
0025     mNetworkAccessManager->enableStrictTransportSecurityStore(true);
0026     loadSettings();
0027 }
0028 
0029 LanguageToolManager::~LanguageToolManager() = default;
0030 
0031 LanguageToolManager *LanguageToolManager::self()
0032 {
0033     static LanguageToolManager s_self;
0034     return &s_self;
0035 }
0036 
0037 QNetworkAccessManager *LanguageToolManager::networkAccessManager() const
0038 {
0039     return mNetworkAccessManager;
0040 }
0041 
0042 QString LanguageToolManager::languageToolCheckPath() const
0043 {
0044     if (mLanguageToolPath.isEmpty()) {
0045         return {};
0046     }
0047     return mLanguageToolPath + QStringLiteral("/check");
0048 }
0049 
0050 QString LanguageToolManager::languageToolLanguagesPath() const
0051 {
0052     if (mLanguageToolPath.isEmpty()) {
0053         return {};
0054     }
0055     return convertToLanguagePath(mLanguageToolPath);
0056 }
0057 
0058 QString LanguageToolManager::convertToLanguagePath(const QString &path)
0059 {
0060     return path + QStringLiteral("/languages");
0061 }
0062 
0063 QColor LanguageToolManager::grammarColorForError(const QString &error)
0064 {
0065     QColor col = mGrammarColor.value(error);
0066     if (col.isValid()) {
0067         return col;
0068     }
0069     col.setRgb(QRandomGenerator::global()->bounded(256), QRandomGenerator::global()->bounded(256), QRandomGenerator::global()->bounded(256));
0070     // Generate color.
0071     mGrammarColor.insert(error, col);
0072     return col;
0073 }
0074 
0075 QString LanguageToolManager::languageToolPath() const
0076 {
0077     return mLanguageToolPath;
0078 }
0079 
0080 void LanguageToolManager::setLanguageToolPath(const QString &path)
0081 {
0082     mLanguageToolPath = path;
0083 }
0084 
0085 void LanguageToolManager::loadSettings()
0086 {
0087     KConfigGroup grp(KSharedConfig::openConfig(), QLatin1String(myLanguageToolManagerGroupName));
0088     mLanguageToolPath = grp.readEntry(QStringLiteral("languagetoolpath"), QStringLiteral("https://api.languagetoolplus.com/v2"));
0089     if (mLanguageToolPath == QLatin1String("https://languagetool.org/api/v2")) {
0090         mLanguageToolPath = QStringLiteral("https://api.languagetoolplus.com/v2");
0091     }
0092     mLanguage = grp.readEntry(QStringLiteral("language"), QStringLiteral("en"));
0093     mUseLocalInstance = grp.readEntry(QStringLiteral("useLocalInstance"), false);
0094     // TODO add options ?
0095 }
0096 
0097 void LanguageToolManager::saveSettings()
0098 {
0099     KConfigGroup grp(KSharedConfig::openConfig(), QLatin1String(myLanguageToolManagerGroupName));
0100     grp.writeEntry(QStringLiteral("languagetoolpath"), mLanguageToolPath);
0101     grp.writeEntry(QStringLiteral("language"), mLanguage);
0102     grp.writeEntry(QStringLiteral("useLocalInstance"), mUseLocalInstance);
0103 }
0104 
0105 QString LanguageToolManager::language() const
0106 {
0107     return mLanguage;
0108 }
0109 
0110 void LanguageToolManager::setLanguage(const QString &language)
0111 {
0112     mLanguage = language;
0113 }
0114 
0115 bool LanguageToolManager::useLocalInstance() const
0116 {
0117     return mUseLocalInstance;
0118 }
0119 
0120 void LanguageToolManager::setUseLocalInstance(bool useLocalInstance)
0121 {
0122     mUseLocalInstance = useLocalInstance;
0123 }
0124 
0125 bool LanguageToolManager::allowToGetListOfLanguages() const
0126 {
0127     return mUseLocalInstance;
0128 }
0129 
0130 #include "moc_languagetoolmanager.cpp"