From 8c43f751cd09097185e7bfe54f5c87261b9baf1a Mon Sep 17 00:00:00 2001 From: levlam Date: Sun, 13 Sep 2020 01:28:14 +0300 Subject: [PATCH] Synchronously send media group to keep the relative message order. GitOrigin-RevId: 7f6f0f1b47dae56f3bc459f81fc2922fdc7b46dc --- td/telegram/MessagesManager.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 3f2993250..1b548e6d6 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -21630,10 +21630,12 @@ void MessagesManager::on_upload_message_media_finished(int64 media_album_id, Dia request.finished_count++; if (request.finished_count == request.message_ids.size() || request.results[pos].is_error()) { - // send later, because some messages may be being deleted now + // must use send_closure_later if some messages may be being deleted now + // but this function is called only through send_closure_later, so there should be no being deleted messages + // we must to use synchronous calls to keep the correct message order during copying of multiple messages for (auto request_message_id : request.message_ids) { LOG(INFO) << "Send on_media_message_ready_to_send for " << request_message_id << " in " << dialog_id; - auto promise = PromiseCreator::lambda([actor_id = actor_id(this), media_album_id](Result result) { + auto promise = PromiseCreator::lambda([this, media_album_id](Result result) { if (result.is_error() || G()->close_flag()) { return; } @@ -21641,10 +21643,12 @@ void MessagesManager::on_upload_message_media_finished(int64 media_album_id, Dia auto m = result.move_as_ok(); CHECK(m != nullptr); CHECK(m->media_album_id == media_album_id); - send_closure_later(actor_id, &MessagesManager::do_send_message_group, media_album_id); + do_send_message_group(media_album_id); + // send_closure_later(actor_id, &MessagesManager::do_send_message_group, media_album_id); }); - send_closure_later(actor_id(this), &MessagesManager::on_media_message_ready_to_send, dialog_id, - request_message_id, std::move(promise)); + // send_closure_later(actor_id(this), &MessagesManager::on_media_message_ready_to_send, dialog_id, + // request_message_id, std::move(promise)); + on_media_message_ready_to_send(dialog_id, request_message_id, std::move(promise)); } } }