Prevent adding back of deleted messages.
This commit is contained in:
parent
29718b5880
commit
ee25355ba6
@ -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);
|
||||||
|
@ -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_;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user