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"