aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--td/telegram/MessagesManager.cpp10
-rw-r--r--td/telegram/MessagesManager.h1
2 files changed, 9 insertions, 2 deletions
diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp
index 436f34eee..a7248e02d 100644
--- a/td/telegram/MessagesManager.cpp
+++ b/td/telegram/MessagesManager.cpp
@@ -4312,7 +4312,8 @@ void MessagesManager::on_new_ephemeral_message(telegram_api::object_ptr<telegram
force_create_dialog(dialog_id, "on_new_ephemeral_message");
d = get_dialog(dialog_id);
}
- if (d == nullptr || d->ephemeral_message_ids.count(message_info.ephemeral_message_id) != 0) {
+ if (d == nullptr || d->ephemeral_message_ids.count(message_info.ephemeral_message_id) != 0 ||
+ d->deleted_ephemeral_message_ids.count(message_info.ephemeral_message_id) != 0) {
return;
}
message_info.message_id = get_next_local_message_id(d);
@@ -4334,7 +4335,7 @@ MessageFullId MessagesManager::on_edited_ephemeral_message(
}
force_create_dialog(dialog_id, "on_edited_ephemeral_message", true);
Dialog *d = get_dialog(dialog_id);
- if (d == nullptr) {
+ if (d == nullptr || d->deleted_ephemeral_message_ids.count(message_info.ephemeral_message_id) != 0) {
return MessageFullId();
}
CHECK(d->ephemeral_message_ids.count(message_info.ephemeral_message_id) == 0);
@@ -4351,6 +4352,11 @@ void MessagesManager::on_delete_ephemeral_messages(DialogId dialog_id,
}
vector<MessageId> message_ids;
for (auto ephemeral_message_id : ephemeral_message_ids) {
+ if (!ephemeral_message_id.is_valid()) {
+ LOG(ERROR) << "Receive " << ephemeral_message_id;
+ continue;
+ }
+ d->deleted_ephemeral_message_ids.insert(ephemeral_message_id);
auto it = d->ephemeral_message_ids.find(ephemeral_message_id);
if (it != d->ephemeral_message_ids.end()) {
message_ids.push_back(it->second);
diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h
index 60bb4a1e7..8eaf7c97c 100644
--- a/td/telegram/MessagesManager.h
+++ b/td/telegram/MessagesManager.h
@@ -1440,6 +1440,7 @@ class MessagesManager final : public Actor {
// are different
WaitFreeHashSet<MessageId, MessageIdHash> deleted_message_ids;
+ WaitFreeHashSet<EphemeralMessageId, EphemeralMessageIdHash> deleted_ephemeral_message_ids;
string client_data;