diff options
| author | levlam <levlam@telegram.org> | 2026-07-01 16:08:07 +0300 |
|---|---|---|
| committer | levlam <levlam@telegram.org> | 2026-07-01 16:08:07 +0300 |
| commit | 5113b7d5387de5a1eadae84f45a6c62ac501b05c (patch) | |
| tree | 078f227f68c712a45b5e49e7ea93f03315156b95 | |
| parent | 406d07ba55c7f763de39803fa1a042d85d1a2850 (diff) | |
Support ephemeral messages in delete_sent_message_on_server.
| -rw-r--r-- | td/telegram/MessagesManager.cpp | 32 | ||||
| -rw-r--r-- | td/telegram/MessagesManager.h | 5 |
2 files changed, 22 insertions, 15 deletions
diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 20350179f..dd01690c0 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -1673,7 +1673,8 @@ class SendMediaQuery final : public Td::ResultHandler { LOG(ERROR) << "Receive wrong result for sending ephemeral message with random_id " << random_id_ << " to " << dialog_id_ << ": " << oneline(to_string(ptr)); } else { - td_->messages_manager_->on_update_ephemeral_message_id(random_id_, EphemeralMessageId(sent_messages[0]->id_)); + td_->messages_manager_->on_update_ephemeral_message_id(random_id_, EphemeralMessageId(sent_messages[0]->id_), + UserId(sent_messages[0]->receiver_id_)); } } td_->updates_manager_->on_get_updates(std::move(ptr), Promise<Unit>()); @@ -8492,11 +8493,8 @@ void MessagesManager::delete_messages(DialogId dialog_id, const vector<MessageId } void MessagesManager::delete_sent_message_on_server(DialogId dialog_id, MessageId message_id, - EphemeralMessageId ephemeral_message_id, MessageId old_message_id) { - if (ephemeral_message_id.is_valid()) { - // TODO - return; - } + EphemeralMessageId ephemeral_message_id, UserId receiver_user_id, + MessageId old_message_id) { // this would be a no-op, because replies have already been removed in cancel_send_message_query // update_reply_to_message_id(dialog_id, old_message_id, message_id, false, "delete_sent_message_on_server"); @@ -8506,6 +8504,12 @@ void MessagesManager::delete_sent_message_on_server(DialogId dialog_id, MessageI LOG(INFO) << "Ignore sent " << message_id << " in inaccessible " << dialog_id; return; } + if (receiver_user_id.is_valid()) { + CHECK(ephemeral_message_id.is_valid()); + td_->message_query_manager_->delete_ephemeral_message_on_server(dialog_id, DialogId(receiver_user_id), + ephemeral_message_id, 0, Auto()); + return; + } LOG(INFO) << "Delete already deleted sent " << message_id << " in " << dialog_id << " from server"; Dialog *d = get_dialog(dialog_id); @@ -11869,7 +11873,8 @@ MessageFullId MessagesManager::on_get_message(MessageInfo &&message_info, const being_readded_message_full_id_ = {dialog_id, old_message_id}; auto old_message = delete_message(d, old_message_id, false, &need_update_dialog_pos, "add sent message"); if (old_message == nullptr) { - delete_sent_message_on_server(dialog_id, message_id, new_message->ephemeral_message_id, old_message_id); + delete_sent_message_on_server(dialog_id, message_id, new_message->ephemeral_message_id, + new_message->receiver_user_id, old_message_id); being_readded_message_full_id_ = MessageFullId(); return MessageFullId(); } @@ -25452,7 +25457,7 @@ bool MessagesManager::on_update_message_id(int64 random_id, MessageId new_messag being_sent_messages_.erase(it); if (!have_message_force({dialog_id, old_message_id}, "on_update_message_id")) { - delete_sent_message_on_server(dialog_id, new_message_id, {}, old_message_id); + delete_sent_message_on_server(dialog_id, new_message_id, {}, {}, old_message_id); return true; } @@ -25462,9 +25467,10 @@ bool MessagesManager::on_update_message_id(int64 random_id, MessageId new_messag return true; } -void MessagesManager::on_update_ephemeral_message_id(int64 random_id, EphemeralMessageId ephemeral_message_id) { - if (!ephemeral_message_id.is_valid()) { - LOG(ERROR) << "Receive " << ephemeral_message_id << " with random_id " << random_id; +void MessagesManager::on_update_ephemeral_message_id(int64 random_id, EphemeralMessageId ephemeral_message_id, + UserId receiver_user_id) { + if (!ephemeral_message_id.is_valid() || !receiver_user_id.is_valid()) { + LOG(ERROR) << "Receive " << ephemeral_message_id << " for " << receiver_user_id << " with random_id " << random_id; return; } @@ -25475,7 +25481,7 @@ void MessagesManager::on_update_ephemeral_message_id(int64 random_id, EphemeralM being_sent_messages_.erase(it); if (!have_message_force({dialog_id, old_message_id}, "on_update_ephemeral_message_id")) { - delete_sent_message_on_server(dialog_id, {}, ephemeral_message_id, old_message_id); + delete_sent_message_on_server(dialog_id, {}, ephemeral_message_id, receiver_user_id, old_message_id); return; } @@ -27669,7 +27675,7 @@ MessageFullId MessagesManager::on_send_message_success(int64 random_id, MessageI being_readded_message_full_id_ = {dialog_id, old_message_id}; auto sent_message = delete_message(d, old_message_id, false, &need_update_dialog_pos, source); if (sent_message == nullptr) { - delete_sent_message_on_server(dialog_id, new_message_id, {}, old_message_id); + delete_sent_message_on_server(dialog_id, new_message_id, {}, {}, old_message_id); being_readded_message_full_id_ = MessageFullId(); return {}; } diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 4a6e18cae..d107d7ed4 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -264,7 +264,8 @@ class MessagesManager final : public Actor { bool on_update_message_id(int64 random_id, MessageId new_message_id, const char *source); - void on_update_ephemeral_message_id(int64 random_id, EphemeralMessageId ephemeral_message_id); + void on_update_ephemeral_message_id(int64 random_id, EphemeralMessageId ephemeral_message_id, + UserId receiver_user_id); void on_update_dialog_draft_message(DialogId dialog_id, MessageId top_thread_message_id, telegram_api::object_ptr<telegram_api::DraftMessage> &&draft_message, @@ -2054,7 +2055,7 @@ class MessagesManager final : public Actor { void delete_all_dialog_messages(Dialog *d, bool remove_from_dialog_list, bool is_permanently_deleted); void delete_sent_message_on_server(DialogId dialog_id, MessageId message_id, EphemeralMessageId ephemeral_message_id, - MessageId old_message_id); + UserId receiver_user_id, MessageId old_message_id); static vector<MessageId> find_dialog_messages(const Dialog *d, const std::function<bool(const Message *)> &condition); |
