mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-04-11 04:01:18 +00:00
Fix removing chats from dialogs.
This commit is contained in:
parent
ebc2043055
commit
bf87de3706
@ -39,10 +39,6 @@ void ChatData::setPhoto(PhotoId photoId, const MTPChatPhoto &photo) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChatData::actionsUnavailable() const {
|
|
||||||
return isDeactivated() || !amIn();
|
|
||||||
}
|
|
||||||
|
|
||||||
auto ChatData::DefaultAdminRights() -> AdminRights {
|
auto ChatData::DefaultAdminRights() -> AdminRights {
|
||||||
using Flag = AdminRight;
|
using Flag = AdminRight;
|
||||||
return Flag::f_change_info
|
return Flag::f_change_info
|
||||||
@ -54,17 +50,15 @@ auto ChatData::DefaultAdminRights() -> AdminRights {
|
|||||||
|
|
||||||
bool ChatData::canWrite() const {
|
bool ChatData::canWrite() const {
|
||||||
// Duplicated in Data::CanWriteValue().
|
// Duplicated in Data::CanWriteValue().
|
||||||
return !actionsUnavailable()
|
return amIn() && !amRestricted(Restriction::f_send_messages);
|
||||||
&& !amRestricted(Restriction::f_send_messages);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChatData::canEditInformation() const {
|
bool ChatData::canEditInformation() const {
|
||||||
return !actionsUnavailable()
|
return amIn() && !amRestricted(Restriction::f_change_info);
|
||||||
&& !amRestricted(Restriction::f_change_info);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChatData::canEditPermissions() const {
|
bool ChatData::canEditPermissions() const {
|
||||||
return !actionsUnavailable()
|
return amIn()
|
||||||
&& (amCreator() || (adminRights() & AdminRight::f_ban_users));
|
&& (amCreator() || (adminRights() & AdminRight::f_ban_users));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,18 +72,15 @@ bool ChatData::canEditPreHistoryHidden() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool ChatData::canAddMembers() const {
|
bool ChatData::canAddMembers() const {
|
||||||
return !actionsUnavailable()
|
return amIn() && !amRestricted(Restriction::f_invite_users);
|
||||||
&& !amRestricted(Restriction::f_invite_users);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChatData::canSendPolls() const {
|
bool ChatData::canSendPolls() const {
|
||||||
return !actionsUnavailable()
|
return amIn() && !amRestricted(Restriction::f_send_polls);
|
||||||
&& !amRestricted(Restriction::f_send_polls);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChatData::canAddAdmins() const {
|
bool ChatData::canAddAdmins() const {
|
||||||
return !actionsUnavailable()
|
return amIn() && amCreator();
|
||||||
&& amCreator();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChatData::canBanMembers() const {
|
bool ChatData::canBanMembers() const {
|
||||||
|
@ -103,7 +103,10 @@ public:
|
|||||||
return flags() & MTPDchat_ClientFlag::f_forbidden;
|
return flags() & MTPDchat_ClientFlag::f_forbidden;
|
||||||
}
|
}
|
||||||
bool amIn() const {
|
bool amIn() const {
|
||||||
return !isForbidden() && !haveLeft() && !wasKicked();
|
return !isForbidden()
|
||||||
|
&& !isDeactivated()
|
||||||
|
&& !haveLeft()
|
||||||
|
&& !wasKicked();
|
||||||
}
|
}
|
||||||
bool haveLeft() const {
|
bool haveLeft() const {
|
||||||
return flags() & MTPDchat::Flag::f_left;
|
return flags() & MTPDchat::Flag::f_left;
|
||||||
|
@ -350,7 +350,7 @@ bool PeerData::canPinMessages() const {
|
|||||||
if (const auto user = asUser()) {
|
if (const auto user = asUser()) {
|
||||||
return user->fullFlags() & MTPDuserFull::Flag::f_can_pin_message;
|
return user->fullFlags() & MTPDuserFull::Flag::f_can_pin_message;
|
||||||
} else if (const auto chat = asChat()) {
|
} else if (const auto chat = asChat()) {
|
||||||
return !chat->isDeactivated()
|
return chat->amIn()
|
||||||
&& ((chat->adminRights() & ChatAdminRight::f_pin_messages)
|
&& ((chat->adminRights() & ChatAdminRight::f_pin_messages)
|
||||||
|| chat->amCreator());
|
|| chat->amCreator());
|
||||||
} else if (const auto channel = asChannel()) {
|
} else if (const auto channel = asChannel()) {
|
||||||
|
@ -189,12 +189,12 @@ rpl::producer<bool> CanWriteValue(ChatData *chat) {
|
|||||||
MTPDchat::Flags flags,
|
MTPDchat::Flags flags,
|
||||||
Data::Flags<ChatAdminRights>::Change adminRights,
|
Data::Flags<ChatAdminRights>::Change adminRights,
|
||||||
bool defaultSendMessagesRestriction) {
|
bool defaultSendMessagesRestriction) {
|
||||||
const auto actionsUnavailableFlags = 0
|
const auto amOutFlags = 0
|
||||||
| MTPDchat::Flag::f_deactivated
|
| MTPDchat::Flag::f_deactivated
|
||||||
| MTPDchat_ClientFlag::f_forbidden
|
| MTPDchat_ClientFlag::f_forbidden
|
||||||
| MTPDchat::Flag::f_left
|
| MTPDchat::Flag::f_left
|
||||||
| MTPDchat::Flag::f_kicked;
|
| MTPDchat::Flag::f_kicked;
|
||||||
return !(flags & actionsUnavailableFlags)
|
return !(flags & amOutFlags)
|
||||||
&& ((flags & MTPDchat::Flag::f_creator)
|
&& ((flags & MTPDchat::Flag::f_creator)
|
||||||
|| (adminRights.value != MTPDchatAdminRights::Flags(0))
|
|| (adminRights.value != MTPDchatAdminRights::Flags(0))
|
||||||
|| !defaultSendMessagesRestriction);
|
|| !defaultSendMessagesRestriction);
|
||||||
|
@ -2304,6 +2304,10 @@ bool History::shouldBeInChatList() const {
|
|||||||
} else if (const auto feed = channel->feed()) {
|
} else if (const auto feed = channel->feed()) {
|
||||||
return !feed->needUpdateInChatList();
|
return !feed->needUpdateInChatList();
|
||||||
}
|
}
|
||||||
|
} else if (const auto chat = peer->asChat()) {
|
||||||
|
return chat->amIn()
|
||||||
|
|| !lastMessageKnown()
|
||||||
|
|| (lastMessage() != nullptr);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user