From 645102e4edb134692cf7fded203acd97f17a3c3a Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 11 Jan 2024 20:13:43 +0300 Subject: [PATCH] Make MessageForwardInfo fields private. --- td/telegram/MessageForwardInfo.cpp | 5 +++++ td/telegram/MessageForwardInfo.h | 11 ++++++++++- td/telegram/MessagesManager.cpp | 16 +++++++++------- td/telegram/MessagesManager.h | 2 +- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/td/telegram/MessageForwardInfo.cpp b/td/telegram/MessageForwardInfo.cpp index 3c1aae493..0a54c70fd 100644 --- a/td/telegram/MessageForwardInfo.cpp +++ b/td/telegram/MessageForwardInfo.cpp @@ -55,6 +55,11 @@ unique_ptr MessageForwardInfo::copy_message_forward_info(Td const MessageForwardInfo &forward_info, DialogId from_dialog_id, MessageId from_message_id) { + if (from_dialog_id.is_valid() != from_message_id.is_valid()) { + from_dialog_id = DialogId(); + from_message_id = MessageId(); + } + auto result = make_unique(forward_info); result->from_dialog_id_ = from_dialog_id; result->from_message_id_ = from_message_id; diff --git a/td/telegram/MessageForwardInfo.h b/td/telegram/MessageForwardInfo.h index f955da99c..200b75ec3 100644 --- a/td/telegram/MessageForwardInfo.h +++ b/td/telegram/MessageForwardInfo.h @@ -23,7 +23,7 @@ namespace td { class Dependencies; class Td; -struct MessageForwardInfo { +class MessageForwardInfo { MessageOrigin origin_; int32 date_ = 0; DialogId from_dialog_id_; @@ -31,6 +31,11 @@ struct MessageForwardInfo { string psa_type_; bool is_imported_ = false; + friend bool operator==(const MessageForwardInfo &lhs, const MessageForwardInfo &rhs); + + friend StringBuilder &operator<<(StringBuilder &string_builder, const MessageForwardInfo &forward_info); + + public: MessageForwardInfo() = default; MessageForwardInfo(MessageOrigin &&origin, int32 date, DialogId from_dialog_id, MessageId from_message_id, @@ -73,6 +78,10 @@ struct MessageForwardInfo { return is_imported_; } + const MessageOrigin &get_origin() const { + return origin_; + } + MessageFullId get_origin_message_full_id() const { return origin_.get_message_full_id(); } diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 840729ac8..bfb67ebb3 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -9325,7 +9325,7 @@ bool MessagesManager::can_get_message_statistics(DialogId dialog_id, const Messa return false; } if (m == nullptr || m->message_id.is_scheduled() || !m->message_id.is_server() || m->view_count == 0 || - m->had_forward_info || (m->forward_info != nullptr && m->forward_info->origin_.is_channel_post())) { + m->had_forward_info || (m->forward_info != nullptr && m->forward_info->get_origin().is_channel_post())) { return false; } return td_->contacts_manager_->can_get_channel_message_statistics(dialog_id); @@ -15903,12 +15903,13 @@ void MessagesManager::block_message_sender_from_replies(MessageId message_id, bo DialogId sender_dialog_id; if (m->forward_info != nullptr) { - sender_dialog_id = m->forward_info->origin_.get_sender(); + sender_dialog_id = m->forward_info->get_origin().get_sender(); } vector message_ids; if (need_delete_all_messages && sender_dialog_id.is_valid()) { message_ids = find_dialog_messages(d, [sender_dialog_id](const Message *m) { - return !m->is_outgoing && m->forward_info != nullptr && m->forward_info->origin_.get_sender() == sender_dialog_id; + return !m->is_outgoing && m->forward_info != nullptr && + m->forward_info->get_origin().get_sender() == sender_dialog_id; }); CHECK(td::contains(message_ids, message_id)); } else if (need_delete_message) { @@ -22255,8 +22256,9 @@ tl_object_ptr MessagesManager::get_message_object(DialogId dial // in Saved Messages all non-forwarded messages must be outgoing // a forwarded message is outgoing, only if it doesn't have from_dialog_id and its sender isn't hidden // i.e. a message is incoming only if it's a forwarded message with known from_dialog_id or with a hidden sender - is_outgoing = is_scheduled || m->forward_info == nullptr || - (!m->forward_info->get_last_dialog_id().is_valid() && !m->forward_info->origin_.is_sender_hidden()); + is_outgoing = + is_scheduled || m->forward_info == nullptr || + (!m->forward_info->get_last_dialog_id().is_valid() && !m->forward_info->get_origin().is_sender_hidden()); } double ttl_expires_in = m->ttl_expires_at != 0 ? clamp(m->ttl_expires_at - Time::now(), 1e-3, m->ttl - 1e-3) : 0.0; @@ -24627,7 +24629,7 @@ DialogId MessagesManager::get_message_original_sender(const Message *m) { if (m->forward_info->is_imported()) { return DialogId(); } - return m->forward_info->origin_.get_sender(); + return m->forward_info->get_origin().get_sender(); } return get_message_sender(m); } @@ -25815,7 +25817,7 @@ MessageOrigin MessagesManager::get_forwarded_message_origin(DialogId dialog_id, CHECK(m != nullptr); MessageOrigin origin; if (m->forward_info != nullptr) { - origin = m->forward_info->origin_; + origin = m->forward_info->get_origin(); } else if (m->is_channel_post) { if (td_->dialog_manager_->is_broadcast_channel(dialog_id)) { auto author_signature = m->sender_user_id.is_valid() ? td_->contacts_manager_->get_user_title(m->sender_user_id) diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index b9f3d8210..f3cc3e002 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -107,7 +107,7 @@ class DialogFilter; class DraftMessage; struct InputMessageContent; class MessageContent; -struct MessageForwardInfo; +class MessageForwardInfo; struct MessageReactions; class Td; class Usernames;