mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-10-09 03:20:48 +00:00
Display relevant messages when editing rights and permissions is not possible
This commit is contained in:
parent
539302db45
commit
049ff5e31e
@ -3868,6 +3868,11 @@ Unused sets are archived when you add more.";
|
||||
"GroupPermission.NotAvailableInPublicGroups" = "This permission is not available in public groups.";
|
||||
"GroupPermission.AddMembersNotAvailable" = "You don't have persmission to add members.";
|
||||
|
||||
"Channel.EditAdmin.PermissionEnabledByDefault" = "This option is permitted for all members in Group Permissions.";
|
||||
|
||||
"GroupPermission.EditingDisabled" = "You cannot edit restrictions of this user.";
|
||||
"GroupPermission.PermissionDisabledByDefault" = "This option is disabled for all members in Group Permissions.";
|
||||
|
||||
"Channel.Management.RemovedBy" = "Removed by %@";
|
||||
|
||||
"GroupRemoved.Title" = "Removed Users";
|
||||
@ -4497,6 +4502,8 @@ Any member of this group will be able to see messages in the channel.";
|
||||
"Channel.AdminLog.DisabledSlowmode" = "%@ disabled slowmode";
|
||||
"Channel.AdminLog.SetSlowmode" = "%1$@ set slowmode to %2$@";
|
||||
|
||||
"GroupInfo.Permissions.EditingDisabled" = "You cannot edit this permission.";
|
||||
|
||||
"Chat.SlowmodeTooltip" = "Slowmode is enabled. You can send\nyour next message in %@.";
|
||||
"Chat.SlowmodeTooltipPending" = "Slowmode is enabled. You can't send more than one message at once.";
|
||||
"Chat.AttachmentLimitReached" = "You can't select more items.";
|
||||
|
@ -22,9 +22,10 @@ public class ItemListSwitchItem: ListViewItem, ItemListItem {
|
||||
public let sectionId: ItemListSectionId
|
||||
let style: ItemListStyle
|
||||
let updated: (Bool) -> Void
|
||||
let activatedWhileDisabled: () -> Void
|
||||
public let tag: ItemListItemTag?
|
||||
|
||||
public init(theme: PresentationTheme, title: String, value: Bool, type: ItemListSwitchItemNodeType = .regular, enableInteractiveChanges: Bool = true, enabled: Bool = true, maximumNumberOfLines: Int = 1, sectionId: ItemListSectionId, style: ItemListStyle, updated: @escaping (Bool) -> Void, tag: ItemListItemTag? = nil) {
|
||||
public init(theme: PresentationTheme, title: String, value: Bool, type: ItemListSwitchItemNodeType = .regular, enableInteractiveChanges: Bool = true, enabled: Bool = true, maximumNumberOfLines: Int = 1, sectionId: ItemListSectionId, style: ItemListStyle, updated: @escaping (Bool) -> Void, activatedWhileDisabled: @escaping () -> Void = {}, tag: ItemListItemTag? = nil) {
|
||||
self.theme = theme
|
||||
self.title = title
|
||||
self.value = value
|
||||
@ -35,6 +36,7 @@ public class ItemListSwitchItem: ListViewItem, ItemListItem {
|
||||
self.sectionId = sectionId
|
||||
self.style = style
|
||||
self.updated = updated
|
||||
self.activatedWhileDisabled = activatedWhileDisabled
|
||||
self.tag = tag
|
||||
}
|
||||
|
||||
@ -259,7 +261,7 @@ public class ItemListSwitchItemNode: ListViewItemNode, ItemListItemNode {
|
||||
if let currentDisabledOverlayNode = currentDisabledOverlayNode {
|
||||
if currentDisabledOverlayNode != strongSelf.disabledOverlayNode {
|
||||
strongSelf.disabledOverlayNode = currentDisabledOverlayNode
|
||||
strongSelf.addSubnode(currentDisabledOverlayNode)
|
||||
strongSelf.insertSubnode(currentDisabledOverlayNode, belowSubnode: strongSelf.switchGestureNode)
|
||||
currentDisabledOverlayNode.alpha = 0.0
|
||||
transition.updateAlpha(node: currentDisabledOverlayNode, alpha: 1.0)
|
||||
currentDisabledOverlayNode.frame = CGRect(origin: CGPoint(), size: CGSize(width: layout.contentSize.width, height: layout.contentSize.height - separatorHeight))
|
||||
@ -362,7 +364,7 @@ public class ItemListSwitchItemNode: ListViewItemNode, ItemListItemNode {
|
||||
}
|
||||
switchView.isUserInteractionEnabled = item.enableInteractiveChanges
|
||||
}
|
||||
strongSelf.switchGestureNode.isHidden = item.enableInteractiveChanges
|
||||
strongSelf.switchGestureNode.isHidden = item.enableInteractiveChanges && item.enabled
|
||||
|
||||
strongSelf.highlightedBackgroundNode.frame = CGRect(origin: CGPoint(x: 0.0, y: -UIScreenPixel), size: CGSize(width: params.width, height: 44.0 + UIScreenPixel + UIScreenPixel))
|
||||
}
|
||||
@ -442,8 +444,12 @@ public class ItemListSwitchItemNode: ListViewItemNode, ItemListItemNode {
|
||||
|
||||
@objc private func tapGesture(_ recognizer: UITapGestureRecognizer) {
|
||||
if let item = self.item, let switchView = self.switchNode.view as? UISwitch, case .ended = recognizer.state {
|
||||
let value = switchView.isOn
|
||||
item.updated(!value)
|
||||
if item.enabled {
|
||||
let value = switchView.isOn
|
||||
item.updated(!value)
|
||||
} else {
|
||||
item.activatedWhileDisabled()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ private let rankMaxLength: Int32 = 16
|
||||
private final class ChannelAdminControllerArguments {
|
||||
let account: Account
|
||||
let toggleRight: (TelegramChatAdminRightsFlags, TelegramChatAdminRightsFlags) -> Void
|
||||
let toggleRightWhileDisabled: (TelegramChatAdminRightsFlags, TelegramChatAdminRightsFlags) -> Void
|
||||
let transferOwnership: () -> Void
|
||||
let updateRank: (String, String) -> Void
|
||||
let updateFocusedOnRank: (Bool) -> Void
|
||||
@ -27,9 +28,10 @@ private final class ChannelAdminControllerArguments {
|
||||
let dismissInput: () -> Void
|
||||
let animateError: () -> Void
|
||||
|
||||
init(account: Account, toggleRight: @escaping (TelegramChatAdminRightsFlags, TelegramChatAdminRightsFlags) -> Void, transferOwnership: @escaping () -> Void, updateRank: @escaping (String, String) -> Void, updateFocusedOnRank: @escaping (Bool) -> Void, dismissAdmin: @escaping () -> Void, dismissInput: @escaping () -> Void, animateError: @escaping () -> Void) {
|
||||
init(account: Account, toggleRight: @escaping (TelegramChatAdminRightsFlags, TelegramChatAdminRightsFlags) -> Void, toggleRightWhileDisabled: @escaping (TelegramChatAdminRightsFlags, TelegramChatAdminRightsFlags) -> Void, transferOwnership: @escaping () -> Void, updateRank: @escaping (String, String) -> Void, updateFocusedOnRank: @escaping (Bool) -> Void, dismissAdmin: @escaping () -> Void, dismissInput: @escaping () -> Void, animateError: @escaping () -> Void) {
|
||||
self.account = account
|
||||
self.toggleRight = toggleRight
|
||||
self.toggleRightWhileDisabled = toggleRightWhileDisabled
|
||||
self.transferOwnership = transferOwnership
|
||||
self.updateRank = updateRank
|
||||
self.updateFocusedOnRank = updateFocusedOnRank
|
||||
@ -397,6 +399,8 @@ private enum ChannelAdminEntry: ItemListNodeEntry {
|
||||
case let .rightItem(theme, _, text, right, flags, value, enabled):
|
||||
return ItemListSwitchItem(theme: theme, title: text, value: value, type: .icon, enabled: enabled, sectionId: self.section, style: .blocks, updated: { _ in
|
||||
arguments.toggleRight(right, flags)
|
||||
}, activatedWhileDisabled: {
|
||||
arguments.toggleRightWhileDisabled(right, flags)
|
||||
})
|
||||
case let .addAdminsInfo(theme, text):
|
||||
return ItemListTextItem(theme: theme, text: .plain(text), sectionId: self.section)
|
||||
@ -510,8 +514,8 @@ private func rightDependencies(_ right: TelegramChatAdminRightsFlags) -> [Telegr
|
||||
}
|
||||
}
|
||||
|
||||
private func canEditAdminRights(accountPeerId: PeerId, channelView: PeerView, initialParticipant: ChannelParticipant?) -> Bool {
|
||||
if let channel = channelView.peers[channelView.peerId] as? TelegramChannel {
|
||||
private func canEditAdminRights(accountPeerId: PeerId, channelPeer: Peer, initialParticipant: ChannelParticipant?) -> Bool {
|
||||
if let channel = channelPeer as? TelegramChannel {
|
||||
if channel.flags.contains(.isCreator) {
|
||||
return true
|
||||
} else if let initialParticipant = initialParticipant {
|
||||
@ -528,7 +532,7 @@ private func canEditAdminRights(accountPeerId: PeerId, channelView: PeerView, in
|
||||
} else {
|
||||
return channel.hasPermission(.addAdmins)
|
||||
}
|
||||
} else if let group = channelView.peers[channelView.peerId] as? TelegramGroup {
|
||||
} else if let group = channelPeer as? TelegramGroup {
|
||||
if case .creator = group.role {
|
||||
return true
|
||||
} else {
|
||||
@ -539,6 +543,23 @@ private func canEditAdminRights(accountPeerId: PeerId, channelView: PeerView, in
|
||||
}
|
||||
}
|
||||
|
||||
private func rightEnabledByDefault(channelPeer: Peer, right: TelegramChatAdminRightsFlags) -> Bool {
|
||||
if let channel = channelPeer as? TelegramChannel {
|
||||
guard let defaultBannedRights = channel.defaultBannedRights else {
|
||||
return false
|
||||
}
|
||||
switch right {
|
||||
case .canPinMessages:
|
||||
return !defaultBannedRights.flags.contains(.banPinMessages)
|
||||
case .canChangeInfo:
|
||||
return !defaultBannedRights.flags.contains(.banChangeInfo)
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
private func areAllAdminRightsEnabled(_ flags: TelegramChatAdminRightsFlags, group: Bool) -> Bool {
|
||||
if group {
|
||||
return TelegramChatAdminRightsFlags.groupSpecific.intersection(flags) == TelegramChatAdminRightsFlags.groupSpecific
|
||||
@ -594,7 +615,7 @@ private func channelAdminControllerEntries(presentationData: PresentationData, s
|
||||
} else {
|
||||
entries.append(.rightsTitle(presentationData.theme, presentationData.strings.Channel_EditAdmin_PermissionsHeader))
|
||||
|
||||
if canEditAdminRights(accountPeerId: accountPeerId, channelView: channelView, initialParticipant: initialParticipant) {
|
||||
if let channelPeer = channelView.peers[channelView.peerId], canEditAdminRights(accountPeerId: accountPeerId, channelPeer: channelPeer, initialParticipant: initialParticipant) {
|
||||
let accountUserRightsFlags: TelegramChatAdminRightsFlags
|
||||
if channel.flags.contains(.isCreator) {
|
||||
accountUserRightsFlags = maskRightsFlags
|
||||
@ -616,7 +637,7 @@ private func channelAdminControllerEntries(presentationData: PresentationData, s
|
||||
var index = 0
|
||||
for right in rightsOrder {
|
||||
if accountUserRightsFlags.contains(right) {
|
||||
entries.append(.rightItem(presentationData.theme, index, stringForRight(strings: presentationData.strings, right: right, isGroup: isGroup, defaultBannedRights: channel.defaultBannedRights), right, currentRightsFlags, currentRightsFlags.contains(right), !state.updating && admin.id != accountPeerId))
|
||||
entries.append(.rightItem(presentationData.theme, index, stringForRight(strings: presentationData.strings, right: right, isGroup: isGroup, defaultBannedRights: channel.defaultBannedRights), right, currentRightsFlags, currentRightsFlags.contains(right), !state.updating && admin.id != accountPeerId && !rightEnabledByDefault(channelPeer: channel, right: right)))
|
||||
index += 1
|
||||
}
|
||||
}
|
||||
@ -789,6 +810,27 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi
|
||||
}
|
||||
return current.withUpdatedUpdatedFlags(updated)
|
||||
}
|
||||
}, toggleRightWhileDisabled: { right, _ in
|
||||
let _ = (context.account.postbox.transaction { transaction -> (peer: Peer?, member: Peer?) in
|
||||
return (peer: transaction.getPeer(peerId), member: transaction.getPeer(adminId))
|
||||
}
|
||||
|> deliverOnMainQueue).start(next: { peer, member in
|
||||
guard let peer = peer, let _ = member as? TelegramUser else {
|
||||
return
|
||||
}
|
||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||
|
||||
let text: String
|
||||
if !canEditAdminRights(accountPeerId: context.account.peerId, channelPeer: peer, initialParticipant: initialParticipant) {
|
||||
text = presentationData.strings.Channel_EditAdmin_CannotEdit
|
||||
} else if rightEnabledByDefault(channelPeer: peer, right: right) {
|
||||
text = presentationData.strings.Channel_EditAdmin_PermissionEnabledByDefault
|
||||
} else {
|
||||
text = presentationData.strings.Channel_EditAdmin_CannotEdit
|
||||
}
|
||||
|
||||
presentControllerImpl?(standardTextAlertController(theme: AlertControllerTheme(presentationTheme: presentationData.theme), title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil)
|
||||
})
|
||||
}, transferOwnership: {
|
||||
let _ = (context.account.postbox.transaction { transaction -> (peer: Peer?, member: Peer?) in
|
||||
return (peer: transaction.getPeer(peerId), member: transaction.getPeer(adminId))
|
||||
@ -869,7 +911,7 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi
|
||||
|> map { presentationData, state, combinedView -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
||||
let channelView = combinedView.views[.peer(peerId: peerId, components: .all)] as! PeerView
|
||||
let adminView = combinedView.views[.peer(peerId: adminId, components: .all)] as! PeerView
|
||||
let canEdit = canEditAdminRights(accountPeerId: context.account.peerId, channelView: channelView, initialParticipant: initialParticipant)
|
||||
let canEdit = canEditAdminRights(accountPeerId: context.account.peerId, channelPeer: channelView.peers[channelView.peerId]!, initialParticipant: initialParticipant)
|
||||
|
||||
let leftNavigationButton: ItemListNavigationButton
|
||||
if canEdit {
|
||||
|
@ -18,16 +18,16 @@ import ItemListAvatarAndNameInfoItem
|
||||
private final class ChannelBannedMemberControllerArguments {
|
||||
let account: Account
|
||||
let toggleRight: (TelegramChatBannedRightsFlags, Bool) -> Void
|
||||
let toggleRightWhileDisabled: (TelegramChatBannedRightsFlags) -> Void
|
||||
let openTimeout: () -> Void
|
||||
let delete: () -> Void
|
||||
let notifyPermissionGloballyDisabled: () -> Void
|
||||
|
||||
init(account: Account, toggleRight: @escaping (TelegramChatBannedRightsFlags, Bool) -> Void, openTimeout: @escaping () -> Void, delete: @escaping () -> Void, notifyPermissionGloballyDisabled: @escaping () -> Void) {
|
||||
init(account: Account, toggleRight: @escaping (TelegramChatBannedRightsFlags, Bool) -> Void, toggleRightWhileDisabled: @escaping (TelegramChatBannedRightsFlags) -> Void, openTimeout: @escaping () -> Void, delete: @escaping () -> Void) {
|
||||
self.account = account
|
||||
self.toggleRight = toggleRight
|
||||
self.toggleRightWhileDisabled = toggleRightWhileDisabled
|
||||
self.openTimeout = openTimeout
|
||||
self.delete = delete
|
||||
self.notifyPermissionGloballyDisabled = notifyPermissionGloballyDisabled
|
||||
}
|
||||
}
|
||||
|
||||
@ -231,12 +231,10 @@ private enum ChannelBannedMemberEntry: ItemListNodeEntry {
|
||||
case let .rightsHeader(theme, text):
|
||||
return ItemListSectionHeaderItem(theme: theme, text: text, sectionId: self.section)
|
||||
case let .rightItem(theme, _, text, right, value, enabled):
|
||||
return ItemListSwitchItem(theme: theme, title: text, value: value, type: .icon, enableInteractiveChanges: enabled, enabled: true, sectionId: self.section, style: .blocks, updated: { value in
|
||||
if enabled {
|
||||
arguments.toggleRight(right, value)
|
||||
} else {
|
||||
arguments.notifyPermissionGloballyDisabled()
|
||||
}
|
||||
return ItemListSwitchItem(theme: theme, title: text, value: value, type: .icon, enableInteractiveChanges: enabled, enabled: enabled, sectionId: self.section, style: .blocks, updated: { value in
|
||||
arguments.toggleRight(right, value)
|
||||
}, activatedWhileDisabled: {
|
||||
arguments.toggleRightWhileDisabled(right)
|
||||
})
|
||||
case let .timeout(theme, text, value):
|
||||
return ItemListDisclosureItem(theme: theme, title: text, label: value, sectionId: self.section, style: .blocks, action: {
|
||||
@ -314,8 +312,8 @@ private func channelBannedMemberControllerEntries(presentationData: Presentation
|
||||
entries.append(.rightsHeader(presentationData.theme, presentationData.strings.GroupPermission_SectionTitle))
|
||||
|
||||
var index = 0
|
||||
for right in allGroupPermissionList {
|
||||
let defaultEnabled = !defaultBannedRights.flags.contains(right)
|
||||
for (right, _) in allGroupPermissionList {
|
||||
let defaultEnabled = !defaultBannedRights.flags.contains(right) && channel.hasPermission(.banMembers)
|
||||
entries.append(.rightItem(presentationData.theme, index, stringForGroupPermission(strings: presentationData.strings, right: right), right, defaultEnabled && !currentRightsFlags.contains(right), defaultEnabled && !state.updating))
|
||||
index += 1
|
||||
}
|
||||
@ -360,7 +358,7 @@ private func channelBannedMemberControllerEntries(presentationData: Presentation
|
||||
entries.append(.rightsHeader(presentationData.theme, presentationData.strings.GroupPermission_SectionTitle))
|
||||
|
||||
var index = 0
|
||||
for right in allGroupPermissionList {
|
||||
for (right, _) in allGroupPermissionList {
|
||||
let defaultEnabled = !defaultBannedRightsFlags.contains(right)
|
||||
entries.append(.rightItem(presentationData.theme, index, stringForGroupPermission(strings: presentationData.strings, right: right), right, defaultEnabled && !currentRightsFlags.contains(right), defaultEnabled && !state.updating))
|
||||
index += 1
|
||||
@ -428,7 +426,7 @@ public func channelBannedMemberController(context: AccountContext, peerId: PeerI
|
||||
effectiveRightsFlags = effectiveRightsFlags.subtracting(groupPermissionDependencies(rights))
|
||||
} else {
|
||||
effectiveRightsFlags.insert(rights)
|
||||
for right in allGroupPermissionList {
|
||||
for (right, _) in allGroupPermissionList {
|
||||
if groupPermissionDependencies(right).contains(rights) {
|
||||
effectiveRightsFlags.insert(right)
|
||||
}
|
||||
@ -438,6 +436,29 @@ public func channelBannedMemberController(context: AccountContext, peerId: PeerI
|
||||
return state
|
||||
}
|
||||
})
|
||||
}, toggleRightWhileDisabled: { right in
|
||||
let _ = (peerView.get()
|
||||
|> take(1)
|
||||
|> deliverOnMainQueue).start(next: { view in
|
||||
guard let channel = view.peers[view.peerId] as? TelegramChannel else {
|
||||
return
|
||||
}
|
||||
guard let defaultBannedRights = channel.defaultBannedRights else {
|
||||
return
|
||||
}
|
||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||
let text: String
|
||||
if channel.hasPermission(.banMembers) {
|
||||
if defaultBannedRights.flags.contains(right) {
|
||||
text = presentationData.strings.GroupPermission_PermissionDisabledByDefault
|
||||
} else {
|
||||
text = presentationData.strings.GroupPermission_PermissionGloballyDisabled
|
||||
}
|
||||
} else {
|
||||
text = presentationData.strings.GroupPermission_EditingDisabled
|
||||
}
|
||||
presentControllerImpl?(textAlertController(context: context, title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil)
|
||||
})
|
||||
}, openTimeout: {
|
||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||
let actionSheet = ActionSheetController(presentationTheme: presentationData.theme)
|
||||
@ -501,9 +522,6 @@ public func channelBannedMemberController(context: AccountContext, peerId: PeerI
|
||||
})
|
||||
])])
|
||||
presentControllerImpl?(actionSheet, nil)
|
||||
}, notifyPermissionGloballyDisabled: {
|
||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||
presentControllerImpl?(textAlertController(context: context, title: nil, text: presentationData.strings.GroupPermission_PermissionGloballyDisabled, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil)
|
||||
})
|
||||
|
||||
var keys: [PostboxViewKey] = [.peer(peerId: peerId, components: .all), .peer(peerId: memberId, components: .all)]
|
||||
|
@ -743,7 +743,7 @@ final class ChannelMembersSearchContainerNode: SearchDisplayControllerContentNod
|
||||
case let .member(_, _, _, banInfo, _):
|
||||
if let banInfo = banInfo {
|
||||
var exceptionsString = ""
|
||||
for rights in allGroupPermissionList {
|
||||
for (rights, _) in allGroupPermissionList {
|
||||
if banInfo.rights.flags.contains(rights) {
|
||||
if !exceptionsString.isEmpty {
|
||||
exceptionsString.append(", ")
|
||||
@ -1023,7 +1023,7 @@ final class ChannelMembersSearchContainerNode: SearchDisplayControllerContentNod
|
||||
case let .member(_, _, _, banInfo, _):
|
||||
if let banInfo = banInfo {
|
||||
var exceptionsString = ""
|
||||
for rights in allGroupPermissionList {
|
||||
for (rights, _) in allGroupPermissionList {
|
||||
if banInfo.rights.flags.contains(rights) {
|
||||
if !exceptionsString.isEmpty {
|
||||
exceptionsString.append(", ")
|
||||
|
@ -228,6 +228,8 @@ private enum ChannelPermissionsEntry: ItemListNodeEntry {
|
||||
} else {
|
||||
arguments.presentRestrictedPermissionAlert(rights)
|
||||
}
|
||||
}, activatedWhileDisabled: {
|
||||
arguments.presentRestrictedPermissionAlert(rights)
|
||||
})
|
||||
case let .slowmodeHeader(theme, value):
|
||||
return ItemListSectionHeaderItem(theme: theme, text: value, sectionId: self.section)
|
||||
@ -253,7 +255,7 @@ private enum ChannelPermissionsEntry: ItemListNodeEntry {
|
||||
case let .member(_, _, _, banInfo, _):
|
||||
var exceptionsString = ""
|
||||
if let banInfo = banInfo {
|
||||
for rights in allGroupPermissionList {
|
||||
for (rights, _) in allGroupPermissionList {
|
||||
if !defaultBannedRights.contains(rights) && banInfo.rights.flags.contains(rights) {
|
||||
if !exceptionsString.isEmpty {
|
||||
exceptionsString.append(", ")
|
||||
@ -333,15 +335,15 @@ func compactStringForGroupPermission(strings: PresentationStrings, right: Telegr
|
||||
}
|
||||
}
|
||||
|
||||
let allGroupPermissionList: [TelegramChatBannedRightsFlags] = [
|
||||
.banSendMessages,
|
||||
.banSendMedia,
|
||||
.banSendGifs,
|
||||
.banEmbedLinks,
|
||||
.banSendPolls,
|
||||
.banAddMembers,
|
||||
.banPinMessages,
|
||||
.banChangeInfo
|
||||
let allGroupPermissionList: [(TelegramChatBannedRightsFlags, TelegramChannelPermission)] = [
|
||||
(.banSendMessages, .sendMessages),
|
||||
(.banSendMedia, .sendMessages),
|
||||
(.banSendGifs, .sendMessages),
|
||||
(.banEmbedLinks, .sendMessages),
|
||||
(.banSendPolls, .sendMessages),
|
||||
(.banAddMembers, .inviteMembers),
|
||||
(.banPinMessages, .pinMessages),
|
||||
(.banChangeInfo, .changeInfo)
|
||||
]
|
||||
|
||||
let publicGroupRestrictedPermissions: TelegramChatBannedRightsFlags = [
|
||||
@ -402,16 +404,19 @@ private func channelPermissionsControllerEntries(presentationData: PresentationD
|
||||
|
||||
entries.append(.permissionsHeader(presentationData.theme, presentationData.strings.GroupInfo_Permissions_SectionTitle))
|
||||
var rightIndex: Int = 0
|
||||
for rights in allGroupPermissionList {
|
||||
for (rights, correspondingAdminRight) in allGroupPermissionList {
|
||||
var enabled: Bool? = true
|
||||
if channel.addressName != nil && publicGroupRestrictedPermissions.contains(rights) {
|
||||
enabled = nil
|
||||
enabled = false
|
||||
}
|
||||
if !channel.hasPermission(.inviteMembers) {
|
||||
if rights.contains(TelegramChatBannedRightsFlags.banAddMembers) {
|
||||
enabled = nil
|
||||
if rights.contains(.banAddMembers) {
|
||||
enabled = false
|
||||
}
|
||||
}
|
||||
if !channel.hasPermission(correspondingAdminRight) {
|
||||
enabled = false
|
||||
}
|
||||
entries.append(.permission(presentationData.theme, rightIndex, stringForGroupPermission(strings: presentationData.strings, right: rights), !effectiveRightsFlags.contains(rights), rights, enabled))
|
||||
rightIndex += 1
|
||||
}
|
||||
@ -441,7 +446,7 @@ private func channelPermissionsControllerEntries(presentationData: PresentationD
|
||||
|
||||
entries.append(.permissionsHeader(presentationData.theme, presentationData.strings.GroupInfo_Permissions_SectionTitle))
|
||||
var rightIndex: Int = 0
|
||||
for rights in allGroupPermissionList {
|
||||
for (rights, _) in allGroupPermissionList {
|
||||
entries.append(.permission(presentationData.theme, rightIndex, stringForGroupPermission(strings: presentationData.strings, right: rights), !effectiveRightsFlags.contains(rights), rights, true))
|
||||
rightIndex += 1
|
||||
}
|
||||
@ -539,7 +544,7 @@ public func channelPermissionsController(context: AccountContext, peerId origina
|
||||
effectiveRightsFlags = effectiveRightsFlags.subtracting(groupPermissionDependencies(rights))
|
||||
} else {
|
||||
effectiveRightsFlags.insert(rights)
|
||||
for right in allGroupPermissionList {
|
||||
for (right, _) in allGroupPermissionList {
|
||||
if groupPermissionDependencies(right).contains(rights) {
|
||||
effectiveRightsFlags.insert(right)
|
||||
}
|
||||
@ -569,7 +574,7 @@ public func channelPermissionsController(context: AccountContext, peerId origina
|
||||
effectiveRightsFlags = effectiveRightsFlags.subtracting(groupPermissionDependencies(rights))
|
||||
} else {
|
||||
effectiveRightsFlags.insert(rights)
|
||||
for right in allGroupPermissionList {
|
||||
for (right, _) in allGroupPermissionList {
|
||||
if groupPermissionDependencies(right).contains(rights) {
|
||||
effectiveRightsFlags.insert(right)
|
||||
}
|
||||
@ -669,15 +674,29 @@ public func channelPermissionsController(context: AccountContext, peerId origina
|
||||
|> deliverOnMainQueue).start(next: { peerId, _ in
|
||||
pushControllerImpl?(channelBlacklistController(context: context, peerId: peerId))
|
||||
})
|
||||
}, presentRestrictedPermissionAlert: { rights in
|
||||
let text: String
|
||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||
if rights.contains(TelegramChatBannedRightsFlags.banAddMembers) {
|
||||
text = presentationData.strings.GroupPermission_AddMembersNotAvailable
|
||||
} else {
|
||||
text = presentationData.strings.GroupPermission_NotAvailableInPublicGroups
|
||||
}
|
||||
presentControllerImpl?(textAlertController(context: context, title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil)
|
||||
}, presentRestrictedPermissionAlert: { right in
|
||||
let _ = (peerView.get()
|
||||
|> take(1)
|
||||
|> deliverOnMainQueue).start(next: { view in
|
||||
guard let channel = view.peers[view.peerId] as? TelegramChannel else {
|
||||
return
|
||||
}
|
||||
for (listRight, permission) in allGroupPermissionList {
|
||||
if listRight == right {
|
||||
let text: String
|
||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||
if !channel.hasPermission(permission) {
|
||||
text = presentationData.strings.GroupInfo_Permissions_EditingDisabled
|
||||
} else if right.contains(.banAddMembers) {
|
||||
text = presentationData.strings.GroupPermission_AddMembersNotAvailable
|
||||
} else {
|
||||
text = presentationData.strings.GroupPermission_NotAvailableInPublicGroups
|
||||
}
|
||||
presentControllerImpl?(textAlertController(context: context, title: nil, text: text, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil)
|
||||
break
|
||||
}
|
||||
}
|
||||
})
|
||||
}, updateSlowmode: { value in
|
||||
let _ = (peerView.get()
|
||||
|> take(1)
|
||||
|
@ -842,7 +842,7 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa
|
||||
var activePermissionCount: Int?
|
||||
if let defaultBannedRights = group.defaultBannedRights {
|
||||
var count = 0
|
||||
for right in allGroupPermissionList {
|
||||
for (right, _) in allGroupPermissionList {
|
||||
if !defaultBannedRights.flags.contains(right) {
|
||||
count += 1
|
||||
}
|
||||
@ -902,7 +902,7 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa
|
||||
var activePermissionCount: Int?
|
||||
if let defaultBannedRights = channel.defaultBannedRights {
|
||||
var count = 0
|
||||
for right in allGroupPermissionList {
|
||||
for (right, _) in allGroupPermissionList {
|
||||
if !defaultBannedRights.flags.contains(right) {
|
||||
count += 1
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@ -445,12 +445,12 @@ public final class WalletStrings: Equatable {
|
||||
public var Wallet_SecureStorageReset_Title: String { return self._s[215]! }
|
||||
public var Wallet_Receive_CommentHeader: String { return self._s[216]! }
|
||||
public var Wallet_Info_ReceiveGrams: String { return self._s[217]! }
|
||||
public func Wallet_Updated_HoursAgo(_ value: Int32) -> String {
|
||||
public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String {
|
||||
let form = getPluralizationForm(self.lc, value)
|
||||
let stringValue = walletStringsFormattedNumber(value, self.groupingSeparator)
|
||||
return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue)
|
||||
}
|
||||
public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String {
|
||||
public func Wallet_Updated_HoursAgo(_ value: Int32) -> String {
|
||||
let form = getPluralizationForm(self.lc, value)
|
||||
let stringValue = walletStringsFormattedNumber(value, self.groupingSeparator)
|
||||
return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue)
|
||||
|
Loading…
x
Reference in New Issue
Block a user