From acbc2cebf4823ffbf4b6f3420067f69d87d44bd7 Mon Sep 17 00:00:00 2001 From: levlam Date: Sun, 21 Aug 2022 07:24:53 +0300 Subject: [PATCH] Process request result in MessagesManager actor context. --- td/telegram/MessagesManager.cpp | 27 +++++++++++++++++---------- td/telegram/MessagesManager.h | 2 ++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 340189618..eb5e46ad0 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -9393,7 +9393,7 @@ void MessagesManager::after_get_difference() { if (!have_input_peer(dialog_id, AccessRights::Read) || (d != nullptr && message_id <= td::max(d->last_clear_history_message_id, d->max_unavailable_message_id))) { - update_message_ids_to_delete.push_back(it.first); + update_message_ids_to_delete.push_back(full_message_id); } break; } @@ -9408,15 +9408,13 @@ void MessagesManager::after_get_difference() { dump_debug_message_op(get_dialog(dialog_id)); } if (message_id <= d->last_new_message_id) { - get_message_from_server(it.first, PromiseCreator::lambda([full_message_id](Result result) { - if (result.is_error()) { - LOG(WARNING) - << "Failed to get missing " << full_message_id << ": " << result.error(); - } else { - LOG(WARNING) << "Successfully get missing " << full_message_id; - } - }), - "get missing"); + get_message_from_server( + full_message_id, + PromiseCreator::lambda([actor_id = actor_id(this), full_message_id](Result result) { + send_closure(actor_id, &MessagesManager::on_restore_missing_message_after_get_difference, + full_message_id, std::move(result)); + }), + "get missing"); } else if (dialog_id.get_type() == DialogType::Channel) { LOG(INFO) << "Schedule getDifference in " << dialog_id.get_channel_id(); channel_get_difference_retry_timeout_.add_timeout_in(dialog_id.get(), 0.001); @@ -9452,6 +9450,15 @@ void MessagesManager::after_get_difference() { } } +void MessagesManager::on_restore_missing_message_after_get_difference(FullMessageId full_message_id, + Result result) { + if (result.is_error()) { + LOG(WARNING) << "Failed to get missing " << full_message_id << ": " << result.error(); + } else { + LOG(WARNING) << "Successfully get missing " << full_message_id; + } +} + void MessagesManager::on_get_empty_messages(DialogId dialog_id, const vector &empty_message_ids) { if (!empty_message_ids.empty()) { delete_dialog_messages(dialog_id, empty_message_ids, true, true, "on_get_empty_messages"); diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 3367fd79e..5edb22de7 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -2950,6 +2950,8 @@ class MessagesManager final : public Actor { void ttl_db_loop(double server_now); void ttl_db_on_result(Result, int32>> r_result, bool dummy); + void on_restore_missing_message_after_get_difference(FullMessageId full_message_id, Result result); + void on_get_message_link_dialog(MessageLinkInfo &&info, Promise &&promise); void on_get_message_link_message(MessageLinkInfo &&info, DialogId dialog_id, Promise &&promise);