mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +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_link" = "Invite users via link";
|
||||||
"lng_rights_group_invite" = "Add users";
|
"lng_rights_group_invite" = "Add users";
|
||||||
"lng_rights_group_pin" = "Pin messages";
|
"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_topics" = "Manage topics";
|
||||||
"lng_rights_group_add_topics" = "Create topics";
|
"lng_rights_group_add_topics" = "Create topics";
|
||||||
"lng_rights_group_manage_calls" = "Manage voice chats";
|
"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_users" = "Add members";
|
||||||
"lng_admin_log_admin_invite_link" = "Invite users via link";
|
"lng_admin_log_admin_invite_link" = "Invite users via link";
|
||||||
"lng_admin_log_admin_pin_messages" = "Pin messages";
|
"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_manage_topics" = "Manage topics";
|
||||||
"lng_admin_log_admin_create_topics" = "Create topics";
|
"lng_admin_log_admin_create_topics" = "Create topics";
|
||||||
"lng_admin_log_admin_manage_calls" = "Manage voice chats";
|
"lng_admin_log_admin_manage_calls" = "Manage voice chats";
|
||||||
|
|
|
@ -224,7 +224,7 @@ ChatAdminRightsInfo EditAdminBox::defaultRights() const {
|
||||||
| Flag::BanUsers
|
| Flag::BanUsers
|
||||||
| Flag::InviteByLinkOrAdd
|
| Flag::InviteByLinkOrAdd
|
||||||
| Flag::ManageTopics
|
| Flag::ManageTopics
|
||||||
| Flag::PinMessagesOrTopics
|
| Flag::PinMessages
|
||||||
| Flag::ManageCall) }
|
| Flag::ManageCall) }
|
||||||
: ChatAdminRightsInfo{ (Flag::ChangeInfo
|
: ChatAdminRightsInfo{ (Flag::ChangeInfo
|
||||||
| Flag::PostMessages
|
| Flag::PostMessages
|
||||||
|
@ -329,14 +329,10 @@ void EditAdminBox::prepare() {
|
||||||
const auto anyoneCanAddMembers = chat
|
const auto anyoneCanAddMembers = chat
|
||||||
? chat->anyoneCanAddMembers()
|
? chat->anyoneCanAddMembers()
|
||||||
: channel->anyoneCanAddMembers();
|
: channel->anyoneCanAddMembers();
|
||||||
const auto anyoneCanPinMessages = chat
|
|
||||||
? chat->anyoneCanPinMessages()
|
|
||||||
: channel->anyoneCanPinMessages();
|
|
||||||
const auto options = Data::AdminRightsSetOptions{
|
const auto options = Data::AdminRightsSetOptions{
|
||||||
.isGroup = isGroup,
|
.isGroup = isGroup,
|
||||||
.isForum = peer()->isForum(),
|
.isForum = peer()->isForum(),
|
||||||
.anyoneCanAddMembers = anyoneCanAddMembers,
|
.anyoneCanAddMembers = anyoneCanAddMembers,
|
||||||
.anyoneCanPinMessages = anyoneCanPinMessages,
|
|
||||||
};
|
};
|
||||||
auto [checkboxes, getChecked, changes] = CreateEditAdminRights(
|
auto [checkboxes, getChecked, changes] = CreateEditAdminRights(
|
||||||
inner,
|
inner,
|
||||||
|
|
|
@ -189,7 +189,7 @@ ChatRestrictions DisabledByAdminRights(not_null<PeerData*> peer) {
|
||||||
| ((adminRights & Admin::ManageTopics)
|
| ((adminRights & Admin::ManageTopics)
|
||||||
? Flag(0)
|
? Flag(0)
|
||||||
: Flag::CreateTopics)
|
: Flag::CreateTopics)
|
||||||
| ((adminRights & Admin::PinMessagesOrTopics)
|
| ((adminRights & Admin::PinMessages)
|
||||||
? Flag(0)
|
? Flag(0)
|
||||||
: Flag::PinMessages)
|
: Flag::PinMessages)
|
||||||
| ((adminRights & Admin::InviteByLinkOrAdd)
|
| ((adminRights & Admin::InviteByLinkOrAdd)
|
||||||
|
@ -311,15 +311,10 @@ ChatAdminRights DisabledByDefaultRestrictions(not_null<PeerData*> peer) {
|
||||||
}
|
}
|
||||||
Unexpected("User in DisabledByDefaultRestrictions.");
|
Unexpected("User in DisabledByDefaultRestrictions.");
|
||||||
}());
|
}());
|
||||||
const auto forum = peer->isForum();
|
|
||||||
return Flag(0)
|
return Flag(0)
|
||||||
//
|
| ((restrictions & Restriction::PinMessages)
|
||||||
// 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))
|
|
||||||
? Flag(0)
|
? Flag(0)
|
||||||
: Flag::PinMessagesOrTopics)
|
: Flag::PinMessages)
|
||||||
//
|
//
|
||||||
// We allow to edit 'invite_users' admin right no matter what
|
// We allow to edit 'invite_users' admin right no matter what
|
||||||
// is chosen in default permissions for 'invite_users', because
|
// 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_link(tr::now)
|
||||||
: tr::lng_rights_group_invite(tr::now) },
|
: tr::lng_rights_group_invite(tr::now) },
|
||||||
{ Flag::ManageTopics, tr::lng_rights_group_topics(tr::now) },
|
{ Flag::ManageTopics, tr::lng_rights_group_topics(tr::now) },
|
||||||
{ Flag::PinMessagesOrTopics, !options.isForum
|
{ Flag::PinMessages, tr::lng_rights_group_pin(tr::now) },
|
||||||
? 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::ManageCall, tr::lng_rights_group_manage_calls(tr::now) },
|
{ Flag::ManageCall, tr::lng_rights_group_manage_calls(tr::now) },
|
||||||
{ Flag::Anonymous, tr::lng_rights_group_anonymous(tr::now) },
|
{ Flag::Anonymous, tr::lng_rights_group_anonymous(tr::now) },
|
||||||
{ Flag::AddAdmins, tr::lng_rights_add_admins(tr::now) },
|
{ Flag::AddAdmins, tr::lng_rights_add_admins(tr::now) },
|
||||||
|
|
|
@ -299,7 +299,7 @@ bool ShowWallPaper(
|
||||||
} else if (element == u"manage_topics"_q) {
|
} else if (element == u"manage_topics"_q) {
|
||||||
result |= ChatAdminRight::ManageTopics;
|
result |= ChatAdminRight::ManageTopics;
|
||||||
} else if (element == u"pin_messages"_q) {
|
} else if (element == u"pin_messages"_q) {
|
||||||
result |= ChatAdminRight::PinMessagesOrTopics;
|
result |= ChatAdminRight::PinMessages;
|
||||||
} else if (element == u"promote_members"_q) {
|
} else if (element == u"promote_members"_q) {
|
||||||
result |= ChatAdminRight::AddAdmins;
|
result |= ChatAdminRight::AddAdmins;
|
||||||
} else if (element == u"manage_video_chats"_q) {
|
} else if (element == u"manage_video_chats"_q) {
|
||||||
|
|
|
@ -528,10 +528,6 @@ bool ChannelData::anyoneCanAddMembers() const {
|
||||||
return !(defaultRestrictions() & Restriction::AddParticipants);
|
return !(defaultRestrictions() & Restriction::AddParticipants);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChannelData::anyoneCanPinMessages() const {
|
|
||||||
return !(defaultRestrictions() & Restriction::PinMessages);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ChannelData::hiddenPreHistory() const {
|
bool ChannelData::hiddenPreHistory() const {
|
||||||
return (flags() & Flag::PreHistoryHidden);
|
return (flags() & Flag::PreHistoryHidden);
|
||||||
}
|
}
|
||||||
|
|
|
@ -324,7 +324,6 @@ public:
|
||||||
[[nodiscard]] bool canBanMembers() const;
|
[[nodiscard]] bool canBanMembers() const;
|
||||||
[[nodiscard]] bool canSendPolls() const;
|
[[nodiscard]] bool canSendPolls() const;
|
||||||
[[nodiscard]] bool anyoneCanAddMembers() const;
|
[[nodiscard]] bool anyoneCanAddMembers() const;
|
||||||
[[nodiscard]] bool anyoneCanPinMessages() const;
|
|
||||||
|
|
||||||
[[nodiscard]] bool canEditMessages() const;
|
[[nodiscard]] bool canEditMessages() const;
|
||||||
[[nodiscard]] bool canDeleteMessages() const;
|
[[nodiscard]] bool canDeleteMessages() const;
|
||||||
|
|
|
@ -58,7 +58,7 @@ ChatAdminRightsInfo ChatData::defaultAdminRights(not_null<UserData*> user) {
|
||||||
| Flag::DeleteMessages
|
| Flag::DeleteMessages
|
||||||
| Flag::BanUsers
|
| Flag::BanUsers
|
||||||
| Flag::InviteByLinkOrAdd
|
| Flag::InviteByLinkOrAdd
|
||||||
| Flag::PinMessagesOrTopics
|
| Flag::PinMessages
|
||||||
| Flag::ManageCall
|
| Flag::ManageCall
|
||||||
| (isCreator ? Flag::AddAdmins : Flag(0)));
|
| (isCreator ? Flag::AddAdmins : Flag(0)));
|
||||||
}
|
}
|
||||||
|
@ -116,10 +116,6 @@ bool ChatData::anyoneCanAddMembers() const {
|
||||||
return !(defaultRestrictions() & ChatRestriction::AddParticipants);
|
return !(defaultRestrictions() & ChatRestriction::AddParticipants);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChatData::anyoneCanPinMessages() const {
|
|
||||||
return !(defaultRestrictions() & ChatRestriction::PinMessages);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChatData::setName(const QString &newName) {
|
void ChatData::setName(const QString &newName) {
|
||||||
updateNameDelayed(newName.isEmpty() ? name() : newName, {}, {});
|
updateNameDelayed(newName.isEmpty() ? name() : newName, {}, {});
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,7 +112,6 @@ public:
|
||||||
[[nodiscard]] bool canBanMembers() const;
|
[[nodiscard]] bool canBanMembers() const;
|
||||||
[[nodiscard]] bool canSendPolls() const;
|
[[nodiscard]] bool canSendPolls() const;
|
||||||
[[nodiscard]] bool anyoneCanAddMembers() const;
|
[[nodiscard]] bool anyoneCanAddMembers() const;
|
||||||
[[nodiscard]] bool anyoneCanPinMessages() const;
|
|
||||||
|
|
||||||
void applyEditAdmin(not_null<UserData*> user, bool isAdmin);
|
void applyEditAdmin(not_null<UserData*> user, bool isAdmin);
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ enum class ChatAdminRight {
|
||||||
DeleteMessages = (1 << 3),
|
DeleteMessages = (1 << 3),
|
||||||
BanUsers = (1 << 4),
|
BanUsers = (1 << 4),
|
||||||
InviteByLinkOrAdd = (1 << 5),
|
InviteByLinkOrAdd = (1 << 5),
|
||||||
PinMessagesOrTopics = (1 << 7),
|
PinMessages = (1 << 7),
|
||||||
AddAdmins = (1 << 9),
|
AddAdmins = (1 << 9),
|
||||||
Anonymous = (1 << 10),
|
Anonymous = (1 << 10),
|
||||||
ManageCall = (1 << 11),
|
ManageCall = (1 << 11),
|
||||||
|
@ -74,7 +74,6 @@ struct AdminRightsSetOptions {
|
||||||
bool isGroup : 1 = false;
|
bool isGroup : 1 = false;
|
||||||
bool isForum : 1 = false;
|
bool isForum : 1 = false;
|
||||||
bool anyoneCanAddMembers : 1 = false;
|
bool anyoneCanAddMembers : 1 = false;
|
||||||
bool anyoneCanPinMessages : 1 = false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RestrictionsSetOptions {
|
struct RestrictionsSetOptions {
|
||||||
|
|
|
@ -206,7 +206,7 @@ bool ForumTopic::my() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ForumTopic::canEdit() const {
|
bool ForumTopic::canEdit() const {
|
||||||
return my() || channel()->canEditTopics();
|
return my() || channel()->canManageTopics();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ForumTopic::canDelete() const {
|
bool ForumTopic::canDelete() const {
|
||||||
|
@ -223,12 +223,7 @@ bool ForumTopic::canToggleClosed() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ForumTopic::canTogglePinned() const {
|
bool ForumTopic::canTogglePinned() const {
|
||||||
if (creating()) {
|
return !creating() && channel()->canManageTopics();
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const auto channel = this->channel();
|
|
||||||
return channel->amCreator()
|
|
||||||
|| (channel->adminRights() & ChatAdminRight::PinMessagesOrTopics);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ForumTopic::creating() const {
|
bool ForumTopic::creating() const {
|
||||||
|
|
|
@ -538,7 +538,7 @@ bool PeerData::canCreateTopics() const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PeerData::canEditTopics() const {
|
bool PeerData::canManageTopics() const {
|
||||||
if (const auto channel = asChannel()) {
|
if (const auto channel = asChannel()) {
|
||||||
return channel->isForum()
|
return channel->isForum()
|
||||||
&& (channel->amCreator()
|
&& (channel->amCreator()
|
||||||
|
@ -970,7 +970,7 @@ Data::RestrictionCheckResult PeerData::amRestricted(
|
||||||
} else if (right == ChatRestriction::CreateTopics) {
|
} else if (right == ChatRestriction::CreateTopics) {
|
||||||
return chat->adminRights() & ChatAdminRight::ManageTopics;
|
return chat->adminRights() & ChatAdminRight::ManageTopics;
|
||||||
} else if (right == ChatRestriction::PinMessages) {
|
} else if (right == ChatRestriction::PinMessages) {
|
||||||
return chat->adminRights() & ChatAdminRight::PinMessagesOrTopics;
|
return chat->adminRights() & ChatAdminRight::PinMessages;
|
||||||
} else {
|
} else {
|
||||||
return chat->hasAdminRights();
|
return chat->hasAdminRights();
|
||||||
}
|
}
|
||||||
|
|
|
@ -340,7 +340,7 @@ public:
|
||||||
[[nodiscard]] bool canPinMessages() const;
|
[[nodiscard]] bool canPinMessages() const;
|
||||||
[[nodiscard]] bool canEditMessagesIndefinitely() const;
|
[[nodiscard]] bool canEditMessagesIndefinitely() const;
|
||||||
[[nodiscard]] bool canCreateTopics() const;
|
[[nodiscard]] bool canCreateTopics() const;
|
||||||
[[nodiscard]] bool canEditTopics() const;
|
[[nodiscard]] bool canManageTopics() const;
|
||||||
[[nodiscard]] bool canExportChatHistory() const;
|
[[nodiscard]] bool canExportChatHistory() const;
|
||||||
|
|
||||||
// Returns true if about text was changed.
|
// Returns true if about text was changed.
|
||||||
|
|
|
@ -264,7 +264,7 @@ rpl::producer<bool> CanPinMessagesValue(not_null<PeerData*> peer) {
|
||||||
| ChatDataFlag::Creator;
|
| ChatDataFlag::Creator;
|
||||||
return rpl::combine(
|
return rpl::combine(
|
||||||
PeerFlagsValue(chat, mask),
|
PeerFlagsValue(chat, mask),
|
||||||
AdminRightValue(chat, ChatAdminRight::PinMessagesOrTopics),
|
AdminRightValue(chat, ChatAdminRight::PinMessages),
|
||||||
DefaultRestrictionValue(chat, ChatRestriction::PinMessages),
|
DefaultRestrictionValue(chat, ChatRestriction::PinMessages),
|
||||||
[](
|
[](
|
||||||
ChatDataFlags flags,
|
ChatDataFlags flags,
|
||||||
|
@ -284,7 +284,7 @@ rpl::producer<bool> CanPinMessagesValue(not_null<PeerData*> peer) {
|
||||||
return rpl::single(true);
|
return rpl::single(true);
|
||||||
}
|
}
|
||||||
return rpl::combine(
|
return rpl::combine(
|
||||||
AdminRightValue(megagroup, ChatAdminRight::PinMessagesOrTopics),
|
AdminRightValue(megagroup, ChatAdminRight::PinMessages),
|
||||||
DefaultRestrictionValue(megagroup, ChatRestriction::PinMessages),
|
DefaultRestrictionValue(megagroup, ChatRestriction::PinMessages),
|
||||||
PeerFlagsValue(
|
PeerFlagsValue(
|
||||||
megagroup,
|
megagroup,
|
||||||
|
|
|
@ -199,18 +199,9 @@ TextWithEntities GenerateAdminChangeText(
|
||||||
|
|
||||||
const auto useInviteLinkPhrase = channel->isMegagroup()
|
const auto useInviteLinkPhrase = channel->isMegagroup()
|
||||||
&& channel->anyoneCanAddMembers();
|
&& channel->anyoneCanAddMembers();
|
||||||
const auto pinMessagesAndTopics = channel->isForum()
|
|
||||||
&& !channel->anyoneCanPinMessages();
|
|
||||||
const auto pinOnlyTopics = channel->isForum()
|
|
||||||
&& channel->anyoneCanPinMessages();
|
|
||||||
const auto invitePhrase = useInviteLinkPhrase
|
const auto invitePhrase = useInviteLinkPhrase
|
||||||
? tr::lng_admin_log_admin_invite_link
|
? tr::lng_admin_log_admin_invite_link
|
||||||
: tr::lng_admin_log_admin_invite_users;
|
: 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()
|
const auto callPhrase = channel->isBroadcast()
|
||||||
? tr::lng_admin_log_admin_manage_calls_channel
|
? tr::lng_admin_log_admin_manage_calls_channel
|
||||||
: tr::lng_admin_log_admin_manage_calls;
|
: tr::lng_admin_log_admin_manage_calls;
|
||||||
|
@ -222,12 +213,11 @@ TextWithEntities GenerateAdminChangeText(
|
||||||
{ Flag::BanUsers, tr::lng_admin_log_admin_ban_users },
|
{ Flag::BanUsers, tr::lng_admin_log_admin_ban_users },
|
||||||
{ Flag::InviteByLinkOrAdd, invitePhrase },
|
{ Flag::InviteByLinkOrAdd, invitePhrase },
|
||||||
{ Flag::ManageTopics, tr::lng_admin_log_admin_manage_topics },
|
{ 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::ManageCall, tr::lng_admin_log_admin_manage_calls },
|
||||||
{ Flag::AddAdmins, tr::lng_admin_log_admin_add_admins },
|
{ Flag::AddAdmins, tr::lng_admin_log_admin_add_admins },
|
||||||
};
|
};
|
||||||
phraseMap[Flag::InviteByLinkOrAdd] = invitePhrase;
|
phraseMap[Flag::InviteByLinkOrAdd] = invitePhrase;
|
||||||
phraseMap[Flag::PinMessagesOrTopics] = pinPhrase;
|
|
||||||
phraseMap[Flag::ManageCall] = callPhrase;
|
phraseMap[Flag::ManageCall] = callPhrase;
|
||||||
|
|
||||||
if (!channel->isMegagroup()) {
|
if (!channel->isMegagroup()) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue