From ee25355ba6b862d3860548e65df1992bc4f6fff1 Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 29 Feb 2024 17:27:12 +0300 Subject: [PATCH] Prevent adding back of deleted messages. --- td/telegram/QuickReplyManager.cpp | 15 ++++++++++++++- td/telegram/QuickReplyManager.h | 2 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/td/telegram/QuickReplyManager.cpp b/td/telegram/QuickReplyManager.cpp index c8931293f..23d4a4425 100644 --- a/td/telegram/QuickReplyManager.cpp +++ b/td/telegram/QuickReplyManager.cpp @@ -358,6 +358,10 @@ unique_ptr QuickReplyManager::create_messa LOG(ERROR) << "Receive invalid quick reply " << shortcut_id << " from " << source; break; } + if (deleted_message_full_ids_.count({shortcut_id, message_id})) { + // a previously deleted message + break; + } auto my_dialog_id = td_->dialog_manager_->get_my_dialog_id(); if (DialogId(message->peer_id_) != my_dialog_id || message->from_id_ != nullptr || @@ -856,6 +860,12 @@ void QuickReplyManager::delete_quick_reply_messages(QuickReplyShortcutId shortcu if (s == nullptr) { return; } + for (auto message_id : message_ids) { + if (!message_id.is_server()) { + LOG(ERROR) << "Receive delete of " << message_ids; + return; + } + } delete_quick_reply_messages(s, message_ids); } @@ -864,13 +874,16 @@ void QuickReplyManager::delete_quick_reply_messages(Shortcut *s, const vectormessages_.end()) { + if (it != s->messages_.end()) { if (it == s->messages_.begin()) { is_list_changed = true; } is_changed = true; s->messages_.erase(it); } + if (message_id.is_server()) { + deleted_message_full_ids_.insert({s->shortcut_id_, message_id}); + } } if (s->messages_.empty()) { send_update_quick_reply_shortcut_deleted(s); diff --git a/td/telegram/QuickReplyManager.h b/td/telegram/QuickReplyManager.h index b39dbb53f..4b0859188 100644 --- a/td/telegram/QuickReplyManager.h +++ b/td/telegram/QuickReplyManager.h @@ -250,6 +250,8 @@ class QuickReplyManager final : public Actor { FlatHashMap>, QuickReplyShortcutIdHash> get_shortcut_messages_queries_; + FlatHashSet deleted_message_full_ids_; + Td *td_; ActorShared<> parent_; };