Fix Send Media permission exception

This commit is contained in:
Ilya Laktyushin 2023-03-24 15:20:06 +04:00
parent 39d961bc53
commit 09780bc0a4
3 changed files with 42 additions and 8 deletions

View File

@ -466,14 +466,41 @@ public func channelBannedMemberController(context: AccountContext, updatedPresen
} else {
effectiveRightsFlags = defaultBannedRightsFlags
}
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: EnginePeer(peer), expandMedia: false) {
if groupPermissionDependencies(right).contains(rights) {
effectiveRightsFlags.insert(right)
}
}
for item in banSendMediaSubList() {
effectiveRightsFlags.insert(item.0)
for (right, _) in allGroupPermissionList(peer: EnginePeer(peer), expandMedia: false) {
if groupPermissionDependencies(right).contains(item.0) {
effectiveRightsFlags.insert(right)
}
}
}
}
} else {
effectiveRightsFlags.insert(rights)
for (right, _) in allGroupPermissionList(peer: EnginePeer(peer), 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: EnginePeer(peer), expandMedia: false) {
if groupPermissionDependencies(right).contains(rights) {
effectiveRightsFlags.insert(right)
}
}
}
}

View File

@ -826,8 +826,12 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon
case let .member(_, _, _, banInfo, _):
if let banInfo = banInfo {
var exceptionsString = ""
let sendMediaRights = banSendMediaSubList().map { $0.0 }
for (rights, _) in allGroupPermissionList(peer: .channel(channel), expandMedia: true) {
if banInfo.rights.flags.contains(rights) {
if banInfo.rights.flags.contains(.banSendMedia) && sendMediaRights.contains(rights) {
continue
}
if !exceptionsString.isEmpty {
exceptionsString.append(", ")
}
@ -1086,8 +1090,12 @@ public final class ChannelMembersSearchContainerNode: SearchDisplayControllerCon
case let .member(_, _, _, banInfo, _):
if let banInfo = banInfo {
var exceptionsString = ""
let sendMediaRights = banSendMediaSubList().map { $0.0 }
for (rights, _) in allGroupPermissionList(peer: .legacyGroup(group), expandMedia: true) {
if banInfo.rights.flags.contains(rights) {
if banInfo.rights.flags.contains(.banSendMedia) && sendMediaRights.contains(rights) {
continue
}
if !exceptionsString.isEmpty {
exceptionsString.append(", ")
}

View File

@ -1,5 +1,4 @@
import Foundation
import Foundation
import UIKit
import Display
import AsyncDisplayKit