From 14c2a990b1ad43f01675ada1349116c3923161f4 Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 29 Sep 2021 14:06:43 +0300 Subject: [PATCH] Add get_draft_message function. --- td/telegram/DraftMessage.cpp | 29 ++++++++++++++++++++++++++++- td/telegram/DraftMessage.h | 6 +++++- td/telegram/MessagesManager.cpp | 19 +++---------------- 3 files changed, 36 insertions(+), 18 deletions(-) diff --git a/td/telegram/DraftMessage.cpp b/td/telegram/DraftMessage.cpp index 2f55263ae..81d06787f 100644 --- a/td/telegram/DraftMessage.cpp +++ b/td/telegram/DraftMessage.cpp @@ -6,6 +6,7 @@ // #include "td/telegram/DraftMessage.h" +#include "td/telegram/Global.h" #include "td/telegram/MessageEntity.h" #include "td/telegram/misc.h" #include "td/telegram/ServerMessageId.h" @@ -23,7 +24,7 @@ td_api::object_ptr get_draft_message_object(const unique_p } unique_ptr get_draft_message(ContactsManager *contacts_manager, - tl_object_ptr &&draft_message_ptr) { + telegram_api::object_ptr &&draft_message_ptr) { if (draft_message_ptr == nullptr) { return nullptr; } @@ -65,4 +66,30 @@ unique_ptr get_draft_message(ContactsManager *contacts_manager, } } +Result> get_draft_message(ContactsManager *contacts_manager, DialogId dialog_id, + td_api::object_ptr &&draft_message) { + if (draft_message == nullptr) { + return nullptr; + } + + auto result = make_unique(); + result->date = G()->unix_time(); + result->reply_to_message_id = MessageId(draft_message->reply_to_message_id_); + if (result->reply_to_message_id != MessageId() && !result->reply_to_message_id.is_valid()) { + return Status::Error(400, "Invalid reply_to_message_id specified"); + } + + auto input_message_content = std::move(draft_message->input_message_text_); + if (input_message_content != nullptr) { + if (input_message_content->get_id() != td_api::inputMessageText::ID) { + return Status::Error(400, "Input message content type must be InputMessageText"); + } + TRY_RESULT(message_content, + process_input_message_text(contacts_manager, dialog_id, std::move(input_message_content), false, true)); + result->input_message_text = std::move(message_content); + } + + return result; +} + } // namespace td diff --git a/td/telegram/DraftMessage.h b/td/telegram/DraftMessage.h index 28fb9db36..836f0af4f 100644 --- a/td/telegram/DraftMessage.h +++ b/td/telegram/DraftMessage.h @@ -12,6 +12,7 @@ #include "td/telegram/telegram_api.h" #include "td/utils/common.h" +#include "td/utils/Status.h" namespace td { @@ -27,6 +28,9 @@ class DraftMessage { td_api::object_ptr get_draft_message_object(const unique_ptr &draft_message); unique_ptr get_draft_message(ContactsManager *contacts_manager, - tl_object_ptr &&draft_message_ptr); + telegram_api::object_ptr &&draft_message_ptr); + +Result> get_draft_message(ContactsManager *contacts_manager, DialogId dialog_id, + td_api::object_ptr &&draft_message); } // namespace td diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 8cddfb011..11c0160d6 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -18559,23 +18559,10 @@ Status MessagesManager::set_dialog_draft_message(DialogId dialog_id, MessageId t } TRY_STATUS(can_send_message(dialog_id)); - unique_ptr new_draft_message; - if (draft_message != nullptr) { - new_draft_message = make_unique(); - new_draft_message->date = G()->unix_time(); + TRY_RESULT(new_draft_message, get_draft_message(td_->contacts_manager_.get(), dialog_id, std::move(draft_message))); + if (new_draft_message != nullptr) { new_draft_message->reply_to_message_id = - get_reply_to_message_id(d, top_thread_message_id, MessageId(draft_message->reply_to_message_id_), true); - - auto input_message_content = std::move(draft_message->input_message_text_); - if (input_message_content != nullptr) { - int32 draft_message_content_type = input_message_content->get_id(); - if (draft_message_content_type != td_api::inputMessageText::ID) { - return Status::Error(400, "Input message content type must be InputMessageText"); - } - TRY_RESULT(message_content, process_input_message_text(td_->contacts_manager_.get(), dialog_id, - std::move(input_message_content), false, true)); - new_draft_message->input_message_text = std::move(message_content); - } + get_reply_to_message_id(d, top_thread_message_id, new_draft_message->reply_to_message_id, true); if (!new_draft_message->reply_to_message_id.is_valid() && new_draft_message->input_message_text.text.text.empty()) { new_draft_message = nullptr;