@@ -9485,15 +9485,32 @@ void MessagesManager::on_send_secret_message_success(int64 random_id, MessageId
9485
9485
9486
9486
void MessagesManager::delete_secret_messages(SecretChatId secret_chat_id, std::vector<int64> random_ids,
9487
9487
Promise<> promise) {
9488
- LOG(INFO) << "Delete messages with random_ids " << random_ids << " in " << secret_chat_id;
9489
- promise.set_value(Unit()); // TODO: set after event is saved
9488
+ LOG(DEBUG) << "On delete messages in " << secret_chat_id << " with random_ids " << random_ids;
9489
+ CHECK(secret_chat_id.is_valid());
9490
+
9490
9491
DialogId dialog_id(secret_chat_id);
9491
- Dialog *d = get_dialog_force(dialog_id);
9492
- if (d == nullptr) {
9492
+ if (!have_dialog_force(dialog_id)) {
9493
9493
LOG(ERROR) << "Ignore delete secret messages in unknown " << dialog_id;
9494
+ promise.set_value(Unit());
9494
9495
return;
9495
9496
}
9496
9497
9498
+ auto pending_secret_message = make_unique<PendingSecretMessage>();
9499
+ pending_secret_message->success_promise = std::move(promise);
9500
+ pending_secret_message->type = PendingSecretMessage::Type::DeleteMessages;
9501
+ pending_secret_message->dialog_id = dialog_id;
9502
+ pending_secret_message->random_ids = std::move(random_ids);
9503
+
9504
+ add_secret_message(std::move(pending_secret_message));
9505
+ }
9506
+
9507
+ void MessagesManager::finish_delete_secret_messages(DialogId dialog_id, std::vector<int64> random_ids,
9508
+ Promise<> promise) {
9509
+ LOG(INFO) << "Delete messages with random_ids " << random_ids << " in " << dialog_id;
9510
+ promise.set_value(Unit()); // TODO: set after event is saved
9511
+
9512
+ Dialog *d = get_dialog(dialog_id);
9513
+ CHECK(d != nullptr);
9497
9514
vector<MessageId> to_delete_message_ids;
9498
9515
for (auto &random_id : random_ids) {
9499
9516
auto message_id = get_message_id_by_random_id(d, random_id, "delete_secret_messages");
@@ -9514,14 +9531,32 @@ void MessagesManager::delete_secret_messages(SecretChatId secret_chat_id, std::v
9514
9531
9515
9532
void MessagesManager::delete_secret_chat_history(SecretChatId secret_chat_id, MessageId last_message_id,
9516
9533
Promise<> promise) {
9517
- promise.set_value(Unit()); // TODO: set after event is saved
9518
- auto dialog_id = DialogId(secret_chat_id);
9519
- Dialog *d = get_dialog_force(dialog_id);
9520
- if (d == nullptr) {
9521
- LOG(ERROR) << "Ignore delete secret chat history in unknown " << dialog_id;
9534
+ LOG(DEBUG) << "On delete history in " << secret_chat_id << " up to " << last_message_id;
9535
+ CHECK(secret_chat_id.is_valid());
9536
+
9537
+ DialogId dialog_id(secret_chat_id);
9538
+ if (!have_dialog_force(dialog_id)) {
9539
+ LOG(ERROR) << "Ignore delete history in unknown " << dialog_id;
9540
+ promise.set_value(Unit());
9522
9541
return;
9523
9542
}
9524
9543
9544
+ auto pending_secret_message = make_unique<PendingSecretMessage>();
9545
+ pending_secret_message->success_promise = std::move(promise);
9546
+ pending_secret_message->type = PendingSecretMessage::Type::DeleteHistory;
9547
+ pending_secret_message->dialog_id = dialog_id;
9548
+ pending_secret_message->last_message_id = last_message_id;
9549
+
9550
+ add_secret_message(std::move(pending_secret_message));
9551
+ }
9552
+
9553
+ void MessagesManager::finish_delete_secret_chat_history(DialogId dialog_id, MessageId last_message_id,
9554
+ Promise<> promise) {
9555
+ LOG(DEBUG) << "Delete history in " << dialog_id << " up to " << last_message_id;
9556
+ promise.set_value(Unit()); // TODO: set after event is saved
9557
+ Dialog *d = get_dialog(dialog_id);
9558
+ CHECK(d != nullptr);
9559
+
9525
9560
// TODO: probably last_message_id is not needed
9526
9561
delete_all_dialog_messages(d, false, true);
9527
9562
}
@@ -9775,6 +9810,16 @@ void MessagesManager::finish_add_secret_message(unique_ptr<PendingSecretMessage>
9775
9810
return;
9776
9811
}
9777
9812
9813
+ if (pending_secret_message->type == PendingSecretMessage::Type::DeleteMessages) {
9814
+ return finish_delete_secret_messages(pending_secret_message->dialog_id,
9815
+ std::move(pending_secret_message->random_ids),
9816
+ std::move(pending_secret_message->success_promise));
9817
+ }
9818
+ if (pending_secret_message->type == PendingSecretMessage::Type::DeleteHistory) {
9819
+ return finish_delete_secret_chat_history(pending_secret_message->dialog_id, pending_secret_message->last_message_id,
9820
+ std::move(pending_secret_message->success_promise));
9821
+ }
9822
+
9778
9823
auto d = get_dialog(pending_secret_message->message_info.dialog_id);
9779
9824
CHECK(d != nullptr);
9780
9825
auto random_id = pending_secret_message->message_info.random_id;
0 commit comments