diff --git a/submodules/PeerInfoUI/Sources/ChannelPermissionsController.swift b/submodules/PeerInfoUI/Sources/ChannelPermissionsController.swift index f58b2dbf94..834afd1319 100644 --- a/submodules/PeerInfoUI/Sources/ChannelPermissionsController.swift +++ b/submodules/PeerInfoUI/Sources/ChannelPermissionsController.swift @@ -620,8 +620,12 @@ 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), expandMedia: false) { + var isSelected = !effectiveRightsFlags.contains(rights) + var subItems: [SubPermission] = [] if rights == .banSendMedia { + isSelected = banSendMediaSubList().allSatisfy({ !effectiveRightsFlags.contains($0.0) }) + for (subRight, _) in banSendMediaSubList() { let subRightEnabled = true @@ -629,7 +633,7 @@ private func channelPermissionsControllerEntries(context: AccountContext, presen } } - entries.append(.permission(presentationData.theme, rightIndex, stringForGroupPermission(strings: presentationData.strings, right: rights, isForum: false), !effectiveRightsFlags.contains(rights), rights, true, subItems, state.expandedPermissions.contains(rights))) + entries.append(.permission(presentationData.theme, rightIndex, stringForGroupPermission(strings: presentationData.strings, right: rights, isForum: false), isSelected, rights, true, subItems, state.expandedPermissions.contains(rights))) rightIndex += 1 } @@ -793,14 +797,40 @@ public func channelPermissionsController(context: AccountContext, updatedPresent } else { effectiveRightsFlags = TelegramChatBannedRightsFlags() } - if value { - effectiveRightsFlags.remove(rights) - effectiveRightsFlags = effectiveRightsFlags.subtracting(groupPermissionDependencies(rights)) + + if rights == .banSendMedia { + if value { + effectiveRightsFlags.remove(rights) + for item in banSendMediaSubList() { + effectiveRightsFlags.remove(item.0) + } + } else { + effectiveRightsFlags.insert(rights) + for (right, _) in allGroupPermissionList(peer: .legacyGroup(group), expandMedia: false) { + if groupPermissionDependencies(right).contains(rights) { + effectiveRightsFlags.insert(right) + } + } + + for item in banSendMediaSubList() { + effectiveRightsFlags.insert(item.0) + for (right, _) in allGroupPermissionList(peer: .legacyGroup(group), expandMedia: false) { + if groupPermissionDependencies(right).contains(item.0) { + effectiveRightsFlags.insert(right) + } + } + } + } } else { - effectiveRightsFlags.insert(rights) - for (right, _) in allGroupPermissionList(peer: .legacyGroup(group), expandMedia: false) { - if groupPermissionDependencies(right).contains(rights) { - effectiveRightsFlags.insert(right) + if value { + effectiveRightsFlags.remove(rights) + effectiveRightsFlags = effectiveRightsFlags.subtracting(groupPermissionDependencies(rights)) + } else { + effectiveRightsFlags.insert(rights) + for (right, _) in allGroupPermissionList(peer: .legacyGroup(group), expandMedia: false) { + if groupPermissionDependencies(right).contains(rights) { + effectiveRightsFlags.insert(right) + } } } } diff --git a/submodules/ShareController/Sources/ShareController.swift b/submodules/ShareController/Sources/ShareController.swift index 86bf244d78..6ace0d2ed5 100644 --- a/submodules/ShareController/Sources/ShareController.swift +++ b/submodules/ShareController/Sources/ShareController.swift @@ -778,6 +778,12 @@ public final class ShareController: ViewController { banSendType = true } } + } else if media is TelegramMediaContact || media is TelegramMediaMap { + if case let .channel(channel) = peer, channel.hasBannedPermission(.banSendText) != nil { + banSendType = true + } else if case let .legacyGroup(group) = peer, group.hasBannedPermission(.banSendText) { + banSendType = true + } } if banSendType {