Files
AyuGramDesktop/Telegram/SourceFiles/lang/translate_provider.cpp
T
2026-03-04 08:32:04 +03:00

71 lines
1.9 KiB
C++

/*
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<QString> 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<TranslateProvider> CreateTranslateProvider(
not_null<Main::Session*> 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<TranslateProvider*> provider,
not_null<PeerData*> peer,
MsgId msgId,
TextWithEntities text) {
auto result = TranslateProviderRequest{
.peerId = int64(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