File indexing completed on 2025-04-27 03:58:38
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2018-02-22 0007 * Description : A text translator using web-services - Private members. 0008 * 0009 * SPDX-FileCopyrightText: 2018-2022 by Hennadii Chernyshchyk <genaloner at gmail dot com> 0010 * SPDX-FileCopyrightText: 2021-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0011 * 0012 * SPDX-License-Identifier: GPL-2.0-or-later 0013 * 0014 * ============================================================ */ 0015 0016 #ifndef DIGIKAM_DONLINE_TRANSLATOR_P_H 0017 #define DIGIKAM_DONLINE_TRANSLATOR_P_H 0018 0019 #include "donlinetranslator.h" 0020 0021 // Qt includes 0022 0023 #include <QCoreApplication> 0024 #include <QFinalState> 0025 #include <QJsonDocument> 0026 #include <QNetworkReply> 0027 #include <QStateMachine> 0028 0029 // KDE includes 0030 0031 #include <klocalizedstring.h> 0032 0033 // Local includes 0034 0035 #include "digikam_debug.h" 0036 #include "networkmanager.h" 0037 0038 namespace Digikam 0039 { 0040 0041 class Q_DECL_HIDDEN DOnlineTranslator::Private 0042 { 0043 public: 0044 0045 explicit Private(DOnlineTranslator* const parent); 0046 0047 QStateMachine* stateMachine = nullptr; 0048 QNetworkAccessManager* networkManager = nullptr; 0049 QPointer<QNetworkReply> currentReply; 0050 0051 Language sourceLang = NoLanguage; 0052 Language translationLang = NoLanguage; 0053 Language uiLang = NoLanguage; 0054 TranslationError error = NoError; 0055 0056 QString source; 0057 QString sourceTranslit; 0058 QString sourceTranscription; 0059 QString translation; 0060 QString translationTranslit; 0061 QString errorString; 0062 0063 // Self-hosted engines settings 0064 // Can be empty, since free instances ignores api key parameter 0065 0066 QByteArray libreApiKey; 0067 QString libreUrl; 0068 QString lingvaUrl; 0069 0070 QMap<QString, QVector<DOnlineTranslatorOption> > translationOptions; 0071 0072 bool sourceTranslitEnabled = true; 0073 bool translationTranslitEnabled = true; 0074 bool sourceTranscriptionEnabled = true; 0075 bool translationOptionsEnabled = true; 0076 0077 bool onlyDetectLanguage = false; 0078 0079 // Credentials that is parsed from the web version to receive the translation using the API 0080 0081 static inline QString s_yandexKey; 0082 static inline QByteArray s_bingKey; 0083 static inline QByteArray s_bingToken; 0084 static inline QString s_bingIg; 0085 static inline QString s_bingIid; 0086 0087 // This properties used to store unseful information in states 0088 0089 static constexpr char s_textProperty[] = "Text"; 0090 0091 // Engines have a limit of characters per translation request. 0092 // If the query is larger, then it should be splited into several with getSplitIndex() helper function 0093 0094 static constexpr int s_googleTranslateLimit = 5000; 0095 static constexpr int s_yandexTranslateLimit = 150; 0096 static constexpr int s_yandexTranslitLimit = 180; 0097 static constexpr int s_bingTranslateLimit = 5001; 0098 static constexpr int s_libreTranslateLimit = 120; 0099 0100 static const QMap<DOnlineTranslator::Language, QString> s_genericLanguageCodes; 0101 static const QMap<DOnlineTranslator::Language, QString> s_googleLanguageCodes; 0102 static const QMap<DOnlineTranslator::Language, QString> s_yandexLanguageCodes; 0103 static const QMap<DOnlineTranslator::Language, QString> s_bingLanguageCodes; 0104 static const QMap<DOnlineTranslator::Language, QString> s_lingvaLanguageCodes; 0105 0106 static const QMap<QString, QString> s_rfc3066LanguageCodesGeneric; 0107 static const QMap<QString, QString> s_rfc3066LanguageCodesGoogle; 0108 static const QMap<QString, QString> s_rfc3066LanguageCodesYandex; 0109 static const QMap<QString, QString> s_rfc3066LanguageCodesBing; 0110 static const QMap<QString, QString> s_rfc3066LanguageCodesLingva; 0111 }; 0112 0113 // --------------------------------------------------------------------------------------------- 0114 0115 class Q_DECL_HIDDEN DOnlineTts::Private 0116 { 0117 public: 0118 0119 explicit Private() 0120 { 0121 } 0122 0123 QList<QUrl> media; 0124 QString errorString; 0125 TtsError error = NoError; 0126 0127 static const QMap<Emotion, QString> s_emotionCodes; 0128 static const QMap<Voice, QString> s_voiceCodes; 0129 0130 static constexpr int s_googleTtsLimit = 200; 0131 static constexpr int s_yandexTtsLimit = 1400; 0132 }; 0133 0134 } // namespace Digikam 0135 0136 #endif // DIGIKAM_DONLINE_TRANSLATOR_P_H