diff --git a/TelegramUI.xcodeproj/project.pbxproj b/TelegramUI.xcodeproj/project.pbxproj index c517b9848c..689d970ca8 100644 --- a/TelegramUI.xcodeproj/project.pbxproj +++ b/TelegramUI.xcodeproj/project.pbxproj @@ -122,6 +122,7 @@ 09FE756D2153F5F900A3120F /* CallRouteActionSheetItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09FE756C2153F5F900A3120F /* CallRouteActionSheetItem.swift */; }; 9F06830921A404AB001D8EDB /* NotificationExceptionControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F06830821A404AB001D8EDB /* NotificationExceptionControllerNode.swift */; }; 9F06830B21A404C4001D8EDB /* NotificationExcetionSettingsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F06830A21A404C4001D8EDB /* NotificationExcetionSettingsController.swift */; }; + D000CABA21EE130D0011B15D /* MapResourceToAvatarSizes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D000CAB921EE130D0011B15D /* MapResourceToAvatarSizes.swift */; }; D005808B21CAB8F000CB7CD3 /* VoipDerivedState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D005808A21CAB8F000CB7CD3 /* VoipDerivedState.swift */; }; D00580A021DCF0A200CB7CD3 /* WallpaperListPreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D005809F21DCF0A200CB7CD3 /* WallpaperListPreviewController.swift */; }; D00580A221DCF0B700CB7CD3 /* WallpaperListPreviewControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00580A121DCF0B700CB7CD3 /* WallpaperListPreviewControllerNode.swift */; }; @@ -1248,6 +1249,7 @@ 09FE756C2153F5F900A3120F /* CallRouteActionSheetItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallRouteActionSheetItem.swift; sourceTree = ""; }; 9F06830821A404AB001D8EDB /* NotificationExceptionControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationExceptionControllerNode.swift; sourceTree = ""; }; 9F06830A21A404C4001D8EDB /* NotificationExcetionSettingsController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationExcetionSettingsController.swift; sourceTree = ""; }; + D000CAB921EE130D0011B15D /* MapResourceToAvatarSizes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapResourceToAvatarSizes.swift; sourceTree = ""; }; D00219051DDD1C9E00BE708A /* ImageContainingNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageContainingNode.swift; sourceTree = ""; }; D002A0D01E9B99F500A81812 /* SoftwareVideoSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SoftwareVideoSource.swift; sourceTree = ""; }; D002A0D21E9BBE6700A81812 /* MultiplexedSoftwareVideoSourceManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultiplexedSoftwareVideoSourceManager.swift; sourceTree = ""; }; @@ -4739,6 +4741,7 @@ 09F664CD21EBB3A100AB7E26 /* ImageBlur.swift */, 099529B321D3E5D800805E13 /* CheckDiskSpace.swift */, 09DD5D4F21ECC3C400D7007A /* SuppressContactsWarning.swift */, + D000CAB921EE130D0011B15D /* MapResourceToAvatarSizes.swift */, ); name = Utils; sourceTree = ""; @@ -5457,6 +5460,7 @@ D0B2F76E2052B59F00D3BFB9 /* InviteContactsController.swift in Sources */, D0EC6D591EB9F58800EBF1C3 /* ChatMessageThrottledProcessingManager.swift in Sources */, D0BFAE4620AB04FB00793CF2 /* ChatRestrictedInputPanelNode.swift in Sources */, + D000CABA21EE130D0011B15D /* MapResourceToAvatarSizes.swift in Sources */, D06E0F8E1F79ABFB003CF3DD /* ChatLoadingNode.swift in Sources */, D0EC6D5A1EB9F58800EBF1C3 /* ListMessageItem.swift in Sources */, D0EC6D5B1EB9F58800EBF1C3 /* ListMessageNode.swift in Sources */, diff --git a/TelegramUI/ChannelInfoController.swift b/TelegramUI/ChannelInfoController.swift index 6b6f0def8c..361e609a09 100644 --- a/TelegramUI/ChannelInfoController.swift +++ b/TelegramUI/ChannelInfoController.swift @@ -614,7 +614,9 @@ public func channelInfoController(account: Account, peerId: PeerId) -> ViewContr updateState { $0.withUpdatedUpdatingAvatar(.image(representation, true)) } - updateAvatarDisposable.set((updatePeerPhoto(postbox: account.postbox, network: account.network, stateManager: account.stateManager, accountPeerId: account.peerId, peerId: peerId, photo: uploadedPeerPhoto(postbox: account.postbox, network: account.network, resource: resource)) |> deliverOnMainQueue).start(next: { result in + updateAvatarDisposable.set((updatePeerPhoto(postbox: account.postbox, network: account.network, stateManager: account.stateManager, accountPeerId: account.peerId, peerId: peerId, photo: uploadedPeerPhoto(postbox: account.postbox, network: account.network, resource: resource), mapResourceToAvatarSizes: { resource, representations in + return mapResourceToAvatarSizes(postbox: account.postbox, resource: resource, representations: representations) + }) |> deliverOnMainQueue).start(next: { result in switch result { case .complete: updateState { @@ -650,7 +652,9 @@ public func channelInfoController(account: Account, peerId: PeerId) -> ViewContr return $0.withUpdatedUpdatingAvatar(.none) } } - updateAvatarDisposable.set((updatePeerPhoto(postbox: account.postbox, network: account.network, stateManager: account.stateManager, accountPeerId: account.peerId, peerId: peerId, photo: nil) |> deliverOnMainQueue).start(next: { result in + updateAvatarDisposable.set((updatePeerPhoto(postbox: account.postbox, network: account.network, stateManager: account.stateManager, accountPeerId: account.peerId, peerId: peerId, photo: nil, mapResourceToAvatarSizes: { resource, representations in + return mapResourceToAvatarSizes(postbox: account.postbox, resource: resource, representations: representations) + }) |> deliverOnMainQueue).start(next: { result in switch result { case .complete: updateState { diff --git a/TelegramUI/ChatListControllerNode.swift b/TelegramUI/ChatListControllerNode.swift index 2e55991b2d..707659cabb 100644 --- a/TelegramUI/ChatListControllerNode.swift +++ b/TelegramUI/ChatListControllerNode.swift @@ -54,24 +54,27 @@ class ChatListControllerNode: ASDisplayNode { self.backgroundColor = presentationData.theme.chatList.backgroundColor self.addSubnode(self.chatListNode) - self.chatListNode.isEmptyUpdated = { [weak self] isEmpty in + self.chatListNode.isEmptyUpdated = { [weak self] isEmptyState in guard let strongSelf = self else { return } - if isEmpty { - if strongSelf.chatListEmptyNode == nil { - let chatListEmptyNode = ChatListEmptyNode(theme: strongSelf.presentationData.theme, strings: strongSelf.presentationData.strings) - strongSelf.chatListEmptyNode = chatListEmptyNode - strongSelf.insertSubnode(chatListEmptyNode, belowSubnode: strongSelf.chatListNode) - if let (layout, navigationHeight) = strongSelf.containerLayout { - strongSelf.containerLayoutUpdated(layout, navigationBarHeight: navigationHeight, transition: .immediate) + switch isEmptyState { + case let .empty(isLoading): + if strongSelf.chatListEmptyNode == nil { + let chatListEmptyNode = ChatListEmptyNode(theme: strongSelf.presentationData.theme, strings: strongSelf.presentationData.strings) + strongSelf.chatListEmptyNode = chatListEmptyNode + strongSelf.insertSubnode(chatListEmptyNode, belowSubnode: strongSelf.chatListNode) + if let (layout, navigationHeight) = strongSelf.containerLayout { + strongSelf.containerLayoutUpdated(layout, navigationBarHeight: navigationHeight, transition: .immediate) + } + } + case .notEmpty: + if let chatListEmptyNode = strongSelf.chatListEmptyNode { + strongSelf.chatListEmptyNode = nil + chatListEmptyNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false, completion: { [weak chatListEmptyNode] _ in + chatListEmptyNode?.removeFromSupernode() + }) } - } - } else if let chatListEmptyNode = strongSelf.chatListEmptyNode { - strongSelf.chatListEmptyNode = nil - chatListEmptyNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false, completion: { [weak chatListEmptyNode] _ in - chatListEmptyNode?.removeFromSupernode() - }) } } } diff --git a/TelegramUI/ChatListNode.swift b/TelegramUI/ChatListNode.swift index 4d63e42f44..5c1f80974b 100644 --- a/TelegramUI/ChatListNode.swift +++ b/TelegramUI/ChatListNode.swift @@ -281,6 +281,11 @@ enum ChatListNodeScrollPosition { case top } +enum ChatListNodeEmtpyState: Equatable { + case notEmpty + case empty(isLoading: Bool) +} + final class ChatListNode: ListView { private let controlsHistoryPreload: Bool private let account: Account @@ -346,8 +351,8 @@ final class ChatListNode: ListView { } } - var isEmptyUpdated: ((Bool) -> Void)? - private var wasEmpty: Bool? + var isEmptyUpdated: ((ChatListNodeEmtpyState) -> Void)? + private var currentIsEmptyState: ChatListNodeEmtpyState? private let currentRemovingPeerId = Atomic(value: nil) func setCurrentRemovingPeerId(_ peerId: PeerId?) { @@ -469,7 +474,8 @@ final class ChatListNode: ListView { let chatListNodeViewTransition = combineLatest(savedMessagesPeer, chatListViewUpdate, self.statePromise.get()) |> mapToQueue { (savedMessagesPeer, update, state) -> Signal in - let entries = chatListNodeEntriesForView(update.view, state: state, savedMessagesPeer: savedMessagesPeer, mode: mode).filter { entry in + let (rawEntries, isLoading) = chatListNodeEntriesForView(update.view, state: state, savedMessagesPeer: savedMessagesPeer, mode: mode) + let entries = rawEntries.filter { entry in switch entry { case let .PeerEntry(_, _, _, _, _, _, peer, _, _, _, _, _, _): switch mode { @@ -507,7 +513,7 @@ final class ChatListNode: ListView { } } - let processedView = ChatListNodeView(originalView: update.view, filteredEntries: entries) + let processedView = ChatListNodeView(originalView: update.view, filteredEntries: entries, isLoading: isLoading) let previousView = previousView.swap(processedView) let previousState = previousState.swap(state) @@ -520,6 +526,8 @@ final class ChatListNode: ListView { if case .HoleEntry = previous.filteredEntries[0] { previousWasEmptyOrSingleHole = true } + } else if previous.filteredEntries.isEmpty && previous.isLoading { + previousWasEmptyOrSingleHole = true } } else { previousWasEmptyOrSingleHole = true @@ -991,10 +999,17 @@ final class ChatListNode: ListView { strongSelf._ready.set(true) } - let isEmpty = transition.chatListView.filteredEntries.isEmpty - if strongSelf.wasEmpty != isEmpty { - strongSelf.wasEmpty = isEmpty - strongSelf.isEmptyUpdated?(isEmpty) + let isEmptyState: ChatListNodeEmtpyState + if transition.chatListView.isLoading { + isEmptyState = .empty(isLoading: true) + } else if transition.chatListView.filteredEntries.isEmpty { + isEmptyState = .empty(isLoading: false) + } else { + isEmptyState = .notEmpty + } + if strongSelf.currentIsEmptyState != isEmptyState { + strongSelf.currentIsEmptyState = isEmptyState + strongSelf.isEmptyUpdated?(isEmptyState) } completion() diff --git a/TelegramUI/ChatListNodeEntries.swift b/TelegramUI/ChatListNodeEntries.swift index 0ec1563650..6fc5ee8ba9 100644 --- a/TelegramUI/ChatListNodeEntries.swift +++ b/TelegramUI/ChatListNodeEntries.swift @@ -197,7 +197,7 @@ private func offsetPinnedIndex(_ index: ChatListIndex, offset: UInt16) -> ChatLi } } -func chatListNodeEntriesForView(_ view: ChatListView, state: ChatListNodeState, savedMessagesPeer: Peer?, mode: ChatListNodeMode) -> [ChatListNodeEntry] { +func chatListNodeEntriesForView(_ view: ChatListView, state: ChatListNodeState, savedMessagesPeer: Peer?, mode: ChatListNodeMode) -> (entries: [ChatListNodeEntry], loading: Bool) { var result: [ChatListNodeEntry] = [] var pinnedIndexOffset: UInt16 = 0 if view.laterIndex == nil && savedMessagesPeer == nil { @@ -249,12 +249,10 @@ func chatListNodeEntriesForView(_ view: ChatListView, state: ChatListNodeState, } } -// if result.count == 1, case .HoleEntry = result[0] { - if result.count >= 1, case .HoleEntry = result[result.count - 1] { - return [] + return ([], true) } else if result.count == 1, case .HoleEntry = result[0] { - return [] + return ([], true) } - return result + return (result, false) } diff --git a/TelegramUI/ChatListViewTransition.swift b/TelegramUI/ChatListViewTransition.swift index a8f0c34919..c8da47fdaa 100644 --- a/TelegramUI/ChatListViewTransition.swift +++ b/TelegramUI/ChatListViewTransition.swift @@ -7,6 +7,7 @@ import Display struct ChatListNodeView { let originalView: ChatListView let filteredEntries: [ChatListNodeEntry] + let isLoading: Bool } enum ChatListNodeViewTransitionReason { diff --git a/TelegramUI/ChatMessagePollBubbleContentNode.swift b/TelegramUI/ChatMessagePollBubbleContentNode.swift index 2ebf0899aa..ac202eea03 100644 --- a/TelegramUI/ChatMessagePollBubbleContentNode.swift +++ b/TelegramUI/ChatMessagePollBubbleContentNode.swift @@ -4,6 +4,78 @@ import Display import TelegramCore import Postbox +private struct PercentCounterItem: Comparable { + var index: Int = 0 + var percent: Int = 0 + var remainder: Int = 0 + + static func <(lhs: PercentCounterItem, rhs: PercentCounterItem) -> Bool { + if lhs.remainder > rhs.remainder { + return true + } else if lhs.remainder < rhs.remainder { + return false + } + return lhs.percent < rhs.percent + } + +} + +private func adjustPercentCount(_ items: [PercentCounterItem], left: Int) -> [PercentCounterItem] { + var left = left + var items = items.sorted(by: <) + var i:Int = 0 + while i != items.count { + let item = items[i] + var j = i + 1 + loop: while j != items.count { + if items[j].percent != item.percent || items[j].remainder != item.remainder { + break loop + } + j += 1 + } + let equal = j - i + if equal <= left { + left -= equal + while i != j { + items[i].percent += 1 + i += 1 + } + } else { + i = j + } + } + return items +} + +private func countNicePercent(votes: [Int], total: Int) -> [Int] { + var result:[Int] = [] + var items:[PercentCounterItem] = [] + for _ in votes { + result.append(0) + items.append(PercentCounterItem()) + } + + let count = votes.count + + var left:Int = 100 + for i in 0 ..< votes.count { + let votes = votes[i] + items[i].index = i + items[i].percent = Int((Float(votes) * 100) / Float(total)) + items[i].remainder = (votes * 100) - (items[i].percent * total) + left -= items[i].percent + } + + if left > 0 && left <= count { + items = adjustPercentCount(items, left: left) + } + for item in items { + result[item.index] = item.percent + } + + return result +} + private final class ChatMessagePollOptionRadioNodeParameters: NSObject { let staticColor: UIColor let animatedColor: UIColor @@ -205,31 +277,30 @@ private final class ChatMessagePollOptionRadioNode: ASDisplayNode { private let percentageFont = Font.bold(14.5) -private func generatePercentageImage(presentationData: ChatPresentationData, incoming: Bool, value: CGFloat) -> UIImage { +private func generatePercentageImage(presentationData: ChatPresentationData, incoming: Bool, value: Int) -> UIImage { return generateImage(CGSize(width: 42.0, height: 20.0), rotatedContext: { size, context in UIGraphicsPushContext(context) context.clear(CGRect(origin: CGPoint(), size: size)) - let percents = Int(round(value * 100.0)) - let string = NSAttributedString(string: "\(percents)%", font: percentageFont, textColor: incoming ? presentationData.theme.theme.chat.bubble.incomingPrimaryTextColor : presentationData.theme.theme.chat.bubble.outgoingPrimaryTextColor, paragraphAlignment: .right) + let string = NSAttributedString(string: "\(value)%", font: percentageFont, textColor: incoming ? presentationData.theme.theme.chat.bubble.incomingPrimaryTextColor : presentationData.theme.theme.chat.bubble.outgoingPrimaryTextColor, paragraphAlignment: .right) string.draw(in: CGRect(origin: CGPoint(x: 0.0, y: 2.0), size: size)) UIGraphicsPopContext() })! } -private func generatePercentageAnimationImages(presentationData: ChatPresentationData, incoming: Bool, from fromValue: CGFloat, to toValue: CGFloat, duration: Double) -> [UIImage] { +private func generatePercentageAnimationImages(presentationData: ChatPresentationData, incoming: Bool, from fromValue: Int, to toValue: Int, duration: Double) -> [UIImage] { let minimumFrameDuration = 1.0 / 40.0 let numberOfFrames = max(1, Int(duration / minimumFrameDuration)) var images: [UIImage] = [] for i in 0 ..< numberOfFrames { let t = CGFloat(i) / CGFloat(numberOfFrames) - images.append(generatePercentageImage(presentationData: presentationData, incoming: incoming, value: (1.0 - t) * fromValue + t * toValue)) + images.append(generatePercentageImage(presentationData: presentationData, incoming: incoming, value: Int((1.0 - t) * CGFloat(fromValue) + t * CGFloat(toValue)))) } return images } private struct ChatMessagePollOptionResult: Equatable { let normalized: CGFloat - let absolute: CGFloat + let percent: Int } private final class ChatMessagePollOptionNode: ASDisplayNode { @@ -312,7 +383,7 @@ private final class ChatMessagePollOptionNode: ASDisplayNode { var updatedPercentageImage: UIImage? if currentResult != optionResult { - updatedPercentageImage = generatePercentageImage(presentationData: presentationData, incoming: incoming, value: optionResult?.absolute ?? 0.0) + updatedPercentageImage = generatePercentageImage(presentationData: presentationData, incoming: incoming, value: optionResult?.percent ?? 0) } return (titleLayout.size.width + leftInset + rightInset, { width in @@ -374,9 +445,9 @@ private final class ChatMessagePollOptionNode: ASDisplayNode { } if let image = node.percentageImage { node.percentageNode.frame = CGRect(origin: CGPoint(x: leftInset - 7.0 - image.size.width, y: 12.0), size: image.size) - if animated && previousResult?.absolute != optionResult?.absolute { + if animated && previousResult?.percent != optionResult?.percent { let percentageDuration = 0.27 - let images = generatePercentageAnimationImages(presentationData: presentationData, incoming: incoming, from: previousResult?.absolute ?? 0.0, to: optionResult?.absolute ?? 0.0, duration: percentageDuration) + let images = generatePercentageAnimationImages(presentationData: presentationData, incoming: incoming, from: previousResult?.percent ?? 0, to: optionResult?.percent ?? 0, duration: percentageDuration) if !images.isEmpty { let animation = CAKeyframeAnimation(keyPath: "contents") animation.values = images.map { $0.cgImage! } @@ -635,6 +706,13 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { } } + var optionVoterCounts: [Int] + if totalVoterCount != 0 { + optionVoterCounts = countNicePercent(votes: (0 ..< poll.options.count).map({ Int(optionVoterCount[$0] ?? 0) }), total: Int(totalVoterCount)) + } else { + optionVoterCounts = Array(repeating: 0, count: poll.options.count) + } + for i in 0 ..< poll.options.count { let option = poll.options[i] @@ -647,12 +725,12 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { var optionResult: ChatMessagePollOptionResult? if let count = optionVoterCount[i] { if maxOptionVoterCount != 0 && totalVoterCount != 0 { - optionResult = ChatMessagePollOptionResult(normalized: CGFloat(count) / CGFloat(maxOptionVoterCount), absolute: CGFloat(count) / CGFloat(totalVoterCount)) + optionResult = ChatMessagePollOptionResult(normalized: CGFloat(count) / CGFloat(maxOptionVoterCount), percent: optionVoterCounts[i]) } else if poll.isClosed { - optionResult = ChatMessagePollOptionResult(normalized: 0, absolute: 0) + optionResult = ChatMessagePollOptionResult(normalized: 0, percent: 0) } } else if poll.isClosed { - optionResult = ChatMessagePollOptionResult(normalized: 0, absolute: 0) + optionResult = ChatMessagePollOptionResult(normalized: 0, percent: 0) } let result = makeLayout(item.account.peerId, item.presentationData, item.message, option, optionResult, constrainedSize.width - layoutConstants.bubble.borderInset * 2.0) boundingSize.width = max(boundingSize.width, result.minimumWidth + layoutConstants.bubble.borderInset * 2.0) diff --git a/TelegramUI/CreateChannelController.swift b/TelegramUI/CreateChannelController.swift index fa410bd3bc..18b123fa02 100644 --- a/TelegramUI/CreateChannelController.swift +++ b/TelegramUI/CreateChannelController.swift @@ -247,7 +247,9 @@ public func createChannelController(account: Account) -> ViewController { return $0.avatar } if let _ = updatingAvatar { - let _ = updatePeerPhoto(postbox: account.postbox, network: account.network, stateManager: account.stateManager, accountPeerId: account.peerId, peerId: peerId, photo: uploadedAvatar.get()).start() + let _ = updatePeerPhoto(postbox: account.postbox, network: account.network, stateManager: account.stateManager, accountPeerId: account.peerId, peerId: peerId, photo: uploadedAvatar.get(), mapResourceToAvatarSizes: { resource, representations in + return mapResourceToAvatarSizes(postbox: account.postbox, resource: resource, representations: representations) + }).start() } let controller = channelVisibilityController(account: account, peerId: peerId, mode: .initialSetup, upgradedToSupergroup: { _, f in f() }) diff --git a/TelegramUI/CreateGroupController.swift b/TelegramUI/CreateGroupController.swift index 77328e0d91..479d8b7ef5 100644 --- a/TelegramUI/CreateGroupController.swift +++ b/TelegramUI/CreateGroupController.swift @@ -255,7 +255,9 @@ public func createGroupController(account: Account, peerIds: [PeerId]) -> ViewCo return current } endEditingImpl?() - actionsDisposable.add((createGroup(account: account, title: title, peerIds: peerIds) |> deliverOnMainQueue |> afterDisposed { + actionsDisposable.add((createGroup(account: account, title: title, peerIds: peerIds) + |> deliverOnMainQueue + |> afterDisposed { Queue.mainQueue().async { updateState { current in var current = current @@ -269,7 +271,9 @@ public func createGroupController(account: Account, peerIds: [PeerId]) -> ViewCo return $0.avatar } if let _ = updatingAvatar { - let _ = updatePeerPhoto(postbox: account.postbox, network: account.network, stateManager: account.stateManager, accountPeerId: account.peerId, peerId: peerId, photo: uploadedAvatar.get()).start() + let _ = updatePeerPhoto(postbox: account.postbox, network: account.network, stateManager: account.stateManager, accountPeerId: account.peerId, peerId: peerId, photo: uploadedAvatar.get(), mapResourceToAvatarSizes: { resource, representations in + return mapResourceToAvatarSizes(postbox: account.postbox, resource: resource, representations: representations) + }).start() } let controller = ChatController(account: account, chatLocation: .peer(peerId)) replaceControllerImpl?(controller) @@ -353,24 +357,25 @@ public func createGroupController(account: Account, peerIds: [PeerId]) -> ViewCo }) let signal = combineLatest((account.applicationContext as! TelegramApplicationContext).presentationData, statePromise.get(), account.postbox.multiplePeersView(peerIds)) - |> map { presentationData, state, view -> (ItemListControllerState, (ItemListNodeState, CreateGroupEntry.ItemGenerationArguments)) in - - let rightNavigationButton: ItemListNavigationButton - if state.creating { - rightNavigationButton = ItemListNavigationButton(content: .none, style: .activity, enabled: true, action: {}) - } else { - rightNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Compose_Create), style: .bold, enabled: !state.editingName.composedTitle.isEmpty, action: { - arguments.done() - }) - } - - let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(presentationData.strings.Compose_NewGroupTitle), leftNavigationButton: nil, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back)) - let listState = ItemListNodeState(entries: createGroupEntries(presentationData: presentationData, state: state, peerIds: peerIds, view: view), style: .blocks, focusItemTag: CreateGroupEntryTag.info) - - return (controllerState, (listState, arguments)) - } |> afterDisposed { - actionsDisposable.dispose() + |> map { presentationData, state, view -> (ItemListControllerState, (ItemListNodeState, CreateGroupEntry.ItemGenerationArguments)) in + + let rightNavigationButton: ItemListNavigationButton + if state.creating { + rightNavigationButton = ItemListNavigationButton(content: .none, style: .activity, enabled: true, action: {}) + } else { + rightNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Compose_Create), style: .bold, enabled: !state.editingName.composedTitle.isEmpty, action: { + arguments.done() + }) } + + let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(presentationData.strings.Compose_NewGroupTitle), leftNavigationButton: nil, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back)) + let listState = ItemListNodeState(entries: createGroupEntries(presentationData: presentationData, state: state, peerIds: peerIds, view: view), style: .blocks, focusItemTag: CreateGroupEntryTag.info) + + return (controllerState, (listState, arguments)) + } + |> afterDisposed { + actionsDisposable.dispose() + } let controller = ItemListController(account: account, state: signal) replaceControllerImpl = { [weak controller] value in diff --git a/TelegramUI/EditSettingsController.swift b/TelegramUI/EditSettingsController.swift index 4bf293398d..0a8be068db 100644 --- a/TelegramUI/EditSettingsController.swift +++ b/TelegramUI/EditSettingsController.swift @@ -449,7 +449,9 @@ func editSettingsController(account: Account, currentName: ItemListAvatarAndName updateState { $0.withUpdatedUpdatingAvatar(.image(representation, true)) } - updateAvatarDisposable.set((updateAccountPhoto(account: account, resource: resource) |> deliverOnMainQueue).start(next: { result in + updateAvatarDisposable.set((updateAccountPhoto(account: account, resource: resource, mapResourceToAvatarSizes: { resource, representations in + return mapResourceToAvatarSizes(postbox: account.postbox, resource: resource, representations: representations) + }) |> deliverOnMainQueue).start(next: { result in switch result { case .complete: updateState { @@ -485,7 +487,9 @@ func editSettingsController(account: Account, currentName: ItemListAvatarAndName return $0.withUpdatedUpdatingAvatar(.none) } } - updateAvatarDisposable.set((updateAccountPhoto(account: account, resource: nil) |> deliverOnMainQueue).start(next: { result in + updateAvatarDisposable.set((updateAccountPhoto(account: account, resource: nil, mapResourceToAvatarSizes: { resource, representations in + return mapResourceToAvatarSizes(postbox: account.postbox, resource: resource, representations: representations) + }) |> deliverOnMainQueue).start(next: { result in switch result { case .complete: updateState { diff --git a/TelegramUI/GroupInfoController.swift b/TelegramUI/GroupInfoController.swift index db0f5c6cd7..ffa3280813 100644 --- a/TelegramUI/GroupInfoController.swift +++ b/TelegramUI/GroupInfoController.swift @@ -1279,7 +1279,9 @@ public func groupInfoController(account: Account, peerId originalPeerId: PeerId, updateState { $0.withUpdatedUpdatingAvatar(.image(representation, true)) } - updateAvatarDisposable.set((updatePeerPhoto(postbox: account.postbox, network: account.network, stateManager: account.stateManager, accountPeerId: account.peerId, peerId: peerView.peerId, photo: uploadedPeerPhoto(postbox: account.postbox, network: account.network, resource: resource)) |> deliverOnMainQueue).start(next: { result in + updateAvatarDisposable.set((updatePeerPhoto(postbox: account.postbox, network: account.network, stateManager: account.stateManager, accountPeerId: account.peerId, peerId: peerView.peerId, photo: uploadedPeerPhoto(postbox: account.postbox, network: account.network, resource: resource), mapResourceToAvatarSizes: { resource, representations in + return mapResourceToAvatarSizes(postbox: account.postbox, resource: resource, representations: representations) + }) |> deliverOnMainQueue).start(next: { result in switch result { case .complete: updateState { @@ -1315,7 +1317,9 @@ public func groupInfoController(account: Account, peerId originalPeerId: PeerId, return $0.withUpdatedUpdatingAvatar(.none) } } - updateAvatarDisposable.set((updatePeerPhoto(postbox: account.postbox, network: account.network, stateManager: account.stateManager, accountPeerId: account.peerId, peerId: peerView.peerId, photo: nil) |> deliverOnMainQueue).start(next: { result in + updateAvatarDisposable.set((updatePeerPhoto(postbox: account.postbox, network: account.network, stateManager: account.stateManager, accountPeerId: account.peerId, peerId: peerView.peerId, photo: nil, mapResourceToAvatarSizes: { resource, representations in + return mapResourceToAvatarSizes(postbox: account.postbox, resource: resource, representations: representations) + }) |> deliverOnMainQueue).start(next: { result in switch result { case .complete: updateState { diff --git a/TelegramUI/GroupPreHistorySetupController.swift b/TelegramUI/GroupPreHistorySetupController.swift index 10b809f4f4..df8246ef85 100644 --- a/TelegramUI/GroupPreHistorySetupController.swift +++ b/TelegramUI/GroupPreHistorySetupController.swift @@ -95,13 +95,17 @@ private struct GroupPreHistorySetupState: Equatable { var applyingSetting: Bool = false } -private func groupPreHistorySetupEntries(presentationData: PresentationData, defaultValue: Bool, state: GroupPreHistorySetupState) -> [GroupPreHistorySetupEntry] { +private func groupPreHistorySetupEntries(isSupergroup: Bool, presentationData: PresentationData, defaultValue: Bool, state: GroupPreHistorySetupState) -> [GroupPreHistorySetupEntry] { var entries: [GroupPreHistorySetupEntry] = [] let value = state.changedValue ?? defaultValue entries.append(.header(presentationData.theme, presentationData.strings.Group_Setup_HistoryHeader)) entries.append(.visible(presentationData.theme, presentationData.strings.Group_Setup_HistoryVisible, value)) entries.append(.hidden(presentationData.theme, presentationData.strings.Group_Setup_HistoryHidden, !value)) - entries.append(.info(presentationData.theme, value ? presentationData.strings.Group_Setup_HistoryVisibleHelp : presentationData.strings.Group_Setup_HistoryHiddenHelp)) + if isSupergroup { + entries.append(.info(presentationData.theme, value ? presentationData.strings.Group_Setup_HistoryVisibleHelp : presentationData.strings.Group_Setup_HistoryHiddenHelp)) + } else { + entries.append(.info(presentationData.theme, value ? presentationData.strings.Group_Setup_HistoryVisibleHelp : presentationData.strings.Group_Setup_BasicHistoryHiddenHelp)) + } return entries } @@ -186,7 +190,7 @@ public func groupPreHistorySetupController(account: Account, peerId: PeerId, upg } let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(presentationData.strings.Group_Setup_HistoryTitle), leftNavigationButton: leftNavigationButton, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back)) - let listState = ItemListNodeState(entries: groupPreHistorySetupEntries(presentationData: presentationData, defaultValue: defaultValue, state: state), style: .blocks) + let listState = ItemListNodeState(entries: groupPreHistorySetupEntries(isSupergroup: peerId.namespace == Namespaces.Peer.CloudChannel, presentationData: presentationData, defaultValue: defaultValue, state: state), style: .blocks) return (controllerState, (listState, arguments)) } diff --git a/TelegramUI/MapResourceToAvatarSizes.swift b/TelegramUI/MapResourceToAvatarSizes.swift new file mode 100644 index 0000000000..18190f0946 --- /dev/null +++ b/TelegramUI/MapResourceToAvatarSizes.swift @@ -0,0 +1,23 @@ +import Foundation +import UIKit +import SwiftSignalKit +import Postbox +import TelegramCore +import Display + +func mapResourceToAvatarSizes(postbox: Postbox, resource: MediaResource, representations: [TelegramMediaImageRepresentation]) -> Signal<[Int: Data], NoError> { + return postbox.mediaBox.resourceData(resource) + |> take(1) + |> map { data -> [Int: Data] in + guard data.complete, let image = UIImage(contentsOfFile: data.path) else { + return [:] + } + var result: [Int: Data] = [:] + for i in 0 ..< representations.count { + if let scaledImage = generateScaledImage(image: image, size: representations[i].dimensions, scale: 1.0), let scaledData = UIImageJPEGRepresentation(scaledImage, 0.8) { + result[i] = scaledData + } + } + return result + } +} diff --git a/TelegramUI/PresentationStrings.swift b/TelegramUI/PresentationStrings.swift index 80fab673e4..660d690a12 100644 --- a/TelegramUI/PresentationStrings.swift +++ b/TelegramUI/PresentationStrings.swift @@ -704,12 +704,12 @@ public final class PresentationStrings { } public var Compose_ChannelTokenListPlaceholder: String { return self._s[495]! } public var Passport_ScanPassport: String { return self._s[496]! } - public var Watch_Message_Invoice: String { return self._s[497]! } - public var Watch_Suggestion_Thanks: String { return self._s[498]! } + public var Watch_Suggestion_Thanks: String { return self._s[497]! } + public var BlockedUsers_AddNew: String { return self._s[498]! } public func PUSH_CHAT_MESSAGE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[499]!, self._r[499]!, [_1, _2]) } - public var BlockedUsers_AddNew: String { return self._s[500]! } + public var Watch_Message_Invoice: String { return self._s[500]! } public var Month_GenJuly: String { return self._s[501]! } public var SocksProxySetup_ProxySocks5: String { return self._s[502]! } public var Notification_ChannelInviterSelf: String { return self._s[504]! } @@ -3087,745 +3087,746 @@ public final class PresentationStrings { return formatWithArgumentRanges(self._s[2767]!, self._r[2767]!, [_0]) } public var Passport_Language_my: String { return self._s[2768]! } + public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[2769]! } public func Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2769]!, self._r[2769]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2770]!, self._r[2770]!, [_1, _2, _3]) } - public var Preview_CopyAddress: String { return self._s[2770]! } + public var Preview_CopyAddress: String { return self._s[2771]! } public func DialogList_SinglePlayingGameSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2771]!, self._r[2771]!, [_0]) + return formatWithArgumentRanges(self._s[2772]!, self._r[2772]!, [_0]) } - public var KeyCommand_JumpToPreviousChat: String { return self._s[2772]! } - public var UserInfo_BotSettings: String { return self._s[2773]! } - public var LiveLocation_MenuStopAll: String { return self._s[2775]! } - public var Passport_PasswordCreate: String { return self._s[2776]! } - public var StickerSettings_MaskContextInfo: String { return self._s[2777]! } - public var Message_PinnedLocationMessage: String { return self._s[2778]! } - public var Map_Satellite: String { return self._s[2779]! } - public var Watch_Message_Unsupported: String { return self._s[2780]! } - public var Username_TooManyPublicUsernamesError: String { return self._s[2781]! } - public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[2782]! } + public var KeyCommand_JumpToPreviousChat: String { return self._s[2773]! } + public var UserInfo_BotSettings: String { return self._s[2774]! } + public var LiveLocation_MenuStopAll: String { return self._s[2776]! } + public var Passport_PasswordCreate: String { return self._s[2777]! } + public var StickerSettings_MaskContextInfo: String { return self._s[2778]! } + public var Message_PinnedLocationMessage: String { return self._s[2779]! } + public var Map_Satellite: String { return self._s[2780]! } + public var Watch_Message_Unsupported: String { return self._s[2781]! } + public var Username_TooManyPublicUsernamesError: String { return self._s[2782]! } + public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[2783]! } public func Notification_PinnedTextMessage(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2783]!, self._r[2783]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2784]!, self._r[2784]!, [_0, _1]) } - public var Notifications_ChannelNotificationsHelp: String { return self._s[2784]! } - public var Privacy_Calls_P2PContacts: String { return self._s[2785]! } - public var NotificationsSound_None: String { return self._s[2786]! } - public var AccessDenied_VoiceMicrophone: String { return self._s[2788]! } + public var Notifications_ChannelNotificationsHelp: String { return self._s[2785]! } + public var Privacy_Calls_P2PContacts: String { return self._s[2786]! } + public var NotificationsSound_None: String { return self._s[2787]! } + public var AccessDenied_VoiceMicrophone: String { return self._s[2789]! } public func ApplyLanguage_ChangeLanguageAlreadyActive(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2789]!, self._r[2789]!, [_1]) + return formatWithArgumentRanges(self._s[2790]!, self._r[2790]!, [_1]) } - public var Cache_Indexing: String { return self._s[2790]! } - public var DialogList_RecentTitlePeople: String { return self._s[2792]! } - public var DialogList_EncryptionRejected: String { return self._s[2793]! } - public var GroupInfo_Administrators: String { return self._s[2794]! } - public var Passport_ScanPassportHelp: String { return self._s[2795]! } - public var Application_Name: String { return self._s[2796]! } - public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[2797]! } - public var Passport_Identity_TranslationHelp: String { return self._s[2799]! } + public var Cache_Indexing: String { return self._s[2791]! } + public var DialogList_RecentTitlePeople: String { return self._s[2793]! } + public var DialogList_EncryptionRejected: String { return self._s[2794]! } + public var GroupInfo_Administrators: String { return self._s[2795]! } + public var Passport_ScanPassportHelp: String { return self._s[2796]! } + public var Application_Name: String { return self._s[2797]! } + public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[2798]! } + public var Passport_Identity_TranslationHelp: String { return self._s[2800]! } public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2800]!, self._r[2800]!, [_0]) - } - public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2801]!, self._r[2801]!, [_0]) } - public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[2802]! } - public var Privacy_ChatsTitle: String { return self._s[2803]! } - public var DialogList_ClearHistoryConfirmation: String { return self._s[2804]! } - public var Watch_Suggestion_HoldOn: String { return self._s[2805]! } - public var SocksProxySetup_RequiredCredentials: String { return self._s[2806]! } - public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[2807]! } - public var TwoStepAuth_EmailSkipAlert: String { return self._s[2808]! } - public var Channel_Setup_TypePublic: String { return self._s[2811]! } + public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2802]!, self._r[2802]!, [_0]) + } + public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[2803]! } + public var Privacy_ChatsTitle: String { return self._s[2804]! } + public var DialogList_ClearHistoryConfirmation: String { return self._s[2805]! } + public var Watch_Suggestion_HoldOn: String { return self._s[2806]! } + public var SocksProxySetup_RequiredCredentials: String { return self._s[2807]! } + public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[2808]! } + public var TwoStepAuth_EmailSkipAlert: String { return self._s[2809]! } + public var Channel_Setup_TypePublic: String { return self._s[2812]! } public func Channel_AdminLog_MessageToggleInvitesOn(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2812]!, self._r[2812]!, [_0]) + return formatWithArgumentRanges(self._s[2813]!, self._r[2813]!, [_0]) } - public var Channel_TypeSetup_Title: String { return self._s[2814]! } - public var Map_OpenInMaps: String { return self._s[2816]! } + public var Channel_TypeSetup_Title: String { return self._s[2815]! } + public var Map_OpenInMaps: String { return self._s[2817]! } public func PUSH_PINNED_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2817]!, self._r[2817]!, [_1]) + return formatWithArgumentRanges(self._s[2818]!, self._r[2818]!, [_1]) } - public var NotificationsSound_Tremolo: String { return self._s[2819]! } + public var NotificationsSound_Tremolo: String { return self._s[2820]! } public func Date_ChatDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2820]!, self._r[2820]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2821]!, self._r[2821]!, [_1, _2, _3]) } - public var ConversationProfile_UnknownAddMemberError: String { return self._s[2821]! } - public var Passport_PasswordHelp: String { return self._s[2822]! } - public var Login_CodeExpiredError: String { return self._s[2823]! } - public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[2824]! } - public var Conversation_TitleUnmute: String { return self._s[2825]! } - public var Passport_Identity_ScansHelp: String { return self._s[2826]! } - public var Passport_Language_lo: String { return self._s[2827]! } - public var Camera_FlashAuto: String { return self._s[2828]! } - public var Common_Cancel: String { return self._s[2829]! } - public var DialogList_SavedMessagesTooltip: String { return self._s[2830]! } - public var TwoStepAuth_SetupPasswordTitle: String { return self._s[2831]! } + public var ConversationProfile_UnknownAddMemberError: String { return self._s[2822]! } + public var Passport_PasswordHelp: String { return self._s[2823]! } + public var Login_CodeExpiredError: String { return self._s[2824]! } + public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[2825]! } + public var Conversation_TitleUnmute: String { return self._s[2826]! } + public var Passport_Identity_ScansHelp: String { return self._s[2827]! } + public var Passport_Language_lo: String { return self._s[2828]! } + public var Camera_FlashAuto: String { return self._s[2829]! } + public var Common_Cancel: String { return self._s[2830]! } + public var DialogList_SavedMessagesTooltip: String { return self._s[2831]! } + public var TwoStepAuth_SetupPasswordTitle: String { return self._s[2832]! } public func PUSH_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2832]!, self._r[2832]!, [_1]) + return formatWithArgumentRanges(self._s[2833]!, self._r[2833]!, [_1]) } - public var Conversation_ReportSpamConfirmation: String { return self._s[2833]! } - public var ChatSettings_Title: String { return self._s[2835]! } - public var Passport_PasswordReset: String { return self._s[2836]! } - public var SocksProxySetup_TypeNone: String { return self._s[2837]! } - public var PhoneNumberHelp_Help: String { return self._s[2839]! } - public var Checkout_EnterPassword: String { return self._s[2840]! } - public var Share_AuthTitle: String { return self._s[2842]! } - public var Activity_UploadingDocument: String { return self._s[2843]! } - public var State_Connecting: String { return self._s[2844]! } - public var Profile_MessageLifetime1w: String { return self._s[2845]! } - public var Conversation_ContextMenuReport: String { return self._s[2846]! } - public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[2847]! } - public var AutoNightTheme_ScheduledTo: String { return self._s[2848]! } - public var AuthSessions_Terminate: String { return self._s[2849]! } - public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[2850]! } - public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[2851]! } - public var PhotoEditor_Set: String { return self._s[2852]! } - public var EmptyGroupInfo_Title: String { return self._s[2853]! } - public var Login_PadPhoneHelp: String { return self._s[2854]! } - public var PrivacyPolicy_DeclineLastWarning: String { return self._s[2857]! } - public var NotificationsSound_Complete: String { return self._s[2858]! } - public var Group_Info_AdminLog: String { return self._s[2859]! } - public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[2860]! } - public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[2861]! } - public var Conversation_Admin: String { return self._s[2863]! } - public var Conversation_GifTooltip: String { return self._s[2864]! } - public var Passport_NotLoggedInMessage: String { return self._s[2865]! } - public var Profile_MessageLifetimeForever: String { return self._s[2866]! } - public var SharedMedia_EmptyTitle: String { return self._s[2868]! } - public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[2870]! } - public var Username_Help: String { return self._s[2871]! } - public var DialogList_LanguageTooltip: String { return self._s[2873]! } - public var Map_LoadError: String { return self._s[2874]! } - public var Channel_AdminLog_AddMembers: String { return self._s[2875]! } - public var Notification_Exceptions_NewException: String { return self._s[2876]! } - public var TwoStepAuth_EmailTitle: String { return self._s[2877]! } - public var WatchRemote_AlertText: String { return self._s[2878]! } - public var ChatSettings_ConnectionType_Title: String { return self._s[2881]! } - public var Passport_Address_CountryPlaceholder: String { return self._s[2882]! } + public var Conversation_ReportSpamConfirmation: String { return self._s[2834]! } + public var ChatSettings_Title: String { return self._s[2836]! } + public var Passport_PasswordReset: String { return self._s[2837]! } + public var SocksProxySetup_TypeNone: String { return self._s[2838]! } + public var PhoneNumberHelp_Help: String { return self._s[2840]! } + public var Checkout_EnterPassword: String { return self._s[2841]! } + public var Share_AuthTitle: String { return self._s[2843]! } + public var Activity_UploadingDocument: String { return self._s[2844]! } + public var State_Connecting: String { return self._s[2845]! } + public var Profile_MessageLifetime1w: String { return self._s[2846]! } + public var Conversation_ContextMenuReport: String { return self._s[2847]! } + public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[2848]! } + public var AutoNightTheme_ScheduledTo: String { return self._s[2849]! } + public var AuthSessions_Terminate: String { return self._s[2850]! } + public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[2851]! } + public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[2852]! } + public var PhotoEditor_Set: String { return self._s[2853]! } + public var EmptyGroupInfo_Title: String { return self._s[2854]! } + public var Login_PadPhoneHelp: String { return self._s[2855]! } + public var PrivacyPolicy_DeclineLastWarning: String { return self._s[2858]! } + public var NotificationsSound_Complete: String { return self._s[2859]! } + public var Group_Info_AdminLog: String { return self._s[2860]! } + public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[2861]! } + public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[2862]! } + public var Conversation_Admin: String { return self._s[2864]! } + public var Conversation_GifTooltip: String { return self._s[2865]! } + public var Passport_NotLoggedInMessage: String { return self._s[2866]! } + public var Profile_MessageLifetimeForever: String { return self._s[2867]! } + public var SharedMedia_EmptyTitle: String { return self._s[2869]! } + public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[2871]! } + public var Username_Help: String { return self._s[2872]! } + public var DialogList_LanguageTooltip: String { return self._s[2874]! } + public var Map_LoadError: String { return self._s[2875]! } + public var Channel_AdminLog_AddMembers: String { return self._s[2876]! } + public var Notification_Exceptions_NewException: String { return self._s[2877]! } + public var TwoStepAuth_EmailTitle: String { return self._s[2878]! } + public var WatchRemote_AlertText: String { return self._s[2879]! } + public var ChatSettings_ConnectionType_Title: String { return self._s[2882]! } + public var Passport_Address_CountryPlaceholder: String { return self._s[2883]! } public func DialogList_AwaitingEncryption(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2883]!, self._r[2883]!, [_0]) + return formatWithArgumentRanges(self._s[2884]!, self._r[2884]!, [_0]) } public func Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2884]!, self._r[2884]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2885]!, self._r[2885]!, [_1, _2, _3]) } - public var Group_AdminLog_EmptyText: String { return self._s[2885]! } - public var AccessDenied_VideoMicrophone: String { return self._s[2887]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[2888]! } - public var Cache_ClearNone: String { return self._s[2889]! } - public var SocksProxySetup_FailedToConnect: String { return self._s[2890]! } - public var Permissions_NotificationsTitle_v0: String { return self._s[2891]! } + public var Group_AdminLog_EmptyText: String { return self._s[2886]! } + public var AccessDenied_VideoMicrophone: String { return self._s[2888]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[2889]! } + public var Cache_ClearNone: String { return self._s[2890]! } + public var SocksProxySetup_FailedToConnect: String { return self._s[2891]! } + public var Permissions_NotificationsTitle_v0: String { return self._s[2892]! } public func Channel_AdminLog_MessageEdited(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2892]!, self._r[2892]!, [_0]) + return formatWithArgumentRanges(self._s[2893]!, self._r[2893]!, [_0]) } - public var Passport_Identity_Country: String { return self._s[2893]! } + public var Passport_Identity_Country: String { return self._s[2894]! } public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2894]!, self._r[2894]!, [_0]) + return formatWithArgumentRanges(self._s[2895]!, self._r[2895]!, [_0]) } - public var AccessDenied_Settings: String { return self._s[2895]! } - public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[2896]! } - public var Month_ShortMay: String { return self._s[2897]! } - public var Compose_NewGroup: String { return self._s[2898]! } - public var Group_Setup_TypePrivate: String { return self._s[2900]! } - public var Login_PadPhoneHelpTitle: String { return self._s[2902]! } - public var Appearance_ThemeDayClassic: String { return self._s[2903]! } - public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[2904]! } - public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[2905]! } - public var Conversation_typing: String { return self._s[2907]! } - public var Paint_Masks: String { return self._s[2908]! } - public var Username_InvalidTaken: String { return self._s[2909]! } - public var Call_StatusNoAnswer: String { return self._s[2910]! } - public var TwoStepAuth_EmailAddSuccess: String { return self._s[2911]! } - public var Passport_Identity_Selfie: String { return self._s[2912]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[2913]! } - public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[2914]! } - public var Conversation_ClearSecretHistory: String { return self._s[2915]! } - public var NetworkUsageSettings_Title: String { return self._s[2917]! } - public var Your_cards_security_code_is_invalid: String { return self._s[2919]! } + public var AccessDenied_Settings: String { return self._s[2896]! } + public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[2897]! } + public var Month_ShortMay: String { return self._s[2898]! } + public var Compose_NewGroup: String { return self._s[2899]! } + public var Group_Setup_TypePrivate: String { return self._s[2901]! } + public var Login_PadPhoneHelpTitle: String { return self._s[2903]! } + public var Appearance_ThemeDayClassic: String { return self._s[2904]! } + public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[2905]! } + public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[2906]! } + public var Conversation_typing: String { return self._s[2908]! } + public var Paint_Masks: String { return self._s[2909]! } + public var Username_InvalidTaken: String { return self._s[2910]! } + public var Call_StatusNoAnswer: String { return self._s[2911]! } + public var TwoStepAuth_EmailAddSuccess: String { return self._s[2912]! } + public var Passport_Identity_Selfie: String { return self._s[2913]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[2914]! } + public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[2915]! } + public var Conversation_ClearSecretHistory: String { return self._s[2916]! } + public var NetworkUsageSettings_Title: String { return self._s[2918]! } + public var Your_cards_security_code_is_invalid: String { return self._s[2920]! } public func Notification_LeftChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2921]!, self._r[2921]!, [_0]) + return formatWithArgumentRanges(self._s[2922]!, self._r[2922]!, [_0]) } public func Call_CallInProgressMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2922]!, self._r[2922]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2923]!, self._r[2923]!, [_1, _2]) } - public var SaveIncomingPhotosSettings_From: String { return self._s[2924]! } - public var Map_LiveLocationTitle: String { return self._s[2925]! } - public var Login_InfoAvatarAdd: String { return self._s[2926]! } - public var Passport_Identity_FilesView: String { return self._s[2927]! } - public var UserInfo_GenericPhoneLabel: String { return self._s[2928]! } - public var Privacy_Calls_NeverAllow: String { return self._s[2929]! } + public var SaveIncomingPhotosSettings_From: String { return self._s[2925]! } + public var Map_LiveLocationTitle: String { return self._s[2926]! } + public var Login_InfoAvatarAdd: String { return self._s[2927]! } + public var Passport_Identity_FilesView: String { return self._s[2928]! } + public var UserInfo_GenericPhoneLabel: String { return self._s[2929]! } + public var Privacy_Calls_NeverAllow: String { return self._s[2930]! } public func Contacts_AddPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2930]!, self._r[2930]!, [_0]) + return formatWithArgumentRanges(self._s[2931]!, self._r[2931]!, [_0]) } - public var TwoStepAuth_ConfirmationText: String { return self._s[2931]! } - public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[2932]! } - public var Channel_AdminLogFilter_AdminsAll: String { return self._s[2933]! } - public var Tour_Title2: String { return self._s[2934]! } - public var Conversation_FileOpenIn: String { return self._s[2935]! } - public var Checkout_ErrorPrecheckoutFailed: String { return self._s[2936]! } - public var Wallpaper_Set: String { return self._s[2937]! } - public var Passport_Identity_Translations: String { return self._s[2939]! } + public var TwoStepAuth_ConfirmationText: String { return self._s[2932]! } + public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[2933]! } + public var Channel_AdminLogFilter_AdminsAll: String { return self._s[2934]! } + public var Tour_Title2: String { return self._s[2935]! } + public var Conversation_FileOpenIn: String { return self._s[2936]! } + public var Checkout_ErrorPrecheckoutFailed: String { return self._s[2937]! } + public var Wallpaper_Set: String { return self._s[2938]! } + public var Passport_Identity_Translations: String { return self._s[2940]! } public func Channel_AdminLog_MessageChangedChannelAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2940]!, self._r[2940]!, [_0]) + return formatWithArgumentRanges(self._s[2941]!, self._r[2941]!, [_0]) } - public var Channel_LeaveChannel: String { return self._s[2941]! } + public var Channel_LeaveChannel: String { return self._s[2942]! } public func PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2942]!, self._r[2942]!, [_1]) + return formatWithArgumentRanges(self._s[2943]!, self._r[2943]!, [_1]) } - public var PhotoEditor_HighlightsTint: String { return self._s[2943]! } - public var Passport_Email_Delete: String { return self._s[2944]! } - public var Conversation_Mute: String { return self._s[2946]! } - public var Channel_AdminLog_CanSendMessages: String { return self._s[2948]! } + public var PhotoEditor_HighlightsTint: String { return self._s[2944]! } + public var Passport_Email_Delete: String { return self._s[2945]! } + public var Conversation_Mute: String { return self._s[2947]! } + public var Channel_AdminLog_CanSendMessages: String { return self._s[2949]! } public func Notification_PassportValuesSentMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2950]!, self._r[2950]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2951]!, self._r[2951]!, [_1, _2]) } - public var Calls_CallTabDescription: String { return self._s[2951]! } - public var Passport_Identity_NativeNameHelp: String { return self._s[2952]! } - public var Common_No: String { return self._s[2953]! } - public var Weekday_Sunday: String { return self._s[2954]! } - public var Notification_Reply: String { return self._s[2955]! } - public var Conversation_ViewMessage: String { return self._s[2956]! } + public var Calls_CallTabDescription: String { return self._s[2952]! } + public var Passport_Identity_NativeNameHelp: String { return self._s[2953]! } + public var Common_No: String { return self._s[2954]! } + public var Weekday_Sunday: String { return self._s[2955]! } + public var Notification_Reply: String { return self._s[2956]! } + public var Conversation_ViewMessage: String { return self._s[2957]! } public func Checkout_SavePasswordTimeoutAndFaceId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2957]!, self._r[2957]!, [_0]) - } - public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2958]!, self._r[2958]!, [_0]) } - public var Message_PinnedDocumentMessage: String { return self._s[2959]! } - public var DialogList_TabTitle: String { return self._s[2961]! } - public var Passport_FieldEmail: String { return self._s[2962]! } - public var Conversation_UnpinMessageAlert: String { return self._s[2963]! } - public var Passport_Address_TypeBankStatement: String { return self._s[2964]! } - public var Passport_Identity_ExpiryDate: String { return self._s[2965]! } - public var Privacy_Calls_P2P: String { return self._s[2966]! } - public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2968]!, self._r[2968]!, [_0]) + public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2959]!, self._r[2959]!, [_0]) } - public var SocksProxySetup_UseForCallsHelp: String { return self._s[2969]! } - public var EnterPasscode_ChangeTitle: String { return self._s[2970]! } - public var Passport_InfoText: String { return self._s[2971]! } - public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[2972]! } + public var Message_PinnedDocumentMessage: String { return self._s[2960]! } + public var DialogList_TabTitle: String { return self._s[2962]! } + public var Passport_FieldEmail: String { return self._s[2963]! } + public var Conversation_UnpinMessageAlert: String { return self._s[2964]! } + public var Passport_Address_TypeBankStatement: String { return self._s[2965]! } + public var Passport_Identity_ExpiryDate: String { return self._s[2966]! } + public var Privacy_Calls_P2P: String { return self._s[2967]! } + public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2969]!, self._r[2969]!, [_0]) + } + public var SocksProxySetup_UseForCallsHelp: String { return self._s[2970]! } + public var EnterPasscode_ChangeTitle: String { return self._s[2971]! } + public var Passport_InfoText: String { return self._s[2972]! } + public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[2973]! } public func Login_InvalidPhoneEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2973]!, self._r[2973]!, [_0]) + return formatWithArgumentRanges(self._s[2974]!, self._r[2974]!, [_0]) } public func Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2974]!, self._r[2974]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2975]!, self._r[2975]!, [_1, _2, _3]) } - public var Passport_Identity_EditDriversLicense: String { return self._s[2975]! } - public var Conversation_TapAndHoldToRecord: String { return self._s[2977]! } + public var Passport_Identity_EditDriversLicense: String { return self._s[2976]! } + public var Conversation_TapAndHoldToRecord: String { return self._s[2978]! } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2978]!, self._r[2978]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2979]!, self._r[2979]!, [_1, _2]) } - public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[2980]! } + public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[2981]! } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2982]!, self._r[2982]!, [_0]) + return formatWithArgumentRanges(self._s[2983]!, self._r[2983]!, [_0]) } - public var DialogList_Unread: String { return self._s[2983]! } + public var DialogList_Unread: String { return self._s[2984]! } public func PUSH_CHAT_MESSAGE_GIF(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2984]!, self._r[2984]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2985]!, self._r[2985]!, [_1, _2]) } - public var User_DeletedAccount: String { return self._s[2985]! } + public var User_DeletedAccount: String { return self._s[2986]! } public func Watch_Time_ShortYesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2986]!, self._r[2986]!, [_0]) + return formatWithArgumentRanges(self._s[2987]!, self._r[2987]!, [_0]) } - public var UserInfo_NotificationsDefault: String { return self._s[2987]! } - public var SharedMedia_CategoryMedia: String { return self._s[2988]! } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[2989]! } - public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[2990]! } - public var Watch_ChatList_Compose: String { return self._s[2991]! } - public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[2992]! } - public var Watch_Microphone_Access: String { return self._s[2993]! } - public var Group_Setup_HistoryHeader: String { return self._s[2994]! } - public var Activity_UploadingPhoto: String { return self._s[2995]! } - public var Conversation_Edit: String { return self._s[2997]! } - public var Group_ErrorSendRestrictedMedia: String { return self._s[2998]! } - public var Login_TermsOfServiceDecline: String { return self._s[2999]! } - public var Message_PinnedContactMessage: String { return self._s[3000]! } + public var UserInfo_NotificationsDefault: String { return self._s[2988]! } + public var SharedMedia_CategoryMedia: String { return self._s[2989]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[2990]! } + public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[2991]! } + public var Watch_ChatList_Compose: String { return self._s[2992]! } + public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[2993]! } + public var Watch_Microphone_Access: String { return self._s[2994]! } + public var Group_Setup_HistoryHeader: String { return self._s[2995]! } + public var Activity_UploadingPhoto: String { return self._s[2996]! } + public var Conversation_Edit: String { return self._s[2998]! } + public var Group_ErrorSendRestrictedMedia: String { return self._s[2999]! } + public var Login_TermsOfServiceDecline: String { return self._s[3000]! } + public var Message_PinnedContactMessage: String { return self._s[3001]! } public func Channel_AdminLog_MessageRestrictedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3001]!, self._r[3001]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3002]!, self._r[3002]!, [_1, _2]) } public func Login_PhoneBannedEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3002]!, self._r[3002]!, [_1, _2, _3, _4, _5]) + return formatWithArgumentRanges(self._s[3003]!, self._r[3003]!, [_1, _2, _3, _4, _5]) } - public var TwoStepAuth_AdditionalPassword: String { return self._s[3004]! } + public var TwoStepAuth_AdditionalPassword: String { return self._s[3005]! } public func PUSH_CHAT_DELETE_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3005]!, self._r[3005]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3006]!, self._r[3006]!, [_1, _2]) } - public var Passport_Phone_EnterOtherNumber: String { return self._s[3006]! } - public var Message_PinnedPhotoMessage: String { return self._s[3007]! } - public var Passport_FieldPhone: String { return self._s[3008]! } - public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3009]! } - public var InfoPlist_NSCameraUsageDescription: String { return self._s[3011]! } - public var Conversation_Call: String { return self._s[3012]! } - public var Common_TakePhoto: String { return self._s[3014]! } - public var Channel_NotificationLoading: String { return self._s[3015]! } + public var Passport_Phone_EnterOtherNumber: String { return self._s[3007]! } + public var Message_PinnedPhotoMessage: String { return self._s[3008]! } + public var Passport_FieldPhone: String { return self._s[3009]! } + public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3010]! } + public var InfoPlist_NSCameraUsageDescription: String { return self._s[3012]! } + public var Conversation_Call: String { return self._s[3013]! } + public var Common_TakePhoto: String { return self._s[3015]! } + public var Channel_NotificationLoading: String { return self._s[3016]! } public func Notification_Exceptions_Sound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3016]!, self._r[3016]!, [_0]) + return formatWithArgumentRanges(self._s[3017]!, self._r[3017]!, [_0]) } public func PUSH_CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3017]!, self._r[3017]!, [_1]) + return formatWithArgumentRanges(self._s[3018]!, self._r[3018]!, [_1]) } - public var Permissions_SiriTitle_v0: String { return self._s[3018]! } + public var Permissions_SiriTitle_v0: String { return self._s[3019]! } public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3019]!, self._r[3019]!, [_0]) + return formatWithArgumentRanges(self._s[3020]!, self._r[3020]!, [_0]) } - public var Channel_MessagePhotoRemoved: String { return self._s[3020]! } - public var Common_edit: String { return self._s[3021]! } - public var PrivacySettings_AuthSessions: String { return self._s[3022]! } - public var Month_ShortJune: String { return self._s[3023]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3024]! } - public var Call_ReportSend: String { return self._s[3025]! } - public var Watch_LastSeen_JustNow: String { return self._s[3026]! } - public var Notifications_MessageNotifications: String { return self._s[3027]! } - public var WallpaperSearch_ColorGreen: String { return self._s[3028]! } - public var BroadcastListInfo_AddRecipient: String { return self._s[3030]! } - public var Group_Status: String { return self._s[3031]! } + public var Channel_MessagePhotoRemoved: String { return self._s[3021]! } + public var Common_edit: String { return self._s[3022]! } + public var PrivacySettings_AuthSessions: String { return self._s[3023]! } + public var Month_ShortJune: String { return self._s[3024]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3025]! } + public var Call_ReportSend: String { return self._s[3026]! } + public var Watch_LastSeen_JustNow: String { return self._s[3027]! } + public var Notifications_MessageNotifications: String { return self._s[3028]! } + public var WallpaperSearch_ColorGreen: String { return self._s[3029]! } + public var BroadcastListInfo_AddRecipient: String { return self._s[3031]! } + public var Group_Status: String { return self._s[3032]! } public func AutoNightTheme_LocationHelp(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3032]!, self._r[3032]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3033]!, self._r[3033]!, [_0, _1]) } - public var ShareMenu_ShareTo: String { return self._s[3033]! } - public var Conversation_Moderate_Ban: String { return self._s[3034]! } + public var ShareMenu_ShareTo: String { return self._s[3034]! } + public var Conversation_Moderate_Ban: String { return self._s[3035]! } public func Conversation_DeleteMessagesFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3035]!, self._r[3035]!, [_0]) + return formatWithArgumentRanges(self._s[3036]!, self._r[3036]!, [_0]) } - public var SharedMedia_ViewInChat: String { return self._s[3036]! } - public var Map_LiveLocationFor8Hours: String { return self._s[3037]! } + public var SharedMedia_ViewInChat: String { return self._s[3037]! } + public var Map_LiveLocationFor8Hours: String { return self._s[3038]! } public func PUSH_PINNED_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3038]!, self._r[3038]!, [_1]) - } - public func PUSH_PINNED_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3039]!, self._r[3039]!, [_1]) } + public func PUSH_PINNED_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3040]!, self._r[3040]!, [_1]) + } public func Map_AccurateTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3041]!, self._r[3041]!, [_0]) + return formatWithArgumentRanges(self._s[3042]!, self._r[3042]!, [_0]) } - public var Map_OpenInHereMaps: String { return self._s[3042]! } - public var Appearance_ReduceMotion: String { return self._s[3043]! } + public var Map_OpenInHereMaps: String { return self._s[3043]! } + public var Appearance_ReduceMotion: String { return self._s[3044]! } public func PUSH_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3044]!, self._r[3044]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3045]!, self._r[3045]!, [_1, _2]) } - public var Channel_Setup_TypePublicHelp: String { return self._s[3045]! } - public var Passport_Identity_EditInternalPassport: String { return self._s[3046]! } - public var PhotoEditor_Skip: String { return self._s[3047]! } - public func Media_SharePhoto(_ value: Int32) -> String { + public var Channel_Setup_TypePublicHelp: String { return self._s[3046]! } + public var Passport_Identity_EditInternalPassport: String { return self._s[3047]! } + public var PhotoEditor_Skip: String { return self._s[3048]! } + public func GroupInfo_ParticipantCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + public func Map_ETAMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Photo(_ value: Int32) -> String { + public func MessageTimer_Seconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Media_ShareVideo(_ value: Int32) -> String { + public func ForwardedMessages(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Years(_ value: Int32) -> String { + public func MessageTimer_Months(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + public func ForwardedLocations(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessagePoll_VotedCount(_ value: Int32) -> String { + public func SharedMedia_Video(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Conversation_StatusMembers(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func ForwardedAudios(_ value: Int32) -> String { + public func MessageTimer_Weeks(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_ShortDays(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Map_ETAHours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedPolls(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func Invitation_Members(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Notification_GameScoreExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Conversation_StatusOnline(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_Seconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func SharedMedia_Link(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Contacts_ImportersCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, _0, _1) - } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func AttachmentMenu_SendItem(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MessageTimer_Hours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func SharedMedia_Video(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedVideoMessages(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Call_Seconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func MuteExpires_Minutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Call_ShortSeconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Call_ShortMinutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func SharedMedia_File(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, "\(value)") } public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreSimple(_ value: Int32) -> String { + public func AttachmentMenu_SendGif(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { + public func Media_ShareVideo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Passport_Scans(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func StickerPack_StickerCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Media_ShareItem(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_Minutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func GroupInfo_ParticipantCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_Days(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedMessages(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedPhotos(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Map_ETAMinutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func UserCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedVideos(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Call_Minutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func MessageTimer_ShortHours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MuteFor_Days(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedLocations(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func QuickSend_Photos(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func InviteText_ContactsCountText(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_Weeks(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedFiles(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedContacts(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedGifs(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func LastSeen_HoursAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_ShortWeeks(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedStickers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_Months(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MuteExpires_Hours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func SharedMedia_Generic(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Conversation_StatusSubscribers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MuteFor_Hours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Notifications_Exceptions(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, "\(value)") } public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, _1, _2) + return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ForwardedContacts(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, _0, _1) + } + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func MuteFor_Hours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func SharedMedia_Link(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedVideos(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Call_Minutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedFiles(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Call_ShortMinutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MuteFor_Days(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Media_SharePhoto(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func UserCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MuteExpires_Minutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_ShortWeeks(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MuteExpires_Hours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func LastSeen_HoursAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_Hours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Watch_UserInfo_Mute(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Map_ETAHours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Conversation_StatusOnline(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func StickerPack_AddMaskCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_ShortDays(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func StickerPack_StickerCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Call_ShortSeconds(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedStickers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_Years(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedGifs(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Invitation_Members(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Notifications_Exceptions(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func InviteText_ContactsCountText(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Contacts_ImportersCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Conversation_StatusMembers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedPhotos(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func SharedMedia_Generic(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func StickerPack_AddStickerCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedPolls(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func SharedMedia_Photo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func QuickSend_Photos(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func SharedMedia_File(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Passport_Scans(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedAudios(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func MessagePoll_VotedCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Notification_GameScoreExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Conversation_StatusSubscribers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Media_ShareItem(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func ForwardedVideoMessages(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Notification_GameScoreSimple(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_Days(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_Minutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, _1, _2) } public func MuteExpires_Days(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func AttachmentMenu_SendItem(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Call_Seconds(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_ShortHours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, "\(value)") } diff --git a/TelegramUI/Resources/PresentationStrings.mapping b/TelegramUI/Resources/PresentationStrings.mapping index c19ec0f238..8979b17a62 100644 Binary files a/TelegramUI/Resources/PresentationStrings.mapping and b/TelegramUI/Resources/PresentationStrings.mapping differ diff --git a/TelegramUI/SettingsController.swift b/TelegramUI/SettingsController.swift index f378bd28bd..bd90cab481 100644 --- a/TelegramUI/SettingsController.swift +++ b/TelegramUI/SettingsController.swift @@ -647,7 +647,9 @@ public func settingsController(account: Account, accountManager: AccountManager) updateState { $0.withUpdatedUpdatingAvatar(.image(representation, true)) } - updateAvatarDisposable.set((updateAccountPhoto(account: account, resource: resource) |> deliverOnMainQueue).start(next: { result in + updateAvatarDisposable.set((updateAccountPhoto(account: account, resource: resource, mapResourceToAvatarSizes: { resource, representations in + return mapResourceToAvatarSizes(postbox: account.postbox, resource: resource, representations: representations) + }) |> deliverOnMainQueue).start(next: { result in switch result { case .complete: updateState { @@ -683,7 +685,9 @@ public func settingsController(account: Account, accountManager: AccountManager) return $0.withUpdatedUpdatingAvatar(.none) } } - updateAvatarDisposable.set((updateAccountPhoto(account: account, resource: nil) |> deliverOnMainQueue).start(next: { result in + updateAvatarDisposable.set((updateAccountPhoto(account: account, resource: nil, mapResourceToAvatarSizes: { resource, representations in + return mapResourceToAvatarSizes(postbox: account.postbox, resource: resource, representations: representations) + }) |> deliverOnMainQueue).start(next: { result in switch result { case .complete: updateState { diff --git a/TelegramUI/SettingsThemeWallpaperNode.swift b/TelegramUI/SettingsThemeWallpaperNode.swift index f9db562d5c..5302db8fb3 100644 --- a/TelegramUI/SettingsThemeWallpaperNode.swift +++ b/TelegramUI/SettingsThemeWallpaperNode.swift @@ -100,8 +100,8 @@ final class SettingsThemeWallpaperNode: ASDisplayNode { convertedRepresentations.append(ImageRepresentationWithReference(representation: representation, reference: .standalone(resource: representation.resource))) } let dimensions = file.file.dimensions ?? CGSize(width: 100.0, height: 100.0) - //convertedRepresentations.append(ImageRepresentationWithReference(representation: .init(dimensions: dimensions, resource: file.file.resource), reference: .standalone(resource: file.file.resource))) - self.imageNode.setSignal(chatAvatarGalleryPhoto(account: account, representations: convertedRepresentations, autoFetchFullSize: true)) + convertedRepresentations.append(ImageRepresentationWithReference(representation: .init(dimensions: dimensions, resource: file.file.resource), reference: .standalone(resource: file.file.resource))) + self.imageNode.setSignal(chatAvatarGalleryPhoto(account: account, fileReference: .standalone(media: file.file), representations: convertedRepresentations, autoFetchFullSize: true)) let apply = self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: dimensions.aspectFilled(size), boundingSize: size, intrinsicInsets: UIEdgeInsets())) apply() } @@ -122,7 +122,7 @@ final class SettingsThemeWallpaperNode: ASDisplayNode { } let dimensions = file.file.dimensions ?? CGSize(width: 100.0, height: 100.0) convertedRepresentations.append(ImageRepresentationWithReference(representation: .init(dimensions: dimensions, resource: file.file.resource), reference: .standalone(resource: file.file.resource))) - self.imageNode.setSignal(chatAvatarGalleryPhoto(account: account, representations: convertedRepresentations, autoFetchFullSize: true)) + self.imageNode.setSignal(chatAvatarGalleryPhoto(account: account, fileReference: .standalone(media: file.file), representations: convertedRepresentations, autoFetchFullSize: true)) let apply = self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: dimensions.aspectFilled(size), boundingSize: size, intrinsicInsets: UIEdgeInsets())) apply() }