From 4caf74a86fffe382eb5560c92bde29a673e7c62e Mon Sep 17 00:00:00 2001 From: levlam Date: Sun, 18 Jul 2021 06:16:08 +0300 Subject: [PATCH] Don't repair last message by getHistory in a chat created by new message. --- td/telegram/MessagesManager.cpp | 29 +++++++++++++++++++---------- td/telegram/MessagesManager.h | 1 + 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 5905559b3..81c90132a 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -14352,6 +14352,7 @@ void MessagesManager::on_get_dialogs(FolderId folder_id, vectordialog_id == dialog_id); } @@ -33490,14 +33496,14 @@ void MessagesManager::force_create_dialog(DialogId dialog_id, const char *source } MessagesManager::Dialog *MessagesManager::add_dialog(DialogId dialog_id, const char *source) { - LOG(DEBUG) << "Creating " << dialog_id; + LOG(DEBUG) << "Creating " << dialog_id << " from " << source; CHECK(!have_dialog(dialog_id)); if (G()->parameters().use_message_db) { // TODO preload dialog asynchronously, remove loading from this function auto r_value = G()->td_db()->get_dialog_db_sync()->get_dialog(dialog_id); if (r_value.is_ok()) { - LOG(INFO) << "Synchronously loaded " << dialog_id << " from database"; + LOG(INFO) << "Synchronously loaded " << dialog_id << " from database from " << source; return add_new_dialog(parse_dialog(dialog_id, r_value.ok(), source), true, source); } } @@ -33542,7 +33548,7 @@ MessagesManager::Dialog *MessagesManager::add_new_dialog(unique_ptr &&d, } case DialogType::SecretChat: if (d->last_new_message_id.get() <= MessageId::min().get()) { - LOG(INFO) << "Set " << d->dialog_id << " last new message in add_new_dialog"; + LOG(INFO) << "Set " << d->dialog_id << " last new message in add_new_dialog from " << source; d->last_new_message_id = MessageId::min().get_next_message_id(MessageType::Local); } @@ -33961,7 +33967,8 @@ void MessagesManager::fix_new_dialog(Dialog *d, unique_ptr &&last_datab d->pending_read_channel_inbox_pts = 0; } if (need_get_history && !td_->auth_manager_->is_bot() && dialog_id != being_added_dialog_id_ && - have_input_peer(dialog_id, AccessRights::Read) && (d->order != DEFAULT_ORDER || is_dialog_sponsored(d))) { + dialog_id != being_added_by_new_message_dialog_id_ && have_input_peer(dialog_id, AccessRights::Read) && + (d->order != DEFAULT_ORDER || is_dialog_sponsored(d))) { get_history_from_the_end(dialog_id, true, false, Auto()); } if (d->need_repair_server_unread_count && need_unread_counter(d->order)) { @@ -33979,6 +33986,7 @@ void MessagesManager::add_dialog_last_database_message(Dialog *d, unique_ptrleft == nullptr); CHECK(last_database_message->right == nullptr); + auto dialog_id = d->dialog_id; auto message_id = last_database_message->message_id; CHECK(message_id.is_valid()); LOG_CHECK(d->last_database_message_id == message_id) @@ -33986,7 +33994,7 @@ void MessagesManager::add_dialog_last_database_message(Dialog *d, unique_ptrdialog_id, AccessRights::Read)) { + if (have_input_peer(dialog_id, AccessRights::Read)) { bool need_update = false; last_database_message->have_previous = false; last_database_message->have_next = false; @@ -33994,7 +34002,7 @@ void MessagesManager::add_dialog_last_database_message(Dialog *d, unique_ptrdialog_id; + LOG(ERROR) << "Need to update pos in " << dialog_id; } } if (m != nullptr) { @@ -34006,11 +34014,12 @@ void MessagesManager::add_dialog_last_database_message(Dialog *d, unique_ptrpending_last_message_id = MessageId(); need_update_dialog_pos = true; } - on_dialog_updated(d->dialog_id, "add_dialog_last_database_message 4"); // resave without last database message + on_dialog_updated(dialog_id, "add_dialog_last_database_message 4"); // resave without last database message - if (!td_->auth_manager_->is_bot() && d->dialog_id != being_added_dialog_id_ && - have_input_peer(d->dialog_id, AccessRights::Read) && (d->order != DEFAULT_ORDER || is_dialog_sponsored(d))) { - get_history_from_the_end(d->dialog_id, true, false, Auto()); + if (!td_->auth_manager_->is_bot() && dialog_id != being_added_dialog_id_ && + dialog_id != being_added_by_new_message_dialog_id_ && have_input_peer(dialog_id, AccessRights::Read) && + (d->order != DEFAULT_ORDER || is_dialog_sponsored(d))) { + get_history_from_the_end(dialog_id, true, false, Auto()); } } diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index edfc6dd22..6a323b66a 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -3320,6 +3320,7 @@ class MessagesManager final : public Actor { FullMessageId being_readded_message_id_; DialogId being_added_dialog_id_; + DialogId being_added_by_new_message_dialog_id_; DialogId debug_channel_difference_dialog_;