From b25df7a808257249d4988c44070649e40216002f Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 22 Oct 2021 17:00:18 +0300 Subject: [PATCH] Create all nested objects before td_api::message. --- td/telegram/MessagesManager.cpp | 47 ++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 231075f5a..3544633b8 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -23056,40 +23056,43 @@ tl_object_ptr MessagesManager::get_message_object(DialogId dial } else { ttl = 0; } + auto sender = get_message_sender_object_const(m->sender_user_id, m->sender_dialog_id, source); auto scheduling_state = is_scheduled ? get_message_scheduling_state_object(m->date) : nullptr; - bool can_be_edited = for_event_log ? false : can_edit_message(dialog_id, m, false, td_->auth_manager_->is_bot()); - bool can_be_forwarded = for_event_log ? false : can_forward_message(dialog_id, m); - bool can_get_statistics = for_event_log ? false : can_get_message_statistics(dialog_id, m); - bool can_get_message_thread = for_event_log ? false : get_top_thread_full_message_id(dialog_id, m).is_ok(); - bool can_get_viewers = for_event_log ? false : can_get_message_viewers(dialog_id, m).is_ok(); - bool can_get_media_timestamp_links = for_event_log ? false : can_get_media_timestamp_link(dialog_id, m).is_ok(); + auto forward_info = get_message_forward_info_object(m->forward_info); + auto interaction_info = get_message_interaction_info_object(dialog_id, m); + auto can_be_edited = for_event_log ? false : can_edit_message(dialog_id, m, false, td_->auth_manager_->is_bot()); + auto can_be_forwarded = for_event_log ? false : can_forward_message(dialog_id, m); + auto can_get_statistics = for_event_log ? false : can_get_message_statistics(dialog_id, m); + auto can_get_message_thread = for_event_log ? false : get_top_thread_full_message_id(dialog_id, m).is_ok(); + auto can_get_viewers = for_event_log ? false : can_get_message_viewers(dialog_id, m).is_ok(); + auto can_get_media_timestamp_links = for_event_log ? false : can_get_media_timestamp_link(dialog_id, m).is_ok(); auto via_bot_user_id = td_->contacts_manager_->get_user_id_object(m->via_bot_user_id, "via_bot_user_id"); auto media_album_id = for_event_log ? static_cast(0) : m->media_album_id; auto reply_to_message_id = for_event_log ? static_cast(0) : m->reply_to_message_id.get(); auto reply_in_dialog_id = reply_to_message_id == 0 ? DialogId() : (m->reply_in_dialog_id.is_valid() ? m->reply_in_dialog_id : dialog_id); auto top_thread_message_id = for_event_log || is_scheduled ? static_cast(0) : m->top_thread_message_id.get(); - bool contains_unread_mention = for_event_log ? false : m->contains_unread_mention; - auto live_location_date = m->is_failed_to_send ? 0 : m->date; + auto contains_unread_mention = for_event_log ? false : m->contains_unread_mention; auto date = is_scheduled ? 0 : m->date; auto edit_date = m->hide_edit_date ? 0 : m->edit_date; auto is_pinned = for_event_log || is_scheduled ? false : m->is_pinned; - bool skip_bot_commands = for_event_log ? true : need_skip_bot_commands(dialog_id, m); - int32 max_media_timestamp = + auto has_timestamped_media = for_event_log || reply_to_message_id == 0 || m->max_own_media_timestamp >= 0; + auto reply_markup = get_reply_markup_object(m->reply_markup); + + auto live_location_date = m->is_failed_to_send ? 0 : m->date; + auto skip_bot_commands = for_event_log ? true : need_skip_bot_commands(dialog_id, m); + auto max_media_timestamp = for_event_log ? get_message_own_max_media_timestamp(m) : get_message_max_media_timestamp(m); - bool has_timestamped_media = for_event_log || reply_to_message_id == 0 || m->max_own_media_timestamp >= 0; + auto content = get_message_content_object(m->content.get(), td_, dialog_id, live_location_date, m->is_content_secret, + skip_bot_commands, max_media_timestamp); return make_tl_object( - m->message_id.get(), get_message_sender_object_const(m->sender_user_id, m->sender_dialog_id, source), - dialog_id.get(), std::move(sending_state), std::move(scheduling_state), is_outgoing, is_pinned, can_be_edited, - can_be_forwarded, can_delete_for_self, can_delete_for_all_users, can_get_statistics, can_get_message_thread, - can_get_viewers, can_get_media_timestamp_links, has_timestamped_media, m->is_channel_post, - contains_unread_mention, date, edit_date, get_message_forward_info_object(m->forward_info), - get_message_interaction_info_object(dialog_id, m), reply_in_dialog_id.get(), reply_to_message_id, - top_thread_message_id, ttl, ttl_expires_in, via_bot_user_id, m->author_signature, media_album_id, - get_restriction_reason_description(m->restriction_reasons), - get_message_content_object(m->content.get(), td_, dialog_id, live_location_date, m->is_content_secret, - skip_bot_commands, max_media_timestamp), - get_reply_markup_object(m->reply_markup)); + m->message_id.get(), std::move(sender), dialog_id.get(), std::move(sending_state), std::move(scheduling_state), + is_outgoing, is_pinned, can_be_edited, can_be_forwarded, can_delete_for_self, can_delete_for_all_users, + can_get_statistics, can_get_message_thread, can_get_viewers, can_get_media_timestamp_links, has_timestamped_media, + m->is_channel_post, contains_unread_mention, date, edit_date, std::move(forward_info), + std::move(interaction_info), reply_in_dialog_id.get(), reply_to_message_id, top_thread_message_id, ttl, + ttl_expires_in, via_bot_user_id, m->author_signature, media_album_id, + get_restriction_reason_description(m->restriction_reasons), std::move(content), std::move(reply_markup)); } tl_object_ptr MessagesManager::get_messages_object(int32 total_count, DialogId dialog_id,