Display relevant messages when editing rights and permissions is not possible

This commit is contained in:
Ali 2019-11-05 02:51:56 +04:00
parent 539302db45
commit 049ff5e31e
11 changed files with 3632 additions and 3535 deletions

View File

@ -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.";

View File

@ -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()
}
}
}
}

View File

@ -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 {

View File

@ -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)]

View File

@ -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(", ")

View File

@ -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)

View File

@ -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
}

View File

@ -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)