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