Drop channel pts in inaccessible channels.

This commit is contained in:
levlam 2021-06-16 02:54:17 +03:00
parent 090056f21d
commit d069de6a8b
2 changed files with 10 additions and 2 deletions

View File

@ -13192,6 +13192,11 @@ void ContactsManager::on_channel_status_changed(const Channel *c, ChannelId chan
if (td_->auth_manager_->is_bot() && old_status.is_administrator() && !new_status.is_administrator()) {
channel_participants_.erase(channel_id);
}
if (td_->auth_manager_->is_bot() && old_status.is_member() && !new_status.is_member() &&
!G()->parameters().use_message_db) {
send_closure_later(G()->messages_manager(), &MessagesManager::on_dialog_deleted, DialogId(channel_id),
Promise<Unit>());
}
// must not load ChannelFull, because must not change the Channel
CHECK(have_channel_full == (get_channel_full(channel_id) != nullptr));

View File

@ -10968,6 +10968,9 @@ void MessagesManager::on_dialog_deleted(DialogId dialog_id, Promise<Unit> &&prom
if (remove_recently_found_dialog_internal(dialog_id)) {
save_recently_found_dialogs();
}
if (dialog_id.get_type() == DialogType::Channel) {
G()->td_db()->get_binlog_pmc()->erase(get_channel_pts_key(dialog_id));
}
close_dialog(d);
promise.set_value(Unit());
@ -34958,7 +34961,7 @@ string MessagesManager::get_channel_pts_key(DialogId dialog_id) {
}
int32 MessagesManager::load_channel_pts(DialogId dialog_id) const {
if (G()->ignore_background_updates()) {
if (G()->ignore_background_updates() || !have_input_peer(dialog_id, AccessRights::Read)) {
G()->td_db()->get_binlog_pmc()->erase(get_channel_pts_key(dialog_id)); // just in case
return 0;
}
@ -35009,7 +35012,7 @@ void MessagesManager::set_channel_pts(Dialog *d, int32 new_pts, const char *sour
repair_channel_server_unread_count(d);
}
}
if (!G()->ignore_background_updates()) {
if (!G()->ignore_background_updates() && have_input_peer(d->dialog_id, AccessRights::Read)) {
G()->td_db()->get_binlog_pmc()->set(get_channel_pts_key(d->dialog_id), to_string(new_pts));
}
} else if (new_pts < d->pts) {