diff --git a/td/telegram/NotificationManager.cpp b/td/telegram/NotificationManager.cpp index f0c07abd0..35b6c195f 100644 --- a/td/telegram/NotificationManager.cpp +++ b/td/telegram/NotificationManager.cpp @@ -94,10 +94,10 @@ class SetContactSignUpNotificationQuery final : public Td::ResultHandler { }; class GetContactSignUpNotificationQuery final : public Td::ResultHandler { - Promise promise_; + Promise promise_; public: - explicit GetContactSignUpNotificationQuery(Promise &&promise) : promise_(std::move(promise)) { + explicit GetContactSignUpNotificationQuery(Promise &&promise) : promise_(std::move(promise)) { } void send() { @@ -110,8 +110,7 @@ class GetContactSignUpNotificationQuery final : public Td::ResultHandler { return on_error(result_ptr.move_as_error()); } - td_->notification_manager_->on_get_disable_contact_registered_notifications(result_ptr.ok()); - promise_.set_value(Unit()); + promise_.set_value(result_ptr.move_as_ok()); } void on_error(Status status) final { @@ -2575,9 +2574,9 @@ void NotificationManager::on_disable_contact_registered_notifications_changed() } } -void NotificationManager::on_get_disable_contact_registered_notifications(bool is_disabled) { - if (disable_contact_registered_notifications_ == is_disabled) { - return; +void NotificationManager::on_get_disable_contact_registered_notifications(bool is_disabled, Promise &&promise) { + if (G()->close_flag() || disable_contact_registered_notifications_ == is_disabled) { + return promise.set_value(Unit()); } disable_contact_registered_notifications_ = is_disabled; @@ -2586,6 +2585,7 @@ void NotificationManager::on_get_disable_contact_registered_notifications(bool i } else { G()->set_option_empty("disable_contact_registered_notifications"); } + promise.set_value(Unit()); } void NotificationManager::set_contact_registered_notifications_sync_state(SyncState new_state) { @@ -2642,7 +2642,16 @@ void NotificationManager::get_disable_contact_registered_notifications(Promisecreate_handler(std::move(promise))->send(); + auto query_promise = + PromiseCreator::lambda([actor_id = actor_id(this), promise = std::move(promise)](Result &&result) mutable { + if (result.is_error()) { + promise.set_error(result.move_as_error()); + } else { + send_closure(actor_id, &NotificationManager::on_get_disable_contact_registered_notifications, result.ok(), + std::move(promise)); + } + }); + td_->create_handler(std::move(query_promise))->send(); } void NotificationManager::process_push_notification(string payload, Promise &&user_promise) { diff --git a/td/telegram/NotificationManager.h b/td/telegram/NotificationManager.h index 3ece92dae..ff307928e 100644 --- a/td/telegram/NotificationManager.h +++ b/td/telegram/NotificationManager.h @@ -108,8 +108,6 @@ class NotificationManager final : public Actor { void on_disable_contact_registered_notifications_changed(); - void on_get_disable_contact_registered_notifications(bool is_disabled); - void process_push_notification(string payload, Promise &&user_promise); static Result get_push_receiver_id(string payload); @@ -337,6 +335,8 @@ class NotificationManager final : public Actor { void on_contact_registered_notifications_sync(bool is_disabled, Result result); + void on_get_disable_contact_registered_notifications(bool is_disabled, Promise &&promise); + void save_announcement_ids(); static ActiveNotificationsUpdate as_active_notifications_update(const td_api::updateActiveNotifications *update);