File indexing completed on 2024-06-23 04:40:32
0001 /* 0002 SPDX-FileCopyrightText: 2022-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 0006 based on digikam onlinetranslator code 0007 0008 */ 0009 0010 #include "lingvaengineplugin.h" 0011 #include "lingvaengineutil.h" 0012 #include "lingvatranslator_debug.h" 0013 #include <TextTranslator/TranslatorEngineAccessManager> 0014 0015 #include <KConfigGroup> 0016 #include <KSharedConfig> 0017 0018 #include <QJsonDocument> 0019 #include <QJsonObject> 0020 0021 LingvaEnginePlugin::LingvaEnginePlugin(QObject *parent) 0022 : TextTranslator::TranslatorEnginePlugin(parent) 0023 { 0024 loadSettings(); 0025 } 0026 0027 LingvaEnginePlugin::~LingvaEnginePlugin() = default; 0028 0029 void LingvaEnginePlugin::translate() 0030 { 0031 if (verifyFromAndToLanguage()) { 0032 return; 0033 } 0034 translateText(); 0035 } 0036 0037 void LingvaEnginePlugin::translateText() 0038 { 0039 clear(); 0040 0041 const QUrl url(QStringLiteral("%1/api/v1/%2/%3/%4") 0042 .arg(mServerUrl, languageCode(from()), languageCode(to()), QString::fromUtf8(QUrl::toPercentEncoding(inputText())))); 0043 0044 qCDebug(TRANSLATOR_LINGVA_LOG) << " url " << url; 0045 const QNetworkRequest request(url); 0046 0047 QNetworkReply *reply = TextTranslator::TranslatorEngineAccessManager::self()->networkManager()->get(request); 0048 connect(reply, &QNetworkReply::errorOccurred, this, [this, reply](QNetworkReply::NetworkError error) { 0049 slotError(error); 0050 reply->deleteLater(); 0051 }); 0052 connect(reply, &QNetworkReply::finished, this, [this, reply]() { 0053 reply->deleteLater(); 0054 parseTranslation(reply); 0055 }); 0056 } 0057 0058 void LingvaEnginePlugin::parseTranslation(QNetworkReply *reply) 0059 { 0060 if (reply->error() != QNetworkReply::NoError) { 0061 Q_EMIT translateFailed(reply->errorString()); 0062 reply->deleteLater(); 0063 return; 0064 } 0065 0066 const QJsonDocument jsonResponse = QJsonDocument::fromJson(reply->readAll()); 0067 if (hasDebug()) { 0068 setJsonDebug(QString::fromUtf8(jsonResponse.toJson(QJsonDocument::Indented))); 0069 } 0070 0071 const QJsonObject responseObject = jsonResponse.object(); 0072 setResult(responseObject.value(QStringLiteral("translation")).toString()); 0073 reply->deleteLater(); 0074 qCDebug(TRANSLATOR_LINGVA_LOG) << " result " << result(); 0075 Q_EMIT translateDone(); 0076 } 0077 0078 void LingvaEnginePlugin::loadSettings() 0079 { 0080 KConfigGroup myGroup(KSharedConfig::openConfig(), LingvaEngineUtil::groupName()); 0081 mServerUrl = myGroup.readEntry(LingvaEngineUtil::serverUrlKey(), LingvaEngineUtil::defaultServerUrl()); 0082 } 0083 0084 void LingvaEnginePlugin::slotConfigureChanged() 0085 { 0086 loadSettings(); 0087 } 0088 0089 QString LingvaEnginePlugin::languageCode(const QString &langStr) 0090 { 0091 if (langStr == QLatin1String("zh")) { 0092 return QStringLiteral("zh"); 0093 } else if (langStr == QLatin1String("zt")) { 0094 return QStringLiteral("zh_HANT"); 0095 } 0096 return langStr; 0097 } 0098 0099 #include "moc_lingvaengineplugin.cpp"