mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 06:07:06 +02:00
Simplify pin_messages/manage_topics logic.
This commit is contained in:
parent
72354f52d4
commit
b4a9705564
14 changed files with 16 additions and 59 deletions
|
@ -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";
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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) },
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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, {}, {});
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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()) {
|
||||
|
|
Loading…
Add table
Reference in a new issue