From a3b8397361768e56018b29db44a5de888857bb99 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 18 Apr 2024 10:45:06 +0400 Subject: [PATCH] Close chat/media if thrown out by admin. --- Telegram/SourceFiles/data/data_channel.cpp | 9 +++++++++ Telegram/SourceFiles/data/data_chat.cpp | 13 +++++++++++++ Telegram/SourceFiles/data/data_chat.h | 4 +--- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Telegram/SourceFiles/data/data_channel.cpp b/Telegram/SourceFiles/data/data_channel.cpp index d4e1499d0..2ba8346d2 100644 --- a/Telegram/SourceFiles/data/data_channel.cpp +++ b/Telegram/SourceFiles/data/data_channel.cpp @@ -165,6 +165,7 @@ void ChannelData::setFlags(ChannelDataFlags which) { const auto taken = ((diff & Flag::Forum) && !(which & Flag::Forum)) ? mgInfo->takeForumData() : nullptr; + const auto wasIn = amIn(); if ((diff & Flag::Forum) && (which & Flag::Forum)) { mgInfo->ensureForum(this); } @@ -174,6 +175,14 @@ void ChannelData::setFlags(ChannelDataFlags which) { session().changes().peerUpdated(chat, UpdateFlag::Migration); session().changes().peerUpdated(this, UpdateFlag::Migration); } + + if (wasIn && !amIn()) { + crl::on_main(&session(), [=] { + if (!amIn()) { + Core::App().closeChatFromWindows(this); + } + }); + } } if (diff & (Flag::Forum | Flag::CallNotEmpty | Flag::SimilarExpanded)) { if (const auto history = this->owner().historyLoaded(this)) { diff --git a/Telegram/SourceFiles/data/data_chat.cpp b/Telegram/SourceFiles/data/data_chat.cpp index 7f41c04b7..76aa1f714 100644 --- a/Telegram/SourceFiles/data/data_chat.cpp +++ b/Telegram/SourceFiles/data/data_chat.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "data/data_chat.h" +#include "core/application.h" #include "data/data_user.h" #include "data/data_channel.h" #include "data/data_session.h" @@ -132,6 +133,18 @@ void ChatData::invalidateParticipants() { UpdateFlag::Members | UpdateFlag::Admins); } +void ChatData::setFlags(ChatDataFlags which) { + const auto wasIn = amIn(); + _flags.set(which); + if (wasIn && !amIn()) { + crl::on_main(&session(), [=] { + if (!amIn()) { + Core::App().closeChatFromWindows(this); + } + }); + } +} + void ChatData::setInviteLink(const QString &newInviteLink) { _inviteLink = newInviteLink; } diff --git a/Telegram/SourceFiles/data/data_chat.h b/Telegram/SourceFiles/data/data_chat.h index 93202608a..5a285aeeb 100644 --- a/Telegram/SourceFiles/data/data_chat.h +++ b/Telegram/SourceFiles/data/data_chat.h @@ -42,9 +42,7 @@ public: return (count > 0 || amIn()) && participants.empty(); } - void setFlags(ChatDataFlags which) { - _flags.set(which); - } + void setFlags(ChatDataFlags which); void addFlags(ChatDataFlags which) { _flags.add(which); }