diff --git a/td/telegram/AutosaveManager.cpp b/td/telegram/AutosaveManager.cpp index 4e50505b6..d96b3e8de 100644 --- a/td/telegram/AutosaveManager.cpp +++ b/td/telegram/AutosaveManager.cpp @@ -363,9 +363,7 @@ void AutosaveManager::on_get_autosave_settings( reload_autosave_settings(); } }; - if (G()->close_flag() && r_settings.is_ok()) { - r_settings = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(r_settings); if (r_settings.is_error()) { return fail_promises(load_settings_queries_, r_settings.move_as_error()); } diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index 591c8b335..2163cb5d1 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -9177,9 +9177,7 @@ void ContactsManager::reload_created_public_dialogs(PublicDialogType type, } void ContactsManager::finish_get_created_public_dialogs(PublicDialogType type, Result &&result) { - if (G()->close_flag() && result.is_ok()) { - result = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(result); auto index = static_cast(type); auto promises = std::move(get_created_public_channels_queries_[index]); diff --git a/td/telegram/Global.h b/td/telegram/Global.h index 181c6fb91..dffaf91e2 100644 --- a/td/telegram/Global.h +++ b/td/telegram/Global.h @@ -433,6 +433,13 @@ class Global final : public ActorContext { return Status::Error(500, "Request aborted"); } + template + void ignore_result_if_closing(Result &result) const { + if (close_flag() && result.is_ok()) { + result = request_aborted_error(); + } + } + void set_close_flag() { close_flag_ = true; } diff --git a/td/telegram/GroupCallManager.cpp b/td/telegram/GroupCallManager.cpp index 83f4d1460..5769cda34 100644 --- a/td/telegram/GroupCallManager.cpp +++ b/td/telegram/GroupCallManager.cpp @@ -1438,9 +1438,7 @@ void GroupCallManager::reload_group_call(InputGroupCallId input_group_call_id, void GroupCallManager::finish_get_group_call(InputGroupCallId input_group_call_id, Result> &&result) { - if (G()->close_flag() && result.is_ok()) { - result = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(result); auto it = load_group_call_queries_.find(input_group_call_id); CHECK(it != load_group_call_queries_.end()); diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 837722a81..224281761 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -23970,9 +23970,7 @@ MessagesManager::FoundMessages MessagesManager::offline_search_messages(DialogId void MessagesManager::on_message_db_fts_result(Result result, string offset, int32 limit, int64 random_id, Promise &&promise) { - if (G()->close_flag() && result.is_ok()) { - result = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(result); if (result.is_error()) { found_fts_messages_.erase(random_id); return promise.set_error(result.move_as_error()); @@ -24002,9 +24000,7 @@ void MessagesManager::on_message_db_fts_result(Result result void MessagesManager::on_message_db_calls_result(Result result, int64 random_id, MessageId first_db_message_id, MessageSearchFilter filter, Promise &&promise) { - if (G()->close_flag() && result.is_ok()) { - result = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(result); if (result.is_error()) { found_call_messages_.erase(random_id); return promise.set_error(result.move_as_error()); @@ -30191,9 +30187,7 @@ void MessagesManager::upload_imported_message_attachment(DialogId dialog_id, int } void MessagesManager::on_imported_message_attachments_uploaded(int64 random_id, Result &&result) { - if (G()->close_flag() && result.is_ok()) { - result = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(result); auto it = pending_message_imports_.find(random_id); CHECK(it != pending_message_imports_.end()); @@ -30920,9 +30914,7 @@ void MessagesManager::on_get_message_notifications_from_database(DialogId dialog int32 limit, Result> result, Promise> promise) { - if (G()->close_flag() && result.is_ok()) { - result = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(result); if (result.is_error()) { return promise.set_error(result.move_as_error()); } diff --git a/td/telegram/SponsoredMessageManager.cpp b/td/telegram/SponsoredMessageManager.cpp index 9d4747c33..38be66693 100644 --- a/td/telegram/SponsoredMessageManager.cpp +++ b/td/telegram/SponsoredMessageManager.cpp @@ -244,9 +244,7 @@ void SponsoredMessageManager::get_dialog_sponsored_messages( void SponsoredMessageManager::on_get_dialog_sponsored_messages( DialogId dialog_id, Result> &&result) { - if (result.is_ok() && G()->close_flag()) { - result = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(result); auto &messages = dialog_sponsored_messages_[dialog_id]; CHECK(messages != nullptr); diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index b99f125d4..3a6ec12ea 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -4965,9 +4965,7 @@ void StickersManager::on_find_custom_emojis_success(const string &emoji, void StickersManager::on_load_custom_emojis(string emoji, int64 hash, vector custom_emoji_ids, Result> &&result) { - if (result.is_ok() && G()->close_flag()) { - result = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(result); if (result.is_error()) { return on_find_custom_emojis_fail(emoji, result.move_as_error()); } @@ -5672,9 +5670,7 @@ void StickersManager::do_reload_sticker_set(StickerSetId sticker_set_id, } void StickersManager::on_reload_sticker_set(StickerSetId sticker_set_id, Result &&result) { - if (G()->close_flag() && result.is_ok()) { - result = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(result); LOG(INFO) << "Reloaded " << sticker_set_id; auto it = sticker_set_reload_queries_.find(sticker_set_id); CHECK(it != sticker_set_reload_queries_.end()); @@ -6602,9 +6598,8 @@ void StickersManager::reload_default_dialog_photo_custom_emoji_ids(bool for_user void StickersManager::on_get_default_dialog_photo_custom_emoji_ids( bool for_user, Result> r_emoji_list) { - if (G()->close_flag()) { - r_emoji_list = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(r_emoji_list); + CHECK(are_default_dialog_photo_custom_emoji_ids_being_loaded_[for_user]); are_default_dialog_photo_custom_emoji_ids_being_loaded_[for_user] = false; @@ -8218,9 +8213,7 @@ void StickersManager::on_uploaded_sticker_file(FileId file_id, tl_object_ptr result) { - if (G()->close_flag() && result.is_ok()) { - result = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(result); auto it = pending_new_sticker_sets_.find(random_id); CHECK(it != pending_new_sticker_sets_.end()); @@ -8329,9 +8322,7 @@ void StickersManager::do_add_sticker_to_set(UserId user_id, string short_name, } void StickersManager::on_added_sticker_uploaded(int64 random_id, Result result) { - if (G()->close_flag() && result.is_ok()) { - result = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(result); auto it = pending_add_sticker_to_sets_.find(random_id); CHECK(it != pending_add_sticker_to_sets_.end()); @@ -8430,9 +8421,7 @@ void StickersManager::do_set_sticker_set_thumbnail(UserId user_id, string short_ } void StickersManager::on_sticker_set_thumbnail_uploaded(int64 random_id, Result result) { - if (G()->close_flag() && result.is_ok()) { - result = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(result); auto it = pending_set_sticker_set_thumbnails_.find(random_id); CHECK(it != pending_set_sticker_set_thumbnails_.end()); @@ -9747,9 +9736,7 @@ void StickersManager::load_emoji_keywords_difference(const string &language_code void StickersManager::on_get_emoji_keywords_difference( const string &language_code, int32 from_version, Result> &&result) { - if (G()->close_flag() && result.is_ok()) { - result = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(result); if (result.is_error()) { if (!G()->is_expected_error(result.error())) { LOG(ERROR) << "Receive " << result.error() << " from GetEmojiKeywordsDifferenceQuery"; @@ -10026,9 +10013,8 @@ void StickersManager::reload_emoji_groups(EmojiGroupType group_type, string used void StickersManager::on_get_emoji_groups( EmojiGroupType group_type, string used_language_codes, Result> r_emoji_groups) { - if (G()->close_flag() && r_emoji_groups.is_ok()) { - r_emoji_groups = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(r_emoji_groups); + auto type = static_cast(group_type); if (r_emoji_groups.is_error()) { if (!G()->is_expected_error(r_emoji_groups.error())) { diff --git a/td/telegram/WebPagesManager.cpp b/td/telegram/WebPagesManager.cpp index 7b9a4333b..0bbc2c822 100644 --- a/td/telegram/WebPagesManager.cpp +++ b/td/telegram/WebPagesManager.cpp @@ -940,9 +940,7 @@ void WebPagesManager::on_load_web_page_instant_view_from_database(WebPageId web_ void WebPagesManager::update_web_page_instant_view_load_requests(WebPageId web_page_id, bool force_update, Result r_web_page_id) { - if (G()->close_flag() && r_web_page_id.is_ok()) { - r_web_page_id = Global::request_aborted_error(); - } + G()->ignore_result_if_closing(r_web_page_id); LOG(INFO) << "Update load requests for " << web_page_id; auto it = load_web_page_instant_view_queries_.find(web_page_id); if (it == load_web_page_instant_view_queries_.end()) {