diff --git a/submodules/PeerInfoUI/Sources/ChannelBannedMemberController.swift b/submodules/PeerInfoUI/Sources/ChannelBannedMemberController.swift index fdb9c55b32..f825699395 100644 --- a/submodules/PeerInfoUI/Sources/ChannelBannedMemberController.swift +++ b/submodules/PeerInfoUI/Sources/ChannelBannedMemberController.swift @@ -328,7 +328,7 @@ private func channelBannedMemberControllerEntries(presentationData: Presentation entries.append(.rightsHeader(presentationData.theme, presentationData.strings.GroupPermission_SectionTitle)) 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) var isSelected = defaultEnabled && !currentRightsFlags.contains(right) @@ -388,7 +388,7 @@ private func channelBannedMemberControllerEntries(presentationData: Presentation entries.append(.rightsHeader(presentationData.theme, presentationData.strings.GroupPermission_SectionTitle)) var index = 0 - for (right, _) in allGroupPermissionList(peer: .legacyGroup(group)) { + for (right, _) in allGroupPermissionList(peer: .legacyGroup(group), expandMedia: false) { let defaultEnabled = !defaultBannedRightsFlags.contains(right) var isSelected = defaultEnabled && !currentRightsFlags.contains(right) @@ -471,7 +471,7 @@ public func channelBannedMemberController(context: AccountContext, updatedPresen effectiveRightsFlags = effectiveRightsFlags.subtracting(groupPermissionDependencies(rights)) } else { effectiveRightsFlags.insert(rights) - for (right, _) in allGroupPermissionList(peer: EnginePeer(peer)) { + for (right, _) in allGroupPermissionList(peer: EnginePeer(peer), expandMedia: false) { if groupPermissionDependencies(right).contains(rights) { effectiveRightsFlags.insert(right) } diff --git a/submodules/PeerInfoUI/Sources/ChannelMembersSearchContainerNode.swift b/submodules/PeerInfoUI/Sources/ChannelMembersSearchContainerNode.swift index 029fbf5497..85cdc75b53 100644 --- a/submodules/PeerInfoUI/Sources/ChannelMembersSearchContainerNode.swift +++ b/submodules/PeerInfoUI/Sources/ChannelMembersSearchContainerNode.swift @@ -826,7 +826,7 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon case let .member(_, _, _, banInfo, _): if let banInfo = banInfo { 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 !exceptionsString.isEmpty { exceptionsString.append(", ") @@ -1086,7 +1086,7 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon case let .member(_, _, _, banInfo, _): if let banInfo = banInfo { 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 !exceptionsString.isEmpty { exceptionsString.append(", ") diff --git a/submodules/PeerInfoUI/Sources/ChannelPermissionsController.swift b/submodules/PeerInfoUI/Sources/ChannelPermissionsController.swift index 96f6177d24..10bd87f989 100644 --- a/submodules/PeerInfoUI/Sources/ChannelPermissionsController.swift +++ b/submodules/PeerInfoUI/Sources/ChannelPermissionsController.swift @@ -422,6 +422,18 @@ func compactStringForGroupPermission(strings: PresentationStrings, right: Telegr return strings.GroupPermission_NoSendMessages } else if right.contains(.banSendMedia) { 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) { return strings.GroupPermission_NoSendGifs } else if right.contains(.banEmbedLinks) { @@ -459,9 +471,10 @@ private let internal_allPossibleGroupPermissionList: [(TelegramChatBannedRightsF (.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) { - return [ + result = [ (.banSendText, .banMembers), (.banSendMedia, .banMembers), (.banAddMembers, .banMembers), @@ -470,7 +483,7 @@ public func allGroupPermissionList(peer: EnginePeer) -> [(TelegramChatBannedRigh (.banChangeInfo, .changeInfo) ] } else { - return [ + result = [ (.banSendText, .banMembers), (.banSendMedia, .banMembers), (.banAddMembers, .banMembers), @@ -478,6 +491,16 @@ public func allGroupPermissionList(peer: EnginePeer) -> [(TelegramChatBannedRigh (.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)] { @@ -534,7 +557,7 @@ private func channelPermissionsControllerEntries(context: AccountContext, presen entries.append(.permissionsHeader(presentationData.theme, presentationData.strings.GroupInfo_Permissions_SectionTitle)) 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 if channel.addressName != nil && publicGroupRestrictedPermissions.contains(rights) { enabled = false @@ -596,7 +619,7 @@ private func channelPermissionsControllerEntries(context: AccountContext, presen entries.append(.permissionsHeader(presentationData.theme, presentationData.strings.GroupInfo_Permissions_SectionTitle)) var rightIndex: Int = 0 - for (rights, _) in allGroupPermissionList(peer: .legacyGroup(group)) { + for (rights, _) in allGroupPermissionList(peer: .legacyGroup(group), expandMedia: false) { var subItems: [SubPermission] = [] if rights == .banSendMedia { for (subRight, _) in banSendMediaSubList() { @@ -713,7 +736,7 @@ public func channelPermissionsController(context: AccountContext, updatedPresent } } else { effectiveRightsFlags.insert(rights) - for (right, _) in allGroupPermissionList(peer: .channel(channel)) { + for (right, _) in allGroupPermissionList(peer: .channel(channel), expandMedia: false) { if groupPermissionDependencies(right).contains(rights) { effectiveRightsFlags.insert(right) } @@ -721,7 +744,7 @@ public func channelPermissionsController(context: AccountContext, updatedPresent for item in banSendMediaSubList() { 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) { effectiveRightsFlags.insert(right) } @@ -734,7 +757,7 @@ public func channelPermissionsController(context: AccountContext, updatedPresent effectiveRightsFlags = effectiveRightsFlags.subtracting(groupPermissionDependencies(rights)) } else { effectiveRightsFlags.insert(rights) - for (right, _) in allGroupPermissionList(peer: .channel(channel)) { + for (right, _) in allGroupPermissionList(peer: .channel(channel), expandMedia: false) { if groupPermissionDependencies(right).contains(rights) { effectiveRightsFlags.insert(right) } @@ -770,7 +793,7 @@ public func channelPermissionsController(context: AccountContext, updatedPresent effectiveRightsFlags = effectiveRightsFlags.subtracting(groupPermissionDependencies(rights)) } else { effectiveRightsFlags.insert(rights) - for (right, _) in allGroupPermissionList(peer: .legacyGroup(group)) { + for (right, _) in allGroupPermissionList(peer: .legacyGroup(group), expandMedia: false) { if groupPermissionDependencies(right).contains(rights) { effectiveRightsFlags.insert(right) } @@ -872,7 +895,7 @@ public func channelPermissionsController(context: AccountContext, updatedPresent guard let channel = view.peers[view.peerId] as? TelegramChannel else { return } - for (listRight, permission) in allGroupPermissionList(peer: .channel(channel)) { + for (listRight, permission) in allGroupPermissionList(peer: .channel(channel), expandMedia: false) { if listRight == right { let text: String let presentationData = updatedPresentationData?.initial ?? context.sharedContext.currentPresentationData.with { $0 } diff --git a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift index 3a7438e719..6eb05a0540 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift @@ -1763,7 +1763,7 @@ private func editingItems(data: PeerInfoScreenData?, state: PeerInfoState, chatL var activePermissionCount: Int? if let defaultBannedRights = channel.defaultBannedRights { var count = 0 - for (right, _) in allGroupPermissionList(peer: .channel(channel)) { + for (right, _) in allGroupPermissionList(peer: .channel(channel), expandMedia: true) { if right == .banSendMedia { if banSendMediaSubList().allSatisfy({ !defaultBannedRights.flags.contains($0.0) }) { count += 1 @@ -1781,7 +1781,7 @@ private func editingItems(data: PeerInfoScreenData?, state: PeerInfoState, chatL interaction.openParticipantsSection(.members) })) 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() })) } @@ -1886,7 +1886,7 @@ private func editingItems(data: PeerInfoScreenData?, state: PeerInfoState, chatL var activePermissionCount: Int? if let defaultBannedRights = group.defaultBannedRights { var count = 0 - for (right, _) in allGroupPermissionList(peer: .legacyGroup(group)) { + for (right, _) in allGroupPermissionList(peer: .legacyGroup(group), expandMedia: true) { if right == .banSendMedia { if banSendMediaSubList().allSatisfy({ !defaultBannedRights.flags.contains($0.0) }) { count += 1 @@ -1900,7 +1900,7 @@ private func editingItems(data: PeerInfoScreenData?, state: PeerInfoState, chatL 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() }))