@@ -13247,6 +13247,27 @@ unique_ptr<MessagesManager::Message> MessagesManager::delete_message(Dialog *d,
1324713247 return do_delete_message(d, message_id, is_permanently_deleted, false, need_update_dialog_pos, source);
1324813248}
1324913249
13250+ void MessagesManager::register_dialog_ephemeral_message(Dialog *d, EphemeralMessageId ephemeral_message_id,
13251+ MessageId message_id) {
13252+ if (ephemeral_message_id.is_valid() && d->ephemeral_message_ids.emplace(ephemeral_message_id, message_id).second &&
13253+ d->ephemeral_message_ids.size() > MAX_DIALOG_EPHEMERAL_MESSAGES) {
13254+ auto oldest_message_id = message_id;
13255+ for (const auto &it : d->ephemeral_message_ids) {
13256+ if (it.second < oldest_message_id) {
13257+ oldest_message_id = it.second;
13258+ }
13259+ }
13260+ if (oldest_message_id.is_server()) {
13261+ send_closure_later(actor_id(this), &MessagesManager::do_delete_message_ephemeral_message,
13262+ MessageFullId{d->dialog_id, oldest_message_id});
13263+ } else {
13264+ send_closure_later(actor_id(this), &MessagesManager::delete_dialog_messages, d->dialog_id,
13265+ vector<MessageId>{oldest_message_id}, false, "register_dialog_ephemeral_message");
13266+ }
13267+ on_dialog_updated(d->dialog_id, "register_dialog_ephemeral_message");
13268+ }
13269+ }
13270+
1325013271void MessagesManager::add_random_id_to_message_id_correspondence(Dialog *d, int64 random_id, MessageId message_id) {
1325113272 CHECK(d != nullptr);
1325213273 CHECK(d->dialog_id.get_type() == DialogType::SecretChat || message_id.is_yet_unsent());
@@ -23857,6 +23878,13 @@ void MessagesManager::delete_message_ephemeral_message(MessageFullId message_ful
2385723878 promise.set_value(Unit());
2385823879}
2385923880
23881+ void MessagesManager::do_delete_message_ephemeral_message(MessageFullId message_full_id) {
23882+ Message *m = get_message_force(message_full_id, "delete_message_ephemeral_message");
23883+ if (m != nullptr && m->ephemeral_message != nullptr) {
23884+ set_message_ephemeral_message(get_dialog(message_full_id.get_dialog_id()), m, nullptr);
23885+ }
23886+ }
23887+
2386023888void MessagesManager::set_message_fact_check(MessageFullId message_full_id,
2386123889 td_api::object_ptr<td_api::formattedText> &&text,
2386223890 Promise<Unit> &&promise) {
@@ -31567,20 +31595,7 @@ MessagesManager::Message *MessagesManager::add_message_to_dialog(Dialog *d, uniq
3156731595 default:
3156831596 UNREACHABLE();
3156931597 }
31570- if (m->ephemeral_message_id.is_valid()) {
31571- if (d->ephemeral_message_ids.emplace(m->ephemeral_message_id, m->message_id).second &&
31572- d->ephemeral_message_ids.size() > MAX_DIALOG_EPHEMERAL_MESSAGES) {
31573- auto oldest_message_id = m->message_id;
31574- for (const auto &it : d->ephemeral_message_ids) {
31575- if (it.second < oldest_message_id) {
31576- oldest_message_id = it.second;
31577- }
31578- }
31579- send_closure_later(actor_id(this), &MessagesManager::delete_dialog_messages, dialog_id,
31580- vector<MessageId>{oldest_message_id}, false, "add_ephemeral_message");
31581- on_dialog_updated(dialog_id, "add_ephemeral_message");
31582- }
31583- }
31598+ register_dialog_ephemeral_message(d, m->ephemeral_message_id, m->message_id);
3158431599
3158531600 if (m->message_id.is_yet_unsent() || dialog_type == DialogType::SecretChat) {
3158631601 add_random_id_to_message_id_correspondence(d, m->random_id, m->message_id);
0 commit comments