diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index e49f4ad1..eeb6ea10 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -2195,27 +2195,28 @@ void ContactsManager::on_user_online_timeout_callback(void *contacts_manager_ptr CHECK(u != nullptr); LOG(INFO) << "Update " << user_id << " online status to offline"; - send_closure(G()->td(), &Td::send_update, - make_tl_object(user_id.get(), get_user_status_object(u))); + send_closure_later(G()->td(), &Td::send_update, + make_tl_object(user_id.get(), get_user_status_object(u))); } void ContactsManager::on_channel_unban_timeout_callback(void *contacts_manager_ptr, int64 channel_id_long) { - auto contacts_manager = static_cast(contacts_manager_ptr); - ChannelId channel_id(narrow_cast(channel_id_long)); - auto c = contacts_manager->get_channel(channel_id); + auto td = static_cast(contacts_manager_ptr)->td_; + send_closure_later(td->actor_id(td), &Td::on_channel_unban_timeout, channel_id_long); +} + +void ContactsManager::on_channel_unban_timeout(ChannelId channel_id) { + auto c = get_channel(channel_id); CHECK(c != nullptr); auto old_status = c->status; c->status.update_restrictions(); - if (c->status == old_status) { - LOG(ERROR) << "Status of " << channel_id << " wasn't updated: " << c->status; - return; - } + LOG_IF(ERROR, c->status == old_status && (c->status.is_restricted() || c->status.is_banned())) + << "Status of " << channel_id << " wasn't updated: " << c->status; LOG(INFO) << "Update " << channel_id << " status"; c->is_status_changed = true; - contacts_manager->invalidate_channel_full(channel_id); - contacts_manager->update_channel(c, channel_id); + invalidate_channel_full(channel_id); + update_channel(c, channel_id); // always call, because in case of failure we need to reactivate timeout } template diff --git a/td/telegram/ContactsManager.h b/td/telegram/ContactsManager.h index 55b986d7..2f2303eb 100644 --- a/td/telegram/ContactsManager.h +++ b/td/telegram/ContactsManager.h @@ -204,6 +204,8 @@ class ContactsManager : public Actor { void on_update_online_status_privacy(); + void on_channel_unban_timeout(ChannelId channel_id); + void set_account_ttl(int32 account_ttl, Promise &&promise) const; void get_account_ttl(Promise &&promise) const; diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index baabe97a..76ed17fc 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -7595,10 +7595,15 @@ void MessagesManager::unload_dialog(DialogId dialog_id) { unloaded_message_ids.push_back(message_id.get()); } - if (!unloaded_message_ids.empty() && !G()->parameters().use_message_db) { - d->have_full_history = false; + if (!unloaded_message_ids.empty()) { + if (!G()->parameters().use_message_db) { + d->have_full_history = false; + } + + send_closure_later( + G()->td(), &Td::send_update, + make_tl_object(dialog_id.get(), std::move(unloaded_message_ids), false, true)); } - send_update_delete_messages(dialog_id, std::move(unloaded_message_ids), false, true); if (left_to_unload > 0) { LOG(INFO) << "Need to unload " << left_to_unload << " messages more in " << dialog_id; diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 5734bc59..cadd4705 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -3527,7 +3527,7 @@ Td::Td(std::unique_ptr callback) : callback_(std::move(callback)) { void Td::on_alarm_timeout_callback(void *td_ptr, int64 request_id) { auto td = static_cast(td_ptr); auto td_id = td->actor_id(td); - send_closure(td_id, &Td::on_alarm_timeout, request_id); + send_closure_later(td_id, &Td::on_alarm_timeout, request_id); } void Td::on_alarm_timeout(int64 request_id) { @@ -3553,6 +3553,13 @@ void Td::on_online_updated(bool force, bool send_update) { } } +void Td::on_channel_unban_timeout(int64 channel_id_long) { + if (close_flag_ >= 2) { + return; + } + contacts_manager_->on_channel_unban_timeout(ChannelId(narrow_cast(channel_id_long))); +} + void Td::request(uint64 id, tl_object_ptr function) { request_set_.insert(id); diff --git a/td/telegram/Td.h b/td/telegram/Td.h index e0445a73..9f2a44d9 100644 --- a/td/telegram/Td.h +++ b/td/telegram/Td.h @@ -95,6 +95,8 @@ class Td final : public NetQueryCallback { void on_online_updated(bool force, bool send_update); + void on_channel_unban_timeout(int64 channel_id_long); + template ActorId create_net_actor(ArgsT &&... args) { auto slot_id = request_actors_.create(ActorOwn<>(), RequestActorIdType);