aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2026-07-01 16:08:07 +0300
committerlevlam <levlam@telegram.org>2026-07-01 16:08:07 +0300
commit5113b7d5387de5a1eadae84f45a6c62ac501b05c (patch)
tree078f227f68c712a45b5e49e7ea93f03315156b95
parent406d07ba55c7f763de39803fa1a042d85d1a2850 (diff)
Support ephemeral messages in delete_sent_message_on_server.
-rw-r--r--td/telegram/MessagesManager.cpp32
-rw-r--r--td/telegram/MessagesManager.h5
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);