// This is the source code of AyuGram for Desktop. // // We do not and cannot prevent the use of our code, // but be respectful and credit the original author. // // Copyright @Radolyn, 2026 #pragma once #include "apiwrap.h" #include #include #include #include #include #include namespace Main { class Session; } namespace Ayu::Translator { using CallbackSuccess = std::function &)>; using CallbackFail = std::function; using MultiThreadCallbackSuccess = std::function; QString randomDesktopUserAgent(); bool shouldWrapInHtml(); QString parseJsonPath(const QByteArray &body, const QString &jsonPath, bool *ok); struct PassedData { MTPflags flags; MTPInputPeer peer; MTPVector idList; MTPVector text; MTPstring toLang; }; struct ParsedData { std::vector texts; QString fromLang; QString toLang; }; struct StartTranslationArgs { Main::Session *session; PassedData requestData; ParsedData parsedData; CallbackSuccess onSuccess; CallbackFail onFail; }; struct ParsedDataSingle { TextWithEntities text; QString fromLang; QString toLang; }; struct MultiThreadArgs { ParsedDataSingle parsedData; MultiThreadCallbackSuccess onSuccess; CallbackFail onFail; }; class BaseTranslator : public QObject { Q_OBJECT public: explicit BaseTranslator(QObject *parent = nullptr) : QObject(parent) { } ~BaseTranslator() override = default; [[nodiscard]] virtual QSet supportedLanguages() const { return {}; } virtual void startTranslation( const StartTranslationArgs &args ) = 0; }; class MultiThreadTranslator : public BaseTranslator { Q_OBJECT public: explicit MultiThreadTranslator(QObject *parent = nullptr) : BaseTranslator(parent) { } ~MultiThreadTranslator() override = default; [[nodiscard]] virtual int getConcurrencyLimit() const { return 1; } [[nodiscard]] virtual int getMaxRetries() const { return 3; } [[nodiscard]] virtual int getBaseWaitTimeMs() const { return 1000; } void startTranslation( const StartTranslationArgs &args ) override; [[nodiscard]] virtual QPointer startSingleTranslation( const MultiThreadArgs &args ) = 0; }; }