Use MultiPromise in get_messages_from_server.

GitOrigin-RevId: e257dc31983b987cac0248d1a8dcf4b3cb2bd506
This commit is contained in:
levlam 2019-11-30 15:50:27 +03:00
parent b78507e81d
commit 1d9c00e9f4

View File

@ -13200,12 +13200,12 @@ void MessagesManager::get_messages_from_server(vector<FullMessageId> &&message_i
} }
} }
// TODO MultiPromise MultiPromiseActorSafe mpas{"GetMessagesFromServerMultiPromiseActor"};
size_t query_count = !ordinary_message_ids.empty() + channel_message_ids.size(); mpas.add_promise(std::move(promise));
LOG_IF(ERROR, query_count > 1 && promise) << "Promise will be called after first query returns"; auto lock = mpas.get_promise();
if (!ordinary_message_ids.empty()) { if (!ordinary_message_ids.empty()) {
td_->create_handler<GetMessagesQuery>(std::move(promise))->send(std::move(ordinary_message_ids)); td_->create_handler<GetMessagesQuery>(mpas.get_promise())->send(std::move(ordinary_message_ids));
} }
if (!scheduled_message_ids.empty()) { if (!scheduled_message_ids.empty()) {
@ -13217,12 +13217,13 @@ void MessagesManager::get_messages_from_server(vector<FullMessageId> &&message_i
auto input_channel = td_->contacts_manager_->get_input_channel(it.first); auto input_channel = td_->contacts_manager_->get_input_channel(it.first);
if (input_channel == nullptr) { if (input_channel == nullptr) {
LOG(ERROR) << "Can't find info about " << it.first << " to get a message from it"; LOG(ERROR) << "Can't find info about " << it.first << " to get a message from it";
promise.set_error(Status::Error(6, "Can't access the chat")); mpas.get_promise().set_error(Status::Error(6, "Can't access the chat"));
continue; continue;
} }
td_->create_handler<GetChannelMessagesQuery>(std::move(promise)) td_->create_handler<GetChannelMessagesQuery>(mpas.get_promise())
->send(it.first, std::move(input_channel), std::move(it.second)); ->send(it.first, std::move(input_channel), std::move(it.second));
} }
lock.set_value(Unit());
} }
bool MessagesManager::is_message_edited_recently(FullMessageId full_message_id, int32 seconds) { bool MessagesManager::is_message_edited_recently(FullMessageId full_message_id, int32 seconds) {