From 84d40aa79da30f86cb62e0a2ccfee3750979c02a Mon Sep 17 00:00:00 2001 From: Peter <> Date: Tue, 15 Jan 2019 19:20:52 +0400 Subject: [PATCH] UI fixes --- TelegramUI.xcodeproj/project.pbxproj | 4 + TelegramUI/ChannelInfoController.swift | 8 +- TelegramUI/ChatListControllerNode.swift | 31 +- TelegramUI/ChatListNode.swift | 31 +- TelegramUI/ChatListNodeEntries.swift | 10 +- TelegramUI/ChatListViewTransition.swift | 1 + .../ChatMessagePollBubbleContentNode.swift | 102 +- TelegramUI/CreateChannelController.swift | 4 +- TelegramUI/CreateGroupController.swift | 43 +- TelegramUI/EditSettingsController.swift | 8 +- TelegramUI/GroupInfoController.swift | 8 +- .../GroupPreHistorySetupController.swift | 10 +- TelegramUI/MapResourceToAvatarSizes.swift | 23 + TelegramUI/PresentationStrings.swift | 1029 +++++++++-------- .../Resources/PresentationStrings.mapping | Bin 98014 -> 98060 bytes TelegramUI/SettingsController.swift | 8 +- TelegramUI/SettingsThemeWallpaperNode.swift | 4 +- 17 files changed, 737 insertions(+), 587 deletions(-) create mode 100644 TelegramUI/MapResourceToAvatarSizes.swift diff --git a/TelegramUI.xcodeproj/project.pbxproj b/TelegramUI.xcodeproj/project.pbxproj index c327f078fd..9afe982c14 100644 --- a/TelegramUI.xcodeproj/project.pbxproj +++ b/TelegramUI.xcodeproj/project.pbxproj @@ -118,6 +118,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 */; }; @@ -1240,6 +1241,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 = ""; }; @@ -4727,6 +4729,7 @@ 09C9EA32219F79F600E90146 /* ID3Artwork.h */, 09C9EA31219F79F500E90146 /* ID3Artwork.m */, 099529B321D3E5D800805E13 /* CheckDiskSpace.swift */, + D000CAB921EE130D0011B15D /* MapResourceToAvatarSizes.swift */, ); name = Utils; sourceTree = ""; @@ -5443,6 +5446,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 74edec4fee..69badf93d4 100644 --- a/TelegramUI/PresentationStrings.swift +++ b/TelegramUI/PresentationStrings.swift @@ -699,12 +699,12 @@ public final class PresentationStrings { } public var Compose_ChannelTokenListPlaceholder: String { return self._s[489]! } public var Passport_ScanPassport: String { return self._s[490]! } - public var Watch_Message_Invoice: String { return self._s[491]! } - public var Watch_Suggestion_Thanks: String { return self._s[492]! } + public var Watch_Suggestion_Thanks: String { return self._s[491]! } + public var BlockedUsers_AddNew: String { return self._s[492]! } public func PUSH_CHAT_MESSAGE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[493]!, self._r[493]!, [_1, _2]) } - public var BlockedUsers_AddNew: String { return self._s[494]! } + public var Watch_Message_Invoice: String { return self._s[494]! } public var Month_GenJuly: String { return self._s[495]! } public var SocksProxySetup_ProxySocks5: String { return self._s[496]! } public var Notification_ChannelInviterSelf: String { return self._s[498]! } @@ -3067,640 +3067,641 @@ public final class PresentationStrings { return formatWithArgumentRanges(self._s[2742]!, self._r[2742]!, [_0]) } public var Passport_Language_my: String { return self._s[2743]! } + public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[2744]! } public func Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2744]!, self._r[2744]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2745]!, self._r[2745]!, [_1, _2, _3]) } - public var Preview_CopyAddress: String { return self._s[2745]! } + public var Preview_CopyAddress: String { return self._s[2746]! } public func DialogList_SinglePlayingGameSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2746]!, self._r[2746]!, [_0]) + return formatWithArgumentRanges(self._s[2747]!, self._r[2747]!, [_0]) } - public var KeyCommand_JumpToPreviousChat: String { return self._s[2747]! } - public var UserInfo_BotSettings: String { return self._s[2748]! } - public var LiveLocation_MenuStopAll: String { return self._s[2750]! } - public var Passport_PasswordCreate: String { return self._s[2751]! } - public var StickerSettings_MaskContextInfo: String { return self._s[2752]! } - public var Message_PinnedLocationMessage: String { return self._s[2753]! } - public var Map_Satellite: String { return self._s[2754]! } - public var Watch_Message_Unsupported: String { return self._s[2755]! } - public var Username_TooManyPublicUsernamesError: String { return self._s[2756]! } - public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[2757]! } + public var KeyCommand_JumpToPreviousChat: String { return self._s[2748]! } + public var UserInfo_BotSettings: String { return self._s[2749]! } + public var LiveLocation_MenuStopAll: String { return self._s[2751]! } + public var Passport_PasswordCreate: String { return self._s[2752]! } + public var StickerSettings_MaskContextInfo: String { return self._s[2753]! } + public var Message_PinnedLocationMessage: String { return self._s[2754]! } + public var Map_Satellite: String { return self._s[2755]! } + public var Watch_Message_Unsupported: String { return self._s[2756]! } + public var Username_TooManyPublicUsernamesError: String { return self._s[2757]! } + public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[2758]! } public func Notification_PinnedTextMessage(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2758]!, self._r[2758]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2759]!, self._r[2759]!, [_0, _1]) } - public var Notifications_ChannelNotificationsHelp: String { return self._s[2759]! } - public var Privacy_Calls_P2PContacts: String { return self._s[2760]! } - public var NotificationsSound_None: String { return self._s[2761]! } - public var AccessDenied_VoiceMicrophone: String { return self._s[2763]! } + public var Notifications_ChannelNotificationsHelp: String { return self._s[2760]! } + public var Privacy_Calls_P2PContacts: String { return self._s[2761]! } + public var NotificationsSound_None: String { return self._s[2762]! } + public var AccessDenied_VoiceMicrophone: String { return self._s[2764]! } public func ApplyLanguage_ChangeLanguageAlreadyActive(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2764]!, self._r[2764]!, [_1]) + return formatWithArgumentRanges(self._s[2765]!, self._r[2765]!, [_1]) } - public var Cache_Indexing: String { return self._s[2765]! } - public var DialogList_RecentTitlePeople: String { return self._s[2767]! } - public var DialogList_EncryptionRejected: String { return self._s[2768]! } - public var GroupInfo_Administrators: String { return self._s[2769]! } - public var Passport_ScanPassportHelp: String { return self._s[2770]! } - public var Application_Name: String { return self._s[2771]! } - public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[2772]! } - public var Passport_Identity_TranslationHelp: String { return self._s[2774]! } + public var Cache_Indexing: String { return self._s[2766]! } + public var DialogList_RecentTitlePeople: String { return self._s[2768]! } + public var DialogList_EncryptionRejected: String { return self._s[2769]! } + public var GroupInfo_Administrators: String { return self._s[2770]! } + public var Passport_ScanPassportHelp: String { return self._s[2771]! } + public var Application_Name: String { return self._s[2772]! } + public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[2773]! } + public var Passport_Identity_TranslationHelp: String { return self._s[2775]! } public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2775]!, self._r[2775]!, [_0]) - } - public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2776]!, self._r[2776]!, [_0]) } - public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[2777]! } - public var Privacy_ChatsTitle: String { return self._s[2778]! } - public var DialogList_ClearHistoryConfirmation: String { return self._s[2779]! } - public var Watch_Suggestion_HoldOn: String { return self._s[2780]! } - public var SocksProxySetup_RequiredCredentials: String { return self._s[2781]! } - public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[2782]! } - public var TwoStepAuth_EmailSkipAlert: String { return self._s[2783]! } - public var Channel_Setup_TypePublic: String { return self._s[2786]! } + public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2777]!, self._r[2777]!, [_0]) + } + public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[2778]! } + public var Privacy_ChatsTitle: String { return self._s[2779]! } + public var DialogList_ClearHistoryConfirmation: String { return self._s[2780]! } + public var Watch_Suggestion_HoldOn: String { return self._s[2781]! } + public var SocksProxySetup_RequiredCredentials: String { return self._s[2782]! } + public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[2783]! } + public var TwoStepAuth_EmailSkipAlert: String { return self._s[2784]! } + public var Channel_Setup_TypePublic: String { return self._s[2787]! } public func Channel_AdminLog_MessageToggleInvitesOn(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2787]!, self._r[2787]!, [_0]) + return formatWithArgumentRanges(self._s[2788]!, self._r[2788]!, [_0]) } - public var Channel_TypeSetup_Title: String { return self._s[2789]! } - public var Map_OpenInMaps: String { return self._s[2791]! } + public var Channel_TypeSetup_Title: String { return self._s[2790]! } + public var Map_OpenInMaps: String { return self._s[2792]! } public func PUSH_PINNED_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2792]!, self._r[2792]!, [_1]) + return formatWithArgumentRanges(self._s[2793]!, self._r[2793]!, [_1]) } - public var NotificationsSound_Tremolo: String { return self._s[2794]! } + public var NotificationsSound_Tremolo: String { return self._s[2795]! } public func Date_ChatDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2795]!, self._r[2795]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2796]!, self._r[2796]!, [_1, _2, _3]) } - public var ConversationProfile_UnknownAddMemberError: String { return self._s[2796]! } - public var Passport_PasswordHelp: String { return self._s[2797]! } - public var Login_CodeExpiredError: String { return self._s[2798]! } - public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[2799]! } - public var Conversation_TitleUnmute: String { return self._s[2800]! } - public var Passport_Identity_ScansHelp: String { return self._s[2801]! } - public var Passport_Language_lo: String { return self._s[2802]! } - public var Camera_FlashAuto: String { return self._s[2803]! } - public var Common_Cancel: String { return self._s[2804]! } - public var DialogList_SavedMessagesTooltip: String { return self._s[2805]! } - public var TwoStepAuth_SetupPasswordTitle: String { return self._s[2806]! } + public var ConversationProfile_UnknownAddMemberError: String { return self._s[2797]! } + public var Passport_PasswordHelp: String { return self._s[2798]! } + public var Login_CodeExpiredError: String { return self._s[2799]! } + public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[2800]! } + public var Conversation_TitleUnmute: String { return self._s[2801]! } + public var Passport_Identity_ScansHelp: String { return self._s[2802]! } + public var Passport_Language_lo: String { return self._s[2803]! } + public var Camera_FlashAuto: String { return self._s[2804]! } + public var Common_Cancel: String { return self._s[2805]! } + public var DialogList_SavedMessagesTooltip: String { return self._s[2806]! } + public var TwoStepAuth_SetupPasswordTitle: String { return self._s[2807]! } public func PUSH_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2807]!, self._r[2807]!, [_1]) + return formatWithArgumentRanges(self._s[2808]!, self._r[2808]!, [_1]) } - public var Conversation_ReportSpamConfirmation: String { return self._s[2808]! } - public var ChatSettings_Title: String { return self._s[2810]! } - public var Passport_PasswordReset: String { return self._s[2811]! } - public var SocksProxySetup_TypeNone: String { return self._s[2812]! } - public var PhoneNumberHelp_Help: String { return self._s[2814]! } - public var Checkout_EnterPassword: String { return self._s[2815]! } - public var Share_AuthTitle: String { return self._s[2817]! } - public var Activity_UploadingDocument: String { return self._s[2818]! } - public var State_Connecting: String { return self._s[2819]! } - public var Profile_MessageLifetime1w: String { return self._s[2820]! } - public var Conversation_ContextMenuReport: String { return self._s[2821]! } - public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[2822]! } - public var AutoNightTheme_ScheduledTo: String { return self._s[2823]! } - public var AuthSessions_Terminate: String { return self._s[2824]! } - public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[2825]! } - public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[2826]! } - public var PhotoEditor_Set: String { return self._s[2827]! } - public var EmptyGroupInfo_Title: String { return self._s[2828]! } - public var Login_PadPhoneHelp: String { return self._s[2829]! } - public var PrivacyPolicy_DeclineLastWarning: String { return self._s[2832]! } - public var NotificationsSound_Complete: String { return self._s[2833]! } - public var Group_Info_AdminLog: String { return self._s[2834]! } - public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[2835]! } - public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[2836]! } - public var Conversation_Admin: String { return self._s[2838]! } - public var Conversation_GifTooltip: String { return self._s[2839]! } - public var Passport_NotLoggedInMessage: String { return self._s[2840]! } - public var Profile_MessageLifetimeForever: String { return self._s[2841]! } - public var SharedMedia_EmptyTitle: String { return self._s[2843]! } - public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[2845]! } - public var Username_Help: String { return self._s[2846]! } - public var DialogList_LanguageTooltip: String { return self._s[2848]! } - public var Map_LoadError: String { return self._s[2849]! } - public var Channel_AdminLog_AddMembers: String { return self._s[2850]! } - public var Notification_Exceptions_NewException: String { return self._s[2851]! } - public var TwoStepAuth_EmailTitle: String { return self._s[2852]! } - public var WatchRemote_AlertText: String { return self._s[2853]! } - public var ChatSettings_ConnectionType_Title: String { return self._s[2855]! } - public var Passport_Address_CountryPlaceholder: String { return self._s[2856]! } + public var Conversation_ReportSpamConfirmation: String { return self._s[2809]! } + public var ChatSettings_Title: String { return self._s[2811]! } + public var Passport_PasswordReset: String { return self._s[2812]! } + public var SocksProxySetup_TypeNone: String { return self._s[2813]! } + public var PhoneNumberHelp_Help: String { return self._s[2815]! } + public var Checkout_EnterPassword: String { return self._s[2816]! } + public var Share_AuthTitle: String { return self._s[2818]! } + public var Activity_UploadingDocument: String { return self._s[2819]! } + public var State_Connecting: String { return self._s[2820]! } + public var Profile_MessageLifetime1w: String { return self._s[2821]! } + public var Conversation_ContextMenuReport: String { return self._s[2822]! } + public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[2823]! } + public var AutoNightTheme_ScheduledTo: String { return self._s[2824]! } + public var AuthSessions_Terminate: String { return self._s[2825]! } + public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[2826]! } + public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[2827]! } + public var PhotoEditor_Set: String { return self._s[2828]! } + public var EmptyGroupInfo_Title: String { return self._s[2829]! } + public var Login_PadPhoneHelp: String { return self._s[2830]! } + public var PrivacyPolicy_DeclineLastWarning: String { return self._s[2833]! } + public var NotificationsSound_Complete: String { return self._s[2834]! } + public var Group_Info_AdminLog: String { return self._s[2835]! } + public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[2836]! } + public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[2837]! } + public var Conversation_Admin: String { return self._s[2839]! } + public var Conversation_GifTooltip: String { return self._s[2840]! } + public var Passport_NotLoggedInMessage: String { return self._s[2841]! } + public var Profile_MessageLifetimeForever: String { return self._s[2842]! } + public var SharedMedia_EmptyTitle: String { return self._s[2844]! } + public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[2846]! } + public var Username_Help: String { return self._s[2847]! } + public var DialogList_LanguageTooltip: String { return self._s[2849]! } + public var Map_LoadError: String { return self._s[2850]! } + public var Channel_AdminLog_AddMembers: String { return self._s[2851]! } + public var Notification_Exceptions_NewException: String { return self._s[2852]! } + public var TwoStepAuth_EmailTitle: String { return self._s[2853]! } + public var WatchRemote_AlertText: String { return self._s[2854]! } + public var ChatSettings_ConnectionType_Title: String { return self._s[2856]! } + public var Passport_Address_CountryPlaceholder: String { return self._s[2857]! } public func DialogList_AwaitingEncryption(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2857]!, self._r[2857]!, [_0]) + return formatWithArgumentRanges(self._s[2858]!, self._r[2858]!, [_0]) } public func Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2858]!, self._r[2858]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2859]!, self._r[2859]!, [_1, _2, _3]) } - public var Group_AdminLog_EmptyText: String { return self._s[2859]! } - public var AccessDenied_VideoMicrophone: String { return self._s[2861]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[2862]! } - public var Cache_ClearNone: String { return self._s[2863]! } - public var SocksProxySetup_FailedToConnect: String { return self._s[2864]! } - public var Permissions_NotificationsTitle_v0: String { return self._s[2865]! } + public var Group_AdminLog_EmptyText: String { return self._s[2860]! } + public var AccessDenied_VideoMicrophone: String { return self._s[2862]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[2863]! } + public var Cache_ClearNone: String { return self._s[2864]! } + public var SocksProxySetup_FailedToConnect: String { return self._s[2865]! } + public var Permissions_NotificationsTitle_v0: String { return self._s[2866]! } public func Channel_AdminLog_MessageEdited(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2866]!, self._r[2866]!, [_0]) + return formatWithArgumentRanges(self._s[2867]!, self._r[2867]!, [_0]) } - public var Passport_Identity_Country: String { return self._s[2867]! } + public var Passport_Identity_Country: String { return self._s[2868]! } public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2868]!, self._r[2868]!, [_0]) + return formatWithArgumentRanges(self._s[2869]!, self._r[2869]!, [_0]) } - public var AccessDenied_Settings: String { return self._s[2869]! } - public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[2870]! } - public var Month_ShortMay: String { return self._s[2871]! } - public var Compose_NewGroup: String { return self._s[2872]! } - public var Group_Setup_TypePrivate: String { return self._s[2874]! } - public var Login_PadPhoneHelpTitle: String { return self._s[2876]! } - public var Appearance_ThemeDayClassic: String { return self._s[2877]! } - public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[2878]! } - public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[2879]! } - public var Conversation_typing: String { return self._s[2881]! } - public var Paint_Masks: String { return self._s[2882]! } - public var Username_InvalidTaken: String { return self._s[2883]! } - public var Call_StatusNoAnswer: String { return self._s[2884]! } - public var TwoStepAuth_EmailAddSuccess: String { return self._s[2885]! } - public var Passport_Identity_Selfie: String { return self._s[2886]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[2887]! } - public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[2888]! } - public var Conversation_ClearSecretHistory: String { return self._s[2889]! } - public var NetworkUsageSettings_Title: String { return self._s[2891]! } - public var Your_cards_security_code_is_invalid: String { return self._s[2893]! } + public var AccessDenied_Settings: String { return self._s[2870]! } + public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[2871]! } + public var Month_ShortMay: String { return self._s[2872]! } + public var Compose_NewGroup: String { return self._s[2873]! } + public var Group_Setup_TypePrivate: String { return self._s[2875]! } + public var Login_PadPhoneHelpTitle: String { return self._s[2877]! } + public var Appearance_ThemeDayClassic: String { return self._s[2878]! } + public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[2879]! } + public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[2880]! } + public var Conversation_typing: String { return self._s[2882]! } + public var Paint_Masks: String { return self._s[2883]! } + public var Username_InvalidTaken: String { return self._s[2884]! } + public var Call_StatusNoAnswer: String { return self._s[2885]! } + public var TwoStepAuth_EmailAddSuccess: String { return self._s[2886]! } + public var Passport_Identity_Selfie: String { return self._s[2887]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[2888]! } + public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[2889]! } + public var Conversation_ClearSecretHistory: String { return self._s[2890]! } + public var NetworkUsageSettings_Title: String { return self._s[2892]! } + public var Your_cards_security_code_is_invalid: String { return self._s[2894]! } public func Notification_LeftChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2895]!, self._r[2895]!, [_0]) + return formatWithArgumentRanges(self._s[2896]!, self._r[2896]!, [_0]) } public func Call_CallInProgressMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2896]!, self._r[2896]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2897]!, self._r[2897]!, [_1, _2]) } - public var SaveIncomingPhotosSettings_From: String { return self._s[2898]! } - public var Map_LiveLocationTitle: String { return self._s[2899]! } - public var Login_InfoAvatarAdd: String { return self._s[2900]! } - public var Passport_Identity_FilesView: String { return self._s[2901]! } - public var UserInfo_GenericPhoneLabel: String { return self._s[2902]! } - public var Privacy_Calls_NeverAllow: String { return self._s[2903]! } + public var SaveIncomingPhotosSettings_From: String { return self._s[2899]! } + public var Map_LiveLocationTitle: String { return self._s[2900]! } + public var Login_InfoAvatarAdd: String { return self._s[2901]! } + public var Passport_Identity_FilesView: String { return self._s[2902]! } + public var UserInfo_GenericPhoneLabel: String { return self._s[2903]! } + public var Privacy_Calls_NeverAllow: String { return self._s[2904]! } public func Contacts_AddPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2904]!, self._r[2904]!, [_0]) + return formatWithArgumentRanges(self._s[2905]!, self._r[2905]!, [_0]) } - public var TwoStepAuth_ConfirmationText: String { return self._s[2905]! } - public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[2906]! } - public var Channel_AdminLogFilter_AdminsAll: String { return self._s[2907]! } - public var Tour_Title2: String { return self._s[2908]! } - public var Conversation_FileOpenIn: String { return self._s[2909]! } - public var Checkout_ErrorPrecheckoutFailed: String { return self._s[2910]! } - public var Wallpaper_Set: String { return self._s[2911]! } - public var Passport_Identity_Translations: String { return self._s[2913]! } + public var TwoStepAuth_ConfirmationText: String { return self._s[2906]! } + public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[2907]! } + public var Channel_AdminLogFilter_AdminsAll: String { return self._s[2908]! } + public var Tour_Title2: String { return self._s[2909]! } + public var Conversation_FileOpenIn: String { return self._s[2910]! } + public var Checkout_ErrorPrecheckoutFailed: String { return self._s[2911]! } + public var Wallpaper_Set: String { return self._s[2912]! } + public var Passport_Identity_Translations: String { return self._s[2914]! } public func Channel_AdminLog_MessageChangedChannelAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2914]!, self._r[2914]!, [_0]) + return formatWithArgumentRanges(self._s[2915]!, self._r[2915]!, [_0]) } - public var Channel_LeaveChannel: String { return self._s[2915]! } + public var Channel_LeaveChannel: String { return self._s[2916]! } public func PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2916]!, self._r[2916]!, [_1]) + return formatWithArgumentRanges(self._s[2917]!, self._r[2917]!, [_1]) } - public var PhotoEditor_HighlightsTint: String { return self._s[2917]! } - public var Passport_Email_Delete: String { return self._s[2918]! } - public var Conversation_Mute: String { return self._s[2920]! } - public var Channel_AdminLog_CanSendMessages: String { return self._s[2922]! } + public var PhotoEditor_HighlightsTint: String { return self._s[2918]! } + public var Passport_Email_Delete: String { return self._s[2919]! } + public var Conversation_Mute: String { return self._s[2921]! } + public var Channel_AdminLog_CanSendMessages: String { return self._s[2923]! } public func Notification_PassportValuesSentMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2924]!, self._r[2924]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2925]!, self._r[2925]!, [_1, _2]) } - public var Calls_CallTabDescription: String { return self._s[2925]! } - public var Passport_Identity_NativeNameHelp: String { return self._s[2926]! } - public var Common_No: String { return self._s[2927]! } - public var Weekday_Sunday: String { return self._s[2928]! } - public var Notification_Reply: String { return self._s[2929]! } - public var Conversation_ViewMessage: String { return self._s[2930]! } + public var Calls_CallTabDescription: String { return self._s[2926]! } + public var Passport_Identity_NativeNameHelp: String { return self._s[2927]! } + public var Common_No: String { return self._s[2928]! } + public var Weekday_Sunday: String { return self._s[2929]! } + public var Notification_Reply: String { return self._s[2930]! } + public var Conversation_ViewMessage: String { return self._s[2931]! } public func Checkout_SavePasswordTimeoutAndFaceId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2931]!, self._r[2931]!, [_0]) - } - public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2932]!, self._r[2932]!, [_0]) } - public var Message_PinnedDocumentMessage: String { return self._s[2933]! } - public var DialogList_TabTitle: String { return self._s[2935]! } - public var Passport_FieldEmail: String { return self._s[2936]! } - public var Conversation_UnpinMessageAlert: String { return self._s[2937]! } - public var Passport_Address_TypeBankStatement: String { return self._s[2938]! } - public var Passport_Identity_ExpiryDate: String { return self._s[2939]! } - public var Privacy_Calls_P2P: String { return self._s[2940]! } - public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2942]!, self._r[2942]!, [_0]) + public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2933]!, self._r[2933]!, [_0]) } - public var SocksProxySetup_UseForCallsHelp: String { return self._s[2943]! } - public var EnterPasscode_ChangeTitle: String { return self._s[2944]! } - public var Passport_InfoText: String { return self._s[2945]! } - public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[2946]! } + public var Message_PinnedDocumentMessage: String { return self._s[2934]! } + public var DialogList_TabTitle: String { return self._s[2936]! } + public var Passport_FieldEmail: String { return self._s[2937]! } + public var Conversation_UnpinMessageAlert: String { return self._s[2938]! } + public var Passport_Address_TypeBankStatement: String { return self._s[2939]! } + public var Passport_Identity_ExpiryDate: String { return self._s[2940]! } + public var Privacy_Calls_P2P: String { return self._s[2941]! } + public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2943]!, self._r[2943]!, [_0]) + } + public var SocksProxySetup_UseForCallsHelp: String { return self._s[2944]! } + public var EnterPasscode_ChangeTitle: String { return self._s[2945]! } + public var Passport_InfoText: String { return self._s[2946]! } + public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[2947]! } public func Login_InvalidPhoneEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2947]!, self._r[2947]!, [_0]) + return formatWithArgumentRanges(self._s[2948]!, self._r[2948]!, [_0]) } public func Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2948]!, self._r[2948]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2949]!, self._r[2949]!, [_1, _2, _3]) } - public var Passport_Identity_EditDriversLicense: String { return self._s[2949]! } - public var Conversation_TapAndHoldToRecord: String { return self._s[2951]! } + public var Passport_Identity_EditDriversLicense: String { return self._s[2950]! } + public var Conversation_TapAndHoldToRecord: String { return self._s[2952]! } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2952]!, self._r[2952]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2953]!, self._r[2953]!, [_1, _2]) } - public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[2954]! } + public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[2955]! } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2956]!, self._r[2956]!, [_0]) + return formatWithArgumentRanges(self._s[2957]!, self._r[2957]!, [_0]) } - public var DialogList_Unread: String { return self._s[2957]! } + public var DialogList_Unread: String { return self._s[2958]! } public func PUSH_CHAT_MESSAGE_GIF(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2958]!, self._r[2958]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2959]!, self._r[2959]!, [_1, _2]) } - public var User_DeletedAccount: String { return self._s[2959]! } + public var User_DeletedAccount: String { return self._s[2960]! } public func Watch_Time_ShortYesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2960]!, self._r[2960]!, [_0]) + return formatWithArgumentRanges(self._s[2961]!, self._r[2961]!, [_0]) } - public var UserInfo_NotificationsDefault: String { return self._s[2961]! } - public var SharedMedia_CategoryMedia: String { return self._s[2962]! } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[2963]! } - public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[2964]! } - public var Watch_ChatList_Compose: String { return self._s[2965]! } - public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[2966]! } - public var Watch_Microphone_Access: String { return self._s[2967]! } - public var Group_Setup_HistoryHeader: String { return self._s[2968]! } - public var Activity_UploadingPhoto: String { return self._s[2969]! } - public var Conversation_Edit: String { return self._s[2971]! } - public var Group_ErrorSendRestrictedMedia: String { return self._s[2972]! } - public var Login_TermsOfServiceDecline: String { return self._s[2973]! } - public var Message_PinnedContactMessage: String { return self._s[2974]! } + public var UserInfo_NotificationsDefault: String { return self._s[2962]! } + public var SharedMedia_CategoryMedia: String { return self._s[2963]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[2964]! } + public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[2965]! } + public var Watch_ChatList_Compose: String { return self._s[2966]! } + public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[2967]! } + public var Watch_Microphone_Access: String { return self._s[2968]! } + public var Group_Setup_HistoryHeader: String { return self._s[2969]! } + public var Activity_UploadingPhoto: String { return self._s[2970]! } + public var Conversation_Edit: String { return self._s[2972]! } + public var Group_ErrorSendRestrictedMedia: String { return self._s[2973]! } + public var Login_TermsOfServiceDecline: String { return self._s[2974]! } + public var Message_PinnedContactMessage: String { return self._s[2975]! } public func Channel_AdminLog_MessageRestrictedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2975]!, self._r[2975]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2976]!, self._r[2976]!, [_1, _2]) } public func Login_PhoneBannedEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2976]!, self._r[2976]!, [_1, _2, _3, _4, _5]) + return formatWithArgumentRanges(self._s[2977]!, self._r[2977]!, [_1, _2, _3, _4, _5]) } - public var TwoStepAuth_AdditionalPassword: String { return self._s[2978]! } + public var TwoStepAuth_AdditionalPassword: String { return self._s[2979]! } public func PUSH_CHAT_DELETE_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2979]!, self._r[2979]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2980]!, self._r[2980]!, [_1, _2]) } - public var Passport_Phone_EnterOtherNumber: String { return self._s[2980]! } - public var Message_PinnedPhotoMessage: String { return self._s[2981]! } - public var Passport_FieldPhone: String { return self._s[2982]! } - public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[2983]! } - public var InfoPlist_NSCameraUsageDescription: String { return self._s[2985]! } - public var Conversation_Call: String { return self._s[2986]! } - public var Common_TakePhoto: String { return self._s[2988]! } - public var Channel_NotificationLoading: String { return self._s[2989]! } + public var Passport_Phone_EnterOtherNumber: String { return self._s[2981]! } + public var Message_PinnedPhotoMessage: String { return self._s[2982]! } + public var Passport_FieldPhone: String { return self._s[2983]! } + public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[2984]! } + public var InfoPlist_NSCameraUsageDescription: String { return self._s[2986]! } + public var Conversation_Call: String { return self._s[2987]! } + public var Common_TakePhoto: String { return self._s[2989]! } + public var Channel_NotificationLoading: String { return self._s[2990]! } public func Notification_Exceptions_Sound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2990]!, self._r[2990]!, [_0]) + return formatWithArgumentRanges(self._s[2991]!, self._r[2991]!, [_0]) } public func PUSH_CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2991]!, self._r[2991]!, [_1]) + return formatWithArgumentRanges(self._s[2992]!, self._r[2992]!, [_1]) } - public var Permissions_SiriTitle_v0: String { return self._s[2992]! } + public var Permissions_SiriTitle_v0: String { return self._s[2993]! } public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2993]!, self._r[2993]!, [_0]) + return formatWithArgumentRanges(self._s[2994]!, self._r[2994]!, [_0]) } - public var Channel_MessagePhotoRemoved: String { return self._s[2994]! } - public var Common_edit: String { return self._s[2995]! } - public var PrivacySettings_AuthSessions: String { return self._s[2996]! } - public var Month_ShortJune: String { return self._s[2997]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[2998]! } - public var Call_ReportSend: String { return self._s[2999]! } - public var Watch_LastSeen_JustNow: String { return self._s[3000]! } - public var Notifications_MessageNotifications: String { return self._s[3001]! } - public var BroadcastListInfo_AddRecipient: String { return self._s[3003]! } - public var Group_Status: String { return self._s[3004]! } + public var Channel_MessagePhotoRemoved: String { return self._s[2995]! } + public var Common_edit: String { return self._s[2996]! } + public var PrivacySettings_AuthSessions: String { return self._s[2997]! } + public var Month_ShortJune: String { return self._s[2998]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[2999]! } + public var Call_ReportSend: String { return self._s[3000]! } + public var Watch_LastSeen_JustNow: String { return self._s[3001]! } + public var Notifications_MessageNotifications: String { return self._s[3002]! } + public var BroadcastListInfo_AddRecipient: String { return self._s[3004]! } + public var Group_Status: String { return self._s[3005]! } public func AutoNightTheme_LocationHelp(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3005]!, self._r[3005]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3006]!, self._r[3006]!, [_0, _1]) } - public var ShareMenu_ShareTo: String { return self._s[3006]! } - public var Conversation_Moderate_Ban: String { return self._s[3007]! } + public var ShareMenu_ShareTo: String { return self._s[3007]! } + public var Conversation_Moderate_Ban: String { return self._s[3008]! } public func Conversation_DeleteMessagesFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3008]!, self._r[3008]!, [_0]) + return formatWithArgumentRanges(self._s[3009]!, self._r[3009]!, [_0]) } - public var SharedMedia_ViewInChat: String { return self._s[3009]! } - public var Map_LiveLocationFor8Hours: String { return self._s[3010]! } + public var SharedMedia_ViewInChat: String { return self._s[3010]! } + public var Map_LiveLocationFor8Hours: String { return self._s[3011]! } public func PUSH_PINNED_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3011]!, self._r[3011]!, [_1]) - } - public func PUSH_PINNED_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3012]!, self._r[3012]!, [_1]) } + public func PUSH_PINNED_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3013]!, self._r[3013]!, [_1]) + } public func Map_AccurateTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3014]!, self._r[3014]!, [_0]) + return formatWithArgumentRanges(self._s[3015]!, self._r[3015]!, [_0]) } - public var Map_OpenInHereMaps: String { return self._s[3015]! } - public var Appearance_ReduceMotion: String { return self._s[3016]! } + public var Map_OpenInHereMaps: String { return self._s[3016]! } + public var Appearance_ReduceMotion: String { return self._s[3017]! } public func PUSH_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3017]!, self._r[3017]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3018]!, self._r[3018]!, [_1, _2]) } - public var Channel_Setup_TypePublicHelp: String { return self._s[3018]! } - public var Passport_Identity_EditInternalPassport: String { return self._s[3019]! } - public var PhotoEditor_Skip: String { return self._s[3020]! } - public func Map_ETAHours(_ value: Int32) -> String { + public var Channel_Setup_TypePublicHelp: String { return self._s[3019]! } + public var Passport_Identity_EditInternalPassport: String { return self._s[3020]! } + public var PhotoEditor_Skip: String { return self._s[3021]! } + public func SharedMedia_File(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, "\(value)") } - public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { + public func ForwardedContacts(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Minutes(_ value: Int32) -> String { + public func ForwardedLocations(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, "\(value)") } - public func QuickSend_Photos(_ value: Int32) -> String { + public func StickerPack_AddStickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedVideos(_ value: Int32) -> String { + public func Invitation_Members(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreSimple(_ value: Int32) -> String { + public func Map_ETAMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, "\(value)") } - public func GroupInfo_ParticipantCount(_ value: Int32) -> String { + public func MessageTimer_ShortWeeks(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[7 * 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[8 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, selector) return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, _1, _2) } - public func Invitation_Members(_ value: Int32) -> String { + public func ChatList_DeleteConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreExtended(_ value: Int32) -> String { + public func Watch_UserInfo_Mute(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { + public func Map_ETAHours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, "\(value)") } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { + public func Call_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Media_SharePhoto(_ value: Int32) -> String { + public func MuteExpires_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + public func Conversation_StatusOnline(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Video(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Conversation_StatusOnline(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, "\(value)") - } - 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_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + 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[19 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_Months(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_Seconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Notifications_Exceptions(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[28 * 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[29 * 6 + Int(form.rawValue)]!, _1, _2) + return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, _2, _1, _3) } public func Media_ShareVideo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedAudios(_ value: Int32) -> String { + public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, "\(value)") } - 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[32 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func MessageTimer_Hours(_ value: Int32) -> String { + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, "\(value)") } - public func UserCount(_ value: Int32) -> String { + public func LastSeen_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + public func MessageTimer_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[35 * 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[36 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func StickerPack_StickerCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[37 * 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[38 * 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[39 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MessagePoll_VotedCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func SharedMedia_Link(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[42 * 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[43 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[44 * 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[45 * 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[46 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Passport_Scans(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[47 * 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[48 * 6 + Int(form.rawValue)]!, _0, _1) - } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Contacts_ImportersCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[50 * 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[51 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MessageTimer_Years(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MuteExpires_Hours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, "\(value)") } public func ForwardedVideoMessages(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Call_Seconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func AttachmentMenu_SendItem(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_ShortDays(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func InviteText_ContactsCountText(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func SharedMedia_File(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func SharedMedia_Photo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Call_ShortMinutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, "\(value)") } public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, _1, _2) + return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, _1, _2) } - public func ForwardedMessages(_ value: Int32) -> String { + public func AttachmentMenu_SendGif(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func StickerPack_StickerCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[25 * 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[26 * 6 + Int(form.rawValue)]!, _1, _2) + } + 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[27 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func MuteFor_Days(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_ShortDays(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Conversation_StatusSubscribers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[33 * 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[34 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MessagePoll_VotedCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func InviteText_ContactsCountText(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func SharedMedia_Generic(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Notification_GameScoreSimple(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func QuickSend_Photos(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedAudios(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func StickerPack_AddMaskCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_Months(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_Minutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[46 * 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[47 * 6 + Int(form.rawValue)]!, _1, _2) } public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedLocations(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteExpires_Minutes(_ value: Int32) -> String { + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedFiles(_ value: Int32) -> String { + public func SharedMedia_Video(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, "\(value)") } public func Media_ShareItem(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Passport_Scans(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_Weeks(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Media_SharePhoto(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Notification_GameScoreExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[58 * 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[59 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Notifications_Exceptions(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedFiles(_ 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 Call_ShortMinutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func LastSeen_HoursAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Call_Seconds(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func SharedMedia_Photo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[68 * 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[69 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func MuteExpires_Days(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedVideos(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func AttachmentMenu_SendItem(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Conversation_StatusMembers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, "\(value)") + } + 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[75 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func ForwardedGifs(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedMessages(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedStickers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[78 * 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[78 * 6 + Int(form.rawValue)]!, _0, _1) } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { + public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, "\(value)") } @@ -3708,99 +3709,99 @@ public final class PresentationStrings { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, "\(value)") } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { + public func GroupInfo_ParticipantCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + public func Contacts_ImportersCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Map_ETAMinutes(_ value: Int32) -> String { + public func MuteFor_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteExpires_Days(_ value: Int32) -> String { + public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedPolls(_ value: Int32) -> String { + public func MessageTimer_Years(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, "\(value)") } - public func LastSeen_HoursAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[86 * 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[86 * 6 + Int(form.rawValue)]!, _1, _2) } - public func MessageTimer_Days(_ value: Int32) -> String { + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { + public func MessageTimer_Seconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedGifs(_ value: Int32) -> String { + public func MessageTimer_ShortHours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Weeks(_ value: Int32) -> String { + public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[90 * 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[91 * 6 + Int(form.rawValue)]!, _2, _1, _3) + public func SharedMedia_Link(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Conversation_StatusSubscribers(_ value: Int32) -> String { + public func MessageTimer_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedPhotos(_ value: Int32) -> String { + public func UserCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortWeeks(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + 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[95 * 6 + Int(form.rawValue)]!, _1, _2) + return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func ForwardedContacts(_ value: Int32) -> String { + public func ForwardedPhotos(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[96 * 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[97 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedStickers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteFor_Days(_ value: Int32) -> String { + public func MuteExpires_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[99 * 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[100 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Call_Minutes(_ value: Int32) -> String { + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Generic(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[103 * 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[103 * 6 + Int(form.rawValue)]!, _1, _2) } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + public func ForwardedPolls(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, "\(value)") } diff --git a/TelegramUI/Resources/PresentationStrings.mapping b/TelegramUI/Resources/PresentationStrings.mapping index 12f36d3b251df41d67c7cade9479447efe6de578..d0f96f9e498e3df3abfd8ca31b7f77e1a703f61a 100644 GIT binary patch delta 4394 zcmZWs33yc16`nIXA(;t5m@G4sWU>Qc83=+%s7pu&63sGUCV?a*;brC}88VqS%zHx! zJJt4c->!1hTEJSZb)nK$tvk5X6{@Xu2lQ)eU8q89ZTnTU|9uHm+V7h%+;h%7_uO;- z^PfA1PuQ;d+D5#WwpEKCRTt4wairQS_E(pP?bU^soTz^IL^W;6&MCE6EX$HwD&Y&N z2L4^5=+Q8@E}rTuIKXa+say8<-b^9*)QglUt40~JG!#iE8P_dd%X1gM;z z&9-qcEytS{I_$)(xi;DT)4IhWGuMSilC z%B?Ti#kF_j^Ea)OMz3(%a+*d5*teYK=O2X2EI6rE!h@=>As$iJN8QL?RXqD@Ig{`H(gAg=@goE z0=EV!$Mz;fC1UTfTv2_4J)>TYCFDVG@r^;Mq__FWAkCw9_;`>O(7QY>M1}Mo`$Ocj z9kXi0szGcHZZtT;3C+Jlhd?^zrqjl+A}jR6_6XXrl_-A0Tz@NK$@=^#4b! zrXi4gzM`43(&DmkAM)llRN*7u-9~Qum>+GULhGk?alF}`8A__dT1=B$kMh^j>@Qr> zPV;S_!BLK&6WJVZM{Ymok#;Jv9+~tso!$n;k2u(DoJVa%Fs3%T--9v3CL@m)JkqIWaVvP@A>5 zx%(T|R#K7G;^6C6QZZS1?@IE}8T`shB=1ZIA{Dp$oi-VQjk7ucpfrcLu+8gOt|qjk z>39NncTlA*9mXCp`BP7NBxK$tgYWM^9qjy@4q9MyKwWmSBXSEfv77{_fkDmC{E?`k zC1rofb0#`O>$V)R_{PF(H^P+B=Wvhg?Yz)L(x+#}t@J-z`-8$1@ z63sahue112H-P11>OoJ=;mRJWqPg7FgSu7moI%Rtt9!^v^Z522nnh>x!5&m+J{-Hn zUdqX=)lzXIIV!_kz=geVbq?3`Qn76zOlFv8i;HJW;>&v}YvH+&Nls|e;>MsaIEa!r zDdyfq(3mJjDKuU6HLD{gOG>|s`Cu=4(bvsOt+ijdY9 z^6+Y!OG|j?YVx{jVTO+-phV+_uSwB|bZJz_udk-!az9i~ENhim%oj8iBc(TMHF14J zHS@j{>in_f&Qd7LwhU{RytN~!#`>cs;_JCr0gE;8WeVuzB8RxX$te!qHX%ElRE_$m z4kVfvY{XuVXzgfG#1AXMRwmbM( zJGsP>Vp~RgR2`AwuV7~w_A7Z&7`r>TJB-A1^0qKa*u{5;L36A4aF}Mgx^XN%mXMZ8 z`phPuCmr-i?3Pk5*F|vPYStp;vi6}BOWj~lN1C(=JH!QsSA6!y1b!<53X1T@5h^NB z;ZD{t(9qoMuj_4SZf|L*^-C!AJH+#e!gM5BZXe(V6}O1;8kGuYNQRTgJ5|cI4a37! zQ8ZY{udDDI=Rc_!02-vlGP$Dp7CX=Cr}X6sh$PC#>8sh~fwkl3uTa&Yh%)L6rsDXL zCnlkpg70R{i1wcx8X%UKsnwx%i3^9a`PP24rongh112ecv!7;L*Ex8106pXx0MysB zZvYf9%1!cX1IGq{_>I_JI@U^i1~9BQIm8}v@u2~9|7JcqfIDvGj6qaoo9vnyw4FN# zF<`&TTL+=Lgl`)ppY2k3@d~BD!ygZl!}>k55$$Ko?0p}qa(REA9i?3BWhRn%CH_yB zvld1FUkQs!alEI3pNirJSM$q|7F`4BWbChtDlu)K5s34(#gnRHPVj5t%DJoU9>bNHu4V)a~K( z z$Wic1_{ZlY^wshFJqTHWXpK0zLqqF4#A`J2*dB)TY*8{HUp%mHl6d>bSp~m>M9xE# z*v4jSP>q|Ac!ZB=DB+__37Soh^PB`#x}Si3ChW&wrX~|&X?c>@CTJ>Nm^UY=z`73; z@O-D(G$kW_iDHuNetrkr@z^|bEqp%1Q`Z6r&+^4-lOIS@X_b7NND{#_IEpmLcW0A2+y^^JiYH_ChiaOl@sy$J6Zo3VAxN27 zy75D@_~3dF^dyVSKVNA8G-vS#oALIa%yZWPvQzjA1MfMBaSSZUWLr~YUm!a~${H2j z2&yWsG8S~rfR+QXjIc@7b!9*eMe%y{)hVNTF8_Hw3Xr#BBb64pV3CWz8Ux8299H8- zlNwLqX%&wwi}t(uqjgl|@xVYv{q4&J^C6fblrOTa!2+(@f@&4=PebX2VV<@U#q#2jzp@E40;lj{jzKjtn$CP~Q@23C^{MeOk6CnwKH*kZF^N zt>S|Q#=|`JY{FbTn|lm$)z60`8PFJVO%yj6>hJ=HB-Tz5Rxqr@^>ZMR*gP#FIS2KH zqS%>hmt`?o=v=NgsLZ_xwz4_C<=j+P^AkEESw^@(Uw)lEPygZ#9bwMQeWrq@GU zF2gR$I2m>WyGJqKF5-v|Ho91Lh;w^t7Q+g@YYeP z+_8xYizLQPa%_nAYrcSzG@{{XLWvvZEtd1P_2kVBjvvy58{i{znnII<;MvSoRTvnqR1%xb(OPGU>8DH&*|ojEg21DUqNw9t@1*C|UFdT1#SXgdq14K#G4r497^pA;WBoa1w% zckg}ozyH1W`|f?Y>s{sI6@~6SL&uuLYfV*jNgQpe6^}R7h%YsHK6a()kt%oO(rP--PX}qG`w6^J1P7gJ!XHx8S}dlgHR7iQd zk8HeQgi5)ihnCY*Jk=xILDLlyKaf2D^Sl?yUrz8s=5zSKj-^c?@S2eJM)`$AM- z^*pr8a8Pq15z`}TS~ueUE_KEX@W-r%XtVMHOlriL%TB%!C0oHxEtZg>{X~XV$}hk% z{gf|-XcN82)nVFN{WH9<92UW(KC4FN{Vh{!Iu+K_G1KcyoC=fQ`m#;j+T`MIg~?`p z#m46x%shoUfTzQ zOC0E6#HjG$WH?#Ri zNWJ2<{7TzGqTc2=`^iIpV%q@u=^egifU1GWMwAES) zFHWb}lV=mfcjOgl2Tk8jyV&@m!`2*~(c|(8E`E3rH7w`n2Wf>;0l!}EUQ6!6b^}P( zlG4V*^+UKv6}JzO-|dBsL}YJDOU6+s|J9cE@n?pp!BdmdOT_Lm)M#5WX_#(m?c$~f zT@J89r#3ULB~49OJ$&6T6;K1W52GH9JUL8jm6g!e zWjp-TFga-zKRHY*t*h;VQssHuWaqA7`v^d~j@OR>!hXE4LR|T!M|fA+8*#imV?Bg2 z{Vi%_O7pkGG&R{}#7&58fU4T;ibqGtK^ytm5gfY-Qm=^+&nVfH&3LR3XFv-#jsgl> zc=ssPS+^pHw;e^OV_J_-nit&0$462i+QpH}K7MQrP-^C<#>hK# zGpz7u395QL?eA1m(`EoIkd;BaP_G<8hSh1!Y=Kr7IAGAC#$x_ZT1{tCT}E>}HJ7b^ z8`Pd`HTJ2rRB6X^IoI@))278HbTef;_->U}Dm$U76L-E;%P*_6#M)sOCpsPCmHYGW z9Y>hEdD%FC)XCe%fye-B2{Ekg&acI)ak#gL1X_d|d_qE&|dR#G?@*8O(z=3Q>S zpkWfm_~#mJq#1ThP@NJtH~aP@@t=YH zH_Dgn=xCSD?%|RBV9n!vWIyK73A?zpu(GgKn@}?`lQBQbPw%ICMZn_B5>Ae->Iq5 zEV%xj--F8gd8kSdON$W)=cclYgd7TxS?=c>V;C^^bf!Mvc}7 z?0nBP=c(k=` zPg}TcbZ?+nzV#&@pFy3z%y-XFL;XL)S~5gXO{EfGE`PhO#iE#8*&zM}>PGQaiHqNu zAs78CD{)%q{WnNIbSKF%aAY~f!8oS#S2-3((ofsPZTC6&nJTg`4H;-;8Nx$&-_2i` zrK&vn_^_QX?!uPy=QtHAXQ1zpvC z(f19gB=f(IiFakP7x@pUHjA2kk9hc8v3T*-WtETQj7@F?hH&|i7B?rze{xX*Q}LU; zJ^|!B%EJj-Rq+_?3*mf6(#T+8HOUl@mT&U|30hHo7HXN3(3G0gI<%!w0 z%{Ms2;pGMQ9-w^e!CAa*rIJQ@#q)UAdG%e4(5SBZB`0>o<%S4_}7mRbzC481#}N2X=I{pOaGl1w5?huvgO zO-8k7pB~kWR32B&VU*-^(_s{33G0V|K}kYovVB}tA*^{OBVzLDD2d$Cb1R75!Y8`1 zF&#UKHSN?q08+?@XTi}$Y-FgaLMBN@l1;Z+EHjj14$V`YN2(U;xlj|tRAP~}tjjh) zATHr5DcSsz!3}W%znL3{g*Un|!rJ>=L#2GzK~Q8FpGpIIPJU&M+*X%G&=U@E`C?&F zF60&fB#k{Vjrvq@;Ss>d&BqUe!aRIo9%N8y5#6gC!n?_imF?s#)o$>9_!eg7sv-YC zKASU9-AMWP%n_>C)YsA476{eAMuz@@I+?N8LMpQ?*~Sd2j(?2GQa!7)RGOcCy@Bt} z;1h3!45TtYxHAwAgc_xRn^y8UfE)W;{0LZMHUHmXYH+WCLzz*tYdhOQq2?WJqcS^d zxp@w|_Bt6`wc>|~i;vAxS*01vdOVw>_bNk$B5FLffnPj??Rg`VJ_+jrEPpcE)FvK6 z!kn9-kR^HlVWBPj&|#`@Z-rb2(us1l9Zcx>lFgQE8~f22W!s^Xou1vAw1^Rprar>E z4w2V-jYarha`EU9T1rj)?K#AIEi7xf1{E#D($sb^ji%P3*YRbz!j^Y&mg=_L02|4& z{c1Wg<(F}G#3u~D4B$qHWv`hHnCr84J*M3xo3(^J+U$UKIF+}|-oo5Uvk=^oEm%*Wx2rX@lg}N(=F?#j=ZsQO zy{Ui?9mLYIi?1Z{Ww@KWkCJ=G9=MSuSOBLCFx3f($+jk6nelg|wV5u6<+%&Sp){b5 z$^`hGH2T?hn5x!Pz@R0mft!K`R#W-mfRBpGfV4;6u2P%UWuXpSuNBAL6C6fcr2%cLY1n2+Xq$oo5=2W 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 6aa61a6c61..6339cfe3ea 100644 --- a/TelegramUI/SettingsThemeWallpaperNode.swift +++ b/TelegramUI/SettingsThemeWallpaperNode.swift @@ -101,7 +101,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() } @@ -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() }