Make OrderedMessage.message_id_ private.

This commit is contained in:
levlam 2023-05-02 23:49:59 +03:00
parent aa7627108b
commit e39757b6ec
2 changed files with 50 additions and 44 deletions

View File

@ -10045,7 +10045,7 @@ void MessagesManager::on_get_history(DialogId dialog_id, MessageId from_message_
auto it = d->ordered_messages.get_const_iterator(d->last_message_id); auto it = d->ordered_messages.get_const_iterator(d->last_message_id);
MessageId new_first_database_message_id; MessageId new_first_database_message_id;
while (*it != nullptr) { while (*it != nullptr) {
auto message_id = (*it)->message_id_; auto message_id = (*it)->get_message_id();
if (message_id.is_server() || message_id.is_local()) { if (message_id.is_server() || message_id.is_local()) {
if (!d->last_database_message_id.is_valid()) { if (!d->last_database_message_id.is_valid()) {
set_dialog_last_database_message_id(d, message_id, "on_get_history"); set_dialog_last_database_message_id(d, message_id, "on_get_history");
@ -10071,10 +10071,10 @@ void MessagesManager::on_get_history(DialogId dialog_id, MessageId from_message_
CHECK(d->first_database_message_id.is_valid()); CHECK(d->first_database_message_id.is_valid());
{ {
auto it = d->ordered_messages.get_const_iterator(d->first_database_message_id); auto it = d->ordered_messages.get_const_iterator(d->first_database_message_id);
if (*it != nullptr && ((*it)->message_id_ == d->first_database_message_id || (*it)->have_next_)) { if (*it != nullptr && ((*it)->get_message_id() == d->first_database_message_id || (*it)->have_next_)) {
MessageId new_first_database_message_id = d->first_database_message_id; MessageId new_first_database_message_id = d->first_database_message_id;
while (*it != nullptr) { while (*it != nullptr) {
auto message_id = (*it)->message_id_; auto message_id = (*it)->get_message_id();
if ((message_id.is_server() || message_id.is_local()) && message_id < new_first_database_message_id) { if ((message_id.is_server() || message_id.is_local()) && message_id < new_first_database_message_id) {
new_first_database_message_id = message_id; new_first_database_message_id = message_id;
try_restore_dialog_reply_markup(d, get_message(d, message_id)); try_restore_dialog_reply_markup(d, get_message(d, message_id));
@ -10088,10 +10088,10 @@ void MessagesManager::on_get_history(DialogId dialog_id, MessageId from_message_
} }
{ {
auto it = d->ordered_messages.get_const_iterator(d->last_database_message_id); auto it = d->ordered_messages.get_const_iterator(d->last_database_message_id);
if (*it != nullptr && ((*it)->message_id_ == d->last_database_message_id || (*it)->have_next_)) { if (*it != nullptr && ((*it)->get_message_id() == d->last_database_message_id || (*it)->have_next_)) {
MessageId new_last_database_message_id = d->last_database_message_id; MessageId new_last_database_message_id = d->last_database_message_id;
while (*it != nullptr) { while (*it != nullptr) {
auto message_id = (*it)->message_id_; auto message_id = (*it)->get_message_id();
if ((message_id.is_server() || message_id.is_local()) && message_id > new_last_database_message_id) { if ((message_id.is_server() || message_id.is_local()) && message_id > new_last_database_message_id) {
new_last_database_message_id = message_id; new_last_database_message_id = message_id;
} }
@ -12376,19 +12376,19 @@ int32 MessagesManager::calc_new_unread_count_from_last_unread(Dialog *d, Message
MessageType type) const { MessageType type) const {
CHECK(!max_message_id.is_scheduled()); CHECK(!max_message_id.is_scheduled());
auto it = d->ordered_messages.get_const_iterator(max_message_id); auto it = d->ordered_messages.get_const_iterator(max_message_id);
if (*it == nullptr || (*it)->message_id_ != max_message_id) { if (*it == nullptr || (*it)->get_message_id() != max_message_id) {
return -1; return -1;
} }
int32 unread_count = type == MessageType::Server ? d->server_unread_count : d->local_unread_count; int32 unread_count = type == MessageType::Server ? d->server_unread_count : d->local_unread_count;
while (*it != nullptr && (*it)->message_id_ > d->last_read_inbox_message_id) { while (*it != nullptr && (*it)->get_message_id() > d->last_read_inbox_message_id) {
auto message_id = (*it)->message_id_; auto message_id = (*it)->get_message_id();
if (message_id.get_type() == type && has_incoming_notification(d->dialog_id, get_message(d, message_id))) { if (message_id.get_type() == type && has_incoming_notification(d->dialog_id, get_message(d, message_id))) {
unread_count--; unread_count--;
} }
--it; --it;
} }
if (*it == nullptr || (*it)->message_id_ != d->last_read_inbox_message_id) { if (*it == nullptr || (*it)->get_message_id() != d->last_read_inbox_message_id) {
return -1; return -1;
} }
@ -12401,8 +12401,8 @@ int32 MessagesManager::calc_new_unread_count_from_the_end(Dialog *d, MessageId m
CHECK(!max_message_id.is_scheduled()); CHECK(!max_message_id.is_scheduled());
int32 unread_count = 0; int32 unread_count = 0;
auto it = d->ordered_messages.get_const_iterator(MessageId::max()); auto it = d->ordered_messages.get_const_iterator(MessageId::max());
while (*it != nullptr && (*it)->message_id_ > max_message_id) { while (*it != nullptr && (*it)->get_message_id() > max_message_id) {
auto message_id = (*it)->message_id_; auto message_id = (*it)->get_message_id();
if (message_id.get_type() == type && has_incoming_notification(d->dialog_id, get_message(d, message_id))) { if (message_id.get_type() == type && has_incoming_notification(d->dialog_id, get_message(d, message_id))) {
unread_count++; unread_count++;
} }
@ -13302,9 +13302,9 @@ void MessagesManager::ttl_read_history_impl(DialogId dialog_id, bool is_outgoing
auto *d = get_dialog(dialog_id); auto *d = get_dialog(dialog_id);
CHECK(d != nullptr); CHECK(d != nullptr);
auto now = Time::now(); auto now = Time::now();
for (auto it = d->ordered_messages.get_const_iterator(from_message_id); *it && (*it)->message_id_ >= till_message_id; for (auto it = d->ordered_messages.get_const_iterator(from_message_id);
--it) { *it && (*it)->get_message_id() >= till_message_id; --it) {
auto *m = get_message(d, (*it)->message_id_); auto *m = get_message(d, (*it)->get_message_id());
CHECK(m != nullptr); CHECK(m != nullptr);
if (m->is_outgoing == is_outgoing) { if (m->is_outgoing == is_outgoing) {
ttl_on_view(d, m, view_date, now); ttl_on_view(d, m, view_date, now);
@ -14045,7 +14045,8 @@ void MessagesManager::read_secret_chat_outbox_inner(DialogId dialog_id, int32 up
CHECK(d != nullptr); CHECK(d != nullptr);
auto end = d->ordered_messages.get_const_iterator(MessageId::max()); auto end = d->ordered_messages.get_const_iterator(MessageId::max());
while (*end && (get_message(d, (*end)->message_id_)->date > up_to_date || (*end)->message_id_.is_yet_unsent())) { while (*end &&
(get_message(d, (*end)->get_message_id())->date > up_to_date || (*end)->get_message_id().is_yet_unsent())) {
--end; --end;
} }
if (!*end) { if (!*end) {
@ -14053,7 +14054,7 @@ void MessagesManager::read_secret_chat_outbox_inner(DialogId dialog_id, int32 up
<< ": no messages with such date are known"; << ": no messages with such date are known";
return; return;
} }
auto max_message_id = (*end)->message_id_; auto max_message_id = (*end)->get_message_id();
read_history_outbox(dialog_id, max_message_id, read_date); read_history_outbox(dialog_id, max_message_id, read_date);
} }
@ -16204,9 +16205,9 @@ void MessagesManager::fix_dialog_last_notification_id(Dialog *d, bool from_menti
auto &group_info = get_notification_group_info(d, from_mentions); auto &group_info = get_notification_group_info(d, from_mentions);
VLOG(notifications) << "Trying to fix last notification identifier in " << group_info.group_id << " from " VLOG(notifications) << "Trying to fix last notification identifier in " << group_info.group_id << " from "
<< d->dialog_id << " from " << message_id << "/" << group_info.last_notification_id; << d->dialog_id << " from " << message_id << "/" << group_info.last_notification_id;
if (*it != nullptr && ((*it)->message_id_ == message_id || (*it)->have_next_)) { if (*it != nullptr && ((*it)->get_message_id() == message_id || (*it)->have_next_)) {
while (*it != nullptr) { while (*it != nullptr) {
const Message *m = get_message(d, (*it)->message_id_); const Message *m = get_message(d, (*it)->get_message_id());
if (is_from_mention_notification_group(m) == from_mentions && m->notification_id.is_valid() && if (is_from_mention_notification_group(m) == from_mentions && m->notification_id.is_valid() &&
is_message_notification_active(d, m) && m->message_id != message_id) { is_message_notification_active(d, m) && m->message_id != message_id) {
bool is_fixed = set_dialog_last_notification(d->dialog_id, group_info, m->date, m->notification_id, bool is_fixed = set_dialog_last_notification(d->dialog_id, group_info, m->date, m->notification_id,
@ -16331,7 +16332,7 @@ unique_ptr<MessagesManager::Message> MessagesManager::do_delete_message(Dialog *
const auto message_it = d->ordered_messages.get_iterator(message_id); const auto message_it = d->ordered_messages.get_iterator(message_id);
CHECK(*message_it != nullptr); CHECK(*message_it != nullptr);
CHECK((*message_it)->message_id_ == message_id); CHECK((*message_it)->get_message_id() == message_id);
bool need_get_history = false; bool need_get_history = false;
if (!only_from_memory) { if (!only_from_memory) {
@ -16347,7 +16348,7 @@ unique_ptr<MessagesManager::Message> MessagesManager::do_delete_message(Dialog *
auto it = message_it; auto it = message_it;
--it; --it;
if (*it != nullptr) { if (*it != nullptr) {
set_dialog_last_message_id(d, (*it)->message_id_, "do_delete_message"); set_dialog_last_message_id(d, (*it)->get_message_id(), "do_delete_message");
} else { } else {
LOG(ERROR) << "Have have_previous is true, but there is no previous for " << full_message_id << " from " LOG(ERROR) << "Have have_previous is true, but there is no previous for " << full_message_id << " from "
<< source; << source;
@ -16368,18 +16369,19 @@ unique_ptr<MessagesManager::Message> MessagesManager::do_delete_message(Dialog *
auto it = message_it; auto it = message_it;
while ((*it)->have_previous_) { while ((*it)->have_previous_) {
--it; --it;
if (*it == nullptr || !(*it)->message_id_.is_yet_unsent()) { if (*it == nullptr || !(*it)->get_message_id().is_yet_unsent()) {
break; break;
} }
} }
if (*it != nullptr) { if (*it != nullptr) {
if (!(*it)->message_id_.is_yet_unsent() && (*it)->message_id_ != d->last_database_message_id) { if (!(*it)->get_message_id().is_yet_unsent() && (*it)->get_message_id() != d->last_database_message_id) {
if ((*it)->message_id_ < d->first_database_message_id && d->dialog_id.get_type() == DialogType::Channel) { if ((*it)->get_message_id() < d->first_database_message_id &&
d->dialog_id.get_type() == DialogType::Channel) {
// possible if messages was deleted from database, but not from memory after updateChannelTooLong // possible if messages was deleted from database, but not from memory after updateChannelTooLong
set_dialog_last_database_message_id(d, MessageId(), "do_delete_message 1"); set_dialog_last_database_message_id(d, MessageId(), "do_delete_message 1");
} else { } else {
set_dialog_last_database_message_id(d, (*it)->message_id_, "do_delete_message 2"); set_dialog_last_database_message_id(d, (*it)->get_message_id(), "do_delete_message 2");
if (d->last_database_message_id < d->first_database_message_id) { if (d->last_database_message_id < d->first_database_message_id) {
LOG(ERROR) << "Last database " << d->last_database_message_id << " became less than first database " LOG(ERROR) << "Last database " << d->last_database_message_id << " became less than first database "
<< d->first_database_message_id << " after deletion of " << full_message_id; << d->first_database_message_id << " after deletion of " << full_message_id;
@ -16410,7 +16412,7 @@ unique_ptr<MessagesManager::Message> MessagesManager::do_delete_message(Dialog *
if ((*it)->have_previous_) { if ((*it)->have_previous_) {
--it; --it;
if (*it != nullptr) { if (*it != nullptr) {
suffix_load_queries_it->second->suffix_load_first_message_id_ = (*it)->message_id_; suffix_load_queries_it->second->suffix_load_first_message_id_ = (*it)->get_message_id();
} else { } else {
LOG(ERROR) << "Have have_previous is true, but there is no previous for " << full_message_id << " from " LOG(ERROR) << "Have have_previous is true, but there is no previous for " << full_message_id << " from "
<< source; << source;
@ -17267,7 +17269,7 @@ void MessagesManager::mark_dialog_as_read(Dialog *d) {
if (d->server_unread_count + d->local_unread_count > 0 && d->last_message_id.is_valid()) { if (d->server_unread_count + d->local_unread_count > 0 && d->last_message_id.is_valid()) {
auto it = d->ordered_messages.get_const_iterator(d->last_message_id); auto it = d->ordered_messages.get_const_iterator(d->last_message_id);
while (*it != nullptr) { while (*it != nullptr) {
auto message_id = (*it)->message_id_; auto message_id = (*it)->get_message_id();
if (message_id.is_server() || message_id.is_local()) { if (message_id.is_server() || message_id.is_local()) {
read_dialog_inbox(d, message_id); read_dialog_inbox(d, message_id);
break; break;
@ -20466,8 +20468,8 @@ void MessagesManager::open_dialog(Dialog *d) {
auto min_message_id = MessageId(ServerMessageId(1)); auto min_message_id = MessageId(ServerMessageId(1));
if (d->last_message_id == MessageId() && d->last_read_outbox_message_id < min_message_id) { if (d->last_message_id == MessageId() && d->last_read_outbox_message_id < min_message_id) {
auto it = d->ordered_messages.get_const_iterator(MessageId::max()); auto it = d->ordered_messages.get_const_iterator(MessageId::max());
if (*it != nullptr && (*it)->message_id_ < min_message_id) { if (*it != nullptr && (*it)->get_message_id() < min_message_id) {
read_history_inbox(dialog_id, (*it)->message_id_, -1, "open_dialog"); read_history_inbox(dialog_id, (*it)->get_message_id(), -1, "open_dialog");
} }
} }
@ -21042,7 +21044,7 @@ tl_object_ptr<td_api::messages> MessagesManager::get_dialog_history(DialogId dia
<< ", have_full_history_source = " << d->have_full_history_source; << ", have_full_history_source = " << d->have_full_history_source;
auto p = d->ordered_messages.get_const_iterator(from_message_id); auto p = d->ordered_messages.get_const_iterator(from_message_id);
LOG(DEBUG) << "Iterator points to " << (*p ? (*p)->message_id_ : MessageId()); LOG(DEBUG) << "Iterator points to " << (*p ? (*p)->get_message_id() : MessageId());
bool from_the_end = (d->last_message_id != MessageId() && from_message_id > d->last_message_id) || bool from_the_end = (d->last_message_id != MessageId() && from_message_id > d->last_message_id) ||
from_message_id >= MessageId::max(); from_message_id >= MessageId::max();
@ -21071,9 +21073,9 @@ tl_object_ptr<td_api::messages> MessagesManager::get_dialog_history(DialogId dia
} else { } else {
have_a_gap = true; have_a_gap = true;
} }
} else if ((*p)->message_id_ != from_message_id) { } else if ((*p)->get_message_id() != from_message_id) {
CHECK((*p)->message_id_ < from_message_id); CHECK((*p)->get_message_id() < from_message_id);
if (!(*p)->have_next_ && (d->last_message_id == MessageId() || (*p)->message_id_ < d->last_message_id)) { if (!(*p)->have_next_ && (d->last_message_id == MessageId() || (*p)->get_message_id() < d->last_message_id)) {
have_a_gap = true; have_a_gap = true;
} }
} }
@ -21082,7 +21084,7 @@ tl_object_ptr<td_api::messages> MessagesManager::get_dialog_history(DialogId dia
LOG(INFO) << "Have a gap near message to get chat history from"; LOG(INFO) << "Have a gap near message to get chat history from";
p = OrderedMessages::ConstIterator(); p = OrderedMessages::ConstIterator();
} }
if (*p != nullptr && (*p)->message_id_ == from_message_id) { if (*p != nullptr && (*p)->get_message_id() == from_message_id) {
if (offset < 0) { if (offset < 0) {
offset++; offset++;
} else { } else {
@ -21094,7 +21096,7 @@ tl_object_ptr<td_api::messages> MessagesManager::get_dialog_history(DialogId dia
++p; ++p;
if (*p) { if (*p) {
++offset; ++offset;
from_message_id = (*p)->message_id_; from_message_id = (*p)->get_message_id();
} }
} }
@ -21111,12 +21113,12 @@ tl_object_ptr<td_api::messages> MessagesManager::get_dialog_history(DialogId dia
} }
} }
LOG(INFO) << "Iterator after applying offset points to " << (*p ? (*p)->message_id_ : MessageId()) LOG(INFO) << "Iterator after applying offset points to " << (*p ? (*p)->get_message_id() : MessageId())
<< ", offset = " << offset << ", limit = " << limit << ", from_the_end = " << from_the_end; << ", offset = " << offset << ", limit = " << limit << ", from_the_end = " << from_the_end;
vector<tl_object_ptr<td_api::message>> messages; vector<tl_object_ptr<td_api::message>> messages;
if (*p != nullptr && offset == 0) { if (*p != nullptr && offset == 0) {
while (*p != nullptr && messages.size() < static_cast<size_t>(limit)) { while (*p != nullptr && messages.size() < static_cast<size_t>(limit)) {
from_message_id = (*p)->message_id_; from_message_id = (*p)->get_message_id();
messages.push_back(get_message_object(dialog_id, get_message(d, from_message_id), "get_dialog_history")); messages.push_back(get_message_object(dialog_id, get_message(d, from_message_id), "get_dialog_history"));
from_the_end = false; from_the_end = false;
--p; --p;
@ -23164,7 +23166,7 @@ void MessagesManager::preload_newer_messages(const Dialog *d, MessageId max_mess
while (*p != nullptr && limit-- > 0) { while (*p != nullptr && limit-- > 0) {
++p; ++p;
if (*p) { if (*p) {
max_message_id = (*p)->message_id_; max_message_id = (*p)->get_message_id();
} }
} }
if (limit > 0 && (d->last_message_id == MessageId() || max_message_id < d->last_message_id)) { if (limit > 0 && (d->last_message_id == MessageId() || max_message_id < d->last_message_id)) {
@ -23190,7 +23192,7 @@ void MessagesManager::preload_older_messages(const Dialog *d, MessageId min_mess
auto p = d->ordered_messages.get_const_iterator(min_message_id); auto p = d->ordered_messages.get_const_iterator(min_message_id);
int32 limit = MAX_GET_HISTORY * 3 / 10 + 1; int32 limit = MAX_GET_HISTORY * 3 / 10 + 1;
while (*p != nullptr && limit-- > 0) { while (*p != nullptr && limit-- > 0) {
min_message_id = (*p)->message_id_; min_message_id = (*p)->get_message_id();
--p; --p;
} }
if (limit > 0) { if (limit > 0) {
@ -34933,18 +34935,18 @@ MessagesManager::Message *MessagesManager::add_message_to_dialog(Dialog *d, uniq
++it; ++it;
auto next_message = *it; auto next_message = *it;
if (next_message != nullptr) { if (next_message != nullptr) {
if (next_message->message_id_.is_server() && if (next_message->get_message_id().is_server() &&
!(td_->auth_manager_->is_bot() && Slice(source) == Slice("GetRepliedChannelMessageQuery"))) { !(td_->auth_manager_->is_bot() && Slice(source) == Slice("GetRepliedChannelMessageQuery"))) {
LOG(ERROR) << "Can't attach " << m->message_id << " of type " << m->content->get_type() << " from " << source LOG(ERROR) << "Can't attach " << m->message_id << " of type " << m->content->get_type() << " from " << source
<< " from " << (m->from_database ? "database" : "server") << " before " << " from " << (m->from_database ? "database" : "server") << " before "
<< next_message->message_id_ << " and after " << previous_message->message_id_ << " in " << next_message->get_message_id() << " and after " << previous_message->get_message_id() << " in "
<< dialog_id; << dialog_id;
} }
next_message->have_previous_ = false; next_message->have_previous_ = false;
previous_message->have_next_ = false; previous_message->have_next_ = false;
} else { } else {
LOG(ERROR) << "Have_next is true, but there is no next message after " << previous_message->message_id_ LOG(ERROR) << "Have_next is true, but there is no next message after " << previous_message->get_message_id()
<< " from " << source << " in " << dialog_id; << " from " << source << " in " << dialog_id;
} }
} else if (m->message_id.is_server() && d->last_message_id.is_valid() && m->message_id > d->last_message_id) { } else if (m->message_id.is_server() && d->last_message_id.is_valid() && m->message_id > d->last_message_id) {
@ -39952,11 +39954,11 @@ void MessagesManager::suffix_load_update_first_message_id(const Dialog *d, Suffi
} }
auto it = d->ordered_messages.get_const_iterator(queries->suffix_load_first_message_id_); auto it = d->ordered_messages.get_const_iterator(queries->suffix_load_first_message_id_);
CHECK(*it != nullptr); CHECK(*it != nullptr);
CHECK((*it)->message_id_ == queries->suffix_load_first_message_id_); CHECK((*it)->get_message_id() == queries->suffix_load_first_message_id_);
while ((*it)->have_previous_) { while ((*it)->have_previous_) {
--it; --it;
} }
queries->suffix_load_first_message_id_ = (*it)->message_id_; queries->suffix_load_first_message_id_ = (*it)->get_message_id();
} }
void MessagesManager::suffix_load_query_ready(DialogId dialog_id) { void MessagesManager::suffix_load_query_ready(DialogId dialog_id) {

View File

@ -16,7 +16,9 @@ namespace td {
class OrderedMessage { class OrderedMessage {
public: public:
MessageId message_id_; MessageId get_message_id() const {
return message_id_;
}
bool have_previous_ = false; bool have_previous_ = false;
bool have_next_ = false; bool have_next_ = false;
@ -24,6 +26,8 @@ class OrderedMessage {
private: private:
int32 random_y_ = 0; int32 random_y_ = 0;
MessageId message_id_;
unique_ptr<OrderedMessage> left_; unique_ptr<OrderedMessage> left_;
unique_ptr<OrderedMessage> right_; unique_ptr<OrderedMessage> right_;