Close chat/media if thrown out by admin.

This commit is contained in:
John Preston 2024-04-18 10:45:06 +04:00
parent 4fb03e532c
commit a3b8397361
3 changed files with 23 additions and 3 deletions

View File

@ -165,6 +165,7 @@ void ChannelData::setFlags(ChannelDataFlags which) {
const auto taken = ((diff & Flag::Forum) && !(which & Flag::Forum)) const auto taken = ((diff & Flag::Forum) && !(which & Flag::Forum))
? mgInfo->takeForumData() ? mgInfo->takeForumData()
: nullptr; : nullptr;
const auto wasIn = amIn();
if ((diff & Flag::Forum) && (which & Flag::Forum)) { if ((diff & Flag::Forum) && (which & Flag::Forum)) {
mgInfo->ensureForum(this); mgInfo->ensureForum(this);
} }
@ -174,6 +175,14 @@ void ChannelData::setFlags(ChannelDataFlags which) {
session().changes().peerUpdated(chat, UpdateFlag::Migration); session().changes().peerUpdated(chat, UpdateFlag::Migration);
session().changes().peerUpdated(this, 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 (diff & (Flag::Forum | Flag::CallNotEmpty | Flag::SimilarExpanded)) {
if (const auto history = this->owner().historyLoaded(this)) { if (const auto history = this->owner().historyLoaded(this)) {

View File

@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/ */
#include "data/data_chat.h" #include "data/data_chat.h"
#include "core/application.h"
#include "data/data_user.h" #include "data/data_user.h"
#include "data/data_channel.h" #include "data/data_channel.h"
#include "data/data_session.h" #include "data/data_session.h"
@ -132,6 +133,18 @@ void ChatData::invalidateParticipants() {
UpdateFlag::Members | UpdateFlag::Admins); 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) { void ChatData::setInviteLink(const QString &newInviteLink) {
_inviteLink = newInviteLink; _inviteLink = newInviteLink;
} }

View File

@ -42,9 +42,7 @@ public:
return (count > 0 || amIn()) && participants.empty(); return (count > 0 || amIn()) && participants.empty();
} }
void setFlags(ChatDataFlags which) { void setFlags(ChatDataFlags which);
_flags.set(which);
}
void addFlags(ChatDataFlags which) { void addFlags(ChatDataFlags which) {
_flags.add(which); _flags.add(which);
} }