Fix removing chats from dialogs.

This commit is contained in:
John Preston 2019-01-22 17:05:06 +04:00
parent ebc2043055
commit bf87de3706
5 changed files with 17 additions and 19 deletions

View File

@ -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 {

View File

@ -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;

View File

@ -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()) {

View File

@ -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);

View File

@ -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;
} }