Repair sender_dialog_id for old automatically forwarded to the discussion group messages.

GitOrigin-RevId: f567e646f1d00e60523ea213ca2476e92dfef8d3
This commit is contained in:
levlam 2020-09-12 17:31:20 +03:00
parent 7842beed95
commit 324c0acbea
2 changed files with 23 additions and 0 deletions

View File

@ -22931,6 +22931,18 @@ void MessagesManager::edit_message_scheduling_state(
} }
} }
bool MessagesManager::has_message_sender_user_id(DialogId dialog_id, const Message *m) const {
if (!m->sender_user_id.is_valid()) {
return false;
}
if (td_->auth_manager_->is_bot() && !is_broadcast_channel(dialog_id) &&
m->sender_user_id == td_->contacts_manager_->get_service_notifications_user_id() && m->forward_info != nullptr &&
m->forward_info->sender_dialog_id.is_valid() && m->forward_info->message_id.is_valid()) {
return false;
}
return true;
}
bool MessagesManager::get_message_disable_web_page_preview(const Message *m) { bool MessagesManager::get_message_disable_web_page_preview(const Message *m) {
// m->disable_web_page_preview is known only for sent from this client messages // m->disable_web_page_preview is known only for sent from this client messages
if (m->disable_web_page_preview) { if (m->disable_web_page_preview) {
@ -28965,6 +28977,15 @@ MessagesManager::Message *MessagesManager::add_message_to_dialog(Dialog *d, uniq
DialogId dialog_id = d->dialog_id; DialogId dialog_id = d->dialog_id;
MessageId message_id = message->message_id; MessageId message_id = message->message_id;
if (!has_message_sender_user_id(dialog_id, message.get()) && !message->sender_dialog_id.is_valid()) {
const auto *forward_info = message->forward_info.get();
if (forward_info != nullptr && forward_info->sender_dialog_id.is_valid() && forward_info->message_id.is_valid()) {
message->sender_dialog_id = forward_info->sender_dialog_id;
} else {
LOG(ERROR) << "Failed to repair sender chat in " << message_id << " in " << dialog_id;
}
}
if (!message_id.is_scheduled() && message_id <= d->last_clear_history_message_id) { if (!message_id.is_scheduled() && message_id <= d->last_clear_history_message_id) {
LOG(INFO) << "Skip adding cleared " << message_id << " to " << dialog_id << " from " << source; LOG(INFO) << "Skip adding cleared " << message_id << " to " << dialog_id << " from " << source;
debug_add_message_to_dialog_fail_reason_ = "cleared full history"; debug_add_message_to_dialog_fail_reason_ = "cleared full history";

View File

@ -2468,6 +2468,8 @@ class MessagesManager : public Actor {
void cancel_send_deleted_message(DialogId dialog_id, Message *m, bool is_permanently_deleted); void cancel_send_deleted_message(DialogId dialog_id, Message *m, bool is_permanently_deleted);
bool has_message_sender_user_id(DialogId dialog_id, const Message *m) const;
static bool get_message_disable_web_page_preview(const Message *m); static bool get_message_disable_web_page_preview(const Message *m);
static int32 get_message_flags(const Message *m); static int32 get_message_flags(const Message *m);