From 77c8eb961735735416fc8de8f7ff7020c92aece4 Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 13 Sep 2021 20:52:17 +0300 Subject: [PATCH] Add promise to RecentDialogList::get_dialogs. --- td/telegram/MessagesManager.cpp | 8 +------- td/telegram/RecentDialogList.cpp | 14 +++++++++++--- td/telegram/RecentDialogList.h | 8 ++++---- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 50782456d..727fbbdbb 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -16248,13 +16248,7 @@ std::pair> MessagesManager::search_dialogs(const string return {}; } if (query.empty()) { - if (!recently_found_dialogs_.load_dialogs(promise)) { - return {}; - } - - promise.set_value(Unit()); - - return recently_found_dialogs_.get_dialogs(limit); + return recently_found_dialogs_.get_dialogs(limit, std::move(promise)); } auto result = dialogs_hints_.search(query, limit); diff --git a/td/telegram/RecentDialogList.cpp b/td/telegram/RecentDialogList.cpp index 359963c81..957d01342 100644 --- a/td/telegram/RecentDialogList.cpp +++ b/td/telegram/RecentDialogList.cpp @@ -27,7 +27,7 @@ string RecentDialogList::get_binlog_key() const { return PSTRING() << name_ << "_dialog_usernames_and_ids"; } -void RecentDialogList::save_dialogs() { +void RecentDialogList::save_dialogs() const { if (dialogs_loaded_ < 2) { return; } @@ -66,8 +66,9 @@ void RecentDialogList::save_dialogs() { G()->td_db()->get_binlog_pmc()->set(get_binlog_key(), value); } -bool RecentDialogList::load_dialogs(Promise &promise) { +bool RecentDialogList::load_dialogs(Promise &&promise) { if (dialogs_loaded_ >= 2) { + promise.set_value(Unit()); return true; } @@ -77,6 +78,7 @@ bool RecentDialogList::load_dialogs(Promise &promise) { if (!dialog_ids_.empty()) { save_dialogs(); } + promise.set_value(Unit()); return true; } @@ -109,6 +111,7 @@ bool RecentDialogList::load_dialogs(Promise &promise) { if (!newly_found_dialogs.empty()) { save_dialogs(); } + promise.set_value(Unit()); return true; } @@ -221,8 +224,13 @@ void RecentDialogList::update_dialogs() { } } -std::pair> RecentDialogList::get_dialogs(int32 limit) { +std::pair> RecentDialogList::get_dialogs(int32 limit, Promise &&promise) { + if (!load_dialogs(std::move(promise))) { + return {}; + } + CHECK(dialogs_loaded_ == 2); + update_dialogs(); size_t result_size = min(static_cast(limit), dialog_ids_.size()); diff --git a/td/telegram/RecentDialogList.h b/td/telegram/RecentDialogList.h index 7a355c9e5..b9c5660ee 100644 --- a/td/telegram/RecentDialogList.h +++ b/td/telegram/RecentDialogList.h @@ -27,9 +27,7 @@ class RecentDialogList : public Actor { void remove_dialog(DialogId dialog_id); - bool load_dialogs(Promise &promise); - - std::pair> get_dialogs(int32 limit); + std::pair> get_dialogs(int32 limit, Promise &&promise); void clear_dialogs(); @@ -42,13 +40,15 @@ class RecentDialogList : public Actor { int32 dialogs_loaded_ = 0; // 0 - not loaded, 1 - load request was sent, 2 - loaded MultiPromiseActor resolve_dialogs_multipromise_{"ResolveDialogsMultiPromiseActor"}; + bool load_dialogs(Promise &&promise); + bool do_add_dialog(DialogId dialog_id); string get_binlog_key() const; void update_dialogs(); - void save_dialogs(); + void save_dialogs() const; }; } // namespace td