Add TranslationManager.
This commit is contained in:
parent
7288e90211
commit
8c43a7c0bb
@ -462,6 +462,7 @@ set(TDLIB_SOURCE
|
|||||||
td/telegram/TopDialogCategory.cpp
|
td/telegram/TopDialogCategory.cpp
|
||||||
td/telegram/TopDialogManager.cpp
|
td/telegram/TopDialogManager.cpp
|
||||||
td/telegram/TranscriptionInfo.cpp
|
td/telegram/TranscriptionInfo.cpp
|
||||||
|
td/telegram/TranslationManager.cpp
|
||||||
td/telegram/UpdatesManager.cpp
|
td/telegram/UpdatesManager.cpp
|
||||||
td/telegram/Usernames.cpp
|
td/telegram/Usernames.cpp
|
||||||
td/telegram/Venue.cpp
|
td/telegram/Venue.cpp
|
||||||
@ -734,6 +735,7 @@ set(TDLIB_SOURCE
|
|||||||
td/telegram/TopDialogCategory.h
|
td/telegram/TopDialogCategory.h
|
||||||
td/telegram/TopDialogManager.h
|
td/telegram/TopDialogManager.h
|
||||||
td/telegram/TranscriptionInfo.h
|
td/telegram/TranscriptionInfo.h
|
||||||
|
td/telegram/TranslationManager.h
|
||||||
td/telegram/UniqueId.h
|
td/telegram/UniqueId.h
|
||||||
td/telegram/UpdatesManager.h
|
td/telegram/UpdatesManager.h
|
||||||
td/telegram/UserId.h
|
td/telegram/UserId.h
|
||||||
|
@ -311,6 +311,7 @@ function split_file($file, $chunks, $undo) {
|
|||||||
'theme_manager[_(-][^.]|ThemeManager' => "ThemeManager",
|
'theme_manager[_(-][^.]|ThemeManager' => "ThemeManager",
|
||||||
'TopDialogCategory|get_top_dialog_category' => 'TopDialogCategory',
|
'TopDialogCategory|get_top_dialog_category' => 'TopDialogCategory',
|
||||||
'top_dialog_manager[_(-][^.]|TopDialogManager' => 'TopDialogManager',
|
'top_dialog_manager[_(-][^.]|TopDialogManager' => 'TopDialogManager',
|
||||||
|
'translation_manager[_(-][^.]|TranslationManager' => "TranslationManager",
|
||||||
'updates_manager[_(-][^.]|UpdatesManager|get_difference[)]|updateSentMessage|dummyUpdate' => 'UpdatesManager',
|
'updates_manager[_(-][^.]|UpdatesManager|get_difference[)]|updateSentMessage|dummyUpdate' => 'UpdatesManager',
|
||||||
'WebPageId(Hash)?' => 'WebPageId',
|
'WebPageId(Hash)?' => 'WebPageId',
|
||||||
'web_pages_manager[_(-][^.]|WebPagesManager' => 'WebPagesManager');
|
'web_pages_manager[_(-][^.]|WebPagesManager' => 'WebPagesManager');
|
||||||
|
@ -708,40 +708,6 @@ class GetMessageReadParticipantsQuery final : public Td::ResultHandler {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class TranslateTextQuery final : public Td::ResultHandler {
|
|
||||||
Promise<td_api::object_ptr<td_api::text>> promise_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit TranslateTextQuery(Promise<td_api::object_ptr<td_api::text>> &&promise) : promise_(std::move(promise)) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void send(const string &text, const string &from_language_code, const string &to_language_code) {
|
|
||||||
int flags = telegram_api::messages_translateText::TEXT_MASK;
|
|
||||||
vector<telegram_api::object_ptr<telegram_api::textWithEntities>> texts;
|
|
||||||
texts.push_back(telegram_api::make_object<telegram_api::textWithEntities>(text, Auto()));
|
|
||||||
send_query(G()->net_query_creator().create(
|
|
||||||
telegram_api::messages_translateText(flags, nullptr, vector<int32>{0}, std::move(texts), to_language_code)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_result(BufferSlice packet) final {
|
|
||||||
auto result_ptr = fetch_result<telegram_api::messages_translateText>(packet);
|
|
||||||
if (result_ptr.is_error()) {
|
|
||||||
return on_error(result_ptr.move_as_error());
|
|
||||||
}
|
|
||||||
|
|
||||||
auto ptr = result_ptr.move_as_ok();
|
|
||||||
LOG(INFO) << "Receive result for TranslateTextQuery: " << to_string(ptr);
|
|
||||||
if (ptr->result_.empty()) {
|
|
||||||
return promise_.set_value(nullptr);
|
|
||||||
}
|
|
||||||
promise_.set_value(td_api::make_object<td_api::text>(ptr->result_[0]->text_));
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_error(Status status) final {
|
|
||||||
promise_.set_error(std::move(status));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class ExportChannelMessageLinkQuery final : public Td::ResultHandler {
|
class ExportChannelMessageLinkQuery final : public Td::ResultHandler {
|
||||||
Promise<Unit> promise_;
|
Promise<Unit> promise_;
|
||||||
ChannelId channel_id_;
|
ChannelId channel_id_;
|
||||||
@ -18993,12 +18959,6 @@ void MessagesManager::on_get_message_viewers(DialogId dialog_id, vector<UserId>
|
|||||||
promise.set_value(td_->contacts_manager_->get_users_object(-1, user_ids));
|
promise.set_value(td_->contacts_manager_->get_users_object(-1, user_ids));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesManager::translate_text(const string &text, const string &from_language_code,
|
|
||||||
const string &to_language_code,
|
|
||||||
Promise<td_api::object_ptr<td_api::text>> &&promise) {
|
|
||||||
td_->create_handler<TranslateTextQuery>(std::move(promise))->send(text, from_language_code, to_language_code);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MessagesManager::recognize_speech(FullMessageId full_message_id, Promise<Unit> &&promise) {
|
void MessagesManager::recognize_speech(FullMessageId full_message_id, Promise<Unit> &&promise) {
|
||||||
auto m = get_message_force(full_message_id, "recognize_speech");
|
auto m = get_message_force(full_message_id, "recognize_speech");
|
||||||
if (m == nullptr) {
|
if (m == nullptr) {
|
||||||
|
@ -637,9 +637,6 @@ class MessagesManager final : public Actor {
|
|||||||
|
|
||||||
void get_message_viewers(FullMessageId full_message_id, Promise<td_api::object_ptr<td_api::users>> &&promise);
|
void get_message_viewers(FullMessageId full_message_id, Promise<td_api::object_ptr<td_api::users>> &&promise);
|
||||||
|
|
||||||
void translate_text(const string &text, const string &from_language_code, const string &to_language_code,
|
|
||||||
Promise<td_api::object_ptr<td_api::text>> &&promise);
|
|
||||||
|
|
||||||
void recognize_speech(FullMessageId full_message_id, Promise<Unit> &&promise);
|
void recognize_speech(FullMessageId full_message_id, Promise<Unit> &&promise);
|
||||||
|
|
||||||
void rate_speech_recognition(FullMessageId full_message_id, bool is_good, Promise<Unit> &&promise);
|
void rate_speech_recognition(FullMessageId full_message_id, bool is_good, Promise<Unit> &&promise);
|
||||||
|
@ -124,6 +124,7 @@
|
|||||||
#include "td/telegram/ThemeManager.h"
|
#include "td/telegram/ThemeManager.h"
|
||||||
#include "td/telegram/TopDialogCategory.h"
|
#include "td/telegram/TopDialogCategory.h"
|
||||||
#include "td/telegram/TopDialogManager.h"
|
#include "td/telegram/TopDialogManager.h"
|
||||||
|
#include "td/telegram/TranslationManager.h"
|
||||||
#include "td/telegram/UpdatesManager.h"
|
#include "td/telegram/UpdatesManager.h"
|
||||||
#include "td/telegram/UserId.h"
|
#include "td/telegram/UserId.h"
|
||||||
#include "td/telegram/Version.h"
|
#include "td/telegram/Version.h"
|
||||||
@ -3234,6 +3235,8 @@ void Td::dec_actor_refcnt() {
|
|||||||
LOG(DEBUG) << "ThemeManager was cleared" << timer;
|
LOG(DEBUG) << "ThemeManager was cleared" << timer;
|
||||||
top_dialog_manager_.reset();
|
top_dialog_manager_.reset();
|
||||||
LOG(DEBUG) << "TopDialogManager was cleared" << timer;
|
LOG(DEBUG) << "TopDialogManager was cleared" << timer;
|
||||||
|
translation_manager_.reset();
|
||||||
|
LOG(DEBUG) << "TranslationManager was cleared" << timer;
|
||||||
updates_manager_.reset();
|
updates_manager_.reset();
|
||||||
LOG(DEBUG) << "UpdatesManager was cleared" << timer;
|
LOG(DEBUG) << "UpdatesManager was cleared" << timer;
|
||||||
video_notes_manager_.reset();
|
video_notes_manager_.reset();
|
||||||
@ -3426,6 +3429,8 @@ void Td::clear() {
|
|||||||
LOG(DEBUG) << "ThemeManager actor was cleared" << timer;
|
LOG(DEBUG) << "ThemeManager actor was cleared" << timer;
|
||||||
top_dialog_manager_actor_.reset();
|
top_dialog_manager_actor_.reset();
|
||||||
LOG(DEBUG) << "TopDialogManager actor was cleared" << timer;
|
LOG(DEBUG) << "TopDialogManager actor was cleared" << timer;
|
||||||
|
translation_manager_actor_.reset();
|
||||||
|
LOG(DEBUG) << "TranslationManager actor was cleared" << timer;
|
||||||
updates_manager_actor_.reset();
|
updates_manager_actor_.reset();
|
||||||
LOG(DEBUG) << "UpdatesManager actor was cleared" << timer;
|
LOG(DEBUG) << "UpdatesManager actor was cleared" << timer;
|
||||||
video_notes_manager_actor_.reset();
|
video_notes_manager_actor_.reset();
|
||||||
@ -3890,6 +3895,8 @@ void Td::init_managers() {
|
|||||||
top_dialog_manager_ = make_unique<TopDialogManager>(this, create_reference());
|
top_dialog_manager_ = make_unique<TopDialogManager>(this, create_reference());
|
||||||
top_dialog_manager_actor_ = register_actor("TopDialogManager", top_dialog_manager_.get());
|
top_dialog_manager_actor_ = register_actor("TopDialogManager", top_dialog_manager_.get());
|
||||||
G()->set_top_dialog_manager(top_dialog_manager_actor_.get());
|
G()->set_top_dialog_manager(top_dialog_manager_actor_.get());
|
||||||
|
translation_manager_ = make_unique<TranslationManager>(this, create_reference());
|
||||||
|
translation_manager_actor_ = register_actor("TranslationManager", translation_manager_.get());
|
||||||
updates_manager_ = make_unique<UpdatesManager>(this, create_reference());
|
updates_manager_ = make_unique<UpdatesManager>(this, create_reference());
|
||||||
updates_manager_actor_ = register_actor("UpdatesManager", updates_manager_.get());
|
updates_manager_actor_ = register_actor("UpdatesManager", updates_manager_.get());
|
||||||
G()->set_updates_manager(updates_manager_actor_.get());
|
G()->set_updates_manager(updates_manager_actor_.get());
|
||||||
@ -4699,8 +4706,8 @@ void Td::on_request(uint64 id, td_api::translateText &request) {
|
|||||||
CLEAN_INPUT_STRING(request.from_language_code_);
|
CLEAN_INPUT_STRING(request.from_language_code_);
|
||||||
CLEAN_INPUT_STRING(request.to_language_code_);
|
CLEAN_INPUT_STRING(request.to_language_code_);
|
||||||
CREATE_REQUEST_PROMISE();
|
CREATE_REQUEST_PROMISE();
|
||||||
messages_manager_->translate_text(request.text_, request.from_language_code_, request.to_language_code_,
|
translation_manager_->translate_text(request.text_, request.from_language_code_, request.to_language_code_,
|
||||||
std::move(promise));
|
std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Td::on_request(uint64 id, const td_api::recognizeSpeech &request) {
|
void Td::on_request(uint64 id, const td_api::recognizeSpeech &request) {
|
||||||
|
@ -77,6 +77,7 @@ class StickersManager;
|
|||||||
class StorageManager;
|
class StorageManager;
|
||||||
class ThemeManager;
|
class ThemeManager;
|
||||||
class TopDialogManager;
|
class TopDialogManager;
|
||||||
|
class TranslationManager;
|
||||||
class UpdatesManager;
|
class UpdatesManager;
|
||||||
class VideoNotesManager;
|
class VideoNotesManager;
|
||||||
class VideosManager;
|
class VideosManager;
|
||||||
@ -181,6 +182,8 @@ class Td final : public Actor {
|
|||||||
ActorOwn<ThemeManager> theme_manager_actor_;
|
ActorOwn<ThemeManager> theme_manager_actor_;
|
||||||
unique_ptr<TopDialogManager> top_dialog_manager_;
|
unique_ptr<TopDialogManager> top_dialog_manager_;
|
||||||
ActorOwn<TopDialogManager> top_dialog_manager_actor_;
|
ActorOwn<TopDialogManager> top_dialog_manager_actor_;
|
||||||
|
unique_ptr<TranslationManager> translation_manager_;
|
||||||
|
ActorOwn<TranslationManager> translation_manager_actor_;
|
||||||
unique_ptr<UpdatesManager> updates_manager_;
|
unique_ptr<UpdatesManager> updates_manager_;
|
||||||
ActorOwn<UpdatesManager> updates_manager_actor_;
|
ActorOwn<UpdatesManager> updates_manager_actor_;
|
||||||
unique_ptr<VideoNotesManager> video_notes_manager_;
|
unique_ptr<VideoNotesManager> video_notes_manager_;
|
||||||
|
65
td/telegram/TranslationManager.cpp
Normal file
65
td/telegram/TranslationManager.cpp
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
//
|
||||||
|
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
//
|
||||||
|
#include "td/telegram/TranslationManager.h"
|
||||||
|
|
||||||
|
#include "td/telegram/Global.h"
|
||||||
|
#include "td/telegram/Td.h"
|
||||||
|
#include "td/telegram/telegram_api.h"
|
||||||
|
|
||||||
|
#include "td/utils/buffer.h"
|
||||||
|
#include "td/utils/Status.h"
|
||||||
|
|
||||||
|
namespace td {
|
||||||
|
|
||||||
|
class TranslateTextQuery final : public Td::ResultHandler {
|
||||||
|
Promise<td_api::object_ptr<td_api::text>> promise_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit TranslateTextQuery(Promise<td_api::object_ptr<td_api::text>> &&promise) : promise_(std::move(promise)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void send(const string &text, const string &from_language_code, const string &to_language_code) {
|
||||||
|
int flags = telegram_api::messages_translateText::TEXT_MASK;
|
||||||
|
vector<telegram_api::object_ptr<telegram_api::textWithEntities>> texts;
|
||||||
|
texts.push_back(telegram_api::make_object<telegram_api::textWithEntities>(text, Auto()));
|
||||||
|
send_query(G()->net_query_creator().create(
|
||||||
|
telegram_api::messages_translateText(flags, nullptr, vector<int32>{}, std::move(texts), to_language_code)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_result(BufferSlice packet) final {
|
||||||
|
auto result_ptr = fetch_result<telegram_api::messages_translateText>(packet);
|
||||||
|
if (result_ptr.is_error()) {
|
||||||
|
return on_error(result_ptr.move_as_error());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto ptr = result_ptr.move_as_ok();
|
||||||
|
LOG(INFO) << "Receive result for TranslateTextQuery: " << to_string(ptr);
|
||||||
|
if (ptr->result_.empty()) {
|
||||||
|
return promise_.set_value(nullptr);
|
||||||
|
}
|
||||||
|
promise_.set_value(td_api::make_object<td_api::text>(ptr->result_[0]->text_));
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_error(Status status) final {
|
||||||
|
promise_.set_error(std::move(status));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
TranslationManager::TranslationManager(Td *td, ActorShared<> parent) : td_(td), parent_(std::move(parent)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void TranslationManager::tear_down() {
|
||||||
|
parent_.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TranslationManager::translate_text(const string &text, const string &from_language_code,
|
||||||
|
const string &to_language_code,
|
||||||
|
Promise<td_api::object_ptr<td_api::text>> &&promise) {
|
||||||
|
td_->create_handler<TranslateTextQuery>(std::move(promise))->send(text, from_language_code, to_language_code);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace td
|
34
td/telegram/TranslationManager.h
Normal file
34
td/telegram/TranslationManager.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
//
|
||||||
|
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
//
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "td/telegram/td_api.h"
|
||||||
|
|
||||||
|
#include "td/actor/actor.h"
|
||||||
|
|
||||||
|
#include "td/utils/common.h"
|
||||||
|
#include "td/utils/Promise.h"
|
||||||
|
|
||||||
|
namespace td {
|
||||||
|
|
||||||
|
class Td;
|
||||||
|
|
||||||
|
class TranslationManager final : public Actor {
|
||||||
|
public:
|
||||||
|
TranslationManager(Td *td, ActorShared<> parent);
|
||||||
|
|
||||||
|
void translate_text(const string &text, const string &from_language_code, const string &to_language_code,
|
||||||
|
Promise<td_api::object_ptr<td_api::text>> &&promise);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void tear_down() final;
|
||||||
|
|
||||||
|
Td *td_;
|
||||||
|
ActorShared<> parent_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace td
|
Loading…
x
Reference in New Issue
Block a user