Simplify and optimize RecentDialogList::load_dialogs.

This commit is contained in:
levlam 2021-09-13 21:36:07 +03:00
parent 4b641df524
commit a68163b94c

View File

@ -122,28 +122,25 @@ bool RecentDialogList::load_dialogs(Promise<Unit> &&promise) {
resolve_dialogs_multipromise_.set_ignore_errors(true); resolve_dialogs_multipromise_.set_ignore_errors(true);
auto lock = resolve_dialogs_multipromise_.get_promise(); auto lock = resolve_dialogs_multipromise_.get_promise();
vector<DialogId> dialog_ids;
for (auto &found_dialog : found_dialogs) { for (auto &found_dialog : found_dialogs) {
if (found_dialog[0] == '@') { if (found_dialog[0] == '@') {
td_->messages_manager_->search_public_dialog(found_dialog, false, resolve_dialogs_multipromise_.get_promise()); td_->messages_manager_->search_public_dialog(found_dialog, false, resolve_dialogs_multipromise_.get_promise());
} else {
dialog_ids.push_back(DialogId(to_integer<int64>(found_dialog)));
} }
} }
if (G()->parameters().use_message_db) { if (!dialog_ids.empty()) {
for (auto &found_dialog : found_dialogs) { if (G()->parameters().use_message_db) {
if (found_dialog[0] != '@') { td_->messages_manager_->load_dialogs(std::move(dialog_ids), resolve_dialogs_multipromise_.get_promise());
auto dialog_id = DialogId(to_integer<int64>(found_dialog)); } else {
CHECK(dialog_id.is_valid()); td_->messages_manager_->get_dialogs_from_list(
// TODO use asynchronous load DialogListId(FolderId::main()), 102,
// get_dialog(dialog_id, resolve_dialogs_multipromise_.get_promise()); PromiseCreator::lambda(
td_->messages_manager_->have_dialog_force(dialog_id, "RecentDialogList::load_dialogs"); [promise = resolve_dialogs_multipromise_.get_promise()](
} td_api::object_ptr<td_api::chats> &&chats) mutable { promise.set_value(Unit()); }));
td_->contacts_manager_->search_contacts("", 1, resolve_dialogs_multipromise_.get_promise());
} }
} else {
td_->messages_manager_->get_dialogs_from_list(
DialogListId(FolderId::main()), 102,
PromiseCreator::lambda(
[promise = resolve_dialogs_multipromise_.get_promise()](
td_api::object_ptr<td_api::chats> &&chats) mutable { promise.set_value(Unit()); }));
td_->contacts_manager_->search_contacts("", 1, resolve_dialogs_multipromise_.get_promise());
} }
lock.set_value(Unit()); lock.set_value(Unit());