Expand permission count

This commit is contained in:
Ali 2023-01-20 00:11:51 +04:00
parent 1a53010f54
commit f9127e3ebe
4 changed files with 42 additions and 19 deletions

View File

@ -328,7 +328,7 @@ private func channelBannedMemberControllerEntries(presentationData: Presentation
entries.append(.rightsHeader(presentationData.theme, presentationData.strings.GroupPermission_SectionTitle)) entries.append(.rightsHeader(presentationData.theme, presentationData.strings.GroupPermission_SectionTitle))
var index = 0 var index = 0
for (right, _) in allGroupPermissionList(peer: .channel(channel)) { for (right, _) in allGroupPermissionList(peer: .channel(channel), expandMedia: false) {
let defaultEnabled = !defaultBannedRights.flags.contains(right) && channel.hasPermission(.banMembers) let defaultEnabled = !defaultBannedRights.flags.contains(right) && channel.hasPermission(.banMembers)
var isSelected = defaultEnabled && !currentRightsFlags.contains(right) var isSelected = defaultEnabled && !currentRightsFlags.contains(right)
@ -388,7 +388,7 @@ private func channelBannedMemberControllerEntries(presentationData: Presentation
entries.append(.rightsHeader(presentationData.theme, presentationData.strings.GroupPermission_SectionTitle)) entries.append(.rightsHeader(presentationData.theme, presentationData.strings.GroupPermission_SectionTitle))
var index = 0 var index = 0
for (right, _) in allGroupPermissionList(peer: .legacyGroup(group)) { for (right, _) in allGroupPermissionList(peer: .legacyGroup(group), expandMedia: false) {
let defaultEnabled = !defaultBannedRightsFlags.contains(right) let defaultEnabled = !defaultBannedRightsFlags.contains(right)
var isSelected = defaultEnabled && !currentRightsFlags.contains(right) var isSelected = defaultEnabled && !currentRightsFlags.contains(right)
@ -471,7 +471,7 @@ public func channelBannedMemberController(context: AccountContext, updatedPresen
effectiveRightsFlags = effectiveRightsFlags.subtracting(groupPermissionDependencies(rights)) effectiveRightsFlags = effectiveRightsFlags.subtracting(groupPermissionDependencies(rights))
} else { } else {
effectiveRightsFlags.insert(rights) effectiveRightsFlags.insert(rights)
for (right, _) in allGroupPermissionList(peer: EnginePeer(peer)) { for (right, _) in allGroupPermissionList(peer: EnginePeer(peer), expandMedia: false) {
if groupPermissionDependencies(right).contains(rights) { if groupPermissionDependencies(right).contains(rights) {
effectiveRightsFlags.insert(right) effectiveRightsFlags.insert(right)
} }

View File

@ -826,7 +826,7 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon
case let .member(_, _, _, banInfo, _): case let .member(_, _, _, banInfo, _):
if let banInfo = banInfo { if let banInfo = banInfo {
var exceptionsString = "" var exceptionsString = ""
for (rights, _) in allGroupPermissionList(peer: .channel(channel)) { for (rights, _) in allGroupPermissionList(peer: .channel(channel), expandMedia: true) {
if banInfo.rights.flags.contains(rights) { if banInfo.rights.flags.contains(rights) {
if !exceptionsString.isEmpty { if !exceptionsString.isEmpty {
exceptionsString.append(", ") exceptionsString.append(", ")
@ -1086,7 +1086,7 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon
case let .member(_, _, _, banInfo, _): case let .member(_, _, _, banInfo, _):
if let banInfo = banInfo { if let banInfo = banInfo {
var exceptionsString = "" var exceptionsString = ""
for (rights, _) in allGroupPermissionList(peer: .legacyGroup(group)) { for (rights, _) in allGroupPermissionList(peer: .legacyGroup(group), expandMedia: true) {
if banInfo.rights.flags.contains(rights) { if banInfo.rights.flags.contains(rights) {
if !exceptionsString.isEmpty { if !exceptionsString.isEmpty {
exceptionsString.append(", ") exceptionsString.append(", ")

View File

@ -422,6 +422,18 @@ func compactStringForGroupPermission(strings: PresentationStrings, right: Telegr
return strings.GroupPermission_NoSendMessages return strings.GroupPermission_NoSendMessages
} else if right.contains(.banSendMedia) { } else if right.contains(.banSendMedia) {
return strings.GroupPermission_NoSendMedia return strings.GroupPermission_NoSendMedia
} else if right.contains(.banSendPhotos) {
return "no photos"
} else if right.contains(.banSendVideos) {
return "no videos"
} else if right.contains(.banSendMusic) {
return "no music"
} else if right.contains(.banSendFiles) {
return "no files"
} else if right.contains(.banSendVoice) {
return "no voice messages"
} else if right.contains(.banSendInstantVideos) {
return "no video messages"
} else if right.contains(.banSendGifs) { } else if right.contains(.banSendGifs) {
return strings.GroupPermission_NoSendGifs return strings.GroupPermission_NoSendGifs
} else if right.contains(.banEmbedLinks) { } else if right.contains(.banEmbedLinks) {
@ -459,9 +471,10 @@ private let internal_allPossibleGroupPermissionList: [(TelegramChatBannedRightsF
(.banChangeInfo, .changeInfo) (.banChangeInfo, .changeInfo)
] ]
public func allGroupPermissionList(peer: EnginePeer) -> [(TelegramChatBannedRightsFlags, TelegramChannelPermission)] { public func allGroupPermissionList(peer: EnginePeer, expandMedia: Bool) -> [(TelegramChatBannedRightsFlags, TelegramChannelPermission)] {
var result: [(TelegramChatBannedRightsFlags, TelegramChannelPermission)]
if case let .channel(channel) = peer, channel.flags.contains(.isForum) { if case let .channel(channel) = peer, channel.flags.contains(.isForum) {
return [ result = [
(.banSendText, .banMembers), (.banSendText, .banMembers),
(.banSendMedia, .banMembers), (.banSendMedia, .banMembers),
(.banAddMembers, .banMembers), (.banAddMembers, .banMembers),
@ -470,7 +483,7 @@ public func allGroupPermissionList(peer: EnginePeer) -> [(TelegramChatBannedRigh
(.banChangeInfo, .changeInfo) (.banChangeInfo, .changeInfo)
] ]
} else { } else {
return [ result = [
(.banSendText, .banMembers), (.banSendText, .banMembers),
(.banSendMedia, .banMembers), (.banSendMedia, .banMembers),
(.banAddMembers, .banMembers), (.banAddMembers, .banMembers),
@ -478,6 +491,16 @@ public func allGroupPermissionList(peer: EnginePeer) -> [(TelegramChatBannedRigh
(.banChangeInfo, .changeInfo) (.banChangeInfo, .changeInfo)
] ]
} }
if expandMedia, let index = result.firstIndex(where: { $0.0 == .banSendMedia }) {
result.remove(at: index)
for (subRight, permission) in banSendMediaSubList().reversed() {
result.insert((subRight, permission), at: index)
}
}
return result
} }
public func banSendMediaSubList() -> [(TelegramChatBannedRightsFlags, TelegramChannelPermission)] { public func banSendMediaSubList() -> [(TelegramChatBannedRightsFlags, TelegramChannelPermission)] {
@ -534,7 +557,7 @@ private func channelPermissionsControllerEntries(context: AccountContext, presen
entries.append(.permissionsHeader(presentationData.theme, presentationData.strings.GroupInfo_Permissions_SectionTitle)) entries.append(.permissionsHeader(presentationData.theme, presentationData.strings.GroupInfo_Permissions_SectionTitle))
var rightIndex: Int = 0 var rightIndex: Int = 0
for (rights, correspondingAdminRight) in allGroupPermissionList(peer: .channel(channel)) { for (rights, correspondingAdminRight) in allGroupPermissionList(peer: .channel(channel), expandMedia: false) {
var enabled = true var enabled = true
if channel.addressName != nil && publicGroupRestrictedPermissions.contains(rights) { if channel.addressName != nil && publicGroupRestrictedPermissions.contains(rights) {
enabled = false enabled = false
@ -596,7 +619,7 @@ private func channelPermissionsControllerEntries(context: AccountContext, presen
entries.append(.permissionsHeader(presentationData.theme, presentationData.strings.GroupInfo_Permissions_SectionTitle)) entries.append(.permissionsHeader(presentationData.theme, presentationData.strings.GroupInfo_Permissions_SectionTitle))
var rightIndex: Int = 0 var rightIndex: Int = 0
for (rights, _) in allGroupPermissionList(peer: .legacyGroup(group)) { for (rights, _) in allGroupPermissionList(peer: .legacyGroup(group), expandMedia: false) {
var subItems: [SubPermission] = [] var subItems: [SubPermission] = []
if rights == .banSendMedia { if rights == .banSendMedia {
for (subRight, _) in banSendMediaSubList() { for (subRight, _) in banSendMediaSubList() {
@ -713,7 +736,7 @@ public func channelPermissionsController(context: AccountContext, updatedPresent
} }
} else { } else {
effectiveRightsFlags.insert(rights) effectiveRightsFlags.insert(rights)
for (right, _) in allGroupPermissionList(peer: .channel(channel)) { for (right, _) in allGroupPermissionList(peer: .channel(channel), expandMedia: false) {
if groupPermissionDependencies(right).contains(rights) { if groupPermissionDependencies(right).contains(rights) {
effectiveRightsFlags.insert(right) effectiveRightsFlags.insert(right)
} }
@ -721,7 +744,7 @@ public func channelPermissionsController(context: AccountContext, updatedPresent
for item in banSendMediaSubList() { for item in banSendMediaSubList() {
effectiveRightsFlags.insert(item.0) effectiveRightsFlags.insert(item.0)
for (right, _) in allGroupPermissionList(peer: .channel(channel)) { for (right, _) in allGroupPermissionList(peer: .channel(channel), expandMedia: false) {
if groupPermissionDependencies(right).contains(item.0) { if groupPermissionDependencies(right).contains(item.0) {
effectiveRightsFlags.insert(right) effectiveRightsFlags.insert(right)
} }
@ -734,7 +757,7 @@ public func channelPermissionsController(context: AccountContext, updatedPresent
effectiveRightsFlags = effectiveRightsFlags.subtracting(groupPermissionDependencies(rights)) effectiveRightsFlags = effectiveRightsFlags.subtracting(groupPermissionDependencies(rights))
} else { } else {
effectiveRightsFlags.insert(rights) effectiveRightsFlags.insert(rights)
for (right, _) in allGroupPermissionList(peer: .channel(channel)) { for (right, _) in allGroupPermissionList(peer: .channel(channel), expandMedia: false) {
if groupPermissionDependencies(right).contains(rights) { if groupPermissionDependencies(right).contains(rights) {
effectiveRightsFlags.insert(right) effectiveRightsFlags.insert(right)
} }
@ -770,7 +793,7 @@ public func channelPermissionsController(context: AccountContext, updatedPresent
effectiveRightsFlags = effectiveRightsFlags.subtracting(groupPermissionDependencies(rights)) effectiveRightsFlags = effectiveRightsFlags.subtracting(groupPermissionDependencies(rights))
} else { } else {
effectiveRightsFlags.insert(rights) effectiveRightsFlags.insert(rights)
for (right, _) in allGroupPermissionList(peer: .legacyGroup(group)) { for (right, _) in allGroupPermissionList(peer: .legacyGroup(group), expandMedia: false) {
if groupPermissionDependencies(right).contains(rights) { if groupPermissionDependencies(right).contains(rights) {
effectiveRightsFlags.insert(right) effectiveRightsFlags.insert(right)
} }
@ -872,7 +895,7 @@ public func channelPermissionsController(context: AccountContext, updatedPresent
guard let channel = view.peers[view.peerId] as? TelegramChannel else { guard let channel = view.peers[view.peerId] as? TelegramChannel else {
return return
} }
for (listRight, permission) in allGroupPermissionList(peer: .channel(channel)) { for (listRight, permission) in allGroupPermissionList(peer: .channel(channel), expandMedia: false) {
if listRight == right { if listRight == right {
let text: String let text: String
let presentationData = updatedPresentationData?.initial ?? context.sharedContext.currentPresentationData.with { $0 } let presentationData = updatedPresentationData?.initial ?? context.sharedContext.currentPresentationData.with { $0 }

View File

@ -1763,7 +1763,7 @@ private func editingItems(data: PeerInfoScreenData?, state: PeerInfoState, chatL
var activePermissionCount: Int? var activePermissionCount: Int?
if let defaultBannedRights = channel.defaultBannedRights { if let defaultBannedRights = channel.defaultBannedRights {
var count = 0 var count = 0
for (right, _) in allGroupPermissionList(peer: .channel(channel)) { for (right, _) in allGroupPermissionList(peer: .channel(channel), expandMedia: true) {
if right == .banSendMedia { if right == .banSendMedia {
if banSendMediaSubList().allSatisfy({ !defaultBannedRights.flags.contains($0.0) }) { if banSendMediaSubList().allSatisfy({ !defaultBannedRights.flags.contains($0.0) }) {
count += 1 count += 1
@ -1781,7 +1781,7 @@ private func editingItems(data: PeerInfoScreenData?, state: PeerInfoState, chatL
interaction.openParticipantsSection(.members) interaction.openParticipantsSection(.members)
})) }))
if !channel.flags.contains(.isGigagroup) { if !channel.flags.contains(.isGigagroup) {
items[.peerSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemPermissions, label: .text(activePermissionCount.flatMap({ "\($0)/\(allGroupPermissionList(peer: .channel(channel)).count)" }) ?? ""), text: presentationData.strings.GroupInfo_Permissions, icon: UIImage(bundleImageName: "Settings/Menu/SetPasscode"), action: { items[.peerSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemPermissions, label: .text(activePermissionCount.flatMap({ "\($0)/\(allGroupPermissionList(peer: .channel(channel), expandMedia: true).count)" }) ?? ""), text: presentationData.strings.GroupInfo_Permissions, icon: UIImage(bundleImageName: "Settings/Menu/SetPasscode"), action: {
interaction.openPermissions() interaction.openPermissions()
})) }))
} }
@ -1886,7 +1886,7 @@ private func editingItems(data: PeerInfoScreenData?, state: PeerInfoState, chatL
var activePermissionCount: Int? var activePermissionCount: Int?
if let defaultBannedRights = group.defaultBannedRights { if let defaultBannedRights = group.defaultBannedRights {
var count = 0 var count = 0
for (right, _) in allGroupPermissionList(peer: .legacyGroup(group)) { for (right, _) in allGroupPermissionList(peer: .legacyGroup(group), expandMedia: true) {
if right == .banSendMedia { if right == .banSendMedia {
if banSendMediaSubList().allSatisfy({ !defaultBannedRights.flags.contains($0.0) }) { if banSendMediaSubList().allSatisfy({ !defaultBannedRights.flags.contains($0.0) }) {
count += 1 count += 1
@ -1900,7 +1900,7 @@ private func editingItems(data: PeerInfoScreenData?, state: PeerInfoState, chatL
activePermissionCount = count activePermissionCount = count
} }
items[.peerSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemPermissions, label: .text(activePermissionCount.flatMap({ "\($0)/\(allGroupPermissionList(peer: .legacyGroup(group)).count)" }) ?? ""), text: presentationData.strings.GroupInfo_Permissions, icon: UIImage(bundleImageName: "Settings/Menu/SetPasscode"), action: { items[.peerSettings]!.append(PeerInfoScreenDisclosureItem(id: ItemPermissions, label: .text(activePermissionCount.flatMap({ "\($0)/\(allGroupPermissionList(peer: .legacyGroup(group), expandMedia: true).count)" }) ?? ""), text: presentationData.strings.GroupInfo_Permissions, icon: UIImage(bundleImageName: "Settings/Menu/SetPasscode"), action: {
interaction.openPermissions() interaction.openPermissions()
})) }))