Try to create secret chat dialog when receive new message in it.

This commit is contained in:
levlam 2021-05-16 02:11:37 +03:00
parent add28462a0
commit 8a7a3f403b
2 changed files with 29 additions and 17 deletions

View File

@ -13068,6 +13068,10 @@ void MessagesManager::on_get_secret_message(SecretChatId secret_chat_id, UserId
message_info.ttl = message->ttl_; message_info.ttl = message->ttl_;
Dialog *d = get_dialog_force(message_info.dialog_id, "on_get_secret_message"); Dialog *d = get_dialog_force(message_info.dialog_id, "on_get_secret_message");
if (d == nullptr && have_dialog_info_force(message_info.dialog_id)) {
force_create_dialog(message_info.dialog_id, "on_get_secret_message", true, true);
d = get_dialog(message_info.dialog_id);
}
if (d == nullptr) { if (d == nullptr) {
LOG(ERROR) << "Ignore secret message in unknown " << message_info.dialog_id; LOG(ERROR) << "Ignore secret message in unknown " << message_info.dialog_id;
pending_secret_message->success_promise.set_error(Status::Error(500, "Chat not found")); pending_secret_message->success_promise.set_error(Status::Error(500, "Chat not found"));
@ -13158,6 +13162,10 @@ void MessagesManager::on_secret_chat_screenshot_taken(SecretChatId secret_chat_i
message_info.content = create_screenshot_taken_message_content(); message_info.content = create_screenshot_taken_message_content();
Dialog *d = get_dialog_force(message_info.dialog_id, "on_secret_chat_screenshot_taken"); Dialog *d = get_dialog_force(message_info.dialog_id, "on_secret_chat_screenshot_taken");
if (d == nullptr && have_dialog_info_force(message_info.dialog_id)) {
force_create_dialog(message_info.dialog_id, "on_get_secret_message", true, true);
d = get_dialog(message_info.dialog_id);
}
if (d == nullptr) { if (d == nullptr) {
LOG(ERROR) << "Ignore secret message in unknown " << message_info.dialog_id; LOG(ERROR) << "Ignore secret message in unknown " << message_info.dialog_id;
pending_secret_message->success_promise.set_error(Status::Error(500, "Chat not found")); pending_secret_message->success_promise.set_error(Status::Error(500, "Chat not found"));
@ -13192,6 +13200,10 @@ void MessagesManager::on_secret_chat_ttl_changed(SecretChatId secret_chat_id, Us
message_info.content = create_chat_set_ttl_message_content(ttl); message_info.content = create_chat_set_ttl_message_content(ttl);
Dialog *d = get_dialog_force(message_info.dialog_id, "on_secret_chat_ttl_changed"); Dialog *d = get_dialog_force(message_info.dialog_id, "on_secret_chat_ttl_changed");
if (d == nullptr && have_dialog_info_force(message_info.dialog_id)) {
force_create_dialog(message_info.dialog_id, "on_get_secret_message", true, true);
d = get_dialog(message_info.dialog_id);
}
if (d == nullptr) { if (d == nullptr) {
LOG(ERROR) << "Ignore secret message in unknown " << message_info.dialog_id; LOG(ERROR) << "Ignore secret message in unknown " << message_info.dialog_id;
pending_secret_message->success_promise.set_error(Status::Error(500, "Chat not found")); pending_secret_message->success_promise.set_error(Status::Error(500, "Chat not found"));

View File

@ -352,44 +352,44 @@ unique_ptr<SecretChatActor::Context> SecretChatsManager::make_secret_chat_contex
void on_inbound_message(UserId user_id, MessageId message_id, int32 date, void on_inbound_message(UserId user_id, MessageId message_id, int32 date,
tl_object_ptr<telegram_api::encryptedFile> file, tl_object_ptr<telegram_api::encryptedFile> file,
tl_object_ptr<secret_api::decryptedMessage> message, Promise<> promise) override { tl_object_ptr<secret_api::decryptedMessage> message, Promise<> promise) override {
send_closure(G()->messages_manager(), &MessagesManager::on_get_secret_message, secret_chat_id_, user_id, send_closure_later(G()->messages_manager(), &MessagesManager::on_get_secret_message, secret_chat_id_, user_id,
message_id, date, std::move(file), std::move(message), std::move(promise)); message_id, date, std::move(file), std::move(message), std::move(promise));
} }
void on_send_message_error(int64 random_id, Status error, Promise<> promise) override { void on_send_message_error(int64 random_id, Status error, Promise<> promise) override {
send_closure(G()->messages_manager(), &MessagesManager::on_send_secret_message_error, random_id, std::move(error), send_closure_later(G()->messages_manager(), &MessagesManager::on_send_secret_message_error, random_id,
std::move(promise)); std::move(error), std::move(promise));
} }
void on_send_message_ack(int64 random_id) override { void on_send_message_ack(int64 random_id) override {
send_closure(G()->messages_manager(), &MessagesManager::on_send_message_get_quick_ack, random_id); send_closure_later(G()->messages_manager(), &MessagesManager::on_send_message_get_quick_ack, random_id);
} }
void on_send_message_ok(int64 random_id, MessageId message_id, int32 date, void on_send_message_ok(int64 random_id, MessageId message_id, int32 date,
tl_object_ptr<telegram_api::EncryptedFile> file, Promise<> promise) override { tl_object_ptr<telegram_api::EncryptedFile> file, Promise<> promise) override {
send_closure(G()->messages_manager(), &MessagesManager::on_send_secret_message_success, random_id, message_id, send_closure_later(G()->messages_manager(), &MessagesManager::on_send_secret_message_success, random_id,
date, std::move(file), std::move(promise)); message_id, date, std::move(file), std::move(promise));
} }
void on_delete_messages(std::vector<int64> random_ids, Promise<> promise) override { void on_delete_messages(std::vector<int64> random_ids, Promise<> promise) override {
send_closure(G()->messages_manager(), &MessagesManager::delete_secret_messages, secret_chat_id_, send_closure_later(G()->messages_manager(), &MessagesManager::delete_secret_messages, secret_chat_id_,
std::move(random_ids), std::move(promise)); std::move(random_ids), std::move(promise));
} }
void on_flush_history(bool remove_from_dialog_list, MessageId message_id, Promise<> promise) override { void on_flush_history(bool remove_from_dialog_list, MessageId message_id, Promise<> promise) override {
send_closure(G()->messages_manager(), &MessagesManager::delete_secret_chat_history, secret_chat_id_, send_closure_later(G()->messages_manager(), &MessagesManager::delete_secret_chat_history, secret_chat_id_,
remove_from_dialog_list, message_id, std::move(promise)); remove_from_dialog_list, message_id, std::move(promise));
} }
void on_read_message(int64 random_id, Promise<> promise) override { void on_read_message(int64 random_id, Promise<> promise) override {
send_closure(G()->messages_manager(), &MessagesManager::open_secret_message, secret_chat_id_, random_id, send_closure_later(G()->messages_manager(), &MessagesManager::open_secret_message, secret_chat_id_, random_id,
std::move(promise)); std::move(promise));
} }
void on_screenshot_taken(UserId user_id, MessageId message_id, int32 date, int64 random_id, void on_screenshot_taken(UserId user_id, MessageId message_id, int32 date, int64 random_id,
Promise<> promise) override { Promise<> promise) override {
send_closure(G()->messages_manager(), &MessagesManager::on_secret_chat_screenshot_taken, secret_chat_id_, user_id, send_closure_later(G()->messages_manager(), &MessagesManager::on_secret_chat_screenshot_taken, secret_chat_id_,
message_id, date, random_id, std::move(promise)); user_id, message_id, date, random_id, std::move(promise));
} }
void on_set_ttl(UserId user_id, MessageId message_id, int32 date, int32 ttl, int64 random_id, void on_set_ttl(UserId user_id, MessageId message_id, int32 date, int32 ttl, int64 random_id,
Promise<> promise) override { Promise<> promise) override {
send_closure(G()->messages_manager(), &MessagesManager::on_secret_chat_ttl_changed, secret_chat_id_, user_id, send_closure_later(G()->messages_manager(), &MessagesManager::on_secret_chat_ttl_changed, secret_chat_id_,
message_id, date, ttl, random_id, std::move(promise)); user_id, message_id, date, ttl, random_id, std::move(promise));
} }
private: private: