Simplify pin_messages/manage_topics logic.

This commit is contained in:
John Preston 2022-10-24 15:52:43 +04:00
parent 72354f52d4
commit b4a9705564
14 changed files with 16 additions and 59 deletions

View file

@ -2890,8 +2890,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_rights_group_invite_link" = "Invite users via link";
"lng_rights_group_invite" = "Add users";
"lng_rights_group_pin" = "Pin messages";
"lng_rights_group_pin_with_topics" = "Pin messages and topics";
"lng_rights_group_pin_topics" = "Pin topics";
"lng_rights_group_topics" = "Manage topics";
"lng_rights_group_add_topics" = "Create topics";
"lng_rights_group_manage_calls" = "Manage voice chats";
@ -3110,8 +3108,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_admin_log_admin_invite_users" = "Add members";
"lng_admin_log_admin_invite_link" = "Invite users via link";
"lng_admin_log_admin_pin_messages" = "Pin messages";
"lng_admin_log_admin_pin_messages_topics" = "Pin messages and topics";
"lng_admin_log_admin_pin_topics" = "Pin topics";
"lng_admin_log_admin_manage_topics" = "Manage topics";
"lng_admin_log_admin_create_topics" = "Create topics";
"lng_admin_log_admin_manage_calls" = "Manage voice chats";

View file

@ -224,7 +224,7 @@ ChatAdminRightsInfo EditAdminBox::defaultRights() const {
| Flag::BanUsers
| Flag::InviteByLinkOrAdd
| Flag::ManageTopics
| Flag::PinMessagesOrTopics
| Flag::PinMessages
| Flag::ManageCall) }
: ChatAdminRightsInfo{ (Flag::ChangeInfo
| Flag::PostMessages
@ -329,14 +329,10 @@ void EditAdminBox::prepare() {
const auto anyoneCanAddMembers = chat
? chat->anyoneCanAddMembers()
: channel->anyoneCanAddMembers();
const auto anyoneCanPinMessages = chat
? chat->anyoneCanPinMessages()
: channel->anyoneCanPinMessages();
const auto options = Data::AdminRightsSetOptions{
.isGroup = isGroup,
.isForum = peer()->isForum(),
.anyoneCanAddMembers = anyoneCanAddMembers,
.anyoneCanPinMessages = anyoneCanPinMessages,
};
auto [checkboxes, getChecked, changes] = CreateEditAdminRights(
inner,

View file

@ -189,7 +189,7 @@ ChatRestrictions DisabledByAdminRights(not_null<PeerData*> peer) {
| ((adminRights & Admin::ManageTopics)
? Flag(0)
: Flag::CreateTopics)
| ((adminRights & Admin::PinMessagesOrTopics)
| ((adminRights & Admin::PinMessages)
? Flag(0)
: Flag::PinMessages)
| ((adminRights & Admin::InviteByLinkOrAdd)
@ -311,15 +311,10 @@ ChatAdminRights DisabledByDefaultRestrictions(not_null<PeerData*> peer) {
}
Unexpected("User in DisabledByDefaultRestrictions.");
}());
const auto forum = peer->isForum();
return Flag(0)
//
// We allow to edit 'pin_messages' admin right in forums
// even if it is allowed in default permissions, because
// if everyone can 'pin_messages' admin can also pin topics.
| ((forum || (restrictions & Restriction::PinMessages))
| ((restrictions & Restriction::PinMessages)
? Flag(0)
: Flag::PinMessagesOrTopics)
: Flag::PinMessages)
//
// We allow to edit 'invite_users' admin right no matter what
// is chosen in default permissions for 'invite_users', because
@ -765,11 +760,7 @@ std::vector<AdminRightLabel> AdminRightLabels(
? tr::lng_rights_group_invite_link(tr::now)
: tr::lng_rights_group_invite(tr::now) },
{ Flag::ManageTopics, tr::lng_rights_group_topics(tr::now) },
{ Flag::PinMessagesOrTopics, !options.isForum
? tr::lng_rights_group_pin(tr::now)
: options.anyoneCanPinMessages
? tr::lng_rights_group_pin_topics(tr::now)
: tr::lng_rights_group_pin_with_topics(tr::now) },
{ Flag::PinMessages, tr::lng_rights_group_pin(tr::now) },
{ Flag::ManageCall, tr::lng_rights_group_manage_calls(tr::now) },
{ Flag::Anonymous, tr::lng_rights_group_anonymous(tr::now) },
{ Flag::AddAdmins, tr::lng_rights_add_admins(tr::now) },

View file

@ -299,7 +299,7 @@ bool ShowWallPaper(
} else if (element == u"manage_topics"_q) {
result |= ChatAdminRight::ManageTopics;
} else if (element == u"pin_messages"_q) {
result |= ChatAdminRight::PinMessagesOrTopics;
result |= ChatAdminRight::PinMessages;
} else if (element == u"promote_members"_q) {
result |= ChatAdminRight::AddAdmins;
} else if (element == u"manage_video_chats"_q) {

View file

@ -528,10 +528,6 @@ bool ChannelData::anyoneCanAddMembers() const {
return !(defaultRestrictions() & Restriction::AddParticipants);
}
bool ChannelData::anyoneCanPinMessages() const {
return !(defaultRestrictions() & Restriction::PinMessages);
}
bool ChannelData::hiddenPreHistory() const {
return (flags() & Flag::PreHistoryHidden);
}

View file

@ -324,7 +324,6 @@ public:
[[nodiscard]] bool canBanMembers() const;
[[nodiscard]] bool canSendPolls() const;
[[nodiscard]] bool anyoneCanAddMembers() const;
[[nodiscard]] bool anyoneCanPinMessages() const;
[[nodiscard]] bool canEditMessages() const;
[[nodiscard]] bool canDeleteMessages() const;

View file

@ -58,7 +58,7 @@ ChatAdminRightsInfo ChatData::defaultAdminRights(not_null<UserData*> user) {
| Flag::DeleteMessages
| Flag::BanUsers
| Flag::InviteByLinkOrAdd
| Flag::PinMessagesOrTopics
| Flag::PinMessages
| Flag::ManageCall
| (isCreator ? Flag::AddAdmins : Flag(0)));
}
@ -116,10 +116,6 @@ bool ChatData::anyoneCanAddMembers() const {
return !(defaultRestrictions() & ChatRestriction::AddParticipants);
}
bool ChatData::anyoneCanPinMessages() const {
return !(defaultRestrictions() & ChatRestriction::PinMessages);
}
void ChatData::setName(const QString &newName) {
updateNameDelayed(newName.isEmpty() ? name() : newName, {}, {});
}

View file

@ -112,7 +112,6 @@ public:
[[nodiscard]] bool canBanMembers() const;
[[nodiscard]] bool canSendPolls() const;
[[nodiscard]] bool anyoneCanAddMembers() const;
[[nodiscard]] bool anyoneCanPinMessages() const;
void applyEditAdmin(not_null<UserData*> user, bool isAdmin);

View file

@ -19,7 +19,7 @@ enum class ChatAdminRight {
DeleteMessages = (1 << 3),
BanUsers = (1 << 4),
InviteByLinkOrAdd = (1 << 5),
PinMessagesOrTopics = (1 << 7),
PinMessages = (1 << 7),
AddAdmins = (1 << 9),
Anonymous = (1 << 10),
ManageCall = (1 << 11),
@ -74,7 +74,6 @@ struct AdminRightsSetOptions {
bool isGroup : 1 = false;
bool isForum : 1 = false;
bool anyoneCanAddMembers : 1 = false;
bool anyoneCanPinMessages : 1 = false;
};
struct RestrictionsSetOptions {

View file

@ -206,7 +206,7 @@ bool ForumTopic::my() const {
}
bool ForumTopic::canEdit() const {
return my() || channel()->canEditTopics();
return my() || channel()->canManageTopics();
}
bool ForumTopic::canDelete() const {
@ -223,12 +223,7 @@ bool ForumTopic::canToggleClosed() const {
}
bool ForumTopic::canTogglePinned() const {
if (creating()) {
return false;
}
const auto channel = this->channel();
return channel->amCreator()
|| (channel->adminRights() & ChatAdminRight::PinMessagesOrTopics);
return !creating() && channel()->canManageTopics();
}
bool ForumTopic::creating() const {

View file

@ -538,7 +538,7 @@ bool PeerData::canCreateTopics() const {
return false;
}
bool PeerData::canEditTopics() const {
bool PeerData::canManageTopics() const {
if (const auto channel = asChannel()) {
return channel->isForum()
&& (channel->amCreator()
@ -970,7 +970,7 @@ Data::RestrictionCheckResult PeerData::amRestricted(
} else if (right == ChatRestriction::CreateTopics) {
return chat->adminRights() & ChatAdminRight::ManageTopics;
} else if (right == ChatRestriction::PinMessages) {
return chat->adminRights() & ChatAdminRight::PinMessagesOrTopics;
return chat->adminRights() & ChatAdminRight::PinMessages;
} else {
return chat->hasAdminRights();
}

View file

@ -340,7 +340,7 @@ public:
[[nodiscard]] bool canPinMessages() const;
[[nodiscard]] bool canEditMessagesIndefinitely() const;
[[nodiscard]] bool canCreateTopics() const;
[[nodiscard]] bool canEditTopics() const;
[[nodiscard]] bool canManageTopics() const;
[[nodiscard]] bool canExportChatHistory() const;
// Returns true if about text was changed.

View file

@ -264,7 +264,7 @@ rpl::producer<bool> CanPinMessagesValue(not_null<PeerData*> peer) {
| ChatDataFlag::Creator;
return rpl::combine(
PeerFlagsValue(chat, mask),
AdminRightValue(chat, ChatAdminRight::PinMessagesOrTopics),
AdminRightValue(chat, ChatAdminRight::PinMessages),
DefaultRestrictionValue(chat, ChatRestriction::PinMessages),
[](
ChatDataFlags flags,
@ -284,7 +284,7 @@ rpl::producer<bool> CanPinMessagesValue(not_null<PeerData*> peer) {
return rpl::single(true);
}
return rpl::combine(
AdminRightValue(megagroup, ChatAdminRight::PinMessagesOrTopics),
AdminRightValue(megagroup, ChatAdminRight::PinMessages),
DefaultRestrictionValue(megagroup, ChatRestriction::PinMessages),
PeerFlagsValue(
megagroup,

View file

@ -199,18 +199,9 @@ TextWithEntities GenerateAdminChangeText(
const auto useInviteLinkPhrase = channel->isMegagroup()
&& channel->anyoneCanAddMembers();
const auto pinMessagesAndTopics = channel->isForum()
&& !channel->anyoneCanPinMessages();
const auto pinOnlyTopics = channel->isForum()
&& channel->anyoneCanPinMessages();
const auto invitePhrase = useInviteLinkPhrase
? tr::lng_admin_log_admin_invite_link
: tr::lng_admin_log_admin_invite_users;
const auto pinPhrase = pinOnlyTopics
? tr::lng_admin_log_admin_pin_topics
: pinMessagesAndTopics
? tr::lng_admin_log_admin_pin_messages_topics
: tr::lng_admin_log_admin_pin_messages;
const auto callPhrase = channel->isBroadcast()
? tr::lng_admin_log_admin_manage_calls_channel
: tr::lng_admin_log_admin_manage_calls;
@ -222,12 +213,11 @@ TextWithEntities GenerateAdminChangeText(
{ Flag::BanUsers, tr::lng_admin_log_admin_ban_users },
{ Flag::InviteByLinkOrAdd, invitePhrase },
{ Flag::ManageTopics, tr::lng_admin_log_admin_manage_topics },
{ Flag::PinMessagesOrTopics, pinPhrase },
{ Flag::PinMessages, tr::lng_admin_log_admin_pin_messages },
{ Flag::ManageCall, tr::lng_admin_log_admin_manage_calls },
{ Flag::AddAdmins, tr::lng_admin_log_admin_add_admins },
};
phraseMap[Flag::InviteByLinkOrAdd] = invitePhrase;
phraseMap[Flag::PinMessagesOrTopics] = pinPhrase;
phraseMap[Flag::ManageCall] = callPhrase;
if (!channel->isMegagroup()) {