Skip to content

Commit 0588096

Browse files
committed
Add MessagesManager::register_dialog_ephemeral_message.
1 parent a058a65 commit 0588096

2 files changed

Lines changed: 33 additions & 14 deletions

File tree

‎td/telegram/MessagesManager.cpp‎

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
1325013271
void 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+
2386023888
void 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);

‎td/telegram/MessagesManager.h‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2322,6 +2322,10 @@ class MessagesManager final : public Actor {
23222322

23232323
void delete_message_files(DialogId dialog_id, const Message *m) const;
23242324

2325+
void do_delete_message_ephemeral_message(MessageFullId message_full_id);
2326+
2327+
void register_dialog_ephemeral_message(Dialog *d, EphemeralMessageId ephemeral_message_id, MessageId message_id);
2328+
23252329
static void add_random_id_to_message_id_correspondence(Dialog *d, int64 random_id, MessageId message_id);
23262330

23272331
static void delete_random_id_to_message_id_correspondence(Dialog *d, int64 random_id, MessageId message_id);

0 commit comments

Comments
 (0)