/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "lang/translate_provider.h" #include "base/options.h" #include "core/application.h" #include "core/core_settings.h" #include "data/data_msg_id.h" #include "data/data_peer.h" #include "data/data_session.h" #include "history/history_item.h" #include "lang/translate_mtproto_provider.h" #include "lang/translate_url_provider.h" #include "platform/platform_translate_provider.h" namespace { base::options::option OptionTranslateUrlTemplate({ .id = "translate-url-template", .name = "Translate URL template", .description = "Template URL for custom translation provider." " Supports %q text, %f source language and %t target language.", }); } // namespace namespace Ui { std::unique_ptr CreateTranslateProvider( not_null session) { const auto urlTemplate = OptionTranslateUrlTemplate.value(); if (!urlTemplate.isEmpty() && urlTemplate.contains(u"%q"_q)) { return CreateUrlTranslateProvider(urlTemplate); } if (Core::App().settings().usePlatformTranslation() && Platform::IsTranslateProviderAvailable()) { return Platform::CreateTranslateProvider(); } return CreateMTProtoTranslateProvider(session); } TranslateProviderRequest PrepareTranslateProviderRequest( not_null provider, not_null peer, MsgId msgId, TextWithEntities text) { auto result = TranslateProviderRequest{ .peerId = uint64(peer->id.value), .msgId = IsServerMsgId(msgId) ? msgId.bare : 0, .text = std::move(text), }; if (provider->supportsMessageId()) { return result; } if (result.msgId) { if (const auto i = peer->owner().message(peer, MsgId(result.msgId))) { result.text = i->originalText(); } result.msgId = 0; } return result; } } // namespace Ui