Prevent adding back of deleted messages.

This commit is contained in:
levlam 2024-02-29 17:27:12 +03:00
parent 29718b5880
commit ee25355ba6
2 changed files with 16 additions and 1 deletions

View File

@ -358,6 +358,10 @@ unique_ptr<QuickReplyManager::QuickReplyMessage> QuickReplyManager::create_messa
LOG(ERROR) << "Receive invalid quick reply " << shortcut_id << " from " << source; LOG(ERROR) << "Receive invalid quick reply " << shortcut_id << " from " << source;
break; 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(); auto my_dialog_id = td_->dialog_manager_->get_my_dialog_id();
if (DialogId(message->peer_id_) != my_dialog_id || message->from_id_ != nullptr || 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) { if (s == nullptr) {
return; 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); delete_quick_reply_messages(s, message_ids);
} }
@ -864,13 +874,16 @@ void QuickReplyManager::delete_quick_reply_messages(Shortcut *s, const vector<Me
bool is_list_changed = false; bool is_list_changed = false;
for (auto &message_id : message_ids) { for (auto &message_id : message_ids) {
auto it = get_message_it(s, message_id); auto it = get_message_it(s, message_id);
if (it == s->messages_.end()) { if (it != s->messages_.end()) {
if (it == s->messages_.begin()) { if (it == s->messages_.begin()) {
is_list_changed = true; is_list_changed = true;
} }
is_changed = true; is_changed = true;
s->messages_.erase(it); s->messages_.erase(it);
} }
if (message_id.is_server()) {
deleted_message_full_ids_.insert({s->shortcut_id_, message_id});
}
} }
if (s->messages_.empty()) { if (s->messages_.empty()) {
send_update_quick_reply_shortcut_deleted(s); send_update_quick_reply_shortcut_deleted(s);

View File

@ -250,6 +250,8 @@ class QuickReplyManager final : public Actor {
FlatHashMap<QuickReplyShortcutId, vector<Promise<Unit>>, QuickReplyShortcutIdHash> get_shortcut_messages_queries_; FlatHashMap<QuickReplyShortcutId, vector<Promise<Unit>>, QuickReplyShortcutIdHash> get_shortcut_messages_queries_;
FlatHashSet<QuickReplyMessageFullId, QuickReplyMessageFullIdHash> deleted_message_full_ids_;
Td *td_; Td *td_;
ActorShared<> parent_; ActorShared<> parent_;
}; };